@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,472 @@
1
+ import path from "path";
2
+ import fs from "fs/promises";
3
+ import { loadConfigFromFile, loadConfigFromString, normalizeConfigObject, validateCommandArgs, validateConfig, validateMode } from "../parser/index.js";
4
+ import { transformOutputSchema } from "../parser/utils.js";
5
+ import fssync from 'fs';
6
+ import toml from 'toml';
7
+ import * as yaml from 'yaml';
8
+ import { isUrl } from './urlConfig.js';
9
+ import { getCurrentEnvironment, getGlobalEnvironment } from '../session/index.js';
10
+ /**
11
+ * Detects the configuration file format based on file extension
12
+ */
13
+ function detectConfigFormat(filePath) {
14
+ const ext = path.extname(filePath).toLowerCase();
15
+ if (ext === '.yaml' || ext === '.yml') {
16
+ return 'yaml';
17
+ }
18
+ return 'toml'; // Default to TOML for backward compatibility
19
+ }
20
+ /**
21
+ * Parses a configuration string based on format
22
+ */
23
+ function parseConfigByFormat(configString, format) {
24
+ try {
25
+ if (format === 'yaml') {
26
+ return yaml.parse(configString);
27
+ }
28
+ else {
29
+ return toml.parse(configString);
30
+ }
31
+ }
32
+ catch (error) {
33
+ throw new Error(`Failed to parse ${format.toUpperCase()} configuration: ${error.message}`);
34
+ }
35
+ }
36
+ // --- AGENT IMPORTS UTILITY ---
37
+ export function getImportedAgents(agentConfigPath) {
38
+ const cwd = process.cwd();
39
+ // Try to find agent config file (TOML or YAML)
40
+ let filePath = agentConfigPath;
41
+ if (!filePath) {
42
+ // Check for agent.toml first (backward compatibility)
43
+ if (fssync.existsSync(path.join(cwd, 'agent.toml'))) {
44
+ filePath = path.join(cwd, 'agent.toml');
45
+ }
46
+ else if (fssync.existsSync(path.join(cwd, 'agent.yaml'))) {
47
+ filePath = path.join(cwd, 'agent.yaml');
48
+ }
49
+ else if (fssync.existsSync(path.join(cwd, 'agent.yml'))) {
50
+ filePath = path.join(cwd, 'agent.yml');
51
+ }
52
+ else {
53
+ return [];
54
+ }
55
+ }
56
+ if (!fssync.existsSync(filePath))
57
+ return [];
58
+ const content = fssync.readFileSync(filePath, 'utf-8');
59
+ const format = detectConfigFormat(filePath);
60
+ let parsed;
61
+ try {
62
+ parsed = parseConfigByFormat(content, format);
63
+ }
64
+ catch (e) {
65
+ return [];
66
+ }
67
+ const imports = parsed.imports || [];
68
+ // Extract agent names and config paths from "agents/NAME.toml" or "agents/NAME.yaml"
69
+ return imports
70
+ .map((imp) => {
71
+ const tomlMatch = imp.match(/agents\/(.+)\.toml/);
72
+ const yamlMatch = imp.match(/agents\/(.+)\.(yaml|yml)/);
73
+ const match = tomlMatch || yamlMatch;
74
+ return match ? { name: match[1], configPath: path.join(cwd, imp) } : null;
75
+ })
76
+ .filter(Boolean);
77
+ }
78
+ export class ConfigManager {
79
+ // NOTE: We no longer rely on the static instance directly; instead, we
80
+ // store the active instance on the current EnvironmentServices. The static
81
+ // property is kept only as a fallback for very early global initialization
82
+ // before AsyncLocalStorage is in play.
83
+ static instance;
84
+ agentConfigPath;
85
+ isExplicitAgentFile;
86
+ config;
87
+ validationResults = {
88
+ valid: true, errors: []
89
+ };
90
+ constructor(agentConfigPath, isFileContent = false) {
91
+ this.agentConfigPath = agentConfigPath;
92
+ this.isExplicitAgentFile = isFileContent || !!agentConfigPath;
93
+ }
94
+ static async init(agentConfig, isFileContent = false) {
95
+ const env = getCurrentEnvironment();
96
+ const globalEnv = getGlobalEnvironment();
97
+ // For non-global environments (e.g. in-process SDK clients), keep a
98
+ // completely independent ConfigManager instance per environment so that
99
+ // different QodoClient instances can load different agent configs in the
100
+ // same Node process without stepping on each other.
101
+ if (env !== globalEnv) {
102
+ let instance = env.configManager;
103
+ if (!instance) {
104
+ const pathArg = !isFileContent && typeof agentConfig === 'string' ? agentConfig : undefined;
105
+ instance = new ConfigManager(pathArg, isFileContent);
106
+ env.configManager = instance;
107
+ }
108
+ await instance.loadConfig(isFileContent ? agentConfig : undefined);
109
+ return instance;
110
+ }
111
+ // Global (CLI/webapp) path: preserve legacy singleton behavior so
112
+ // existing apps continue to see a single shared ConfigManager.
113
+ let instance = ConfigManager.instance;
114
+ if (!instance) {
115
+ const pathArg = !isFileContent && typeof agentConfig === 'string' ? agentConfig : undefined;
116
+ instance = new ConfigManager(pathArg, isFileContent);
117
+ ConfigManager.instance = instance;
118
+ if (!globalEnv.configManager) {
119
+ globalEnv.configManager = instance;
120
+ }
121
+ }
122
+ await instance.loadConfig(isFileContent ? agentConfig : undefined);
123
+ return instance;
124
+ }
125
+ static getInstance() {
126
+ const env = getCurrentEnvironment();
127
+ const globalEnv = getGlobalEnvironment();
128
+ // Non-global environments must have been initialized explicitly via
129
+ // ConfigManager.init() under their AsyncLocalStorage context.
130
+ if (env !== globalEnv) {
131
+ const instance = env.configManager;
132
+ if (!instance) {
133
+ throw new Error("ConfigManager not initialized for this environment. Call ConfigManager.init() first");
134
+ }
135
+ return instance;
136
+ }
137
+ if (!ConfigManager.instance) {
138
+ throw new Error("ConfigManager not initialized. Call ConfigManager.init() first");
139
+ }
140
+ return ConfigManager.instance;
141
+ }
142
+ hasConfig() {
143
+ return !!this.config;
144
+ }
145
+ hasExplicitAgentFile() {
146
+ return this.isExplicitAgentFile;
147
+ }
148
+ validateConfig(commandName, customArgs, shouldValidateArgs = true) {
149
+ if (!this.config || !this.config.commands || Object.keys(this.config.commands).length === 0 || !commandName) {
150
+ return this.validationResults;
151
+ }
152
+ this.validationResults = validateConfig(this.config, commandName);
153
+ // If the config is invalid or no custom args to validate, return current results
154
+ if (!this.validationResults.valid || !customArgs) {
155
+ return this.validationResults;
156
+ }
157
+ // Now validate the command arguments
158
+ if (!this.config.commands[commandName]) {
159
+ return this.validationResults;
160
+ }
161
+ if (shouldValidateArgs) {
162
+ const argsValidation = validateCommandArgs(this.config.commands[commandName], customArgs);
163
+ // Merge the validation results
164
+ if (!argsValidation.valid) {
165
+ this.validationResults = {
166
+ valid: false,
167
+ errors: [
168
+ ...this.validationResults.errors,
169
+ ...argsValidation.errors
170
+ ]
171
+ };
172
+ }
173
+ }
174
+ return this.validationResults;
175
+ }
176
+ async findNearestAgentConfig() {
177
+ // Start with the current working directory
178
+ let currentDir = process.cwd();
179
+ const rootDir = path.parse(currentDir).root;
180
+ // Keep traversing up until we reach the root directory
181
+ while (currentDir !== rootDir) {
182
+ // Check for agent config files in order of preference: .toml, .yaml, .yml
183
+ const configPaths = [
184
+ path.join(currentDir, 'agent.toml'),
185
+ path.join(currentDir, 'agent.yaml'),
186
+ path.join(currentDir, 'agent.yml')
187
+ ];
188
+ for (const configPath of configPaths) {
189
+ try {
190
+ // Check if the file exists and is readable
191
+ await fs.access(configPath, fs.constants.R_OK);
192
+ // If we reach here, the file exists and is readable
193
+ return configPath;
194
+ }
195
+ catch (error) {
196
+ }
197
+ }
198
+ // No config file found in current directory, move up to parent directory
199
+ currentDir = path.dirname(currentDir);
200
+ }
201
+ // Check the root directory as our final attempt
202
+ const rootConfigPaths = [
203
+ path.join(rootDir, 'agent.toml'),
204
+ path.join(rootDir, 'agent.yaml'),
205
+ path.join(rootDir, 'agent.yml')
206
+ ];
207
+ for (const rootConfigPath of rootConfigPaths) {
208
+ try {
209
+ await fs.access(rootConfigPath, fs.constants.R_OK);
210
+ return rootConfigPath;
211
+ }
212
+ catch (error) {
213
+ }
214
+ }
215
+ // No agent config file found in any parent directory
216
+ return undefined;
217
+ }
218
+ async getAgentConfigPath() {
219
+ if (this.agentConfigPath) {
220
+ // For URLs, we'll validate it can be loaded when loadConfig is called
221
+ if (isUrl(this.agentConfigPath)) {
222
+ console.log(`Using agent config from URL: ${this.agentConfigPath}`);
223
+ return this.agentConfigPath;
224
+ }
225
+ else {
226
+ // Handle local file path
227
+ try {
228
+ await fs.access(this.agentConfigPath, fs.constants.R_OK);
229
+ }
230
+ catch (error) {
231
+ console.error(`Error: Agent config file not found or not readable: ${this.agentConfigPath}`);
232
+ return undefined;
233
+ }
234
+ return this.agentConfigPath;
235
+ }
236
+ }
237
+ // Find the nearest agent.toml file to the current working directory
238
+ const agentConfigPath = await this.findNearestAgentConfig();
239
+ if (!agentConfigPath) {
240
+ return undefined;
241
+ }
242
+ return agentConfigPath;
243
+ }
244
+ async loadConfig(agentContentOrObject) {
245
+ const agentConfigPath = await this.getAgentConfigPath();
246
+ if (!agentContentOrObject && !agentConfigPath) {
247
+ console.warn("No agent configuration file (agent.toml, agent.yaml, or agent.yml) found in the current directory or any parent directory.");
248
+ return;
249
+ }
250
+ if (agentContentOrObject) {
251
+ if (typeof agentContentOrObject === 'string') {
252
+ // Load from string content
253
+ this.config = await loadConfigFromString(agentContentOrObject);
254
+ }
255
+ else {
256
+ // Normalize provided object (same normalization as file/string parsing)
257
+ // IMPORTANT: normalizeConfigObject clones the input, so we do not mutate the user's object.
258
+ this.config = normalizeConfigObject(agentContentOrObject);
259
+ // Ensure default execution strategy for SDK object path is 'act' if not provided
260
+ if (!this.config.execution_strategy) {
261
+ this.config.execution_strategy = 'act';
262
+ }
263
+ }
264
+ }
265
+ else if (agentConfigPath) {
266
+ // Load from file
267
+ this.config = await loadConfigFromFile(agentConfigPath);
268
+ }
269
+ }
270
+ getMCPServers() {
271
+ if (!this.config) {
272
+ return {};
273
+ }
274
+ return this.config.mcpServers || {};
275
+ }
276
+ getGeneralInstructions() {
277
+ if (!this.config) {
278
+ return undefined;
279
+ }
280
+ return this.config.instructions;
281
+ }
282
+ getSystemPrompt() {
283
+ if (!this.config) {
284
+ return undefined;
285
+ }
286
+ return this.config.system_prompt;
287
+ }
288
+ listCommands() {
289
+ if (!this.config) {
290
+ return [];
291
+ }
292
+ if (!this.validationResults.valid) {
293
+ throw new Error("Config is invalid");
294
+ }
295
+ if (!this.config.commands) {
296
+ return [];
297
+ }
298
+ return Object.keys(this.config.commands);
299
+ }
300
+ getSingleCommand() {
301
+ const commands = this.listCommands();
302
+ return commands.length === 1 ? commands[0] : null;
303
+ }
304
+ getValidationResult() {
305
+ return this.validationResults;
306
+ }
307
+ // Expose raw merged config when needed for read-only checks (e.g., disable_mcp)
308
+ getRawConfig() {
309
+ return this.config;
310
+ }
311
+ // New: list modes
312
+ listModes() {
313
+ if (!this.config?.modes)
314
+ return [];
315
+ return Object.keys(this.config.modes);
316
+ }
317
+ // New: fetch a mode with inheritance applied (top-level fallbacks)
318
+ getModeConfig(modeName) {
319
+ const mode = this.config?.modes?.[modeName];
320
+ if (!mode)
321
+ return undefined;
322
+ // Clone to avoid mutating original
323
+ const merged = JSON.parse(JSON.stringify(mode));
324
+ // Inherit top-level defaults when missing
325
+ if (this.config?.model && merged.model == null)
326
+ merged.model = this.config.model;
327
+ if (this.config?.available_tools && merged.available_tools == null)
328
+ merged.available_tools = this.config.available_tools;
329
+ if (this.config?.ignore_tools && merged.ignore_tools == null)
330
+ merged.ignore_tools = this.config.ignore_tools;
331
+ if (this.config?.output_schema && merged.output_schema == null)
332
+ merged.output_schema = this.config.output_schema;
333
+ if (this.config?.exit_expression && merged.exit_expression == null)
334
+ merged.exit_expression = this.config.exit_expression;
335
+ if (this.config?.execution_strategy && merged.execution_strategy == null)
336
+ merged.execution_strategy = this.config.execution_strategy;
337
+ // Inherit top-level disable_mcp flag when not explicitly set on the mode
338
+ if (merged.disable_mcp == null && this.config?.disable_mcp === true) {
339
+ merged.disable_mcp = true;
340
+ }
341
+ // Merge mcpServers
342
+ const topMcpServers = (this.config?.mcpServers || {});
343
+ const modeMcpServersRaw = (merged.mcpServers || {});
344
+ let modeMcpServers;
345
+ try {
346
+ modeMcpServers = typeof modeMcpServersRaw === 'string' ? JSON.parse(modeMcpServersRaw) : modeMcpServersRaw;
347
+ }
348
+ catch {
349
+ modeMcpServers = {};
350
+ }
351
+ merged.mcpServers = { ...topMcpServers, ...(modeMcpServers || {}) };
352
+ return merged;
353
+ }
354
+ // New: resolve mode into a pseudo-command to reuse pipeline
355
+ resolveModeAsCommand(modeName) {
356
+ const mode = this.getModeConfig(modeName);
357
+ if (!mode) {
358
+ throw new Error(`Mode not found: ${modeName}`);
359
+ }
360
+ // Convert to CommandConfig
361
+ return {
362
+ name: modeName,
363
+ description: mode.description,
364
+ instructions: mode.instructions, // IMPORTANT: keep as instructions
365
+ available_tools: mode.available_tools,
366
+ ignore_tools: mode.ignore_tools,
367
+ model: mode.model,
368
+ mcpServers: mode.mcpServers,
369
+ output_schema: typeof mode.output_schema === 'string' ? transformOutputSchema(mode.output_schema, modeName) : mode.output_schema,
370
+ exit_expression: mode.exit_expression,
371
+ execution_strategy: mode.execution_strategy ?? 'act',
372
+ chat_message: mode.chat_message,
373
+ permissions: mode.permissions || 'rwx', // default same as commands
374
+ };
375
+ }
376
+ // Validate a mode by name (to be used after MCP init)
377
+ validateModeName(modeName) {
378
+ if (!this.config) {
379
+ return { valid: false, errors: [{ path: 'config', message: 'No configuration loaded' }] };
380
+ }
381
+ return validateMode(this.config, modeName);
382
+ }
383
+ getCommandConfig(commandName) {
384
+ // If commands are missing/empty, synthesize a default command that inherits
385
+ // top-level fields. This enables prompt-first SDK usage without requiring
386
+ // users to define commands.default just to call prompt().
387
+ const hasCommands = !!(this.config?.commands && Object.keys(this.config.commands).length > 0);
388
+ // Check for configured commands first; otherwise use an empty base.
389
+ const rawCommandConfig = hasCommands
390
+ ? (this.config.commands[commandName] || { mcpServers: {} })
391
+ : { mcpServers: {} };
392
+ // Clone to prevent accidental mutation of the stored config object.
393
+ // IMPORTANT: keep SDK runtime metadata (command.__sdk) which may contain
394
+ // non-serializable values (e.g. Zod schemas).
395
+ const preservedSdkMeta = rawCommandConfig?.__sdk;
396
+ const commandConfig = JSON.parse(JSON.stringify(rawCommandConfig));
397
+ if (preservedSdkMeta) {
398
+ commandConfig.__sdk = preservedSdkMeta;
399
+ }
400
+ if (commandConfig?.mcpServers) {
401
+ try {
402
+ commandConfig.mcpServers = typeof commandConfig.mcpServers === 'string' ? JSON.parse(commandConfig.mcpServers) : commandConfig?.mcpServers;
403
+ }
404
+ catch (error) {
405
+ throw new Error(`Error parsing MCP servers from the "${commandName}" config: ${error instanceof Error ? error.message : String(error)}`);
406
+ }
407
+ }
408
+ if (commandConfig?.output_schema) {
409
+ commandConfig.output_schema = typeof commandConfig.output_schema === "string" ? transformOutputSchema(commandConfig.output_schema, commandName) : commandConfig.output_schema;
410
+ }
411
+ if (this.config?.model) {
412
+ commandConfig.model = commandConfig.model ?? this.config.model;
413
+ }
414
+ if (this.config?.available_tools) {
415
+ commandConfig.available_tools = commandConfig.available_tools ?? this.config.available_tools;
416
+ }
417
+ if (this.config?.ignore_tools) {
418
+ commandConfig.ignore_tools = commandConfig.ignore_tools ?? this.config.ignore_tools;
419
+ }
420
+ // Inherit top-level disable_mcp flag when not explicitly set on the command
421
+ if (commandConfig.disable_mcp == null && this.config?.disable_mcp === true) {
422
+ commandConfig.disable_mcp = true;
423
+ }
424
+ if (this.config?.output_schema) {
425
+ commandConfig.output_schema = commandConfig.output_schema ?? this.config.output_schema;
426
+ if (typeof commandConfig.output_schema === 'string') {
427
+ commandConfig.output_schema = transformOutputSchema(commandConfig.output_schema, commandName);
428
+ }
429
+ }
430
+ if (this.config?.exit_expression) {
431
+ commandConfig.exit_expression = commandConfig.exit_expression ?? this.config.exit_expression;
432
+ }
433
+ if (this.config?.execution_strategy) {
434
+ commandConfig.execution_strategy = commandConfig.execution_strategy ?? this.config.execution_strategy;
435
+ }
436
+ if (!commandConfig.execution_strategy) {
437
+ if (commandConfig.instructions) {
438
+ // If instructions are present, default to "plan" strategy
439
+ commandConfig.execution_strategy = "plan";
440
+ }
441
+ else {
442
+ // If no instructions, default to "act" strategy
443
+ commandConfig.execution_strategy = "act";
444
+ }
445
+ }
446
+ if (commandConfig.instructions) {
447
+ commandConfig.name = commandName;
448
+ }
449
+ // Set default permissions if not specified
450
+ if (!commandConfig.permissions) {
451
+ commandConfig.permissions = 'rwx'; // Default to full permissions
452
+ }
453
+ return commandConfig;
454
+ }
455
+ /**
456
+ * Cleanup method (kept for compatibility but no longer needed)
457
+ */
458
+ async cleanup() {
459
+ // No cleanup needed anymore as we don't use temp files
460
+ }
461
+ /**
462
+ * Static cleanup method for the singleton instance
463
+ */
464
+ static async cleanup() {
465
+ const env = getCurrentEnvironment();
466
+ const instance = env.configManager ?? ConfigManager.instance;
467
+ if (instance) {
468
+ await instance.cleanup();
469
+ }
470
+ }
471
+ }
472
+ //# sourceMappingURL=ConfigManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Configuration management utilities
3
+ * @internal
4
+ */
5
+ export { isUrl, convertGithubToRawUrl, loadConfigContent } from './urlConfig.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Configuration management utilities
3
+ * @internal
4
+ */
5
+ export { ConfigManager, getImportedAgents } from './ConfigManager.js';
6
+ export { isUrl, convertGithubToRawUrl, loadConfigContent } from './urlConfig.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Checks if a string is a URL
3
+ */
4
+ export declare function isUrl(path: string): boolean;
5
+ /**
6
+ * Converts GitHub file URLs to raw GitHub URLs
7
+ * Example: https://github.com/user/repo/blob/main/file.toml -> https://raw.githubusercontent.com/user/repo/refs/heads/main/file.toml
8
+ */
9
+ export declare function convertGithubToRawUrl(url: string): string;
10
+ /**
11
+ * Loads config content from a file path or URL
12
+ * Returns the content as a string
13
+ */
14
+ export declare function loadConfigContent(pathOrUrl: string): Promise<string>;
15
+ //# sourceMappingURL=urlConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlConfig.d.ts","sourceRoot":"","sources":["../../src/config/urlConfig.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAa3C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUzD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC1E"}
@@ -0,0 +1,75 @@
1
+ import axios from 'axios';
2
+ import * as fs from 'fs/promises';
3
+ /**
4
+ * Checks if a string is a URL
5
+ */
6
+ export function isUrl(path) {
7
+ try {
8
+ // Check for Windows absolute paths (e.g., C:\, D:\, etc.)
9
+ if (process.platform === 'win32' && /^[a-zA-Z]:[\\\/]/.test(path)) {
10
+ return false;
11
+ }
12
+ const url = new URL(path);
13
+ // Only consider http(s) and file protocols as valid URLs for config loading
14
+ return ['http:', 'https:', 'file:'].includes(url.protocol);
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ /**
21
+ * Converts GitHub file URLs to raw GitHub URLs
22
+ * Example: https://github.com/user/repo/blob/main/file.toml -> https://raw.githubusercontent.com/user/repo/refs/heads/main/file.toml
23
+ */
24
+ export function convertGithubToRawUrl(url) {
25
+ const githubRegex = /^https:\/\/github\.com\/([^\/]+)\/([^\/]+)\/blob\/([^\/]+)\/(.+)$/;
26
+ const match = url.match(githubRegex);
27
+ if (match) {
28
+ const [, owner, repo, branch, filePath] = match;
29
+ return `https://raw.githubusercontent.com/${owner}/${repo}/refs/heads/${branch}/${filePath}`;
30
+ }
31
+ return url;
32
+ }
33
+ /**
34
+ * Loads config content from a file path or URL
35
+ * Returns the content as a string
36
+ */
37
+ export async function loadConfigContent(pathOrUrl) {
38
+ try {
39
+ if (isUrl(pathOrUrl)) {
40
+ // Convert GitHub URLs to raw URLs
41
+ const rawUrl = convertGithubToRawUrl(pathOrUrl);
42
+ const response = await axios.get(rawUrl, {
43
+ responseType: 'text',
44
+ timeout: 30000, // 30 second timeout
45
+ maxContentLength: 10 * 1024 * 1024, // 10MB limit
46
+ maxBodyLength: 10 * 1024 * 1024, // 10MB limit
47
+ });
48
+ return response.data;
49
+ }
50
+ else {
51
+ // Read local file
52
+ return await fs.readFile(pathOrUrl, 'utf-8');
53
+ }
54
+ }
55
+ catch (error) {
56
+ if (isUrl(pathOrUrl)) {
57
+ if (error.code === 'ECONNABORTED') {
58
+ throw new Error(`Timeout downloading config file from URL: ${pathOrUrl}`);
59
+ }
60
+ else if (error.response) {
61
+ throw new Error(`Failed to download config file from URL: ${pathOrUrl}. HTTP ${error.response.status}: ${error.response.statusText}`);
62
+ }
63
+ else if (error.request) {
64
+ throw new Error(`Network error downloading config file from URL: ${pathOrUrl}`);
65
+ }
66
+ else {
67
+ throw new Error(`Error downloading config file from URL: ${pathOrUrl}. ${error.message}`);
68
+ }
69
+ }
70
+ else {
71
+ throw new Error(`Failed to read file: ${pathOrUrl}. ${error.message}`);
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=urlConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlConfig.js","sourceRoot":"","sources":["../../src/config/urlConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const SERVER_ERROR_MESSAGE = "An error occurred while processing your request. Please try again later.";
2
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/constants/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,6EAA6E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const SERVER_ERROR_MESSAGE = 'An error occurred while processing your request. Please try again later.';
2
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/constants/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,0EAA0E,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SDK constants
3
+ * @internal
4
+ */
5
+ export { SERVER_ERROR_MESSAGE } from './errors.js';
6
+ export { LATEST_CONFIG_VERSION } from './versions.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}