@chozzz/vargos 3.1.4 → 3.2.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 (300) hide show
  1. package/CONTRIBUTING.md +2 -3
  2. package/README.md +25 -34
  3. package/dist/.templates/agent/skills/skill-creator/SKILL.md +204 -32
  4. package/dist/.templates/workspace/AGENTS.md +32 -0
  5. package/dist/boot.d.ts +5 -0
  6. package/dist/boot.d.ts.map +1 -1
  7. package/dist/boot.js +62 -87
  8. package/dist/boot.js.map +1 -1
  9. package/dist/cli/channels.d.ts +11 -17
  10. package/dist/cli/channels.d.ts.map +1 -1
  11. package/dist/cli/channels.js +25 -76
  12. package/dist/cli/channels.js.map +1 -1
  13. package/dist/cli/chat.d.ts +6 -0
  14. package/dist/cli/chat.d.ts.map +1 -0
  15. package/dist/cli/chat.js +49 -0
  16. package/dist/cli/chat.js.map +1 -0
  17. package/dist/cli/onboard.d.ts.map +1 -1
  18. package/dist/cli/onboard.js +2 -8
  19. package/dist/cli/onboard.js.map +1 -1
  20. package/dist/cli.d.ts +9 -7
  21. package/dist/cli.d.ts.map +1 -1
  22. package/dist/cli.js +206 -264
  23. package/dist/cli.js.map +1 -1
  24. package/dist/core/bus.d.ts +32 -0
  25. package/dist/core/bus.d.ts.map +1 -0
  26. package/dist/core/bus.js +133 -0
  27. package/dist/core/bus.js.map +1 -0
  28. package/dist/core/cli.d.ts +38 -0
  29. package/dist/core/cli.d.ts.map +1 -0
  30. package/dist/core/cli.js +199 -0
  31. package/dist/core/cli.js.map +1 -0
  32. package/dist/core/errors.d.ts +21 -0
  33. package/dist/core/errors.d.ts.map +1 -0
  34. package/dist/core/errors.js +30 -0
  35. package/dist/core/errors.js.map +1 -0
  36. package/dist/core/loader.d.ts +31 -0
  37. package/dist/core/loader.d.ts.map +1 -0
  38. package/dist/core/loader.js +73 -0
  39. package/dist/core/loader.js.map +1 -0
  40. package/dist/core/local.d.ts +12 -0
  41. package/dist/core/local.d.ts.map +1 -0
  42. package/dist/core/local.js +23 -0
  43. package/dist/core/local.js.map +1 -0
  44. package/dist/core/rpc-server.d.ts +11 -0
  45. package/dist/core/rpc-server.d.ts.map +1 -0
  46. package/dist/core/rpc-server.js +69 -0
  47. package/dist/core/rpc-server.js.map +1 -0
  48. package/dist/core/services.d.ts +8 -0
  49. package/dist/core/services.d.ts.map +1 -0
  50. package/dist/core/services.js +33 -0
  51. package/dist/core/services.js.map +1 -0
  52. package/dist/core/types.d.ts +63 -0
  53. package/dist/core/types.d.ts.map +1 -0
  54. package/dist/core/types.js +2 -0
  55. package/dist/core/types.js.map +1 -0
  56. package/dist/edge/mcp/index.d.ts +11 -11
  57. package/dist/edge/mcp/index.d.ts.map +1 -1
  58. package/dist/edge/mcp/index.js +24 -28
  59. package/dist/edge/mcp/index.js.map +1 -1
  60. package/dist/edge/webhooks/index.d.ts +8 -14
  61. package/dist/edge/webhooks/index.d.ts.map +1 -1
  62. package/dist/edge/webhooks/index.js +140 -194
  63. package/dist/edge/webhooks/index.js.map +1 -1
  64. package/dist/lib/logger.d.ts +2 -3
  65. package/dist/lib/logger.d.ts.map +1 -1
  66. package/dist/lib/logger.js +1 -1
  67. package/dist/lib/logger.js.map +1 -1
  68. package/dist/lib/paginate.d.ts +5 -1
  69. package/dist/lib/paginate.d.ts.map +1 -1
  70. package/dist/lib/retry.js +1 -1
  71. package/dist/lib/retry.js.map +1 -1
  72. package/dist/lib/util.d.ts +16 -0
  73. package/dist/lib/util.d.ts.map +1 -0
  74. package/dist/lib/util.js +63 -0
  75. package/dist/lib/util.js.map +1 -0
  76. package/dist/scripts/verify-core.d.ts +8 -0
  77. package/dist/scripts/verify-core.d.ts.map +1 -0
  78. package/dist/scripts/verify-core.js +191 -0
  79. package/dist/scripts/verify-core.js.map +1 -0
  80. package/dist/services/agent/directives.d.ts +2 -0
  81. package/dist/services/agent/directives.d.ts.map +1 -1
  82. package/dist/services/agent/directives.js +16 -1
  83. package/dist/services/agent/directives.js.map +1 -1
  84. package/dist/services/agent/index.d.ts +34 -21
  85. package/dist/services/agent/index.d.ts.map +1 -1
  86. package/dist/services/agent/index.js +470 -468
  87. package/dist/services/agent/index.js.map +1 -1
  88. package/dist/services/agent/tools.d.ts +3 -3
  89. package/dist/services/agent/tools.d.ts.map +1 -1
  90. package/dist/services/agent/tools.js +11 -19
  91. package/dist/services/agent/tools.js.map +1 -1
  92. package/dist/services/agent/types.d.ts +1 -1
  93. package/dist/services/agent/types.d.ts.map +1 -1
  94. package/dist/services/{channels → channel}/base-adapter.d.ts +5 -6
  95. package/dist/services/channel/base-adapter.d.ts.map +1 -0
  96. package/dist/services/channel/base-adapter.js.map +1 -0
  97. package/dist/services/channel/debounce.d.ts.map +1 -0
  98. package/dist/services/channel/debounce.js.map +1 -0
  99. package/dist/services/channel/dedupe.d.ts.map +1 -0
  100. package/dist/services/channel/dedupe.js.map +1 -0
  101. package/dist/services/channel/delivery.d.ts.map +1 -0
  102. package/dist/services/{channels → channel}/delivery.js +1 -1
  103. package/dist/services/channel/delivery.js.map +1 -0
  104. package/dist/services/{channels → channel}/index.d.ts +14 -17
  105. package/dist/services/channel/index.d.ts.map +1 -0
  106. package/dist/services/channel/index.js +354 -0
  107. package/dist/services/channel/index.js.map +1 -0
  108. package/dist/services/channel/link-expand.d.ts.map +1 -0
  109. package/dist/services/channel/link-expand.js.map +1 -0
  110. package/dist/services/channel/media-paths.d.ts.map +1 -0
  111. package/dist/services/channel/media-paths.js.map +1 -0
  112. package/dist/services/{channels → channel}/pipeline.d.ts +1 -1
  113. package/dist/services/channel/pipeline.d.ts.map +1 -0
  114. package/dist/services/channel/pipeline.js.map +1 -0
  115. package/dist/services/channel/provider-loader.d.ts.map +1 -0
  116. package/dist/services/channel/provider-loader.js.map +1 -0
  117. package/dist/services/channel/providers/telegram/adapter.d.ts.map +1 -0
  118. package/dist/services/{channels → channel}/providers/telegram/adapter.js +1 -1
  119. package/dist/services/channel/providers/telegram/adapter.js.map +1 -0
  120. package/dist/services/channel/providers/telegram/index.d.ts.map +1 -0
  121. package/dist/services/channel/providers/telegram/index.js.map +1 -0
  122. package/dist/services/channel/providers/telegram/normalizer.d.ts.map +1 -0
  123. package/dist/services/channel/providers/telegram/normalizer.js.map +1 -0
  124. package/dist/services/channel/providers/telegram/types.d.ts.map +1 -0
  125. package/dist/services/channel/providers/telegram/types.js.map +1 -0
  126. package/dist/services/channel/providers/whatsapp/adapter.d.ts.map +1 -0
  127. package/dist/services/channel/providers/whatsapp/adapter.js.map +1 -0
  128. package/dist/services/channel/providers/whatsapp/index.d.ts.map +1 -0
  129. package/dist/services/channel/providers/whatsapp/index.js.map +1 -0
  130. package/dist/services/channel/providers/whatsapp/normalizer.d.ts.map +1 -0
  131. package/dist/services/channel/providers/whatsapp/normalizer.js.map +1 -0
  132. package/dist/services/channel/providers/whatsapp/session.d.ts.map +1 -0
  133. package/dist/services/channel/providers/whatsapp/session.js.map +1 -0
  134. package/dist/services/channel/providers/whatsapp/types.d.ts.map +1 -0
  135. package/dist/services/channel/providers/whatsapp/types.js.map +1 -0
  136. package/dist/services/channel/reconnect.d.ts.map +1 -0
  137. package/dist/services/channel/reconnect.js.map +1 -0
  138. package/dist/services/channel/status-reactions.d.ts.map +1 -0
  139. package/dist/services/channel/status-reactions.js.map +1 -0
  140. package/dist/services/{channels → channel}/types.d.ts +1 -1
  141. package/dist/services/channel/types.d.ts.map +1 -0
  142. package/dist/services/channel/types.js.map +1 -0
  143. package/dist/services/channel/typing-state.d.ts.map +1 -0
  144. package/dist/services/channel/typing-state.js.map +1 -0
  145. package/dist/services/config/index.d.ts +45 -46
  146. package/dist/services/config/index.d.ts.map +1 -1
  147. package/dist/services/config/index.js +89 -182
  148. package/dist/services/config/index.js.map +1 -1
  149. package/dist/services/config/schemas/cron.d.ts +3 -3
  150. package/dist/services/config/schemas/providers.d.ts +12 -12
  151. package/dist/services/config/schemas/webhooks.d.ts +2 -2
  152. package/dist/services/cron/index.d.ts +16 -19
  153. package/dist/services/cron/index.d.ts.map +1 -1
  154. package/dist/services/cron/index.js +340 -396
  155. package/dist/services/cron/index.js.map +1 -1
  156. package/dist/services/log/index.d.ts +9 -8
  157. package/dist/services/log/index.d.ts.map +1 -1
  158. package/dist/services/log/index.js +71 -123
  159. package/dist/services/log/index.js.map +1 -1
  160. package/dist/services/{mcp-client → mcp}/index.d.ts +9 -11
  161. package/dist/services/mcp/index.d.ts.map +1 -0
  162. package/dist/services/{mcp-client → mcp}/index.js +19 -35
  163. package/dist/services/mcp/index.js.map +1 -0
  164. package/dist/services/media/index.d.ts +9 -13
  165. package/dist/services/media/index.d.ts.map +1 -1
  166. package/dist/services/media/index.js +53 -105
  167. package/dist/services/media/index.js.map +1 -1
  168. package/dist/services/memory/index.d.ts +12 -18
  169. package/dist/services/memory/index.d.ts.map +1 -1
  170. package/dist/services/memory/index.js +70 -132
  171. package/dist/services/memory/index.js.map +1 -1
  172. package/dist/services/web/index.d.ts +7 -7
  173. package/dist/services/web/index.d.ts.map +1 -1
  174. package/dist/services/web/index.js +41 -86
  175. package/dist/services/web/index.js.map +1 -1
  176. package/package.json +3 -2
  177. package/dist/gateway/bus.d.ts +0 -50
  178. package/dist/gateway/bus.d.ts.map +0 -1
  179. package/dist/gateway/bus.js +0 -2
  180. package/dist/gateway/bus.js.map +0 -1
  181. package/dist/gateway/decorators.d.ts +0 -40
  182. package/dist/gateway/decorators.d.ts.map +0 -1
  183. package/dist/gateway/decorators.js +0 -43
  184. package/dist/gateway/decorators.js.map +0 -1
  185. package/dist/gateway/emitter.d.ts +0 -52
  186. package/dist/gateway/emitter.d.ts.map +0 -1
  187. package/dist/gateway/emitter.js +0 -304
  188. package/dist/gateway/emitter.js.map +0 -1
  189. package/dist/gateway/events.d.ts +0 -314
  190. package/dist/gateway/events.d.ts.map +0 -1
  191. package/dist/gateway/events.js +0 -7
  192. package/dist/gateway/events.js.map +0 -1
  193. package/dist/gateway/tcp-server.d.ts +0 -7
  194. package/dist/gateway/tcp-server.d.ts.map +0 -1
  195. package/dist/gateway/tcp-server.js +0 -118
  196. package/dist/gateway/tcp-server.js.map +0 -1
  197. package/dist/lib/id.d.ts +0 -3
  198. package/dist/lib/id.d.ts.map +0 -1
  199. package/dist/lib/id.js +0 -5
  200. package/dist/lib/id.js.map +0 -1
  201. package/dist/lib/sleep.d.ts +0 -6
  202. package/dist/lib/sleep.d.ts.map +0 -1
  203. package/dist/lib/sleep.js +0 -22
  204. package/dist/lib/sleep.js.map +0 -1
  205. package/dist/lib/strip-markdown.d.ts +0 -7
  206. package/dist/lib/strip-markdown.d.ts.map +0 -1
  207. package/dist/lib/strip-markdown.js +0 -32
  208. package/dist/lib/strip-markdown.js.map +0 -1
  209. package/dist/lib/timeout.d.ts +0 -6
  210. package/dist/lib/timeout.d.ts.map +0 -1
  211. package/dist/lib/timeout.js +0 -11
  212. package/dist/lib/timeout.js.map +0 -1
  213. package/dist/lib/truncate.d.ts +0 -11
  214. package/dist/lib/truncate.d.ts.map +0 -1
  215. package/dist/lib/truncate.js +0 -17
  216. package/dist/lib/truncate.js.map +0 -1
  217. package/dist/services/channels/base-adapter.d.ts.map +0 -1
  218. package/dist/services/channels/base-adapter.js.map +0 -1
  219. package/dist/services/channels/debounce.d.ts.map +0 -1
  220. package/dist/services/channels/debounce.js.map +0 -1
  221. package/dist/services/channels/dedupe.d.ts.map +0 -1
  222. package/dist/services/channels/dedupe.js.map +0 -1
  223. package/dist/services/channels/delivery.d.ts.map +0 -1
  224. package/dist/services/channels/delivery.js.map +0 -1
  225. package/dist/services/channels/index.d.ts.map +0 -1
  226. package/dist/services/channels/index.js +0 -413
  227. package/dist/services/channels/index.js.map +0 -1
  228. package/dist/services/channels/link-expand.d.ts.map +0 -1
  229. package/dist/services/channels/link-expand.js.map +0 -1
  230. package/dist/services/channels/media-paths.d.ts.map +0 -1
  231. package/dist/services/channels/media-paths.js.map +0 -1
  232. package/dist/services/channels/pipeline.d.ts.map +0 -1
  233. package/dist/services/channels/pipeline.js.map +0 -1
  234. package/dist/services/channels/provider-loader.d.ts.map +0 -1
  235. package/dist/services/channels/provider-loader.js.map +0 -1
  236. package/dist/services/channels/providers/telegram/adapter.d.ts.map +0 -1
  237. package/dist/services/channels/providers/telegram/adapter.js.map +0 -1
  238. package/dist/services/channels/providers/telegram/index.d.ts.map +0 -1
  239. package/dist/services/channels/providers/telegram/index.js.map +0 -1
  240. package/dist/services/channels/providers/telegram/normalizer.d.ts.map +0 -1
  241. package/dist/services/channels/providers/telegram/normalizer.js.map +0 -1
  242. package/dist/services/channels/providers/telegram/types.d.ts.map +0 -1
  243. package/dist/services/channels/providers/telegram/types.js.map +0 -1
  244. package/dist/services/channels/providers/whatsapp/adapter.d.ts.map +0 -1
  245. package/dist/services/channels/providers/whatsapp/adapter.js.map +0 -1
  246. package/dist/services/channels/providers/whatsapp/index.d.ts.map +0 -1
  247. package/dist/services/channels/providers/whatsapp/index.js.map +0 -1
  248. package/dist/services/channels/providers/whatsapp/normalizer.d.ts.map +0 -1
  249. package/dist/services/channels/providers/whatsapp/normalizer.js.map +0 -1
  250. package/dist/services/channels/providers/whatsapp/session.d.ts.map +0 -1
  251. package/dist/services/channels/providers/whatsapp/session.js.map +0 -1
  252. package/dist/services/channels/providers/whatsapp/types.d.ts.map +0 -1
  253. package/dist/services/channels/providers/whatsapp/types.js.map +0 -1
  254. package/dist/services/channels/reconnect.d.ts.map +0 -1
  255. package/dist/services/channels/reconnect.js.map +0 -1
  256. package/dist/services/channels/status-reactions.d.ts.map +0 -1
  257. package/dist/services/channels/status-reactions.js.map +0 -1
  258. package/dist/services/channels/types.d.ts.map +0 -1
  259. package/dist/services/channels/types.js.map +0 -1
  260. package/dist/services/channels/typing-state.d.ts.map +0 -1
  261. package/dist/services/channels/typing-state.js.map +0 -1
  262. package/dist/services/mcp-client/index.d.ts.map +0 -1
  263. package/dist/services/mcp-client/index.js.map +0 -1
  264. /package/dist/services/{channels → channel}/base-adapter.js +0 -0
  265. /package/dist/services/{channels → channel}/debounce.d.ts +0 -0
  266. /package/dist/services/{channels → channel}/debounce.js +0 -0
  267. /package/dist/services/{channels → channel}/dedupe.d.ts +0 -0
  268. /package/dist/services/{channels → channel}/dedupe.js +0 -0
  269. /package/dist/services/{channels → channel}/delivery.d.ts +0 -0
  270. /package/dist/services/{channels → channel}/link-expand.d.ts +0 -0
  271. /package/dist/services/{channels → channel}/link-expand.js +0 -0
  272. /package/dist/services/{channels → channel}/media-paths.d.ts +0 -0
  273. /package/dist/services/{channels → channel}/media-paths.js +0 -0
  274. /package/dist/services/{channels → channel}/pipeline.js +0 -0
  275. /package/dist/services/{channels → channel}/provider-loader.d.ts +0 -0
  276. /package/dist/services/{channels → channel}/provider-loader.js +0 -0
  277. /package/dist/services/{channels → channel}/providers/telegram/adapter.d.ts +0 -0
  278. /package/dist/services/{channels → channel}/providers/telegram/index.d.ts +0 -0
  279. /package/dist/services/{channels → channel}/providers/telegram/index.js +0 -0
  280. /package/dist/services/{channels → channel}/providers/telegram/normalizer.d.ts +0 -0
  281. /package/dist/services/{channels → channel}/providers/telegram/normalizer.js +0 -0
  282. /package/dist/services/{channels → channel}/providers/telegram/types.d.ts +0 -0
  283. /package/dist/services/{channels → channel}/providers/telegram/types.js +0 -0
  284. /package/dist/services/{channels → channel}/providers/whatsapp/adapter.d.ts +0 -0
  285. /package/dist/services/{channels → channel}/providers/whatsapp/adapter.js +0 -0
  286. /package/dist/services/{channels → channel}/providers/whatsapp/index.d.ts +0 -0
  287. /package/dist/services/{channels → channel}/providers/whatsapp/index.js +0 -0
  288. /package/dist/services/{channels → channel}/providers/whatsapp/normalizer.d.ts +0 -0
  289. /package/dist/services/{channels → channel}/providers/whatsapp/normalizer.js +0 -0
  290. /package/dist/services/{channels → channel}/providers/whatsapp/session.d.ts +0 -0
  291. /package/dist/services/{channels → channel}/providers/whatsapp/session.js +0 -0
  292. /package/dist/services/{channels → channel}/providers/whatsapp/types.d.ts +0 -0
  293. /package/dist/services/{channels → channel}/providers/whatsapp/types.js +0 -0
  294. /package/dist/services/{channels → channel}/reconnect.d.ts +0 -0
  295. /package/dist/services/{channels → channel}/reconnect.js +0 -0
  296. /package/dist/services/{channels → channel}/status-reactions.d.ts +0 -0
  297. /package/dist/services/{channels → channel}/status-reactions.js +0 -0
  298. /package/dist/services/{channels → channel}/types.js +0 -0
  299. /package/dist/services/{channels → channel}/typing-state.d.ts +0 -0
  300. /package/dist/services/{channels → channel}/typing-state.js +0 -0
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Acceptance verification for the re-architected core. Loads real service modules
3
+ * from a temp dir through the actual ServiceLoader, exercises all three surfaces
4
+ * (CLI projection, agent-tool projection, JSON-RPC), reloads from disk, and checks
5
+ * bus semantics + dispose discipline. Run: pnpm tsx scripts/verify-core.ts
6
+ */
7
+ import { mkdtempSync, writeFileSync, rmSync } from 'node:fs';
8
+ import { tmpdir } from 'node:os';
9
+ import path from 'node:path';
10
+ import { createConnection } from 'node:net';
11
+ import { z } from 'zod';
12
+ import { EmitterBus } from '../core/bus.js';
13
+ import { ServiceLoader } from '../core/loader.js';
14
+ import { startRpcServer } from '../core/rpc-server.js';
15
+ import { buildParams, renderHelp, RpcClient } from '../core/cli.js';
16
+ import { bootLocal } from '../core/local.js';
17
+ import { MethodNotFoundError } from '../core/errors.js';
18
+ let pass = 0, fail = 0;
19
+ function ok(label, cond, detail = '') {
20
+ console.log(`${cond ? ' ✅' : ' ❌'} ${label}${detail ? ` — ${detail}` : ''}`);
21
+ if (cond)
22
+ pass++;
23
+ else
24
+ fail++;
25
+ }
26
+ const dir = mkdtempSync(path.join(tmpdir(), 'vargos-verify-'));
27
+ const g = globalThis;
28
+ g.__ticks = 0;
29
+ const channelV1 = `
30
+ export function createService() {
31
+ let timer;
32
+ return {
33
+ name: 'channel',
34
+ init(bus) {
35
+ bus.register('channel.send', {
36
+ description: 'Send a message via a channel',
37
+ schema: { safeParse: (p) => (p && typeof p.recipient === 'string' && typeof p.message === 'string')
38
+ ? { success: true, data: p }
39
+ : { success: false, error: { issues: [{ path: ['message'], message: 'Required' }] } } },
40
+ cli: { positional: ['recipient', 'message'] },
41
+ }, (p) => ({ sent: true, via: 'v1', to: p.recipient, text: p.message }));
42
+ timer = setInterval(() => { globalThis.__ticks++; }, 25);
43
+ },
44
+ dispose() { clearInterval(timer); },
45
+ };
46
+ }
47
+ `;
48
+ // v2: changed return value (D1), removed channel.send, added channel.ping (D3).
49
+ const channelV2 = `
50
+ export function createService() {
51
+ let timer;
52
+ return {
53
+ name: 'channel',
54
+ init(bus) {
55
+ bus.register('channel.ping', {
56
+ description: 'Ping',
57
+ schema: { safeParse: (p) => ({ success: true, data: p ?? {} }) },
58
+ }, () => ({ via: 'v2', pong: true }));
59
+ timer = setInterval(() => { globalThis.__ticks++; }, 25);
60
+ },
61
+ dispose() { clearInterval(timer); },
62
+ };
63
+ }
64
+ `;
65
+ const memory = `
66
+ export function createService() {
67
+ return {
68
+ name: 'memory',
69
+ init(bus) {
70
+ bus.register('memory.search', {
71
+ description: 'Search memory',
72
+ schema: { safeParse: (p) => (p && typeof p.query === 'string')
73
+ ? { success: true, data: p }
74
+ : { success: false, error: { issues: [{ path: ['query'], message: 'Required' }] } } },
75
+ cli: { positional: ['query'] },
76
+ }, (p) => [{ citation: 'MEMORY.md', content: 'found: ' + p.query }]);
77
+ },
78
+ dispose() {},
79
+ };
80
+ }
81
+ `;
82
+ const chanPath = path.join(dir, 'channel.mjs');
83
+ const memPath = path.join(dir, 'memory.mjs');
84
+ writeFileSync(chanPath, channelV1);
85
+ writeFileSync(memPath, memory);
86
+ const rpcCall = (port, body) => new Promise((resolve, reject) => {
87
+ const s = createConnection({ host: '127.0.0.1', port }, () => s.write(JSON.stringify(body) + '\n'));
88
+ let buf = '';
89
+ s.on('data', (d) => { buf += d; if (buf.includes('\n')) {
90
+ s.end();
91
+ resolve(JSON.parse(buf.split('\n')[0]));
92
+ } });
93
+ s.on('error', reject);
94
+ });
95
+ async function main() {
96
+ const pid = process.pid;
97
+ const bus = new EmitterBus();
98
+ const loader = new ServiceLoader(bus);
99
+ await loader.load({ name: 'channel', modulePath: chanPath });
100
+ await loader.load({ name: 'memory', modulePath: memPath });
101
+ console.log('\nA. Centralization — one registration, three surfaces');
102
+ const list = bus.list();
103
+ const send = list.find(m => m.name === 'channel.send');
104
+ ok('A1 channel.send in registry/CLI list with description', !!send && send.description === 'Send a message via a channel');
105
+ ok('A1 --help renders description + arg shape', renderHelp('channel', bus.list('channel')).includes('Send a message via a channel'));
106
+ const sendRes = await bus.call('channel.send', { recipient: 'telegram:42', message: 'hi' });
107
+ ok('A2 invocable via bus/CLI path', JSON.stringify(sendRes) === JSON.stringify({ sent: true, via: 'v1', to: 'telegram:42', text: 'hi' }));
108
+ const rpcStop = await startRpcServer(bus, '127.0.0.1', 19099);
109
+ const r = await rpcCall(19099, { jsonrpc: '2.0', method: 'channel.send', params: { recipient: 'x', message: 'y' }, id: 1 });
110
+ ok('A3 invocable via JSON-RPC', r.result?.sent === true, JSON.stringify(r.result));
111
+ const agentTools = bus.list().filter(m => !m.internal); // agent-tool projection
112
+ ok('A4 present in agent tool list with matching description', agentTools.some(m => m.name === 'channel.send' && m.description === send.description));
113
+ console.log('\nB. CLI introspection');
114
+ ok('B1 vargos <service> lists exactly that service', bus.list('channel').every(m => m.service === 'channel') && bus.list('channel').length === 1);
115
+ // B2 with a real zod schema (the fake schema above can't be converted to JSON Schema):
116
+ const zbus = new EmitterBus();
117
+ zbus.register('demo.send', {
118
+ description: 'Send a message via a channel',
119
+ schema: z.object({ recipient: z.string(), message: z.string() }),
120
+ cli: { positional: ['recipient', 'message'] },
121
+ }, () => ({}));
122
+ ok('B2 --help shows arg shape from registry', /<recipient>.*<message>/s.test(renderHelp('demo', zbus.list('demo'))));
123
+ ok('B3 positional args map to schema keys', JSON.stringify(buildParams(send, ['telegram:7', 'hello'])) === JSON.stringify({ recipient: 'telegram:7', message: 'hello' }));
124
+ let usageErr = '';
125
+ try {
126
+ buildParams(send, ['a', 'b', 'c']);
127
+ }
128
+ catch (e) {
129
+ usageErr = e.message;
130
+ }
131
+ ok('B3 wrong arg count → clear usage error (not stack trace)', usageErr.includes('too many arguments'));
132
+ // B4: same validation error on every surface
133
+ let directErr = '';
134
+ try {
135
+ await bus.call('channel.send', { recipient: 'only' });
136
+ }
137
+ catch (e) {
138
+ directErr = e.message;
139
+ }
140
+ const rpcErr = await rpcCall(19099, { jsonrpc: '2.0', method: 'channel.send', params: { recipient: 'only' }, id: 2 });
141
+ ok('B4 same validation error on direct + RPC', directErr.includes('Invalid params') && rpcErr.error?.code === -32602, `${directErr} | rpc=${rpcErr.error?.code}`);
142
+ console.log('\nC. Bus semantics');
143
+ let notFound;
144
+ try {
145
+ await bus.call('nope.missing');
146
+ }
147
+ catch (e) {
148
+ notFound = e;
149
+ }
150
+ ok('C1 call unregistered → MethodNotFoundError', notFound instanceof MethodNotFoundError && notFound.code === -32601);
151
+ const rpcMissing = await rpcCall(19099, { jsonrpc: '2.0', method: 'nope.missing', params: {}, id: 3 });
152
+ ok('C1 RPC returns -32601', rpcMissing.error?.code === -32601);
153
+ let emitThrew = false;
154
+ try {
155
+ bus.emit('event.with.no.listeners', { a: 1 });
156
+ }
157
+ catch {
158
+ emitThrew = true;
159
+ }
160
+ ok('C2 emit with no listeners is a silent no-op', !emitThrew);
161
+ console.log('\nD. Hot in-process reload (same PID)');
162
+ await new Promise(r => setTimeout(r, 120));
163
+ const ticksBefore = g.__ticks;
164
+ writeFileSync(chanPath, channelV2); // git pull simulation
165
+ await loader.restart('channel');
166
+ ok('D1 same PID across reload', process.pid === pid);
167
+ const afterList = bus.list('channel');
168
+ ok('D1 new code observed (return value changed v1→v2)', JSON.stringify(await bus.call('channel.ping')) === JSON.stringify({ via: 'v2', pong: true }));
169
+ ok('D3 added method appears on all surfaces', afterList.some(m => m.name === 'channel.ping') && (await rpcCall(19099, { jsonrpc: '2.0', method: 'channel.ping', id: 4 })).result?.pong === true);
170
+ ok('D3 removed method disappears from all surfaces', !bus.has('channel.send') && (await rpcCall(19099, { jsonrpc: '2.0', method: 'channel.send', params: {}, id: 5 })).error?.code === -32601);
171
+ ok('D4 other service untouched (memory still works)', JSON.stringify(await bus.call('memory.search', { query: 'z' })) === JSON.stringify([{ citation: 'MEMORY.md', content: 'found: z' }]));
172
+ // D2: old interval cleared on dispose → exactly one timer running, not two.
173
+ const t1 = g.__ticks;
174
+ await new Promise(r => setTimeout(r, 250));
175
+ const rate = (g.__ticks - t1) / 0.25; // ticks/sec
176
+ ok('D2 no duplicate timers after reload (≈40/s, one interval)', rate > 20 && rate < 60, `${rate.toFixed(0)}/s`);
177
+ void ticksBefore;
178
+ await rpcStop();
179
+ console.log('\nE. CLI ↔ daemon coexistence');
180
+ const client = new RpcClient('127.0.0.1', 19098);
181
+ ok('E2 no daemon → isUp() false', !(await client.isUp()));
182
+ const stack = await bootLocal(['config'], path.resolve('.'), 'ts'); // boots real config service locally
183
+ ok('E2 local stack boots only needed services (config)', stack.bus.list('config').some(m => m.name === 'config.get'));
184
+ await stack.dispose();
185
+ ok('E2 local stack disposes cleanly', true);
186
+ rmSync(dir, { recursive: true, force: true });
187
+ console.log(`\n${fail === 0 ? '✅ ALL PASS' : '❌ FAILURES'} — ${pass} passed, ${fail} failed\n`);
188
+ process.exit(fail === 0 ? 0 : 1);
189
+ }
190
+ main().catch(err => { console.error(err); process.exit(1); });
191
+ //# sourceMappingURL=verify-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-core.js","sourceRoot":"","sources":["../../scripts/verify-core.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export interface ParsedDirectives {
9
9
  /** Message with all recognized directives stripped */
