@zqagent/core 0.2.16 → 0.3.6

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 (238) hide show
  1. package/README.md +1 -1
  2. package/README.oss.en.md +15 -2
  3. package/README.oss.md +18 -2
  4. package/README.oss.zh-TW.md +13 -2
  5. package/dist/McpClient-CEQBUPuC.d.cts +145 -0
  6. package/dist/McpClient-CEQBUPuC.d.ts +145 -0
  7. package/dist/{ToolRegistry-C3pTFiaJ.d.cts → ToolRegistry-Cy0fQxrb.d.ts} +2 -111
  8. package/dist/{ToolRegistry-C3pTFiaJ.d.ts → ToolRegistry-DouDvn9E.d.cts} +2 -111
  9. package/dist/{explore-RtZtb-V6.d.ts → TurnEngine-BPKhWuSI.d.cts} +108 -73
  10. package/dist/{explore-BgRhj6SP.d.cts → TurnEngine-DtGEuVLT.d.ts} +108 -73
  11. package/dist/conflictGuard-BBOOIxxK.d.cts +42 -0
  12. package/dist/conflictGuard-BBOOIxxK.d.ts +42 -0
  13. package/dist/index.cjs +5477 -1140
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +577 -195
  16. package/dist/index.d.ts +577 -195
  17. package/dist/index.js +5305 -1002
  18. package/dist/index.js.map +1 -1
  19. package/dist/internal/crypto/secrets.cjs +25 -0
  20. package/dist/internal/crypto/secrets.cjs.map +1 -0
  21. package/dist/internal/crypto/secrets.d.cts +2 -0
  22. package/dist/internal/crypto/secrets.d.ts +2 -0
  23. package/dist/internal/crypto/secrets.js +3 -0
  24. package/dist/internal/crypto/secrets.js.map +1 -0
  25. package/dist/internal/engine/FileLogHook.cjs +179 -0
  26. package/dist/internal/engine/FileLogHook.cjs.map +1 -0
  27. package/dist/internal/engine/FileLogHook.d.cts +67 -0
  28. package/dist/internal/engine/FileLogHook.d.ts +67 -0
  29. package/dist/internal/engine/FileLogHook.js +144 -0
  30. package/dist/internal/engine/FileLogHook.js.map +1 -0
  31. package/dist/internal/engine/approvalView.cjs +25 -0
  32. package/dist/internal/engine/approvalView.cjs.map +1 -0
  33. package/dist/internal/engine/approvalView.d.cts +1 -0
  34. package/dist/internal/engine/approvalView.d.ts +1 -0
  35. package/dist/internal/engine/approvalView.js +3 -0
  36. package/dist/internal/engine/approvalView.js.map +1 -0
  37. package/dist/internal/engine/limits.cjs +59 -0
  38. package/dist/internal/engine/limits.cjs.map +1 -0
  39. package/dist/internal/engine/limits.d.cts +32 -0
  40. package/dist/internal/engine/limits.d.ts +32 -0
  41. package/dist/internal/engine/limits.js +31 -0
  42. package/dist/internal/engine/limits.js.map +1 -0
  43. package/dist/internal/engine/sessionNaming.cjs +47 -0
  44. package/dist/internal/engine/sessionNaming.cjs.map +1 -0
  45. package/dist/internal/engine/sessionNaming.d.cts +25 -0
  46. package/dist/internal/engine/sessionNaming.d.ts +25 -0
  47. package/dist/internal/engine/sessionNaming.js +20 -0
  48. package/dist/internal/engine/sessionNaming.js.map +1 -0
  49. package/dist/internal/llmConfig.cjs +561 -0
  50. package/dist/internal/llmConfig.cjs.map +1 -0
  51. package/dist/internal/llmConfig.d.cts +75 -0
  52. package/dist/internal/llmConfig.d.ts +75 -0
  53. package/dist/internal/llmConfig.js +535 -0
  54. package/dist/internal/llmConfig.js.map +1 -0
  55. package/dist/internal/mcp/builtin/index.cjs +685 -0
  56. package/dist/internal/mcp/builtin/index.cjs.map +1 -0
  57. package/dist/internal/mcp/builtin/index.d.cts +21 -0
  58. package/dist/internal/mcp/builtin/index.d.ts +21 -0
  59. package/dist/internal/mcp/builtin/index.js +652 -0
  60. package/dist/internal/mcp/builtin/index.js.map +1 -0
  61. package/dist/internal/mcp/config.cjs +278 -0
  62. package/dist/internal/mcp/config.cjs.map +1 -0
  63. package/dist/internal/mcp/config.d.cts +61 -0
  64. package/dist/internal/mcp/config.d.ts +61 -0
  65. package/dist/internal/mcp/config.js +235 -0
  66. package/dist/internal/mcp/config.js.map +1 -0
  67. package/dist/internal/mcp/presets.cjs +184 -0
  68. package/dist/internal/mcp/presets.cjs.map +1 -0
  69. package/dist/internal/mcp/presets.d.cts +39 -0
  70. package/dist/internal/mcp/presets.d.ts +39 -0
  71. package/dist/internal/mcp/presets.js +158 -0
  72. package/dist/internal/mcp/presets.js.map +1 -0
  73. package/dist/internal/node-name.cjs +45 -0
  74. package/dist/internal/node-name.cjs.map +1 -0
  75. package/dist/internal/node-name.d.cts +3 -0
  76. package/dist/internal/node-name.d.ts +3 -0
  77. package/dist/internal/node-name.js +10 -0
  78. package/dist/internal/node-name.js.map +1 -0
  79. package/dist/internal/paths.cjs +63 -0
  80. package/dist/internal/paths.cjs.map +1 -0
  81. package/dist/internal/paths.d.cts +17 -0
  82. package/dist/internal/paths.d.ts +17 -0
  83. package/dist/internal/paths.js +25 -0
  84. package/dist/internal/paths.js.map +1 -0
  85. package/dist/internal/providers/diagnostics.cjs +288 -0
  86. package/dist/internal/providers/diagnostics.cjs.map +1 -0
  87. package/dist/internal/providers/diagnostics.d.cts +103 -0
  88. package/dist/internal/providers/diagnostics.d.ts +103 -0
  89. package/dist/internal/providers/diagnostics.js +250 -0
  90. package/dist/internal/providers/diagnostics.js.map +1 -0
  91. package/dist/internal/providers/models.cjs +699 -0
  92. package/dist/internal/providers/models.cjs.map +1 -0
  93. package/dist/internal/providers/models.d.cts +136 -0
  94. package/dist/internal/providers/models.d.ts +136 -0
  95. package/dist/internal/providers/models.js +654 -0
  96. package/dist/internal/providers/models.js.map +1 -0
  97. package/dist/internal/terminal.cjs +161 -0
  98. package/dist/internal/terminal.cjs.map +1 -0
  99. package/dist/internal/terminal.d.cts +58 -0
  100. package/dist/internal/terminal.d.ts +58 -0
  101. package/dist/internal/terminal.js +128 -0
  102. package/dist/internal/terminal.js.map +1 -0
  103. package/dist/internal/tools/execAsync.cjs +187 -0
  104. package/dist/internal/tools/execAsync.cjs.map +1 -0
  105. package/dist/internal/tools/execAsync.d.cts +30 -0
  106. package/dist/internal/tools/execAsync.d.ts +30 -0
  107. package/dist/internal/tools/execAsync.js +162 -0
  108. package/dist/internal/tools/execAsync.js.map +1 -0
  109. package/dist/internal/tools/git.cjs +935 -0
  110. package/dist/internal/tools/git.cjs.map +1 -0
  111. package/dist/internal/tools/git.d.cts +206 -0
  112. package/dist/internal/tools/git.d.ts +206 -0
  113. package/dist/internal/tools/git.js +883 -0
  114. package/dist/internal/tools/git.js.map +1 -0
  115. package/dist/internal/tools/pathSafety.cjs +99 -0
  116. package/dist/internal/tools/pathSafety.cjs.map +1 -0
  117. package/dist/internal/tools/pathSafety.d.cts +44 -0
  118. package/dist/internal/tools/pathSafety.d.ts +44 -0
  119. package/dist/internal/tools/pathSafety.js +61 -0
  120. package/dist/internal/tools/pathSafety.js.map +1 -0
  121. package/dist/internal/tools/plan.cjs +146 -0
  122. package/dist/internal/tools/plan.cjs.map +1 -0
  123. package/dist/internal/tools/plan.d.cts +48 -0
  124. package/dist/internal/tools/plan.d.ts +48 -0
  125. package/dist/internal/tools/plan.js +117 -0
  126. package/dist/internal/tools/plan.js.map +1 -0
  127. package/dist/internal/tools/ripgrep.cjs +118 -0
  128. package/dist/internal/tools/ripgrep.cjs.map +1 -0
  129. package/dist/internal/tools/ripgrep.d.cts +6 -0
  130. package/dist/internal/tools/ripgrep.d.ts +6 -0
  131. package/dist/internal/tools/ripgrep.js +89 -0
  132. package/dist/internal/tools/ripgrep.js.map +1 -0
  133. package/dist/internal/tools/sandbox.cjs +253 -0
  134. package/dist/internal/tools/sandbox.cjs.map +1 -0
  135. package/dist/internal/tools/sandbox.d.cts +67 -0
  136. package/dist/internal/tools/sandbox.d.ts +67 -0
  137. package/dist/internal/tools/sandbox.js +213 -0
  138. package/dist/internal/tools/sandbox.js.map +1 -0
  139. package/dist/internal/tools/shell.cjs +771 -0
  140. package/dist/internal/tools/shell.cjs.map +1 -0
  141. package/dist/internal/tools/shell.d.cts +47 -0
  142. package/dist/internal/tools/shell.d.ts +47 -0
  143. package/dist/internal/tools/shell.js +731 -0
  144. package/dist/internal/tools/shell.js.map +1 -0
  145. package/dist/internal/tools/shellRuntime.cjs +220 -0
  146. package/dist/internal/tools/shellRuntime.cjs.map +1 -0
  147. package/dist/internal/tools/shellRuntime.d.cts +67 -0
  148. package/dist/internal/tools/shellRuntime.d.ts +67 -0
  149. package/dist/internal/tools/shellRuntime.js +181 -0
  150. package/dist/internal/tools/shellRuntime.js.map +1 -0
  151. package/dist/internal/update/controller.cjs +1035 -0
  152. package/dist/internal/update/controller.cjs.map +1 -0
  153. package/dist/internal/update/controller.d.cts +150 -0
  154. package/dist/internal/update/controller.d.ts +150 -0
  155. package/dist/internal/update/controller.js +991 -0
  156. package/dist/internal/update/controller.js.map +1 -0
  157. package/dist/internal/update/platform.cjs +234 -0
  158. package/dist/internal/update/platform.cjs.map +1 -0
  159. package/dist/internal/update/platform.d.cts +77 -0
  160. package/dist/internal/update/platform.d.ts +77 -0
  161. package/dist/internal/update/platform.js +184 -0
  162. package/dist/internal/update/platform.js.map +1 -0
  163. package/dist/tools/ask.d.cts +3 -1
  164. package/dist/tools/ask.d.ts +3 -1
  165. package/dist/tools/diff.cjs +17 -6
  166. package/dist/tools/diff.cjs.map +1 -1
  167. package/dist/tools/diff.d.cts +5 -2
  168. package/dist/tools/diff.d.ts +5 -2
  169. package/dist/tools/diff.js +17 -6
  170. package/dist/tools/diff.js.map +1 -1
  171. package/dist/tools/directories.d.cts +3 -1
  172. package/dist/tools/directories.d.ts +3 -1
  173. package/dist/tools/explore.cjs +1778 -204
  174. package/dist/tools/explore.cjs.map +1 -1
  175. package/dist/tools/explore.d.cts +82 -2
  176. package/dist/tools/explore.d.ts +82 -2
  177. package/dist/tools/explore.js +1780 -204
  178. package/dist/tools/explore.js.map +1 -1
  179. package/dist/tools/files.cjs +56 -21
  180. package/dist/tools/files.cjs.map +1 -1
  181. package/dist/tools/files.d.cts +6 -3
  182. package/dist/tools/files.d.ts +6 -3
  183. package/dist/tools/files.js +56 -21
  184. package/dist/tools/files.js.map +1 -1
  185. package/dist/tools/git.cjs +34 -25
  186. package/dist/tools/git.cjs.map +1 -1
  187. package/dist/tools/git.d.cts +4 -204
  188. package/dist/tools/git.d.ts +4 -204
  189. package/dist/tools/git.js +34 -25
  190. package/dist/tools/git.js.map +1 -1
  191. package/dist/tools/media.cjs +280 -3
  192. package/dist/tools/media.cjs.map +1 -1
  193. package/dist/tools/media.d.cts +3 -1
  194. package/dist/tools/media.d.ts +3 -1
  195. package/dist/tools/media.js +278 -1
  196. package/dist/tools/media.js.map +1 -1
  197. package/dist/tools/plan.cjs +62 -0
  198. package/dist/tools/plan.cjs.map +1 -1
  199. package/dist/tools/plan.d.cts +4 -17
  200. package/dist/tools/plan.d.ts +4 -17
  201. package/dist/tools/plan.js +59 -0
  202. package/dist/tools/plan.js.map +1 -1
  203. package/dist/tools/search.cjs +3 -0
  204. package/dist/tools/search.cjs.map +1 -1
  205. package/dist/tools/search.d.cts +3 -1
  206. package/dist/tools/search.d.ts +3 -1
  207. package/dist/tools/search.js +3 -0
  208. package/dist/tools/search.js.map +1 -1
  209. package/dist/tools/shell.cjs +76 -11
  210. package/dist/tools/shell.cjs.map +1 -1
  211. package/dist/tools/shell.d.cts +5 -39
  212. package/dist/tools/shell.d.ts +5 -39
  213. package/dist/tools/shell.js +75 -11
  214. package/dist/tools/shell.js.map +1 -1
  215. package/dist/tools/todo.d.cts +3 -1
  216. package/dist/tools/todo.d.ts +3 -1
  217. package/dist/tools/web.cjs +279 -5
  218. package/dist/tools/web.cjs.map +1 -1
  219. package/dist/tools/web.d.cts +3 -1
  220. package/dist/tools/web.d.ts +3 -1
  221. package/dist/tools/web.js +275 -3
  222. package/dist/tools/web.js.map +1 -1
  223. package/dist/types-BYyXWWPW.d.cts +237 -0
  224. package/dist/types-BYyXWWPW.d.ts +237 -0
  225. package/package.json +26 -37
  226. package/bin/zqagent +0 -2
  227. package/dist/cli/index.cjs +0 -24507
  228. package/dist/cli/index.cjs.map +0 -1
  229. package/dist/cli/index.d.cts +0 -2
  230. package/dist/cli/index.d.ts +0 -2
  231. package/dist/cli/index.js +0 -24490
  232. package/dist/cli/index.js.map +0 -1
  233. package/dist/server/index.cjs +0 -19824
  234. package/dist/server/index.cjs.map +0 -1
  235. package/dist/server/index.d.cts +0 -2
  236. package/dist/server/index.d.ts +0 -2
  237. package/dist/server/index.js +0 -19807
  238. package/dist/server/index.js.map +0 -1
