@0xmaxma/claude-gateway 1.7.9 → 1.8.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 (258) hide show
  1. package/README.md +178 -44
  2. package/dist/agent/builtin-commands.js +2 -2
  3. package/dist/agent/builtin-commands.js.map +1 -1
  4. package/dist/agent/dreaming/accept.d.ts.map +1 -1
  5. package/dist/agent/dreaming/accept.js +4 -1
  6. package/dist/agent/dreaming/accept.js.map +1 -1
  7. package/dist/agent/dreaming/config.d.ts.map +1 -1
  8. package/dist/agent/dreaming/config.js +2 -0
  9. package/dist/agent/dreaming/config.js.map +1 -1
  10. package/dist/agent/dreaming/reviewer.d.ts.map +1 -1
  11. package/dist/agent/dreaming/reviewer.js +9 -2
  12. package/dist/agent/dreaming/reviewer.js.map +1 -1
  13. package/dist/agent/dreaming/staleness.d.ts +7 -1
  14. package/dist/agent/dreaming/staleness.d.ts.map +1 -1
  15. package/dist/agent/dreaming/staleness.js +17 -2
  16. package/dist/agent/dreaming/staleness.js.map +1 -1
  17. package/dist/agent/dreaming/types.d.ts +17 -1
  18. package/dist/agent/dreaming/types.d.ts.map +1 -1
  19. package/dist/agent/knowledge/archive-db.d.ts +43 -0
  20. package/dist/agent/knowledge/archive-db.d.ts.map +1 -1
  21. package/dist/agent/knowledge/archive-db.js +130 -0
  22. package/dist/agent/knowledge/archive-db.js.map +1 -1
  23. package/dist/agent/knowledge/config.d.ts +3 -1
  24. package/dist/agent/knowledge/config.d.ts.map +1 -1
  25. package/dist/agent/knowledge/config.js +32 -10
  26. package/dist/agent/knowledge/config.js.map +1 -1
  27. package/dist/agent/knowledge/index.d.ts +11 -4
  28. package/dist/agent/knowledge/index.d.ts.map +1 -1
  29. package/dist/agent/knowledge/index.js +22 -1
  30. package/dist/agent/knowledge/index.js.map +1 -1
  31. package/dist/agent/knowledge/indexer.d.ts +0 -7
  32. package/dist/agent/knowledge/indexer.d.ts.map +1 -1
  33. package/dist/agent/knowledge/indexer.js +34 -7
  34. package/dist/agent/knowledge/indexer.js.map +1 -1
  35. package/dist/agent/knowledge/lifecycle.d.ts +20 -4
  36. package/dist/agent/knowledge/lifecycle.d.ts.map +1 -1
  37. package/dist/agent/knowledge/lifecycle.js +33 -4
  38. package/dist/agent/knowledge/lifecycle.js.map +1 -1
  39. package/dist/agent/knowledge/reflection.d.ts +114 -0
  40. package/dist/agent/knowledge/reflection.d.ts.map +1 -0
  41. package/dist/agent/knowledge/reflection.js +447 -0
  42. package/dist/agent/knowledge/reflection.js.map +1 -0
  43. package/dist/agent/knowledge/shared-dedup.d.ts +85 -0
  44. package/dist/agent/knowledge/shared-dedup.d.ts.map +1 -0
  45. package/dist/agent/knowledge/shared-dedup.js +187 -0
  46. package/dist/agent/knowledge/shared-dedup.js.map +1 -0
  47. package/dist/agent/knowledge/shared-promote.d.ts +82 -7
  48. package/dist/agent/knowledge/shared-promote.d.ts.map +1 -1
  49. package/dist/agent/knowledge/shared-promote.js +244 -11
  50. package/dist/agent/knowledge/shared-promote.js.map +1 -1
  51. package/dist/agent/knowledge/shared-staleness.d.ts +51 -0
  52. package/dist/agent/knowledge/shared-staleness.d.ts.map +1 -0
  53. package/dist/agent/knowledge/shared-staleness.js +149 -0
  54. package/dist/agent/knowledge/shared-staleness.js.map +1 -0
  55. package/dist/agent/knowledge/shared-writer.d.ts +19 -0
  56. package/dist/agent/knowledge/shared-writer.d.ts.map +1 -1
  57. package/dist/agent/knowledge/shared-writer.js +42 -0
  58. package/dist/agent/knowledge/shared-writer.js.map +1 -1
  59. package/dist/agent/knowledge/types.d.ts +24 -0
  60. package/dist/agent/knowledge/types.d.ts.map +1 -1
  61. package/dist/agent/model-catalog.d.ts +62 -0
  62. package/dist/agent/model-catalog.d.ts.map +1 -0
  63. package/dist/agent/model-catalog.js +264 -0
  64. package/dist/agent/model-catalog.js.map +1 -0
  65. package/dist/agent/runner.d.ts +83 -0
  66. package/dist/agent/runner.d.ts.map +1 -1
  67. package/dist/agent/runner.js +281 -51
  68. package/dist/agent/runner.js.map +1 -1
  69. package/dist/agent/workspace-loader.d.ts +17 -2
  70. package/dist/agent/workspace-loader.d.ts.map +1 -1
  71. package/dist/agent/workspace-loader.js +17 -1
  72. package/dist/agent/workspace-loader.js.map +1 -1
  73. package/dist/api/cron-router.d.ts +12 -8
  74. package/dist/api/cron-router.d.ts.map +1 -1
  75. package/dist/api/cron-router.js +82 -16
  76. package/dist/api/cron-router.js.map +1 -1
  77. package/dist/api/gateway-router.d.ts +4 -0
  78. package/dist/api/gateway-router.d.ts.map +1 -1
  79. package/dist/api/gateway-router.js +16 -1
  80. package/dist/api/gateway-router.js.map +1 -1
  81. package/dist/api/manifest-sources.d.ts +15 -0
  82. package/dist/api/manifest-sources.d.ts.map +1 -0
  83. package/dist/api/manifest-sources.js +27 -0
  84. package/dist/api/manifest-sources.js.map +1 -0
  85. package/dist/api/meta-router.d.ts +13 -0
  86. package/dist/api/meta-router.d.ts.map +1 -0
  87. package/dist/api/meta-router.js +26 -0
  88. package/dist/api/meta-router.js.map +1 -0
  89. package/dist/api/packages.d.ts.map +1 -1
  90. package/dist/api/packages.js +18 -198
  91. package/dist/api/packages.js.map +1 -1
  92. package/dist/api/route-registry.d.ts +81 -0
  93. package/dist/api/route-registry.d.ts.map +1 -0
  94. package/dist/api/route-registry.js +44 -0
  95. package/dist/api/route-registry.js.map +1 -0
  96. package/dist/api/router.d.ts.map +1 -1
  97. package/dist/api/router.js +21 -3
  98. package/dist/api/router.js.map +1 -1
  99. package/dist/apps/compose-generator.js +7 -4
  100. package/dist/apps/compose-generator.js.map +1 -1
  101. package/dist/apps/installer.d.ts +154 -0
  102. package/dist/apps/installer.d.ts.map +1 -1
  103. package/dist/apps/installer.js +657 -54
  104. package/dist/apps/installer.js.map +1 -1
  105. package/dist/cli/args.d.ts +25 -0
  106. package/dist/cli/args.d.ts.map +1 -0
  107. package/dist/cli/args.js +55 -0
  108. package/dist/cli/args.js.map +1 -0
  109. package/dist/cli/colors.d.ts +37 -0
  110. package/dist/cli/colors.d.ts.map +1 -0
  111. package/dist/cli/colors.js +63 -0
  112. package/dist/cli/colors.js.map +1 -0
  113. package/dist/cli/command-names.d.ts +98 -0
  114. package/dist/cli/command-names.d.ts.map +1 -0
  115. package/dist/cli/command-names.js +109 -0
  116. package/dist/cli/command-names.js.map +1 -0
  117. package/dist/cli/commands/agents.d.ts +28 -0
  118. package/dist/cli/commands/agents.d.ts.map +1 -0
  119. package/dist/cli/commands/agents.js +321 -0
  120. package/dist/cli/commands/agents.js.map +1 -0
  121. package/dist/cli/commands/channels.d.ts +17 -0
  122. package/dist/cli/commands/channels.d.ts.map +1 -0
  123. package/dist/cli/commands/channels.js +101 -0
  124. package/dist/cli/commands/channels.js.map +1 -0
  125. package/dist/cli/commands/debug-bundle.d.ts +6 -0
  126. package/dist/cli/commands/debug-bundle.d.ts.map +1 -0
  127. package/dist/cli/commands/debug-bundle.js +220 -0
  128. package/dist/cli/commands/debug-bundle.js.map +1 -0
  129. package/dist/cli/commands/doctor.d.ts +3 -0
  130. package/dist/cli/commands/doctor.d.ts.map +1 -0
  131. package/dist/cli/commands/doctor.js +104 -0
  132. package/dist/cli/commands/doctor.js.map +1 -0
  133. package/dist/cli/commands/gateway.d.ts +12 -0
  134. package/dist/cli/commands/gateway.d.ts.map +1 -0
  135. package/dist/cli/commands/gateway.js +145 -0
  136. package/dist/cli/commands/gateway.js.map +1 -0
  137. package/dist/cli/commands/service.d.ts +33 -0
  138. package/dist/cli/commands/service.d.ts.map +1 -0
  139. package/dist/cli/commands/service.js +513 -0
  140. package/dist/cli/commands/service.js.map +1 -0
  141. package/dist/cli/commands/update.d.ts +16 -0
  142. package/dist/cli/commands/update.d.ts.map +1 -0
  143. package/dist/cli/commands/update.js +149 -0
  144. package/dist/cli/commands/update.js.map +1 -0
  145. package/dist/cli/commands.generated.d.ts +4 -0
  146. package/dist/cli/commands.generated.d.ts.map +1 -0
  147. package/dist/cli/commands.generated.js +220 -0
  148. package/dist/cli/commands.generated.js.map +1 -0
  149. package/dist/cli/health.d.ts +31 -0
  150. package/dist/cli/health.d.ts.map +1 -0
  151. package/dist/cli/health.js +49 -0
  152. package/dist/cli/health.js.map +1 -0
  153. package/dist/cli/http-client.d.ts +140 -0
  154. package/dist/cli/http-client.d.ts.map +1 -0
  155. package/dist/cli/http-client.js +332 -0
  156. package/dist/cli/http-client.js.map +1 -0
  157. package/dist/cli/index.d.ts +27 -0
  158. package/dist/cli/index.d.ts.map +1 -0
  159. package/dist/cli/index.js +372 -0
  160. package/dist/cli/index.js.map +1 -0
  161. package/dist/cli/manager.d.ts +64 -0
  162. package/dist/cli/manager.d.ts.map +1 -0
  163. package/dist/cli/manager.js +181 -0
  164. package/dist/cli/manager.js.map +1 -0
  165. package/dist/cli/output.d.ts +49 -0
  166. package/dist/cli/output.d.ts.map +1 -0
  167. package/dist/cli/output.js +101 -0
  168. package/dist/cli/output.js.map +1 -0
  169. package/dist/cli/prompt.d.ts +29 -0
  170. package/dist/cli/prompt.d.ts.map +1 -0
  171. package/dist/cli/prompt.js +154 -0
  172. package/dist/cli/prompt.js.map +1 -0
  173. package/dist/cli/redact.d.ts +3 -0
  174. package/dist/cli/redact.d.ts.map +1 -0
  175. package/dist/cli/redact.js +33 -0
  176. package/dist/cli/redact.js.map +1 -0
  177. package/dist/cli/types.d.ts +22 -0
  178. package/dist/cli/types.d.ts.map +1 -0
  179. package/dist/cli/types.js +4 -0
  180. package/dist/cli/types.js.map +1 -0
  181. package/dist/config/bootstrap.d.ts +33 -0
  182. package/dist/config/bootstrap.d.ts.map +1 -0
  183. package/dist/config/bootstrap.js +117 -0
  184. package/dist/config/bootstrap.js.map +1 -0
  185. package/dist/config/loader.d.ts.map +1 -1
  186. package/dist/config/loader.js +5 -1
  187. package/dist/config/loader.js.map +1 -1
  188. package/dist/config/watcher.d.ts.map +1 -1
  189. package/dist/config/watcher.js +2 -35
  190. package/dist/config/watcher.js.map +1 -1
  191. package/dist/discord/receiver.d.ts +6 -1
  192. package/dist/discord/receiver.d.ts.map +1 -1
  193. package/dist/discord/receiver.js +9 -1
  194. package/dist/discord/receiver.js.map +1 -1
  195. package/dist/entry.d.ts +3 -0
  196. package/dist/entry.d.ts.map +1 -0
  197. package/dist/entry.js +83 -0
  198. package/dist/entry.js.map +1 -0
  199. package/dist/index.js +197 -47
  200. package/dist/index.js.map +1 -1
  201. package/dist/load-dotenv.d.ts +2 -0
  202. package/dist/load-dotenv.d.ts.map +1 -0
  203. package/dist/load-dotenv.js +68 -0
  204. package/dist/load-dotenv.js.map +1 -0
  205. package/dist/packages/registry.d.ts +50 -0
  206. package/dist/packages/registry.d.ts.map +1 -0
  207. package/dist/packages/registry.js +209 -0
  208. package/dist/packages/registry.js.map +1 -0
  209. package/dist/session/process.d.ts +20 -3
  210. package/dist/session/process.d.ts.map +1 -1
  211. package/dist/session/process.js +120 -5
  212. package/dist/session/process.js.map +1 -1
  213. package/dist/shell/claude-pty-shell.js +146 -27
  214. package/dist/shell/claude-pty-shell.js.map +1 -1
  215. package/dist/shell/draft-phantom.d.ts +49 -0
  216. package/dist/shell/draft-phantom.d.ts.map +1 -0
  217. package/dist/shell/draft-phantom.js +59 -0
  218. package/dist/shell/draft-phantom.js.map +1 -0
  219. package/dist/shell/submit-diag.d.ts +67 -0
  220. package/dist/shell/submit-diag.d.ts.map +1 -0
  221. package/dist/shell/submit-diag.js +69 -0
  222. package/dist/shell/submit-diag.js.map +1 -0
  223. package/dist/shutdown-signals.d.ts +47 -0
  224. package/dist/shutdown-signals.d.ts.map +1 -0
  225. package/dist/shutdown-signals.js +62 -0
  226. package/dist/shutdown-signals.js.map +1 -0
  227. package/dist/telegram/receiver.d.ts +6 -1
  228. package/dist/telegram/receiver.d.ts.map +1 -1
  229. package/dist/telegram/receiver.js +9 -1
  230. package/dist/telegram/receiver.js.map +1 -1
  231. package/dist/types.d.ts +25 -0
  232. package/dist/types.d.ts.map +1 -1
  233. package/dist/utils/orphan-receivers.d.ts +90 -0
  234. package/dist/utils/orphan-receivers.d.ts.map +1 -0
  235. package/dist/utils/orphan-receivers.js +218 -0
  236. package/dist/utils/orphan-receivers.js.map +1 -0
  237. package/dist/utils/paths.d.ts +16 -0
  238. package/dist/utils/paths.d.ts.map +1 -0
  239. package/dist/utils/paths.js +60 -0
  240. package/dist/utils/paths.js.map +1 -0
  241. package/dist/utils/stop-child.d.ts +21 -0
  242. package/dist/utils/stop-child.d.ts.map +1 -0
  243. package/dist/utils/stop-child.js +64 -0
  244. package/dist/utils/stop-child.js.map +1 -0
  245. package/lib/pairing.ts +1 -1
  246. package/mcp/tools/agent/handlers.ts +1 -1
  247. package/mcp/tools/discord/module.ts +23 -15
  248. package/mcp/tools/discord/receiver-server.ts +4 -0
  249. package/mcp/tools/memory/archive-reader.test.ts +25 -1
  250. package/mcp/tools/memory/archive-reader.ts +70 -12
  251. package/mcp/tools/memory/archive-writer.test.ts +168 -0
  252. package/mcp/tools/memory/archive-writer.ts +137 -0
  253. package/mcp/tools/memory/module.test.ts +187 -0
  254. package/mcp/tools/memory/module.ts +192 -6
  255. package/mcp/tools/telegram/module.ts +10 -2
  256. package/mcp/tools/telegram/receiver-server.ts +15 -6
  257. package/mcp/tools/telegram/typing.ts +178 -34
  258. package/package.json +6 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/cli/colors.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAkCH,8CAGC;AAGD,sCAOC;AAID,gCAmBC;AApED,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,wEAAwE;IACxE,QAAQ,EAAE,uBAAuB;IACjC;gFAC4E;IAC5E,OAAO,EAAE,iBAAiB;CAClB,CAAC;AAgBX;;sEAEsE;AACtE,SAAgB,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACpE,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACrE,OAAO,kCAAkC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,kEAAkE;AAClE,SAAgB,aAAa,CAC3B,MAAuC,EACvC,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACpE,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,EAAE,IAAI,GAAG,CAAC,WAAW,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACpG,OAAO,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;AAChC,CAAC;AAED;uEACuE;AACvE,SAAgB,UAAU,CACxB,SAA0C,OAAO,CAAC,MAAM,EACxD,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GACR,CAAC,IAAY,EAAS,EAAE,CACxB,CAAC,CAAS,EAAE,EAAE,CACZ,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO;QACL,OAAO;QACP,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QACpE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACtB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACpB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACxB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;KACvB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * CLI invocation classification, deliberately cheap (no heavy imports) so the