10
10
  cleaned: string;
11
11
  thinkingLevel?: ThinkingLevel;
12
+ /** `/verbose` toggle — true to enable, false for `/verbose off`. Undefined when absent. */
13
+ verbose?: boolean;
12
14
  }
13
15
  export declare function parseDirectives(text: string): ParsedDirectives;
14
16
  //# sourceMappingURL=directives.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"directives.d.ts","sourceRoot":"","sources":["../../../services/agent/directives.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AASD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAwB9D"}
1
+ {"version":3,"file":"directives.d.ts","sourceRoot":"","sources":["../../../services/agent/directives.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,2FAA2F;IAC3F,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAeD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAoC9D"}
@@ -9,9 +9,14 @@
9
9
  const THINK_LEVELS = new Set(['off', 'minimal', 'low', 'medium', 'high', 'xhigh']);
10
10
  // Matches /think or /t with optional colon, then a level word
11
11
  const THINK_RE = /(?<![:/\w])\/(?:think|t)[:=\s]+(\w+)/gi;
12
+ // Matches /verbose with an optional on/off argument (bare /verbose enables it).
13
+ // The argument is restricted to explicit toggles so it never swallows a real word.
14
+ const VERBOSE_RE = /(?<![:/\w])\/verbose(?:[:=\s]+(on|off|true|false|yes|no|0|1))?/gi;
15
+ const VERBOSE_OFF = new Set(['off', 'false', 'no', '0']);
12
16
  export function parseDirectives(text) {
13
17
  let cleaned = text;
14
18
  let thinkingLevel;
19
+ let verbose;
15
20
  // Process /think directives — last match wins
16
21
  let match;
17
22
  THINK_RE.lastIndex = 0;
@@ -21,12 +26,22 @@ export function parseDirectives(text) {
21
26
  thinkingLevel = level;
22
27
  }
23
28
  }
29
+ // Process /verbose directives — last match wins, bare directive enables it
30
+ VERBOSE_RE.lastIndex = 0;
31
+ while ((match = VERBOSE_RE.exec(text)) !== null) {
32
+ const arg = match[1]?.toLowerCase();
33
+ verbose = arg ? !VERBOSE_OFF.has(arg) : true;
34
+ }
24
35
  // Strip matched directives from the cleaned string
25
36
  if (thinkingLevel !== undefined) {
26
37
  THINK_RE.lastIndex = 0;
27
38
  cleaned = cleaned.replace(THINK_RE, '');
28
39
  }
40
+ if (verbose !== undefined) {
41
+ VERBOSE_RE.lastIndex = 0;
42
+ cleaned = cleaned.replace(VERBOSE_RE, '');
43
+ }
29
44
  cleaned = cleaned.trim();
30
- return { cleaned, thinkingLevel };
45
+ return { cleaned, thinkingLevel, verbose };
31
46
  }
