@realtimex/sdk 1.6.0 → 1.7.4

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.
@@ -0,0 +1,154 @@
1
+ import {
2
+ AuthenticationError,
3
+ DeveloperApiClient,
4
+ DeveloperApiError,
5
+ NotFoundError,
6
+ ServerError,
7
+ V1AdminModule,
8
+ V1ApiNamespace,
9
+ V1AuthModule,
10
+ V1DocumentModule,
11
+ V1EmbedModule,
12
+ V1OpenAIModule,
13
+ V1SystemModule,
14
+ V1ThreadModule,
15
+ V1UsersModule,
16
+ V1WorkspaceModule,
17
+ ValidationError
18
+ } from "../chunk-PDAMNSF2.mjs";
19
+
20
+ // src/v1/overrides/v1WorkspaceStreaming.ts
21
+ async function* streamWorkspaceChat(client, slug, body) {
22
+ const response = await client.requestRaw("POST", `/v1/workspace/${slug}/stream-chat`, body);
23
+ if (!response.body) {
24
+ throw new Error("Response body is null \u2014 streaming is not supported in this environment");
25
+ }
26
+ const reader = response.body.getReader();
27
+ const decoder = new TextDecoder();
28
+ let buffer = "";
29
+ let isErrorEvent = false;
30
+ try {
31
+ while (true) {
32
+ const { done, value } = await reader.read();
33
+ if (done) break;
34
+ buffer += decoder.decode(value, { stream: true });
35
+ const lines = buffer.split("\n");
36
+ buffer = lines.pop() ?? "";
37
+ for (const line of lines) {
38
+ if (line.startsWith("event: error")) {
39
+ isErrorEvent = true;
40
+ continue;
41
+ }
42
+ if (line.startsWith("data: ")) {
43
+ const jsonStr = line.slice(6).trim();
44
+ if (jsonStr === "[DONE]") {
45
+ isErrorEvent = false;
46
+ continue;
47
+ }
48
+ let data;
49
+ try {
50
+ data = JSON.parse(jsonStr);
51
+ } catch {
52
+ continue;
53
+ }
54
+ if (isErrorEvent) {
55
+ throw new Error(data.error ?? "Unknown streaming error from server");
56
+ }
57
+ yield data;
58
+ }
59
+ }
60
+ }
61
+ } finally {
62
+ reader.releaseLock();
63
+ }
64
+ }
65
+
66
+ // src/v1/overrides/v1ThreadStreaming.ts
67
+ async function* streamThreadChat(client, slug, threadSlug, body) {
68
+ const response = await client.requestRaw(
69
+ "POST",
70
+ `/v1/workspace/${slug}/thread/${threadSlug}/stream-chat`,
71
+ body
72
+ );
73
+ if (!response.body) {
74
+ throw new Error("Response body is null \u2014 streaming is not supported in this environment");
75
+ }
76
+ const reader = response.body.getReader();
77
+ const decoder = new TextDecoder();
78
+ let buffer = "";
79
+ let isErrorEvent = false;
80
+ try {
81
+ while (true) {
82
+ const { done, value } = await reader.read();
83
+ if (done) break;
84
+ buffer += decoder.decode(value, { stream: true });
85
+ const lines = buffer.split("\n");
86
+ buffer = lines.pop() ?? "";
87
+ for (const line of lines) {
88
+ if (line.startsWith("event: error")) {
89
+ isErrorEvent = true;
90
+ continue;
91
+ }
92
+ if (line.startsWith("data: ")) {
93
+ const jsonStr = line.slice(6).trim();
94
+ if (jsonStr === "[DONE]") {
95
+ isErrorEvent = false;
96
+ continue;
97
+ }
98
+ let data;
99
+ try {
100
+ data = JSON.parse(jsonStr);
101
+ } catch {
102
+ continue;
103
+ }
104
+ if (isErrorEvent) {
105
+ throw new Error(data.error ?? "Unknown streaming error from server");
106
+ }
107
+ yield data;
108
+ }
109
+ }
110
+ }
111
+ } finally {
112
+ reader.releaseLock();
113
+ }
114
+ }
115
+
116
+ // src/v1/overrides/v1DocumentUpload.ts
117
+ async function uploadFile(client, file, options = {}) {
118
+ const form = new FormData();
119
+ const filename = options.filename ?? (file instanceof File ? file.name : "upload");
120
+ form.append("file", file, filename);
121
+ return client.requestMultipart("POST", `/v1/document/upload`, form);
122
+ }
123
+ async function uploadFileToFolder(client, file, folderName, options = {}) {
124
+ const form = new FormData();
125
+ const filename = options.filename ?? (file instanceof File ? file.name : "upload");
126
+ form.append("file", file, filename);
127
+ return client.requestMultipart(
128
+ "POST",
129
+ `/v1/document/upload/${encodeURIComponent(folderName)}`,
130
+ form
131
+ );
132
+ }
133
+ export {
134
+ AuthenticationError,
135
+ DeveloperApiClient,
136
+ DeveloperApiError,
137
+ NotFoundError,
138
+ ServerError,
139
+ V1AdminModule,
140
+ V1ApiNamespace,
141
+ V1AuthModule,
142
+ V1DocumentModule,
143
+ V1EmbedModule,
144
+ V1OpenAIModule,
145
+ V1SystemModule,
146
+ V1ThreadModule,
147
+ V1UsersModule,
148
+ V1WorkspaceModule,
149
+ ValidationError,
150
+ streamThreadChat,
151
+ streamWorkspaceChat,
152
+ uploadFile,
153
+ uploadFileToFolder
154
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@realtimex/sdk",
3
- "version": "1.6.0",
3
+ "version": "1.7.4",
4
4
  "description": "SDK for building Local Apps that integrate with RealtimeX",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -10,15 +10,23 @@
10
10
  "import": "./dist/index.mjs",
11
11
  "require": "./dist/index.js",
12
12
  "types": "./dist/index.d.ts"
13
+ },
14
+ "./v1": {
15
+ "import": "./dist/v1/index.mjs",
16
+ "require": "./dist/v1/index.js",
17
+ "types": "./dist/v1/index.d.ts"
13
18
  }