3
+ * boot entry point can decide what an invocation means without loading either
4
+ * the CLI runner or the server.
5
+ *
6
+ * Starting the gateway is explicit: only `gateway start` boots. Everything else
7
+ * — a bare `claude-gateway`, `--help`, a typo — goes to the CLI, so discovery
8
+ * can never leave a stray server listening on the port.
9
+ */
10
+ /** How src/index.ts should handle an invocation. */
11
+ export type Invocation =
12
+ /** `gateway start [...]` — boot the server in the foreground. */
13
+ 'boot'
14
+ /**
15
+ * A pre-1.8 supervised launch (`ExecStart=/usr/local/bin/claude-gateway`)
16
+ * with no command. Boots with a deprecation warning so existing systemd/PM2
17
+ * units keep working instead of restart-looping on an instant exit-0 help.
18
+ */
19
+ | 'legacy-boot'
20
+ /** Anything else — hand the argv to the CLI runner. */
21
+ | 'cli';
22
+ /**
23
+ * Set on the gateway's own environment once it has decided to boot, so every
24
+ * process it spawns — agents, and any shell they open — is identifiable as a
25
+ * descendant rather than a service main process.
26
+ */
27
+ export declare const CHILD_MARKER = "CLAUDE_GATEWAY_CHILD";
28
+ /** Records which supervisor started the gateway, after the inherited markers
29
+ * are scrubbed. Only the boot process sets it; children inherit it unused. */
30
+ export declare const SUPERVISOR_MARKER = "CLAUDE_GATEWAY_SUPERVISOR";
31
+ export interface InvocationEnv {
32
+ /** Set by systemd for every service invocation (v232+). */
33
+ INVOCATION_ID?: string;
34
+ /** Set by PM2 for managed processes. */
35
+ pm_id?: string;
36
+ PM2_HOME?: string;
37
+ /** Present when a running gateway spawned this process. */
38
+ CLAUDE_GATEWAY_CHILD?: string;
39
+ }
40
+ /** Facts about the invocation that are not environment variables. */
41
+ export interface InvocationSignals {
42
+ /** True when a terminal is attached to stdin. */
43
+ hasTty?: boolean;
44
+ }
45
+ /** True only for the explicit foreground-server invocation. */
46
+ export declare function isGatewayStartInvocation(argv: readonly string[]): boolean;
47
+ /**
48
+ * True when this process *is* the service main process of a supervisor we
49
+ * generate units for.
50
+ *
51
+ * The supervisor variables are inherited by every descendant, so on their own
52
+ * they identify the whole process tree rather than its root. That matters
53
+ * because the gateway spawns agents that have shell access: a bare
54
+ * `claude-gateway` typed in one of those shells would otherwise take the
55
+ * legacy-boot path and start a second server on the gateway's port.
56
+ *
57
+ * `CHILD_MARKER` settles it: a booting gateway stamps it on its own environment
58
+ * (`claimSupervisorEnv`), so every descendant carries it and a service main
59
+ * process never does. It is checked first and nothing else can override it.
60
+ *
61
+ * The remaining variables are not equal evidence, so they are not weighed
62
+ * equally:
63
+ *
64
+ * - `INVOCATION_ID` and `pm_id` are *identity*: the supervisor mints them per
65
+ * invocation, and they cannot be set by a shell profile. They are trusted on
66
+ * their own — including when a terminal is attached, so a legacy unit with
67
+ * `StandardInput=tty` still boots rather than printing help at its service
68
+ * manager.
69
+ * - `PM2_HOME` is *configuration* — where PM2 keeps its data. An operator can
70
+ * reasonably export it from a shell profile, where it says nothing about how
71
+ * this process was launched. It counts only when no terminal is attached.
72
+ */
73
+ export declare function isSupervised(env: InvocationEnv, signals?: InvocationSignals): boolean;
74
+ /**
75
+ * Take ownership of the supervisor markers at boot: record which supervisor
76
+ * started us, drop the ones that would misidentify a descendant as a service,
77
+ * and stamp `CHILD_MARKER` so no descendant can classify itself as one.
78
+ *
79
+ * Called once, on the boot path only, after the invocation has been classified.
80
+ * Doing it here rather than at each `spawn()` covers every child the server
81
+ * creates, including ones added later.
82
+ *
83
+ * `PM2_HOME` is deliberately left in place. Unlike the other two it is not a
84
+ * launch marker but the location of PM2's own data directory, and the gateway
85
+ * spawns agents with shells: stripping it would silently point any `pm2` they
86
+ * run at the default `~/.pm2` instead of the configured one. `CHILD_MARKER`
87
+ * already prevents it from being misread here.
88
+ */
89
+ export declare function claimSupervisorEnv(env: NodeJS.ProcessEnv): void;
90
+ /**
91
+ * Classify `argv` (already sliced past node + script).
92
+ *
93
+ * The legacy shim is intentionally narrow: it applies only when a supervisor
94
+ * launched us with no command at all (flags such as `--config` are allowed,
95
+ * since old units pass them), and never for help/version flags.
96
+ */
97
+ export declare function classifyInvocation(argv: readonly string[], env: InvocationEnv, signals?: InvocationSignals): Invocation;
98
+ //# sourceMappingURL=command-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-names.d.ts","sourceRoot":"","sources":["../../src/cli/command-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,oDAAoD;AACpD,MAAM,MAAM,UAAU;AACpB,iEAAiE;AAC/D,MAAM;AACR;;;;GAIG;GACD,aAAa;AACf,uDAAuD;GACrD,KAAK,CAAC;AAEV;;;;GAIG;AACH,eAAO,MAAM,YAAY,yBAAyB,CAAC;AAEnD;+EAC+E;AAC/E,eAAO,MAAM,iBAAiB,8BAA8B,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,+DAA+D;AAC/D,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEzE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAIzF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAM/D;AAmBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,iBAAsB,GAC9B,UAAU,CAKZ"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUPERVISOR_MARKER = exports.CHILD_MARKER = void 0;
4
+ exports.isGatewayStartInvocation = isGatewayStartInvocation;
5
+ exports.isSupervised = isSupervised;
6
+ exports.claimSupervisorEnv = claimSupervisorEnv;
7
+ exports.classifyInvocation = classifyInvocation;
8
+ /**
9
+ * Set on the gateway's own environment once it has decided to boot, so every
10
+ * process it spawns — agents, and any shell they open — is identifiable as a
11
+ * descendant rather than a service main process.
12
+ */
13
+ exports.CHILD_MARKER = 'CLAUDE_GATEWAY_CHILD';
14
+ /** Records which supervisor started the gateway, after the inherited markers
15
+ * are scrubbed. Only the boot process sets it; children inherit it unused. */
16
+ exports.SUPERVISOR_MARKER = 'CLAUDE_GATEWAY_SUPERVISOR';
17
+ /** True only for the explicit foreground-server invocation. */
18
+ function isGatewayStartInvocation(argv) {
19
+ return argv[0] === 'gateway' && argv[1] === 'start';
20
+ }
21
+ /**
22
+ * True when this process *is* the service main process of a supervisor we
23
+ * generate units for.
24
+ *
25
+ * The supervisor variables are inherited by every descendant, so on their own
26
+ * they identify the whole process tree rather than its root. That matters
27
+ * because the gateway spawns agents that have shell access: a bare
28
+ * `claude-gateway` typed in one of those shells would otherwise take the
29
+ * legacy-boot path and start a second server on the gateway's port.
30
+ *
31
+ * `CHILD_MARKER` settles it: a booting gateway stamps it on its own environment
32
+ * (`claimSupervisorEnv`), so every descendant carries it and a service main
33
+ * process never does. It is checked first and nothing else can override it.
34
+ *
35
+ * The remaining variables are not equal evidence, so they are not weighed
36
+ * equally:
37
+ *
38
+ * - `INVOCATION_ID` and `pm_id` are *identity*: the supervisor mints them per
39
+ * invocation, and they cannot be set by a shell profile. They are trusted on
40
+ * their own — including when a terminal is attached, so a legacy unit with
41
+ * `StandardInput=tty` still boots rather than printing help at its service
42
+ * manager.
43
+ * - `PM2_HOME` is *configuration* — where PM2 keeps its data. An operator can
44
+ * reasonably export it from a shell profile, where it says nothing about how
45
+ * this process was launched. It counts only when no terminal is attached.
46
+ */
47
+ function isSupervised(env, signals = {}) {
48
+ if (env[exports.CHILD_MARKER])
49
+ return false;
50
+ if (env.INVOCATION_ID || env.pm_id !== undefined)
51
+ return true;
52
+ return !!env.PM2_HOME && !signals.hasTty;
53
+ }
54
+ /**
55
+ * Take ownership of the supervisor markers at boot: record which supervisor
56
+ * started us, drop the ones that would misidentify a descendant as a service,
57
+ * and stamp `CHILD_MARKER` so no descendant can classify itself as one.
58
+ *
59
+ * Called once, on the boot path only, after the invocation has been classified.
60
+ * Doing it here rather than at each `spawn()` covers every child the server
61
+ * creates, including ones added later.
62
+ *
63
+ * `PM2_HOME` is deliberately left in place. Unlike the other two it is not a
64
+ * launch marker but the location of PM2's own data directory, and the gateway
65
+ * spawns agents with shells: stripping it would silently point any `pm2` they
66
+ * run at the default `~/.pm2` instead of the configured one. `CHILD_MARKER`
67
+ * already prevents it from being misread here.
68
+ */
69
+ function claimSupervisorEnv(env) {
70
+ const supervisor = env.INVOCATION_ID ? 'systemd' : env.PM2_HOME || env.pm_id !== undefined ? 'pm2' : null;
71
+ delete env.INVOCATION_ID;
72
+ delete env.pm_id;
73
+ if (supervisor)
74
+ env[exports.SUPERVISOR_MARKER] = supervisor;
75
+ env[exports.CHILD_MARKER] = '1';
76
+ }
77
+ const HELP_OR_VERSION_FLAGS = new Set(['--help', '-h', '--version', '-V']);
78
+ /**
79
+ * True when argv contains no command name — only flags and their values.
80
+ * `--config /etc/cg.json` counts as flag-only: the path is the flag's value,
81
+ * not a command.
82
+ */
83
+ function hasCommandToken(argv) {
84
+ for (let i = 0; i < argv.length; i++) {
85
+ const token = argv[i];
86
+ if (!token.startsWith('-'))
87
+ return true;
88
+ // `--flag value` consumes the next token; `--flag=value` does not.
89
+ if (!token.includes('=') && argv[i + 1] !== undefined && !argv[i + 1].startsWith('-'))
90
+ i++;
91
+ }
92
+ return false;
93
+ }
94
+ /**
95
+ * Classify `argv` (already sliced past node + script).
96
+ *
97
+ * The legacy shim is intentionally narrow: it applies only when a supervisor
98
+ * launched us with no command at all (flags such as `--config` are allowed,
99
+ * since old units pass them), and never for help/version flags.
100
+ */
101
+ function classifyInvocation(argv, env, signals = {}) {
102
+ if (isGatewayStartInvocation(argv))
103
+ return 'boot';
104
+ const asksForHelp = argv.some((token) => HELP_OR_VERSION_FLAGS.has(token));
105
+ if (!hasCommandToken(argv) && !asksForHelp && isSupervised(env, signals))
106
+ return 'legacy-boot';
107
+ return 'cli';
108
+ }
109
+ //# sourceMappingURL=command-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-names.js","sourceRoot":"","sources":["../../src/cli/command-names.ts"],"names":[],"mappings":";;;AAkDA,4DAEC;AA4BD,oCAIC;AAiBD,gDAMC;AA0BD,gDASC;AAxHD;;;;GAIG;AACU,QAAA,YAAY,GAAG,sBAAsB,CAAC;AAEnD;+EAC+E;AAClE,QAAA,iBAAiB,GAAG,2BAA2B,CAAC;AAkB7D,+DAA+D;AAC/D,SAAgB,wBAAwB,CAAC,IAAuB;IAC9D,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,YAAY,CAAC,GAAkB,EAAE,UAA6B,EAAE;IAC9E,IAAI,GAAG,CAAC,oBAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,kBAAkB,CAAC,GAAsB;IACvD,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1G,OAAO,GAAG,CAAC,aAAa,CAAC;IACzB,OAAO,GAAG,CAAC,KAAK,CAAC;IACjB,IAAI,UAAU;QAAE,GAAG,CAAC,yBAAiB,CAAC,GAAG,UAAU,CAAC;IACpD,GAAG,CAAC,oBAAY,CAAC,GAAG,GAAG,CAAC;AAC1B,CAAC;AAED,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AAE3E;;;;GAIG;AACH,SAAS,eAAe,CAAC,IAAuB;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,mEAAmE;QACnE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,CAAC,EAAE,CAAC;IAC7F,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,IAAuB,EACvB,GAAkB,EAClB,UAA6B,EAAE;IAE/B,IAAI,wBAAwB,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAClD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC;QAAE,OAAO,aAAa,CAAC;IAC/F,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { CliConfigView } from '../http-client';
2
+ /** Channels the wizard's token-connect step supports at creation time (mirrors
3
+ * the server's `channel !== 'telegram' && channel !== 'discord'` check in
4
+ * POST /v1/agents/wizard/:wizardId/channel — src/api/router.ts). */
5
+ export declare const WIZARD_CHANNELS: readonly ["telegram", "discord"];
6
+ /**
7
+ * Per-channel PATCH field shape for `agents update`'s channel management.
8
+ * Sourced from what PATCH /v1/agents/:agentId actually accepts (src/api/router.ts)
9
+ * — telegram/discord take one token; LINE/Slack take a paired credential (both
10
+ * required to connect, both empty to disconnect). Adding a future channel here
11
+ * is a data entry; the connect/disconnect flow below doesn't change.
12
+ */
13
+ interface ChannelFieldDef {
14
+ label: string;
15
+ connectedKey: string;
16
+ fields: Array<{
17
+ patchKey: string;
18
+ prompt: string;
19
+ }>;
20
+ }
21
+ export declare const UPDATE_CHANNELS: Record<string, ChannelFieldDef>;
22
+ export declare function runAgents(positionals: string[], flags: Record<string, string | boolean>, config: CliConfigView): Promise<number>;
23
+ /** Strip a wrapping code fence and slice from the first YAML/heading marker —
24
+ * pure, so it can be unit-tested without spawning Claude. Returns null when
25
+ * no recognizable AGENTS.md content (YAML front-matter or a heading) is found. */
26
+ export declare function parseGeneratedAgentsMd(rawOutput: string): string | null;
27
+ export {};
28
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/agents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA4D,MAAM,gBAAgB,CAAC;AAQzG;;qEAEqE;AACrE,eAAO,MAAM,eAAe,kCAAmC,CAAC;AAEhE;;;;;;GAMG;AACH,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AACD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAmB3D,CAAC;AAEF,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAyKD;;mFAEmF;AACnF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASvE"}
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UPDATE_CHANNELS = exports.WIZARD_CHANNELS = void 0;
4
+ exports.runAgents = runAgents;
5
+ exports.parseGeneratedAgentsMd = parseGeneratedAgentsMd;
6
+ const child_process_1 = require("child_process");
7
+ const http_client_1 = require("../http-client");
8
+ const create_agent_prompts_1 = require("../../agent/create-agent-prompts");
9
+ const prompt_1 = require("../prompt");
10
+ const output_1 = require("../output");
11
+ /** Files the wizard always returns; only AGENTS.md is required to confirm. */
12
+ const WIZARD_OPTIONAL_FILES = new Set(['SOUL.md', 'USER.md', 'MEMORY.md']);
13
+ /** Channels the wizard's token-connect step supports at creation time (mirrors
14
+ * the server's `channel !== 'telegram' && channel !== 'discord'` check in
15
+ * POST /v1/agents/wizard/:wizardId/channel — src/api/router.ts). */
16
+ exports.WIZARD_CHANNELS = ['telegram', 'discord'];
17
+ exports.UPDATE_CHANNELS = {
18
+ telegram: { label: 'Telegram', connectedKey: 'telegram_connected', fields: [{ patchKey: 'telegram_bot_token', prompt: 'Telegram bot token' }] },
19
+ discord: { label: 'Discord', connectedKey: 'discord_connected', fields: [{ patchKey: 'discord_bot_token', prompt: 'Discord bot token' }] },
20
+ line: {
21
+ label: 'LINE',
22
+ connectedKey: 'line_connected',
23
+ fields: [
24
+ { patchKey: 'line_channel_access_token', prompt: 'LINE channel access token' },
25
+ { patchKey: 'line_channel_secret', prompt: 'LINE channel secret' },
26
+ ],
27
+ },
28
+ slack: {
29
+ label: 'Slack',
30
+ connectedKey: 'slack_connected',
31
+ fields: [
32
+ { patchKey: 'slack_bot_token', prompt: 'Slack bot token' },
33
+ { patchKey: 'slack_signing_secret', prompt: 'Slack signing secret' },
34
+ ],
35
+ },
36
+ };
37
+ async function runAgents(positionals, flags, config) {
38
+ const verb = positionals[0];
39
+ if (!verb || flags.help === true) {
40
+ // An explicit `--help` succeeds; a missing verb is a usage error.
41
+ printHelp(flags.help === true);
42
+ return flags.help === true ? 0 : 1;
43
+ }
44
+ const baseUrl = await (0, http_client_1.resolveReachableUrl)((0, http_client_1.resolveUrlPlan)({ flagUrl: strFlag(flags.url), env: process.env, config }));
45
+ const key = (0, http_client_1.resolveKey)({ flagKey: strFlag(flags.key), env: process.env, config });
46
+ const compact = flags.json === true;
47
+ switch (verb) {
48
+ case 'list': {
49
+ const result = await (0, http_client_1.request)({ method: 'GET', path: '/v1/agents', baseUrl, key });
50
+ (0, output_1.printResult)(result.data, compact);
51
+ return 0;
52
+ }
53
+ case 'create':
54
+ return runCreate(positionals, flags, baseUrl, key);
55
+ case 'update':
56
+ return runUpdate(flags, baseUrl, key);
57
+ default:
58
+ process.stderr.write(`Unknown: agents ${verb} (expected list|create|update)\n\n`);
59
+ printHelp(false);
60
+ return 1;
61
+ }
62
+ }
63
+ // ─── create ─────────────────────────────────────────────────────────────────
64
+ async function runCreate(positionals, flags, baseUrl, key) {
65
+ const rl = (0, prompt_1.createRl)();
66
+ try {
67
+ const id = strFlag(flags.id) || positionals[1] || (await (0, prompt_1.ask)(rl, 'Agent id (letters, numbers, hyphens; must start with a letter): ')).trim();
68
+ if (!id) {
69
+ process.stderr.write('Agent id is required.\n');
70
+ return 1;
71
+ }
72
+ const description = strFlag(flags.description) ||
73
+ (await (0, prompt_1.askMultiline)(rl, "\nDescribe the agent's role, personality, and capabilities.\n(blank line when done)"));
74
+ if (!description.trim()) {
75
+ process.stderr.write('Description is required.\n');
76
+ return 1;
77
+ }
78
+ console.log('\nGenerating workspace files with Claude...');
79
+ let start;
80
+ try {
81
+ start = await (0, http_client_1.request)({ method: 'POST', path: '/v1/agents/wizard/start', baseUrl, key, body: { id, prompt: description } });
82
+ }
83
+ catch (err) {
84
+ process.stderr.write(`${err.message}\n`);
85
+ return 1;
86
+ }
87
+ const startData = start.data;
88
+ const files = new Map(Object.entries(startData.files));
89
+ const accepted = await (0, prompt_1.previewAndAccept)(rl, files, WIZARD_OPTIONAL_FILES);
90
+ if (!accepted.has('AGENTS.md')) {
91
+ process.stderr.write('AGENTS.md was skipped but is required — aborting (nothing was written).\n');
92
+ return 1;
93
+ }
94
+ const confirm = await (0, http_client_1.request)({
95
+ method: 'POST',
96
+ path: `/v1/agents/wizard/${startData.wizardId}/confirm`,
97
+ baseUrl,
98
+ key,
99
+ body: { files: Object.fromEntries(accepted) },
100
+ });
101
+ const confirmData = confirm.data;
102
+ console.log(`\n ✓ Agent "${confirmData.agentId}" created — workspace + config written, hot-reloading now.`);
103
+ const channelChoice = (await (0, prompt_1.ask)(rl, `\nConnect a channel now? (${exports.WIZARD_CHANNELS.join('/')}/skip) [skip]: `)).trim().toLowerCase();
104
+ let connected;
105
+ if (exports.WIZARD_CHANNELS.includes(channelChoice)) {
106
+ for (let attempt = 1; attempt <= 3; attempt++) {
107
+ const token = (await (0, prompt_1.ask)(rl, `${channelChoice === 'telegram' ? 'Telegram' : 'Discord'} bot token: `)).trim();
108
+ try {
109
+ const chRes = await (0, http_client_1.request)({
110
+ method: 'POST',
111
+ path: `/v1/agents/wizard/${startData.wizardId}/channel`,
112
+ baseUrl,
113
+ key,
114
+ body: { channel: channelChoice, botToken: token },
115
+ });
116
+ const chData = chRes.data;
117
+ console.log(` ✓ Bot ${chData.botName} connected`);
118
+ connected = channelChoice;
119
+ break;
120
+ }
121
+ catch (err) {
122
+ console.log(` ${err.message}`);
123
+ if (attempt < 3)
124
+ console.log(` ${3 - attempt} attempt(s) remaining.`);
125
+ }
126
+ }
127
+ }
128
+ await (0, http_client_1.request)({ method: 'POST', path: `/v1/agents/wizard/${startData.wizardId}/complete`, baseUrl, key, body: {} });
129
+ console.log('\n═══════════════════════════════════════');
130
+ console.log(` ✓ Agent "${confirmData.agentId}" is ready!`);
131
+ console.log('═══════════════════════════════════════');
132
+ if (connected) {
133
+ console.log(`\nAsk the owner to DM the bot. Their request will show up under:`);
134
+ console.log(` claude-gateway channels pending --agent ${confirmData.agentId} --channel ${connected}`);
135
+ console.log(`Then approve it with:`);
136
+ console.log(` claude-gateway channels approve --agent ${confirmData.agentId} --channel ${connected} --code <code>`);
137
+ }
138
+ else {
139
+ console.log(`\nNo channel connected yet. Add one later with:`);
140
+ console.log(` claude-gateway agents update --agent ${confirmData.agentId}`);
141
+ }
142
+ return 0;
143
+ }
144
+ finally {
145
+ rl.close();
146
+ }
147
+ }
148
+ async function fetchAgents(baseUrl, key) {
149
+ const result = await (0, http_client_1.request)({ method: 'GET', path: '/v1/agents', baseUrl, key });
150
+ return result.data.agents;
151
+ }
152
+ async function runUpdate(flags, baseUrl, key) {
153
+ const rl = (0, prompt_1.createRl)();
154
+ try {
155
+ let agentId = strFlag(flags.agent);
156
+ let agents = await fetchAgents(baseUrl, key);
157
+ if (!agentId) {
158
+ if (agents.length === 0) {
159
+ process.stderr.write('No agents found. Run `claude-gateway agents create` first.\n');
160
+ return 1;
161
+ }
162
+ console.log('\nAgents:');
163
+ agents.forEach((a, i) => console.log(` ${i + 1}) ${a.id}`));
164
+ const pick = (await (0, prompt_1.ask)(rl, 'Select agent number: ')).trim();
165
+ const idx = parseInt(pick, 10) - 1;
166
+ if (isNaN(idx) || idx < 0 || idx >= agents.length) {
167
+ process.stderr.write('Invalid selection.\n');
168
+ return 1;
169
+ }
170
+ agentId = agents[idx].id;
171
+ }
172
+ else if (!agents.some((a) => a.id === agentId)) {
173
+ process.stderr.write(`Agent '${agentId}' not found (or not accessible with this key).\n`);
174
+ return 1;
175
+ }
176
+ console.log(`\n Selected: ${agentId}\n`);
177
+ while (true) {
178
+ agents = await fetchAgents(baseUrl, key);
179
+ // Re-fetched every iteration, so the agent can disappear mid-session —
180
+ // deleted by another operator, or dropped from this key's scope by a
181
+ // config reload. Without this guard the next line throws an opaque
182
+ // TypeError out through the generic handler in `runCli`.
183
+ const agent = agents.find((a) => a.id === agentId);
184
+ if (!agent) {
185
+ process.stderr.write(`Agent '${agentId}' is no longer available (or not accessible with this key).\n`);
186
+ return 1;
187
+ }
188
+ const connected = Object.entries(exports.UPDATE_CHANNELS).filter(([, def]) => agent[def.connectedKey] === true);
189
+ console.log('What do you want to do?');
190
+ console.log(' 1) Regenerate AGENTS.md');
191
+ console.log(` 2) Connect/update a channel [connected: ${connected.length ? connected.map(([, d]) => d.label).join(', ') : 'none'}]`);
192
+ if (connected.length)
193
+ console.log(' 3) Disconnect a channel');
194
+ console.log(' 0) Done');
195
+ const choice = (await (0, prompt_1.ask)(rl, 'Choose: ')).trim();
196
+ if (choice === '0' || choice.toLowerCase() === 'done')
197
+ return 0;
198
+ if (choice === '1') {
199
+ await regenerateAgentsMd(rl, agentId, baseUrl, key);
200
+ }
201
+ else if (choice === '2') {
202
+ await connectChannel(rl, agentId, baseUrl, key);
203
+ }
204
+ else if (choice === '3' && connected.length) {
205
+ await disconnectChannel(rl, agentId, connected.map(([id]) => id), baseUrl, key);
206
+ }
207
+ else {
208
+ console.log(' Please choose a listed option.\n');
209
+ }
210
+ }
211
+ }
212
+ finally {
213
+ rl.close();
214
+ }
215
+ }
216
+ /** Strip a wrapping code fence and slice from the first YAML/heading marker —
217
+ * pure, so it can be unit-tested without spawning Claude. Returns null when
218
+ * no recognizable AGENTS.md content (YAML front-matter or a heading) is found. */
219
+ function parseGeneratedAgentsMd(rawOutput) {
220
+ let raw = rawOutput.trim();
221
+ const fenceMatch = raw.match(/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/);
222
+ if (fenceMatch)
223
+ raw = (fenceMatch[1] ?? '').trim();
224
+ const yamlStart = raw.indexOf('---\n');
225
+ const headingStart = raw.indexOf('# ');
226
+ const start = yamlStart >= 0 ? yamlStart : headingStart;
227
+ if (start < 0)
228
+ return null;
229
+ return raw.slice(start).replace(/\n```\s*$/, '').trim();
230
+ }
231
+ async function regenerateAgentsMd(rl, agentId, baseUrl, key) {
232
+ const current = await (0, http_client_1.request)({ method: 'GET', path: `/v1/agents/${encodeURIComponent(agentId)}/files/AGENTS.md`, baseUrl, key });
233
+ const currentContent = current.data.content;
234
+ const agentName = agentId.charAt(0).toUpperCase() + agentId.slice(1);
235
+ console.log('\nGenerating updated AGENTS.md with Claude...');
236
+ const result = (0, child_process_1.spawnSync)('claude', ['--print'], { input: (0, create_agent_prompts_1.buildUpdatePrompt)(agentName, currentContent), encoding: 'utf8', timeout: 60000 });
237
+ if (result.error || result.status !== 0 || !result.stdout?.trim()) {
238
+ console.log(' Claude generation failed.');
239
+ return;
240
+ }
241
+ const parsed = parseGeneratedAgentsMd(result.stdout);
242
+ if (parsed === null) {
243
+ console.log(' Could not parse AGENTS.md from Claude output.');
244
+ return;
245
+ }
246
+ let content = parsed;
247
+ (0, prompt_1.printFilePreview)('AGENTS.md', content);
248
+ while (true) {
249
+ const answer = (await (0, prompt_1.ask)(rl, 'Accept? (y/edit/n) [y]: ')).trim().toLowerCase() || 'y';
250
+ if (answer === 'y' || answer === 'yes')
251
+ break;
252
+ if (answer === 'n' || answer === 'no') {
253
+ console.log(' Cancelled. No changes made.\n');
254
+ return;
255
+ }
256
+ if (answer === 'edit') {
257
+ const edited = (0, prompt_1.editInEditor)(content, 'AGENTS.md');
258
+ if (edited === null) {
259
+ console.log(' Could not open an editor (set $EDITOR and try again, or choose y/n).');
260
+ continue;
261
+ }
262
+ content = edited;
263
+ (0, prompt_1.printFilePreview)('AGENTS.md', content);
264
+ continue;
265
+ }
266
+ console.log(' Please enter y, edit, or n.');
267
+ }
268
+ await (0, http_client_1.request)({ method: 'PUT', path: `/v1/agents/${encodeURIComponent(agentId)}/files/AGENTS.md`, baseUrl, key, body: { content } });
269
+ console.log(' ✓ AGENTS.md saved (auto-reloads).\n');
270
+ }
271
+ async function connectChannel(rl, agentId, baseUrl, key) {
272
+ const names = Object.keys(exports.UPDATE_CHANNELS);
273
+ console.log(`\nChannels: ${names.map((n, i) => `${i + 1}) ${exports.UPDATE_CHANNELS[n].label}`).join(' ')}`);
274
+ const pick = (await (0, prompt_1.ask)(rl, 'Select a channel number: ')).trim();
275
+ const idx = parseInt(pick, 10) - 1;
276
+ if (isNaN(idx) || idx < 0 || idx >= names.length) {
277
+ console.log(' Invalid selection.\n');
278
+ return;
279
+ }
280
+ const channel = names[idx];
281
+ const def = exports.UPDATE_CHANNELS[channel];
282
+ const body = {};
283
+ for (const f of def.fields) {
284
+ body[f.patchKey] = (await (0, prompt_1.ask)(rl, `${f.prompt}: `)).trim();
285
+ }
286
+ try {
287
+ await (0, http_client_1.request)({ method: 'PATCH', path: `/v1/agents/${encodeURIComponent(agentId)}`, baseUrl, key, body });
288
+ console.log(` ✓ ${def.label} connected.\n`);
289
+ }
290
+ catch (err) {
291
+ console.log(` ${err.message}\n`);
292
+ }
293
+ }
294
+ async function disconnectChannel(rl, agentId, connectedIds, baseUrl, key) {
295
+ console.log(`\nConnected channels: ${connectedIds.map((n, i) => `${i + 1}) ${exports.UPDATE_CHANNELS[n].label}`).join(' ')}`);
296
+ const pick = (await (0, prompt_1.ask)(rl, 'Disconnect which number? ')).trim();
297
+ const idx = parseInt(pick, 10) - 1;
298
+ if (isNaN(idx) || idx < 0 || idx >= connectedIds.length) {
299
+ console.log(' Invalid selection.\n');
300
+ return;
301
+ }
302
+ const channel = connectedIds[idx];
303
+ const def = exports.UPDATE_CHANNELS[channel];
304
+ const body = {};
305
+ for (const f of def.fields)
306
+ body[f.patchKey] = null;
307
+ await (0, http_client_1.request)({ method: 'PATCH', path: `/v1/agents/${encodeURIComponent(agentId)}`, baseUrl, key, body });
308
+ console.log(` ✓ ${def.label} disconnected.\n`);
309
+ }
310
+ // ─── helpers ────────────────────────────────────────────────────────────────
311
+ function strFlag(v) {
312
+ return typeof v === 'string' ? v : undefined;
313
+ }
314
+ function printHelp(requested) {
315
+ (0, output_1.writeCommandHelp)(requested, 'agents', 'create and manage agents', 'claude-gateway agents <list|create|update> [--flags]', [
316
+ ' agents list List agents accessible by this key',
317
+ ' agents create [id] [--description v] Interactive wizard (workspace files + optional channel)',
318
+ ' agents update [--agent <id>] Regenerate AGENTS.md, connect/update/disconnect channels',
319
+ ]);
320
+ }
321
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/cli/commands/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { CliConfigView } from '../http-client';
2
+ /**
3
+ * `channels pending|approve|deny` — manage incoming Telegram/Discord pairing
4
+ * requests for an agent (replaces `make pair agent=X code=Y channel=Z`).
5
+ *
6
+ * Scoped to the channels that actually expose a code-based pairing queue
7
+ * today (GET .../pending, POST .../approve, POST .../deny — see
8
+ * src/api/router.ts). LINE and Slack use a different model (a "recently
9
+ * dropped senders" list you allowlist directly, no approval code) so they
10
+ * aren't part of this command. Adding a future channel with the same
11
+ * approve/deny-by-code shape only requires adding it to PAIRING_CHANNELS below
12
+ * — no other code here is channel-specific.
13
+ */
14
+ export declare const PAIRING_CHANNELS: readonly ["telegram", "discord"];
15
+ export type PairingChannel = (typeof PAIRING_CHANNELS)[number];
16
+ export declare function runChannels(positionals: string[], flags: Record<string, string | boolean>, config: CliConfigView): Promise<number>;
17
+ //# sourceMappingURL=channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4D,MAAM,gBAAgB,CAAC;AAGzG;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,kCAAmC,CAAC;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAM/D,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,CAkEjB"}