32
47
  //# sourceMappingURL=directives.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"directives.js","sourceRoot":"","sources":["../../../services/agent/directives.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,kFAAkF;AAClF,kEAAkE;AAClE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3F,8DAA8D;AAC9D,MAAM,QAAQ,GAAG,wCAAwC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,aAAwC,CAAC;IAE7C,8CAA8C;IAC9C,IAAI,KAA6B,CAAC;IAElC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,aAAa,GAAG,KAAsB,CAAC;QACzC,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;QACvB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAEzB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"directives.js","sourceRoot":"","sources":["../../../services/agent/directives.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,kFAAkF;AAClF,kEAAkE;AAClE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3F,8DAA8D;AAC9D,MAAM,QAAQ,GAAG,wCAAwC,CAAC;AAE1D,gFAAgF;AAChF,mFAAmF;AACnF,MAAM,UAAU,GAAG,kEAAkE,CAAC;AAEtF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAEjE,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,aAAwC,CAAC;IAC7C,IAAI,OAA4B,CAAC;IAEjC,8CAA8C;IAC9C,IAAI,KAA6B,CAAC;IAElC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,aAAa,GAAG,KAAsB,CAAC;QACzC,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACpC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,mDAAmD;IACnD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;QACvB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC;QACzB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAEzB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAC7C,CAAC"}
