@qodo/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/LICENSE +118 -0
  2. package/README.md +121 -0
  3. package/dist/api/agent.d.ts +69 -0
  4. package/dist/api/agent.d.ts.map +1 -0
  5. package/dist/api/agent.js +1034 -0
  6. package/dist/api/agent.js.map +1 -0
  7. package/dist/api/analytics.d.ts +43 -0
  8. package/dist/api/analytics.d.ts.map +1 -0
  9. package/dist/api/analytics.js +163 -0
  10. package/dist/api/analytics.js.map +1 -0
  11. package/dist/api/http.d.ts +5 -0
  12. package/dist/api/http.d.ts.map +1 -0
  13. package/dist/api/http.js +59 -0
  14. package/dist/api/http.js.map +1 -0
  15. package/dist/api/index.d.ts +12 -0
  16. package/dist/api/index.d.ts.map +1 -0
  17. package/dist/api/index.js +17 -0
  18. package/dist/api/index.js.map +1 -0
  19. package/dist/api/taskTracking.d.ts +54 -0
  20. package/dist/api/taskTracking.d.ts.map +1 -0
  21. package/dist/api/taskTracking.js +208 -0
  22. package/dist/api/taskTracking.js.map +1 -0
  23. package/dist/api/types.d.ts +92 -0
  24. package/dist/api/types.d.ts.map +1 -0
  25. package/dist/api/types.js +2 -0
  26. package/dist/api/types.js.map +1 -0
  27. package/dist/api/utils.d.ts +8 -0
  28. package/dist/api/utils.d.ts.map +1 -0
  29. package/dist/api/utils.js +54 -0
  30. package/dist/api/utils.js.map +1 -0
  31. package/dist/api/websocket.d.ts +74 -0
  32. package/dist/api/websocket.d.ts.map +1 -0
  33. package/dist/api/websocket.js +685 -0
  34. package/dist/api/websocket.js.map +1 -0
  35. package/dist/auth/index.d.ts +25 -0
  36. package/dist/auth/index.d.ts.map +1 -0
  37. package/dist/auth/index.js +85 -0
  38. package/dist/auth/index.js.map +1 -0
  39. package/dist/clients/index.d.ts +8 -0
  40. package/dist/clients/index.d.ts.map +1 -0
  41. package/dist/clients/index.js +7 -0
  42. package/dist/clients/index.js.map +1 -0
  43. package/dist/clients/info/InfoClient.d.ts +37 -0
  44. package/dist/clients/info/InfoClient.d.ts.map +1 -0
  45. package/dist/clients/info/InfoClient.js +69 -0
  46. package/dist/clients/info/InfoClient.js.map +1 -0
  47. package/dist/clients/info/index.d.ts +4 -0
  48. package/dist/clients/info/index.d.ts.map +1 -0
  49. package/dist/clients/info/index.js +2 -0
  50. package/dist/clients/info/index.js.map +1 -0
  51. package/dist/clients/info/types.d.ts +21 -0
  52. package/dist/clients/info/types.d.ts.map +1 -0
  53. package/dist/clients/info/types.js +2 -0
  54. package/dist/clients/info/types.js.map +1 -0
  55. package/dist/clients/sessions/SessionsClient.d.ts +34 -0
  56. package/dist/clients/sessions/SessionsClient.d.ts.map +1 -0
  57. package/dist/clients/sessions/SessionsClient.js +71 -0
  58. package/dist/clients/sessions/SessionsClient.js.map +1 -0
  59. package/dist/clients/sessions/index.d.ts +4 -0
  60. package/dist/clients/sessions/index.d.ts.map +1 -0
  61. package/dist/clients/sessions/index.js +2 -0
  62. package/dist/clients/sessions/index.js.map +1 -0
  63. package/dist/clients/sessions/types.d.ts +20 -0
  64. package/dist/clients/sessions/types.d.ts.map +1 -0
  65. package/dist/clients/sessions/types.js +2 -0
  66. package/dist/clients/sessions/types.js.map +1 -0
  67. package/dist/config/ConfigManager.d.ts +43 -0
  68. package/dist/config/ConfigManager.d.ts.map +1 -0
  69. package/dist/config/ConfigManager.js +472 -0
  70. package/dist/config/ConfigManager.js.map +1 -0
  71. package/dist/config/index.d.ts +6 -0
  72. package/dist/config/index.d.ts.map +1 -0
  73. package/dist/config/index.js +7 -0
  74. package/dist/config/index.js.map +1 -0
  75. package/dist/config/urlConfig.d.ts +15 -0
  76. package/dist/config/urlConfig.d.ts.map +1 -0
  77. package/dist/config/urlConfig.js +75 -0
  78. package/dist/config/urlConfig.js.map +1 -0
  79. package/dist/constants/errors.d.ts +2 -0
  80. package/dist/constants/errors.d.ts.map +1 -0
  81. package/dist/constants/errors.js +2 -0
  82. package/dist/constants/errors.js.map +1 -0
  83. package/dist/constants/index.d.ts +7 -0
  84. package/dist/constants/index.d.ts.map +1 -0
  85. package/dist/constants/index.js +11 -0
  86. package/dist/constants/index.js.map +1 -0
  87. package/dist/constants/tools.d.ts +4 -0
  88. package/dist/constants/tools.d.ts.map +1 -0
  89. package/dist/constants/tools.js +4 -0
  90. package/dist/constants/tools.js.map +1 -0
  91. package/dist/constants/versions.d.ts +2 -0
  92. package/dist/constants/versions.d.ts.map +1 -0
  93. package/dist/constants/versions.js +2 -0
  94. package/dist/constants/versions.js.map +1 -0
  95. package/dist/context/buildUserContext.d.ts +18 -0
  96. package/dist/context/buildUserContext.d.ts.map +1 -0
  97. package/dist/context/buildUserContext.js +34 -0
  98. package/dist/context/buildUserContext.js.map +1 -0
  99. package/dist/context/index.d.ts +9 -0
  100. package/dist/context/index.d.ts.map +1 -0
  101. package/dist/context/index.js +9 -0
  102. package/dist/context/index.js.map +1 -0
  103. package/dist/context/messageManager.d.ts +42 -0
  104. package/dist/context/messageManager.d.ts.map +1 -0
  105. package/dist/context/messageManager.js +322 -0
  106. package/dist/context/messageManager.js.map +1 -0
  107. package/dist/context/taskFocus.d.ts +2 -0
  108. package/dist/context/taskFocus.d.ts.map +1 -0
  109. package/dist/context/taskFocus.js +26 -0
  110. package/dist/context/taskFocus.js.map +1 -0
  111. package/dist/context/userInput.d.ts +3 -0
  112. package/dist/context/userInput.d.ts.map +1 -0
  113. package/dist/context/userInput.js +20 -0
  114. package/dist/context/userInput.js.map +1 -0
  115. package/dist/index.d.ts +18 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +21 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/mcp/MCPManager.d.ts +125 -0
  120. package/dist/mcp/MCPManager.d.ts.map +1 -0
  121. package/dist/mcp/MCPManager.js +616 -0
  122. package/dist/mcp/MCPManager.js.map +1 -0
  123. package/dist/mcp/approvedTools.d.ts +4 -0
  124. package/dist/mcp/approvedTools.d.ts.map +1 -0
  125. package/dist/mcp/approvedTools.js +19 -0
  126. package/dist/mcp/approvedTools.js.map +1 -0
  127. package/dist/mcp/baseServer.d.ts +75 -0
  128. package/dist/mcp/baseServer.d.ts.map +1 -0
  129. package/dist/mcp/baseServer.js +107 -0
  130. package/dist/mcp/baseServer.js.map +1 -0
  131. package/dist/mcp/builtinServers.d.ts +15 -0
  132. package/dist/mcp/builtinServers.d.ts.map +1 -0
  133. package/dist/mcp/builtinServers.js +155 -0
  134. package/dist/mcp/builtinServers.js.map +1 -0
  135. package/dist/mcp/dynamicBEServer.d.ts +20 -0
  136. package/dist/mcp/dynamicBEServer.d.ts.map +1 -0
  137. package/dist/mcp/dynamicBEServer.js +52 -0
  138. package/dist/mcp/dynamicBEServer.js.map +1 -0
  139. package/dist/mcp/index.d.ts +19 -0
  140. package/dist/mcp/index.d.ts.map +1 -0
  141. package/dist/mcp/index.js +24 -0
  142. package/dist/mcp/index.js.map +1 -0
  143. package/dist/mcp/mcpInitialization.d.ts +2 -0
  144. package/dist/mcp/mcpInitialization.d.ts.map +1 -0
  145. package/dist/mcp/mcpInitialization.js +56 -0
  146. package/dist/mcp/mcpInitialization.js.map +1 -0
  147. package/dist/mcp/servers/filesystem.d.ts +75 -0
  148. package/dist/mcp/servers/filesystem.d.ts.map +1 -0
  149. package/dist/mcp/servers/filesystem.js +992 -0
  150. package/dist/mcp/servers/filesystem.js.map +1 -0
  151. package/dist/mcp/servers/gerrit.d.ts +19 -0
  152. package/dist/mcp/servers/gerrit.d.ts.map +1 -0
  153. package/dist/mcp/servers/gerrit.js +515 -0
  154. package/dist/mcp/servers/gerrit.js.map +1 -0
  155. package/dist/mcp/servers/git.d.ts +18 -0
  156. package/dist/mcp/servers/git.d.ts.map +1 -0
  157. package/dist/mcp/servers/git.js +441 -0
  158. package/dist/mcp/servers/git.js.map +1 -0
  159. package/dist/mcp/servers/ripgrep.d.ts +34 -0
  160. package/dist/mcp/servers/ripgrep.d.ts.map +1 -0
  161. package/dist/mcp/servers/ripgrep.js +517 -0
  162. package/dist/mcp/servers/ripgrep.js.map +1 -0
  163. package/dist/mcp/servers/shell.d.ts +20 -0
  164. package/dist/mcp/servers/shell.d.ts.map +1 -0
  165. package/dist/mcp/servers/shell.js +603 -0
  166. package/dist/mcp/servers/shell.js.map +1 -0
  167. package/dist/mcp/serversRegistry.d.ts +55 -0
  168. package/dist/mcp/serversRegistry.d.ts.map +1 -0
  169. package/dist/mcp/serversRegistry.js +410 -0
  170. package/dist/mcp/serversRegistry.js.map +1 -0
  171. package/dist/mcp/toolProcessor.d.ts +42 -0
  172. package/dist/mcp/toolProcessor.d.ts.map +1 -0
  173. package/dist/mcp/toolProcessor.js +200 -0
  174. package/dist/mcp/toolProcessor.js.map +1 -0
  175. package/dist/mcp/types.d.ts +29 -0
  176. package/dist/mcp/types.d.ts.map +1 -0
  177. package/dist/mcp/types.js +2 -0
  178. package/dist/mcp/types.js.map +1 -0
  179. package/dist/parser/index.d.ts +72 -0
  180. package/dist/parser/index.d.ts.map +1 -0
  181. package/dist/parser/index.js +967 -0
  182. package/dist/parser/index.js.map +1 -0
  183. package/dist/parser/types.d.ts +153 -0
  184. package/dist/parser/types.d.ts.map +1 -0
  185. package/dist/parser/types.js +6 -0
  186. package/dist/parser/types.js.map +1 -0
  187. package/dist/parser/utils.d.ts +18 -0
  188. package/dist/parser/utils.d.ts.map +1 -0
  189. package/dist/parser/utils.js +64 -0
  190. package/dist/parser/utils.js.map +1 -0
  191. package/dist/sdk/QodoSDK.d.ts +152 -0
  192. package/dist/sdk/QodoSDK.d.ts.map +1 -0
  193. package/dist/sdk/QodoSDK.js +786 -0
  194. package/dist/sdk/QodoSDK.js.map +1 -0
  195. package/dist/sdk/bootstrap.d.ts +16 -0
  196. package/dist/sdk/bootstrap.d.ts.map +1 -0
  197. package/dist/sdk/bootstrap.js +21 -0
  198. package/dist/sdk/bootstrap.js.map +1 -0
  199. package/dist/sdk/builders.d.ts +54 -0
  200. package/dist/sdk/builders.d.ts.map +1 -0
  201. package/dist/sdk/builders.js +117 -0
  202. package/dist/sdk/builders.js.map +1 -0
  203. package/dist/sdk/defaults.d.ts +11 -0
  204. package/dist/sdk/defaults.d.ts.map +1 -0
  205. package/dist/sdk/defaults.js +39 -0
  206. package/dist/sdk/defaults.js.map +1 -0
  207. package/dist/sdk/discovery.d.ts +2 -0
  208. package/dist/sdk/discovery.d.ts.map +1 -0
  209. package/dist/sdk/discovery.js +25 -0
  210. package/dist/sdk/discovery.js.map +1 -0
  211. package/dist/sdk/events.d.ts +168 -0
  212. package/dist/sdk/events.d.ts.map +1 -0
  213. package/dist/sdk/events.js +52 -0
  214. package/dist/sdk/events.js.map +1 -0
  215. package/dist/sdk/index.d.ts +17 -0
  216. package/dist/sdk/index.d.ts.map +1 -0
  217. package/dist/sdk/index.js +17 -0
  218. package/dist/sdk/index.js.map +1 -0
  219. package/dist/sdk/runner/AgentRunner.d.ts +22 -0
  220. package/dist/sdk/runner/AgentRunner.d.ts.map +1 -0
  221. package/dist/sdk/runner/AgentRunner.js +222 -0
  222. package/dist/sdk/runner/AgentRunner.js.map +1 -0
  223. package/dist/sdk/runner/finalize.d.ts +9 -0
  224. package/dist/sdk/runner/finalize.d.ts.map +1 -0
  225. package/dist/sdk/runner/finalize.js +115 -0
  226. package/dist/sdk/runner/finalize.js.map +1 -0
  227. package/dist/sdk/runner/formats.d.ts +7 -0
  228. package/dist/sdk/runner/formats.d.ts.map +1 -0
  229. package/dist/sdk/runner/formats.js +91 -0
  230. package/dist/sdk/runner/formats.js.map +1 -0
  231. package/dist/sdk/runner/index.d.ts +9 -0
  232. package/dist/sdk/runner/index.d.ts.map +1 -0
  233. package/dist/sdk/runner/index.js +9 -0
  234. package/dist/sdk/runner/index.js.map +1 -0
  235. package/dist/sdk/runner/progress.d.ts +3 -0
  236. package/dist/sdk/runner/progress.d.ts.map +1 -0
  237. package/dist/sdk/runner/progress.js +16 -0
  238. package/dist/sdk/runner/progress.js.map +1 -0
  239. package/dist/sdk/schemas.d.ts +50 -0
  240. package/dist/sdk/schemas.d.ts.map +1 -0
  241. package/dist/sdk/schemas.js +145 -0
  242. package/dist/sdk/schemas.js.map +1 -0
  243. package/dist/session/SessionContext.d.ts +86 -0
  244. package/dist/session/SessionContext.d.ts.map +1 -0
  245. package/dist/session/SessionContext.js +395 -0
  246. package/dist/session/SessionContext.js.map +1 -0
  247. package/dist/session/environment.d.ts +42 -0
  248. package/dist/session/environment.d.ts.map +1 -0
  249. package/dist/session/environment.js +27 -0
  250. package/dist/session/environment.js.map +1 -0
  251. package/dist/session/history.d.ts +3 -0
  252. package/dist/session/history.d.ts.map +1 -0
  253. package/dist/session/history.js +67 -0
  254. package/dist/session/history.js.map +1 -0
  255. package/dist/session/index.d.ts +10 -0
  256. package/dist/session/index.d.ts.map +1 -0
  257. package/dist/session/index.js +9 -0
  258. package/dist/session/index.js.map +1 -0
  259. package/dist/session/serverData.d.ts +38 -0
  260. package/dist/session/serverData.d.ts.map +1 -0
  261. package/dist/session/serverData.js +241 -0
  262. package/dist/session/serverData.js.map +1 -0
  263. package/dist/tracking/Tracker.d.ts +55 -0
  264. package/dist/tracking/Tracker.d.ts.map +1 -0
  265. package/dist/tracking/Tracker.js +217 -0
  266. package/dist/tracking/Tracker.js.map +1 -0
  267. package/dist/tracking/index.d.ts +8 -0
  268. package/dist/tracking/index.d.ts.map +1 -0
  269. package/dist/tracking/index.js +8 -0
  270. package/dist/tracking/index.js.map +1 -0
  271. package/dist/tracking/schemas.d.ts +292 -0
  272. package/dist/tracking/schemas.d.ts.map +1 -0
  273. package/dist/tracking/schemas.js +91 -0
  274. package/dist/tracking/schemas.js.map +1 -0
  275. package/dist/types.d.ts +4 -0
  276. package/dist/types.d.ts.map +1 -0
  277. package/dist/types.js +2 -0
  278. package/dist/types.js.map +1 -0
  279. package/dist/utils/extractSetFlags.d.ts +6 -0
  280. package/dist/utils/extractSetFlags.d.ts.map +1 -0
  281. package/dist/utils/extractSetFlags.js +16 -0
  282. package/dist/utils/extractSetFlags.js.map +1 -0
  283. package/dist/utils/formatTimeAgo.d.ts +2 -0
  284. package/dist/utils/formatTimeAgo.d.ts.map +1 -0
  285. package/dist/utils/formatTimeAgo.js +20 -0
  286. package/dist/utils/formatTimeAgo.js.map +1 -0
  287. package/dist/utils/index.d.ts +12 -0
  288. package/dist/utils/index.d.ts.map +1 -0
  289. package/dist/utils/index.js +12 -0
  290. package/dist/utils/index.js.map +1 -0
  291. package/dist/utils/machineId.d.ts +14 -0
  292. package/dist/utils/machineId.d.ts.map +1 -0
  293. package/dist/utils/machineId.js +66 -0
  294. package/dist/utils/machineId.js.map +1 -0
  295. package/dist/utils/pathUtils.d.ts +22 -0
  296. package/dist/utils/pathUtils.d.ts.map +1 -0
  297. package/dist/utils/pathUtils.js +54 -0
  298. package/dist/utils/pathUtils.js.map +1 -0
  299. package/dist/version.d.ts +2 -0
  300. package/dist/version.d.ts.map +1 -0
  301. package/dist/version.js +23 -0
  302. package/dist/version.js.map +1 -0
  303. package/package.json +93 -0
