@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.
- package/LICENSE +118 -0
- package/README.md +121 -0
- package/dist/api/agent.d.ts +69 -0
- package/dist/api/agent.d.ts.map +1 -0
- package/dist/api/agent.js +1034 -0
- package/dist/api/agent.js.map +1 -0
- package/dist/api/analytics.d.ts +43 -0
- package/dist/api/analytics.d.ts.map +1 -0
- package/dist/api/analytics.js +163 -0
- package/dist/api/analytics.js.map +1 -0
- package/dist/api/http.d.ts +5 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +59 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/index.d.ts +12 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +17 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/taskTracking.d.ts +54 -0
- package/dist/api/taskTracking.d.ts.map +1 -0
- package/dist/api/taskTracking.js +208 -0
- package/dist/api/taskTracking.js.map +1 -0
- package/dist/api/types.d.ts +92 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/utils.d.ts +8 -0
- package/dist/api/utils.d.ts.map +1 -0
- package/dist/api/utils.js +54 -0
- package/dist/api/utils.js.map +1 -0
- package/dist/api/websocket.d.ts +74 -0
- package/dist/api/websocket.d.ts.map +1 -0
- package/dist/api/websocket.js +685 -0
- package/dist/api/websocket.js.map +1 -0
- package/dist/auth/index.d.ts +25 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +85 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/clients/index.d.ts +8 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +7 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/info/InfoClient.d.ts +37 -0
- package/dist/clients/info/InfoClient.d.ts.map +1 -0
- package/dist/clients/info/InfoClient.js +69 -0
- package/dist/clients/info/InfoClient.js.map +1 -0
- package/dist/clients/info/index.d.ts +4 -0
- package/dist/clients/info/index.d.ts.map +1 -0
- package/dist/clients/info/index.js +2 -0
- package/dist/clients/info/index.js.map +1 -0
- package/dist/clients/info/types.d.ts +21 -0
- package/dist/clients/info/types.d.ts.map +1 -0
- package/dist/clients/info/types.js +2 -0
- package/dist/clients/info/types.js.map +1 -0
- package/dist/clients/sessions/SessionsClient.d.ts +34 -0
- package/dist/clients/sessions/SessionsClient.d.ts.map +1 -0
- package/dist/clients/sessions/SessionsClient.js +71 -0
- package/dist/clients/sessions/SessionsClient.js.map +1 -0
- package/dist/clients/sessions/index.d.ts +4 -0
- package/dist/clients/sessions/index.d.ts.map +1 -0
- package/dist/clients/sessions/index.js +2 -0
- package/dist/clients/sessions/index.js.map +1 -0
- package/dist/clients/sessions/types.d.ts +20 -0
- package/dist/clients/sessions/types.d.ts.map +1 -0
- package/dist/clients/sessions/types.js +2 -0
- package/dist/clients/sessions/types.js.map +1 -0
- package/dist/config/ConfigManager.d.ts +43 -0
- package/dist/config/ConfigManager.d.ts.map +1 -0
- package/dist/config/ConfigManager.js +472 -0
- package/dist/config/ConfigManager.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/urlConfig.d.ts +15 -0
- package/dist/config/urlConfig.d.ts.map +1 -0
- package/dist/config/urlConfig.js +75 -0
- package/dist/config/urlConfig.js.map +1 -0
- package/dist/constants/errors.d.ts +2 -0
- package/dist/constants/errors.d.ts.map +1 -0
- package/dist/constants/errors.js +2 -0
- package/dist/constants/errors.js.map +1 -0
- package/dist/constants/index.d.ts +7 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +11 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/tools.d.ts +4 -0
- package/dist/constants/tools.d.ts.map +1 -0
- package/dist/constants/tools.js +4 -0
- package/dist/constants/tools.js.map +1 -0
- package/dist/constants/versions.d.ts +2 -0
- package/dist/constants/versions.d.ts.map +1 -0
- package/dist/constants/versions.js +2 -0
- package/dist/constants/versions.js.map +1 -0
- package/dist/context/buildUserContext.d.ts +18 -0
- package/dist/context/buildUserContext.d.ts.map +1 -0
- package/dist/context/buildUserContext.js +34 -0
- package/dist/context/buildUserContext.js.map +1 -0
- package/dist/context/index.d.ts +9 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +9 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/messageManager.d.ts +42 -0
- package/dist/context/messageManager.d.ts.map +1 -0
- package/dist/context/messageManager.js +322 -0
- package/dist/context/messageManager.js.map +1 -0
- package/dist/context/taskFocus.d.ts +2 -0
- package/dist/context/taskFocus.d.ts.map +1 -0
- package/dist/context/taskFocus.js +26 -0
- package/dist/context/taskFocus.js.map +1 -0
- package/dist/context/userInput.d.ts +3 -0
- package/dist/context/userInput.d.ts.map +1 -0
- package/dist/context/userInput.js +20 -0
- package/dist/context/userInput.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/MCPManager.d.ts +125 -0
- package/dist/mcp/MCPManager.d.ts.map +1 -0
- package/dist/mcp/MCPManager.js +616 -0
- package/dist/mcp/MCPManager.js.map +1 -0
- package/dist/mcp/approvedTools.d.ts +4 -0
- package/dist/mcp/approvedTools.d.ts.map +1 -0
- package/dist/mcp/approvedTools.js +19 -0
- package/dist/mcp/approvedTools.js.map +1 -0
- package/dist/mcp/baseServer.d.ts +75 -0
- package/dist/mcp/baseServer.d.ts.map +1 -0
- package/dist/mcp/baseServer.js +107 -0
- package/dist/mcp/baseServer.js.map +1 -0
- package/dist/mcp/builtinServers.d.ts +15 -0
- package/dist/mcp/builtinServers.d.ts.map +1 -0
- package/dist/mcp/builtinServers.js +155 -0
- package/dist/mcp/builtinServers.js.map +1 -0
- package/dist/mcp/dynamicBEServer.d.ts +20 -0
- package/dist/mcp/dynamicBEServer.d.ts.map +1 -0
- package/dist/mcp/dynamicBEServer.js +52 -0
- package/dist/mcp/dynamicBEServer.js.map +1 -0
- package/dist/mcp/index.d.ts +19 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +24 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcpInitialization.d.ts +2 -0
- package/dist/mcp/mcpInitialization.d.ts.map +1 -0
- package/dist/mcp/mcpInitialization.js +56 -0
- package/dist/mcp/mcpInitialization.js.map +1 -0
- package/dist/mcp/servers/filesystem.d.ts +75 -0
- package/dist/mcp/servers/filesystem.d.ts.map +1 -0
- package/dist/mcp/servers/filesystem.js +992 -0
- package/dist/mcp/servers/filesystem.js.map +1 -0
- package/dist/mcp/servers/gerrit.d.ts +19 -0
- package/dist/mcp/servers/gerrit.d.ts.map +1 -0
- package/dist/mcp/servers/gerrit.js +515 -0
- package/dist/mcp/servers/gerrit.js.map +1 -0
- package/dist/mcp/servers/git.d.ts +18 -0
- package/dist/mcp/servers/git.d.ts.map +1 -0
- package/dist/mcp/servers/git.js +441 -0
- package/dist/mcp/servers/git.js.map +1 -0
- package/dist/mcp/servers/ripgrep.d.ts +34 -0
- package/dist/mcp/servers/ripgrep.d.ts.map +1 -0
- package/dist/mcp/servers/ripgrep.js +517 -0
- package/dist/mcp/servers/ripgrep.js.map +1 -0
- package/dist/mcp/servers/shell.d.ts +20 -0
- package/dist/mcp/servers/shell.d.ts.map +1 -0
- package/dist/mcp/servers/shell.js +603 -0
- package/dist/mcp/servers/shell.js.map +1 -0
- package/dist/mcp/serversRegistry.d.ts +55 -0
- package/dist/mcp/serversRegistry.d.ts.map +1 -0
- package/dist/mcp/serversRegistry.js +410 -0
- package/dist/mcp/serversRegistry.js.map +1 -0
- package/dist/mcp/toolProcessor.d.ts +42 -0
- package/dist/mcp/toolProcessor.d.ts.map +1 -0
- package/dist/mcp/toolProcessor.js +200 -0
- package/dist/mcp/toolProcessor.js.map +1 -0
- package/dist/mcp/types.d.ts +29 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/parser/index.d.ts +72 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +967 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/types.d.ts +153 -0
- package/dist/parser/types.d.ts.map +1 -0
- package/dist/parser/types.js +6 -0
- package/dist/parser/types.js.map +1 -0
- package/dist/parser/utils.d.ts +18 -0
- package/dist/parser/utils.d.ts.map +1 -0
- package/dist/parser/utils.js +64 -0
- package/dist/parser/utils.js.map +1 -0
- package/dist/sdk/QodoSDK.d.ts +152 -0
- package/dist/sdk/QodoSDK.d.ts.map +1 -0
- package/dist/sdk/QodoSDK.js +786 -0
- package/dist/sdk/QodoSDK.js.map +1 -0
- package/dist/sdk/bootstrap.d.ts +16 -0
- package/dist/sdk/bootstrap.d.ts.map +1 -0
- package/dist/sdk/bootstrap.js +21 -0
- package/dist/sdk/bootstrap.js.map +1 -0
- package/dist/sdk/builders.d.ts +54 -0
- package/dist/sdk/builders.d.ts.map +1 -0
- package/dist/sdk/builders.js +117 -0
- package/dist/sdk/builders.js.map +1 -0
- package/dist/sdk/defaults.d.ts +11 -0
- package/dist/sdk/defaults.d.ts.map +1 -0
- package/dist/sdk/defaults.js +39 -0
- package/dist/sdk/defaults.js.map +1 -0
- package/dist/sdk/discovery.d.ts +2 -0
- package/dist/sdk/discovery.d.ts.map +1 -0
- package/dist/sdk/discovery.js +25 -0
- package/dist/sdk/discovery.js.map +1 -0
- package/dist/sdk/events.d.ts +168 -0
- package/dist/sdk/events.d.ts.map +1 -0
- package/dist/sdk/events.js +52 -0
- package/dist/sdk/events.js.map +1 -0
- package/dist/sdk/index.d.ts +17 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +17 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/runner/AgentRunner.d.ts +22 -0
- package/dist/sdk/runner/AgentRunner.d.ts.map +1 -0
- package/dist/sdk/runner/AgentRunner.js +222 -0
- package/dist/sdk/runner/AgentRunner.js.map +1 -0
- package/dist/sdk/runner/finalize.d.ts +9 -0
- package/dist/sdk/runner/finalize.d.ts.map +1 -0
- package/dist/sdk/runner/finalize.js +115 -0
- package/dist/sdk/runner/finalize.js.map +1 -0
- package/dist/sdk/runner/formats.d.ts +7 -0
- package/dist/sdk/runner/formats.d.ts.map +1 -0
- package/dist/sdk/runner/formats.js +91 -0
- package/dist/sdk/runner/formats.js.map +1 -0
- package/dist/sdk/runner/index.d.ts +9 -0
- package/dist/sdk/runner/index.d.ts.map +1 -0
- package/dist/sdk/runner/index.js +9 -0
- package/dist/sdk/runner/index.js.map +1 -0
- package/dist/sdk/runner/progress.d.ts +3 -0
- package/dist/sdk/runner/progress.d.ts.map +1 -0
- package/dist/sdk/runner/progress.js +16 -0
- package/dist/sdk/runner/progress.js.map +1 -0
- package/dist/sdk/schemas.d.ts +50 -0
- package/dist/sdk/schemas.d.ts.map +1 -0
- package/dist/sdk/schemas.js +145 -0
- package/dist/sdk/schemas.js.map +1 -0
- package/dist/session/SessionContext.d.ts +86 -0
- package/dist/session/SessionContext.d.ts.map +1 -0
- package/dist/session/SessionContext.js +395 -0
- package/dist/session/SessionContext.js.map +1 -0
- package/dist/session/environment.d.ts +42 -0
- package/dist/session/environment.d.ts.map +1 -0
- package/dist/session/environment.js +27 -0
- package/dist/session/environment.js.map +1 -0
- package/dist/session/history.d.ts +3 -0
- package/dist/session/history.d.ts.map +1 -0
- package/dist/session/history.js +67 -0
- package/dist/session/history.js.map +1 -0
- package/dist/session/index.d.ts +10 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +9 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/serverData.d.ts +38 -0
- package/dist/session/serverData.d.ts.map +1 -0
- package/dist/session/serverData.js +241 -0
- package/dist/session/serverData.js.map +1 -0
- package/dist/tracking/Tracker.d.ts +55 -0
- package/dist/tracking/Tracker.d.ts.map +1 -0
- package/dist/tracking/Tracker.js +217 -0
- package/dist/tracking/Tracker.js.map +1 -0
- package/dist/tracking/index.d.ts +8 -0
- package/dist/tracking/index.d.ts.map +1 -0
- package/dist/tracking/index.js +8 -0
- package/dist/tracking/index.js.map +1 -0
- package/dist/tracking/schemas.d.ts +292 -0
- package/dist/tracking/schemas.d.ts.map +1 -0
- package/dist/tracking/schemas.js +91 -0
- package/dist/tracking/schemas.js.map +1 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/extractSetFlags.d.ts +6 -0
- package/dist/utils/extractSetFlags.d.ts.map +1 -0
- package/dist/utils/extractSetFlags.js +16 -0
- package/dist/utils/extractSetFlags.js.map +1 -0
- package/dist/utils/formatTimeAgo.d.ts +2 -0
- package/dist/utils/formatTimeAgo.d.ts.map +1 -0
- package/dist/utils/formatTimeAgo.js +20 -0
- package/dist/utils/formatTimeAgo.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/machineId.d.ts +14 -0
- package/dist/utils/machineId.d.ts.map +1 -0
- package/dist/utils/machineId.js +66 -0
- package/dist/utils/machineId.js.map +1 -0
- package/dist/utils/pathUtils.d.ts +22 -0
- package/dist/utils/pathUtils.d.ts.map +1 -0
- package/dist/utils/pathUtils.js +54 -0
- package/dist/utils/pathUtils.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +23 -0
- package/dist/version.js.map +1 -0
- 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":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAGzB,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;GAGG;AACH,MAAM,OAAO,cAAc;IAkBf;IACS;IACA;IACA;IACA;IACT;IACS;IAvBnB,yEAAyE;IACzE,qEAAqE;IACrE,0EAA0E;IAC1E,cAAc;IACN,MAAM,CAAC,QAAQ,CAAiB;IAChC,iBAAiB,GAAa,EAAE,CAAC;IACjC,wBAAwB,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC;IACjD,aAAa,GAAuB,SAAS,CAAC,CAAC,2DAA2D;IACjG,iBAAiB,GAAY,KAAK,CAAC;IACnC,cAAc,GAAyB,SAAS,CAAC;IACjD,MAAM,GAAuB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACrD,WAAW,GAAyB,SAAS,CAAC;IACvD,YAAY,GAAW,KAAK,CAAC,CAAC,sBAAsB;IACpD,iCAAiC,GAAwB,IAAI,GAAG,EAAE,CAAC;IACnE,oBAAoB,GAAuB,SAAS,CAAC;IAE7D,YACU,OAAsB,EACb,sBAA0C,SAAS,EACnD,eAAmC,SAAS,EAC5C,QAAe,EAAE,EACjB,iBAAqD,SAAS,EACvE,KAAa,EACJ,YAAgC,UAAU,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE;QANhF,YAAO,GAAP,OAAO,CAAe;QACb,wBAAmB,GAAnB,mBAAmB,CAAgC;QACnD,iBAAY,GAAZ,YAAY,CAAgC;QAC5C,UAAK,GAAL,KAAK,CAAY;QACjB,mBAAc,GAAd,cAAc,CAAgD;QACvE,UAAK,GAAL,KAAK,CAAQ;QACJ,cAAS,GAAT,SAAS,CAA8D;QAExF,IAAI,IAAI,CAAC,cAAc,EAAC,CAAC;YACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,eAAe,IAAI,cAAc,EAAE,eAAe,CAAC;QACjF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,YAAY,IAAK,cAAsB,EAAE,YAAY,CAAC;QACjF,yEAAyE;QACzE,wEAAwE;QACxE,6BAA6B;QAC7B,IAAI,CAAC,iBAAiB,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAE/E,mDAAmD;QACnD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,WAAW;QACvB,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QACpC,MAAM,QAAQ,GAA+B,GAAG,CAAC,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC;QAC3F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAC5B,KAA0B,EAC1B,OAAsB,EACtB,mBAA4B,EAC5B,YAAqB,EACrB,cAAuC,EACvC,SAAkB;QAElB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,cAAc,EAAE,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;QAC3E,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,sFAAsF;QACtF,MAAM,kBAAkB,GAAG,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,cAAc,CACjC,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,KAAK,EACL,cAAc,EACd,KAAK,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,eAAe,EAAE,EACnD,kBAAkB,CACnB,CAAC;QACF,IAAI,cAAc,EAAE,kBAAkB,IAAI,cAAc,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxF,2DAA2D;YAC3D,MAAM,QAAQ,CAAC,mBAAmB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACzE,CAAC;QAED,wEAAwE;QACxE,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACnC,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;YAC9B,SAAS,CAAC,cAAc,GAAG,QAAQ,CAAC;QACtC,CAAC;QACD,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QACpC,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC;QAE9B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAA0B,EAC1B,OAAsB,EACtB,mBAA4B,EAC5B,YAAqB,EACrB,cAAuC,EACvC,SAAkB;QACtD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,cAAc,EAAE,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;QAC3E,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QAED,wEAAwE;QACxE,uEAAuE;QACvE,wEAAwE;QACxE,yEAAyE;QACzE,mBAAmB;QACnB,IAAI,kBAAkB,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACrC,kBAAkB,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAC1E,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,cAAc,CACvC,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,KAAK,EACL,cAAc,EACd,KAAK,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,eAAe,EAAE,EACnD,kBAAkB,CACnB,CAAC;QACF,wEAAwE;QACxE,uEAAuE;QACvE,2DAA2D;QAC3D,cAAc,CAAC,iBAAiB,GAAG,CAAC,oBAAoB,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACnG,IAAI,cAAc,EAAE,kBAAkB,IAAI,cAAc,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxF,2DAA2D;YAC3D,MAAM,cAAc,CAAC,mBAAmB,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QAC9E,CAAC;QAED,qEAAqE;QACrE,8CAA8C;QAC9C,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QACpC,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC;YACzC,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;gBAC9B,SAAS,CAAC,cAAc,GAAG,cAAc,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,0EAA0E;IAC1E,6EAA6E;IAC7E,4EAA4E;IAC5E,wDAAwD;IACjD,MAAM,CAAC,iBAAiB,CAAC,GAAmB;QACjD,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QACpC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,GAAG,GAAG,CAAC;YAC9B,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;gBAC9B,SAAS,CAAC,cAAc,GAAG,GAAG,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC;QAE7B,kFAAkF;QAClF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;QAEvE,sBAAsB;QACtB,IAAI,QAAQ,GAAG,YAAY,CAAC;QAC5B,IAAI,QAAQ,GAAG,WAAW,CAAC;QAE3B,iDAAiD;QACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,QAAQ,GAAG,UAAU,CAAC;YACtB,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,wCAAwC;gBACxC,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;gBACjC,wDAAwD;gBACxD,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;gBAClE,IAAI,YAAY,GAAG,UAAU,EAAE,CAAC;oBAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,yFAAyF,CAAC,CAAC;oBACrH,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,iBAAiB,QAAQ,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7G,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;YAChG,CAAC;QACH,CAAC;IACH,CAAC;IAEM,UAAU,CAAC,OAAsB;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,qDAAqD;QACrD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,mBAAmB,CAAC,KAAe;QAC9C,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QAEjC,yFAAyF;QACzF,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC7C,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,GAAG,CAAC;YACxB,OAAO,WAAW,KAAK,YAAY,IAAI,WAAW,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEzD,oCAAoC;QACpC,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBAClD,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACzD,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,sBAAsB,OAAO,yCAAyC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/I,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;IACrC,CAAC;IAEM,mBAAmB;QACxB,OAAO,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAEM,iBAAiB;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEM,YAAY;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAyB,CAAC;IAC9C,CAAC;IAEM,YAAY;QACjB,MAAM,SAAS,GAAI,IAAI,CAAC,cAAc,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC;QAC/G,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEM,sBAAsB;QAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,gBAAgB;QACrB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,UAAU;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,QAAQ,CAAC,KAAa;QAC3B,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,iCAAiC;QACtC,OAAO,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;IACvC,CAAC;IAEM,oBAAoB;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,EAAE,kBAAkB,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;QAChD,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACzC,CAAC;IACH,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,cAAc,CAAC,WAAmB;QACvC,8BAA8B;QAC9B,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,+BAA+B,WAAW,wBAAwB,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IAEM,WAAW;QAChB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,CAAA;IAChE,CAAC;IAEM,sBAAsB,CAAC,MAAe;QAC3C,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;IACrC,CAAC;IAEM,sBAAsB;QAC3B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAEM,SAAS;QACd,OAAO;YACL,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;YACxC,uBAAuB,EAAE,IAAI,CAAC,wBAAwB;YACtD,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;YACxC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,6BAA6B,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,iCAAiC,CAAC;YACzF,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,mBAAmB,EAAE,IAAI,CAAC,oBAAoB;SAC/C,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,kBAAkB,CAAC,OAAe;QAC7C,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAEzD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,sBAAsB,OAAO,qBAAqB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACzH,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK;QACV,IAAI,CAAC,iBAAiB,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,eAAe,CAAC,GAAuB;QAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;YAAC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAAC,OAAO;QAAC,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACnE,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,uDAAuD,GAAG,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,+BAA+B,GAAG,GAAG,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEM,+BAA+B,CAAC,SAAiB,EAAE,OAAe;QACvE,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEM,gCAAgC;QACrC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YACjG,SAAS;YACT,OAAO;SACR,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
|
|
@@ -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 @@
|
|
|
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"}
|