@agentmeshhq/agent 0.4.15 → 0.4.18

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 (111) hide show
  1. package/dist/__tests__/bootstrap.test.js +24 -0
  2. package/dist/__tests__/bootstrap.test.js.map +1 -1
  3. package/dist/__tests__/injection-verify.test.d.ts +1 -0
  4. package/dist/__tests__/injection-verify.test.js +93 -0
  5. package/dist/__tests__/injection-verify.test.js.map +1 -0
  6. package/dist/__tests__/injector.test.js +115 -1
  7. package/dist/__tests__/injector.test.js.map +1 -1
  8. package/dist/__tests__/lead-loop.test.d.ts +1 -0
  9. package/dist/__tests__/lead-loop.test.js +170 -0
  10. package/dist/__tests__/lead-loop.test.js.map +1 -0
  11. package/dist/__tests__/relay.test.d.ts +1 -0
  12. package/dist/__tests__/relay.test.js +17 -0
  13. package/dist/__tests__/relay.test.js.map +1 -0
  14. package/dist/__tests__/roles.test.d.ts +1 -0
  15. package/dist/__tests__/roles.test.js +78 -0
  16. package/dist/__tests__/roles.test.js.map +1 -0
  17. package/dist/__tests__/runner.test.js +17 -0
  18. package/dist/__tests__/runner.test.js.map +1 -1
  19. package/dist/__tests__/session-recovery.test.js +214 -11
  20. package/dist/__tests__/session-recovery.test.js.map +1 -1
  21. package/dist/__tests__/start-team-id.test.js +8 -3
  22. package/dist/__tests__/start-team-id.test.js.map +1 -1
  23. package/dist/__tests__/startup-diagnostics.test.d.ts +1 -0
  24. package/dist/__tests__/startup-diagnostics.test.js +250 -0
  25. package/dist/__tests__/startup-diagnostics.test.js.map +1 -0
  26. package/dist/__tests__/tmux-runtime.test.js +13 -0
  27. package/dist/__tests__/tmux-runtime.test.js.map +1 -1
  28. package/dist/__tests__/watcher-queue.test.d.ts +1 -0
  29. package/dist/__tests__/watcher-queue.test.js +85 -0
  30. package/dist/__tests__/watcher-queue.test.js.map +1 -0
  31. package/dist/__tests__/watcher-state.test.d.ts +1 -0
  32. package/dist/__tests__/watcher-state.test.js +159 -0
  33. package/dist/__tests__/watcher-state.test.js.map +1 -0
  34. package/dist/cli/commands.d.ts +32 -0
  35. package/dist/cli/commands.js +165 -0
  36. package/dist/cli/commands.js.map +1 -0
  37. package/dist/cli/index.js +95 -5
  38. package/dist/cli/index.js.map +1 -1
  39. package/dist/cli/relay.d.ts +1 -0
  40. package/dist/cli/relay.js +16 -2
  41. package/dist/cli/relay.js.map +1 -1
  42. package/dist/cli/start.d.ts +2 -0
  43. package/dist/cli/start.js +42 -7
  44. package/dist/cli/start.js.map +1 -1
  45. package/dist/config/schema.d.ts +1 -1
  46. package/dist/core/chat-output-parser.d.ts +24 -0
  47. package/dist/core/chat-output-parser.js +134 -0
  48. package/dist/core/chat-output-parser.js.map +1 -0
  49. package/dist/core/chat-output-parser.test.d.ts +7 -0
  50. package/dist/core/chat-output-parser.test.js +130 -0
  51. package/dist/core/chat-output-parser.test.js.map +1 -0
  52. package/dist/core/daemon/bootstrap.js +14 -4
  53. package/dist/core/daemon/bootstrap.js.map +1 -1
  54. package/dist/core/daemon/context-template.d.ts +5 -1
  55. package/dist/core/daemon/context-template.js +16 -2
  56. package/dist/core/daemon/context-template.js.map +1 -1
  57. package/dist/core/daemon/crash-log.js +5 -0
  58. package/dist/core/daemon/crash-log.js.map +1 -1
  59. package/dist/core/daemon/injection-verify.d.ts +25 -0
  60. package/dist/core/daemon/injection-verify.js +94 -0
  61. package/dist/core/daemon/injection-verify.js.map +1 -0
  62. package/dist/core/daemon/lead-loop.d.ts +22 -0
  63. package/dist/core/daemon/lead-loop.js +155 -0
  64. package/dist/core/daemon/lead-loop.js.map +1 -0
  65. package/dist/core/daemon/roles.d.ts +25 -0
  66. package/dist/core/daemon/roles.js +46 -0
  67. package/dist/core/daemon/roles.js.map +1 -0
  68. package/dist/core/daemon/session-recovery.d.ts +18 -1
  69. package/dist/core/daemon/session-recovery.js +89 -5
  70. package/dist/core/daemon/session-recovery.js.map +1 -1
  71. package/dist/core/daemon/startup-diagnostics.d.ts +76 -0
  72. package/dist/core/daemon/startup-diagnostics.js +277 -0
  73. package/dist/core/daemon/startup-diagnostics.js.map +1 -0
  74. package/dist/core/daemon/watcher-loop.d.ts +27 -0
  75. package/dist/core/daemon/watcher-loop.js +134 -0
  76. package/dist/core/daemon/watcher-loop.js.map +1 -0
  77. package/dist/core/daemon/watcher-queue.d.ts +33 -0
  78. package/dist/core/daemon/watcher-queue.js +71 -0
  79. package/dist/core/daemon/watcher-queue.js.map +1 -0
  80. package/dist/core/daemon/watcher-state.d.ts +66 -0
  81. package/dist/core/daemon/watcher-state.js +151 -0
  82. package/dist/core/daemon/watcher-state.js.map +1 -0
  83. package/dist/core/daemon.d.ts +14 -0
  84. package/dist/core/daemon.js +182 -3
  85. package/dist/core/daemon.js.map +1 -1
  86. package/dist/core/injector.js +198 -1
  87. package/dist/core/injector.js.map +1 -1
  88. package/dist/core/registry.d.ts +5 -0
  89. package/dist/core/registry.js +19 -0
  90. package/dist/core/registry.js.map +1 -1
  91. package/dist/core/runner/build.js +7 -31
  92. package/dist/core/runner/build.js.map +1 -1
  93. package/dist/core/runner/detect.js +2 -8
  94. package/dist/core/runner/detect.js.map +1 -1
  95. package/dist/core/runner/index.d.ts +3 -1
  96. package/dist/core/runner/index.js +2 -0
  97. package/dist/core/runner/index.js.map +1 -1
  98. package/dist/core/runner/kimi-models.d.ts +4 -0
  99. package/dist/core/runner/kimi-models.js +24 -0
  100. package/dist/core/runner/kimi-models.js.map +1 -0
  101. package/dist/core/runner/registry.d.ts +3 -0
  102. package/dist/core/runner/registry.js +75 -0
  103. package/dist/core/runner/registry.js.map +1 -0
  104. package/dist/core/runner/types.d.ts +17 -1
  105. package/dist/core/tmux-runtime.d.ts +1 -1
  106. package/dist/core/tmux-runtime.js +13 -0
  107. package/dist/core/tmux-runtime.js.map +1 -1
  108. package/dist/core/tmux.d.ts +4 -0
  109. package/dist/core/tmux.js +49 -11
  110. package/dist/core/tmux.js.map +1 -1
  111. package/package.json +1 -1
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Extracts clean LLM reply from raw tmux capture.
3
+ *
4
+ * Raw tmux output includes:
5
+ * - Welcome screen with logo
6
+ * - Prompt characters (❯ for input, ⏺ for output)
7
+ * - ANSI escape codes for colors/formatting
8
+ * - Box-drawing characters
9
+ *
10
+ * This parser identifies the LLM's response block and strips all chrome.
11
+ */
12
+ /**
13
+ * Remove ANSI escape codes (colors, formatting, etc.)
14
+ */
15
+ function stripAnsiCodes(text) {
16
+ // Match ESC[ ... (letter|number) patterns
17
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: ESC is needed for ANSI parsing
18
+ return text.replace(/\u001b\[[0-9;]*[a-zA-Z]/g, "");
19
+ }
20
+ /**
21
+ * Check if a line is tmux chrome (logo, box-drawing, etc.)
22
+ */
23
+ function isTmuxChrome(line) {
24
+ const trimmed = line.trim();
25
+ // Empty lines are not chrome
26
+ if (trimmed.length === 0)
27
+ return false;
28
+ // Claude Code logo lines (▐▛███▜▌, ▝▜█████▛▘, etc.)
29
+ if (/^[▐▛███▜▌▝█]*\s*Claude Code/.test(trimmed))
30
+ return true;
31
+ if (/^[▛███▜▌▝█]*\s*Haiku|Sonnet|Opus|Claude/.test(trimmed))
32
+ return true;
33
+ if (/^[▘▝]*\s*$/.test(trimmed))
34
+ return true;
35
+ // Pure box drawing / special characters
36
+ if (/^[╔╗╚╝═║├┤┬┴┼▐▛███▜▌▝█\s]*$/.test(trimmed))
37
+ return true;
38
+ return false;
39
+ }
40
+ /**
41
+ * Check if a line starts with a prompt character.
42
+ * ❯ = input prompt (user's message follows)
43
+ * ⏺ = output prompt (LLM's response follows)
44
+ */
45
+ function getPromptType(line) {
46
+ const trimmed = line.trim();
47
+ if (trimmed.startsWith("❯"))
48
+ return "input";
49
+ if (trimmed.startsWith("⏺"))
50
+ return "output";
51
+ return null;
52
+ }
53
+ /**
54
+ * Extract the message content after a prompt character.
55
+ * Removes the prompt character and leading/trailing whitespace.
56
+ */
57
+ function extractMessageAfterPrompt(line) {
58
+ const trimmed = line.trim();
59
+ // Remove ❯ or ⏺ and following space(s)
60
+ return trimmed.replace(/^[❯⏺]\s+/, "").trim();
61
+ }
62
+ /**
63
+ * Main parser: extract clean LLM reply from raw tmux capture.
64
+ *
65
+ * Strategy:
66
+ * 1. Split into lines
67
+ * 2. Remove ANSI codes
68
+ * 3. Find all prompt lines (input ❯ and output ⏺)
69
+ * 4. Locate the last output prompt (⏺)
70
+ * 5. Extract content from that prompt until the next input prompt (❯)
71
+ *
72
+ * Returns the clean reply text, or empty string if no reply found.
73
+ */
74
+ export function extractLLMReply(rawOutput) {
75
+ if (!rawOutput || rawOutput.trim().length === 0) {
76
+ return "";
77
+ }
78
+ const lines = rawOutput.split("\n");
79
+ // Step 1: Remove ANSI codes and filter out tmux chrome
80
+ const cleaned = [];
81
+ for (const line of lines) {
82
+ const noAnsi = stripAnsiCodes(line);
83
+ if (isTmuxChrome(noAnsi)) {
84
+ // Skip pure chrome lines, but keep track of them in the array
85
+ continue;
86
+ }
87
+ const promptType = getPromptType(noAnsi);
88
+ cleaned.push({
89
+ original: line,
90
+ text: noAnsi,
91
+ promptType,
92
+ });
93
+ }
94
+ // Step 2: Find the last output prompt (⏺)
95
+ let lastOutputIdx = -1;
96
+ for (let i = cleaned.length - 1; i >= 0; i--) {
97
+ if (cleaned[i].promptType === "output") {
98
+ lastOutputIdx = i;
99
+ break;
100
+ }
101
+ }
102
+ if (lastOutputIdx === -1) {
103
+ // No output prompt found — maybe the response hasn't started yet
104
+ return "";
105
+ }
106
+ // Step 3: Extract content starting from the output prompt
107
+ const replyLines = [];
108
+ // Add the message from the output prompt line
109
+ const firstMsg = extractMessageAfterPrompt(cleaned[lastOutputIdx].text);
110
+ if (firstMsg) {
111
+ replyLines.push(firstMsg);
112
+ }
113
+ // Step 4: Continue collecting lines until the next input prompt (❯) or end of buffer
114
+ for (let i = lastOutputIdx + 1; i < cleaned.length; i++) {
115
+ if (cleaned[i].promptType === "input") {
116
+ // Stop at the next input prompt
117
+ break;
118
+ }
119
+ // If this line has a prompt marker but it's not an input, skip the marker
120
+ if (cleaned[i].promptType === "output") {
121
+ const msg = extractMessageAfterPrompt(cleaned[i].text);
122
+ if (msg) {
123
+ replyLines.push(msg);
124
+ }
125
+ }
126
+ else {
127
+ // Regular continuation line
128
+ replyLines.push(cleaned[i].text.trim());
129
+ }
130
+ }
131
+ // Step 5: Join and return
132
+ return replyLines.join("\n").trim();
133
+ }
134
+ //# sourceMappingURL=chat-output-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-output-parser.js","sourceRoot":"","sources":["../../src/core/chat-output-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for chat-output-parser (GH-891 Phase 1)
3
+ *
4
+ * Tests extraction of clean LLM replies from raw tmux capture,
5
+ * including removal of ANSI codes, prompt characters, and tmux chrome.
6
+ */
7
+ export {};
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Unit tests for chat-output-parser (GH-891 Phase 1)
3
+ *
4
+ * Tests extraction of clean LLM replies from raw tmux capture,
5
+ * including removal of ANSI codes, prompt characters, and tmux chrome.
6
+ */
7
+ import assert from "node:assert/strict";
8
+ import test from "node:test";
9
+ import { extractLLMReply } from "./chat-output-parser.js";
10
+ test("extractLLMReply - basic reply extraction", () => {
11
+ const raw = `▐▛███▜▌ Claude Code v2.1.88
12
+ ▝▜█████▛▘ Haiku 4.5 with high effort · Claude Max
13
+ ▘▘ ▝▝ ~/Dev/agentmesh-mesh-dev-2
14
+
15
+ ❯ [AgentMesh] Connected and ready...
16
+ ⏺ Ready and connected. I understand the system...
17
+ ❯ ping - test chat
18
+ ⏺ Pong. Chat is live and connected. Ready to assist.
19
+ ❯ `;
20
+ const result = extractLLMReply(raw);
21
+ assert.strictEqual(result, "Pong. Chat is live and connected. Ready to assist.");
22
+ });
23
+ test("extractLLMReply - multi-line response", () => {
24
+ const raw = `❯ tell me a story
25
+ ⏺ Once upon a time,
26
+ there was a kingdom.
27
+ ❯ `;
28
+ const result = extractLLMReply(raw);
29
+ assert.strictEqual(result, "Once upon a time,\nthere was a kingdom.");
30
+ });
31
+ test("extractLLMReply - strips ANSI codes", () => {
32
+ const raw = `❯ hello
33
+ ⏺ \x1b[32mGreen\x1b[0m text
34
+ ❯ `;
35
+ const result = extractLLMReply(raw);
36
+ assert.strictEqual(result, "Green text");
37
+ });
38
+ test("extractLLMReply - handles empty input", () => {
39
+ const result = extractLLMReply("");
40
+ assert.strictEqual(result, "");
41
+ });
42
+ test("extractLLMReply - handles whitespace-only input", () => {
43
+ const result = extractLLMReply(" \n \n ");
44
+ assert.strictEqual(result, "");
45
+ });
46
+ test("extractLLMReply - no output prompt found", () => {
47
+ const raw = `❯ hello
48
+ some random text`;
49
+ const result = extractLLMReply(raw);
50
+ assert.strictEqual(result, "");
51
+ });
52
+ test("extractLLMReply - strips logo and chrome", () => {
53
+ const raw = `▐▛███▜▌ Claude Code v2.1.88
54
+ ▝▜█████▛▘ Sonnet 4.6 · High Effort
55
+ ▘▘ ▝▝ ~/project
56
+
57
+ ❯ test
58
+ ⏺ Clean output
59
+ ❯ `;
60
+ const result = extractLLMReply(raw);
61
+ assert.strictEqual(result, "Clean output");
62
+ });
63
+ test("extractLLMReply - response with blank lines", () => {
64
+ const raw = `❯ query
65
+ ⏺ First paragraph.
66
+
67
+ Second paragraph.
68
+ ❯ `;
69
+ const result = extractLLMReply(raw);
70
+ // Empty lines between paragraphs should be preserved
71
+ assert.strictEqual(result, "First paragraph.\n\nSecond paragraph.");
72
+ });
73
+ test("extractLLMReply - last output prompt wins", () => {
74
+ const raw = `❯ first
75
+ ⏺ First reply
76
+ ❯ second
77
+ ⏺ Second reply
78
+ ❯ `;
79
+ const result = extractLLMReply(raw);
80
+ assert.strictEqual(result, "Second reply");
81
+ });
82
+ test("extractLLMReply - handles trailing empty lines", () => {
83
+ const raw = `❯ hello
84
+ ⏺ Response
85
+
86
+
87
+ ❯ `;
88
+ const result = extractLLMReply(raw);
89
+ assert.strictEqual(result, "Response");
90
+ });
91
+ test("extractLLMReply - only extracts until next input prompt", () => {
92
+ const raw = `❯ first query
93
+ ⏺ Response to first
94
+ More response content
95
+ ❯ second query`;
96
+ const result = extractLLMReply(raw);
97
+ assert.strictEqual(result, "Response to first\nMore response content");
98
+ });
99
+ test("extractLLMReply - complex real-world example", () => {
100
+ const raw = `▐▛███▜▌ Claude Code v2.1.88
101
+ ▝▜█████▛▘ Haiku 4.5 · High Effort
102
+ ▘▘ ▝▝ ~/Dev/project
103
+
104
+ ❯ [Handoff] Task: implement feature X
105
+ ⏺ I understand. Let me start by reading the requirements.
106
+ ❯ [User] What's your plan?
107
+ ⏺ Here's my plan:
108
+
109
+ 1. Read the specification
110
+ 2. Create tests
111
+ 3. Implement the feature
112
+
113
+ I'll start now.
114
+ ❯ `;
115
+ const result = extractLLMReply(raw);
116
+ const expected = "Here's my plan:\n\n1. Read the specification\n2. Create tests\n3. Implement the feature\n\nI'll start now.";
117
+ assert.strictEqual(result, expected);
118
+ });
119
+ test("extractLLMReply - handles colored box-drawing characters", () => {
120
+ const raw = `╔════════════════════════════╗
121
+ ║ Claude Code v2 ║
122
+ ╚════════════════════════════╝
123
+
124
+ ❯ command
125
+ ⏺ Result
126
+ ❯ `;
127
+ const result = extractLLMReply(raw);
128
+ assert.strictEqual(result, "Result");
129
+ });
130
+ //# sourceMappingURL=chat-output-parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-output-parser.test.js","sourceRoot":"","sources":["../../src/core/chat-output-parser.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { loadConfig } from "../../config/loader.js";
2
2
  import { buildRunnerConfig } from "../runner.js";
3
+ import { isKnownRole, ROLE_DAEMON_BEHAVIOUR } from "./roles.js";
3
4
  /**
4
5
  * Resolves daemon runtime configuration from persisted config + CLI overrides.
5
6
  */
@@ -34,14 +35,23 @@ export function bootstrapDaemon(options) {
34
35
  defaultModel: config.defaults.model,
35
36
  command: agentConfig.command,
36
37
  });
