@mseep/clawdcursor 1.5.5

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 (354) hide show
  1. package/CHANGELOG.md +2264 -0
  2. package/LICENSE +21 -0
  3. package/README.md +385 -0
  4. package/SECURITY.md +44 -0
  5. package/SKILL.md +503 -0
  6. package/dist/core/agent-loop/agent.d.ts +42 -0
  7. package/dist/core/agent-loop/agent.js +1023 -0
  8. package/dist/core/agent-loop/agent.js.map +1 -0
  9. package/dist/core/agent-loop/batch-tool.d.ts +25 -0
  10. package/dist/core/agent-loop/batch-tool.js +218 -0
  11. package/dist/core/agent-loop/batch-tool.js.map +1 -0
  12. package/dist/core/agent-loop/coord-scale.d.ts +72 -0
  13. package/dist/core/agent-loop/coord-scale.js +89 -0
  14. package/dist/core/agent-loop/coord-scale.js.map +1 -0
  15. package/dist/core/agent-loop/focus-guard.d.ts +24 -0
  16. package/dist/core/agent-loop/focus-guard.js +29 -0
  17. package/dist/core/agent-loop/focus-guard.js.map +1 -0
  18. package/dist/core/agent-loop/project-mcp.d.ts +97 -0
  19. package/dist/core/agent-loop/project-mcp.js +253 -0
  20. package/dist/core/agent-loop/project-mcp.js.map +1 -0
  21. package/dist/core/agent-loop/prompt.d.ts +45 -0
  22. package/dist/core/agent-loop/prompt.js +426 -0
  23. package/dist/core/agent-loop/prompt.js.map +1 -0
  24. package/dist/core/agent-loop/tool-meta.d.ts +93 -0
  25. package/dist/core/agent-loop/tool-meta.js +651 -0
  26. package/dist/core/agent-loop/tool-meta.js.map +1 -0
  27. package/dist/core/agent-loop/tools.d.ts +38 -0
  28. package/dist/core/agent-loop/tools.js +2134 -0
  29. package/dist/core/agent-loop/tools.js.map +1 -0
  30. package/dist/core/agent-loop/types.d.ts +170 -0
  31. package/dist/core/agent-loop/types.js +12 -0
  32. package/dist/core/agent-loop/types.js.map +1 -0
  33. package/dist/core/agent.d.ts +51 -0
  34. package/dist/core/agent.js +245 -0
  35. package/dist/core/agent.js.map +1 -0
  36. package/dist/core/app-categories.d.ts +67 -0
  37. package/dist/core/app-categories.js +108 -0
  38. package/dist/core/app-categories.js.map +1 -0
  39. package/dist/core/banner.d.ts +70 -0
  40. package/dist/core/banner.js +245 -0
  41. package/dist/core/banner.js.map +1 -0
  42. package/dist/core/classify/capability.d.ts +45 -0
  43. package/dist/core/classify/capability.js +78 -0
  44. package/dist/core/classify/capability.js.map +1 -0
  45. package/dist/core/decompose/llm-decomposer.d.ts +35 -0
  46. package/dist/core/decompose/llm-decomposer.js +156 -0
  47. package/dist/core/decompose/llm-decomposer.js.map +1 -0
  48. package/dist/core/decompose/parser.d.ts +27 -0
  49. package/dist/core/decompose/parser.js +101 -0
  50. package/dist/core/decompose/parser.js.map +1 -0
  51. package/dist/core/observability/correlation.d.ts +19 -0
  52. package/dist/core/observability/correlation.js +36 -0
  53. package/dist/core/observability/correlation.js.map +1 -0
  54. package/dist/core/observability/cost-meter.d.ts +51 -0
  55. package/dist/core/observability/cost-meter.js +134 -0
  56. package/dist/core/observability/cost-meter.js.map +1 -0
  57. package/dist/core/observability/logger.d.ts +61 -0
  58. package/dist/core/observability/logger.js +550 -0
  59. package/dist/core/observability/logger.js.map +1 -0
  60. package/dist/core/router/aliases.d.ts +50 -0
  61. package/dist/core/router/aliases.js +104 -0
  62. package/dist/core/router/aliases.js.map +1 -0
  63. package/dist/core/router/normalize.d.ts +41 -0
  64. package/dist/core/router/normalize.js +80 -0
  65. package/dist/core/router/normalize.js.map +1 -0
  66. package/dist/core/safety.d.ts +126 -0
  67. package/dist/core/safety.js +568 -0
  68. package/dist/core/safety.js.map +1 -0
  69. package/dist/core/sense/a11y-resolver.d.ts +73 -0
  70. package/dist/core/sense/a11y-resolver.js +76 -0
  71. package/dist/core/sense/a11y-resolver.js.map +1 -0
  72. package/dist/core/sense/fingerprint.d.ts +41 -0
  73. package/dist/core/sense/fingerprint.js +123 -0
  74. package/dist/core/sense/fingerprint.js.map +1 -0
  75. package/dist/core/sense/rank.d.ts +70 -0
  76. package/dist/core/sense/rank.js +192 -0
  77. package/dist/core/sense/rank.js.map +1 -0
  78. package/dist/core/sense/reactive-check.d.ts +40 -0
  79. package/dist/core/sense/reactive-check.js +48 -0
  80. package/dist/core/sense/reactive-check.js.map +1 -0
  81. package/dist/core/sense/snapshot.d.ts +19 -0
  82. package/dist/core/sense/snapshot.js +100 -0
  83. package/dist/core/sense/snapshot.js.map +1 -0
  84. package/dist/core/sense/types.d.ts +66 -0
  85. package/dist/core/sense/types.js +9 -0
  86. package/dist/core/sense/types.js.map +1 -0
  87. package/dist/core/sense/ui-map-anchors.d.ts +7 -0
  88. package/dist/core/sense/ui-map-anchors.js +24 -0
  89. package/dist/core/sense/ui-map-anchors.js.map +1 -0
  90. package/dist/core/sense/ui-map-elements.d.ts +5 -0
  91. package/dist/core/sense/ui-map-elements.js +33 -0
  92. package/dist/core/sense/ui-map-elements.js.map +1 -0
  93. package/dist/core/sense/ui-map-find.d.ts +56 -0
  94. package/dist/core/sense/ui-map-find.js +153 -0
  95. package/dist/core/sense/ui-map-find.js.map +1 -0
  96. package/dist/core/sense/ui-map-fuse.d.ts +4 -0
  97. package/dist/core/sense/ui-map-fuse.js +44 -0
  98. package/dist/core/sense/ui-map-fuse.js.map +1 -0
  99. package/dist/core/sense/ui-map-geom.d.ts +3 -0
  100. package/dist/core/sense/ui-map-geom.js +16 -0
  101. package/dist/core/sense/ui-map-geom.js.map +1 -0
  102. package/dist/core/sense/ui-map-holder.d.ts +58 -0
  103. package/dist/core/sense/ui-map-holder.js +87 -0
  104. package/dist/core/sense/ui-map-holder.js.map +1 -0
  105. package/dist/core/sense/ui-map-normalize.d.ts +19 -0
  106. package/dist/core/sense/ui-map-normalize.js +65 -0
  107. package/dist/core/sense/ui-map-normalize.js.map +1 -0
  108. package/dist/core/sense/ui-map-render.d.ts +4 -0
  109. package/dist/core/sense/ui-map-render.js +34 -0
  110. package/dist/core/sense/ui-map-render.js.map +1 -0
  111. package/dist/core/sense/ui-map-resolve.d.ts +41 -0
  112. package/dist/core/sense/ui-map-resolve.js +59 -0
  113. package/dist/core/sense/ui-map-resolve.js.map +1 -0
  114. package/dist/core/sense/ui-map-types.d.ts +66 -0
  115. package/dist/core/sense/ui-map-types.js +11 -0
  116. package/dist/core/sense/ui-map-types.js.map +1 -0
  117. package/dist/core/sense/ui-map.d.ts +29 -0
  118. package/dist/core/sense/ui-map.js +113 -0
  119. package/dist/core/sense/ui-map.js.map +1 -0
  120. package/dist/core/verify/assertions.d.ts +132 -0
  121. package/dist/core/verify/assertions.js +284 -0
  122. package/dist/core/verify/assertions.js.map +1 -0
  123. package/dist/index.d.ts +21 -0
  124. package/dist/index.js +24 -0
  125. package/dist/index.js.map +1 -0
  126. package/dist/llm/browser-config.d.ts +36 -0
  127. package/dist/llm/browser-config.js +83 -0
  128. package/dist/llm/browser-config.js.map +1 -0
  129. package/dist/llm/client.d.ts +268 -0
  130. package/dist/llm/client.js +1094 -0
  131. package/dist/llm/client.js.map +1 -0
  132. package/dist/llm/config.d.ts +79 -0
  133. package/dist/llm/config.js +375 -0
  134. package/dist/llm/config.js.map +1 -0
  135. package/dist/llm/credentials.d.ts +35 -0
  136. package/dist/llm/credentials.js +491 -0
  137. package/dist/llm/credentials.js.map +1 -0
  138. package/dist/llm/external-creds.d.ts +42 -0
  139. package/dist/llm/external-creds.js +169 -0
  140. package/dist/llm/external-creds.js.map +1 -0
  141. package/dist/llm/providers.d.ts +123 -0
  142. package/dist/llm/providers.js +717 -0
  143. package/dist/llm/providers.js.map +1 -0
  144. package/dist/paths.d.ts +31 -0
  145. package/dist/paths.js +147 -0
  146. package/dist/paths.js.map +1 -0
  147. package/dist/platform/accessibility.d.ts +139 -0
  148. package/dist/platform/accessibility.js +670 -0
  149. package/dist/platform/accessibility.js.map +1 -0
  150. package/dist/platform/cdp-driver.d.ts +318 -0
  151. package/dist/platform/cdp-driver.js +1179 -0
  152. package/dist/platform/cdp-driver.js.map +1 -0
  153. package/dist/platform/index.d.ts +11 -0
  154. package/dist/platform/index.js +69 -0
  155. package/dist/platform/index.js.map +1 -0
  156. package/dist/platform/keys.d.ts +17 -0
  157. package/dist/platform/keys.js +129 -0
  158. package/dist/platform/keys.js.map +1 -0
  159. package/dist/platform/launch-poll.d.ts +101 -0
  160. package/dist/platform/launch-poll.js +177 -0
  161. package/dist/platform/launch-poll.js.map +1 -0
  162. package/dist/platform/linux.d.ts +173 -0
  163. package/dist/platform/linux.js +1253 -0
  164. package/dist/platform/linux.js.map +1 -0
  165. package/dist/platform/macos.d.ts +136 -0
  166. package/dist/platform/macos.js +976 -0
  167. package/dist/platform/macos.js.map +1 -0
  168. package/dist/platform/native-desktop.d.ts +145 -0
  169. package/dist/platform/native-desktop.js +936 -0
  170. package/dist/platform/native-desktop.js.map +1 -0
  171. package/dist/platform/native-helper.d.ts +130 -0
  172. package/dist/platform/native-helper.js +592 -0
  173. package/dist/platform/native-helper.js.map +1 -0
  174. package/dist/platform/ocr-engine.d.ts +78 -0
  175. package/dist/platform/ocr-engine.js +363 -0
  176. package/dist/platform/ocr-engine.js.map +1 -0
  177. package/dist/platform/ps-runner.d.ts +28 -0
  178. package/dist/platform/ps-runner.js +228 -0
  179. package/dist/platform/ps-runner.js.map +1 -0
  180. package/dist/platform/types.d.ts +397 -0
  181. package/dist/platform/types.js +15 -0
  182. package/dist/platform/types.js.map +1 -0
  183. package/dist/platform/uri-handler.d.ts +75 -0
  184. package/dist/platform/uri-handler.js +273 -0
  185. package/dist/platform/uri-handler.js.map +1 -0
  186. package/dist/platform/wayland-backend.d.ts +53 -0
  187. package/dist/platform/wayland-backend.js +348 -0
  188. package/dist/platform/wayland-backend.js.map +1 -0
  189. package/dist/platform/windows.d.ts +232 -0
  190. package/dist/platform/windows.js +1210 -0
  191. package/dist/platform/windows.js.map +1 -0
  192. package/dist/postbuild.d.ts +10 -0
  193. package/dist/postbuild.js +98 -0
  194. package/dist/postbuild.js.map +1 -0
  195. package/dist/schema/snapshot.d.ts +33 -0
  196. package/dist/schema/snapshot.js +90 -0
  197. package/dist/schema/snapshot.js.map +1 -0
  198. package/dist/shortcuts.d.ts +30 -0
  199. package/dist/shortcuts.js +261 -0
  200. package/dist/shortcuts.js.map +1 -0
  201. package/dist/surface/cli.d.ts +7 -0
  202. package/dist/surface/cli.js +1556 -0
  203. package/dist/surface/cli.js.map +1 -0
  204. package/dist/surface/dashboard.d.ts +8 -0
  205. package/dist/surface/dashboard.js +1193 -0
  206. package/dist/surface/dashboard.js.map +1 -0
  207. package/dist/surface/doctor.d.ts +29 -0
  208. package/dist/surface/doctor.js +1514 -0
  209. package/dist/surface/doctor.js.map +1 -0
  210. package/dist/surface/format.d.ts +10 -0
  211. package/dist/surface/format.js +37 -0
  212. package/dist/surface/format.js.map +1 -0
  213. package/dist/surface/http-utility.d.ts +65 -0
  214. package/dist/surface/http-utility.js +336 -0
  215. package/dist/surface/http-utility.js.map +1 -0
  216. package/dist/surface/mcp-server.d.ts +91 -0
  217. package/dist/surface/mcp-server.js +280 -0
  218. package/dist/surface/mcp-server.js.map +1 -0
  219. package/dist/surface/onboarding.d.ts +15 -0
  220. package/dist/surface/onboarding.js +184 -0
  221. package/dist/surface/onboarding.js.map +1 -0
  222. package/dist/surface/pidfile.d.ts +79 -0
  223. package/dist/surface/pidfile.js +263 -0
  224. package/dist/surface/pidfile.js.map +1 -0
  225. package/dist/surface/readiness.d.ts +45 -0
  226. package/dist/surface/readiness.js +230 -0
  227. package/dist/surface/readiness.js.map +1 -0
  228. package/dist/surface/report.d.ts +68 -0
  229. package/dist/surface/report.js +341 -0
  230. package/dist/surface/report.js.map +1 -0
  231. package/dist/surface/skill-register.d.ts +14 -0
  232. package/dist/surface/skill-register.js +150 -0
  233. package/dist/surface/skill-register.js.map +1 -0
  234. package/dist/surface/version.d.ts +6 -0
  235. package/dist/surface/version.js +27 -0
  236. package/dist/surface/version.js.map +1 -0
  237. package/dist/tools/a11y.d.ts +8 -0
  238. package/dist/tools/a11y.js +545 -0
  239. package/dist/tools/a11y.js.map +1 -0
  240. package/dist/tools/a11y_depth.d.ts +19 -0
  241. package/dist/tools/a11y_depth.js +455 -0
  242. package/dist/tools/a11y_depth.js.map +1 -0
  243. package/dist/tools/agent.d.ts +15 -0
  244. package/dist/tools/agent.js +248 -0
  245. package/dist/tools/agent.js.map +1 -0
  246. package/dist/tools/batch.d.ts +46 -0
  247. package/dist/tools/batch.js +230 -0
  248. package/dist/tools/batch.js.map +1 -0
  249. package/dist/tools/cdp.d.ts +8 -0
  250. package/dist/tools/cdp.js +233 -0
  251. package/dist/tools/cdp.js.map +1 -0
  252. package/dist/tools/compact.d.ts +63 -0
  253. package/dist/tools/compact.js +418 -0
  254. package/dist/tools/compact.js.map +1 -0
  255. package/dist/tools/cost-class.d.ts +38 -0
  256. package/dist/tools/cost-class.js +117 -0
  257. package/dist/tools/cost-class.js.map +1 -0
  258. package/dist/tools/desktop.d.ts +9 -0
  259. package/dist/tools/desktop.js +346 -0
  260. package/dist/tools/desktop.js.map +1 -0
  261. package/dist/tools/electron_bridge.d.ts +41 -0
  262. package/dist/tools/electron_bridge.js +261 -0
  263. package/dist/tools/electron_bridge.js.map +1 -0
  264. package/dist/tools/extras.d.ts +22 -0
  265. package/dist/tools/extras.js +942 -0
  266. package/dist/tools/extras.js.map +1 -0
  267. package/dist/tools/favorites.d.ts +13 -0
  268. package/dist/tools/favorites.js +137 -0
  269. package/dist/tools/favorites.js.map +1 -0
  270. package/dist/tools/introspection.d.ts +13 -0
  271. package/dist/tools/introspection.js +55 -0
  272. package/dist/tools/introspection.js.map +1 -0
  273. package/dist/tools/ocr.d.ts +8 -0
  274. package/dist/tools/ocr.js +66 -0
  275. package/dist/tools/ocr.js.map +1 -0
  276. package/dist/tools/orchestration.d.ts +7 -0
  277. package/dist/tools/orchestration.js +377 -0
  278. package/dist/tools/orchestration.js.map +1 -0
  279. package/dist/tools/playbooks/extract-compose.d.ts +22 -0
  280. package/dist/tools/playbooks/extract-compose.js +85 -0
  281. package/dist/tools/playbooks/extract-compose.js.map +1 -0
  282. package/dist/tools/playbooks/find-replace.d.ts +11 -0
  283. package/dist/tools/playbooks/find-replace.js +56 -0
  284. package/dist/tools/playbooks/find-replace.js.map +1 -0
  285. package/dist/tools/playbooks/index.d.ts +63 -0
  286. package/dist/tools/playbooks/index.js +70 -0
  287. package/dist/tools/playbooks/index.js.map +1 -0
  288. package/dist/tools/playbooks/keys-blocklist.d.ts +24 -0
  289. package/dist/tools/playbooks/keys-blocklist.js +89 -0
  290. package/dist/tools/playbooks/keys-blocklist.js.map +1 -0
  291. package/dist/tools/registry.d.ts +40 -0
  292. package/dist/tools/registry.js +560 -0
  293. package/dist/tools/registry.js.map +1 -0
  294. package/dist/tools/safety-gate.d.ts +16 -0
  295. package/dist/tools/safety-gate.js +70 -0
  296. package/dist/tools/safety-gate.js.map +1 -0
  297. package/dist/tools/scheduler.d.ts +76 -0
  298. package/dist/tools/scheduler.js +413 -0
  299. package/dist/tools/scheduler.js.map +1 -0
  300. package/dist/tools/shortcuts.d.ts +13 -0
  301. package/dist/tools/shortcuts.js +205 -0
  302. package/dist/tools/shortcuts.js.map +1 -0
  303. package/dist/tools/smart.d.ts +15 -0
  304. package/dist/tools/smart.js +785 -0
  305. package/dist/tools/smart.js.map +1 -0
  306. package/dist/tools/types.d.ts +174 -0
  307. package/dist/tools/types.js +67 -0
  308. package/dist/tools/types.js.map +1 -0
  309. package/dist/tools/window-text.d.ts +15 -0
  310. package/dist/tools/window-text.js +39 -0
  311. package/dist/tools/window-text.js.map +1 -0
  312. package/dist/types.d.ts +122 -0
  313. package/dist/types.js +41 -0
  314. package/dist/types.js.map +1 -0
  315. package/native/Package.swift +38 -0
  316. package/native/README.md +113 -0
  317. package/native/Sources/ClawdCursorHelper/main.swift +602 -0
  318. package/native/Sources/ClawdCursorHost/main.swift +182 -0
  319. package/native/Sources/PermissionCheck/main.swift +53 -0
  320. package/native/Sources/ScreenshotHelper/main.swift +219 -0
  321. package/native/build.sh +139 -0
  322. package/native/entitlements.plist +12 -0
  323. package/package.json +115 -0
  324. package/scripts/banner.ps1 +112 -0
  325. package/scripts/coord-accuracy.ps1 +140 -0
  326. package/scripts/coord-uwp.ps1 +80 -0
  327. package/scripts/edge-glow.ps1 +180 -0
  328. package/scripts/find-element.ps1 +198 -0
  329. package/scripts/get-foreground-window.ps1 +71 -0
  330. package/scripts/get-screen-context.ps1 +183 -0
  331. package/scripts/get-windows.ps1 +66 -0
  332. package/scripts/install-panic-hotkey.ps1 +46 -0
  333. package/scripts/interact-element.ps1 +431 -0
  334. package/scripts/invoke-element.ps1 +314 -0
  335. package/scripts/linux/atspi-bridge.py +356 -0
  336. package/scripts/linux/ocr-recognize.py +154 -0
  337. package/scripts/mac/_window-picker.jxa +163 -0
  338. package/scripts/mac/find-element.jxa +0 -0
  339. package/scripts/mac/find-element.sh +161 -0
  340. package/scripts/mac/focus-window.jxa +284 -0
  341. package/scripts/mac/get-focused-element.jxa +102 -0
  342. package/scripts/mac/get-foreground-window.jxa +173 -0
  343. package/scripts/mac/get-screen-context.jxa +197 -0
  344. package/scripts/mac/get-ui-tree.sh +141 -0
  345. package/scripts/mac/get-windows.jxa +117 -0
  346. package/scripts/mac/interact-element.sh +235 -0
  347. package/scripts/mac/invoke-element.jxa +408 -0
  348. package/scripts/mac/ocr-recognize.swift +124 -0
  349. package/scripts/ocr-recognize.ps1 +102 -0
  350. package/scripts/postinstall-native.js +48 -0
  351. package/scripts/ps-bridge.ps1 +830 -0
  352. package/scripts/smoke-mcp.ps1 +119 -0
  353. package/scripts/sync-version.ts +178 -0
  354. package/scripts/verify-install.js +81 -0
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ /**
3
+ * External-credential reader.
4
+ *
5
+ * Loads provider API keys from cohabitating agent frameworks (OpenClaw,
6
+ * future hosts) so users who configure credentials there don't have to
7
+ * re-enter them as environment variables.
8
+ *
9
+ * Single source of truth — both `scanProviders()` (doctor's all-providers
10
+ * scan) and `resolveApiConfig({ provider })` (start's per-provider lookup)
11
+ * consult this module so they can never disagree about which key belongs
12
+ * to which provider. v0.8.8 had a real bug where doctor read the right
13
+ * Kimi key but start fell back to the wrong (Anthropic) key on the same
14
+ * machine because only doctor was wired to the OpenClaw profile reader.
15
+ *
16
+ * Read once, cache forever (per-process). Tests can call
17
+ * `clearExternalProviderKeysCache()` to invalidate.
18
+ */
19
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
26
+ }) : (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ o[k2] = m[k];
29
+ }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.loadExternalProviderKeys = loadExternalProviderKeys;
54
+ exports.getExternalProviderKey = getExternalProviderKey;
55
+ exports.getExternalProviderBaseUrl = getExternalProviderBaseUrl;
56
+ exports.clearExternalProviderKeysCache = clearExternalProviderKeysCache;
57
+ const fs = __importStar(require("fs"));
58
+ const path = __importStar(require("path"));
59
+ const os = __importStar(require("os"));
60
+ let cache = null;
61
+ /**
62
+ * External profile-name → clawdcursor provider key.
63
+ * Mirrors the map inside `scanProviders` so the two code paths agree.
64
+ * If you add a new provider, update both — or better, refactor scanner
65
+ * to import this map directly.
66
+ */
67
+ const EXTERNAL_PROVIDER_MAP = {
68
+ 'anthropic': 'anthropic',
69
+ 'openai': 'openai',
70
+ 'moonshot': 'kimi',
71
+ 'kimi': 'kimi',
72
+ 'groq': 'groq',
73
+ 'together': 'together',
74
+ 'deepseek': 'deepseek',
75
+ 'gemini': 'gemini',
76
+ 'google': 'gemini',
77
+ 'mistral': 'mistral',
78
+ 'xai': 'xai',
79
+ 'grok': 'xai',
80
+ 'alibaba': 'alibaba',
81
+ 'qwen': 'alibaba',
82
+ 'dashscope': 'alibaba',
83
+ 'fireworks': 'fireworks',
84
+ 'cohere': 'cohere',
85
+ 'perplexity': 'perplexity',
86
+ 'pplx': 'perplexity',
87
+ };
88
+ /**
89
+ * Locate auth-profile JSON files from known external hosts.
90
+ * Returns absolute paths, including only files that actually exist.
91
+ */
92
+ function discoverAuthProfilePaths() {
93
+ const home = os.homedir();
94
+ const candidates = [
95
+ path.join(home, '.openclaw', 'agents', 'main', 'agent', 'auth-profiles.json'),
96
+ path.join(home, '.openclaw', 'agents', 'main', 'auth-profiles.json'),
97
+ path.join(home, '.openclaw-dev', 'agents', 'main', 'agent', 'auth-profiles.json'),
98
+ path.join(home, '.openclaw-dev', 'agents', 'main', 'auth-profiles.json'),
99
+ ];
100
+ return candidates.filter(p => {
101
+ try {
102
+ return fs.existsSync(p);
103
+ }
104
+ catch {
105
+ return false;
106
+ }
107
+ });
108
+ }
109
+ /**
110
+ * Read all external provider keys, merged across known hosts.
111
+ * First-write-wins per provider (so `.openclaw` beats `.openclaw-dev`
112
+ * if both define the same provider).
113
+ */
114
+ function loadExternalProviderKeys() {
115
+ if (cache !== null)
116
+ return cache;
117
+ const keys = {};
118
+ for (const authPath of discoverAuthProfilePaths()) {
119
+ try {
120
+ const raw = JSON.parse(fs.readFileSync(authPath, 'utf-8'));
121
+ // Two shapes seen in the wild: `{ profiles: { ... } }` and `{ <profileKey>: { ... } }`.
122
+ const profiles = raw?.profiles ?? raw;
123
+ if (!profiles || typeof profiles !== 'object')
124
+ continue;
125
+ for (const [profileKey, profileValue] of Object.entries(profiles)) {
126
+ // Profile keys look like "anthropic" or "anthropic:default" — take the
127
+ // segment before the colon as the provider name.
128
+ const providerName = profileKey.split(':')[0].toLowerCase();
129
+ const val = profileValue;
130
+ const apiKey = val?.key || val?.apiKey || val?.api_key || '';
131
+ if (!apiKey)
132
+ continue;
133
+ const clawdKey = EXTERNAL_PROVIDER_MAP[providerName];
134
+ if (clawdKey && !keys[clawdKey]) {
135
+ keys[clawdKey] = { apiKey, baseUrl: val.baseUrl, sourceFile: authPath };
136
+ }
137
+ }
138
+ }
139
+ catch {
140
+ // Non-fatal: a malformed external file should never block clawdcursor.
141
+ }
142
+ }
143
+ cache = keys;
144
+ return keys;
145
+ }
146
+ /**
147
+ * Get a specific provider's external key, or undefined if not found.
148
+ * Use this in credential-resolution paths that want to consult external
149
+ * hosts as one of several fallbacks.
150
+ */
151
+ function getExternalProviderKey(providerKey) {
152
+ if (!providerKey)
153
+ return undefined;
154
+ return loadExternalProviderKeys()[providerKey.toLowerCase()]?.apiKey;
155
+ }
156
+ /**
157
+ * Get a specific provider's external base URL override (rare — only set
158
+ * when an external host explicitly overrides the provider's default URL).
159
+ */
160
+ function getExternalProviderBaseUrl(providerKey) {
161
+ if (!providerKey)
162
+ return undefined;
163
+ return loadExternalProviderKeys()[providerKey.toLowerCase()]?.baseUrl;
164
+ }
165
+ /** Clear the in-process cache. Tests use this; runtime never should. */
166
+ function clearExternalProviderKeysCache() {
167
+ cache = null;
168
+ }
169
+ //# sourceMappingURL=external-creds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-creds.js","sourceRoot":"","sources":["../../src/llm/external-creds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Provider Model Map — auto-selects cheap/expensive models per provider.
3
+ * Used by the doctor and the agent pipeline to route tasks optimally.
4
+ */
5
+ export interface ProviderProfile {
6
+ name: string;
7
+ /** Base URL for API calls */
8
+ baseUrl: string;
9
+ /** Auth header format */
10
+ authHeader: (key: string) => Record<string, string>;
11
+ /** Cheap text-only model (Layer 2: accessibility reasoner) */
12
+ textModel: string;
13
+ /** Vision-capable model (Layer 3: screenshot fallback) */
14
+ visionModel: string;
15
+ /** Approximate context window of the text model in tokens.
16
+ * Used for dynamic element truncation in OCR Reasoner.
17
+ * Minimum recommended: 16000 (16K). Models below this will show a warning. */
18
+ textContextWindow?: number;
19
+ /** Whether the API is OpenAI-compatible */
20
+ openaiCompat: boolean;
21
+ /** Extra headers needed */
22
+ extraHeaders?: Record<string, string>;
23
+ /** Whether this provider supports Computer Use tool */
24
+ computerUse: boolean;
25
+ /** Whether capabilities (openaiCompat, supportsJsonMode, etc.) were verified
26
+ * via a live probe, or merely assumed based on defaults. Unset / false means assumed. */
27
+ probed?: boolean;
28
+ /** Whether OpenAI-style JSON response_format is known to work reliably */
29
+ supportsJsonMode?: boolean;
30
+ /** Whether OpenAI-style tool calls are known to work reliably */
31
+ supportsToolCalls?: boolean;
32
+ /** Whether the vision model is a reasoning/thinking model (omit temperature, accept reasoning_content).
33
+ * Examples: kimi-k2.5, deepseek-reasoner. These models reject temperature=0. */
34
+ reasoningVisionModel?: boolean;
35
+ }
36
+ /** Minimum context window in tokens for reliable desktop automation.
37
+ * Models below this cannot handle web pages (200+ elements). */
38
+ export declare const MIN_RECOMMENDED_CONTEXT = 16000;
39
+ export declare const PROVIDERS: Record<string, ProviderProfile>;
40
+ /**
41
+ * Auto-detect provider from API key format or explicit provider name.
42
+ */
43
+ export declare function detectProvider(apiKey: string, explicitProvider?: string): string;
44
+ export interface PipelineConfig {
45
+ /** Provider profile */
46
+ provider: ProviderProfile;
47
+ /** Provider key name */
48
+ providerKey: string;
49
+ /** API key */
50
+ apiKey: string;
51
+ /** Layer 1: Action router (always on) */
52
+ layer1: true;
53
+ /** Layer 2: Accessibility reasoner with text model */
54
+ layer2: {
55
+ enabled: boolean;
56
+ model: string;
57
+ baseUrl: string;
58
+ /** Per-layer API key (for mixed-provider pipelines where text and vision use different providers) */
59
+ apiKey?: string;
60
+ };
61
+ /** Layer 3: Screenshot + vision model */
62
+ layer3: {
63
+ enabled: boolean;
64
+ model: string;
65
+ baseUrl: string;
66
+ computerUse: boolean;
67
+ apiKey?: string;
68
+ };
69
+ /** OCR-first pipeline — enabled when OS OCR is available */
70
+ ocrEnabled?: boolean;
71
+ /** Skill cache — learns from successful task completions */
72
+ skillCacheEnabled?: boolean;
73
+ }
74
+ /**
75
+ * Build the optimal pipeline config from test results.
76
+ */
77
+ export declare function buildPipeline(providerKey: string, apiKey: string, textModelWorks: boolean, visionModelWorks: boolean, textModelOverride?: string, visionModelOverride?: string): PipelineConfig;
78
+ export declare function supportsOpenAiJsonMode(provider: ProviderProfile | undefined): boolean;
79
+ export declare function supportsOpenAiToolCalls(provider: ProviderProfile | undefined): boolean;
80
+ /** Result of scanning a single provider */
81
+ export interface ProviderScanResult {
82
+ key: string;
83
+ name: string;
84
+ available: boolean;
85
+ /** For key-based providers: masked key. For Ollama: 'reachable' or 'unreachable' */
86
+ detail: string;
87
+ /** API key to use (empty string for Ollama) */
88
+ apiKey: string;
89
+ /** Ollama-specific: list of discovered model ids */
90
+ ollamaModels?: string[];
91
+ /** Ollama-specific: which discovered models are vision-capable */
92
+ ollamaVisionModels?: string[];
93
+ }
94
+ /** Result of testing a specific model */
95
+ export interface ModelTestResult {
96
+ providerKey: string;
97
+ model: string;
98
+ role: 'text' | 'vision';
99
+ ok: boolean;
100
+ latencyMs?: number;
101
+ error?: string;
102
+ }
103
+ /** Complete scan result */
104
+ export interface ScanResult {
105
+ providers: ProviderScanResult[];
106
+ modelTests: ModelTestResult[];
107
+ }
108
+ /**
109
+ * Env var names we check per provider key.
110
+ * AI_API_KEY is a generic fallback; external config provider hints are preferred.
111
+ */
112
+ export declare const PROVIDER_ENV_VARS: Record<string, string[]>;
113
+ /**
114
+ * Scan ALL available AI providers in parallel.
115
+ *
116
+ * Returns which providers are available (have keys / are reachable),
117
+ * discovered Ollama models, etc.
118
+ */
119
+ export declare function scanProviders(): Promise<ProviderScanResult[]>;
120
+ /**
121
+ * Given scan results and model test results, build the optimal mixed pipeline.
122
+ */
123
+ export declare function buildMixedPipeline(scanResults: ProviderScanResult[], modelTests: ModelTestResult[]): PipelineConfig;