agim-cli 1.0.1

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 (453) hide show
  1. package/CHANGELOG.md +1234 -0
  2. package/LICENSE +21 -0
  3. package/README.md +422 -0
  4. package/README.zh-CN.md +414 -0
  5. package/dist/cli-ui/cmd-handlers.d.ts +11 -0
  6. package/dist/cli-ui/cmd-handlers.d.ts.map +1 -0
  7. package/dist/cli-ui/cmd-handlers.js +240 -0
  8. package/dist/cli-ui/cmd-handlers.js.map +1 -0
  9. package/dist/cli-ui/config-wizard.d.ts +3 -0
  10. package/dist/cli-ui/config-wizard.d.ts.map +1 -0
  11. package/dist/cli-ui/config-wizard.js +851 -0
  12. package/dist/cli-ui/config-wizard.js.map +1 -0
  13. package/dist/cli-ui/entry-menu.d.ts +28 -0
  14. package/dist/cli-ui/entry-menu.d.ts.map +1 -0
  15. package/dist/cli-ui/entry-menu.js +50 -0
  16. package/dist/cli-ui/entry-menu.js.map +1 -0
  17. package/dist/cli-ui/env-file.d.ts +35 -0
  18. package/dist/cli-ui/env-file.d.ts.map +1 -0
  19. package/dist/cli-ui/env-file.js +163 -0
  20. package/dist/cli-ui/env-file.js.map +1 -0
  21. package/dist/cli-ui/i18n.d.ts +204 -0
  22. package/dist/cli-ui/i18n.d.ts.map +1 -0
  23. package/dist/cli-ui/i18n.js +455 -0
  24. package/dist/cli-ui/i18n.js.map +1 -0
  25. package/dist/cli-ui/lang-picker.d.ts +10 -0
  26. package/dist/cli-ui/lang-picker.d.ts.map +1 -0
  27. package/dist/cli-ui/lang-picker.js +33 -0
  28. package/dist/cli-ui/lang-picker.js.map +1 -0
  29. package/dist/cli-ui/paths.d.ts +4 -0
  30. package/dist/cli-ui/paths.d.ts.map +1 -0
  31. package/dist/cli-ui/paths.js +11 -0
  32. package/dist/cli-ui/paths.js.map +1 -0
  33. package/dist/cli-ui/prompts.d.ts +65 -0
  34. package/dist/cli-ui/prompts.d.ts.map +1 -0
  35. package/dist/cli-ui/prompts.js +125 -0
  36. package/dist/cli-ui/prompts.js.map +1 -0
  37. package/dist/cli-ui/service.d.ts +41 -0
  38. package/dist/cli-ui/service.d.ts.map +1 -0
  39. package/dist/cli-ui/service.js +241 -0
  40. package/dist/cli-ui/service.js.map +1 -0
  41. package/dist/cli.d.ts +3 -0
  42. package/dist/cli.d.ts.map +1 -0
  43. package/dist/cli.js +1143 -0
  44. package/dist/cli.js.map +1 -0
  45. package/dist/core/acp-server.d.ts +8 -0
  46. package/dist/core/acp-server.d.ts.map +1 -0
  47. package/dist/core/acp-server.js +266 -0
  48. package/dist/core/acp-server.js.map +1 -0
  49. package/dist/core/agent-base.d.ts +94 -0
  50. package/dist/core/agent-base.d.ts.map +1 -0
  51. package/dist/core/agent-base.js +373 -0
  52. package/dist/core/agent-base.js.map +1 -0
  53. package/dist/core/agent-cwd.d.ts +48 -0
  54. package/dist/core/agent-cwd.d.ts.map +1 -0
  55. package/dist/core/agent-cwd.js +181 -0
  56. package/dist/core/agent-cwd.js.map +1 -0
  57. package/dist/core/agent-helper.d.ts +65 -0
  58. package/dist/core/agent-helper.d.ts.map +1 -0
  59. package/dist/core/agent-helper.js +150 -0
  60. package/dist/core/agent-helper.js.map +1 -0
  61. package/dist/core/agim-paths.d.ts +10 -0
  62. package/dist/core/agim-paths.d.ts.map +1 -0
  63. package/dist/core/agim-paths.js +64 -0
  64. package/dist/core/agim-paths.js.map +1 -0
  65. package/dist/core/approval-bus.d.ts +300 -0
  66. package/dist/core/approval-bus.d.ts.map +1 -0
  67. package/dist/core/approval-bus.js +990 -0
  68. package/dist/core/approval-bus.js.map +1 -0
  69. package/dist/core/approval-router.d.ts +101 -0
  70. package/dist/core/approval-router.d.ts.map +1 -0
  71. package/dist/core/approval-router.js +540 -0
  72. package/dist/core/approval-router.js.map +1 -0
  73. package/dist/core/audit-log.d.ts +55 -0
  74. package/dist/core/audit-log.d.ts.map +1 -0
  75. package/dist/core/audit-log.js +203 -0
  76. package/dist/core/audit-log.js.map +1 -0
  77. package/dist/core/bgjob-reader.d.ts +65 -0
  78. package/dist/core/bgjob-reader.d.ts.map +1 -0
  79. package/dist/core/bgjob-reader.js +212 -0
  80. package/dist/core/bgjob-reader.js.map +1 -0
  81. package/dist/core/circuit-breaker.d.ts +37 -0
  82. package/dist/core/circuit-breaker.d.ts.map +1 -0
  83. package/dist/core/circuit-breaker.js +115 -0
  84. package/dist/core/circuit-breaker.js.map +1 -0
  85. package/dist/core/commands/agent.d.ts +4 -0
  86. package/dist/core/commands/agent.d.ts.map +1 -0
  87. package/dist/core/commands/agent.js +40 -0
  88. package/dist/core/commands/agent.js.map +1 -0
  89. package/dist/core/commands/approval.d.ts +3 -0
  90. package/dist/core/commands/approval.d.ts.map +1 -0
  91. package/dist/core/commands/approval.js +85 -0
  92. package/dist/core/commands/approval.js.map +1 -0
  93. package/dist/core/commands/audit.d.ts +3 -0
  94. package/dist/core/commands/audit.d.ts.map +1 -0
  95. package/dist/core/commands/audit.js +84 -0
  96. package/dist/core/commands/audit.js.map +1 -0
  97. package/dist/core/commands/builtin.d.ts +3 -0
  98. package/dist/core/commands/builtin.d.ts.map +1 -0
  99. package/dist/core/commands/builtin.js +304 -0
  100. package/dist/core/commands/builtin.js.map +1 -0
  101. package/dist/core/commands/cron.d.ts +3 -0
  102. package/dist/core/commands/cron.d.ts.map +1 -0
  103. package/dist/core/commands/cron.js +128 -0
  104. package/dist/core/commands/cron.js.map +1 -0
  105. package/dist/core/commands/job.d.ts +3 -0
  106. package/dist/core/commands/job.d.ts.map +1 -0
  107. package/dist/core/commands/job.js +195 -0
  108. package/dist/core/commands/job.js.map +1 -0
  109. package/dist/core/commands/memo.d.ts +3 -0
  110. package/dist/core/commands/memo.d.ts.map +1 -0
  111. package/dist/core/commands/memo.js +151 -0
  112. package/dist/core/commands/memo.js.map +1 -0
  113. package/dist/core/commands/model.d.ts +9 -0
  114. package/dist/core/commands/model.d.ts.map +1 -0
  115. package/dist/core/commands/model.js +183 -0
  116. package/dist/core/commands/model.js.map +1 -0
  117. package/dist/core/commands/plan.d.ts +3 -0
  118. package/dist/core/commands/plan.d.ts.map +1 -0
  119. package/dist/core/commands/plan.js +75 -0
  120. package/dist/core/commands/plan.js.map +1 -0
  121. package/dist/core/commands/remind.d.ts +3 -0
  122. package/dist/core/commands/remind.d.ts.map +1 -0
  123. package/dist/core/commands/remind.js +271 -0
  124. package/dist/core/commands/remind.js.map +1 -0
  125. package/dist/core/commands/router.d.ts +3 -0
  126. package/dist/core/commands/router.d.ts.map +1 -0
  127. package/dist/core/commands/router.js +71 -0
  128. package/dist/core/commands/router.js.map +1 -0
  129. package/dist/core/commands/sessions.d.ts +3 -0
  130. package/dist/core/commands/sessions.d.ts.map +1 -0
  131. package/dist/core/commands/sessions.js +88 -0
  132. package/dist/core/commands/sessions.js.map +1 -0
  133. package/dist/core/commands/stats.d.ts +3 -0
  134. package/dist/core/commands/stats.d.ts.map +1 -0
  135. package/dist/core/commands/stats.js +73 -0
  136. package/dist/core/commands/stats.js.map +1 -0
  137. package/dist/core/commands/think.d.ts +3 -0
  138. package/dist/core/commands/think.d.ts.map +1 -0
  139. package/dist/core/commands/think.js +28 -0
  140. package/dist/core/commands/think.js.map +1 -0
  141. package/dist/core/commands/workspaces.d.ts +3 -0
  142. package/dist/core/commands/workspaces.d.ts.map +1 -0
  143. package/dist/core/commands/workspaces.js +47 -0
  144. package/dist/core/commands/workspaces.js.map +1 -0
  145. package/dist/core/config-schema.d.ts +60 -0
  146. package/dist/core/config-schema.d.ts.map +1 -0
  147. package/dist/core/config-schema.js +75 -0
  148. package/dist/core/config-schema.js.map +1 -0
  149. package/dist/core/coord-systems.d.ts +65 -0
  150. package/dist/core/coord-systems.d.ts.map +1 -0
  151. package/dist/core/coord-systems.js +229 -0
  152. package/dist/core/coord-systems.js.map +1 -0
  153. package/dist/core/cron.d.ts +29 -0
  154. package/dist/core/cron.d.ts.map +1 -0
  155. package/dist/core/cron.js +184 -0
  156. package/dist/core/cron.js.map +1 -0
  157. package/dist/core/event-bus.d.ts +80 -0
  158. package/dist/core/event-bus.d.ts.map +1 -0
  159. package/dist/core/event-bus.js +62 -0
  160. package/dist/core/event-bus.js.map +1 -0
  161. package/dist/core/intent-llm.d.ts +27 -0
  162. package/dist/core/intent-llm.d.ts.map +1 -0
  163. package/dist/core/intent-llm.js +170 -0
  164. package/dist/core/intent-llm.js.map +1 -0
  165. package/dist/core/intent.d.ts +12 -0
  166. package/dist/core/intent.d.ts.map +1 -0
  167. package/dist/core/intent.js +187 -0
  168. package/dist/core/intent.js.map +1 -0
  169. package/dist/core/job-board.d.ts +82 -0
  170. package/dist/core/job-board.d.ts.map +1 -0
  171. package/dist/core/job-board.js +379 -0
  172. package/dist/core/job-board.js.map +1 -0
  173. package/dist/core/location-context.d.ts +32 -0
  174. package/dist/core/location-context.d.ts.map +1 -0
  175. package/dist/core/location-context.js +69 -0
  176. package/dist/core/location-context.js.map +1 -0
  177. package/dist/core/location-token.d.ts +57 -0
  178. package/dist/core/location-token.d.ts.map +1 -0
  179. package/dist/core/location-token.js +128 -0
  180. package/dist/core/location-token.js.map +1 -0
  181. package/dist/core/logger.d.ts +6 -0
  182. package/dist/core/logger.d.ts.map +1 -0
  183. package/dist/core/logger.js +54 -0
  184. package/dist/core/logger.js.map +1 -0
  185. package/dist/core/memo-rpc.d.ts +13 -0
  186. package/dist/core/memo-rpc.d.ts.map +1 -0
  187. package/dist/core/memo-rpc.js +288 -0
  188. package/dist/core/memo-rpc.js.map +1 -0
  189. package/dist/core/memos.d.ts +163 -0
  190. package/dist/core/memos.d.ts.map +1 -0
  191. package/dist/core/memos.js +502 -0
  192. package/dist/core/memos.js.map +1 -0
  193. package/dist/core/metrics.d.ts +55 -0
  194. package/dist/core/metrics.d.ts.map +1 -0
  195. package/dist/core/metrics.js +291 -0
  196. package/dist/core/metrics.js.map +1 -0
  197. package/dist/core/onboarding.d.ts +99 -0
  198. package/dist/core/onboarding.d.ts.map +1 -0
  199. package/dist/core/onboarding.js +426 -0
  200. package/dist/core/onboarding.js.map +1 -0
  201. package/dist/core/pending-reminder.d.ts +25 -0
  202. package/dist/core/pending-reminder.d.ts.map +1 -0
  203. package/dist/core/pending-reminder.js +53 -0
  204. package/dist/core/pending-reminder.js.map +1 -0
  205. package/dist/core/rate-limiter.d.ts +44 -0
  206. package/dist/core/rate-limiter.d.ts.map +1 -0
  207. package/dist/core/rate-limiter.js +115 -0
  208. package/dist/core/rate-limiter.js.map +1 -0
  209. package/dist/core/registry.d.ts +32 -0
  210. package/dist/core/registry.d.ts.map +1 -0
  211. package/dist/core/registry.js +126 -0
  212. package/dist/core/registry.js.map +1 -0
  213. package/dist/core/remind-intent.d.ts +25 -0
  214. package/dist/core/remind-intent.d.ts.map +1 -0
  215. package/dist/core/remind-intent.js +196 -0
  216. package/dist/core/remind-intent.js.map +1 -0
  217. package/dist/core/reminder-rpc.d.ts +17 -0
  218. package/dist/core/reminder-rpc.d.ts.map +1 -0
  219. package/dist/core/reminder-rpc.js +169 -0
  220. package/dist/core/reminder-rpc.js.map +1 -0
  221. package/dist/core/reminders.d.ts +159 -0
  222. package/dist/core/reminders.d.ts.map +1 -0
  223. package/dist/core/reminders.js +977 -0
  224. package/dist/core/reminders.js.map +1 -0
  225. package/dist/core/router.d.ts +55 -0
  226. package/dist/core/router.d.ts.map +1 -0
  227. package/dist/core/router.js +497 -0
  228. package/dist/core/router.js.map +1 -0
  229. package/dist/core/schedule.d.ts +65 -0
  230. package/dist/core/schedule.d.ts.map +1 -0
  231. package/dist/core/schedule.js +323 -0
  232. package/dist/core/schedule.js.map +1 -0
  233. package/dist/core/session.d.ts +182 -0
  234. package/dist/core/session.d.ts.map +1 -0
  235. package/dist/core/session.js +807 -0
  236. package/dist/core/session.js.map +1 -0
  237. package/dist/core/sqlite-helper.d.ts +37 -0
  238. package/dist/core/sqlite-helper.d.ts.map +1 -0
  239. package/dist/core/sqlite-helper.js +79 -0
  240. package/dist/core/sqlite-helper.js.map +1 -0
  241. package/dist/core/transcribe.d.ts +25 -0
  242. package/dist/core/transcribe.d.ts.map +1 -0
  243. package/dist/core/transcribe.js +217 -0
  244. package/dist/core/transcribe.js.map +1 -0
  245. package/dist/core/types.d.ts +360 -0
  246. package/dist/core/types.d.ts.map +1 -0
  247. package/dist/core/types.js +3 -0
  248. package/dist/core/types.js.map +1 -0
  249. package/dist/core/workspace.d.ts +67 -0
  250. package/dist/core/workspace.d.ts.map +1 -0
  251. package/dist/core/workspace.js +113 -0
  252. package/dist/core/workspace.js.map +1 -0
  253. package/dist/index.d.ts +5 -0
  254. package/dist/index.d.ts.map +1 -0
  255. package/dist/index.js +6 -0
  256. package/dist/index.js.map +1 -0
  257. package/dist/plugins/agents/acp/acp-adapter.d.ts +16 -0
  258. package/dist/plugins/agents/acp/acp-adapter.d.ts.map +1 -0
  259. package/dist/plugins/agents/acp/acp-adapter.js +49 -0
  260. package/dist/plugins/agents/acp/acp-adapter.js.map +1 -0
  261. package/dist/plugins/agents/acp/acp-client.d.ts +32 -0
  262. package/dist/plugins/agents/acp/acp-client.d.ts.map +1 -0
  263. package/dist/plugins/agents/acp/acp-client.js +177 -0
  264. package/dist/plugins/agents/acp/acp-client.js.map +1 -0
  265. package/dist/plugins/agents/acp/discovery.d.ts +19 -0
  266. package/dist/plugins/agents/acp/discovery.d.ts.map +1 -0
  267. package/dist/plugins/agents/acp/discovery.js +111 -0
  268. package/dist/plugins/agents/acp/discovery.js.map +1 -0
  269. package/dist/plugins/agents/acp/index.d.ts +4 -0
  270. package/dist/plugins/agents/acp/index.d.ts.map +1 -0
  271. package/dist/plugins/agents/acp/index.js +4 -0
  272. package/dist/plugins/agents/acp/index.js.map +1 -0
  273. package/dist/plugins/agents/acp/types.d.ts +62 -0
  274. package/dist/plugins/agents/acp/types.d.ts.map +1 -0
  275. package/dist/plugins/agents/acp/types.js +5 -0
  276. package/dist/plugins/agents/acp/types.js.map +1 -0
  277. package/dist/plugins/agents/claude-code/index.d.ts +25 -0
  278. package/dist/plugins/agents/claude-code/index.d.ts.map +1 -0
  279. package/dist/plugins/agents/claude-code/index.js +184 -0
  280. package/dist/plugins/agents/claude-code/index.js.map +1 -0
  281. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +59 -0
  282. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -0
  283. package/dist/plugins/agents/claude-code/mcp-approval-server.js +645 -0
  284. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -0
  285. package/dist/plugins/agents/codex/build-mcp-cli-args.d.ts +28 -0
  286. package/dist/plugins/agents/codex/build-mcp-cli-args.d.ts.map +1 -0
  287. package/dist/plugins/agents/codex/build-mcp-cli-args.js +74 -0
  288. package/dist/plugins/agents/codex/build-mcp-cli-args.js.map +1 -0
  289. package/dist/plugins/agents/codex/index.d.ts +53 -0
  290. package/dist/plugins/agents/codex/index.d.ts.map +1 -0
  291. package/dist/plugins/agents/codex/index.js +341 -0
  292. package/dist/plugins/agents/codex/index.js.map +1 -0
  293. package/dist/plugins/agents/copilot/index.d.ts +35 -0
  294. package/dist/plugins/agents/copilot/index.d.ts.map +1 -0
  295. package/dist/plugins/agents/copilot/index.js +182 -0
  296. package/dist/plugins/agents/copilot/index.js.map +1 -0
  297. package/dist/plugins/agents/opencode/ensure-mcp-config.d.ts +11 -0
  298. package/dist/plugins/agents/opencode/ensure-mcp-config.d.ts.map +1 -0
  299. package/dist/plugins/agents/opencode/ensure-mcp-config.js +100 -0
  300. package/dist/plugins/agents/opencode/ensure-mcp-config.js.map +1 -0
  301. package/dist/plugins/agents/opencode/index.d.ts +5 -0
  302. package/dist/plugins/agents/opencode/index.d.ts.map +1 -0
  303. package/dist/plugins/agents/opencode/index.js +30 -0
  304. package/dist/plugins/agents/opencode/index.js.map +1 -0
  305. package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts +166 -0
  306. package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts.map +1 -0
  307. package/dist/plugins/agents/opencode/opencode-http-adapter.js +682 -0
  308. package/dist/plugins/agents/opencode/opencode-http-adapter.js.map +1 -0
  309. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +32 -0
  310. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -0
  311. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +137 -0
  312. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -0
  313. package/dist/plugins/agents/opencode/serve-manager.d.ts +27 -0
  314. package/dist/plugins/agents/opencode/serve-manager.d.ts.map +1 -0
  315. package/dist/plugins/agents/opencode/serve-manager.js +194 -0
  316. package/dist/plugins/agents/opencode/serve-manager.js.map +1 -0
  317. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.d.ts +57 -0
  318. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.d.ts.map +1 -0
  319. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js +409 -0
  320. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js.map +1 -0
  321. package/dist/plugins/messengers/dingtalk/dingtalk-client.d.ts +48 -0
  322. package/dist/plugins/messengers/dingtalk/dingtalk-client.d.ts.map +1 -0
  323. package/dist/plugins/messengers/dingtalk/dingtalk-client.js +236 -0
  324. package/dist/plugins/messengers/dingtalk/dingtalk-client.js.map +1 -0
  325. package/dist/plugins/messengers/dingtalk/index.d.ts +3 -0
  326. package/dist/plugins/messengers/dingtalk/index.d.ts.map +1 -0
  327. package/dist/plugins/messengers/dingtalk/index.js +3 -0
  328. package/dist/plugins/messengers/dingtalk/index.js.map +1 -0
  329. package/dist/plugins/messengers/dingtalk/link-coords.d.ts +23 -0
  330. package/dist/plugins/messengers/dingtalk/link-coords.d.ts.map +1 -0
  331. package/dist/plugins/messengers/dingtalk/link-coords.js +89 -0
  332. package/dist/plugins/messengers/dingtalk/link-coords.js.map +1 -0
  333. package/dist/plugins/messengers/dingtalk/media-store.d.ts +16 -0
  334. package/dist/plugins/messengers/dingtalk/media-store.d.ts.map +1 -0
  335. package/dist/plugins/messengers/dingtalk/media-store.js +77 -0
  336. package/dist/plugins/messengers/dingtalk/media-store.js.map +1 -0
  337. package/dist/plugins/messengers/dingtalk/types.d.ts +82 -0
  338. package/dist/plugins/messengers/dingtalk/types.d.ts.map +1 -0
  339. package/dist/plugins/messengers/dingtalk/types.js +14 -0
  340. package/dist/plugins/messengers/dingtalk/types.js.map +1 -0
  341. package/dist/plugins/messengers/discord/discord-adapter.d.ts +21 -0
  342. package/dist/plugins/messengers/discord/discord-adapter.d.ts.map +1 -0
  343. package/dist/plugins/messengers/discord/discord-adapter.js +238 -0
  344. package/dist/plugins/messengers/discord/discord-adapter.js.map +1 -0
  345. package/dist/plugins/messengers/discord/index.d.ts +4 -0
  346. package/dist/plugins/messengers/discord/index.d.ts.map +1 -0
  347. package/dist/plugins/messengers/discord/index.js +4 -0
  348. package/dist/plugins/messengers/discord/index.js.map +1 -0
  349. package/dist/plugins/messengers/discord/markdown-to-discord.d.ts +11 -0
  350. package/dist/plugins/messengers/discord/markdown-to-discord.d.ts.map +1 -0
  351. package/dist/plugins/messengers/discord/markdown-to-discord.js +59 -0
  352. package/dist/plugins/messengers/discord/markdown-to-discord.js.map +1 -0
  353. package/dist/plugins/messengers/discord/types.d.ts +9 -0
  354. package/dist/plugins/messengers/discord/types.d.ts.map +1 -0
  355. package/dist/plugins/messengers/discord/types.js +3 -0
  356. package/dist/plugins/messengers/discord/types.js.map +1 -0
  357. package/dist/plugins/messengers/email/email-adapter.d.ts +33 -0
  358. package/dist/plugins/messengers/email/email-adapter.d.ts.map +1 -0
  359. package/dist/plugins/messengers/email/email-adapter.js +137 -0
  360. package/dist/plugins/messengers/email/email-adapter.js.map +1 -0
  361. package/dist/plugins/messengers/feishu/card-builder.d.ts +23 -0
  362. package/dist/plugins/messengers/feishu/card-builder.d.ts.map +1 -0
  363. package/dist/plugins/messengers/feishu/card-builder.js +89 -0
  364. package/dist/plugins/messengers/feishu/card-builder.js.map +1 -0
  365. package/dist/plugins/messengers/feishu/feishu-adapter.d.ts +23 -0
  366. package/dist/plugins/messengers/feishu/feishu-adapter.d.ts.map +1 -0
  367. package/dist/plugins/messengers/feishu/feishu-adapter.js +250 -0
  368. package/dist/plugins/messengers/feishu/feishu-adapter.js.map +1 -0
  369. package/dist/plugins/messengers/feishu/feishu-client.d.ts +43 -0
  370. package/dist/plugins/messengers/feishu/feishu-client.d.ts.map +1 -0
  371. package/dist/plugins/messengers/feishu/feishu-client.js +118 -0
  372. package/dist/plugins/messengers/feishu/feishu-client.js.map +1 -0
  373. package/dist/plugins/messengers/feishu/index.d.ts +4 -0
  374. package/dist/plugins/messengers/feishu/index.d.ts.map +1 -0
  375. package/dist/plugins/messengers/feishu/index.js +4 -0
  376. package/dist/plugins/messengers/feishu/index.js.map +1 -0
  377. package/dist/plugins/messengers/feishu/types.d.ts +113 -0
  378. package/dist/plugins/messengers/feishu/types.d.ts.map +1 -0
  379. package/dist/plugins/messengers/feishu/types.js +4 -0
  380. package/dist/plugins/messengers/feishu/types.js.map +1 -0
  381. package/dist/plugins/messengers/telegram/index.d.ts +4 -0
  382. package/dist/plugins/messengers/telegram/index.d.ts.map +1 -0
  383. package/dist/plugins/messengers/telegram/index.js +4 -0
  384. package/dist/plugins/messengers/telegram/index.js.map +1 -0
  385. package/dist/plugins/messengers/telegram/markdown-to-html.d.ts +5 -0
  386. package/dist/plugins/messengers/telegram/markdown-to-html.d.ts.map +1 -0
  387. package/dist/plugins/messengers/telegram/markdown-to-html.js +186 -0
  388. package/dist/plugins/messengers/telegram/markdown-to-html.js.map +1 -0
  389. package/dist/plugins/messengers/telegram/media-download.d.ts +59 -0
  390. package/dist/plugins/messengers/telegram/media-download.d.ts.map +1 -0
  391. package/dist/plugins/messengers/telegram/media-download.js +228 -0
  392. package/dist/plugins/messengers/telegram/media-download.js.map +1 -0
  393. package/dist/plugins/messengers/telegram/telegram-adapter.d.ts +77 -0
  394. package/dist/plugins/messengers/telegram/telegram-adapter.d.ts.map +1 -0
  395. package/dist/plugins/messengers/telegram/telegram-adapter.js +880 -0
  396. package/dist/plugins/messengers/telegram/telegram-adapter.js.map +1 -0
  397. package/dist/plugins/messengers/telegram/types.d.ts +47 -0
  398. package/dist/plugins/messengers/telegram/types.d.ts.map +1 -0
  399. package/dist/plugins/messengers/telegram/types.js +3 -0
  400. package/dist/plugins/messengers/telegram/types.js.map +1 -0
  401. package/dist/plugins/messengers/wechat/context-store.d.ts +18 -0
  402. package/dist/plugins/messengers/wechat/context-store.d.ts.map +1 -0
  403. package/dist/plugins/messengers/wechat/context-store.js +105 -0
  404. package/dist/plugins/messengers/wechat/context-store.js.map +1 -0
  405. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts +71 -0
  406. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts.map +1 -0
  407. package/dist/plugins/messengers/wechat/ilink-adapter.js +664 -0
  408. package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -0
  409. package/dist/plugins/messengers/wechat/ilink-client.d.ts +75 -0
  410. package/dist/plugins/messengers/wechat/ilink-client.d.ts.map +1 -0
  411. package/dist/plugins/messengers/wechat/ilink-client.js +331 -0
  412. package/dist/plugins/messengers/wechat/ilink-client.js.map +1 -0
  413. package/dist/plugins/messengers/wechat/ilink-types.d.ts +181 -0
  414. package/dist/plugins/messengers/wechat/ilink-types.d.ts.map +1 -0
  415. package/dist/plugins/messengers/wechat/ilink-types.js +22 -0
  416. package/dist/plugins/messengers/wechat/ilink-types.js.map +1 -0
  417. package/dist/plugins/messengers/wechat/media-download.d.ts +32 -0
  418. package/dist/plugins/messengers/wechat/media-download.d.ts.map +1 -0
  419. package/dist/plugins/messengers/wechat/media-download.js +78 -0
  420. package/dist/plugins/messengers/wechat/media-download.js.map +1 -0
  421. package/dist/scripts/migrate-gcj02-to-wgs84.d.ts +3 -0
  422. package/dist/scripts/migrate-gcj02-to-wgs84.d.ts.map +1 -0
  423. package/dist/scripts/migrate-gcj02-to-wgs84.js +52 -0
  424. package/dist/scripts/migrate-gcj02-to-wgs84.js.map +1 -0
  425. package/dist/utils/backoff.d.ts +35 -0
  426. package/dist/utils/backoff.d.ts.map +1 -0
  427. package/dist/utils/backoff.js +59 -0
  428. package/dist/utils/backoff.js.map +1 -0
  429. package/dist/utils/cross-platform.d.ts +26 -0
  430. package/dist/utils/cross-platform.d.ts.map +1 -0
  431. package/dist/utils/cross-platform.js +58 -0
  432. package/dist/utils/cross-platform.js.map +1 -0
  433. package/dist/utils/message-split.d.ts +14 -0
  434. package/dist/utils/message-split.d.ts.map +1 -0
  435. package/dist/utils/message-split.js +65 -0
  436. package/dist/utils/message-split.js.map +1 -0
  437. package/dist/utils/safe-equal.d.ts +2 -0
  438. package/dist/utils/safe-equal.d.ts.map +1 -0
  439. package/dist/utils/safe-equal.js +11 -0
  440. package/dist/utils/safe-equal.js.map +1 -0
  441. package/dist/web/public/_app.js +196 -0
  442. package/dist/web/public/index.html +936 -0
  443. package/dist/web/public/loc.html +305 -0
  444. package/dist/web/public/login.html +106 -0
  445. package/dist/web/public/memos.html +271 -0
  446. package/dist/web/public/reminders.html +234 -0
  447. package/dist/web/public/settings.html +1355 -0
  448. package/dist/web/public/tasks.html +1835 -0
  449. package/dist/web/server.d.ts +12 -0
  450. package/dist/web/server.d.ts.map +1 -0
  451. package/dist/web/server.js +2399 -0
  452. package/dist/web/server.js.map +1 -0
  453. package/package.json +92 -0
