@xopcai/xopcbot 0.1.3 → 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 (292) hide show
  1. package/README.md +57 -52
  2. package/README.zh-CN.md +56 -49
  3. package/dist/agent/__tests__/media-processing.test.d.ts +6 -0
  4. package/dist/agent/__tests__/media-processing.test.js +385 -0
  5. package/dist/agent/__tests__/media-processing.test.js.map +1 -0
  6. package/dist/agent/fallback/__tests__/index.test.js +16 -5
  7. package/dist/agent/fallback/__tests__/index.test.js.map +1 -1
  8. package/dist/agent/fallback/candidates.d.ts +2 -4
  9. package/dist/agent/fallback/candidates.js +19 -26
  10. package/dist/agent/fallback/candidates.js.map +1 -1
  11. package/dist/agent/helpers.d.ts +1 -0
  12. package/dist/agent/helpers.js.map +1 -1
  13. package/dist/agent/index.d.ts +6 -1
  14. package/dist/agent/index.js +10 -1
  15. package/dist/agent/index.js.map +1 -1
  16. package/dist/agent/models/compat.d.ts +35 -0
  17. package/dist/agent/models/compat.js +110 -0
  18. package/dist/agent/models/compat.js.map +1 -0
  19. package/dist/agent/models/fallback.d.ts +38 -0
  20. package/dist/agent/models/fallback.js +133 -0
  21. package/dist/agent/models/fallback.js.map +1 -0
  22. package/dist/agent/models/index.d.ts +10 -0
  23. package/dist/agent/models/index.js +11 -0
  24. package/dist/agent/models/index.js.map +1 -0
  25. package/dist/agent/{model-manager.d.ts → models/manager.d.ts} +2 -8
  26. package/dist/agent/{model-manager.js → models/manager.js} +38 -24
  27. package/dist/agent/models/manager.js.map +1 -0
  28. package/dist/agent/models/scan.d.ts +46 -0
  29. package/dist/agent/models/scan.js +177 -0
  30. package/dist/agent/models/scan.js.map +1 -0
  31. package/dist/agent/models/selection.d.ts +44 -0
  32. package/dist/agent/models/selection.js +141 -0
  33. package/dist/agent/models/selection.js.map +1 -0
  34. package/dist/agent/prompt/index.js +1 -1
  35. package/dist/agent/prompt/index.js.map +1 -1
  36. package/dist/agent/service.js +34 -16
  37. package/dist/agent/service.js.map +1 -1
  38. package/dist/agent/skills/__tests__/test-framework.test.js +15 -7
  39. package/dist/agent/skills/__tests__/test-framework.test.js.map +1 -1
  40. package/dist/agent/skills/config.d.ts +1 -1
  41. package/dist/agent/skills/config.js +2 -2
  42. package/dist/agent/skills/config.js.map +1 -1
  43. package/dist/agent/skills/index.js +15 -28
  44. package/dist/agent/skills/index.js.map +1 -1
  45. package/dist/agent/skills/installer.d.ts +1 -1
  46. package/dist/agent/skills/installer.js +1 -1
  47. package/dist/agent/skills/scanner.d.ts +1 -1
  48. package/dist/agent/skills/scanner.js +1 -1
  49. package/dist/agent/skills/test-framework.js +24 -23
  50. package/dist/agent/skills/test-framework.js.map +1 -1
  51. package/dist/agent/skills/types.d.ts +3 -3
  52. package/dist/agent/skills/types.js +1 -1
  53. package/dist/agent/skills/watcher.d.ts +1 -1
  54. package/dist/agent/skills/watcher.js +1 -1
  55. package/dist/agent/system-prompt.d.ts +67 -0
  56. package/dist/agent/system-prompt.js +351 -0
  57. package/dist/agent/system-prompt.js.map +1 -0
  58. package/dist/agent/tools/__tests__/send-media.test.d.ts +6 -0
  59. package/dist/agent/tools/__tests__/send-media.test.js +251 -0
  60. package/dist/agent/tools/__tests__/send-media.test.js.map +1 -0
  61. package/dist/agent/types.agent-defaults.d.ts +48 -0
  62. package/dist/agent/types.agent-defaults.js +5 -0
  63. package/dist/agent/types.agent-defaults.js.map +1 -0
  64. package/dist/agent/types.d.ts +14 -6
  65. package/dist/agent/types.js +5 -0
  66. package/dist/agent/types.js.map +1 -1
  67. package/dist/agent/workspace.d.ts +94 -0
  68. package/dist/agent/workspace.js +625 -0
  69. package/dist/agent/workspace.js.map +1 -0
  70. package/dist/auth/index.js +1 -1
  71. package/dist/auth/index.js.map +1 -1
  72. package/dist/auth/oauth/index.d.ts +1 -0
  73. package/dist/auth/oauth/index.js +1 -0
  74. package/dist/auth/oauth/index.js.map +1 -1
  75. package/dist/auth/oauth/kimi.d.ts +2 -1
  76. package/dist/auth/oauth/kimi.js +51 -48
  77. package/dist/auth/oauth/kimi.js.map +1 -1
  78. package/dist/auth/oauth/minimax-cn.d.ts +12 -0
  79. package/dist/auth/oauth/minimax-cn.js +111 -0
  80. package/dist/auth/oauth/minimax-cn.js.map +1 -0
  81. package/dist/auth/oauth/qwen.d.ts +5 -0
  82. package/dist/auth/oauth/qwen.js +54 -84
  83. package/dist/auth/oauth/qwen.js.map +1 -1
  84. package/dist/auth/profiles/index.d.ts +0 -2
  85. package/dist/auth/profiles/index.js +0 -2
  86. package/dist/auth/profiles/index.js.map +1 -1
  87. package/dist/auth/storage.js +7 -1
  88. package/dist/auth/storage.js.map +1 -1
  89. package/dist/channels/__tests__/media-integration.test.d.ts +6 -0
  90. package/dist/channels/__tests__/media-integration.test.js +398 -0
  91. package/dist/channels/__tests__/media-integration.test.js.map +1 -0
  92. package/dist/channels/__tests__/media.test.d.ts +6 -0
  93. package/dist/channels/__tests__/media.test.js +251 -0
  94. package/dist/channels/__tests__/media.test.js.map +1 -0
  95. package/dist/channels/access-control.d.ts +1 -1
  96. package/dist/channels/access-control.js +1 -1
  97. package/dist/channels/draft-stream.d.ts +1 -1
  98. package/dist/channels/draft-stream.js +1 -1
  99. package/dist/channels/format.d.ts +1 -1
  100. package/dist/channels/format.js +1 -1
  101. package/dist/channels/telegram/command-handler.js +15 -48
  102. package/dist/channels/telegram/command-handler.js.map +1 -1
  103. package/dist/channels/telegram/plugin.js +3 -2
  104. package/dist/channels/telegram/plugin.js.map +1 -1
  105. package/dist/channels/telegram/webhook.d.ts +1 -1
  106. package/dist/channels/telegram/webhook.js +1 -1
  107. package/dist/channels/types.d.ts +1 -1
  108. package/dist/channels/types.js +1 -1
  109. package/dist/channels/update-offset-store.d.ts +1 -1
  110. package/dist/channels/update-offset-store.js +1 -1
  111. package/dist/cli/commands/auth.js +8 -23
  112. package/dist/cli/commands/auth.js.map +1 -1
  113. package/dist/cli/commands/gateway.js +9 -1
  114. package/dist/cli/commands/gateway.js.map +1 -1
  115. package/dist/cli/commands/models.js +35 -29
  116. package/dist/cli/commands/models.js.map +1 -1
  117. package/dist/cli/commands/onboard.js +166 -115
  118. package/dist/cli/commands/onboard.js.map +1 -1
  119. package/dist/cli/commands/setup.js +123 -0
  120. package/dist/cli/commands/setup.js.map +1 -0
  121. package/dist/cli/commands/skills.js +6 -6
  122. package/dist/cli/commands/skills.js.map +1 -1
  123. package/dist/cli/index.d.ts +1 -1
  124. package/dist/cli/index.js +1 -1
  125. package/dist/cli/index.js.map +1 -1
  126. package/dist/cli/templates.d.ts +2 -0
  127. package/dist/cli/templates.js +1 -1
  128. package/dist/cli/templates.js.map +1 -1
  129. package/dist/config/defaults.d.ts +19 -0
  130. package/dist/config/defaults.js +168 -0
  131. package/dist/config/defaults.js.map +1 -0
  132. package/dist/config/index.d.ts +5 -0
  133. package/dist/config/index.js +4 -0
  134. package/dist/config/index.js.map +1 -1
  135. package/dist/config/integration.d.ts +12 -0
  136. package/dist/config/integration.js +14 -0
  137. package/dist/config/integration.js.map +1 -0
  138. package/dist/config/models-json.d.ts +454 -0
  139. package/dist/config/models-json.js +323 -0
  140. package/dist/config/models-json.js.map +1 -0
  141. package/dist/config/paths.d.ts +2 -0
  142. package/dist/config/paths.js +4 -0
  143. package/dist/config/paths.js.map +1 -1
  144. package/dist/config/reload.d.ts +1 -1
  145. package/dist/config/reload.js +3 -3
  146. package/dist/config/reload.js.map +1 -1
  147. package/dist/config/resolve-config-value.d.ts +36 -0
  148. package/dist/config/resolve-config-value.js +218 -0
  149. package/dist/config/resolve-config-value.js.map +1 -0
  150. package/dist/config/rules.js +3 -2
  151. package/dist/config/rules.js.map +1 -1
  152. package/dist/config/schema.d.ts +17 -884
  153. package/dist/config/schema.js +36 -312
  154. package/dist/config/schema.js.map +1 -1
  155. package/dist/config/types.models.d.ts +54 -0
  156. package/dist/config/types.models.js +2 -0
  157. package/dist/config/types.models.js.map +1 -0
  158. package/dist/cron/validation.d.ts +4 -4
  159. package/dist/gateway/hono/app.js +232 -78
  160. package/dist/gateway/hono/app.js.map +1 -1
  161. package/dist/gateway/hono/oauth-async.d.ts +14 -0
  162. package/dist/gateway/hono/oauth-async.js +285 -0
  163. package/dist/gateway/hono/oauth-async.js.map +1 -0
  164. package/dist/gateway/hono/oauth.d.ts +9 -0
  165. package/dist/gateway/hono/oauth.js +157 -0
  166. package/dist/gateway/hono/oauth.js.map +1 -0
  167. package/dist/gateway/hono/sse.js +5 -2
  168. package/dist/gateway/hono/sse.js.map +1 -1
  169. package/dist/gateway/process-manager.js +12 -10
  170. package/dist/gateway/process-manager.js.map +1 -1
  171. package/dist/gateway/service.d.ts +6 -2
  172. package/dist/gateway/service.js +20 -6
  173. package/dist/gateway/service.js.map +1 -1
  174. package/dist/gateway/static/root/assets/flow-BqIEBwW6.js +2 -0
  175. package/dist/gateway/static/root/assets/flow-BqIEBwW6.js.map +1 -0
  176. package/dist/gateway/static/root/assets/main-Br2tw-87.js +5168 -0
  177. package/dist/gateway/static/root/assets/main-Br2tw-87.js.map +1 -0
  178. package/dist/gateway/static/root/assets/main-DwlbPf8Z.css +1 -0
  179. package/dist/gateway/static/root/index.html +2 -2
  180. package/dist/plugins/index.d.ts +0 -2
  181. package/dist/plugins/index.js +0 -2
  182. package/dist/plugins/index.js.map +1 -1
  183. package/dist/plugins/types.d.ts +0 -2
  184. package/dist/plugins/types.js +0 -2
  185. package/dist/plugins/types.js.map +1 -1
  186. package/dist/providers/index.d.ts +50 -22
  187. package/dist/providers/index.js +276 -50
  188. package/dist/providers/index.js.map +1 -1
  189. package/dist/providers/model-registry.d.ts +84 -0
  190. package/dist/providers/model-registry.js +385 -0
  191. package/dist/providers/model-registry.js.map +1 -0
  192. package/dist/types/providers.d.ts +2 -63
  193. package/dist/types/providers.js +1 -1
  194. package/dist/utils/__tests__/frontmatter.test.d.ts +4 -0
  195. package/dist/utils/__tests__/frontmatter.test.js +150 -0
  196. package/dist/utils/__tests__/frontmatter.test.js.map +1 -0
  197. package/dist/utils/diagnostic-events.d.ts +230 -0
  198. package/dist/utils/diagnostic-events.js +189 -0
  199. package/dist/utils/diagnostic-events.js.map +1 -0
  200. package/dist/utils/frontmatter.d.ts +0 -1
  201. package/dist/utils/frontmatter.js +15 -79
  202. package/dist/utils/frontmatter.js.map +1 -1
  203. package/dist/utils/log-stream.d.ts +95 -0
  204. package/dist/utils/log-stream.js +229 -0
  205. package/dist/utils/log-stream.js.map +1 -0
  206. package/dist/utils/logger.d.ts +5 -0
  207. package/dist/utils/logger.js +25 -0
  208. package/dist/utils/logger.js.map +1 -1
  209. package/dist/utils/redact.d.ts +73 -0
  210. package/dist/utils/redact.js +245 -0
  211. package/dist/utils/redact.js.map +1 -0
  212. package/package.json +6 -4
  213. package/skills/find-skills/SKILL.md +0 -9
  214. package/dist/__tests__/core.test.js +0 -72
  215. package/dist/__tests__/core.test.js.map +0 -1
  216. package/dist/agent/model-manager.js.map +0 -1
  217. package/dist/cli/commands/configure.d.ts +0 -1
  218. package/dist/cli/commands/configure.js +0 -173
  219. package/dist/cli/commands/configure.js.map +0 -1
  220. package/dist/cli/commands/gateway-daemon.d.ts +0 -1
  221. package/dist/cli/commands/gateway-daemon.js +0 -141
  222. package/dist/cli/commands/gateway-daemon.js.map +0 -1
  223. package/dist/config/__tests__/diff.test.d.ts +0 -1
  224. package/dist/config/__tests__/diff.test.js +0 -192
  225. package/dist/config/__tests__/diff.test.js.map +0 -1
  226. package/dist/config/__tests__/loader.test.d.ts +0 -1
  227. package/dist/config/__tests__/loader.test.js +0 -356
  228. package/dist/config/__tests__/loader.test.js.map +0 -1
  229. package/dist/config/__tests__/paths.test.d.ts +0 -1
  230. package/dist/config/__tests__/paths.test.js +0 -192
  231. package/dist/config/__tests__/paths.test.js.map +0 -1
  232. package/dist/config/__tests__/reload.test.d.ts +0 -1
  233. package/dist/config/__tests__/reload.test.js +0 -374
  234. package/dist/config/__tests__/reload.test.js.map +0 -1
  235. package/dist/config/__tests__/rules.test.d.ts +0 -1
  236. package/dist/config/__tests__/rules.test.js +0 -204
  237. package/dist/config/__tests__/rules.test.js.map +0 -1
  238. package/dist/config/__tests__/schema.test.d.ts +0 -1
  239. package/dist/config/__tests__/schema.test.js +0 -672
  240. package/dist/config/__tests__/schema.test.js.map +0 -1
  241. package/dist/daemon/background-start.d.ts +0 -33
  242. package/dist/daemon/background-start.js +0 -89
  243. package/dist/daemon/background-start.js.map +0 -1
  244. package/dist/daemon/gateway-manager.d.ts +0 -87
  245. package/dist/daemon/gateway-manager.js +0 -324
  246. package/dist/daemon/gateway-manager.js.map +0 -1
  247. package/dist/daemon/index.d.ts +0 -5
  248. package/dist/daemon/index.js +0 -6
  249. package/dist/daemon/index.js.map +0 -1
  250. package/dist/gateway/static/root/assets/main-DevbZW9K.js +0 -2227
  251. package/dist/gateway/static/root/assets/main-DevbZW9K.js.map +0 -1
  252. package/dist/gateway/static/root/assets/main-DxZg1Nmz.css +0 -1
  253. package/dist/providers/__tests__/registry.test.d.ts +0 -1
  254. package/dist/providers/__tests__/registry.test.js +0 -110
  255. package/dist/providers/__tests__/registry.test.js.map +0 -1
  256. package/dist/providers/api-strategies.d.ts +0 -15
  257. package/dist/providers/api-strategies.js +0 -96
  258. package/dist/providers/api-strategies.js.map +0 -1
  259. package/dist/providers/auto-discovery.d.ts +0 -84
  260. package/dist/providers/auto-discovery.js +0 -236
  261. package/dist/providers/auto-discovery.js.map +0 -1
  262. package/dist/providers/config.d.ts +0 -25
  263. package/dist/providers/config.js +0 -42
  264. package/dist/providers/config.js.map +0 -1
  265. package/dist/providers/model-catalog.d.ts +0 -205
  266. package/dist/providers/model-catalog.js +0 -1071
  267. package/dist/providers/model-catalog.js.map +0 -1
  268. package/dist/providers/models-dev-data.d.ts +0 -11
  269. package/dist/providers/models-dev-data.js +0 -1035
  270. package/dist/providers/models-dev-data.js.map +0 -1
  271. package/dist/providers/models-dev.d.ts +0 -30
  272. package/dist/providers/models-dev.js +0 -42
  273. package/dist/providers/models-dev.js.map +0 -1
  274. package/dist/providers/pi-ai.d.ts +0 -62
  275. package/dist/providers/pi-ai.js +0 -221
  276. package/dist/providers/pi-ai.js.map +0 -1
  277. package/dist/providers/provider-catalog.d.ts +0 -173
  278. package/dist/providers/provider-catalog.js +0 -834
  279. package/dist/providers/provider-catalog.js.map +0 -1
  280. package/dist/providers/registry.d.ts +0 -155
  281. package/dist/providers/registry.js +0 -524
  282. package/dist/providers/registry.js.map +0 -1
  283. package/dist/providers/types.d.ts +0 -95
  284. package/dist/providers/types.js +0 -7
  285. package/dist/providers/types.js.map +0 -1
  286. package/dist/session/chat-manager.d.ts +0 -49
  287. package/dist/session/chat-manager.js +0 -167
  288. package/dist/session/chat-manager.js.map +0 -1
  289. package/dist/session/chat-types.d.ts +0 -53
  290. package/dist/session/chat-types.js +0 -63
  291. package/dist/session/chat-types.js.map +0 -1
  292. /package/dist/{__tests__/core.test.d.ts → cli/commands/setup.d.ts} +0 -0
