@0xmaxma/claude-gateway 1.3.4 → 1.3.5

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 (46) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/runner.d.ts +20 -0
  3. package/dist/agent/runner.d.ts.map +1 -1
  4. package/dist/agent/runner.js +94 -1
  5. package/dist/agent/runner.js.map +1 -1
  6. package/dist/api/gateway-router.d.ts +10 -0
  7. package/dist/api/gateway-router.d.ts.map +1 -1
  8. package/dist/api/gateway-router.js +261 -7
  9. package/dist/api/gateway-router.js.map +1 -1
  10. package/dist/session/process.d.ts +8 -0
  11. package/dist/session/process.d.ts.map +1 -1
  12. package/dist/session/process.js +28 -0
  13. package/dist/session/process.js.map +1 -1
  14. package/dist/shell/claude-pty-shell.js +211 -4
  15. package/dist/shell/claude-pty-shell.js.map +1 -1
  16. package/dist/shell/emitter.d.ts +13 -0
  17. package/dist/shell/emitter.d.ts.map +1 -1
  18. package/dist/shell/emitter.js +16 -0
  19. package/dist/shell/emitter.js.map +1 -1
  20. package/dist/shell/menu-cancel.d.ts +50 -0
  21. package/dist/shell/menu-cancel.d.ts.map +1 -0
  22. package/dist/shell/menu-cancel.js +62 -0
  23. package/dist/shell/menu-cancel.js.map +1 -0
  24. package/dist/shell/pty-serialize.d.ts +23 -0
  25. package/dist/shell/pty-serialize.d.ts.map +1 -0
  26. package/dist/shell/pty-serialize.js +131 -0
  27. package/dist/shell/pty-serialize.js.map +1 -0
  28. package/dist/shell/pty-stream-registry.d.ts +59 -0
  29. package/dist/shell/pty-stream-registry.d.ts.map +1 -0
  30. package/dist/shell/pty-stream-registry.js +279 -0
  31. package/dist/shell/pty-stream-registry.js.map +1 -0
  32. package/dist/shell/screen.d.ts +43 -0
  33. package/dist/shell/screen.d.ts.map +1 -1
  34. package/dist/shell/screen.js +91 -1
  35. package/dist/shell/screen.js.map +1 -1
  36. package/dist/ui/web-ui.d.ts +2 -2
  37. package/dist/ui/web-ui.d.ts.map +1 -1
  38. package/dist/ui/web-ui.js +615 -114
  39. package/dist/ui/web-ui.js.map +1 -1
  40. package/mcp/tools/discord/module.ts +88 -1
  41. package/mcp/tools/discord/outbound.ts +36 -0
  42. package/mcp/tools/discord/types.ts +2 -0
  43. package/mcp/tools/telegram/menu-parser.ts +37 -0
  44. package/mcp/tools/telegram/receiver-server.ts +83 -0
  45. package/mcp/tools/telegram/typing.ts +7 -1
  46. package/package.json +4 -2
@@ -1,4 +1,11 @@
1
1
  export type DialogKind = 'bypass-permissions';