@@ -0,0 +1,373 @@
1
+ // AgentBase — base class for CLI-based agent adapters
2
+ //
3
+ // Provides a unified streaming JSONL invocation pipeline:
4
+ // sendPrompt — true AsyncGenerator that yields chunks live
5
+ // spawnAndCollect — Promise<string> wrapper for job-board / sync calls
6
+ // isAvailable — `--version` probe
7
+ // buildContextualPrompt / buildArgs / extractText — subclass hooks
8
+ //
9
+ // Subclasses must implement: buildArgs(), extractText().
10
+ // Optional override: handleError(), notAvailableMessage(), commandName.
11
+ import { StringDecoder } from 'node:string_decoder';
12
+ import { crossSpawn } from '../utils/cross-platform.js';
13
+ import { logger as rootLogger } from './logger.js';
14
+ const DEFAULT_TIMEOUT_MS = 30 * 60 * 1000;
15
+ /** Resolve per-agent timeout: env var AGENT_TIMEOUT_MS or class default */
16
+ function resolveTimeout(envKey, fallback) {
17
+ const raw = process.env[envKey];
18
+ if (raw) {
19
+ const n = parseInt(raw, 10);
20
+ if (Number.isFinite(n) && n > 0)
21
+ return n;
22
+ rootLogger.warn({ event: 'agent.timeout.invalid', raw, envKey, fallback }, `Invalid timeout env "${envKey}=${raw}", using default ${Math.round(fallback / 60000)}min`);
23
+ }
24
+ return fallback;
25
+ }
26
+ /**
27
+ * Buffer line splitter that respects UTF-8 multi-byte boundaries.
28
+ *
29
+ * Holds a single `partial` string of bytes seen so far without a newline
30
+ * boundary. push(chunk) returns any complete lines found in
31
+ * partial+chunk, and resets partial to the remainder.
32
+ *
33
+ * Implementation notes:
34
+ * - Uses StringDecoder so a 3-byte CJK codepoint split across chunks
35
+ * stays whole (no U+FFFD).
36
+ * - Skips the partial+chunk concat when the chunk has no newline AND
37
+ * partial is empty (the common case for tiny chunks).
38
+ * - Walks via indexOf + slice instead of String.split so we avoid
39
+ * allocating an intermediate array of every line just to pop the
40
+ * last one back into partial.
41
+ */
42
+ class LineBuffer {
43
+ decoder = new StringDecoder('utf8');
44
+ partial = '';
45
+ push(chunk) {
46
+ const decoded = this.decoder.write(chunk);
47
+ if (!decoded)
48
+ return [];
49
+ if (decoded.indexOf('\n') === -1) {
50
+ // No newline in this chunk — extend partial. V8 ropes strings, so
51
+ // the concat is amortized O(1) here.
52
+ this.partial += decoded;
53
+ return [];
54
+ }
55
+ const data = this.partial.length === 0 ? decoded : this.partial + decoded;
56
+ const out = [];
57
+ let start = 0;
58
+ while (true) {
59
+ const nl = data.indexOf('\n', start);
60
+ if (nl === -1)
61
+ break;
62
+ out.push(data.slice(start, nl));
63
+ start = nl + 1;
64
+ }
65
+ this.partial = start < data.length ? data.slice(start) : '';
66
+ return out;
67
+ }
68
+ flush() {
69
+ const tail = this.decoder.end();
70
+ const data = this.partial.length === 0 ? tail : this.partial + tail;
71
+ this.partial = '';
72
+ if (data.length === 0)
73
+ return [];
74
+ const out = [];
75
+ let start = 0;
76
+ while (true) {
77
+ const nl = data.indexOf('\n', start);
78
+ if (nl === -1)
79
+ break;
80
+ if (nl > start)
81
+ out.push(data.slice(start, nl));
82
+ start = nl + 1;
83
+ }
84
+ if (start < data.length)
85
+ out.push(data.slice(start));
86
+ return out;
87
+ }
88
+ }
89
+ export class AgentBase {
90
+ /** Binary name to check for isAvailable */
91
+ get commandName() { return this.name; }
92
+ /**
93
+ * Returns a complete spawn plan. Default implementation just wraps
94
+ * buildArgs(). Subclasses needing per-call temp resources (mcp-config
95
+ * file, registered run id, etc.) should override and put ALL derived
96
+ * state inside the returned plan / closure — never on `this`, since
97
+ * concurrent spawns would race.
98
+ */
99
+ async prepareCommand(prompt, opts) {
100
+ return { args: this.buildArgs(prompt, opts) };
101
+ }
102
+ /**
103
+ * Optional side-channel hook fired for every parsed JSONL event before
104
+ * extractText. Default no-op. Used by adapters whose CLI surfaces metadata
105
+ * (session id, cost, token counts) inline with content events — they
106
+ * dispatch back to the caller via `opts.onAgentSessionId` / `opts.onUsage`.
107
+ *
108
+ * Keep it cheap: this runs on the hot stdout path. No network or disk.
109
+ */
110
+ inspectEvent(_event, _opts) { }
111
+ /** Optional: transform error info into a user-friendly message string (resolved instead of rejected). */
112
+ handleError(_code, _stderr, _errorMessage) {
113
+ return null; // default: reject
114
+ }
115
+ /** Optional: return user-friendly unavailable message. */
116
+ notAvailableMessage() {
117
+ return `${this.name} CLI not found. Please install it.`;
118
+ }
119
+ async isAvailable() {
120
+ return new Promise((resolve) => {
121
+ const proc = crossSpawn(this.commandName, ['--version'], { stdio: 'ignore' });
122
+ proc.on('close', (code) => resolve(code === 0));
123
+ proc.on('error', () => resolve(false));
124
+ });
125
+ }
126
+ /** Lightweight health probe (same as isAvailable for CLI agents). */
127
+ async healthCheck() {
128
+ const start = Date.now();
129
+ const ok = await this.isAvailable();
130
+ return { ok, latencyMs: Date.now() - start };
131
+ }
132
+ /**
133
+ * Stream JSONL chunks live. Yields each `extractText` result as it
134
+ * arrives; on non-zero exit, yields the friendly error tail (if any) and
135
+ * returns.
136
+ */
137
+ async *sendPrompt(_sessionId, prompt, history, opts) {
138
+ rootLogger.info({ component: `agent.${this.name}`, agent: this.name, historyLen: history?.length || 0 }, `[${this.name}] sendPrompt`);
139
+ const contextualPrompt = this.buildContextualPrompt(prompt, history);
140
+ yield* this.spawnStream(contextualPrompt, undefined, opts || {});
141
+ }
142
+ /**
143
+ * Build prompt with conversation history context.
144
+ * Subclasses may override for custom formatting.
145
+ */
146
+ buildContextualPrompt(prompt, history) {
147
+ if (!history || history.length === 0) {
148
+ return prompt;
149
+ }
150
+ const historyText = history
151
+ .map(msg => `[${msg.role === 'user' ? 'User' : 'Assistant'}]: ${msg.content}`)
152
+ .join('\n\n');
153
+ return `Previous conversation context:\n${historyText}\n\nCurrent request: ${prompt}`;
154
+ }
155
+ /** Per-agent timeout in ms. Override or set env var (upper-case name + _TIMEOUT_MS). */
156
+ get timeoutMs() {
157
+ return resolveTimeout(`${this.name.toUpperCase()}_TIMEOUT_MS`, DEFAULT_TIMEOUT_MS);
158
+ }
159
+ /**
160
+ * Sync convenience wrapper: drain the streaming generator into a single
161
+ * string. Used by Job Board where the caller wants the final result.
162
+ */
163
+ async spawnAndCollect(prompt, signal) {
164
+ let acc = '';
165
+ for await (const chunk of this.spawnStream(prompt, signal, {})) {
166
+ acc += chunk;
167
+ }
168
+ return acc;
169
+ }
170
+ /**
171
+ * Core streaming pipeline: spawn the CLI, parse JSONL line-by-line, yield
172
+ * each extracted text fragment. Handles timeout, abort, and process exit
173
+ * with cleanup of all timers and listeners.
174
+ */
175
+ async *spawnStream(prompt, signal, opts = {}) {
176
+ const timeout = this.timeoutMs;
177
+ // prepareCommand returns a self-contained plan — args, optional extra env,
178
+ // optional cleanup. No instance state involved, so concurrent spawnStream
179
+ // calls cannot race each other. (Previously setupSpawn() would mutate
180
+ // this.mcpConfigPath etc. between awaits, leading to two parallel claude
181
+ // runs sharing one mcp.json and the second one finding it already deleted.)
182
+ let plan;
183
+ plan = await this.prepareCommand(prompt, opts);
184
+ const proc = crossSpawn(this.commandName, plan.args, {
185
+ stdio: ['ignore', 'pipe', 'pipe'],
186
+ env: plan.extraEnv ? { ...process.env, ...plan.extraEnv } : undefined,
187
+ cwd: plan.cwd,
188
+ });
189
+ const buf = new LineBuffer();
190
+ const stderrBuf = new LineBuffer();
191
+ let stderrAccum = '';
192
+ let errorMessage = '';
193
+ let pendingChunks = [];
194
+ let closed = false;
195
+ let exitCode = null;
196
+ let spawnError = null;
197
+ let timedOut = false;
198
+ let aborted = false;
199
+ // Each `notify` resolves the current poll cycle; the consumer awaits a
200
+ // promise that flips whenever new state is available.
201
+ let notify = null;
202
+ const wait = () => new Promise((resolve) => { notify = resolve; });
203
+ const ping = () => { const n = notify; notify = null; n?.(); };
204
+ const timer = setTimeout(() => {
205
+ timedOut = true;
206
+ try {
207
+ proc.kill('SIGTERM');
208
+ }
209
+ catch { /* ignore */ }
210
+ ping();
211
+ }, timeout);
212
+ let killTimer = null;
213
+ const scheduleKill = () => {
214
+ if (killTimer)
215
+ return;
216
+ killTimer = setTimeout(() => {
217
+ try {
218
+ proc.kill('SIGKILL');
219
+ }
220
+ catch { /* ignore */ }
221
+ }, 5000);
222
+ };
223
+ const onAbort = () => {
224
+ aborted = true;
225
+ try {
226
+ proc.kill('SIGTERM');
227
+ }
228
+ catch { /* ignore */ }
229
+ scheduleKill();
230
+ ping();
231
+ };
232
+ if (signal) {
233
+ if (signal.aborted) {
234
+ onAbort();
235
+ }
236
+ else {
237
+ signal.addEventListener('abort', onAbort, { once: true });
238
+ }
239
+ }
240
+ proc.stdout?.on('data', (data) => {
241
+ const lines = buf.push(data);
242
+ for (const line of lines) {
243
+ if (!line.trim())
244
+ continue;
245
+ try {
246
+ const event = JSON.parse(line);
247
+ if (event && typeof event === 'object' && event.type === 'error') {
248
+ const e = event;
249
+ errorMessage = e.error || e.message || 'error event';
250
+ // Don't yield error event content alongside extractText
251
+ continue;
252
+ }
253
+ this.inspectEvent(event, opts);
254
+ const text = this.extractText(event);
255
+ if (text)
256
+ pendingChunks.push(text);
257
+ }
258
+ catch {
259
+ // Non-JSON line — pass through verbatim with newline preserved
260
+ pendingChunks.push(`${line}\n`);
261
+ }
262
+ }
263
+ if (pendingChunks.length > 0)
264
+ ping();
265
+ });
266
+ proc.stderr?.on('data', (data) => {
267
+ stderrAccum += data.toString();
268
+ // Surface to root logger as warn — pino-aware, no console.error noise
269
+ for (const line of stderrBuf.push(data)) {
270
+ if (line.trim()) {
271
+ rootLogger.warn({ component: `agent.${this.name}`, agent: this.name, stderr: line }, `[${this.name}] stderr`);
272
+ }
273
+ }
274
+ });
275
+ proc.on('error', (err) => {
276
+ spawnError = err;
277
+ closed = true;
278
+ ping();
279
+ });
280
+ proc.on('close', (code) => {
281
+ exitCode = code;
282
+ closed = true;
283
+ // Flush any remaining stderr line
284
+ for (const line of stderrBuf.flush()) {
285
+ if (line.trim()) {
286
+ rootLogger.warn({ component: `agent.${this.name}`, agent: this.name, stderr: line }, `[${this.name}] stderr`);
287
+ }
288
+ }
289
+ // Flush any non-newline-terminated tail in stdout buffer
290
+ for (const line of buf.flush()) {
291
+ try {
292
+ const event = JSON.parse(line);
293
+ const text = this.extractText(event);
294
+ if (text)
295
+ pendingChunks.push(text);
296
+ }
297
+ catch {
298
+ pendingChunks.push(line);
299
+ }
300
+ }
301
+ ping();
302
+ });
303
+ try {
304
+ while (!closed || pendingChunks.length > 0) {
305
+ if (pendingChunks.length === 0) {
306
+ await wait();
307
+ if (aborted)
308
+ break;
309
+ if (timedOut)
310
+ break;
311
+ }
312
+ // Drain whatever has accumulated this cycle
313
+ const out = pendingChunks;
314
+ pendingChunks = [];
315
+ for (const c of out)
316
+ yield c;
317
+ }
318
+ if (timedOut) {
319
+ const mins = Math.round(timeout / 60000);
320
+ rootLogger.warn({ component: `agent.${this.name}`, agent: this.name, timeoutMs: timeout }, `[${this.name}] timeout after ${mins}min`);
321
+ yield `\n\n⚠️ 处理超时(已超过 ${mins} 分钟)`;
322
+ return;
323
+ }
324
+ if (aborted) {
325
+ rootLogger.info({ component: `agent.${this.name}`, agent: this.name }, `[${this.name}] cancelled via signal`);
326
+ yield '\n\n🚫 任务已被取消。';
327
+ return;
328
+ }
329
+ if (spawnError) {
330
+ throw spawnError;
331
+ }
332
+ rootLogger.info({
333
+ component: `agent.${this.name}`,
334
+ agent: this.name,
335
+ exitCode,
336
+ }, `[${this.name}] process closed`);
337
+ if (exitCode !== null && exitCode !== 0) {
338
+ const friendly = this.handleError(exitCode, stderrAccum, errorMessage);
339
+ if (friendly !== null) {
340
+ yield friendly;
341
+ return;
342
+ }
343
+ let detail = '';
344
+ if (errorMessage)
345
+ detail = errorMessage;
346
+ if (!detail && stderrAccum.trim() && stderrAccum.trim().length < 200) {
347
+ detail = stderrAccum.trim();
348
+ }
349
+ yield `${this.name} failed (exit ${exitCode})${detail ? `: ${detail}` : ''}`;
350
+ }
351
+ }
352
+ finally {
353
+ clearTimeout(timer);
354
+ if (killTimer)
355
+ clearTimeout(killTimer);
356
+ if (signal)
357
+ signal.removeEventListener('abort', onAbort);
358
+ if (plan.cleanup) {
359
+ try {
360
+ await plan.cleanup();
361
+ }
362
+ catch (err) {
363
+ // L13: surface to /api/metrics in addition to pino so ops can
364
+ // alert on cumulative cleanup failures (orphan tmpdir leakage).
365
+ const { recordAgentCleanupFailure } = await import('./metrics.js');
366
+ recordAgentCleanupFailure();
367
+ rootLogger.warn({ component: `agent.${this.name}`, agent: this.name, err: String(err) }, `[${this.name}] cleanup hook threw`);
368
+ }
369
+ }
370
+ }
371
+ }
372
+ }
373
+ //# sourceMappingURL=agent-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-base.js","sourceRoot":"","sources":["../../src/core/agent-base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { AgentSendOpts } from './types.js';
2
+ /** Root for all per-agent IM workspaces. Kept stable so memory persists.
3
+ * Honors the legacy `IMHUB_WORKSPACES_ROOT` env override; otherwise
4
+ * resolves via core/agim-paths (which prefers `~/.agim-workspaces/` but
5
+ * falls back to the legacy `~/.im-hub-workspaces/` on 0.x systems). */
6
+ export declare function imhubWorkspacesRoot(): string;
7
+ /** Default cwd for a given agent under the workspaces root. */
8
+ export declare function defaultAgentCwd(agentName: string): string;
9
+ /**
10
+ * Resolve the cwd to spawn an agent CLI in.
11
+ *
12
+ * Decision order:
13
+ * 1. Env override `IMHUB_<AGENT>_CWD` always wins.
14
+ * 2. If we're in an IM context (threadId + platform both present), pin to
15
+ * `~/.im-hub-workspaces/<agent>/`.
16
+ * 3. Otherwise return undefined → adapter inherits im-hub's cwd. This
17
+ * keeps web/scheduler/intent-llm judge paths exactly as they were.
18
+ */
19
+ export declare function resolveAgentCwd(agentName: string, opts: AgentSendOpts): string | undefined;
20
+ /**
21
+ * Idempotent: create the workspace dir and seed initial CLAUDE.md / AGENTS.md
22
+ * if they don't exist. Existing files are NEVER overwritten — the user is free
23
+ * to evolve them by hand or have the agent itself rewrite them via
24
+ * auto-memory.
25
+ *
26
+ * Honors IMHUB_<AGENT>_CWD overrides — if set, we bootstrap THAT path
27
+ * instead. Skips bootstrapping when the override is empty / unset and we
28
+ * compute it from defaultAgentCwd; either way the resolved path is what
29
+ * spawnStream will pass as cwd.
30
+ */
31
+ export declare function ensureAgentWorkspace(agentName: string, seed: {
32
+ filename: string;
33
+ content: string;
34
+ }): Promise<string>;
35
+ /**
36
+ * Bootstrap the workspaces for the two built-in CLI agents we ship by
37
+ * default. Safe to call multiple times. Returns a summary suitable for
38
+ * logging.
39
+ *
40
+ * Other agents (codex, copilot, ACP-imported) don't need cwd isolation
41
+ * either because they don't have per-cwd memory, or because they're
42
+ * remote — they'll pass through with cwd undefined like before.
43
+ */
44
+ export declare function bootstrapAgentWorkspaces(): Promise<Array<{
45
+ agent: string;
46
+ dir: string;
47
+ }>>;
48
+ //# sourceMappingURL=agent-cwd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-cwd.d.ts","sourceRoot":"","sources":["../../src/core/agent-cwd.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG/C;;;wEAGwE;AACxE,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAQD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAS1F;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA8F/F"}
@@ -0,0 +1,181 @@
1
+ // Per-agent working directory resolution for the IM context.
2
+ //
3
+ // Both Claude Code and opencode key their per-project memory / history off
4
+ // the spawned process's cwd. When im-hub runs as a systemd service, that cwd
5
+ // is "/" — so every IM thread, every direct-terminal session, and every
6
+ // background scheduler tick all share the SAME global memory bucket. This
7
+ // is the root cause of:
8
+ //
9
+ // - The IM-only Claude not being able to carry a distinct CLAUDE.md role
10
+ // - The user's terminal MEMORY.md getting polluted by IM auto-saves
11
+ // - opencode's AGENTS.md being unable to differ between IM and terminal
12
+ //
13
+ // Fix: when we detect we're in an IM call (threadId + platform both set),
14
+ // pin the agent into a stable per-agent workspace under
15
+ // `~/.im-hub-workspaces/<agent>/`. Non-IM calls (web UI, scheduler,
16
+ // intent-llm judge) keep the inherited cwd, preserving prior behavior.
17
+ //
18
+ // Override path: `IMHUB_<AGENT>_CWD` env var beats everything (e.g.
19
+ // `IMHUB_CLAUDE_CODE_CWD=/srv/foo`). Useful for migration tests and for
20
+ // future per-tenant deployments.
21
+ import { join } from 'node:path';
22
+ import { mkdir, writeFile, access } from 'node:fs/promises';
23
+ import { AGIM_WORKSPACES } from './agim-paths.js';
24
+ /** Root for all per-agent IM workspaces. Kept stable so memory persists.
25
+ * Honors the legacy `IMHUB_WORKSPACES_ROOT` env override; otherwise
26
+ * resolves via core/agim-paths (which prefers `~/.agim-workspaces/` but
27
+ * falls back to the legacy `~/.im-hub-workspaces/` on 0.x systems). */
28
+ export function imhubWorkspacesRoot() {
29
+ return process.env.IMHUB_WORKSPACES_ROOT || AGIM_WORKSPACES;
30
+ }
31
+ /** Default cwd for a given agent under the workspaces root. */
32
+ export function defaultAgentCwd(agentName) {
33
+ return join(imhubWorkspacesRoot(), agentName);
34
+ }
35
+ /** Env var name for an explicit override on a given agent. */
36
+ function envKeyFor(agentName) {
37
+ // claude-code -> IMHUB_CLAUDE_CODE_CWD
38
+ return `IMHUB_${agentName.replace(/-/g, '_').toUpperCase()}_CWD`;
39
+ }
40
+ /**
41
+ * Resolve the cwd to spawn an agent CLI in.
42
+ *
43
+ * Decision order:
44
+ * 1. Env override `IMHUB_<AGENT>_CWD` always wins.
45
+ * 2. If we're in an IM context (threadId + platform both present), pin to
46
+ * `~/.im-hub-workspaces/<agent>/`.
47
+ * 3. Otherwise return undefined → adapter inherits im-hub's cwd. This
48
+ * keeps web/scheduler/intent-llm judge paths exactly as they were.
49
+ */
50
+ export function resolveAgentCwd(agentName, opts) {
51
+ const explicit = process.env[envKeyFor(agentName)];
52
+ if (explicit)
53
+ return explicit;
54
+ if (opts.threadId && opts.platform) {
55
+ return defaultAgentCwd(agentName);
56
+ }
57
+ return undefined;
58
+ }
59
+ /**
60
+ * Idempotent: create the workspace dir and seed initial CLAUDE.md / AGENTS.md
61
+ * if they don't exist. Existing files are NEVER overwritten — the user is free
62
+ * to evolve them by hand or have the agent itself rewrite them via
63
+ * auto-memory.
64
+ *
65
+ * Honors IMHUB_<AGENT>_CWD overrides — if set, we bootstrap THAT path
66
+ * instead. Skips bootstrapping when the override is empty / unset and we
67
+ * compute it from defaultAgentCwd; either way the resolved path is what
68
+ * spawnStream will pass as cwd.
69
+ */
70
+ export async function ensureAgentWorkspace(agentName, seed) {
71
+ const explicit = process.env[envKeyFor(agentName)];
72
+ const dir = explicit || defaultAgentCwd(agentName);
73
+ await mkdir(dir, { recursive: true });
74
+ const seedPath = join(dir, seed.filename);
75
+ try {
76
+ await access(seedPath);
77
+ // already exists — leave the user's customizations alone
78
+ }
79
+ catch {
80
+ await writeFile(seedPath, seed.content, 'utf8');
81
+ }
82
+ return dir;
83
+ }
84
+ /**
85
+ * Bootstrap the workspaces for the two built-in CLI agents we ship by
86
+ * default. Safe to call multiple times. Returns a summary suitable for
87
+ * logging.
88
+ *
89
+ * Other agents (codex, copilot, ACP-imported) don't need cwd isolation
90
+ * either because they don't have per-cwd memory, or because they're
91
+ * remote — they'll pass through with cwd undefined like before.
92
+ */
93
+ export async function bootstrapAgentWorkspaces() {
94
+ const result = [];
95
+ const claudeSeed = `# Claude Code — IM 入口工作区
96
+
97
+ > 这是 im-hub 通过 IM 唤起 Claude Code 时的专用工作目录。
98
+ > 与你直接在终端里跑 \`claude\` 时使用的全局配置 (~/.claude/CLAUDE.md) 隔离。
99
+ >
100
+ > 文件位置:${defaultAgentCwd('claude-code')}/CLAUDE.md
101
+
102
+ ## 角色
103
+
104
+ 你是被 IM 入口(微信 / Telegram / Feishu / Discord 等)唤起的 Claude Code。
105
+ 回复要简洁、可在 IM 里阅读,避免大段代码块除非用户明确要求代码。
106
+
107
+ ## 长期项目记忆
108
+
109
+ - 你自己的 auto-memory 落在本目录的 \`memory/MEMORY.md\`
110
+ - 长期项目档案手写在本目录下,由 Claude 自己读取与维护
111
+ - 与终端里的 Claude 互不干扰,可以分头记录不同侧重
112
+
113
+ ## 注意
114
+
115
+ - 当前 cwd 不是真正的代码仓库;要查代码请去 /root/workspace/...
116
+ - IM 单条消息的硬超时是 30 分钟(im-hub 层),长任务必须走 bgjob
117
+ `;
118
+ result.push({
119
+ agent: 'claude-code',
120
+ dir: await ensureAgentWorkspace('claude-code', { filename: 'CLAUDE.md', content: claudeSeed }),
121
+ });
122
+ const opencodeSeed = `# OpenCode — IM 入口工作区
123
+
124
+ > 这是 im-hub 通过 IM 唤起 opencode 时的专用工作目录。
125
+ > 与你直接在终端里跑 \`opencode\` 时使用的全局配置 (~/.config/opencode/AGENTS.md) 隔离。
126
+ >
127
+ > 文件位置:${defaultAgentCwd('opencode')}/AGENTS.md
128
+
129
+ ## 角色
130
+
131
+ 你是被 IM 入口(微信 / Telegram / Feishu / Discord 等)唤起的 opencode。
132
+ 回复要简洁、可在 IM 里阅读,避免大段代码块除非用户明确要求代码。
133
+
134
+ ## 长期项目记忆
135
+
136
+ - 长期项目档案手写在本目录下的 PROJECT.md,由 opencode 自己读取与维护
137
+ - 与终端里的 opencode 互不干扰,可以分头记录不同侧重
138
+
139
+ ## 注意
140
+
141
+ - 当前 cwd 不是真正的代码仓库;要查代码请去 /root/workspace/...
142
+ - IM 单条消息的硬超时是 30 分钟(im-hub 层),长任务必须走 bgjob
143
+ `;
144
+ result.push({
145
+ agent: 'opencode',
146
+ dir: await ensureAgentWorkspace('opencode', { filename: 'AGENTS.md', content: opencodeSeed }),
147
+ });
148
+ const codexSeed = `# Codex — IM 入口工作区
149
+
150
+ > 这是 im-hub 通过 IM 唤起 OpenAI Codex CLI 时的专用工作目录。
151
+ > 与你直接在终端里跑 \`codex\` 时使用的全局配置 (~/.codex/config.toml) 隔离。
152
+ >
153
+ > 文件位置:${defaultAgentCwd('codex')}/AGENTS.md
154
+
155
+ ## 角色
156
+
157
+ 你是被 IM 入口(微信 / Telegram / Feishu / Discord 等)唤起的 Codex。
158
+ 回复要简洁、可在 IM 里阅读,避免大段代码块除非用户明确要求代码。
159
+
160
+ ## 长期项目记忆
161
+
162
+ - 长期项目档案手写在本目录下(PROJECT.md 或自定义文件名)
163
+ - 本目录下的 \`memory/\` 目录用于手写笔记,与 Claude / opencode 工作区互不干扰
164
+ - 与终端里的 codex 互不干扰,可以分头记录不同侧重
165
+
166
+ ## 注意
167
+
168
+ - 当前 cwd 不是真正的代码仓库;要查代码请去 /root/workspace/...
169
+ - IM 单条消息的硬超时是 30 分钟(im-hub 层),长任务必须走 bgjob
170
+ - bgjob 数据目录:~/.codex/bgjobs/(与 claude / opencode 隔离)
171
+ 使用方式:\`/root/.codex/scripts/bgjob start <name> -- <cmd...>\`
172
+ - AGENTS.md 与 opencode 同名但工作区分离 —— codex 只读本目录的 AGENTS.md,
173
+ 不会读 ~/.im-hub-workspaces/opencode/AGENTS.md
174
+ `;
175
+ result.push({
176
+ agent: 'codex',
177
+ dir: await ensureAgentWorkspace('codex', { filename: 'AGENTS.md', content: codexSeed }),
178
+ });
179
+ return result;
180
+ }
181
+ //# sourceMappingURL=agent-cwd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-cwd.js","sourceRoot":"","sources":["../../src/core/agent-cwd.ts"],"names":[],"mappings":"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"}