agent-relay 0.1.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 (143) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +22 -0
  3. package/PROTOCOL.md +319 -0
  4. package/README.md +791 -0
  5. package/dist/cli/index.d.ts +7 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +1591 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/daemon/connection.d.ts +60 -0
  10. package/dist/daemon/connection.d.ts.map +1 -0
  11. package/dist/daemon/connection.js +245 -0
  12. package/dist/daemon/connection.js.map +1 -0
  13. package/dist/daemon/index.d.ts +4 -0
  14. package/dist/daemon/index.d.ts.map +1 -0
  15. package/dist/daemon/index.js +4 -0
  16. package/dist/daemon/index.js.map +1 -0
  17. package/dist/daemon/router.d.ts +72 -0
  18. package/dist/daemon/router.d.ts.map +1 -0
  19. package/dist/daemon/router.js +183 -0
  20. package/dist/daemon/router.js.map +1 -0
  21. package/dist/daemon/server.d.ts +52 -0
  22. package/dist/daemon/server.d.ts.map +1 -0
  23. package/dist/daemon/server.js +186 -0
  24. package/dist/daemon/server.js.map +1 -0
  25. package/dist/dashboard/public/index.html +690 -0
  26. package/dist/dashboard/server.d.ts +2 -0
  27. package/dist/dashboard/server.d.ts.map +1 -0
  28. package/dist/dashboard/server.js +220 -0
  29. package/dist/dashboard/server.js.map +1 -0
  30. package/dist/games/index.d.ts +2 -0
  31. package/dist/games/index.d.ts.map +1 -0
  32. package/dist/games/index.js +2 -0
  33. package/dist/games/index.js.map +1 -0
  34. package/dist/games/tictactoe.d.ts +24 -0
  35. package/dist/games/tictactoe.d.ts.map +1 -0
  36. package/dist/games/tictactoe.js +160 -0
  37. package/dist/games/tictactoe.js.map +1 -0
  38. package/dist/hooks/inbox-check/hook.d.ts +28 -0
  39. package/dist/hooks/inbox-check/hook.d.ts.map +1 -0
  40. package/dist/hooks/inbox-check/hook.js +97 -0
  41. package/dist/hooks/inbox-check/hook.js.map +1 -0
  42. package/dist/hooks/inbox-check/index.d.ts +8 -0
  43. package/dist/hooks/inbox-check/index.d.ts.map +1 -0
  44. package/dist/hooks/inbox-check/index.js +8 -0
  45. package/dist/hooks/inbox-check/index.js.map +1 -0
  46. package/dist/hooks/inbox-check/types.d.ts +31 -0
  47. package/dist/hooks/inbox-check/types.d.ts.map +1 -0
  48. package/dist/hooks/inbox-check/types.js +5 -0
  49. package/dist/hooks/inbox-check/types.js.map +1 -0
  50. package/dist/hooks/inbox-check/utils.d.ts +44 -0
  51. package/dist/hooks/inbox-check/utils.d.ts.map +1 -0
  52. package/dist/hooks/inbox-check/utils.js +107 -0
  53. package/dist/hooks/inbox-check/utils.js.map +1 -0
  54. package/dist/index.d.ts +10 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +10 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/protocol/framing.d.ts +32 -0
  59. package/dist/protocol/framing.d.ts.map +1 -0
  60. package/dist/protocol/framing.js +71 -0
  61. package/dist/protocol/framing.js.map +1 -0
  62. package/dist/protocol/index.d.ts +3 -0
  63. package/dist/protocol/index.d.ts.map +1 -0
  64. package/dist/protocol/index.js +3 -0
  65. package/dist/protocol/index.js.map +1 -0
  66. package/dist/protocol/types.d.ts +104 -0
  67. package/dist/protocol/types.d.ts.map +1 -0
  68. package/dist/protocol/types.js +6 -0
  69. package/dist/protocol/types.js.map +1 -0
  70. package/dist/state/agent-state.d.ts +40 -0
  71. package/dist/state/agent-state.d.ts.map +1 -0
  72. package/dist/state/agent-state.js +120 -0
  73. package/dist/state/agent-state.js.map +1 -0
  74. package/dist/storage/adapter.d.ts +29 -0
  75. package/dist/storage/adapter.d.ts.map +1 -0
  76. package/dist/storage/adapter.js +2 -0
  77. package/dist/storage/adapter.js.map +1 -0
  78. package/dist/storage/sqlite-adapter.d.ts +15 -0
  79. package/dist/storage/sqlite-adapter.d.ts.map +1 -0
  80. package/dist/storage/sqlite-adapter.js +116 -0
  81. package/dist/storage/sqlite-adapter.js.map +1 -0
  82. package/dist/supervisor/inbox.d.ts +38 -0
  83. package/dist/supervisor/inbox.d.ts.map +1 -0
  84. package/dist/supervisor/inbox.js +162 -0
  85. package/dist/supervisor/inbox.js.map +1 -0
  86. package/dist/supervisor/index.d.ts +10 -0
  87. package/dist/supervisor/index.d.ts.map +1 -0
  88. package/dist/supervisor/index.js +10 -0
  89. package/dist/supervisor/index.js.map +1 -0
  90. package/dist/supervisor/spawner.d.ts +54 -0
  91. package/dist/supervisor/spawner.d.ts.map +1 -0
  92. package/dist/supervisor/spawner.js +282 -0
  93. package/dist/supervisor/spawner.js.map +1 -0
  94. package/dist/supervisor/state.d.ts +132 -0
  95. package/dist/supervisor/state.d.ts.map +1 -0
  96. package/dist/supervisor/state.js +465 -0
  97. package/dist/supervisor/state.js.map +1 -0
  98. package/dist/supervisor/supervisor.d.ts +67 -0
  99. package/dist/supervisor/supervisor.d.ts.map +1 -0
  100. package/dist/supervisor/supervisor.js +263 -0
  101. package/dist/supervisor/supervisor.js.map +1 -0
  102. package/dist/supervisor/types.d.ts +139 -0
  103. package/dist/supervisor/types.d.ts.map +1 -0
  104. package/dist/supervisor/types.js +12 -0
  105. package/dist/supervisor/types.js.map +1 -0
  106. package/dist/utils/index.d.ts +2 -0
  107. package/dist/utils/index.d.ts.map +1 -0
  108. package/dist/utils/index.js +2 -0
  109. package/dist/utils/index.js.map +1 -0
  110. package/dist/utils/name-generator.d.ts +17 -0
  111. package/dist/utils/name-generator.d.ts.map +1 -0
  112. package/dist/utils/name-generator.js +52 -0
  113. package/dist/utils/name-generator.js.map +1 -0
  114. package/dist/webhook/spawner.d.ts +79 -0
  115. package/dist/webhook/spawner.d.ts.map +1 -0
  116. package/dist/webhook/spawner.js +288 -0
  117. package/dist/webhook/spawner.js.map +1 -0
  118. package/dist/wrapper/client.d.ts +72 -0
  119. package/dist/wrapper/client.d.ts.map +1 -0
  120. package/dist/wrapper/client.js +306 -0
  121. package/dist/wrapper/client.js.map +1 -0
  122. package/dist/wrapper/inbox.d.ts +37 -0
  123. package/dist/wrapper/inbox.d.ts.map +1 -0
  124. package/dist/wrapper/inbox.js +73 -0
  125. package/dist/wrapper/inbox.js.map +1 -0
  126. package/dist/wrapper/index.d.ts +4 -0
  127. package/dist/wrapper/index.d.ts.map +1 -0
  128. package/dist/wrapper/index.js +7 -0
  129. package/dist/wrapper/index.js.map +1 -0
  130. package/dist/wrapper/parser.d.ts +94 -0
  131. package/dist/wrapper/parser.d.ts.map +1 -0
  132. package/dist/wrapper/parser.js +360 -0
  133. package/dist/wrapper/parser.js.map +1 -0
  134. package/dist/wrapper/pty-wrapper.d.ts +125 -0
  135. package/dist/wrapper/pty-wrapper.d.ts.map +1 -0
  136. package/dist/wrapper/pty-wrapper.js +494 -0
  137. package/dist/wrapper/pty-wrapper.js.map +1 -0
  138. package/dist/wrapper/tmux-wrapper.d.ts +131 -0
  139. package/dist/wrapper/tmux-wrapper.d.ts.map +1 -0
  140. package/dist/wrapper/tmux-wrapper.js +427 -0
  141. package/dist/wrapper/tmux-wrapper.js.map +1 -0
  142. package/install.sh +69 -0
  143. package/package.json +82 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/wrapper/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * File-based Inbox Manager