@@ -7,43 +7,47 @@
7
7
  * - Debug mode for inspecting tools, prompts, history
8
8
  * - Streaming events passthrough to bus (agent.onDelta, agent.onTool, agent.onCompleted)
9
9
  */
10
- import type { Bus } from '../../gateway/bus.js';
11
- import type { EventMap } from '../../gateway/events.js';
10
+ import type { Bus, Service } from '../../core/types.js';
12
11
  import type { AppConfig } from '../../services/config/index.js';
13
- import type { AgentDeps } from './types.js';
14
- import { SettingsManager, AuthStorage, ModelRegistry, DefaultResourceLoader, type AgentSession, type ToolDefinition } from '@earendil-works/pi-coding-agent';
15
- export declare class AgentService {
12
+ import { SettingsManager, AuthStorage, ModelRegistry, DefaultResourceLoader, type AgentSession, type ToolDefinition, type CreateAgentSessionOptions, type CreateAgentSessionResult } from '@earendil-works/pi-coding-agent';
13
+ export declare class AgentService implements Service {
14
+ readonly name = "agent";
16
15
  protected bus: Bus;
17
16
  protected config: AppConfig;
18
17
  protected sessions: Map<string, AgentSession>;
19
- private activeRuns;
18
+ /** sessionKey → epoch ms when the session entered the cache (for agent.status). */
19
+ protected sessionMeta: Map<string, number>;
20
+ protected activeRuns: Set<string>;
20
21
  protected agentDir: string;
21
22
  protected authStorage: AuthStorage;
22
23
  protected modelRegistry: ModelRegistry;
23
24
  protected settings: SettingsManager;
24
- constructor(deps: AgentDeps);
25
+ init(bus: Bus): Promise<void>;
26
+ private registerMethods;
27
+ dispose(): void;
25
28
  /**
26
29
  * Persist retry settings to disk during boot
27
30
  */
28
- start(): Promise<void>;
31
+ private persistRetrySettings;
29
32
  /**
30
- * agent.execute — Run a task
31
- *
32
- * Note: sessionKey is declared optional here because it's auto-injected by
33
- * wrapEventAsToolDefinition() when the agent calls this as a tool. Direct callers
34
- * (channels, cron, webhooks, TCP) still provide sessionKey via EventMap.
33
+ * agent.execute — Run a task. `sessionKey` is auto-injected by the tool wrapper when
34
+ * the agent calls this as a tool; direct callers (channels, cron, webhooks, RPC)
35
+ * supply it. It survives validation via the schema's .passthrough().
35
36
  */
36
- execute(params: EventMap['agent.execute']['params']): Promise<EventMap['agent.execute']['result']>;
37
+ private execute;
37
38
  /**
38
39
  * agent.appendMessage — Append message to session JSONL without executing agent.
39
40
  * Records inbound messages in session history (observe-only for non-whitelisted).
40
41
  * Internal only — not exposed as an agent tool.
41
42
  */
42
- appendMessage(params: EventMap['agent.appendMessage']['params']): Promise<void>;
43
+ private appendMessage;
43
44
  /**
44
- * agent.status — Return currently active agent session keys.
45
+ * agent.status — Inventory cached sessions (parents, subagents, idle) with their
46
+ * run state, parent relationship, and model. When `sessionKey` is given, the result
47
+ * is scoped to that session and its subagents — letting a parent observe its own
48
+ * subtree. `activeRuns` is kept for callers that only need the executing keys.
45
49
  */
46
- status(_params: EventMap['agent.status']['params']): Promise<EventMap['agent.status']['result']>;
50
+ private status;
47
51
  /**
48
52
  * Get or create AgentSession for sessionKey.
49
53
  * Uses SessionManager.continueRecent() to load the latest session file,
@@ -53,6 +57,18 @@ export declare class AgentService {
53
57
  cwd?: string;
54
58
  model?: string;
55
59
  }): Promise<AgentSession>;
60
+ /**
61
+ * Create the underlying Pi SDK session. Isolated as a seam so tests can
62
+ * substitute a fake session without the SDK's model/auth machinery.
63
+ */
64
+ protected createPiSession(options: CreateAgentSessionOptions): Promise<CreateAgentSessionResult>;
65
+ /**
66
+ * Switch a cached session's model when an override differs from the current one.
67
+ * Unknown/missing overrides are a no-op — the session keeps its existing model.
68
+ */
69
+ private applyModelOverride;
70
+ /** Resolve a `provider:modelId` override to a Pi SDK model, or undefined if unknown. */
71
+ private resolveModel;
56
72
  /**
57
73
  * Subscribe to PiAgent sessionsubscription - emit to bus for streaming + debug logging.
58
74
  */
@@ -95,9 +111,6 @@ export declare class AgentService {
95
111
  * `stopReason`/`errorMessage` here, those would surface as silent empty completions.
96
112
  */
97
113
  private extractFinalAssistant;
98
- stop(): void;
99
114
  }
100
- export declare function boot(bus: Bus): Promise<{
101
- stop(): void;
102
- }>;
115
+ export declare function createService(): Service;
103
116
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../services/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAQ,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAMhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAM5C,OAAO,EAGL,eAAe,EACf,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAC;AAiBzC,qBAAa,YAAY;IACvB,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC;IAC5B,SAAS,CAAC,QAAQ,4BAAmC;IACrD,OAAO,CAAC,UAAU,CAAqB;IAEvC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IACnC,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC;gBAExB,IAAI,EAAE,SAAS;IAuC3B;;OAEG;IACG,KAAK;IAyBX;;;;;;OAMG;IAaG,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC;IA2CxG;;;;OAIG;IAEG,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrF;;OAEG;IAKG,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC;IAItG;;;;OAIG;cACa,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IA+DzH;;OAEG;IACH,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAsEnF;;;OAGG;cACa,oBAAoB,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAsBjH;;;;;OAKG;YACW,oBAAoB;IAQlC;;;;;;;OAOG;YACW,eAAe;IAsD7B;;;;OAIG;cACa,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IASzG;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAuC7B,IAAI,IAAI,IAAI;CAMb;AAID,wBAAsB,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAAE,IAAI,IAAI,IAAI,CAAA;CAAE,CAAC,CAM9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../services/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAQ,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAWhE,OAAO,EAGL,eAAe,EACf,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AA4BzC,qBAAa,YAAa,YAAW,OAAO;IAC1C,QAAQ,CAAC,IAAI,WAAW;IACxB,SAAS,CAAC,GAAG,EAAG,GAAG,CAAC;IACpB,SAAS,CAAC,MAAM,EAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,QAAQ,4BAAmC;IACrD,mFAAmF;IACnF,SAAS,CAAC,WAAW,sBAA6B;IAClD,SAAS,CAAC,UAAU,cAAqB;IAEzC,SAAS,CAAC,QAAQ,EAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,WAAW,EAAG,WAAW,CAAC;IACpC,SAAS,CAAC,aAAa,EAAG,aAAa,CAAC;IACxC,SAAS,CAAC,QAAQ,EAAG,eAAe,CAAC;IAE/B,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCnC,OAAO,CAAC,eAAe;IA0BvB,OAAO,IAAI,IAAI;IAMf;;OAEG;YACW,oBAAoB;IAyBlC;;;;OAIG;YACW,OAAO;IA2CrB;;;;OAIG;YACW,aAAa;IAoC3B;;;;;OAKG;YACW,MAAM;IAkBpB;;;;OAIG;cACa,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAqEzH;;;OAGG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAIhG;;;OAGG;YACW,kBAAkB;IAQhC,wFAAwF;IACxF,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAqEnF;;;OAGG;cACa,oBAAoB,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAsBjH;;;;;OAKG;YACW,oBAAoB;IAQlC;;;;;;;OAOG;YACW,eAAe;IAsD7B;;;;OAIG;cACa,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IASzG;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;CAoC9B;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}