@@ -1,192 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { XOPCBOT_DIR, DEFAULT_BASE_DIR, DEFAULT_PATHS, getDefaultConfigPath, getDefaultWorkspacePath, getBaseDir, getGlobalPluginsDir, getWorkspacePluginsDir, getBundledPluginsDir, getBundledSkillsDir, resolvePluginSdkPath, } from '../paths.js';
3
- describe('constants', () => {
4
- it('should define XOPCBOT_DIR', () => {
5
- expect(XOPCBOT_DIR).toBe('.xopcbot');
6
- });
7
- it('should define DEFAULT_BASE_DIR', () => {
8
- expect(DEFAULT_BASE_DIR).toBeDefined();
9
- expect(DEFAULT_BASE_DIR).toContain(XOPCBOT_DIR);
10
- });
11
- });
12
- describe('DEFAULT_PATHS', () => {
13
- it('should define config path', () => {
14
- expect(DEFAULT_PATHS.config).toBeDefined();
15
- expect(DEFAULT_PATHS.config).toContain('config.json');
16
- });
17
- it('should define workspace path', () => {
18
- expect(DEFAULT_PATHS.workspace).toBeDefined();
19
- expect(DEFAULT_PATHS.workspace).toContain('workspace');
20
- });
21
- it('should define sessions path', () => {
22
- expect(DEFAULT_PATHS.sessions).toBeDefined();
23
- expect(DEFAULT_PATHS.sessions).toContain('sessions');
24
- });
25
- it('should define plugins path', () => {
26
- expect(DEFAULT_PATHS.plugins).toBeDefined();
27
- expect(DEFAULT_PATHS.plugins).toContain('.plugins');
28
- });
29
- it('should define global plugins path', () => {
30
- expect(DEFAULT_PATHS.globalPlugins).toBeDefined();
31
- expect(DEFAULT_PATHS.globalPlugins).toContain('plugins');
32
- });
33
- it('should define memory path', () => {
34
- expect(DEFAULT_PATHS.memory).toBeDefined();
35
- expect(DEFAULT_PATHS.memory).toContain('memory');
36
- });
37
- it('should define cron jobs path', () => {
38
- expect(DEFAULT_PATHS.cronJobs).toBeDefined();
39
- expect(DEFAULT_PATHS.cronJobs).toContain('cron-jobs.json');
40
- });
41
- });
42
- describe('getDefaultConfigPath', () => {
43
- beforeEach(() => {
44
- delete process.env.XOPCBOT_CONFIG;
45
- });
46
- afterEach(() => {
47
- delete process.env.XOPCBOT_CONFIG;
48
- });
49
- it('should return default path when env var not set', () => {
50
- const path = getDefaultConfigPath();
51
- expect(path).toBe(DEFAULT_PATHS.config);
52
- });
53
- it('should return env var path when set', () => {
54
- process.env.XOPCBOT_CONFIG = '/custom/config.json';
55
- const path = getDefaultConfigPath();
56
- expect(path).toBe('/custom/config.json');
57
- });
58
- it('should handle empty env var', () => {
59
- process.env.XOPCBOT_CONFIG = '';
60
- const path = getDefaultConfigPath();
61
- // Empty string is falsy, so should fall back to default
62
- expect(path).toBe(DEFAULT_PATHS.config);
63
- });
64
- });
65
- describe('getDefaultWorkspacePath', () => {
66
- beforeEach(() => {
67
- delete process.env.XOPCBOT_WORKSPACE;
68
- });
69
- afterEach(() => {
70
- delete process.env.XOPCBOT_WORKSPACE;
71
- });
72
- it('should return default path when env var not set', () => {
73
- const path = getDefaultWorkspacePath();
74
- expect(path).toBe(DEFAULT_PATHS.workspace);
75
- });
76
- it('should return env var path when set', () => {
77
- process.env.XOPCBOT_WORKSPACE = '/custom/workspace';
78
- const path = getDefaultWorkspacePath();
79
- expect(path).toBe('/custom/workspace');
80
- });
81
- });
82
- describe('getBaseDir', () => {
83
- it('should return DEFAULT_BASE_DIR', () => {
84
- expect(getBaseDir()).toBe(DEFAULT_BASE_DIR);
85
- });
86
- });
87
- describe('getGlobalPluginsDir', () => {
88
- it('should return global plugins directory', () => {
89
- const dir = getGlobalPluginsDir();
90
- expect(dir).toBe(DEFAULT_PATHS.globalPlugins);
91
- });
92
- it('should be under xopcbot dir', () => {
93
- const dir = getGlobalPluginsDir();
94
- expect(dir).toContain(XOPCBOT_DIR);
95
- });
96
- });
97
- describe('getWorkspacePluginsDir', () => {
98
- it('should return default workspace plugins dir', () => {
99
- const dir = getWorkspacePluginsDir();
100
- expect(dir).toContain('.plugins');
101
- });
102
- it('should use provided workspace path', () => {
103
- const customWorkspace = '/custom/workspace';
104
- const dir = getWorkspacePluginsDir(customWorkspace);
105
- expect(dir).toBe('/custom/workspace/.plugins');
106
- });
107
- it('should use default workspace when not provided', () => {
108
- const dir = getWorkspacePluginsDir();
109
- expect(dir).toContain(DEFAULT_PATHS.workspace);
110
- expect(dir).toContain('.plugins');
111
- });
112
- });
113
- describe('getBundledPluginsDir', () => {
114
- it('should return a path or null', () => {
115
- const dir = getBundledPluginsDir();
116
- // Can be a string path or null if resolution fails
117
- if (dir !== null) {
118
- expect(typeof dir).toBe('string');
119
- expect(dir).toContain('plugins');
120
- }
121
- });
122
- });
123
- describe('getBundledSkillsDir', () => {
124
- it('should return a path or null', () => {
125
- const dir = getBundledSkillsDir();
126
- // Can be a string path or null if resolution fails
127
- if (dir !== null) {
128
- expect(typeof dir).toBe('string');
129
- expect(dir).toContain('skills');
130
- }
131
- });
132
- });
133
- describe('resolvePluginSdkPath', () => {
134
- it('should return a path or null', () => {
135
- const path = resolvePluginSdkPath();
136
- // Can be a string path or null if resolution fails
137
- if (path !== null) {
138
- expect(typeof path).toBe('string');
139
- expect(path).toContain('plugin-sdk');
140
- expect(path).toContain('index.ts');
141
- }
142
- });
143
- });
144
- describe('path consistency', () => {
145
- it('should have consistent base directory across all paths', () => {
146
- const baseDir = getBaseDir();
147
- expect(DEFAULT_PATHS.config).toContain(baseDir);
148
- expect(DEFAULT_PATHS.workspace).toContain(baseDir);
149
- expect(DEFAULT_PATHS.sessions).toContain(baseDir);
150
- expect(DEFAULT_PATHS.plugins).toContain(baseDir);
151
- expect(DEFAULT_PATHS.globalPlugins).toContain(baseDir);
152
- expect(DEFAULT_PATHS.memory).toContain(baseDir);
153
- });
154
- it('should have unique paths for different purposes', () => {
155
- const paths = [
156
- DEFAULT_PATHS.config,
157
- DEFAULT_PATHS.workspace,
158
- DEFAULT_PATHS.sessions,
159
- DEFAULT_PATHS.plugins,
160
- DEFAULT_PATHS.globalPlugins,
161
- DEFAULT_PATHS.memory,
162
- DEFAULT_PATHS.cronJobs,
163
- ];
164
- const uniquePaths = new Set(paths);
165
- expect(paths.length).toBe(uniquePaths.size);
166
- });
167
- });
168
- describe('environment variable precedence', () => {
169
- beforeEach(() => {
170
- delete process.env.XOPCBOT_CONFIG;
171
- delete process.env.XOPCBOT_WORKSPACE;
172
- });
173
- afterEach(() => {
174
- delete process.env.XOPCBOT_CONFIG;
175
- delete process.env.XOPCBOT_WORKSPACE;
176
- });
177
- it('should prioritize XOPCBOT_CONFIG over default', () => {
178
- const defaultPath = getDefaultConfigPath();
179
- process.env.XOPCBOT_CONFIG = '/env/config.json';
180
- const envPath = getDefaultConfigPath();
181
- expect(envPath).not.toBe(defaultPath);
182
- expect(envPath).toBe('/env/config.json');
183
- });
184
- it('should prioritize XOPCBOT_WORKSPACE over default', () => {
185
- const defaultPath = getDefaultWorkspacePath();
186
- process.env.XOPCBOT_WORKSPACE = '/env/workspace';
187
- const envPath = getDefaultWorkspacePath();
188
- expect(envPath).not.toBe(defaultPath);
189
- expect(envPath).toBe('/env/workspace');
190
- });
191
- });
192
- //# sourceMappingURL=paths.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../src/config/__tests__/paths.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,374 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import { ConfigHotReloader } from '../reload.js';
3
- // Mock fs watch
4
- vi.mock('fs', async (importOriginal) => {
5
- const actual = await importOriginal();
6
- return {
7
- ...actual,
8
- watch: vi.fn(),
9
- };
10
- });
11
- // Mock logger
12
- vi.mock('../utils/logger.js', () => ({
13
- logger: {
14
- info: vi.fn(),
15
- error: vi.fn(),
16
- debug: vi.fn(),
17
- },
18
- }));
19
- // Mock loadConfig
20
- vi.mock('../loader.js', () => ({
21
- loadConfig: vi.fn(),
22
- }));
23
- import { watch } from 'fs';
24
- import { loadConfig } from '../loader.js';
25
- describe('ConfigHotReloader', () => {
26
- const mockConfigPath = '/test/config.json';
27
- const mockInitialConfig = {
28
- agents: {
29
- defaults: {
30
- workspace: '~/.xopcbot/workspace',
31
- model: 'anthropic/claude-sonnet-4-5',
32
- maxTokens: 8192,
33
- temperature: 0.7,
34
- maxToolIterations: 20,
35
- },
36
- },
37
- channels: {
38
- telegram: {
39
- enabled: false,
40
- token: '',
41
- allowFrom: [],
42
- debug: false,
43
- dmPolicy: 'pairing',
44
- groupPolicy: 'open',
45
- },
46
- whatsapp: {
47
- enabled: false,
48
- bridgeUrl: 'ws://localhost:3001',
49
- allowFrom: [],
50
- },
51
- },
52
- providers: {
53
- openai: { apiKey: '' },
54
- anthropic: { apiKey: '' },
55
- ollama: {
56
- enabled: true,
57
- baseUrl: 'http://127.0.0.1:11434/v1',
58
- autoDiscovery: true,
59
- },
60
- },
61
- gateway: {
62
- host: '0.0.0.0',
63
- port: 18790,
64
- heartbeat: {
65
- enabled: true,
66
- intervalMs: 60000,
67
- },
68
- maxSseConnections: 100,
69
- corsOrigins: ['*'],
70
- },
71
- tools: {
72
- web: {
73
- search: {
74
- apiKey: '',
75
- maxResults: 5,
76
- },
77
- },
78
- },
79
- cron: {
80
- enabled: true,
81
- maxConcurrentJobs: 5,
82
- defaultTimezone: 'UTC',
83
- historyRetentionDays: 7,
84
- enableMetrics: true,
85
- },
86
- plugins: {},
87
- modelsDev: {
88
- enabled: true,
89
- },
90
- };
91
- const mockCallbacks = {
92
- onProvidersReload: vi.fn(),
93
- onAgentDefaultsReload: vi.fn(),
94
- onChannelsReload: vi.fn(),
95
- onCronReload: vi.fn(),
96
- onHeartbeatReload: vi.fn(),
97
- onToolsReload: vi.fn(),
98
- onWebSearchReload: vi.fn(),
99
- onFullRestart: vi.fn(),
100
- };
101
- beforeEach(() => {
102
- vi.clearAllMocks();
103
- });
104
- afterEach(async () => {
105
- // Clean up any running reloader
106
- });
107
- describe('constructor', () => {
108
- it('should create instance with default options', () => {
109
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
110
- expect(reloader.isEnabled()).toBe(true);
111
- expect(reloader.getConfig()).toBe(mockInitialConfig);
112
- });
113
- it('should create instance with custom options', () => {
114
- const options = {
115
- debounceMs: 500,
116
- enabled: false,
117
- };
118
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks, options);
119
- expect(reloader.isEnabled()).toBe(false);
120
- });
121
- });
122
- describe('start', () => {
123
- it('should not start watcher when disabled', () => {
124
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks, { enabled: false, debounceMs: 300 });
125
- reloader.start();
126
- expect(watch).not.toHaveBeenCalled();
127
- });
128
- it('should start watcher when enabled', () => {
129
- const mockWatcher = {
130
- close: vi.fn(),
131
- };
132
- vi.mocked(watch).mockReturnValue(mockWatcher);
133
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks, { enabled: true, debounceMs: 300 });
134
- reloader.start();
135
- expect(watch).toHaveBeenCalledWith(mockConfigPath, expect.any(Function));
136
- });
137
- it('should handle watcher setup errors', () => {
138
- vi.mocked(watch).mockImplementation(() => {
139
- throw new Error('Watch failed');
140
- });
141
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks, { enabled: true, debounceMs: 300 });
142
- expect(() => reloader.start()).not.toThrow();
143
- });
144
- });
145
- describe('stop', () => {
146
- it('should close watcher', async () => {
147
- const mockWatcher = {
148
- close: vi.fn(),
149
- };
150
- vi.mocked(watch).mockReturnValue(mockWatcher);
151
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
152
- reloader.start();
153
- await reloader.stop();
154
- expect(mockWatcher.close).toHaveBeenCalled();
155
- });
156
- it('should clear debounce timer', async () => {
157
- const mockWatcher = {
158
- close: vi.fn(),
159
- };
160
- vi.mocked(watch).mockReturnValue(mockWatcher);
161
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
162
- reloader.start();
163
- // Trigger a change to start debounce timer
164
- const watcherCallback = vi.mocked(watch).mock.calls[0][1];
165
- watcherCallback('change', 'config.json');
166
- await reloader.stop();
167
- expect(mockWatcher.close).toHaveBeenCalled();
168
- });
169
- it('should handle stop when not started', async () => {
170
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
171
- await expect(reloader.stop()).resolves.not.toThrow();
172
- });
173
- });
174
- describe('reload', () => {
175
- it('should successfully reload config with no changes', async () => {
176
- vi.mocked(loadConfig).mockReturnValue(mockInitialConfig);
177
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
178
- const result = await reloader.reload();
179
- expect(result.success).toBe(true);
180
- expect(result.plan).toBeUndefined();
181
- });
182
- it('should detect and apply provider changes', async () => {
183
- const newConfig = {
184
- ...mockInitialConfig,
185
- providers: {
186
- ...mockInitialConfig.providers,
187
- openai: { apiKey: 'new-key' },
188
- },
189
- };
190
- vi.mocked(loadConfig).mockReturnValue(newConfig);
191
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
192
- const result = await reloader.reload();
193
- expect(result.success).toBe(true);
194
- expect(result.plan).toBeDefined();
195
- expect(mockCallbacks.onProvidersReload).toHaveBeenCalledWith(newConfig);
196
- });
197
- it('should detect and apply agent defaults changes', async () => {
198
- const newConfig = {
199
- ...mockInitialConfig,
200
- agents: {
201
- defaults: {
202
- ...mockInitialConfig.agents.defaults,
203
- model: 'openai/gpt-4o',
204
- },
205
- },
206
- };
207
- vi.mocked(loadConfig).mockReturnValue(newConfig);
208
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
209
- const result = await reloader.reload();
210
- expect(result.success).toBe(true);
211
- expect(mockCallbacks.onAgentDefaultsReload).toHaveBeenCalledWith(newConfig);
212
- });
213
- it('should detect and apply channel changes', async () => {
214
- const newConfig = {
215
- ...mockInitialConfig,
216
- channels: {
217
- ...mockInitialConfig.channels,
218
- telegram: {
219
- ...mockInitialConfig.channels.telegram,
220
- enabled: true,
221
- },
222
- },
223
- };
224
- vi.mocked(loadConfig).mockReturnValue(newConfig);
225
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
226
- const result = await reloader.reload();
227
- expect(result.success).toBe(true);
228
- expect(mockCallbacks.onChannelsReload).toHaveBeenCalledWith(newConfig);
229
- });
230
- it('should trigger full restart for gateway changes', async () => {
231
- const newConfig = {
232
- ...mockInitialConfig,
233
- gateway: {
234
- ...mockInitialConfig.gateway,
235
- port: 9999,
236
- },
237
- };
238
- vi.mocked(loadConfig).mockReturnValue(newConfig);
239
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
240
- const result = await reloader.reload();
241
- expect(result.success).toBe(true);
242
- expect(mockCallbacks.onFullRestart).toHaveBeenCalledWith(newConfig);
243
- // Should not call hot reload callbacks when restart is required
244
- expect(mockCallbacks.onProvidersReload).not.toHaveBeenCalled();
245
- });
246
- it('should handle reload errors gracefully', async () => {
247
- vi.mocked(loadConfig).mockImplementation(() => {
248
- throw new Error('Failed to load config');
249
- });
250
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
251
- const result = await reloader.reload();
252
- expect(result.success).toBe(false);
253
- expect(result.error).toBeDefined();
254
- });
255
- it('should update current config after successful reload', async () => {
256
- const newConfig = {
257
- ...mockInitialConfig,
258
- providers: {
259
- ...mockInitialConfig.providers,
260
- openai: { apiKey: 'new-key' },
261
- },
262
- };
263
- vi.mocked(loadConfig).mockReturnValue(newConfig);
264
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
265
- await reloader.reload();
266
- expect(reloader.getConfig()).toBe(newConfig);
267
- });
268
- });
269
- describe('scheduleReload', () => {
270
- it('should debounce multiple rapid calls', async () => {
271
- vi.useFakeTimers();
272
- const newConfig = {
273
- ...mockInitialConfig,
274
- providers: {
275
- ...mockInitialConfig.providers,
276
- openai: { apiKey: 'new-key' },
277
- },
278
- };
279
- vi.mocked(loadConfig).mockReturnValue(newConfig);
280
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks, { enabled: true, debounceMs: 100 });
281
- // Manually call scheduleReload multiple times
282
- reloader.scheduleReload();
283
- reloader.scheduleReload();
284
- reloader.scheduleReload();
285
- // Should only have one pending timer
286
- await vi.advanceTimersByTimeAsync(100);
287
- expect(mockCallbacks.onProvidersReload).toHaveBeenCalledTimes(1);
288
- vi.useRealTimers();
289
- });
290
- });
291
- describe('triggerReload', () => {
292
- it('should manually trigger reload', async () => {
293
- const newConfig = {
294
- ...mockInitialConfig,
295
- providers: {
296
- ...mockInitialConfig.providers,
297
- openai: { apiKey: 'manual-key' },
298
- },
299
- };
300
- vi.mocked(loadConfig).mockReturnValue(newConfig);
301
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
302
- const result = await reloader.triggerReload();
303
- expect(result.success).toBe(true);
304
- expect(mockCallbacks.onProvidersReload).toHaveBeenCalledWith(newConfig);
305
- });
306
- });
307
- describe('applyHotPath', () => {
308
- it('should call onCronReload for cron paths', async () => {
309
- const newConfig = {
310
- ...mockInitialConfig,
311
- cron: {
312
- ...mockInitialConfig.cron,
313
- enabled: false,
314
- },
315
- };
316
- vi.mocked(loadConfig).mockReturnValue(newConfig);
317
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
318
- await reloader.reload();
319
- expect(mockCallbacks.onCronReload).toHaveBeenCalledWith(newConfig);
320
- });
321
- it('should call onToolsReload for tools paths', async () => {
322
- const newConfig = {
323
- ...mockInitialConfig,
324
- tools: {
325
- web: {
326
- search: {
327
- apiKey: 'new-search-key',
328
- maxResults: 10,
329
- },
330
- },
331
- },
332
- };
333
- vi.mocked(loadConfig).mockReturnValue(newConfig);
334
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
335
- await reloader.reload();
336
- expect(mockCallbacks.onToolsReload).toHaveBeenCalledWith(newConfig);
337
- });
338
- it('should call onWebSearchReload for webTools paths', async () => {
339
- // Note: webTools path matching is for legacy compatibility
340
- // Current config uses tools.web.search structure
341
- const newConfig = {
342
- ...mockInitialConfig,
343
- tools: {
344
- web: {
345
- search: {
346
- apiKey: 'web-key',
347
- maxResults: 20,
348
- },
349
- },
350
- },
351
- };
352
- vi.mocked(loadConfig).mockReturnValue(newConfig);
353
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
354
- await reloader.reload();
355
- // tools.web changes trigger onToolsReload, which covers web search
356
- expect(mockCallbacks.onToolsReload).toHaveBeenCalledWith(newConfig);
357
- });
358
- });
359
- describe('getConfig', () => {
360
- it('should return current config', () => {
361
- const reloader = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks);
362
- expect(reloader.getConfig()).toBe(mockInitialConfig);
363
- });
364
- });
365
- describe('isEnabled', () => {
366
- it('should return enabled state', () => {
367
- const reloaderEnabled = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks, { enabled: true, debounceMs: 300 });
368
- expect(reloaderEnabled.isEnabled()).toBe(true);
369
- const reloaderDisabled = new ConfigHotReloader(mockConfigPath, mockInitialConfig, mockCallbacks, { enabled: false, debounceMs: 300 });
370
- expect(reloaderDisabled.isEnabled()).toBe(false);
371
- });
372
- });
373
- });
374
- //# sourceMappingURL=reload.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reload.test.js","sourceRoot":"","sources":["../../../src/config/__tests__/reload.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};