3
+ * Writes incoming messages to a file that the CLI agent reads itself.
4
+ */
5
+ export declare const DEFAULT_INBOX_DIR = "/tmp/agent-relay";
6
+ export interface InboxConfig {
7
+ agentName: string;
8
+ inboxDir: string;
9
+ }
10
+ export declare class InboxManager {
11
+ private config;
12
+ private inboxPath;
13
+ constructor(config: Partial<InboxConfig> & {
14
+ agentName: string;
15
+ });
16
+ /**
17
+ * Initialize inbox directory and file.
18
+ */
19
+ init(): void;
20
+ /**
21
+ * Get the inbox file path (for telling the agent where to read).
22
+ */
23
+ getInboxPath(): string;
24
+ /**
25
+ * Add a message to the inbox.
26
+ */
27
+ addMessage(from: string, body: string): void;
28
+ /**
29
+ * Clear the inbox.
30
+ */
31
+ clear(): void;
32
+ /**
33
+ * Check if inbox has messages.
34
+ */
35
+ hasMessages(): boolean;
36
+ }
37
+ //# sourceMappingURL=inbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/wrapper/inbox.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,iBAAiB,qBAAqB,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;IAQhE;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAwB5C;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,WAAW,IAAI,OAAO;CAKvB"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * File-based Inbox Manager
3
+ * Writes incoming messages to a file that the CLI agent reads itself.
4
+ */
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ export const DEFAULT_INBOX_DIR = '/tmp/agent-relay';
8
+ export class InboxManager {
9
+ config;
10
+ inboxPath;
11
+ constructor(config) {
12
+ this.config = {
13
+ inboxDir: DEFAULT_INBOX_DIR,
14
+ ...config,
15
+ };
16
+ this.inboxPath = path.join(this.config.inboxDir, this.config.agentName, 'inbox.md');
17
+ }
18
+ /**
19
+ * Initialize inbox directory and file.
20
+ */
21
+ init() {
22
+ const dir = path.dirname(this.inboxPath);
23
+ if (!fs.existsSync(dir)) {
24
+ fs.mkdirSync(dir, { recursive: true });
25
+ }
26
+ // Start with empty inbox
27
+ this.clear();
28
+ }
29
+ /**
30
+ * Get the inbox file path (for telling the agent where to read).
31
+ */
32
+ getInboxPath() {
33
+ return this.inboxPath;
34
+ }
35
+ /**
36
+ * Add a message to the inbox.
37
+ */
38
+ addMessage(from, body) {
39
+ const timestamp = new Date().toISOString();
40
+ const entry = `\n## Message from ${from} | ${timestamp}\n${body}\n`;
41
+ // Read existing content
42
+ let content = '';
43
+ if (fs.existsSync(this.inboxPath)) {
44
+ content = fs.readFileSync(this.inboxPath, 'utf-8');
45
+ }
46
+ // If empty, add header
47
+ if (!content.trim()) {
48
+ content = `# 📬 INBOX - CHECK AND RESPOND TO ALL MESSAGES\n`;
49
+ }
50
+ // Append new message
51
+ content += entry;
52
+ // Atomic write (write to temp, then rename)
53
+ const tmpPath = `${this.inboxPath}.tmp`;
54
+ fs.writeFileSync(tmpPath, content, 'utf-8');
55
+ fs.renameSync(tmpPath, this.inboxPath);
56
+ }
57
+ /**
58
+ * Clear the inbox.
59
+ */
60
+ clear() {
61
+ fs.writeFileSync(this.inboxPath, '', 'utf-8');
62
+ }
63
+ /**
64
+ * Check if inbox has messages.
65
+ */
66
+ hasMessages() {
67
+ if (!fs.existsSync(this.inboxPath))
68
+ return false;
69
+ const content = fs.readFileSync(this.inboxPath, 'utf-8');
70
+ return content.includes('## Message from');
71
+ }
72
+ }
73
+ //# sourceMappingURL=inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/wrapper/inbox.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAOpD,MAAM,OAAO,YAAY;IACf,MAAM,CAAc;IACpB,SAAS,CAAS;IAE1B,YAAY,MAAoD;QAC9D,IAAI,CAAC,MAAM,GAAG;YACZ,QAAQ,EAAE,iBAAiB;YAC3B,GAAG,MAAM;SACV,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,yBAAyB;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY,EAAE,IAAY;QACnC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,qBAAqB,IAAI,MAAM,SAAS,KAAK,IAAI,IAAI,CAAC;QAEpE,wBAAwB;QACxB,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACpB,OAAO,GAAG,kDAAkD,CAAC;QAC/D,CAAC;QAED,qBAAqB;QACrB,OAAO,IAAI,KAAK,CAAC;QAEjB,4CAA4C;QAC5C,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,MAAM,CAAC;QACxC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export * from './client.js';
2
+ export * from './parser.js';
3
+ export * from './pty-wrapper.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wrapper/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './client.js';
2
+ export * from './parser.js';
3
+ export * from './pty-wrapper.js';
4
+ // Note: tmux-wrapper.ts is intentionally not exported here.
5
+ // It's dynamically imported in CLI only when --tmux2 flag is used,
6
+ // as it has different runtime requirements (tmux must be installed).
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wrapper/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,4DAA4D;AAC5D,mEAAmE;AACnE,qEAAqE"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * PTY Output Parser
3
+ * Extracts relay commands from agent terminal output.
4
+ *
5
+ * Supports two formats:
6
+ * 1. Inline: @relay:<target> <message> (single line, start of line only)
7
+ * 2. Block: [[RELAY]]{ json }[[/RELAY]] (multi-line, structured)
8
+ *
9
+ * Rules:
10
+ * - Inline only matches at start of line (after whitespace)
11
+ * - Ignores content inside code fences
12
+ * - Escape with \@relay: to output literal
13
+ * - Block format is preferred for structured data
14
+ */
15
+ import type { PayloadKind } from '../protocol/types.js';
16
+ export interface ParsedCommand {
17
+ to: string;
18
+ kind: PayloadKind;
19
+ body: string;
20
+ data?: Record<string, unknown>;
21
+ raw: string;
22
+ }
23
+ export interface ParserOptions {
24
+ maxBlockBytes?: number;
25
+ enableInline?: boolean;
26
+ enableBlock?: boolean;
27
+ }
28
+ export declare class OutputParser {
29
+ private options;
30
+ private inCodeFence;
31
+ private inBlock;
32
+ private blockBuffer;
33
+ constructor(options?: ParserOptions);
34
+ /**
35
+ * Push data into the parser and extract commands.
36
+ * Returns array of parsed commands and cleaned output.
37
+ *
38
+ * Design: Pass through data with minimal buffering to preserve terminal rendering.
39
+ * Only buffer content when inside [[RELAY]]...[[/RELAY]] blocks.
40
+ */
41
+ parse(data: string): {
42
+ commands: ParsedCommand[];
43
+ output: string;
44
+ };
45
+ /**
46
+ * Find [[RELAY]] that's at the start of a line and not inside a code fence.
47
+ * Returns the index, or -1 if not found.
48
+ */
49
+ private findBlockStart;
50
+ /**
51
+ * Parse data in pass-through mode - TRUE pass-through for terminal rendering.
52
+ * Output is exactly the input data, minus any relay command lines found in this chunk.
53
+ * No cross-chunk buffering to avoid double-output issues.
54
+ *
55
+ * IMPORTANT: We ONLY parse complete lines (i.e. those terminated by `\n` in the
56
+ * current chunk). The final unterminated line (if any) is passed through without
57
+ * parsing. This intentionally avoids cross-chunk detection when a line is split
58
+ * across chunks.
59
+ */
60
+ private parsePassThrough;
61
+ /**
62
+ * Parse while inside a [[RELAY]] block - buffer until we see [[/RELAY]].
63
+ */
64
+ private parseInBlockMode;
65
+ /**
66
+ * Process a single complete line for inline relay commands.
67
+ * Block handling is done at the parse() level, not here.
68
+ *
69
+ * IMPORTANT: We strip ANSI codes for pattern matching, but preserve
70
+ * the original line for output to maintain terminal rendering.
71
+ */
72
+ private processLine;
73
+ /**
74
+ * Finish processing a block and extract command.
75
+ * Returns the command (if valid) and any remaining content after [[/RELAY]].
76
+ */
77
+ private finishBlock;
78
+ /**
79
+ * Flush any remaining buffer (call on stream end).
80
+ */
81
+ flush(): {
82
+ commands: ParsedCommand[];
83
+ output: string;
84
+ };
85
+ /**
86
+ * Reset parser state.
87
+ */
88
+ reset(): void;
89
+ }
90
+ /**
91
+ * Format a relay command for injection into agent input.
92
+ */
93
+ export declare function formatIncomingMessage(from: string, body: string, kind?: PayloadKind): string;
94
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/wrapper/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA2BD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAM;gBAEb,OAAO,GAAE,aAAkB;IAIvC;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAyDlE;;;OAGG;IACH,OAAO,CAAC,cAAc;IA2DtB;;;;;;;;;OASG;IACH,OAAO,CAAC,gBAAgB;IA0DxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiCxB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IA0DnB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAiCnB;;OAEG;IACH,KAAK,IAAI;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAQtD;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAuB,GAAG,MAAM,CAGvG"}
@@ -0,0 +1,360 @@
1
+ /**
2
+ * PTY Output Parser
3
+ * Extracts relay commands from agent terminal output.
4
+ *
5
+ * Supports two formats:
6
+ * 1. Inline: @relay:<target> <message> (single line, start of line only)
7
+ * 2. Block: [[RELAY]]{ json }[[/RELAY]] (multi-line, structured)
8
+ *
9
+ * Rules:
10
+ * - Inline only matches at start of line (after whitespace)
11
+ * - Ignores content inside code fences
12
+ * - Escape with \@relay: to output literal
13
+ * - Block format is preferred for structured data
14
+ */
15
+ const DEFAULT_OPTIONS = {
16
+ maxBlockBytes: 1024 * 1024, // 1 MiB
17
+ enableInline: true,
18
+ enableBlock: true,
19
+ };
20
+ // Patterns
21
+ // Allow common input prefixes: >, $, %, #, →, ➜, bullets (●•◦‣⁃-*⏺◆◇○□■), and their variations
22
+ const INLINE_RELAY = /^(?:\s*(?:[>$%#→➜›»●•◦‣⁃\-*⏺◆◇○□■]\s*)*)?@relay:(\S+)\s+(.+)$/;
23
+ const INLINE_THINKING = /^(?:\s*(?:[>$%#→➜›»●•◦‣⁃\-*⏺◆◇○□■]\s*)*)?@thinking:(\S+)\s+(.+)$/;
24
+ const BLOCK_END = /\[\[\/RELAY\]\]/;
25
+ const CODE_FENCE = /^```/;
26
+ const ESCAPE_PREFIX = /^(\s*)\\@(relay|thinking):/;
27
+ // ANSI escape sequence pattern for stripping
28
+ // eslint-disable-next-line no-control-regex
29
+ const ANSI_PATTERN = /\x1b\[[0-9;?]*[a-zA-Z]|\x1b\].*?(?:\x07|\x1b\\)|\r/g;
30
+ /**
31
+ * Strip ANSI escape codes from a string for pattern matching.
32
+ */
33
+ function stripAnsi(str) {
34
+ return str.replace(ANSI_PATTERN, '');
35
+ }
36
+ export class OutputParser {
37
+ options;
38
+ inCodeFence = false;
39
+ inBlock = false;
40
+ blockBuffer = '';
41
+ constructor(options = {}) {
42
+ this.options = { ...DEFAULT_OPTIONS, ...options };
43
+ }
44
+ /**
45
+ * Push data into the parser and extract commands.
46
+ * Returns array of parsed commands and cleaned output.
47
+ *
48
+ * Design: Pass through data with minimal buffering to preserve terminal rendering.
49
+ * Only buffer content when inside [[RELAY]]...[[/RELAY]] blocks.
50
+ */
51
+ parse(data) {
52
+ const commands = [];
53
+ let output = '';
54
+ // If we're inside a block, accumulate until we see the end
55
+ if (this.inBlock) {
56
+ return this.parseInBlockMode(data, commands);
57
+ }
58
+ // Find [[RELAY]] that's at the start of a line (or start of input)
59
+ // and NOT inside a code fence
60
+ const blockStartIdx = this.findBlockStart(data);
61
+ if (this.options.enableBlock && blockStartIdx !== -1) {
62
+ const before = data.substring(0, blockStartIdx);
63
+ const after = data.substring(blockStartIdx + '[[RELAY]]'.length);
64
+ // Output everything before the block start
65
+ if (before) {
66
+ const beforeResult = this.parsePassThrough(before, commands);
67
+ output += beforeResult;
68
+ }
69
+ // Enter block mode
70
+ this.inBlock = true;
71
+ this.blockBuffer = after;
72
+ // Check size limit before processing
73
+ if (this.blockBuffer.length > this.options.maxBlockBytes) {
74
+ console.error('[parser] Block too large, discarding');
75
+ this.inBlock = false;
76
+ this.blockBuffer = '';
77
+ return { commands, output };
78
+ }
79
+ // Check if block ends in same chunk
80
+ if (BLOCK_END.test(this.blockBuffer)) {
81
+ const blockResult = this.finishBlock();
82
+ if (blockResult.command) {
83
+ commands.push(blockResult.command);
84
+ }
85
+ if (blockResult.remaining) {
86
+ // Recursively parse anything after the block
87
+ const afterResult = this.parse(blockResult.remaining);
88
+ commands.push(...afterResult.commands);
89
+ output += afterResult.output;
90
+ }
91
+ }
92
+ return { commands, output };
93
+ }
94
+ // Pass-through mode: output data immediately, only parse complete lines for relay commands
95
+ output = this.parsePassThrough(data, commands);
96
+ return { commands, output };
97
+ }
98
+ /**
99
+ * Find [[RELAY]] that's at the start of a line and not inside a code fence.
100
+ * Returns the index, or -1 if not found.
101
+ */
102
+ findBlockStart(data) {
103
+ // Track code fence state through the data
104
+ let inFence = this.inCodeFence;
105
+ let searchStart = 0;
106
+ while (searchStart < data.length) {
107
+ // Look for next [[RELAY]] or code fence
108
+ const relayIdx = data.indexOf('[[RELAY]]', searchStart);
109
+ const fenceIdx = data.indexOf('```', searchStart);
110
+ // No more [[RELAY]] found
111
+ if (relayIdx === -1) {
112
+ // Still update code fence state for remaining data
113
+ while (fenceIdx !== -1) {
114
+ const nextFence = data.indexOf('```', searchStart);
115
+ if (nextFence === -1)
116
+ break;
117
+ inFence = !inFence;
118
+ searchStart = nextFence + 3;
119
+ }
120
+ return -1;
121
+ }
122
+ // Process any code fences before this [[RELAY]]
123
+ let tempIdx = searchStart;
124
+ while (true) {
125
+ const nextFence = data.indexOf('```', tempIdx);
126
+ if (nextFence === -1 || nextFence >= relayIdx)
127
+ break;
128
+ inFence = !inFence;
129
+ tempIdx = nextFence + 3;
130
+ }
131
+ // If we're inside a code fence, skip this [[RELAY]]
132
+ if (inFence) {
133
+ searchStart = relayIdx + 9; // Skip past [[RELAY]]
134
+ continue;
135
+ }
136
+ // Check if [[RELAY]] is at start of a line
137
+ if (relayIdx === 0) {
138
+ return 0; // At very start
139
+ }
140
+ // Look backwards for the start of line
141
+ const beforeRelay = data.substring(0, relayIdx);
142
+ const lastNewline = beforeRelay.lastIndexOf('\n');
143
+ const lineStart = beforeRelay.substring(lastNewline + 1);
144
+ // Must be only whitespace before [[RELAY]] on this line
145
+ if (/^\s*$/.test(lineStart)) {
146
+ return relayIdx;
147
+ }
148
+ // Not at start of line, keep searching
149
+ searchStart = relayIdx + 9;
150
+ }
151
+ return -1;
152
+ }
153
+ /**
154
+ * Parse data in pass-through mode - TRUE pass-through for terminal rendering.
155
+ * Output is exactly the input data, minus any relay command lines found in this chunk.
156
+ * No cross-chunk buffering to avoid double-output issues.
157
+ *
158
+ * IMPORTANT: We ONLY parse complete lines (i.e. those terminated by `\n` in the
159
+ * current chunk). The final unterminated line (if any) is passed through without
160
+ * parsing. This intentionally avoids cross-chunk detection when a line is split
161
+ * across chunks.
162
+ */
163
+ parsePassThrough(data, commands) {
164
+ // Simple approach: split data, check each line (complete or not), rebuild output
165
+ const lines = data.split('\n');
166
+ const hasTrailingNewline = data.endsWith('\n');
167
+ const outputLines = [];
168
+ let strippedCount = 0;
169
+ for (let i = 0; i < lines.length; i++) {
170
+ const line = lines[i];
171
+ const isLastLine = i === lines.length - 1;
172
+ // Skip the empty string after a trailing newline
173
+ if (isLastLine && hasTrailingNewline && line === '') {
174
+ continue;
175
+ }
176
+ // If the chunk does NOT end in a newline, the last line is incomplete.
177
+ // Pass it through unmodified and do not attempt to parse it.
178
+ if (isLastLine && !hasTrailingNewline) {
179
+ outputLines.push(line);
180
+ continue;
181
+ }
182
+ if (line.length > 0) {
183
+ // Only check complete lines for relay commands.
184
+ const result = this.processLine(line);
185
+ if (result.command) {
186
+ commands.push(result.command);
187
+ }
188
+ if (result.output !== null) {
189
+ outputLines.push(result.output);
190
+ }
191
+ else {
192
+ // Line was stripped (relay command)
193
+ strippedCount++;
194
+ }
195
+ }
196
+ else {
197
+ // Empty line - preserve it
198
+ outputLines.push('');
199
+ }
200
+ }
201
+ // Rebuild output
202
+ if (outputLines.length === 0 && strippedCount > 0) {
203
+ // All lines were relay commands - return empty
204
+ return '';
205
+ }
206
+ let output = outputLines.join('\n');
207
+ // Add trailing newline if original had one AND we have content
208
+ if (hasTrailingNewline && outputLines.length > 0) {
209
+ output += '\n';
210
+ }
211
+ return output;
212
+ }
213
+ /**
214
+ * Parse while inside a [[RELAY]] block - buffer until we see [[/RELAY]].
215
+ */
216
+ parseInBlockMode(data, commands) {
217
+ this.blockBuffer += data;
218
+ // Check size limit
219
+ if (this.blockBuffer.length > this.options.maxBlockBytes) {
220
+ console.error('[parser] Block too large, discarding');
221
+ this.inBlock = false;
222
+ this.blockBuffer = '';
223
+ return { commands, output: '' };
224
+ }
225
+ // Check for block end
226
+ if (BLOCK_END.test(this.blockBuffer)) {
227
+ const result = this.finishBlock();
228
+ if (result.command) {
229
+ commands.push(result.command);
230
+ }
231
+ let output = '';
232
+ if (result.remaining) {
233
+ // Recursively parse anything after the block
234
+ const afterResult = this.parse(result.remaining);
235
+ commands.push(...afterResult.commands);
236
+ output = afterResult.output;
237
+ }
238
+ return { commands, output };
239
+ }
240
+ // Still inside block, no output yet
241
+ return { commands, output: '' };
242
+ }
243
+ /**
244
+ * Process a single complete line for inline relay commands.
245
+ * Block handling is done at the parse() level, not here.
246
+ *
247
+ * IMPORTANT: We strip ANSI codes for pattern matching, but preserve
248
+ * the original line for output to maintain terminal rendering.
249
+ */
250
+ processLine(line) {
251
+ // Strip ANSI codes for pattern matching
252
+ const stripped = stripAnsi(line);
253
+ // Handle code fences
254
+ if (CODE_FENCE.test(stripped)) {
255
+ this.inCodeFence = !this.inCodeFence;
256
+ return { command: null, output: line };
257
+ }
258
+ // Inside code fence - pass through
259
+ if (this.inCodeFence) {
260
+ return { command: null, output: line };
261
+ }
262
+ // Check for escaped inline (on stripped text)
263
+ const escapeMatch = stripped.match(ESCAPE_PREFIX);
264
+ if (escapeMatch) {
265
+ // Output with escape removed
266
+ const unescaped = line.replace(/\\@/, '@');
267
+ return { command: null, output: unescaped };
268
+ }
269
+ // Check for inline relay (on stripped text)
270
+ if (this.options.enableInline) {
271
+ const relayMatch = stripped.match(INLINE_RELAY);
272
+ if (relayMatch) {
273
+ const [raw, target, body] = relayMatch;
274
+ return {
275
+ command: {
276
+ to: target,
277
+ kind: 'message',
278
+ body,
279
+ raw,
280
+ },
281
+ output: null, // Don't output relay commands
282
+ };
283
+ }
284
+ const thinkingMatch = stripped.match(INLINE_THINKING);
285
+ if (thinkingMatch) {
286
+ const [raw, target, body] = thinkingMatch;
287
+ return {
288
+ command: {
289
+ to: target,
290
+ kind: 'thinking',
291
+ body,
292
+ raw,
293
+ },
294
+ output: null,
295
+ };
296
+ }
297
+ }
298
+ // Regular line
299
+ return { command: null, output: line };
300
+ }
301
+ /**
302
+ * Finish processing a block and extract command.
303
+ * Returns the command (if valid) and any remaining content after [[/RELAY]].
304
+ */
305
+ finishBlock() {
306
+ const endIdx = this.blockBuffer.indexOf('[[/RELAY]]');
307
+ const jsonStr = this.blockBuffer.substring(0, endIdx).trim();
308
+ const remaining = this.blockBuffer.substring(endIdx + '[[/RELAY]]'.length) || null;
309
+ this.inBlock = false;
310
+ this.blockBuffer = '';
311
+ try {
312
+ const parsed = JSON.parse(jsonStr);
313
+ // Validate required fields
314
+ if (!parsed.to || !parsed.type) {
315
+ console.error('[parser] Block missing required fields (to, type)');
316
+ return { command: null, remaining };
317
+ }
318
+ return {
319
+ command: {
320
+ to: parsed.to,
321
+ kind: parsed.type,
322
+ body: parsed.body ?? parsed.text ?? '',
323
+ data: parsed.data,
324
+ raw: jsonStr,
325
+ },
326
+ remaining,
327
+ };
328
+ }
329
+ catch (err) {
330
+ console.error('[parser] Invalid JSON in block:', err);
331
+ return { command: null, remaining };
332
+ }
333
+ }
334
+ /**
335
+ * Flush any remaining buffer (call on stream end).
336
+ */
337
+ flush() {
338
+ const result = this.parse('\n');
339
+ this.inBlock = false;
340
+ this.blockBuffer = '';
341
+ this.inCodeFence = false;
342
+ return result;
343
+ }
344
+ /**
345
+ * Reset parser state.
346
+ */
347
+ reset() {
348
+ this.inBlock = false;
349
+ this.blockBuffer = '';
350
+ this.inCodeFence = false;
351
+ }
352
+ }
353
+ /**
354
+ * Format a relay command for injection into agent input.
355
+ */
356
+ export function formatIncomingMessage(from, body, kind = 'message') {
357
+ const prefix = kind === 'thinking' ? '[THINKING]' : '[MSG]';
358
+ return `\n${prefix} from ${from}: ${body}\n`;
359
+ }
360
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/wrapper/parser.ts"],"names":[],"mappings":"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"}