@oratis/lisa 0.2.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 (451) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +436 -0
  3. package/README.zh-CN.md +450 -0
  4. package/channels.example.json +45 -0
  5. package/completions/README.md +66 -0
  6. package/completions/_lisa +140 -0
  7. package/completions/lisa.bash +94 -0
  8. package/completions/lisa.fish +85 -0
  9. package/dist/agent.d.ts +70 -0
  10. package/dist/agent.d.ts.map +1 -0
  11. package/dist/agent.js +275 -0
  12. package/dist/agent.js.map +1 -0
  13. package/dist/approval.d.ts +9 -0
  14. package/dist/approval.d.ts.map +1 -0
  15. package/dist/approval.js +47 -0
  16. package/dist/approval.js.map +1 -0
  17. package/dist/channels/config.d.ts +11 -0
  18. package/dist/channels/config.d.ts.map +1 -0
  19. package/dist/channels/config.js +27 -0
  20. package/dist/channels/config.js.map +1 -0
  21. package/dist/channels/discord.d.ts +28 -0
  22. package/dist/channels/discord.d.ts.map +1 -0
  23. package/dist/channels/discord.js +98 -0
  24. package/dist/channels/discord.js.map +1 -0
  25. package/dist/channels/feishu.d.ts +53 -0
  26. package/dist/channels/feishu.d.ts.map +1 -0
  27. package/dist/channels/feishu.js +228 -0
  28. package/dist/channels/feishu.js.map +1 -0
  29. package/dist/channels/imessage.d.ts +20 -0
  30. package/dist/channels/imessage.d.ts.map +1 -0
  31. package/dist/channels/imessage.js +124 -0
  32. package/dist/channels/imessage.js.map +1 -0
  33. package/dist/channels/registry.d.ts +8 -0
  34. package/dist/channels/registry.d.ts.map +1 -0
  35. package/dist/channels/registry.js +29 -0
  36. package/dist/channels/registry.js.map +1 -0
  37. package/dist/channels/router.d.ts +28 -0
  38. package/dist/channels/router.d.ts.map +1 -0
  39. package/dist/channels/router.js +140 -0
  40. package/dist/channels/router.js.map +1 -0
  41. package/dist/channels/slack.d.ts +43 -0
  42. package/dist/channels/slack.d.ts.map +1 -0
  43. package/dist/channels/slack.js +164 -0
  44. package/dist/channels/slack.js.map +1 -0
  45. package/dist/channels/telegram.d.ts +26 -0
  46. package/dist/channels/telegram.d.ts.map +1 -0
  47. package/dist/channels/telegram.js +103 -0
  48. package/dist/channels/telegram.js.map +1 -0
  49. package/dist/channels/types.d.ts +20 -0
  50. package/dist/channels/types.d.ts.map +1 -0
  51. package/dist/channels/types.js +2 -0
  52. package/dist/channels/types.js.map +1 -0
  53. package/dist/channels/webhook.d.ts +34 -0
  54. package/dist/channels/webhook.d.ts.map +1 -0
  55. package/dist/channels/webhook.js +139 -0
  56. package/dist/channels/webhook.js.map +1 -0
  57. package/dist/cli/colors.d.ts +30 -0
  58. package/dist/cli/colors.d.ts.map +1 -0
  59. package/dist/cli/colors.js +53 -0
  60. package/dist/cli/colors.js.map +1 -0
  61. package/dist/cli/doctor.d.ts +2 -0
  62. package/dist/cli/doctor.d.ts.map +1 -0
  63. package/dist/cli/doctor.js +172 -0
  64. package/dist/cli/doctor.js.map +1 -0
  65. package/dist/cli/monitor.d.ts +2 -0
  66. package/dist/cli/monitor.d.ts.map +1 -0
  67. package/dist/cli/monitor.js +141 -0
  68. package/dist/cli/monitor.js.map +1 -0
  69. package/dist/cli/repl.d.ts +7 -0
  70. package/dist/cli/repl.d.ts.map +1 -0
  71. package/dist/cli/repl.js +68 -0
  72. package/dist/cli/repl.js.map +1 -0
  73. package/dist/cli/status.d.ts +2 -0
  74. package/dist/cli/status.d.ts.map +1 -0
  75. package/dist/cli/status.js +176 -0
  76. package/dist/cli/status.js.map +1 -0
  77. package/dist/cli/wishlist.d.ts +7 -0
  78. package/dist/cli/wishlist.d.ts.map +1 -0
  79. package/dist/cli/wishlist.js +77 -0
  80. package/dist/cli/wishlist.js.map +1 -0
  81. package/dist/cli.d.ts +3 -0
  82. package/dist/cli.d.ts.map +1 -0
  83. package/dist/cli.js +954 -0
  84. package/dist/cli.js.map +1 -0
  85. package/dist/env.d.ts +10 -0
  86. package/dist/env.d.ts.map +1 -0
  87. package/dist/env.js +128 -0
  88. package/dist/env.js.map +1 -0
  89. package/dist/fs-utils.d.ts +6 -0
  90. package/dist/fs-utils.d.ts.map +1 -0
  91. package/dist/fs-utils.js +36 -0
  92. package/dist/fs-utils.js.map +1 -0
  93. package/dist/heartbeat/config.d.ts +13 -0
  94. package/dist/heartbeat/config.d.ts.map +1 -0
  95. package/dist/heartbeat/config.js +14 -0
  96. package/dist/heartbeat/config.js.map +1 -0
  97. package/dist/heartbeat/install.d.ts +15 -0
  98. package/dist/heartbeat/install.d.ts.map +1 -0
  99. package/dist/heartbeat/install.js +180 -0
  100. package/dist/heartbeat/install.js.map +1 -0
  101. package/dist/heartbeat/runner.d.ts +16 -0
  102. package/dist/heartbeat/runner.d.ts.map +1 -0
  103. package/dist/heartbeat/runner.js +180 -0
  104. package/dist/heartbeat/runner.js.map +1 -0
  105. package/dist/hooks/runner.d.ts +23 -0
  106. package/dist/hooks/runner.d.ts.map +1 -0
  107. package/dist/hooks/runner.js +55 -0
  108. package/dist/hooks/runner.js.map +1 -0
  109. package/dist/idle/runner.d.ts +16 -0
  110. package/dist/idle/runner.d.ts.map +1 -0
  111. package/dist/idle/runner.js +45 -0
  112. package/dist/idle/runner.js.map +1 -0
  113. package/dist/idle/watcher.d.ts +35 -0
  114. package/dist/idle/watcher.d.ts.map +1 -0
  115. package/dist/idle/watcher.js +67 -0
  116. package/dist/idle/watcher.js.map +1 -0
  117. package/dist/llm.d.ts +8 -0
  118. package/dist/llm.d.ts.map +1 -0
  119. package/dist/llm.js +12 -0
  120. package/dist/llm.js.map +1 -0
  121. package/dist/mcp/client.d.ts +11 -0
  122. package/dist/mcp/client.d.ts.map +1 -0
  123. package/dist/mcp/client.js +68 -0
  124. package/dist/mcp/client.js.map +1 -0
  125. package/dist/mcp/config.d.ts +14 -0
  126. package/dist/mcp/config.d.ts.map +1 -0
  127. package/dist/mcp/config.js +28 -0
  128. package/dist/mcp/config.js.map +1 -0
  129. package/dist/memory/search_tool.d.ts +8 -0
  130. package/dist/memory/search_tool.d.ts.map +1 -0
  131. package/dist/memory/search_tool.js +26 -0
  132. package/dist/memory/search_tool.js.map +1 -0
  133. package/dist/memory/store.d.ts +7 -0
  134. package/dist/memory/store.d.ts.map +1 -0
  135. package/dist/memory/store.js +46 -0
  136. package/dist/memory/store.js.map +1 -0
  137. package/dist/memory/tool.d.ts +13 -0
  138. package/dist/memory/tool.d.ts.map +1 -0
  139. package/dist/memory/tool.js +53 -0
  140. package/dist/memory/tool.js.map +1 -0
  141. package/dist/memory/vector.d.ts +25 -0
  142. package/dist/memory/vector.d.ts.map +1 -0
  143. package/dist/memory/vector.js +96 -0
  144. package/dist/memory/vector.js.map +1 -0
  145. package/dist/mood-bus.d.ts +16 -0
  146. package/dist/mood-bus.d.ts.map +1 -0
  147. package/dist/mood-bus.js +21 -0
  148. package/dist/mood-bus.js.map +1 -0
  149. package/dist/paths.d.ts +8 -0
  150. package/dist/paths.d.ts.map +1 -0
  151. package/dist/paths.js +10 -0
  152. package/dist/paths.js.map +1 -0
  153. package/dist/plugins/loader.d.ts +4 -0
  154. package/dist/plugins/loader.d.ts.map +1 -0
  155. package/dist/plugins/loader.js +156 -0
  156. package/dist/plugins/loader.js.map +1 -0
  157. package/dist/plugins/types.d.ts +43 -0
  158. package/dist/plugins/types.d.ts.map +1 -0
  159. package/dist/plugins/types.js +2 -0
  160. package/dist/plugins/types.js.map +1 -0
  161. package/dist/prompt.d.ts +21 -0
  162. package/dist/prompt.d.ts.map +1 -0
  163. package/dist/prompt.js +187 -0
  164. package/dist/prompt.js.map +1 -0
  165. package/dist/providers/anthropic.d.ts +11 -0
  166. package/dist/providers/anthropic.d.ts.map +1 -0
  167. package/dist/providers/anthropic.js +102 -0
  168. package/dist/providers/anthropic.js.map +1 -0
  169. package/dist/providers/gemini.d.ts +11 -0
  170. package/dist/providers/gemini.d.ts.map +1 -0
  171. package/dist/providers/gemini.js +190 -0
  172. package/dist/providers/gemini.js.map +1 -0
  173. package/dist/providers/openai.d.ts +11 -0
  174. package/dist/providers/openai.d.ts.map +1 -0
  175. package/dist/providers/openai.js +175 -0
  176. package/dist/providers/openai.js.map +1 -0
  177. package/dist/providers/registry.d.ts +44 -0
  178. package/dist/providers/registry.d.ts.map +1 -0
  179. package/dist/providers/registry.js +209 -0
  180. package/dist/providers/registry.js.map +1 -0
  181. package/dist/providers/types.d.ts +33 -0
  182. package/dist/providers/types.d.ts.map +1 -0
  183. package/dist/providers/types.js +2 -0
  184. package/dist/providers/types.js.map +1 -0
  185. package/dist/proxy-bootstrap.d.ts +17 -0
  186. package/dist/proxy-bootstrap.d.ts.map +1 -0
  187. package/dist/proxy-bootstrap.js +101 -0
  188. package/dist/proxy-bootstrap.js.map +1 -0
  189. package/dist/reflect.d.ts +13 -0
  190. package/dist/reflect.d.ts.map +1 -0
  191. package/dist/reflect.js +289 -0
  192. package/dist/reflect.js.map +1 -0
  193. package/dist/sandbox/macos.d.ts +5 -0
  194. package/dist/sandbox/macos.d.ts.map +1 -0
  195. package/dist/sandbox/macos.js +31 -0
  196. package/dist/sandbox/macos.js.map +1 -0
  197. package/dist/sandbox/sandbox.d.ts +15 -0
  198. package/dist/sandbox/sandbox.d.ts.map +1 -0
  199. package/dist/sandbox/sandbox.js +39 -0
  200. package/dist/sandbox/sandbox.js.map +1 -0
  201. package/dist/sessions/active.d.ts +4 -0
  202. package/dist/sessions/active.d.ts.map +1 -0
  203. package/dist/sessions/active.js +33 -0
  204. package/dist/sessions/active.js.map +1 -0
  205. package/dist/sessions/list.d.ts +16 -0
  206. package/dist/sessions/list.d.ts.map +1 -0
  207. package/dist/sessions/list.js +78 -0
  208. package/dist/sessions/list.js.map +1 -0
  209. package/dist/sessions/store.d.ts +27 -0
  210. package/dist/sessions/store.d.ts.map +1 -0
  211. package/dist/sessions/store.js +98 -0
  212. package/dist/sessions/store.js.map +1 -0
  213. package/dist/skills/executable.d.ts +45 -0
  214. package/dist/skills/executable.d.ts.map +1 -0
  215. package/dist/skills/executable.js +207 -0
  216. package/dist/skills/executable.js.map +1 -0
  217. package/dist/skills/frontmatter.d.ts +8 -0
  218. package/dist/skills/frontmatter.d.ts.map +1 -0
  219. package/dist/skills/frontmatter.js +84 -0
  220. package/dist/skills/frontmatter.js.map +1 -0
  221. package/dist/skills/manager.d.ts +9 -0
  222. package/dist/skills/manager.d.ts.map +1 -0
  223. package/dist/skills/manager.js +116 -0
  224. package/dist/skills/manager.js.map +1 -0
  225. package/dist/skills/tool.d.ts +13 -0
  226. package/dist/skills/tool.d.ts.map +1 -0
  227. package/dist/skills/tool.js +87 -0
  228. package/dist/skills/tool.js.map +1 -0
  229. package/dist/soul/birth.d.ts +13 -0
  230. package/dist/soul/birth.d.ts.map +1 -0
  231. package/dist/soul/birth.js +171 -0
  232. package/dist/soul/birth.js.map +1 -0
  233. package/dist/soul/git.d.ts +36 -0
  234. package/dist/soul/git.d.ts.map +1 -0
  235. package/dist/soul/git.js +212 -0
  236. package/dist/soul/git.js.map +1 -0
  237. package/dist/soul/paths.d.ts +20 -0
  238. package/dist/soul/paths.d.ts.map +1 -0
  239. package/dist/soul/paths.js +34 -0
  240. package/dist/soul/paths.js.map +1 -0
  241. package/dist/soul/store.d.ts +55 -0
  242. package/dist/soul/store.d.ts.map +1 -0
  243. package/dist/soul/store.js +394 -0
  244. package/dist/soul/store.js.map +1 -0
  245. package/dist/soul/tools.d.ts +107 -0
  246. package/dist/soul/tools.d.ts.map +1 -0
  247. package/dist/soul/tools.js +471 -0
  248. package/dist/soul/tools.js.map +1 -0
  249. package/dist/soul/types.d.ts +105 -0
  250. package/dist/soul/types.d.ts.map +1 -0
  251. package/dist/soul/types.js +44 -0
  252. package/dist/soul/types.js.map +1 -0
  253. package/dist/subagent.d.ts +19 -0
  254. package/dist/subagent.d.ts.map +1 -0
  255. package/dist/subagent.js +34 -0
  256. package/dist/subagent.js.map +1 -0
  257. package/dist/tools/apply_patch.d.ts +17 -0
  258. package/dist/tools/apply_patch.d.ts.map +1 -0
  259. package/dist/tools/apply_patch.js +107 -0
  260. package/dist/tools/apply_patch.js.map +1 -0
  261. package/dist/tools/bash.d.ts +8 -0
  262. package/dist/tools/bash.d.ts.map +1 -0
  263. package/dist/tools/bash.js +81 -0
  264. package/dist/tools/bash.js.map +1 -0
  265. package/dist/tools/edit.d.ts +10 -0
  266. package/dist/tools/edit.d.ts.map +1 -0
  267. package/dist/tools/edit.js +50 -0
  268. package/dist/tools/edit.js.map +1 -0
  269. package/dist/tools/grep.d.ts +11 -0
  270. package/dist/tools/grep.d.ts.map +1 -0
  271. package/dist/tools/grep.js +57 -0
  272. package/dist/tools/grep.js.map +1 -0
  273. package/dist/tools/ls.d.ts +7 -0
  274. package/dist/tools/ls.d.ts.map +1 -0
  275. package/dist/tools/ls.js +36 -0
  276. package/dist/tools/ls.js.map +1 -0
  277. package/dist/tools/read.d.ts +9 -0
  278. package/dist/tools/read.d.ts.map +1 -0
  279. package/dist/tools/read.js +41 -0
  280. package/dist/tools/read.js.map +1 -0
  281. package/dist/tools/redeploy.d.ts +10 -0
  282. package/dist/tools/redeploy.d.ts.map +1 -0
  283. package/dist/tools/redeploy.js +73 -0
  284. package/dist/tools/redeploy.js.map +1 -0
  285. package/dist/tools/registry.d.ts +15 -0
  286. package/dist/tools/registry.d.ts.map +1 -0
  287. package/dist/tools/registry.js +71 -0
  288. package/dist/tools/registry.js.map +1 -0
  289. package/dist/tools/set_mood.d.ts +8 -0
  290. package/dist/tools/set_mood.d.ts.map +1 -0
  291. package/dist/tools/set_mood.js +62 -0
  292. package/dist/tools/set_mood.js.map +1 -0
  293. package/dist/tools/task.d.ts +17 -0
  294. package/dist/tools/task.d.ts.map +1 -0
  295. package/dist/tools/task.js +58 -0
  296. package/dist/tools/task.js.map +1 -0
  297. package/dist/tools/web_fetch.d.ts +10 -0
  298. package/dist/tools/web_fetch.d.ts.map +1 -0
  299. package/dist/tools/web_fetch.js +95 -0
  300. package/dist/tools/web_fetch.js.map +1 -0
  301. package/dist/tools/web_search.d.ts +8 -0
  302. package/dist/tools/web_search.d.ts.map +1 -0
  303. package/dist/tools/web_search.js +82 -0
  304. package/dist/tools/web_search.js.map +1 -0
  305. package/dist/tools/write.d.ts +8 -0
  306. package/dist/tools/write.d.ts.map +1 -0
  307. package/dist/tools/write.js +21 -0
  308. package/dist/tools/write.js.map +1 -0
  309. package/dist/types.d.ts +67 -0
  310. package/dist/types.d.ts.map +1 -0
  311. package/dist/types.js +2 -0
  312. package/dist/types.js.map +1 -0
  313. package/dist/voice/speak.d.ts +7 -0
  314. package/dist/voice/speak.d.ts.map +1 -0
  315. package/dist/voice/speak.js +18 -0
  316. package/dist/voice/speak.js.map +1 -0
  317. package/dist/voice/tool.d.ts +14 -0
  318. package/dist/voice/tool.d.ts.map +1 -0
  319. package/dist/voice/tool.js +41 -0
  320. package/dist/voice/tool.js.map +1 -0
  321. package/dist/voice/transcribe.d.ts +7 -0
  322. package/dist/voice/transcribe.d.ts.map +1 -0
  323. package/dist/voice/transcribe.js +14 -0
  324. package/dist/voice/transcribe.js.map +1 -0
  325. package/dist/web/assets/background-tile.png +0 -0
  326. package/dist/web/assets/icon-memory.png +0 -0
  327. package/dist/web/assets/icon-send.png +0 -0
  328. package/dist/web/assets/icon-skill.png +0 -0
  329. package/dist/web/assets/icon-soul.png +0 -0
  330. package/dist/web/assets/icon-tool.png +0 -0
  331. package/dist/web/assets/lisa/angry.png +0 -0
  332. package/dist/web/assets/lisa/annoyed.png +0 -0
  333. package/dist/web/assets/lisa/apologetic.png +0 -0
  334. package/dist/web/assets/lisa/artist.png +0 -0
  335. package/dist/web/assets/lisa/astronaut.png +0 -0
  336. package/dist/web/assets/lisa/at-airport.png +0 -0
  337. package/dist/web/assets/lisa/at-beach.png +0 -0
  338. package/dist/web/assets/lisa/autumn-leaves.png +0 -0
  339. package/dist/web/assets/lisa/biking.png +0 -0
  340. package/dist/web/assets/lisa/birthday.png +0 -0
  341. package/dist/web/assets/lisa/bored.png +0 -0
  342. package/dist/web/assets/lisa/casual-summer.png +0 -0
  343. package/dist/web/assets/lisa/cheering.png +0 -0
  344. package/dist/web/assets/lisa/chef.png +0 -0
  345. package/dist/web/assets/lisa/christmas.png +0 -0
  346. package/dist/web/assets/lisa/cleaning.png +0 -0
  347. package/dist/web/assets/lisa/confused.png +0 -0
  348. package/dist/web/assets/lisa/cooking.png +0 -0
  349. package/dist/web/assets/lisa/crying.png +0 -0
  350. package/dist/web/assets/lisa/dancing.png +0 -0
  351. package/dist/web/assets/lisa/detective.png +0 -0
  352. package/dist/web/assets/lisa/determined.png +0 -0
  353. package/dist/web/assets/lisa/drinking-coffee.png +0 -0
  354. package/dist/web/assets/lisa/drinking-tea.png +0 -0
  355. package/dist/web/assets/lisa/driving.png +0 -0
  356. package/dist/web/assets/lisa/eating-snack.png +0 -0
  357. package/dist/web/assets/lisa/embarrassed.png +0 -0
  358. package/dist/web/assets/lisa/excited.png +0 -0
  359. package/dist/web/assets/lisa/exercising.png +0 -0
  360. package/dist/web/assets/lisa/exhausted.png +0 -0
  361. package/dist/web/assets/lisa/fairy.png +0 -0
  362. package/dist/web/assets/lisa/fireworks.png +0 -0
  363. package/dist/web/assets/lisa/fog.png +0 -0
  364. package/dist/web/assets/lisa/formal.png +0 -0
  365. package/dist/web/assets/lisa/gaming.png +0 -0
  366. package/dist/web/assets/lisa/ghost.png +0 -0
  367. package/dist/web/assets/lisa/gift-giving.png +0 -0
  368. package/dist/web/assets/lisa/giggling.png +0 -0
  369. package/dist/web/assets/lisa/graduation.png +0 -0
  370. package/dist/web/assets/lisa/grateful.png +0 -0
  371. package/dist/web/assets/lisa/halloween.png +0 -0
  372. package/dist/web/assets/lisa/happy.png +0 -0
  373. package/dist/web/assets/lisa/ill.png +0 -0
  374. package/dist/web/assets/lisa/in-rain.png +0 -0
  375. package/dist/web/assets/lisa/in-snow.png +0 -0
  376. package/dist/web/assets/lisa/index.json +575 -0
  377. package/dist/web/assets/lisa/knight.png +0 -0
  378. package/dist/web/assets/lisa/lab-coat.png +0 -0
  379. package/dist/web/assets/lisa/laughing.png +0 -0
  380. package/dist/web/assets/lisa/livestreaming.png +0 -0
  381. package/dist/web/assets/lisa/loving.png +0 -0
  382. package/dist/web/assets/lisa/lunar-new-year.png +0 -0
  383. package/dist/web/assets/lisa/musician.png +0 -0
  384. package/dist/web/assets/lisa/napping.png +0 -0
  385. package/dist/web/assets/lisa/nervous.png +0 -0
  386. package/dist/web/assets/lisa/neutral.png +0 -0
  387. package/dist/web/assets/lisa/ninja.png +0 -0
  388. package/dist/web/assets/lisa/on-train.png +0 -0
  389. package/dist/web/assets/lisa/painting.png +0 -0
  390. package/dist/web/assets/lisa/pajamas.png +0 -0
  391. package/dist/web/assets/lisa/party.png +0 -0
  392. package/dist/web/assets/lisa/phone-call.png +0 -0
  393. package/dist/web/assets/lisa/pilot.png +0 -0
  394. package/dist/web/assets/lisa/pirate.png +0 -0
  395. package/dist/web/assets/lisa/playing-guitar.png +0 -0
  396. package/dist/web/assets/lisa/playing-piano.png +0 -0
  397. package/dist/web/assets/lisa/pouting.png +0 -0
  398. package/dist/web/assets/lisa/princess.png +0 -0
  399. package/dist/web/assets/lisa/proud.png +0 -0
  400. package/dist/web/assets/lisa/puzzled.png +0 -0
  401. package/dist/web/assets/lisa/raincoat.png +0 -0
  402. package/dist/web/assets/lisa/reading-book.png +0 -0
  403. package/dist/web/assets/lisa/recovering.png +0 -0
  404. package/dist/web/assets/lisa/robot.png +0 -0
  405. package/dist/web/assets/lisa/running.png +0 -0
  406. package/dist/web/assets/lisa/sad.png +0 -0
  407. package/dist/web/assets/lisa/scared.png +0 -0
  408. package/dist/web/assets/lisa/shocked.png +0 -0
  409. package/dist/web/assets/lisa/shopping.png +0 -0
  410. package/dist/web/assets/lisa/shy.png +0 -0
  411. package/dist/web/assets/lisa/singing.png +0 -0
  412. package/dist/web/assets/lisa/sleeping.png +0 -0
  413. package/dist/web/assets/lisa/sleepy.png +0 -0
  414. package/dist/web/assets/lisa/smug.png +0 -0
  415. package/dist/web/assets/lisa/spring-flowers.png +0 -0
  416. package/dist/web/assets/lisa/starry-night.png +0 -0
  417. package/dist/web/assets/lisa/stormy.png +0 -0
  418. package/dist/web/assets/lisa/stretching.png +0 -0
  419. package/dist/web/assets/lisa/studying.png +0 -0
  420. package/dist/web/assets/lisa/summer-hot.png +0 -0
  421. package/dist/web/assets/lisa/sunrise.png +0 -0
  422. package/dist/web/assets/lisa/superhero.png +0 -0
  423. package/dist/web/assets/lisa/surprised.png +0 -0
  424. package/dist/web/assets/lisa/thinking-pose.png +0 -0
  425. package/dist/web/assets/lisa/thoughtful.png +0 -0
  426. package/dist/web/assets/lisa/valentine.png +0 -0
  427. package/dist/web/assets/lisa/vampire.png +0 -0
  428. package/dist/web/assets/lisa/video-call.png +0 -0
  429. package/dist/web/assets/lisa/waking-up.png +0 -0
  430. package/dist/web/assets/lisa/walking.png +0 -0
  431. package/dist/web/assets/lisa/watching-anime.png +0 -0
  432. package/dist/web/assets/lisa/watching-movie.png +0 -0
  433. package/dist/web/assets/lisa/wedding.png +0 -0
  434. package/dist/web/assets/lisa/winking.png +0 -0
  435. package/dist/web/assets/lisa/winter-coat.png +0 -0
  436. package/dist/web/assets/lisa/winter-cold.png +0 -0
  437. package/dist/web/assets/lisa/wizard.png +0 -0
  438. package/dist/web/assets/lisa/working-coding.png +0 -0
  439. package/dist/web/assets/lisa/working-debugging.png +0 -0
  440. package/dist/web/assets/lisa/working-research.png +0 -0
  441. package/dist/web/assets/lisa/working-typing.png +0 -0
  442. package/dist/web/assets/lisa/working-writing.png +0 -0
  443. package/dist/web/assets/lisa/worried.png +0 -0
  444. package/dist/web/assets/lisa/yawning.png +0 -0
  445. package/dist/web/assets/lisa/yoga-pose.png +0 -0
  446. package/dist/web/assets/lisa-mascot.png +0 -0
  447. package/dist/web/server.d.ts +13 -0
  448. package/dist/web/server.d.ts.map +1 -0
  449. package/dist/web/server.js +2159 -0
  450. package/dist/web/server.js.map +1 -0
  451. package/package.json +68 -0