@@ -0,0 +1,561 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/llmConfig.ts
32
+ var llmConfig_exports = {};
33
+ __export(llmConfig_exports, {
34
+ autoProviderName: () => autoProviderName,
35
+ commonLegacyFiles: () => commonLegacyFiles,
36
+ decryptKey: () => decryptKey,
37
+ encryptKey: () => encryptKey,
38
+ fixStaleName: () => fixStaleName,
39
+ llmConfigFile: () => llmConfigFile,
40
+ newProviderId: () => newProviderId,
41
+ readLlmConfig: () => readLlmConfig,
42
+ writeLlmConfig: () => writeLlmConfig
43
+ });
44
+ module.exports = __toCommonJS(llmConfig_exports);
45
+ var fs = __toESM(require("fs"), 1);
46
+ var path2 = __toESM(require("path"), 1);
47
+ var crypto = __toESM(require("crypto"), 1);
48
+
49
+ // src/crypto/secrets.ts
50
+ var secrets_exports = {};
51
+ __reExport(secrets_exports, require("@zqagent/shared/secrets"));
52
+
53
+ // src/providers/proxy.ts
54
+ var import_node_fetch = __toESM(require("node-fetch"), 1);
55
+
56
+ // ../../node_modules/.pnpm/socks-proxy-agent@9.0.0_supports-color@7.2.0/node_modules/socks-proxy-agent/dist/index.js
57
+ var import_socks = require("socks");
58
+
59
+ // ../../node_modules/.pnpm/agent-base@8.0.0/node_modules/agent-base/dist/index.js
60
+ var net = __toESM(require("net"), 1);
61
+ var http = __toESM(require("http"), 1);
62
+ var import_https = require("https");
63
+ var INTERNAL = /* @__PURE__ */ Symbol("AgentBaseInternalState");
64
+ var Agent2 = class extends http.Agent {
65
+ constructor(opts) {
66
+ super(opts);
67
+ this[INTERNAL] = {};
68
+ }
69
+ /**
70
+ * Determine whether this is an `http` or `https` request.
71
+ */
72
+ isSecureEndpoint(options) {
73
+ if (options) {
74
+ if (typeof options.secureEndpoint === "boolean") {
75
+ return options.secureEndpoint;
76
+ }
77
+ if (typeof options.protocol === "string") {
78
+ return options.protocol === "https:";
79
+ }
80
+ }
81
+ const { stack } = new Error();
82
+ if (typeof stack !== "string")
83
+ return false;
84
+ return stack.split("\n").some((l) => l.indexOf("(https.js:") !== -1 || l.indexOf("node:https:") !== -1);
85
+ }
86
+ // In order to support async signatures in `connect()` and Node's native
87
+ // connection pooling in `http.Agent`, the array of sockets for each origin
88
+ // has to be updated synchronously. This is so the length of the array is
89
+ // accurate when `addRequest()` is next called. We achieve this by creating a
90
+ // fake socket and adding it to `sockets[origin]` and incrementing
91
+ // `totalSocketCount`.
92
+ incrementSockets(name) {
93
+ if (this.maxSockets === Infinity && this.maxTotalSockets === Infinity) {
94
+ return null;
95
+ }
96
+ if (!this.sockets[name]) {
97
+ this.sockets[name] = [];
98
+ }
99
+ const fakeSocket = new net.Socket({ writable: false });
100
+ this.sockets[name].push(fakeSocket);
101
+ this.totalSocketCount++;
102
+ return fakeSocket;
103
+ }
104
+ decrementSockets(name, socket) {
105
+ if (!this.sockets[name] || socket === null) {
106
+ return;
107
+ }
108
+ const sockets = this.sockets[name];
109
+ const index = sockets.indexOf(socket);
110
+ if (index !== -1) {
111
+ sockets.splice(index, 1);
112
+ this.totalSocketCount--;
113
+ if (sockets.length === 0) {
114
+ delete this.sockets[name];
115
+ }
116
+ }
117
+ }
118
+ // In order to properly update the socket pool, we need to call `getName()` on
119
+ // the core `https.Agent` if it is a secureEndpoint.
120
+ getName(options) {
121
+ const secureEndpoint = this.isSecureEndpoint(options);
122
+ if (secureEndpoint) {
123
+ return import_https.Agent.prototype.getName.call(this, options);
124
+ }
125
+ return super.getName(options);
126
+ }
127
+ createSocket(req, options, cb) {
128
+ const connectOpts = {
129
+ ...options,
130
+ secureEndpoint: this.isSecureEndpoint(options)
131
+ };
132
+ const name = this.getName(connectOpts);
133
+ const fakeSocket = this.incrementSockets(name);
134
+ Promise.resolve().then(() => this.connect(req, connectOpts)).then((socket) => {
135
+ this.decrementSockets(name, fakeSocket);
136
+ if (socket instanceof http.Agent) {
137
+ try {
138
+ return socket.addRequest(req, connectOpts);
139
+ } catch (err) {
140
+ return cb(err);
141
+ }
142
+ }
143
+ this[INTERNAL].currentSocket = socket;
144
+ super.createSocket(req, options, cb);
145
+ }, (err) => {
146
+ this.decrementSockets(name, fakeSocket);
147
+ cb(err);
148
+ });
149
+ }
150
+ createConnection() {
151
+ const socket = this[INTERNAL].currentSocket;
152
+ this[INTERNAL].currentSocket = void 0;
153
+ if (!socket) {
154
+ throw new Error("No socket was returned in the `connect()` function");
155
+ }
156
+ return socket;
157
+ }
158
+ get defaultPort() {
159
+ return this[INTERNAL].defaultPort ?? (this.protocol === "https:" ? 443 : 80);
160
+ }
161
+ set defaultPort(v) {
162
+ if (this[INTERNAL]) {
163
+ this[INTERNAL].defaultPort = v;
164
+ }
165
+ }
166
+ get protocol() {
167
+ return this[INTERNAL].protocol ?? (this.isSecureEndpoint() ? "https:" : "http:");
168
+ }
169
+ set protocol(v) {
170
+ if (this[INTERNAL]) {
171
+ this[INTERNAL].protocol = v;
172
+ }
173
+ }
174
+ };
175
+
176
+ // ../../node_modules/.pnpm/socks-proxy-agent@9.0.0_supports-color@7.2.0/node_modules/socks-proxy-agent/dist/index.js
177
+ var import_debug = __toESM(require("debug"), 1);
178
+ var dns = __toESM(require("dns"), 1);
179
+ var net2 = __toESM(require("net"), 1);
180
+ var tls = __toESM(require("tls"), 1);
181
+ var import_url = require("url");
182
+ var debug = (0, import_debug.default)("socks-proxy-agent");
183
+ var setServernameFromNonIpHost = (options) => {
184
+ if (options.servername === void 0 && options.host && !net2.isIP(options.host)) {
185
+ return {
186
+ ...options,
187
+ servername: options.host
188
+ };
189
+ }
190
+ return options;
191
+ };
192
+ function parseSocksURL(url) {
193
+ let lookup2 = false;
194
+ let type = 5;
195
+ const host = url.hostname;
196
+ const port = parseInt(url.port, 10) || 1080;
197
+ switch (url.protocol.replace(":", "")) {
198
+ case "socks4":
199
+ lookup2 = true;
200
+ type = 4;
201
+ break;
202
+ // pass through
203
+ case "socks4a":
204
+ type = 4;
205
+ break;
206
+ case "socks5":
207
+ lookup2 = true;
208
+ type = 5;
209
+ break;
210
+ // pass through
211
+ case "socks":
212
+ type = 5;
213
+ break;
214
+ case "socks5h":
215
+ type = 5;
216
+ break;
217
+ default:
218
+ throw new TypeError(`A "socks" protocol must be specified! Got: ${String(url.protocol)}`);
219
+ }
220
+ const proxy = {
221
+ host,
222
+ port,
223
+ type
224
+ };
225
+ if (url.username) {
226
+ Object.defineProperty(proxy, "userId", {
227
+ value: decodeURIComponent(url.username),
228
+ enumerable: false
229
+ });
230
+ }
231
+ if (url.password != null) {
232
+ Object.defineProperty(proxy, "password", {
233
+ value: decodeURIComponent(url.password),
234
+ enumerable: false
235
+ });
236
+ }
237
+ return { lookup: lookup2, proxy };
238
+ }
239
+ var SocksProxyAgent = class extends Agent2 {
240
+ constructor(uri, opts) {
241
+ super(opts);
242
+ const url = typeof uri === "string" ? new import_url.URL(uri) : uri;
243
+ const { proxy, lookup: lookup2 } = parseSocksURL(url);
244
+ this.shouldLookup = lookup2;
245
+ this.proxy = proxy;
246
+ this.timeout = opts?.timeout ?? null;
247
+ this.socketOptions = opts?.socketOptions ?? null;
248
+ }
249
+ /**
250
+ * Initiates a SOCKS connection to the specified SOCKS proxy server,
251
+ * which in turn connects to the specified remote host and port.
252
+ */
253
+ async connect(req, opts) {
254
+ const { shouldLookup, proxy, timeout } = this;
255
+ if (!opts.host) {
256
+ throw new Error("No `host` defined!");
257
+ }
258
+ let { host } = opts;
259
+ const { port, lookup: lookupFn = dns.lookup } = opts;
260
+ if (shouldLookup) {
261
+ host = await new Promise((resolve, reject) => {
262
+ lookupFn(host, {}, (err, address) => {
263
+ if (err) {
264
+ reject(err);
265
+ } else {
266
+ resolve(typeof address === "string" ? address : address[0].address);
267
+ }
268
+ });
269
+ });
270
+ }
271
+ const socksOpts = {
272
+ proxy,
273
+ destination: {
274
+ host,
275
+ port: typeof port === "number" ? port : parseInt(port, 10)
276
+ },
277
+ command: "connect",
278
+ timeout: timeout ?? void 0,
279
+ // @ts-expect-error the type supplied by socks for socket_options is wider
280
+ // than necessary since socks will always override the host and port
281
+ socket_options: this.socketOptions ?? void 0
282
+ };
283
+ const cleanup = (tlsSocket) => {
284
+ req.destroy();
285
+ socket.destroy();
286
+ if (tlsSocket)
287
+ tlsSocket.destroy();
288
+ };
289
+ debug("Creating socks proxy connection: %o", socksOpts);
290
+ const { socket } = await import_socks.SocksClient.createConnection(socksOpts);
291
+ debug("Successfully created socks proxy connection");
292
+ if (timeout !== null) {
293
+ socket.setTimeout(timeout);
294
+ socket.on("timeout", () => cleanup());
295
+ }
296
+ if (opts.secureEndpoint) {
297
+ debug("Upgrading socket connection to TLS");
298
+ const tlsSocket = tls.connect({
299
+ ...omit(setServernameFromNonIpHost(opts), "host", "path", "port"),
300
+ socket
301
+ });
302
+ tlsSocket.once("error", (error) => {
303
+ debug("Socket TLS error", error.message);
304
+ cleanup(tlsSocket);
305
+ });
306
+ return tlsSocket;
307
+ }
308
+ return socket;
309
+ }
310
+ };
311
+ SocksProxyAgent.protocols = [
312
+ "socks",
313
+ "socks4",
314
+ "socks4a",
315
+ "socks5",
316
+ "socks5h"
317
+ ];
318
+ function omit(obj, ...keys) {
319
+ const ret = {};
320
+ let key;
321
+ for (key in obj) {
322
+ if (!keys.includes(key)) {
323
+ ret[key] = obj[key];
324
+ }
325
+ }
326
+ return ret;
327
+ }
328
+
329
+ // src/providers/models.ts
330
+ var import_model_capabilities = require("@zqagent/shared/model-capabilities");
331
+ function normalizeModelMeta(v) {
332
+ if (!Array.isArray(v)) return void 0;
333
+ const out = [];
334
+ const seen = /* @__PURE__ */ new Set();
335
+ for (const x of v) {
336
+ if (!x || typeof x !== "object") continue;
337
+ const rec = x;
338
+ const id = String(rec.id ?? "").trim();
339
+ if (!id || seen.has(id)) continue;
340
+ seen.add(id);
341
+ const ctx = Number(rec.contextWindow);
342
+ const capabilities = (0, import_model_capabilities.normalizeCapabilities)(rec.capabilities);
343
+ out.push({
344
+ id,
345
+ ...Number.isFinite(ctx) && ctx > 0 ? { contextWindow: ctx } : {},
346
+ ...capabilities ? { capabilities } : {}
347
+ });
348
+ if (out.length >= 500) break;
349
+ }
350
+ return out;
351
+ }
352
+
353
+ // src/paths.ts
354
+ var os = __toESM(require("os"), 1);
355
+ var path = __toESM(require("path"), 1);
356
+ var APP_DIR_NAME = "zqagent";
357
+ var IS_WINDOWS = process.platform === "win32";
358
+ function homeDir() {
359
+ return process.env.HOME || process.env.USERPROFILE || os.homedir() || os.tmpdir();
360
+ }
361
+ function configDir() {
362
+ const base = process.env.XDG_CONFIG_HOME || (IS_WINDOWS ? process.env.APPDATA : void 0) || path.join(homeDir(), ".config");
363
+ return path.join(base, APP_DIR_NAME);
364
+ }
365
+ function stateDir() {
366
+ const base = process.env.XDG_STATE_HOME || (IS_WINDOWS ? process.env.LOCALAPPDATA : void 0) || path.join(homeDir(), ".local", "state");
367
+ return path.join(base, APP_DIR_NAME);
368
+ }
369
+
370
+ // src/llmConfig.ts
371
+ var import_llm_presets = require("@zqagent/shared/llm-presets");
372
+ function llmConfigFile() {
373
+ const override = process.env.ZQAGENT_LLM_CONFIG_FILE?.trim();
374
+ if (override) return override;
375
+ return path2.join(configDir(), "connections.json");
376
+ }
377
+ var keyCache = /* @__PURE__ */ new Map();
378
+ function masterKeyFileFor(file) {
379
+ return path2.join(path2.dirname(file), "secret.key");
380
+ }
381
+ function getMasterKey(file) {
382
+ const keyFile = masterKeyFileFor(file);
383
+ let key = keyCache.get(keyFile);
384
+ if (!key) {
385
+ key = (0, secrets_exports.loadOrCreateMasterKey)(keyFile);
386
+ keyCache.set(keyFile, key);
387
+ }
388
+ return key;
389
+ }
390
+ function encryptKey(plain, file = llmConfigFile()) {
391
+ return (0, secrets_exports.encryptWithKey)(getMasterKey(file), plain);
392
+ }
393
+ function decryptKey(payload, file = llmConfigFile()) {
394
+ return (0, secrets_exports.decryptWithKey)(getMasterKey(file), payload);
395
+ }
396
+ function newProviderId() {
397
+ return crypto.randomBytes(8).toString("hex");
398
+ }
399
+ function normEffort(v) {
400
+ return v === "low" || v === "medium" || v === "high" ? v : null;
401
+ }
402
+ function normModelList(v) {
403
+ if (!Array.isArray(v)) return void 0;
404
+ const out = [];
405
+ const seen = /* @__PURE__ */ new Set();
406
+ for (const x of v) {
407
+ const s = String(x ?? "").trim();
408
+ if (!s || seen.has(s)) continue;
409
+ seen.add(s);
410
+ out.push(s);
411
+ if (out.length >= 500) break;
412
+ }
413
+ return out.length ? out : void 0;
414
+ }
415
+ function guessTypeByBaseURL(baseURL) {
416
+ const u = baseURL.toLowerCase().replace(/\/+$/, "");
417
+ if (!u) return "custom";
418
+ for (const p of KNOWN_PRESETS) {
419
+ const b = p.baseURL.toLowerCase().replace(/\/+$/, "");
420
+ if (b && (u === b || u.startsWith(b))) return p.id;
421
+ }
422
+ return "custom";
423
+ }
424
+ var KNOWN_PRESETS = ["openai", "deepseek", "qwen", "zhipu", "moonshot", "xiaomi"].map(
425
+ (id) => ({ id, baseURL: (0, import_llm_presets.llmPreset)(id)?.baseURL ?? "" })
426
+ );
427
+ function parseEntry(o, file) {
428
+ if (!o || typeof o !== "object") return null;
429
+ const r = o;
430
+ const baseURL = typeof r.baseURL === "string" ? r.baseURL : "";
431
+ const model = typeof r.model === "string" ? r.model : "";
432
+ let type = String(r.type ?? r.provider ?? "").trim();
433
+ if (!type) type = guessTypeByBaseURL(baseURL);
434
+ let apiKeyEnc = typeof r.apiKeyEnc === "string" ? r.apiKeyEnc : "";
435
+ const plain = typeof r.apiKey === "string" ? r.apiKey.trim() : "";
436
+ if (!apiKeyEnc && plain) apiKeyEnc = encryptKey(plain, file);
437
+ if (!baseURL && !model && !apiKeyEnc && !type) return null;
438
+ const models = normModelList(r.models);
439
+ const nonChat = normModelList(r.nonChat);
440
+ const modelMeta = normalizeModelMeta(r.modelMeta);
441
+ const name = String(r.name ?? "").trim() || autoProviderName(type, model);
442
+ return {
443
+ id: typeof r.id === "string" && r.id ? r.id : newProviderId(),
444
+ name,
445
+ type,
446
+ baseURL,
447
+ model,
448
+ reasoningEffort: normEffort(r.reasoningEffort),
449
+ apiKeyEnc,
450
+ ...models ? { models } : {},
451
+ ...nonChat ? { nonChat } : {},
452
+ ...modelMeta ? { modelMeta } : {}
453
+ };
454
+ }
455
+ function autoProviderName(type, model) {
456
+ const name = (0, import_llm_presets.llmPreset)(type)?.name ?? type ?? "";
457
+ return model ? `${name} \xB7 ${model}` : name;
458
+ }
459
+ var PRESET_NAMES = new Set(
460
+ ["openai", "deepseek", "qwen", "zhipu", "moonshot", "xiaomi", "custom"].map(
461
+ (id) => (0, import_llm_presets.llmPreset)(id)?.name ?? ""
462
+ )
463
+ );
464
+ function fixStaleName(p) {
465
+ const label = (0, import_llm_presets.llmPreset)(p.type)?.name ?? p.type;
466
+ const fresh = autoProviderName(p.type, p.model);
467
+ if (p.name === fresh) return false;
468
+ const looksAuto = p.name === label || p.name.startsWith(`${label} \xB7 `) || PRESET_NAMES.has(p.name);
469
+ if (!looksAuto) return false;
470
+ p.name = fresh;
471
+ return true;
472
+ }
473
+ function emptyConfig() {
474
+ return { version: 3, activeId: null, providers: [] };
475
+ }
476
+ function normalize(f) {
477
+ const byId = /* @__PURE__ */ new Map();
478
+ for (const p of f.providers) byId.set(p.id, p);
479
+ const providers = [...byId.values()];
480
+ const activeId = providers.some((p) => p.id === f.activeId) ? f.activeId : providers[0]?.id ?? null;
481
+ return { ...f, providers, activeId };
482
+ }
483
+ function readRaw(file, keyFile = file) {
484
+ if (!fs.existsSync(file)) return null;
485
+ let raw;
486
+ try {
487
+ raw = JSON.parse(fs.readFileSync(file, "utf8"));
488
+ } catch {
489
+ return null;
490
+ }
491
+ if (!raw || typeof raw !== "object") return null;
492
+ const o = raw;
493
+ if (Array.isArray(o.providers)) {
494
+ const providers = o.providers.map((x) => parseEntry(x, keyFile)).filter((p) => p !== null);
495
+ const activeId = typeof o.activeId === "string" ? o.activeId : typeof o.defaultProviderId === "string" ? o.defaultProviderId : null;
496
+ const migratedFrom = Array.isArray(o.migratedFrom) ? o.migratedFrom.filter((x) => typeof x === "string") : void 0;
497
+ return normalize({
498
+ version: 3,
499
+ activeId,
500
+ providers,
501
+ ...migratedFrom ? { migratedFrom } : {}
502
+ });
503
+ }
504
+ const single = parseEntry(o, keyFile);
505
+ if (single) return { version: 3, activeId: single.id, providers: [single] };
506
+ return null;
507
+ }
508
+ function mergeExternal(base, file, targetFile) {
509
+ const migrated = base.migratedFrom ?? [];
510
+ if (migrated.includes(file)) return { config: base, changed: false };
511
+ const ext = readRaw(file, targetFile);
512
+ if (!ext || ext.providers.length === 0) {
513
+ return { config: base, changed: false };
514
+ }
515
+ const have = new Set(base.providers.map((p) => p.id));
516
+ const added = ext.providers.filter((p) => !have.has(p.id));
517
+ const config = normalize({
518
+ ...base,
519
+ providers: [...base.providers, ...added],
520
+ activeId: base.activeId ?? ext.activeId,
521
+ migratedFrom: [...migrated, file]
522
+ });
523
+ return { config, changed: true };
524
+ }
525
+ function readLlmConfig(opts = {}) {
526
+ const file = opts.file ?? llmConfigFile();
527
+ let f = readRaw(file) ?? emptyConfig();
528
+ let changed = false;
529
+ if (f.providers.map(fixStaleName).some(Boolean)) changed = true;
530
+ for (const legacy of opts.legacyFiles ?? []) {
531
+ const r = mergeExternal(f, legacy, file);
532
+ f = r.config;
533
+ changed = changed || r.changed;
534
+ }
535
+ if (changed || !fs.existsSync(file)) writeLlmConfig(f, file);
536
+ return f;
537
+ }
538
+ function writeLlmConfig(f, file = llmConfigFile()) {
539
+ const next = normalize(f);
540
+ fs.mkdirSync(path2.dirname(file), { recursive: true, mode: 448 });
541
+ fs.writeFileSync(file, JSON.stringify(next, null, 2) + "\n", {
542
+ mode: 384,
543
+ encoding: "utf8"
544
+ });
545
+ }
546
+ function commonLegacyFiles() {
547
+ return [path2.join(stateDir(), "data", "node-llm.json")];
548
+ }
549
+ // Annotate the CommonJS export names for ESM import in node:
550
+ 0 && (module.exports = {
551
+ autoProviderName,
552
+ commonLegacyFiles,
553
+ decryptKey,
554
+ encryptKey,
555
+ fixStaleName,
556
+ llmConfigFile,
557
+ newProviderId,
558
+ readLlmConfig,
559
+ writeLlmConfig
560
+ });
561
+ //# sourceMappingURL=llmConfig.cjs.map