37
- const inferWorkerFromRole = (role) => {
38
+ // Determine worker mode from role:
39
+ // - Predefined roles use ROLE_DAEMON_BEHAVIOUR (see roles.ts) — "observer" → attended
40
+ // - Legacy free-form attended roles (po, architect, concierge, product-owner) → attended
41
+ // - Default: worker mode on
42
+ // Note: --no-worker (options.worker === false) always overrides to attended regardless of role.
43
+ const resolveWorkerMode = (role) => {
38
44
  if (!role)
39
- return false;
45
+ return true;
46
+ if (isKnownRole(role)) {
47
+ // "observer" is the only predefined non-worker role
48
+ return ROLE_DAEMON_BEHAVIOUR[role] !== "observer";
49
+ }
50
+ // Legacy attended roles — kept for backward compat
40
51
  const normalized = role.trim().toLowerCase();
41
- // Non-human contributor roles should default to worker mode for autonomy controls.
42
52
  return !["product-owner", "po", "architect", "concierge"].includes(normalized);
43
53
  };
44
- const workerMode = options.worker === true || inferWorkerFromRole(options.role);
54
+ const workerMode = options.worker !== false && resolveWorkerMode(options.role);
45
55
  return {
46
56
  config,
47
57
  agentConfig,
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/core/daemon/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/core/daemon/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,15 @@ export interface ClaudeMdOptions {
8
8
  token: string;
9
9
  /** Local agent name from config — overrides hub's display_name to prevent stale hub data from corrupting the file */
10
10
  agentName?: string;
11
+ /** Predefined agent role — injects a role-specific system prompt section when recognised */
12
+ role?: string;
11
13
  }
12
14
  export declare function generateClaudeMd(onboard: OnboardData, options?: ClaudeMdOptions): string;
13
- export declare function writeClaudeMd({ workdir, onboard, options, }: {
15
+ export declare function writeClaudeMd({ workdir, onboard, options, role, }: {
14
16
  workdir: string;
15
17
  onboard: OnboardData;
16
18
  options?: ClaudeMdOptions;
19
+ /** Predefined role — forwarded to ClaudeMdOptions.role */
20
+ role?: string;
17
21
  }): string | null;
18
22
  export declare function removeClaudeMd(workdir: string): void;
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import fs from "node:fs";
6
6
  import path from "node:path";
7
+ import { isKnownRole, ROLE_SYSTEM_PROMPTS } from "./roles.js";
7
8
  export function generateClaudeMd(onboard, options) {
8
9
  const lines = [];
9
10
  lines.push("<!-- AUTO-GENERATED by AgentMesh — do not edit manually -->");
@@ -166,6 +167,15 @@ export function generateClaudeMd(onboard, options) {
166
167
  lines.push("| `docs/TMUX_MESSAGE_DELIVERY.md` | Required tmux message delivery protocol |");
167
168
  lines.push("| `AGENT_API_GUIDE.md` | Full Hub API reference |");
168
169
  lines.push("");
170
+ // ── Role context (system prompt for predefined roles) ─────────────
171
+ if (options?.role && isKnownRole(options.role)) {
172
+ lines.push("## Role Context");
173
+ lines.push("");
174
+ lines.push(`**Active role**: \`${options.role}\``);
175
+ lines.push("");
176
+ lines.push(ROLE_SYSTEM_PROMPTS[options.role]);
177
+ lines.push("");
178
+ }
169
179
  // ── Footer ────────────────────────────────────────────────────────
170
180
  lines.push("---");
171
181
  lines.push(`*Generated at ${new Date().toISOString()} by AgentMesh*`);
@@ -175,12 +185,16 @@ export function generateClaudeMd(onboard, options) {
175
185
  // ---------------------------------------------------------------------------
176
186
  // File I/O
177
187
  // ---------------------------------------------------------------------------
178
- export function writeClaudeMd({ workdir, onboard, options, }) {
188
+ export function writeClaudeMd({ workdir, onboard, options, role, }) {
179
189
  if (!fs.existsSync(workdir)) {
180
190
  return null;
181
191
  }
182
192
  const filePath = path.join(workdir, "CLAUDE.md");
183
- const content = generateClaudeMd(onboard, options);
193
+ const content = generateClaudeMd(onboard, options
194
+ ? { ...options, role: role ?? options.role }
195
+ : role
196
+ ? { hubUrl: "", token: "", role }
197
+ : undefined);
184
198
  fs.writeFileSync(filePath, content, { encoding: "utf-8" });
185
199
  // Ensure CLAUDE.md is in .gitignore
186
200
  const gitignorePath = path.join(workdir, ".gitignore");
@@ -1 +1 @@
1
- {"version":3,"file":"context-template.js","sourceRoot":"","sources":["../../../src/core/daemon/context-template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-template.js","sourceRoot":"","sources":["../../../src/core/daemon/context-template.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
+ import { formatDiagnosticSummary } from "./startup-diagnostics.js";
1
2
  /**
2
3
  * Formats a structured crash entry for on-disk diagnostics.
3
4
  */
4
5
  export function formatCrashLog(input) {
6
+ // Include startup diagnostics if available
7
+ const startupDiagnostics = formatDiagnosticSummary(input.agentName);
5
8
  return `
6
9
  ================================================================================
7
10
  AGENT CRASH DETECTED
@@ -14,6 +17,8 @@ Sandbox: ${input.sandboxLabel}
14
17
  Workdir: ${input.workdir}
15
18
  Model: ${input.model}
16
19
 
20
+ ${startupDiagnostics}
21
+
17
22
  --- Last Session Output ---
18
23
  ${input.lastOutput}
19
24
  ================================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"crash-log.js","sourceRoot":"","sources":["../../../src/core/daemon/crash-log.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,OAAO;;;;aAII,KAAK,CAAC,SAAS;SACnB,KAAK,CAAC,SAAS;YACZ,KAAK,CAAC,OAAO;UACf,KAAK,CAAC,MAAM;WACX,KAAK,CAAC,YAAY;WAClB,KAAK,CAAC,OAAO;SACf,KAAK,CAAC,KAAK;;;EAGlB,KAAK,CAAC,UAAU;;;CAGjB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"crash-log.js","sourceRoot":"","sources":["../../../src/core/daemon/crash-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAanE;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,2CAA2C;IAC3C,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEpE,OAAO;;;;aAII,KAAK,CAAC,SAAS;SACnB,KAAK,CAAC,SAAS;YACZ,KAAK,CAAC,OAAO;UACf,KAAK,CAAC,MAAM;WACX,KAAK,CAAC,YAAY;WAClB,KAAK,CAAC,OAAO;SACf,KAAK,CAAC,KAAK;;EAElB,kBAAkB;;;EAGlB,KAAK,CAAC,UAAU;;;CAGjB,CAAC;AACF,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Handoff injection verification — confirms the LLM actually started
3
+ * processing an injected handoff by monitoring tmux output changes.
4
+ *
5
+ * Also detects rate-limit patterns to pause auto-acceptance.
6
+ *
7
+ * Epic #887
8
+ */
9
+ export interface InjectionResult {
10
+ verified: boolean;
11
+ rateLimited: boolean;
12
+ attempts: number;
13
+ }
14
+ /**
15
+ * After injecting a handoff into tmux, poll output to verify the LLM
16
+ * acknowledged it. Re-injects up to maxRetries times if no activity.
17
+ *
18
+ * Returns whether the injection was verified, and whether a rate limit
19
+ * was detected.
20
+ */
21
+ export declare function verifyInjection(agentName: string, handoffId: string, handoffScope: string, maxRetries?: number): Promise<InjectionResult>;
22
+ /**
23
+ * Scan tmux output for rate-limit indicators.
24
+ */
25
+ export declare function isRateLimited(output: string): boolean;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Handoff injection verification — confirms the LLM actually started
3
+ * processing an injected handoff by monitoring tmux output changes.
4
+ *
5
+ * Also detects rate-limit patterns to pause auto-acceptance.
6
+ *
7
+ * Epic #887
8
+ */
9
+ import { captureSessionOutput, sendKeys } from "../tmux.js";
10
+ const RATE_LIMIT_PATTERNS = [
11
+ "hit your limit",
12
+ "rate limit",
13
+ "resets ",
14
+ "usage limit",
15
+ "too many requests",
16
+ "quota exceeded",
17
+ ];
18
+ /**
19
+ * After injecting a handoff into tmux, poll output to verify the LLM
20
+ * acknowledged it. Re-injects up to maxRetries times if no activity.
21
+ *
22
+ * Returns whether the injection was verified, and whether a rate limit
23
+ * was detected.
24
+ */
25
+ export async function verifyInjection(agentName, handoffId, handoffScope, maxRetries = 2) {
26
+ const result = { verified: false, rateLimited: false, attempts: 1 };
27
+ // Capture baseline output before checking
28
+ const baseline = captureSessionOutput(agentName, 30) || "";
29
+ // Check for rate limit in current output
30
+ if (isRateLimited(baseline)) {
31
+ console.log(`[INJECT-VERIFY] Rate limit detected for ${agentName}`);
32
+ result.rateLimited = true;
33
+ return result;
34
+ }
35
+ // Wait and check if output changed (LLM is processing)
36
+ const verified = await pollForActivity(agentName, baseline, 30_000);
37
+ if (verified) {
38
+ result.verified = true;
39
+ return result;
40
+ }
41
+ // No activity — retry injection
42
+ for (let retry = 0; retry < maxRetries; retry++) {
43
+ result.attempts += 1;
44
+ console.log(`[INJECT-VERIFY] Re-injecting handoff ${handoffId} (attempt ${result.attempts})`);
45
+ const reminderMsg = `[AgentMesh] Reminder: You accepted handoff ${handoffId}. Scope: ${handoffScope}. Please start working on it.`;
46
+ const sent = sendKeys(agentName, reminderMsg);
47
+ if (!sent) {
48
+ console.warn(`[INJECT-VERIFY] Failed to re-inject into ${agentName}`);
49
+ continue;
50
+ }
51
+ // Wait a bit then check output
52
+ await sleep(5000);
53
+ const current = captureSessionOutput(agentName, 30) || "";
54
+ // Check rate limit after re-injection
55
+ if (isRateLimited(current)) {
56
+ console.log(`[INJECT-VERIFY] Rate limit detected after retry for ${agentName}`);
57
+ result.rateLimited = true;
58
+ return result;
59
+ }
60
+ const retryVerified = await pollForActivity(agentName, current, 20_000);
61
+ if (retryVerified) {
62
+ result.verified = true;
63
+ return result;
64
+ }
65
+ }
66
+ console.warn(`[INJECT-VERIFY] Handoff ${handoffId} not verified after ${result.attempts} attempts`);
67
+ return result;
68
+ }
69
+ /**
70
+ * Scan tmux output for rate-limit indicators.
71
+ */
72
+ export function isRateLimited(output) {
73
+ const lower = output.toLowerCase();
74
+ return RATE_LIMIT_PATTERNS.some((pattern) => lower.includes(pattern));
75
+ }
76
+ /**
77
+ * Poll tmux output for changes over a duration. Returns true if output changes.
78
+ */
79
+ async function pollForActivity(agentName, baseline, durationMs) {
80
+ const pollInterval = 5000;
81
+ const polls = Math.ceil(durationMs / pollInterval);
82
+ for (let i = 0; i < polls; i++) {
83
+ await sleep(pollInterval);
84
+ const current = captureSessionOutput(agentName, 30) || "";
85
+ if (current !== baseline) {
86
+ return true;
87
+ }
88
+ }
89
+ return false;
90
+ }
91
+ function sleep(ms) {
92
+ return new Promise((resolve) => setTimeout(resolve, ms));
93
+ }
94
+ //# sourceMappingURL=injection-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injection-verify.js","sourceRoot":"","sources":["../../../src/core/daemon/injection-verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface LeadContext {
2
+ hubUrl: string;
3
+ token: string;
4
+ workspace: string;
5
+ teamId: string;
6
+ /** Optional: pre-resolved reviewer agent ID. If omitted, resolved at tick time. */
7
+ reviewerAgentId?: string;
8
+ log: (msg: string) => void;
9
+ /** Optional: supply a custom exec function for testing */
10
+ exec?: (cmd: string) => Promise<{
11
+ stdout: string;
12
+ stderr: string;
13
+ }>;
14
+ }
15
+ /**
16
+ * One coordination tick for a lead agent:
17
+ * 1. Poll open PRs via `gh pr list`
18
+ * 2. Update BEHIND branches via `gh pr update-branch`
19
+ * 3. Route unreviewed PRs to the reviewer via hub handoffs
20
+ * 4. Merge APPROVED + CI-green + MERGEABLE PRs
21
+ */
22
+ export declare function runLeadTick(ctx: LeadContext): Promise<void>;