@@ -0,0 +1,175 @@
1
+ import OpenAI from "openai";
2
+ import { proxyAwareFetch } from "../proxy-bootstrap.js";
3
+ export class OpenAIProvider {
4
+ name = "openai";
5
+ client;
6
+ constructor(opts = {}) {
7
+ this.client = new OpenAI({
8
+ apiKey: opts.apiKey,
9
+ baseURL: opts.baseURL,
10
+ fetch: proxyAwareFetch,
11
+ });
12
+ }
13
+ async runTurn(opts) {
14
+ const messages = anthropicToOpenAI(opts.systemPrompt, opts.messages);
15
+ const tools = opts.tools.map((t) => ({
16
+ type: "function",
17
+ function: {
18
+ name: t.name,
19
+ description: t.description,
20
+ parameters: t.inputSchema,
21
+ },
22
+ }));
23
+ const stream = await this.client.chat.completions.create({
24
+ model: opts.model,
25
+ messages,
26
+ tools: tools.length ? tools : undefined,
27
+ max_tokens: opts.maxTokens ?? 16_000,
28
+ stream: true,
29
+ stream_options: { include_usage: true },
30
+ });
31
+ let text = "";
32
+ const toolCalls = new Map();
33
+ let finish = "stop";
34
+ let inputTokens = 0;
35
+ let outputTokens = 0;
36
+ let cacheReadTokens = 0;
37
+ for await (const chunk of stream) {
38
+ const choice = chunk.choices[0];
39
+ if (choice?.delta?.content) {
40
+ text += choice.delta.content;
41
+ opts.handlers?.onTextDelta?.(choice.delta.content);
42
+ }
43
+ if (choice?.delta?.tool_calls) {
44
+ for (const tc of choice.delta.tool_calls) {
45
+ const idx = tc.index;
46
+ if (!toolCalls.has(idx)) {
47
+ toolCalls.set(idx, { id: "", name: "", args: "" });
48
+ }
49
+ const acc = toolCalls.get(idx);
50
+ if (tc.id)
51
+ acc.id = tc.id;
52
+ if (tc.function?.name)
53
+ acc.name = tc.function.name;
54
+ if (tc.function?.arguments)
55
+ acc.args += tc.function.arguments;
56
+ }
57
+ }
58
+ if (choice?.finish_reason)
59
+ finish = choice.finish_reason;
60
+ if (chunk.usage) {
61
+ inputTokens = chunk.usage.prompt_tokens ?? 0;
62
+ outputTokens = chunk.usage.completion_tokens ?? 0;
63
+ const details = chunk.usage.prompt_tokens_details;
64
+ cacheReadTokens = details?.cached_tokens ?? 0;
65
+ }
66
+ }
67
+ const content = [];
68
+ if (text) {
69
+ content.push({ type: "text", text, citations: null });
70
+ }
71
+ for (const tc of toolCalls.values()) {
72
+ let parsed = {};
73
+ try {
74
+ parsed = tc.args ? JSON.parse(tc.args) : {};
75
+ }
76
+ catch {
77
+ parsed = { _raw: tc.args };
78
+ }
79
+ content.push({
80
+ type: "tool_use",
81
+ id: tc.id || `call_${tc.name}_${Math.random().toString(36).slice(2)}`,
82
+ name: tc.name,
83
+ input: parsed,
84
+ });
85
+ }
86
+ return {
87
+ content,
88
+ stopReason: finish === "tool_calls" ? "tool_use" : "end_turn",
89
+ usage: {
90
+ inputTokens,
91
+ outputTokens,
92
+ cacheReadTokens,
93
+ cacheWriteTokens: 0,
94
+ },
95
+ };
96
+ }
97
+ }
98
+ function anthropicToOpenAI(systemPrompt, messages) {
99
+ const out = [
100
+ { role: "system", content: systemPrompt },
101
+ ];
102
+ for (const msg of messages) {
103
+ if (msg.role === "user") {
104
+ const content = msg.content;
105
+ if (typeof content === "string") {
106
+ out.push({ role: "user", content });
107
+ continue;
108
+ }
109
+ const textBlocks = [];
110
+ const toolResults = [];
111
+ for (const block of content) {
112
+ if (block.type === "text") {
113
+ textBlocks.push(block.text);
114
+ }
115
+ else if (block.type === "tool_result") {
116
+ const text = typeof block.content === "string"
117
+ ? block.content
118
+ : Array.isArray(block.content)
119
+ ? block.content
120
+ .map((b) => (b.type === "text" ? b.text : ""))
121
+ .join("\n")
122
+ : "";
123
+ toolResults.push({
124
+ id: block.tool_use_id,
125
+ content: text,
126
+ isError: block.is_error ?? false,
127
+ });
128
+ }
129
+ }
130
+ if (textBlocks.length) {
131
+ out.push({ role: "user", content: textBlocks.join("\n") });
132
+ }
133
+ for (const tr of toolResults) {
134
+ out.push({
135
+ role: "tool",
136
+ tool_call_id: tr.id,
137
+ content: tr.isError ? `[error] ${tr.content}` : tr.content,
138
+ });
139
+ }
140
+ }
141
+ else {
142
+ const content = msg.content;
143
+ if (typeof content === "string") {
144
+ out.push({ role: "assistant", content });
145
+ continue;
146
+ }
147
+ const textParts = [];
148
+ const toolCalls = [];
149
+ for (const block of content) {
150
+ if (block.type === "text") {
151
+ textParts.push(block.text);
152
+ }
153
+ else if (block.type === "tool_use") {
154
+ toolCalls.push({
155
+ id: block.id,
156
+ type: "function",
157
+ function: {
158
+ name: block.name,
159
+ arguments: JSON.stringify(block.input ?? {}),
160
+ },
161
+ });
162
+ }
163
+ }
164
+ const assistant = {
165
+ role: "assistant",
166
+ content: textParts.join("\n") || null,
167
+ };
168
+ if (toolCalls.length)
169
+ assistant.tool_calls = toolCalls;
170
+ out.push(assistant);
171
+ }
172
+ }
173
+ return out;
174
+ }
175
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { Provider } from "./types.js";
2
+ export type ProviderName = "anthropic" | "openai" | "gemini";
3
+ /**
4
+ * OpenAI-compatible third-party preset table.
5
+ *
6
+ * Many providers (DeepSeek, Volcengine Ark, Moonshot/Kimi, Aliyun DashScope,
7
+ * xAI, Zhipu, etc.) expose an OpenAI-compatible `/chat/completions` endpoint.
8
+ * Lisa can talk to all of them through `OpenAIProvider` by overriding
9
+ * baseURL + apiKey. This table makes that automatic when the model name
10
+ * starts with a known prefix — no need to set LISA_PROVIDER manually.
11
+ *
12
+ * Resolution rules (see providerForModel below):
13
+ * 1. claude-* / Anthropic models → AnthropicProvider (with optional ANTHROPIC_BASE_URL)
14
+ * 2. gpt-* / o1 / o3 / o4 / chatgpt-* → OpenAIProvider (vanilla)
15
+ * 3. Model matches a preset prefix → OpenAIProvider with preset's baseURL/apiKey
16
+ * 4. LISA_BASE_URL set (catch-all override, e.g. Ollama / self-hosted) → OpenAIProvider
17
+ * 5. LISA_PROVIDER=openai → OpenAIProvider (vanilla)
18
+ * 6. Default → AnthropicProvider
19
+ */
20
+ interface OpenAICompatPreset {
21
+ /** Human-readable provider name. */
22
+ name: string;
23
+ /** Model name prefixes that route to this preset. */
24
+ modelPrefixes: string[];
25
+ /** OpenAI-compatible base URL. */
26
+ baseURL: string;
27
+ /** Environment variable that holds this provider's API key. */
28
+ apiKeyEnv: string;
29
+ }
30
+ export declare const OPENAI_COMPAT_PRESETS: OpenAICompatPreset[];
31
+ export declare function detectProvider(model: string): ProviderName;
32
+ export declare function makeProvider(name: ProviderName): Provider;
33
+ /**
34
+ * Resolve a Provider instance for a given model name. Looks up preset →
35
+ * LISA_BASE_URL override → vanilla provider, in that order.
36
+ */
37
+ export declare function providerForModel(model: string): Provider;
38
+ /** For docs / CLI listing. */
39
+ export declare function listConfiguredProviders(): Array<{
40
+ name: string;
41
+ configured: boolean;
42
+ }>;
43
+ export {};
44
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACH,UAAU,kBAAkB;IAC1B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,EAqFrD,CAAC;AAeF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAqB1D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAkBzD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAmCxD;AAED,8BAA8B;AAC9B,wBAAgB,uBAAuB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAmBtF"}
@@ -0,0 +1,209 @@
1
+ import { AnthropicProvider } from "./anthropic.js";
2
+ import { GeminiProvider } from "./gemini.js";
3
+ import { OpenAIProvider } from "./openai.js";
4
+ export const OPENAI_COMPAT_PRESETS = [
5
+ // ── International ─────────────────────────────────────────────────
6
+ {
7
+ name: "DeepSeek",
8
+ modelPrefixes: ["deepseek-"],
9
+ baseURL: "https://api.deepseek.com/v1",
10
+ apiKeyEnv: "DEEPSEEK_API_KEY",
11
+ },
12
+ {
13
+ name: "Mistral AI",
14
+ // mistral-*, codestral-*, magistral-*, ministral-*, pixtral-*
15
+ modelPrefixes: ["mistral-", "codestral-", "magistral-", "ministral-", "pixtral-"],
16
+ baseURL: "https://api.mistral.ai/v1",
17
+ apiKeyEnv: "MISTRAL_API_KEY",
18
+ },
19
+ {
20
+ name: "Perplexity (Sonar)",
21
+ modelPrefixes: ["sonar-", "sonar"],
22
+ baseURL: "https://api.perplexity.ai",
23
+ apiKeyEnv: "PERPLEXITY_API_KEY",
24
+ },
25
+ {
26
+ name: "xAI Grok",
27
+ modelPrefixes: ["grok-"],
28
+ baseURL: "https://api.x.ai/v1",
29
+ apiKeyEnv: "XAI_API_KEY",
30
+ },
31
+ // ── Chinese ──────────────────────────────────────────────────────
32
+ {
33
+ // Volcengine Ark uses arbitrary "endpoint IDs" (ep-...) and the doubao-* family.
34
+ name: "Volcengine Ark (Doubao)",
35
+ modelPrefixes: ["doubao-", "ep-"],
36
+ baseURL: "https://ark.cn-beijing.volces.com/api/v3",
37
+ apiKeyEnv: "ARK_API_KEY",
38
+ },
39
+ {
40
+ name: "Aliyun DashScope (Qwen)",
41
+ modelPrefixes: ["qwen-", "qwen2", "qwen3"],
42
+ baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
43
+ apiKeyEnv: "DASHSCOPE_API_KEY",
44
+ },
45
+ {
46
+ name: "Moonshot (Kimi)",
47
+ modelPrefixes: ["moonshot-", "kimi-"],
48
+ baseURL: "https://api.moonshot.cn/v1",
49
+ apiKeyEnv: "MOONSHOT_API_KEY",
50
+ },
51
+ {
52
+ name: "Zhipu (GLM)",
53
+ modelPrefixes: ["glm-", "chatglm-"],
54
+ baseURL: "https://open.bigmodel.cn/api/paas/v4",
55
+ apiKeyEnv: "ZHIPU_API_KEY",
56
+ },
57
+ {
58
+ name: "Stepfun (Step)",
59
+ modelPrefixes: ["step-"],
60
+ baseURL: "https://api.stepfun.com/v1",
61
+ apiKeyEnv: "STEPFUN_API_KEY",
62
+ },
63
+ {
64
+ name: "01.AI (Yi)",
65
+ modelPrefixes: ["yi-"],
66
+ baseURL: "https://api.lingyiwanwu.com/v1",
67
+ apiKeyEnv: "LINGYI_API_KEY",
68
+ },
69
+ {
70
+ name: "Baichuan",
71
+ // Model IDs ship in title-case (Baichuan2-Turbo, Baichuan4); match is case-insensitive.
72
+ modelPrefixes: ["baichuan-", "baichuan2", "baichuan3", "baichuan4"],
73
+ baseURL: "https://api.baichuan-ai.com/v1",
74
+ apiKeyEnv: "BAICHUAN_API_KEY",
75
+ },
76
+ {
77
+ name: "MiniMax",
78
+ // abab- family + the newer MiniMax-* models; case-insensitive.
79
+ modelPrefixes: ["abab", "minimax-"],
80
+ baseURL: "https://api.minimax.io/v1",
81
+ apiKeyEnv: "MINIMAX_API_KEY",
82
+ },
83
+ {
84
+ name: "Tencent Hunyuan",
85
+ modelPrefixes: ["hunyuan-"],
86
+ baseURL: "https://api.hunyuan.cloud.tencent.com/v1",
87
+ apiKeyEnv: "HUNYUAN_API_KEY",
88
+ },
89
+ ];
90
+ /**
91
+ * Case-insensitive prefix match. Several Chinese providers ship model IDs in
92
+ * mixed case (Baichuan2-Turbo, MiniMax-Text-01) and users typing the canonical
93
+ * lowercase form shouldn't have to remember a vendor-specific capitalization.
94
+ */
95
+ function findPreset(model) {
96
+ const lower = model.toLowerCase();
97
+ for (const p of OPENAI_COMPAT_PRESETS) {
98
+ if (p.modelPrefixes.some((pre) => lower.startsWith(pre.toLowerCase())))
99
+ return p;
100
+ }
101
+ return null;
102
+ }
103
+ export function detectProvider(model) {
104
+ const m = model.toLowerCase();
105
+ if (m.startsWith("claude-"))
106
+ return "anthropic";
107
+ if (m.startsWith("gemini-"))
108
+ return "gemini";
109
+ if (m.startsWith("gpt-") ||
110
+ m.startsWith("o1") ||
111
+ m.startsWith("o3") ||
112
+ m.startsWith("o4") ||
113
+ m.startsWith("chatgpt-")) {
114
+ return "openai";
115
+ }
116
+ // Any model that matches a third-party preset routes through OpenAI provider.
117
+ if (findPreset(model))
118
+ return "openai";
119
+ // Generic LISA_BASE_URL override (Ollama, self-hosted, custom proxy) routes
120
+ // through OpenAI provider regardless of model name.
121
+ if (process.env.LISA_BASE_URL)
122
+ return "openai";
123
+ if (process.env.LISA_PROVIDER === "openai")
124
+ return "openai";
125
+ if (process.env.LISA_PROVIDER === "gemini")
126
+ return "gemini";
127
+ return "anthropic";
128
+ }
129
+ export function makeProvider(name) {
130
+ switch (name) {
131
+ case "anthropic":
132
+ return new AnthropicProvider({
133
+ apiKey: process.env.ANTHROPIC_API_KEY,
134
+ baseURL: process.env.ANTHROPIC_BASE_URL,
135
+ });
136
+ case "openai":
137
+ return new OpenAIProvider({
138
+ apiKey: process.env.OPENAI_API_KEY,
139
+ baseURL: process.env.OPENAI_BASE_URL,
140
+ });
141
+ case "gemini":
142
+ return new GeminiProvider({
143
+ apiKey: process.env.GEMINI_API_KEY ?? process.env.GOOGLE_API_KEY,
144
+ baseURL: process.env.GEMINI_BASE_URL,
145
+ });
146
+ }
147
+ }
148
+ /**
149
+ * Resolve a Provider instance for a given model name. Looks up preset →
150
+ * LISA_BASE_URL override → vanilla provider, in that order.
151
+ */
152
+ export function providerForModel(model) {
153
+ const provider = detectProvider(model);
154
+ if (provider === "anthropic") {
155
+ return new AnthropicProvider({
156
+ apiKey: process.env.ANTHROPIC_API_KEY,
157
+ baseURL: process.env.ANTHROPIC_BASE_URL,
158
+ });
159
+ }
160
+ if (provider === "gemini") {
161
+ return new GeminiProvider({
162
+ apiKey: process.env.GEMINI_API_KEY ?? process.env.GOOGLE_API_KEY,
163
+ baseURL: process.env.GEMINI_BASE_URL,
164
+ });
165
+ }
166
+ // OpenAI / OpenAI-compatible. Three nested fallbacks for baseURL + apiKey:
167
+ const preset = findPreset(model);
168
+ if (preset) {
169
+ return new OpenAIProvider({
170
+ baseURL: preset.baseURL,
171
+ apiKey: process.env[preset.apiKeyEnv],
172
+ });
173
+ }
174
+ if (process.env.LISA_BASE_URL) {
175
+ // Catch-all (Ollama, self-hosted, unknown providers).
176
+ return new OpenAIProvider({
177
+ baseURL: process.env.LISA_BASE_URL,
178
+ // LISA_API_KEY first, fall back to OPENAI_API_KEY for compatibility.
179
+ apiKey: process.env.LISA_API_KEY ?? process.env.OPENAI_API_KEY,
180
+ });
181
+ }
182
+ // Vanilla OpenAI.
183
+ return new OpenAIProvider({
184
+ baseURL: process.env.OPENAI_BASE_URL,
185
+ apiKey: process.env.OPENAI_API_KEY,
186
+ });
187
+ }
188
+ /** For docs / CLI listing. */
189
+ export function listConfiguredProviders() {
190
+ const out = [
191
+ { name: "Anthropic", configured: !!process.env.ANTHROPIC_API_KEY },
192
+ { name: "OpenAI", configured: !!process.env.OPENAI_API_KEY },
193
+ {
194
+ name: "Google Gemini",
195
+ configured: !!(process.env.GEMINI_API_KEY ?? process.env.GOOGLE_API_KEY),
196
+ },
197
+ ];
198
+ for (const p of OPENAI_COMPAT_PRESETS) {
199
+ out.push({ name: p.name, configured: !!process.env[p.apiKeyEnv] });
200
+ }
201
+ if (process.env.LISA_BASE_URL) {
202
+ out.push({
203
+ name: `Custom (LISA_BASE_URL=${process.env.LISA_BASE_URL})`,
204
+ configured: true,
205
+ });
206
+ }
207
+ return out;
208
+ }
209
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type Anthropic from "@anthropic-ai/sdk";
2
+ import type { StoredMessage, ToolDefinition } from "../types.js";
3
+ export interface ProviderUsage {
4
+ inputTokens: number;
5
+ outputTokens: number;
6
+ cacheReadTokens: number;
7
+ cacheWriteTokens: number;
8
+ }
9
+ export interface ProviderResult {
10
+ content: Anthropic.ContentBlock[];
11
+ stopReason: string;
12
+ usage: ProviderUsage;
13
+ }
14
+ export interface ProviderStreamHandlers {
15
+ onTextDelta?: (text: string) => void;
16
+ onThinkingDelta?: (text: string) => void;
17
+ }
18
+ export interface ProviderRunOpts {
19
+ model: string;
20
+ systemPrompt: string;
21
+ tools: ToolDefinition[];
22
+ messages: StoredMessage[];
23
+ maxTokens?: number;
24
+ thinking?: boolean;
25
+ compaction?: boolean;
26
+ handlers?: ProviderStreamHandlers;
27
+ signal?: AbortSignal;
28
+ }
29
+ export interface Provider {
30
+ readonly name: string;
31
+ runTurn(opts: ProviderRunOpts): Promise<ProviderResult>;
32
+ }
33
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACzD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ export declare function configureProxyFromEnv(opts?: {
2
+ log?: (msg: string) => void;
3
+ }): void;
4
+ /** True iff a proxy was successfully installed. */
5
+ export declare function isProxyInstalled(): boolean;
6
+ /**
7
+ * Fetch wrapper to pass to LLM SDKs as their `fetch` option when running
8
+ * behind a proxy that strips response headers. Re-injects
9
+ * `Content-Type: application/json` when the body parses as JSON but the
10
+ * header is missing — this is what makes Anthropic's `messages.create()`
11
+ * return a parsed object instead of a string.
12
+ *
13
+ * Safe to use whether or not a proxy is installed: if no proxy is in
14
+ * effect the body still has its real headers and we don't override.
15
+ */
16
+ export declare const proxyAwareFetch: typeof fetch;
17
+ //# sourceMappingURL=proxy-bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-bootstrap.d.ts","sourceRoot":"","sources":["../src/proxy-bootstrap.ts"],"names":[],"mappings":"AAkDA,wBAAgB,qBAAqB,CAAC,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAAG,IAAI,CAiBtF;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,KAoBpC,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Honor system HTTP/HTTPS proxy env vars for outbound LLM calls.
3
+ *
4
+ * Node's built-in fetch (undici) does NOT automatically pick up HTTPS_PROXY /
5
+ * HTTP_PROXY environment variables. The Anthropic / OpenAI SDKs both use
6
+ * fetch under the hood, so without this bridge a user behind a corporate
7
+ * proxy or a region-blocked network sees the SDK fail with 403/timeout
8
+ * even when their shell `curl` works fine.
9
+ *
10
+ * Two related issues addressed here:
11
+ * 1. configureProxyFromEnv() — sets undici's global dispatcher to a
12
+ * ProxyAgent so all fetch() calls go via the proxy. Forces
13
+ * `Accept-Encoding: identity` on outbound requests because some local
14
+ * proxies (Clash, others) strip the `Content-Encoding: gzip` response
15
+ * header — without it, undici hands the SDK raw gzip bytes that
16
+ * silently fail JSON-parse.
17
+ * 2. proxyAwareFetch — a fetch wrapper that re-injects
18
+ * `Content-Type: application/json` when the response body looks like
19
+ * JSON but the response header is missing (also a Clash artifact —
20
+ * it strips response headers through CONNECT tunnels). Without this,
21
+ * the Anthropic SDK falls back to text and `messages.create()` returns
22
+ * a string instead of a parsed object.
23
+ *
24
+ * Idempotent: configureProxyFromEnv() twice is safe.
25
+ */
26
+ import { ProxyAgent, setGlobalDispatcher } from "undici";
27
+ let installed = false;
28
+ class IdentityEncodingProxyAgent extends ProxyAgent {
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ dispatch(opts, handler) {
31
+ // Coerce headers to a flat object, then force Accept-Encoding=identity.
32
+ // Works whether incoming headers are an object, array, or undefined.
33
+ const incoming = opts.headers ?? {};
34
+ const merged = {};
35
+ if (Array.isArray(incoming)) {
36
+ for (let i = 0; i < incoming.length; i += 2) {
37
+ merged[String(incoming[i]).toLowerCase()] = String(incoming[i + 1]);
38
+ }
39
+ }
40
+ else if (typeof incoming === "object") {
41
+ for (const [k, v] of Object.entries(incoming)) {
42
+ merged[k.toLowerCase()] = Array.isArray(v) ? v.join(", ") : String(v);
43
+ }
44
+ }
45
+ merged["accept-encoding"] = "identity";
46
+ return super.dispatch({ ...opts, headers: merged }, handler);
47
+ }
48
+ }
49
+ export function configureProxyFromEnv(opts = {}) {
50
+ const url = process.env.HTTPS_PROXY ??
51
+ process.env.https_proxy ??
52
+ process.env.HTTP_PROXY ??
53
+ process.env.http_proxy;
54
+ if (!url)
55
+ return;
56
+ if (installed)
57
+ return;
58
+ try {
59
+ setGlobalDispatcher(new IdentityEncodingProxyAgent(url));
60
+ installed = true;
61
+ opts.log?.(`[proxy] outbound HTTP routed through ${url} (Accept-Encoding=identity)`);
62
+ }
63
+ catch (err) {
64
+ opts.log?.(`[proxy] failed to install ProxyAgent for ${url}: ${err.message}`);
65
+ }
66
+ }
67
+ /** True iff a proxy was successfully installed. */
68
+ export function isProxyInstalled() {
69
+ return installed;
70
+ }
71
+ /**
72
+ * Fetch wrapper to pass to LLM SDKs as their `fetch` option when running
73
+ * behind a proxy that strips response headers. Re-injects
74
+ * `Content-Type: application/json` when the body parses as JSON but the
75
+ * header is missing — this is what makes Anthropic's `messages.create()`
76
+ * return a parsed object instead of a string.
77
+ *
78
+ * Safe to use whether or not a proxy is installed: if no proxy is in
79
+ * effect the body still has its real headers and we don't override.
80
+ */
81
+ export const proxyAwareFetch = async (input, init) => {
82
+ const r = await fetch(input, init);
83
+ // Only patch when the proxy is in effect AND content-type is missing.
84
+ if (!installed)
85
+ return r;
86
+ const ct = r.headers.get("content-type");
87
+ if (ct)
88
+ return r;
89
+ // Body looks like JSON? Stream → text → re-construct with content-type set.
90
+ const text = await r.text();
91
+ const looksJson = text.trimStart().startsWith("{") || text.trimStart().startsWith("[");
92
+ const newHeaders = new Headers(r.headers);
93
+ if (looksJson)
94
+ newHeaders.set("content-type", "application/json");
95
+ return new Response(text, {
96
+ status: r.status,
97
+ statusText: r.statusText,
98
+ headers: newHeaders,
99
+ });
100
+ };
101
+ //# sourceMappingURL=proxy-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-bootstrap.js","sourceRoot":"","sources":["../src/proxy-bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { StoredMessage } from "./types.js";
2
+ export interface ReflectionResult {
3
+ summary: string;
4
+ applied: string[];
5
+ skipped: string[];
6
+ raw: string;
7
+ }
8
+ export declare function reflectOnSession(opts: {
9
+ history: StoredMessage[];
10
+ sessionId: string;
11
+ model?: string;
12
+ }): Promise<ReflectionResult>;
13
+ //# sourceMappingURL=reflect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.d.ts","sourceRoot":"","sources":["../src/reflect.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAsEhD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAE5B"}