2
+ /** One selectable row in an interactive TUI menu (AskUserQuestion / plan approval). */
3
+ export interface MenuOption {
4
+ /** 1-based number as shown in the TUI. */
5
+ index: number;
6
+ /** Human-readable label (first line only; sub-descriptions are ignored). */
7
+ label: string;
8
+ }
2
9
  /**
3
10
  * TUI string constants — verified against Claude Code v2.1.x.
4
11
  * When upgrading Claude Code, re-check each constant against the new TUI output.
@@ -11,6 +18,31 @@ export type DialogKind = 'bypass-permissions';
11
18
  export declare const TUI_BUSY_MARKER = "esc to interrupt";
12
19
  export declare const TUI_PROMPT_RE: RegExp;
13
20
  export declare const TUI_BYPASS_PERMS: readonly ["Bypass Permissions mode", "Yes, I accept"];
21
+ /**
22
+ * Interactive select-menu footer markers (e.g. AskUserQuestion). The footer reads
23
+ * "Enter to select · ↑/↓ to navigate · Esc to cancel"; we match on the two stable
24
+ * fragments so spacing/middle-dot variations across TUI versions don't break it.
25
+ */
26
+ export declare const TUI_MENU_FOOTER: readonly ["to navigate", "to cancel"];
27
+ /** A numbered option row, with an optional leading ❯/> highlight marker. */
28
+ export declare const TUI_MENU_OPTION_RE: RegExp;
29
+ /**
30
+ * Parse a user's menu reply (typed number or a button's choice payload) into a
31
+ * 1-based option index. Returns null for anything that isn't a leading integer
32
+ * within [1, count] — never trust chat input to be a valid selection.
33
+ */
34
+ export declare function parseMenuChoice(text: string, count: number): number | null;
35
+ /**
36
+ * Channel turns reach the wrapper wrapped in a <channel …>…</channel> envelope
37
+ * (see AgentRunner.buildChannelXml) — even a one-character menu reply like "1"
38
+ * arrives as `<channel source="telegram" …>1</channel>`. To interpret a menu
39
+ * selection we need the user's actual text, not the envelope, so pull out the
40
+ * inner content and drop any nested <replied> block. Returns the input
41
+ * unchanged when it is not a channel envelope (e.g. a raw API/typed reply).
42
+ */
43
+ export declare function extractChannelContent(text: string): string;
44
+ /** Build the chat-facing menu prompt (also the API/number fallback text). */
45
+ export declare function formatMenuPrompt(options: MenuOption[]): string;
14
46
  /**
15
47
  * Virtual terminal fed with raw PTY bytes. Used ONLY for liveness signals
16
48
  * (busy / idle / dialog detection) — assistant text is never parsed from
@@ -35,5 +67,16 @@ export declare class ScreenModel {
35
67
  /** Idle input prompt is on screen. */
36
68
  hasPrompt(): boolean;
37
69
  detectDialog(): DialogKind | null;
70
+ /**
71
+ * Detect an interactive select menu blocking on keyboard input (e.g. the
72
+ * AskUserQuestion / plan-approval prompt) and parse its numbered options.
73
+ * Returns the options in display order, or null when no menu is on screen.
74
+ *
75
+ * Requires the select-menu footer AND at least two numbered rows — ordinary
76
+ * numbered lists in assistant output never carry the footer, so this won't
77
+ * false-positive on them. The bypass-permissions dialog also matches the
78
+ * footer; callers must check detectDialog() first and let it auto-accept.
79
+ */
80
+ detectMenu(): MenuOption[] | null;
38
81
  }
39
82
  //# sourceMappingURL=screen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/shell/screen.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAO9C;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAClD,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,eAAO,MAAM,gBAAgB,uDAAwD,CAAC;AAEtF;;;;GAIG;AACH,qBAAa,WAAW;aAMM,IAAI;aAAwB,IAAI;IAL5D,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,UAAU,CAAc;IAChC,kGAAkG;IAClG,OAAO,CAAC,aAAa,CAAS;gBAEF,IAAI,SAAM,EAAkB,IAAI,SAAK;IAIjE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMzB,uDAAuD;IACvD,OAAO,IAAI,MAAM;IAIjB,IAAI,IAAI,MAAM;IAUd,2EAA2E;IAC3E,MAAM,IAAI,OAAO;IAIjB,qFAAqF;IACrF,eAAe,IAAI,OAAO;IAM1B,sCAAsC;IACtC,SAAS,IAAI,OAAO;IAIpB,YAAY,IAAI,UAAU,GAAG,IAAI;CAOlC"}