14
19
  },
15
20
  "scripts": {
16
- "build": "node ../scripts/generate-skill.mjs --force && tsup src/index.ts --format cjs,esm --dts --clean",
17
- "dev": "tsup src/index.ts --format cjs,esm --dts --watch",
21
+ "build": "node ../scripts/generate-v1-sdk.mjs --force && node ../scripts/generate-skill.mjs --force && tsup src/index.ts src/v1/index.ts --format cjs,esm --dts --clean",
22
+ "dev": "tsup src/index.ts src/v1/index.ts --format cjs,esm --dts --watch",
18
23
  "test": "vitest run",
19
24
  "contract:verify": "node ../scripts/verify-contract-compat.mjs",
20
25
  "skill:generate": "node ../scripts/generate-skill.mjs",
21
26
  "skill:update": "node ../scripts/generate-skill.mjs --force",
27
+ "sdk:generate": "node ../scripts/generate-v1-sdk.mjs",
28
+ "sdk:generate:force": "node ../scripts/generate-v1-sdk.mjs --force",
29
+ "sdk:diff": "node ../scripts/generate-v1-sdk.mjs --dry-run",
22
30
  "prepublishOnly": "npm run build"
23
31
  },
24
32
  "keywords": [
@@ -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-04-03
5
- sdk_version: 1.6.0
4
+ generated: 2026-04-16
5
+ sdk_version: 1.7.4
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.6.0**. Authentication is automatic when running inside RealtimeX.
10
+ Interact with the RealTimeX platform (`http://localhost:3001`) using `@realtimex/sdk` **v1.7.4**. Authentication is automatic when running inside RealtimeX.
11
11
 
12
12
  `<SKILL_DIR>` below refers to the directory containing this SKILL.md.
13
13
 
@@ -1,6 +1,6 @@
1
1
  # RealTimeX SDK — API Reference
2
2
 
3
- > Auto-generated from `@realtimex/sdk` source · v**1.6.0** · 2026-04-03
3
+ > Auto-generated from `@realtimex/sdk` source · v**1.7.4** · 2026-04-16
4
4
 
5
5
  **Package:** `@realtimex/sdk` (CJS) · **Server:** `http://localhost:3001`
6
6
  **Developer Mode auth:** `Authorization: Bearer <apiKey>`
@@ -51,9 +51,10 @@
51
51
  - `database: DatabaseModule`
52
52
  - `auth: AuthModule`
53
53
  - `credentials: CredentialsModule`
54
+ - `v1: V1ApiNamespace | undefined`
54
55
 
55
56
  ```ts
56
- // Register app with RealtimeX hub and request declared permissions upfront.
57
+ // Developer API (v1) requires apiKey to be set in config.
57
58
  async register(permissions?: string[]): void
58
59
 
59
60
  // Get environment variable (works in Node.js and browser)
@@ -662,3 +663,374 @@ async getPort(): Promise<number>
662
663
  ```
663
664
 
664
665
  ---
666
+
667
+ ## sdk.v1.acpAuth — v1 Acp Auth
668
+
669
+ ### `V1AcpAuthModule`
670
+
671
+ ```ts
672
+ // @see GET /v1/acp/auth/profiles
673
+ async listProfiles(): Promise<unknown>
674
+
675
+ // @see POST /v1/acp/auth/profiles
676
+ async createProfile(): Promise<unknown>
677
+
678
+ // @see GET /v1/acp/auth/status
679
+ async getStatus(): Promise<unknown>
680
+
681
+ // @see DELETE /v1/acp/auth/profiles/{id}
682
+ async deleteProfile(id: string): Promise<unknown>
683
+ ```
684
+
685
+ ---
686
+
687
+ ## sdk.v1.acpCommands — v1 Acp Commands
688
+
689
+ ### `V1AcpCommandsModule`
690
+
691
+ ```ts
692
+ // @see POST /v1/acp/command
693
+ async createCommand(): Promise<unknown>
694
+
695
+ // @see POST /v1/acp/command/permission-decision
696
+ async permissionDecision(): Promise<unknown>
697
+ ```
698
+
699
+ ---
700
+
701
+ ## sdk.v1.admin — v1 Admin
702
+
703
+ ### `V1AdminModule`
704
+
705
+ ```ts
706
+ // Check to see if the instance is in multi-user-mode first. Methods are disabled until multi user mode is enabled via the UI.
707
+ async getIsMultiUserMode(): Promise<unknown>
708
+
709
+ // Check to see if the instance is in multi-user-mode first. Methods are disabled until multi user mode is enabled via the UI.
710
+ async listUsers(): Promise<unknown>
711
+
712
+ // Create a new user with username and password. Methods are disabled until multi user mode is enabled via the UI.
713
+ async createUser(body?: Record<string, unknown>): Promise<unknown>
714
+
715
+ // Update existing user settings. Methods are disabled until multi user mode is enabled via the UI.
716
+ async updateUser(id: string, body?: Record<string, unknown>): Promise<unknown>
717
+
718
+ // Delete existing user by id. Methods are disabled until multi user mode is enabled via the UI.
719
+ async deleteUser(id: string): Promise<unknown>
720
+
721
+ // List all existing invitations to instance regardless of status. Methods are disabled until multi user mode is enabled via the UI.
722
+ async listInvites(): Promise<unknown>
723
+
724
+ // Create a new invite code for someone to use to register with instance. Methods are disabled until multi user mode is enabled via the UI.
725
+ async createInvite(body?: Record<string, unknown>): Promise<unknown>
726
+
727
+ // Deactivates (soft-delete) invite by id. Methods are disabled until multi user mode is enabled via the UI.
728
+ async deleteInvite(id: string): Promise<unknown>
729
+
730
+ // Retrieve a list of users with permissions to access the specified workspace.
731
+ async listWorkspaceUsers(workspaceId: string): Promise<unknown>
732
+
733
+ // Overwrite workspace permissions to only be accessible by the given user ids and admins. Methods are disabled until multi user mode is enabled via the UI.
734
+ async updateUsers(workspaceId: string, body?: Record<string, unknown>): Promise<unknown>
735
+
736
+ // Set workspace permissions to be accessible by the given user ids and admins. Methods are disabled until multi user mode is enabled via the UI.
737
+ async workspacesManageUsers(workspaceSlug: string, body?: Record<string, unknown>): Promise<unknown>
738
+
739
+ // All chats in the system ordered by most recent. Methods are disabled until multi user mode is enabled via the UI.
740
+ async workspaceChats(body?: Record<string, unknown>): Promise<unknown>
741
+
742
+ // Update multi-user preferences for instance. Methods are disabled until multi user mode is enabled via the UI.
743
+ async createPreference(body?: Record<string, unknown>): Promise<unknown>
744
+ ```
745
+
746
+ ---
747
+
748
+ ## sdk.v1.auth — v1 Auth
749
+
750
+ ### `V1AuthModule`
751
+
752
+ ```ts
753
+ // Verify the attached Authentication header contains a valid API token.
754
+ async getAuth(): Promise<unknown>
755
+ ```
756
+
757
+ ---
758
+
759
+ ## sdk.v1.credentials — v1 Credentials
760
+
761
+ ### `V1CredentialsModule`
762
+
763
+ ```ts
764
+ // @see POST /v1/credentials
765
+ async createCredential(): Promise<unknown>
766
+
767
+ // @see GET /v1/credentials
768
+ async listCredentials(): Promise<unknown>
769
+
770
+ // @see GET /v1/credentials/{id}
771
+ async getCredential(id: string): Promise<unknown>
772
+
773
+ // @see PUT /v1/credentials/{id}
774
+ async replaceCredential(id: string): Promise<unknown>
775
+
776
+ // @see DELETE /v1/credentials/{id}
777
+ async deleteCredential(id: string): Promise<unknown>
778
+
779
+ // @see POST /v1/credentials/{id}/restore
780
+ async restore(id: string): Promise<unknown>
781
+ ```
782
+
783
+ ---
784
+
785
+ ## sdk.v1.customThemes — v1 Custom Themes
786
+
787
+ ### `V1CustomThemesModule`
788
+
789
+ ```ts
790
+ // @see GET /v1/custom-themes
791
+ async listCustomThemes(): Promise<unknown>
792
+
793
+ // @see GET /v1/custom-themes/{id}
794
+ async getCustomTheme(id: string): Promise<unknown>
795
+
796
+ // @see POST /v1/custom-themes/{id}
797
+ async updateCustomTheme(id: string): Promise<unknown>
798
+
799
+ // @see DELETE /v1/custom-themes/{id}
800
+ async deleteCustomTheme(id: string): Promise<unknown>
801
+
802
+ // @see POST /v1/custom-themes/new
803
+ async createCustomTheme(): Promise<unknown>
804
+ ```
805
+
806
+ ---
807
+
808
+ ## sdk.v1.desktopEmbed — v1 Desktop Embed
809
+
810
+ ### `V1DesktopEmbedModule`
811
+
812
+ ```ts
813
+ // @see GET /v1/desktop-public-embed/status
814
+ async getStatus(): Promise<unknown>
815
+
816
+ // @see POST /v1/desktop-public-embed/exposures
817
+ async createExposure(): Promise<unknown>
818
+
819
+ // @see POST /v1/desktop-public-embed/exposures/{exposureId}/heartbeat
820
+ async exposuresHeartbeat(exposureId: string): Promise<unknown>
821
+
822
+ // @see GET /v1/desktop-public-embed/exposures/{exposureId}
823
+ async getExposure(exposureId: string): Promise<unknown>
824
+
825
+ // @see DELETE /v1/desktop-public-embed/exposures/{exposureId}
826
+ async deleteExposure(exposureId: string): Promise<unknown>
827
+ ```
828
+
829
+ ---
830
+
831
+ ## sdk.v1.document — v1 Document
832
+
833
+ ### `V1DocumentModule`
834
+
835
+ ```ts
836
+ // Upload a new file to RealTimeX to be parsed and prepared for embedding.
837
+ async uploadLink(body?: Record<string, unknown>): Promise<unknown>
838
+
839
+ // Upload a file by specifying its raw text content and metadata values without having to upload a file.
840
+ async rawText(body?: Record<string, unknown>): Promise<unknown>
841
+
842
+ // List of all locally-stored documents in instance
843
+ async listDocuments(): Promise<unknown>
844
+
845
+ // Get all documents stored in a specific folder.
846
+ async getFolder(folderName: string): Promise<unknown>
847
+
848
+ // Check available filetypes and MIMEs that can be uploaded.
849
+ async listAcceptedFileTypes(): Promise<unknown>
850
+
851
+ // Get the known available metadata schema for when doing a raw-text upload and the acceptable type of value for each key.
852
+ async getMetadataSchema(): Promise<unknown>
853
+
854
+ // Get a single document by its unique RealTimeX document name
855
+ async getDocument(docName: string): Promise<unknown>
856
+
857
+ // Create a new folder inside the documents storage directory.
858
+ async createFolder(body?: Record<string, unknown>): Promise<unknown>
859
+
860
+ // Remove a folder and all its contents from the documents storage directory.
861
+ async deleteRemoveFolder(): Promise<unknown>
862
+
863
+ // Move files within the documents storage directory.
864
+ async moveFiles(body?: Record<string, unknown>): Promise<unknown>
865
+ ```
866
+
867
+ ---
868
+
869
+ ## sdk.v1.embed — v1 Embed
870
+
871
+ ### `V1EmbedModule`
872
+
873
+ ```ts
874
+ // List all active embeds
875
+ async getEmbed(): Promise<unknown>
876
+
877
+ // Get all chats for a specific embed
878
+ async listChats(embedUuid: string): Promise<unknown>
879
+
880
+ // Get chats for a specific embed and session
881
+ async getChat(embedUuid: string, sessionUuid: string): Promise<unknown>
882
+
883
+ // Create a new embed configuration
884
+ async createEmbed(body?: Record<string, unknown>): Promise<unknown>
885
+
886
+ // Update an existing embed configuration
887
+ async updateEmbed(embedUuid: string, body?: Record<string, unknown>): Promise<unknown>
888
+
889
+ // Delete an existing embed configuration
890
+ async deleteEmbed(embedUuid: string): Promise<unknown>
891
+ ```
892
+
893
+ ---
894
+
895
+ ## sdk.v1.openAI — v1 Open A I
896
+
897
+ ### `V1OpenAIModule`
898
+
899
+ ```ts
900
+ // Get all available "models" which are workspaces you can use for chatting.
901
+ async listModels(): Promise<unknown>
902
+
903
+ // Execute a chat with a workspace with OpenAI compatibility. Supports streaming as well. Model must be a workspace slug from /models.
904
+ async chatCompletions(body?: Record<string, unknown>): Promise<unknown>
905
+
906
+ // Get the embeddings of any arbitrary text string. This will use the embedder provider set in the system. Please ensure the token length of each string fits within the context of your embedder model.
907
+ async createEmbedding(body?: Record<string, unknown>): Promise<unknown>
908
+
909
+ // List all the vector database collections connected to RealTimeX. These are essentially workspaces but return their unique vector db identifier - this is the same as the workspace slug.
910
+ async listVectorStores(): Promise<unknown>
911
+ ```
912
+
913
+ ---
914
+
915
+ ## sdk.v1.sttApi — v1 Stt Api
916
+
917
+ ### `V1SttApiModule`
918
+
919
+ ```ts
920
+ // @see POST /v1/stt/groq/transcribe
921
+ async groqTranscribe(body?: Record<string, unknown>): Promise<unknown>
922
+ ```
923
+
924
+ ---
925
+
926
+ ## sdk.v1.system — v1 System
927
+
928
+ ### `V1SystemModule`
929
+
930
+ ```ts
931
+ // Dump all settings to file storage
932
+ async getEnvDump(): Promise<unknown>
933
+
934
+ // Get all current system settings that are defined.
935
+ async getSystem(): Promise<unknown>
936
+
937
+ // Number of all vectors in connected vector database
938
+ async getVectorCount(): Promise<unknown>
939
+
940
+ // Update a system setting or preference.
941
+ async updateEnv(body?: Record<string, unknown>): Promise<unknown>
942
+
943
+ // Export all of the chats from the system in a known format. Output depends on the type sent. Will be send with the correct header for the output.
944
+ async listExportChats(): Promise<unknown>
945
+
946
+ // Permanently remove documents from the system.
947
+ async deleteRemoveDocument(): Promise<unknown>
948
+
949
+ // Returns a health check object with server uptime and version.
950
+ async getHealth(): Promise<unknown>
951
+
952
+ // Returns a health check object with server uptime and version.
953
+ async getHealthVersion2(): Promise<unknown>
954
+
955
+ // Returns a health check object with server uptime and version.
956
+ async getHealthVersion3(): Promise<unknown>
957
+ ```
958
+
959
+ ---
960
+
961
+ ## sdk.v1.thread — v1 Thread
962
+
963
+ ### `V1ThreadModule`
964
+
965
+ ```ts
966
+ // Create a new workspace thread
967
+ async createThread(slug: string, body?: Record<string, unknown>): Promise<unknown>
968
+
969
+ // Update thread settings by its unique slug.
970
+ async updateThread(slug: string, threadSlug: string, body?: Record<string, unknown>): Promise<unknown>
971
+
972
+ // Delete a workspace thread
973
+ async deleteThread(slug: string, threadSlug: string): Promise<unknown>
974
+
975
+ // Get chats for a workspace thread
976
+ async listChats(slug: string, threadSlug: string): Promise<unknown>
977
+
978
+ // Chat with a workspace thread
979
+ async chat(slug: string, threadSlug: string, body?: Record<string, unknown>): Promise<unknown>
980
+
981
+ async streamChat(slug: string, threadSlug: string, body?: Record<string, unknown>): Promise<Response>
982
+ ```
983
+
984
+ ---
985
+
986
+ ## sdk.v1.users — v1 Users
987
+
988
+ ### `V1UsersModule`
989
+
990
+ ```ts
991
+ // List all users
992
+ async listUsers(): Promise<unknown>
993
+
994
+ // Issue a temporary auth token for a user
995
+ async getIssueAuthToken(id: string): Promise<unknown>
996
+ ```
997
+
998
+ ---
999
+
1000
+ ## sdk.v1.workspace — v1 Workspace
1001
+
1002
+ ### `V1WorkspaceModule`
1003
+
1004
+ ```ts
1005
+ // Create a new workspace
1006
+ async createWorkspace(body?: Record<string, unknown>): Promise<unknown>
1007
+
1008
+ // List all current workspaces
1009
+ async listWorkspaces(): Promise<unknown>
1010
+
1011
+ // Get a workspace by its unique slug.
1012
+ async getWorkspace(slug: string): Promise<unknown>
1013
+
1014
+ // Deletes a workspace by its slug.
1015
+ async deleteWorkspace(slug: string): Promise<unknown>
1016
+
1017
+ // Update workspace settings by its unique slug.
1018
+ async updateWorkspace(slug: string, body?: Record<string, unknown>): Promise<unknown>
1019
+
1020
+ // Get a workspaces chats regardless of user by its unique slug.
1021
+ async listChats(slug: string): Promise<unknown>
1022
+
1023
+ // Add or remove documents from a workspace by its unique slug.
1024
+ async updateEmbeddings(slug: string, body?: Record<string, unknown>): Promise<unknown>
1025
+
1026
+ // Add or remove pin from a document in a workspace by its unique slug.
1027
+ async updatePin(slug: string, body?: Record<string, unknown>): Promise<unknown>
1028
+
1029
+ // Execute a chat with a workspace
1030
+ async chat(slug: string, body?: Record<string, unknown>): Promise<unknown>
1031
+
1032
+ // Execute a streamable chat with a workspace
1033
+ async vectorSearch(slug: string, body?: Record<string, unknown>): Promise<unknown>
1034
+ ```
1035
+
1036
+ ---
@@ -1,6 +1,6 @@
1
1
  # Known Issues — Source-Detected
2
2
 
3
- > Auto-generated by `scripts/generate-skill.mjs` · SDK **1.6.0** · 2026-04-03
3
+ > Auto-generated by `scripts/generate-skill.mjs` · SDK **1.7.4** · 2026-04-16
4
4
 
5
5
  Run `node scripts/generate-skill.mjs --force` after SDK source changes to refresh.
6
6
 
@@ -8,7 +8,7 @@
8
8
  * 2. ~/.realtimex.ai/.sdk-app-id file (written by RealtimeX server)
9
9
  * 3. RTX_APP_ID in process.env (injected by RealtimeX for local apps)
10
10
  * 4. RTX_API_KEY in process.env (standalone dev)
11
- * 5. REALTIMEX_API_KEY / REALTIMEX_AI_API_KEY in <envDir>/.env (standalone dev)
11
+ * 5. RTX_API_KEY in <envDir>/.env (standalone dev)
12
12
  * 6. Interactive readline prompt (fallback)
13
13
  */
14
14