@@ -0,0 +1,395 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs';
3
+ import process from "node:process";
4
+ import { ServerData } from "./serverData.js";
5
+ import { getCurrentEnvironment, getGlobalEnvironment } from "./environment.js";
6
+ import { canonicalizePathSync } from "../utils/index.js";
7
+ /**
8
+ * SessionContext manages global session state that needs to be shared across components
9
+ * This includes project root paths, session information, and other session-specific data
10
+ */
11
+ export class SessionContext {
12
+ command;
13
+ generalInstructions;
14
+ systemPrompt;
15
+ flags;
16
+ sessionHistory;
17
+ model;
18
+ sessionId;
19
+ // NOTE: The static instance is preserved for backward compatibility, but
20
+ // lookups are routed through EnvironmentServices so multiple logical
21
+ // environments can coexist in the same process (e.g., multiple QodoClient
22
+ // instances).
23
+ static instance;
24
+ _projectRootPaths = [];
25
+ _currentWorkingDirectory = process.cwd();
26
+ _executionCwd = undefined; // preferred execution cwd for shell/git when args omit cwd
27
+ _isResumedSession = false;
28
+ availableTools = undefined;
29
+ qodomd = this.getQodoMdContent();
30
+ ignoreTools = undefined;
31
+ _permissions = 'rwx'; // Default permissions
32
+ _previousSessionsSummarizationMap = new Map();
33
+ _deltaFileLinkFormat = undefined;
34
+ constructor(command, generalInstructions = undefined, systemPrompt = undefined, flags = {}, sessionHistory = undefined, model, sessionId = ServerData.getInstance().getSessionId()) {
35
+ this.command = command;
36
+ this.generalInstructions = generalInstructions;
37
+ this.systemPrompt = systemPrompt;
38
+ this.flags = flags;
39
+ this.sessionHistory = sessionHistory;
40
+ this.model = model;
41
+ this.sessionId = sessionId;
42
+ if (this.sessionHistory) {
43
+ this._isResumedSession = true;
44
+ }
45
+ this.availableTools = command.available_tools || sessionHistory?.available_tools;
46
+ this.ignoreTools = command.ignore_tools || sessionHistory?.ignore_tools;
47
+ // Seed project roots with the canonicalized current working directory so
48
+ // Windows drive letter casing and any symlink/virtual-drive aliases are
49
+ // normalized from the start.
50
+ this._projectRootPaths = [canonicalizePathSync(this._currentWorkingDirectory)];
51
+ // Set permissions from command config if available
52
+ if (command.permissions) {
53
+ this.setPermissions(command.permissions);
54
+ }
55
+ }
56
+ static getInstance() {
57
+ const env = getCurrentEnvironment();
58
+ const instance = env.sessionContext ?? SessionContext.instance;
59
+ if (!instance) {
60
+ throw new Error("SessionContext has not been initialized.");
61
+ }
62
+ return instance;
63
+ }
64
+ /**
65
+ * Initialize the session context with validated project root paths
66
+ * This should be called early in the application lifecycle
67
+ */
68
+ static async initialize(flags, command, generalInstructions, systemPrompt, sessionHistory, sessionId) {
69
+ const model = flags.model ?? sessionHistory?.custom_model ?? command.model;
70
+ if (model) {
71
+ ServerData.getInstance().checkModelInput(model);
72
+ }
73
+ // Use session ID from flags if provided, otherwise use the passed sessionId parameter
74
+ const effectiveSessionId = sessionId || flags.sid;
75
+ const instance = new SessionContext(command, generalInstructions, systemPrompt, flags, sessionHistory, model || ServerData.getInstance().getDefaultModel(), effectiveSessionId);
76
+ if (sessionHistory?.projects_root_path && sessionHistory?.projects_root_path.length > 0) {
77
+ // Validate and set project root paths from session history
78
+ await instance.setProjectRootPaths(sessionHistory?.projects_root_path);
79
+ }
80
+ // Register as the default/global instance and on the global environment
81
+ SessionContext.instance = instance;
82
+ const globalEnv = getGlobalEnvironment();
83
+ if (!globalEnv.sessionContext) {
84
+ globalEnv.sessionContext = instance;
85
+ }
86
+ const env = getCurrentEnvironment();
87
+ env.sessionContext = instance;
88
+ return instance;
89
+ }
90
+ static async newSessionContext(flags, command, generalInstructions, systemPrompt, sessionHistory, sessionId) {
91
+ const model = flags.model ?? sessionHistory?.custom_model ?? command.model;
92
+ if (model) {
93
+ ServerData.getInstance().checkModelInput(model);
94
+ }
95
+ // Determine effective session ID. For SDK (flags.sdk), generate a fresh
96
+ // backend session-id when none is provided so each QodoClient gets its
97
+ // own independent session instead of reusing the global default. In SDK
98
+ // mode we require a concrete, isolated session id and fail if generation
99
+ // is not possible.
100
+ let effectiveSessionId = sessionId;
101
+ if (!effectiveSessionId && flags.sdk) {
102
+ effectiveSessionId = await ServerData.getInstance().fetchNewSessionId();
103
+ }
104
+ const sessionContext = new SessionContext(command, generalInstructions, systemPrompt, flags, sessionHistory, model || ServerData.getInstance().getDefaultModel(), effectiveSessionId);
105
+ // By default, start with the canonicalized current working directory as
106
+ // the only project root so that Windows drive aliases and symlinks are
107
+ // normalized consistently with other initialization paths.
108
+ sessionContext._projectRootPaths = [canonicalizePathSync(sessionContext._currentWorkingDirectory)];
109
+ if (sessionHistory?.projects_root_path && sessionHistory?.projects_root_path.length > 0) {
110
+ // Validate and set project root paths from session history
111
+ await sessionContext.setProjectRootPaths(sessionHistory.projects_root_path);
112
+ }
113
+ // Register environment-scoped context without overwriting the global
114
+ // default used by CLI unless none exists yet.
115
+ const env = getCurrentEnvironment();
116
+ env.sessionContext = sessionContext;
117
+ if (!SessionContext.instance) {
118
+ SessionContext.instance = sessionContext;
119
+ const globalEnv = getGlobalEnvironment();
120
+ if (!globalEnv.sessionContext) {
121
+ globalEnv.sessionContext = sessionContext;
122
+ }
123
+ }
124
+ return sessionContext;
125
+ }
126
+ // setInstanceForSDK is kept as a no-op wrapper for backward compatibility
127
+ // with earlier SDK behavior that explicitly overrode the singleton. With the
128
+ // environment model, newSessionContext already registers the context on the
129
+ // current environment, so we just mirror that behavior.
130
+ static setInstanceForSDK(ctx) {
131
+ const env = getCurrentEnvironment();
132
+ env.sessionContext = ctx;
133
+ if (!SessionContext.instance) {
134
+ SessionContext.instance = ctx;
135
+ const globalEnv = getGlobalEnvironment();
136
+ if (!globalEnv.sessionContext) {
137
+ globalEnv.sessionContext = ctx;
138
+ }
139
+ }
140
+ }
141
+ getQodoMdContent() {
142
+ const env = getCurrentEnvironment();
143
+ const quiet = !!env?.sdkMode;
144
+ // search for AGENTS.md first, then fallback to qodo.md for backward compatibility
145
+ const agentsMdPath = path.join(this._currentWorkingDirectory, 'AGENTS.md');
146
+ const qodoMdPath = path.join(this._currentWorkingDirectory, 'qodo.md');
147
+ // Try AGENTS.md first
148
+ let filePath = agentsMdPath;
149
+ let fileName = 'AGENTS.md';
150
+ // Fallback to qodo.md if AGENTS.md doesn't exist
151
+ if (!fs.existsSync(agentsMdPath) && fs.existsSync(qodoMdPath)) {
152
+ filePath = qodoMdPath;
153
+ fileName = 'qodo.md';
154
+ }
155
+ if (fs.existsSync(filePath)) {
156
+ try {
157
+ // first check when it was last modified
158
+ const stats = fs.statSync(filePath);
159
+ const lastModified = stats.mtime;
160
+ // if it wasn't modified in the last week, log a warning
161
+ const oneWeekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
162
+ if (lastModified < oneWeekAgo) {
163
+ if (!quiet) {
164
+ console.warn(`${fileName} file may be outdated. Consider re-running 'qodo init' to refresh your project context.`);
165
+ }
166
+ }
167
+ return fs.readFileSync(filePath, 'utf-8');
168
+ }
169
+ catch (error) {
170
+ if (!quiet) {
171
+ console.error(`Error reading ${fileName} file: ${error instanceof Error ? error.message : String(error)}`);
172
+ }
173
+ }
174
+ }
175
+ else {
176
+ if (!quiet) {
177
+ console.warn(`AGENTS.md file not found in the current folder, consider running 'qodo init'.`);
178
+ }
179
+ }
180
+ }
181
+ setCommand(command) {
182
+ this.command = command;
183
+ // Update permissions if specified in the new command
184
+ if (command.permissions) {
185
+ this.setPermissions(command.permissions);
186
+ }
187
+ }
188
+ /**
189
+ * Set project root paths with access validation
190
+ */
191
+ async setProjectRootPaths(paths) {
192
+ const cwd = canonicalizePathSync(this._currentWorkingDirectory);
193
+ const allPaths = [cwd, ...paths];
194
+ // Check if current working directory is already included in session's project root paths
195
+ const isCwdIncluded = paths.some(sessionPath => {
196
+ const resolvedPath = canonicalizePathSync(sessionPath);
197
+ const resolvedCwd = cwd;
198
+ return resolvedCwd === resolvedPath || resolvedCwd.startsWith(resolvedPath + path.sep);
199
+ });
200
+ const pathsToValidate = isCwdIncluded ? paths : allPaths;
201
+ // Validate access to each directory
202
+ const validatedPaths = [];
203
+ for (const dirPath of pathsToValidate) {
204
+ try {
205
+ const resolvedDir = canonicalizePathSync(dirPath);
206
+ await fs.promises.access(resolvedDir, fs.constants.R_OK);
207
+ validatedPaths.push(resolvedDir);
208
+ }
209
+ catch (error) {
210
+ console.warn(`Warning: Directory ${dirPath} is not accessible and will be skipped:`, error instanceof Error ? error.message : String(error));
211
+ }
212
+ }
213
+ // Remove duplicates and set the validated paths
214
+ this._projectRootPaths = [...new Set(validatedPaths)];
215
+ return [...new Set(validatedPaths)];
216
+ }
217
+ getProjectRootPaths() {
218
+ return [...this._projectRootPaths];
219
+ }
220
+ getAvailableTools() {
221
+ return this.availableTools;
222
+ }
223
+ getIgnoreTools() {
224
+ return this.ignoreTools;
225
+ }
226
+ getLogOutput() {
227
+ if (this.flags.silent) {
228
+ return "Silent";
229
+ }
230
+ return this.flags.log;
231
+ }
232
+ getSessionId() {
233
+ const sessionId = this.sessionHistory?.sessionId || this.sessionId || ServerData.getInstance().getSessionId();
234
+ if (!sessionId) {
235
+ throw new Error("Session ID is not set. Please contact support.");
236
+ }
237
+ return sessionId;
238
+ }
239
+ getQodoMd() {
240
+ return this.qodomd;
241
+ }
242
+ getGeneralInstructions() {
243
+ return this.generalInstructions;
244
+ }
245
+ getSystemPrompt() {
246
+ return this.systemPrompt;
247
+ }
248
+ getCommand() {
249
+ return this.command;
250
+ }
251
+ getFlags() {
252
+ return this.flags;
253
+ }
254
+ isResumedSession() {
255
+ return this._isResumedSession;
256
+ }
257
+ /**
258
+ * Returns the application type. In SDK context, this is always "sdk".
259
+ */
260
+ getAppType() {
261
+ return "sdk";
262
+ }
263
+ setModel(model) {
264
+ return this.model = model;
265
+ }
266
+ getModel() {
267
+ return this.model;
268
+ }
269
+ getInternalSessionHistoryMessages() {
270
+ return this.sessionHistory?.messages;
271
+ }
272
+ getExecutionStrategy() {
273
+ if (this.flags.plan && this.flags.act) {
274
+ throw new Error("Cannot specify both --plan and --act flags. Please choose one.");
275
+ }
276
+ if (this.flags.plan) {
277
+ return "plan";
278
+ }
279
+ else if (this.flags.act) {
280
+ return "act";
281
+ }
282
+ else if (this.sessionHistory?.execution_strategy) {
283
+ return this.sessionHistory.execution_strategy;
284
+ }
285
+ else if (this.command.execution_strategy) {
286
+ return this.command.execution_strategy;
287
+ }
288
+ }
289
+ getPermissions() {
290
+ return this._permissions;
291
+ }
292
+ setPermissions(permissions) {
293
+ // Validate permissions format
294
+ const validPermissions = /^(r?w?x?|-|rw|rx|wx|rwx)$/;
295
+ if (!validPermissions.test(permissions)) {
296
+ console.warn(`Invalid permissions format: ${permissions}. Using default 'rwx'.`);
297
+ return;
298
+ }
299
+ this._permissions = permissions;
300
+ }
301
+ isDebugMode() {
302
+ return !!this.flags.debug || process.env.QODO_DEBUG === "true";
303
+ }
304
+ setDeltaFileLinkFormat(format) {
305
+ this._deltaFileLinkFormat = format;
306
+ }
307
+ getDeltaFileLinkFormat() {
308
+ return this._deltaFileLinkFormat;
309
+ }
310
+ serialize() {
311
+ return {
312
+ projectRootPaths: this._projectRootPaths,
313
+ currentWorkingDirectory: this._currentWorkingDirectory,
314
+ executionCwd: this._executionCwd,
315
+ isResumedSession: this._isResumedSession,
316
+ availableTools: this.availableTools,
317
+ qodomd: this.qodomd,
318
+ appType: "sdk",
319
+ command: this.command,
320
+ generalInstructions: this.generalInstructions,
321
+ systemPrompt: this.systemPrompt,
322
+ flags: this.flags,
323
+ model: this.model,
324
+ permissions: this._permissions,
325
+ previousSessionsSummarization: Object.fromEntries(this._previousSessionsSummarizationMap),
326
+ ignoreTools: this.ignoreTools,
327
+ deltaFileLinkFormat: this._deltaFileLinkFormat,
328
+ };
329
+ }
330
+ /**
331
+ * Add a new project root path with validation
332
+ */
333
+ async addProjectRootPath(dirPath) {
334
+ try {
335
+ const resolvedDir = canonicalizePathSync(dirPath);
336
+ await fs.promises.access(resolvedDir, fs.constants.R_OK);
337
+ if (!this._projectRootPaths.includes(resolvedDir)) {
338
+ this._projectRootPaths.push(resolvedDir);
339
+ }
340
+ return true;
341
+ }
342
+ catch (error) {
343
+ console.warn(`Warning: Directory ${dirPath} is not accessible:`, error instanceof Error ? error.message : String(error));
344
+ return false;
345
+ }
346
+ }
347
+ /**
348
+ * Reset the context (useful for testing or new sessions)
349
+ */
350
+ reset() {
351
+ this._projectRootPaths = [canonicalizePathSync(this._currentWorkingDirectory)];
352
+ this._executionCwd = undefined;
353
+ }
354
+ /**
355
+ * Preferred execution CWD used by tools when not explicitly provided.
356
+ */
357
+ setExecutionCwd(dir) {
358
+ if (!dir) {
359
+ this._executionCwd = undefined;
360
+ return;
361
+ }
362
+ try {
363
+ const resolved = canonicalizePathSync(dir);
364
+ if (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) {
365
+ this._executionCwd = resolved;
366
+ }
367
+ else {
368
+ console.warn(`Execution CWD is not a directory or does not exist: ${dir}`);
369
+ }
370
+ }
371
+ catch (e) {
372
+ console.warn(`Failed to set execution CWD ${dir}:`, e instanceof Error ? e.message : String(e));
373
+ }
374
+ }
375
+ getExecutionCwd() {
376
+ return this._executionCwd;
377
+ }
378
+ addPreviousSessionSummarization(sessionId, summary) {
379
+ const s = (summary || '').trim();
380
+ const id = (sessionId || '').trim();
381
+ if (!s || !id)
382
+ return;
383
+ const existing = this._previousSessionsSummarizationMap.get(id);
384
+ if (!existing || existing !== s) {
385
+ this._previousSessionsSummarizationMap.set(id, s);
386
+ }
387
+ }
388
+ getPreviousSessionsSummarization() {
389
+ return Array.from(this._previousSessionsSummarizationMap.entries()).map(([sessionId, summary]) => ({
390
+ sessionId,
391
+ summary
392
+ }));
393
+ }
394
+ }
395
+ //# sourceMappingURL=SessionContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionContext.js","sourceRoot":"","sources":["../../src/session/SessionContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Environment-scoped container for core singletons.
3
+ *
4
+ * Historically many services in Qodo Command were implemented as process-wide
5
+ * singletons (ConfigManager, SessionContext, ServerRegistry, MCPManager).
6
+ * That design makes it impossible to safely run multiple QodoClient instances
7
+ * in parallel inside the same Node process.
8
+ *
9
+ * This module introduces a minimal indirection layer based on AsyncLocalStorage:
10
+ * - Each logical "environment" owns its own instances of these services.
11
+ * - Code that historically called Foo.getInstance() is gradually migrated to
12
+ * consult the current EnvironmentContext instead.
13
+ * - CLI and other apps continue to use a default global environment, so their
14
+ * behavior is preserved.
15
+ */
16
+ export interface EnvironmentServices {
17
+ sdkMode?: boolean;
18
+ sdkDebug?: boolean;
19
+ configManager?: any;
20
+ sessionContext?: any;
21
+ serverRegistry?: any;
22
+ mcpManager?: any;
23
+ messageManager?: any;
24
+ serverData?: any;
25
+ }
26
+ /**
27
+ * Get the current environment services, falling back to the global environment
28
+ * when no AsyncLocalStorage context is active.
29
+ */
30
+ export declare function getCurrentEnvironment(): EnvironmentServices;
31
+ /**
32
+ * Run the provided function within the given environment. All nested async
33
+ * work (await chains, Promises, event handlers) will see this environment via
34
+ * getCurrentEnvironment().
35
+ */
36
+ export declare function runWithEnvironment<T>(env: EnvironmentServices, fn: () => T): T;
37
+ /**
38
+ * Get the global fallback environment. Intended for initialization of the
39
+ * legacy singleton facades so that existing CLI behavior stays identical.
40
+ */
41
+ export declare function getGlobalEnvironment(): EnvironmentServices;
42
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/session/environment.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,mBAAmB;IAGlC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,cAAc,CAAC,EAAE,GAAG,CAAC;IAErB,UAAU,CAAC,EAAE,GAAG,CAAC;CAClB;AAOD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,mBAAmB,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE9E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,mBAAmB,CAE1D"}
@@ -0,0 +1,27 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ const envStorage = new AsyncLocalStorage();
3
+ // Global fallback environment used by legacy singleton-style code paths (CLI, ink, etc.)
4
+ const globalEnv = {};
5
+ /**
6
+ * Get the current environment services, falling back to the global environment
7
+ * when no AsyncLocalStorage context is active.
8
+ */
9
+ export function getCurrentEnvironment() {
10
+ return envStorage.getStore() || globalEnv;
11
+ }
12
+ /**
13
+ * Run the provided function within the given environment. All nested async
14
+ * work (await chains, Promises, event handlers) will see this environment via
15
+ * getCurrentEnvironment().
16
+ */
17
+ export function runWithEnvironment(env, fn) {
18
+ return envStorage.run(env, fn);
19
+ }
20
+ /**
21
+ * Get the global fallback environment. Intended for initialization of the
22
+ * legacy singleton facades so that existing CLI behavior stays identical.
23
+ */
24
+ export function getGlobalEnvironment() {
25
+ return globalEnv;
26
+ }
27
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/session/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAkCrD,MAAM,UAAU,GAAG,IAAI,iBAAiB,EAAuB,CAAC;AAEhE,yFAAyF;AACzF,MAAM,SAAS,GAAwB,EAAE,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAI,GAAwB,EAAE,EAAW;IACzE,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,EAAS,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function getSessionHistory(sessionId: string): Promise<any>;
2
+ export declare function fetchHistory(flags: Record<string, any>): Promise<InternalSessionHistory>;
3
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/session/history.ts"],"names":[],"mappings":"AA0BA,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,gBAwCxD;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA8B9F"}
@@ -0,0 +1,67 @@
1
+ import { formatTimeAgo } from "../utils/index.js";
2
+ import { v4 as uuid } from "uuid";
3
+ import { httpRequest } from "../api/http.js";
4
+ import { ServerData } from "./serverData.js";
5
+ import process from "node:process";
6
+ import { getUserData } from "../api/utils.js";
7
+ export async function getSessionHistory(sessionId) {
8
+ const requestId = uuid();
9
+ const payload = {
10
+ agent_type: "sdk",
11
+ session_id: sessionId,
12
+ user_data: getUserData(),
13
+ projects_root_path: [process.cwd()],
14
+ cwd: process.cwd(),
15
+ tools: {},
16
+ };
17
+ const request = {
18
+ method: "POST",
19
+ url: "/v2/agentic/get-session",
20
+ data: payload,
21
+ requestId: requestId,
22
+ timeout: 210000
23
+ };
24
+ let data;
25
+ try {
26
+ data = await httpRequest(request);
27
+ }
28
+ catch (error) {
29
+ throw new Error("Failed to process history data: " + (error instanceof Error ? error.message : String(error)));
30
+ }
31
+ if (!data) {
32
+ throw new Error("No session history found");
33
+ }
34
+ if (data.type === "answer" && data.sub_type === "session-not-found" && data.data?.message) {
35
+ throw new Error(data.data.message);
36
+ }
37
+ if (data.error || data.error_code) {
38
+ throw new Error(data.message || data.error || "Unknown error");
39
+ }
40
+ return { ...data, sessionId };
41
+ }
42
+ export async function fetchHistory(flags) {
43
+ const resumeValue = flags.resume;
44
+ // Valid session IDs are UUIDs or date-prefixed UUIDs
45
+ const isValidSessionId = typeof resumeValue === 'string' && (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(resumeValue) ||
46
+ /^\d{8}-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(resumeValue));
47
+ if (!isValidSessionId) {
48
+ const recentSessions = ServerData.getInstance().getRecentSessions();
49
+ if (recentSessions.length === 0) {
50
+ throw new Error('No recent sessions found.');
51
+ }
52
+ const sessionsToShow = recentSessions.slice(0, 10);
53
+ const sessionList = sessionsToShow.map(session => {
54
+ const timeAgo = formatTimeAgo(session.last_update);
55
+ const description = session.description ? ` - ${session.description}` : '';
56
+ return ` ${session.session_id} ${timeAgo}${description}`;
57
+ }).join('\n');
58
+ throw new Error(`No session ID provided. Recent sessions:\n${sessionList}\n\nProvide a valid session ID to resume.`);
59
+ }
60
+ try {
61
+ return await getSessionHistory(resumeValue);
62
+ }
63
+ catch (error) {
64
+ throw new Error(`Failed to resume session '${resumeValue}': ${error instanceof Error ? error.message : String(error)}`);
65
+ }
66
+ }
67
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/session/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Session management utilities
3
+ * @internal
4
+ */
5
+ export type { EnvironmentServices } from './environment.js';
6
+ export { SessionContext } from './SessionContext.js';
7
+ export { ServerData, QodoBackendBootstrapError } from './serverData.js';
8
+ export { fetchHistory, getSessionHistory } from './history.js';
9
+ export type { InternalSessionHistory } from './history.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Session management utilities
3
+ * @internal
4
+ */
5
+ export { getCurrentEnvironment, runWithEnvironment, getGlobalEnvironment } from './environment.js';
6
+ export { SessionContext } from './SessionContext.js';
7
+ export { ServerData, QodoBackendBootstrapError } from './serverData.js';
8
+ export { fetchHistory, getSessionHistory } from './history.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEnG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,38 @@
1
+ export declare class QodoBackendBootstrapError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export declare class ServerData {
5
+ private static instance;
6
+ private data;
7
+ private baseUrl;
8
+ private baseUrlSource;
9
+ private rateLimitInfo;
10
+ private constructor();
11
+ /**
12
+ * Initialize ServerData for the current environment.
13
+ * - CLI/apps use the legacy process-global singleton.
14
+ * - In-process SDK usage can create an environment-scoped instance.
15
+ */
16
+ static init(baseUrlOverride?: string): Promise<ServerData>;
17
+ static getInstance(): ServerData;
18
+ getBaseUrl(): string;
19
+ getBaseUrlSource(): 'user' | 'server' | 'default';
20
+ private processBaseUrl;
21
+ getThings(section?: string): Promise<void>;
22
+ getDefaultModel(): string | undefined;
23
+ getAvailableModels(): string[];
24
+ checkModelInput(model: string): void;
25
+ getVersion(): string | undefined;
26
+ getSessionId(): string | undefined;
27
+ fetchNewSessionId(): Promise<string>;
28
+ getRecentSessions(): Array<{
29
+ session_id: string;
30
+ description: string;
31
+ last_update: number;
32
+ }>;
33
+ getRateLimitRemaining(): number | undefined;
34
+ getRateLimitReset(): number | undefined;
35
+ getRateLimitLimit(): number | undefined;
36
+ getMCPTools(): Record<string, any[]>;
37
+ }
38
+ //# sourceMappingURL=serverData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverData.d.ts","sourceRoot":"","sources":["../../src/session/serverData.ts"],"names":[],"mappings":"AAKA,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,UAAU;IAGrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAa;IAEpC,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAA4C;IACjE,OAAO,CAAC,aAAa,CAId;IAEP,OAAO;IAaP;;;;OAIG;WACiB,IAAI,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;WAqBzD,WAAW,IAAI,UAAU;IAoBhC,UAAU,IAAI,MAAM;IAIpB,gBAAgB,IAAI,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIxD,OAAO,CAAC,cAAc;IAWT,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyDhD,eAAe,IAAI,MAAM,GAAG,SAAS;IAQrC,kBAAkB,IAAI,MAAM,EAAE;IAkB9B,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAcpC,UAAU,IAAI,MAAM,GAAG,SAAS;IAQhC,YAAY,IAAI,MAAM,GAAG,SAAS;IAQ5B,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAmB1C,iBAAiB,IAAI,KAAK,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC;IAQ1F,qBAAqB,IAAI,MAAM,GAAG,SAAS;IAI3C,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAIvC,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAIvC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;CAO5C"}