1
+ {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/shell/screen.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAE9C,uFAAuF;AACvF,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;CACf;AAOD;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAClD,eAAO,MAAM,aAAa,QAAS,CAAC;AACpC,eAAO,MAAM,gBAAgB,uDAAwD,CAAC;AAEtF;;;;GAIG;AACH,eAAO,MAAM,eAAe,uCAAwC,CAAC;AACrE,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,QAAoC,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1E;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAG9D;AAED;;;;GAIG;AACH,qBAAa,WAAW;aAMM,IAAI;aAAwB,IAAI;IAL5D,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,UAAU,CAAc;IAChC,kGAAkG;IAClG,OAAO,CAAC,aAAa,CAAS;gBAEF,IAAI,SAAM,EAAkB,IAAI,SAAK;IAIjE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMzB,uDAAuD;IACvD,OAAO,IAAI,MAAM;IAIjB,IAAI,IAAI,MAAM;IAUd,2EAA2E;IAC3E,MAAM,IAAI,OAAO;IAIjB,qFAAqF;IACrF,eAAe,IAAI,OAAO;IAM1B,sCAAsC;IACtC,SAAS,IAAI,OAAO;IAIpB,YAAY,IAAI,UAAU,GAAG,IAAI;IAQjC;;;;;;;;;OASG;IACH,UAAU,IAAI,UAAU,EAAE,GAAG,IAAI;CAmClC"}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ScreenModel = exports.TUI_BYPASS_PERMS = exports.TUI_PROMPT_RE = exports.TUI_BUSY_MARKER = void 0;
3
+ exports.ScreenModel = exports.TUI_MENU_OPTION_RE = exports.TUI_MENU_FOOTER = exports.TUI_BYPASS_PERMS = exports.TUI_PROMPT_RE = exports.TUI_BUSY_MARKER = void 0;
4
+ exports.parseMenuChoice = parseMenuChoice;
5
+ exports.extractChannelContent = extractChannelContent;
6
+ exports.formatMenuPrompt = formatMenuPrompt;
4
7
  const headless_1 = require("@xterm/headless");
5
8
  /** The TUI renders spaces as U+00A0 (non-breaking) — normalize before matching. */
6
9
  function normalize(text) {
@@ -18,6 +21,45 @@ function normalize(text) {
18
21
  exports.TUI_BUSY_MARKER = 'esc to interrupt';
19
22
  exports.TUI_PROMPT_RE = /^❯ /m;
20
23
  exports.TUI_BYPASS_PERMS = ['Bypass Permissions mode', 'Yes, I accept'];
24
+ /**
25
+ * Interactive select-menu footer markers (e.g. AskUserQuestion). The footer reads
26
+ * "Enter to select · ↑/↓ to navigate · Esc to cancel"; we match on the two stable
27
+ * fragments so spacing/middle-dot variations across TUI versions don't break it.
28
+ */
29
+ exports.TUI_MENU_FOOTER = ['to navigate', 'to cancel'];
30
+ /** A numbered option row, with an optional leading ❯/> highlight marker. */
31
+ exports.TUI_MENU_OPTION_RE = /^\s*[❯>]?\s*(\d+)\.\s+(.+?)\s*$/;
32
+ /**
33
+ * Parse a user's menu reply (typed number or a button's choice payload) into a
34
+ * 1-based option index. Returns null for anything that isn't a leading integer
35
+ * within [1, count] — never trust chat input to be a valid selection.
36
+ */
37
+ function parseMenuChoice(text, count) {
38
+ const m = /^\s*(\d+)/.exec(text);
39
+ if (!m)
40
+ return null;
41
+ const n = Number(m[1]);
42
+ return Number.isInteger(n) && n >= 1 && n <= count ? n : null;
43
+ }
44
+ /**
45
+ * Channel turns reach the wrapper wrapped in a <channel …>…</channel> envelope
46
+ * (see AgentRunner.buildChannelXml) — even a one-character menu reply like "1"
47
+ * arrives as `<channel source="telegram" …>1</channel>`. To interpret a menu
48
+ * selection we need the user's actual text, not the envelope, so pull out the
49
+ * inner content and drop any nested <replied> block. Returns the input
50
+ * unchanged when it is not a channel envelope (e.g. a raw API/typed reply).
51
+ */
52
+ function extractChannelContent(text) {
53
+ const m = /<channel\b[^>]*>([\s\S]*)<\/channel>/.exec(text);
54
+ if (!m)
55
+ return text;
56
+ return m[1].replace(/<replied\b[^>]*>[\s\S]*?<\/replied>/g, '').trim();
57
+ }
58
+ /** Build the chat-facing menu prompt (also the API/number fallback text). */
59
+ function formatMenuPrompt(options) {
60
+ const lines = options.map((o, i) => `${i + 1}. ${o.label}`).join('\n');
61
+ return `🔢 Choose an option — tap a button below, or reply with the number:\n\n${lines}`;
62
+ }
21
63
  /**
22
64
  * Virtual terminal fed with raw PTY bytes. Used ONLY for liveness signals
23
65
  * (busy / idle / dialog detection) — assistant text is never parsed from
@@ -72,6 +114,54 @@ class ScreenModel {
72
114
  }
73
115
  return null;
74
116
  }
117
+ /**
118
+ * Detect an interactive select menu blocking on keyboard input (e.g. the
119
+ * AskUserQuestion / plan-approval prompt) and parse its numbered options.
120
+ * Returns the options in display order, or null when no menu is on screen.
121
+ *
122
+ * Requires the select-menu footer AND at least two numbered rows — ordinary
123
+ * numbered lists in assistant output never carry the footer, so this won't
124
+ * false-positive on them. The bypass-permissions dialog also matches the
125
+ * footer; callers must check detectDialog() first and let it auto-accept.
126
+ */
127
+ detectMenu() {
128
+ const text = this.text();
129
+ if (!exports.TUI_MENU_FOOTER.every((s) => text.includes(s)))
130
+ return null;
131
+ // Scan only the region ABOVE the footer — the live menu's options always
132
+ // sit between the question and the "to navigate · to cancel" footer.
133
+ const lines = text.split('\n');
134
+ const footerIdx = lines.findIndex((l) => exports.TUI_MENU_FOOTER.some((s) => l.includes(s)));
135
+ const region = footerIdx >= 0 ? lines.slice(0, footerIdx) : lines;
136
+ const matches = [];
137
+ for (const line of region) {
138
+ const m = exports.TUI_MENU_OPTION_RE.exec(line);
139
+ if (m)
140
+ matches.push({ index: Number(m[1]), label: m[2].trim() });
141
+ }
142
+ if (matches.length < 2)
143
+ return null;
144
+ // Scrollback above the menu can contain stale numbered lines (e.g. a prior
145
+ // chat message rendered as "1. … 2. …"). The real select menu always numbers
146
+ // its options 1..N in order, so take the LAST run that starts at "1." and
147
+ // increments by one — that is the live menu nearest the footer, not history.
148
+ // This run's position is what selectMenuOption() types into the TUI, so it
149
+ // MUST mirror the on-screen numbering exactly.
150
+ let start = -1;
151
+ for (let i = 0; i < matches.length; i++) {
152
+ if (matches[i].index === 1)
153
+ start = i;
154
+ }
155
+ if (start === -1)
156
+ return null;
157
+ const run = [];
158
+ let expected = 1;
159
+ for (let i = start; i < matches.length && matches[i].index === expected; i++) {
160
+ run.push(matches[i]);
161
+ expected++;
162
+ }
163
+ return run.length >= 2 ? run : null;
164
+ }
75
165
  }
76
166
  exports.ScreenModel = ScreenModel;
77
167
  //# sourceMappingURL=screen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/shell/screen.ts"],"names":[],"mappings":";;;AAAA,8CAA2C;AAI3C,mFAAmF;AACnF,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;GAQG;AACU,QAAA,eAAe,GAAG,kBAAkB,CAAC;AACrC,QAAA,aAAa,GAAG,MAAM,CAAC;AACvB,QAAA,gBAAgB,GAAG,CAAC,yBAAyB,EAAE,eAAe,CAAU,CAAC;AAEtF;;;;GAIG;AACH,MAAa,WAAW;IAMtB,YAA4B,OAAO,GAAG,EAAkB,OAAO,EAAE;QAArC,SAAI,GAAJ,IAAI,CAAM;QAAkB,SAAI,GAAJ,IAAI,CAAK;QAJzD,eAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,kGAAkG;QAC1F,kBAAa,GAAG,KAAK,CAAC;QAG5B,IAAI,CAAC,IAAI,GAAG,IAAI,mBAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uBAAe,CAAC;YAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,uDAAuD;IACvD,OAAO;QACL,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;IACtC,CAAC;IAED,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,2EAA2E;IAC3E,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,uBAAe,CAAC,CAAC;IAC/C,CAAC;IAED,qFAAqF;IACrF,eAAe;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sCAAsC;IACtC,SAAS;QACP,OAAO,qBAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,wBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAvDD,kCAuDC"}
1
+ {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/shell/screen.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Generates a self-contained HTML dashboard page for the gateway status UI.
3
- * No external dependencies all CSS and JS is inline.
3
+ * No external dependencies except xterm.js CDN for PTY viewer.
4
4
  */
5
- export declare function generateDashboardHtml(): string;
5
+ export declare function generateDashboardHtml(dashToken?: string): string;
6
6
  //# sourceMappingURL=web-ui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-ui.d.ts","sourceRoot":"","sources":["../../src/ui/web-ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA0N9C"}
1
+ {"version":3,"file":"web-ui.d.ts","sourceRoot":"","sources":["../../src/ui/web-ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,SAAK,GAAG,MAAM,CA+sB5D"}