overmind-mcp 2.8.52 → 2.9.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.
- package/dist/bridge/ScenarioLoader.d.ts +20 -1
- package/dist/bridge/ScenarioLoader.d.ts.map +1 -1
- package/dist/bridge/ScenarioLoader.js +42 -0
- package/dist/bridge/ScenarioLoader.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/agent_lifecycle.d.ts +19 -0
- package/dist/lib/agent_lifecycle.d.ts.map +1 -1
- package/dist/lib/agent_lifecycle.js +92 -1
- package/dist/lib/agent_lifecycle.js.map +1 -1
- package/dist/lib/config.d.ts +21 -49
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +40 -94
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/orchestration/dispatcher.d.ts +13 -0
- package/dist/lib/orchestration/dispatcher.d.ts.map +1 -1
- package/dist/lib/orchestration/dispatcher.js +100 -0
- package/dist/lib/orchestration/dispatcher.js.map +1 -1
- package/dist/lib/processRegistry.js +1 -1
- package/dist/lib/processRegistry.js.map +1 -1
- package/dist/lib/sessions.js +1 -1
- package/dist/lib/sessions.js.map +1 -1
- package/dist/services/AgentManager.d.ts +4 -4
- package/dist/services/AgentManager.d.ts.map +1 -1
- package/dist/services/AgentManager.js +151 -201
- package/dist/services/AgentManager.js.map +1 -1
- package/dist/services/HermesProfileManager.d.ts +106 -0
- package/dist/services/HermesProfileManager.d.ts.map +1 -0
- package/dist/services/HermesProfileManager.js +401 -0
- package/dist/services/HermesProfileManager.js.map +1 -0
- package/dist/services/HermesRunner.d.ts +53 -0
- package/dist/services/HermesRunner.d.ts.map +1 -0
- package/dist/services/HermesRunner.js +313 -0
- package/dist/services/HermesRunner.js.map +1 -0
- package/dist/services/KanbanAdapter.d.ts +135 -0
- package/dist/services/KanbanAdapter.d.ts.map +1 -0
- package/dist/services/KanbanAdapter.js +320 -0
- package/dist/services/KanbanAdapter.js.map +1 -0
- package/dist/tools/manage_agents.js +4 -4
- package/dist/tools/manage_agents.js.map +1 -1
- package/dist/tools/memory_store.d.ts +1 -1
- package/dist/tools/run_hermes.d.ts +1 -0
- package/dist/tools/run_hermes.d.ts.map +1 -1
- package/dist/tools/run_hermes.js +12 -6
- package/dist/tools/run_hermes.js.map +1 -1
- package/docs/MIGRATION_V3.1.md +143 -0
- package/docs/PLAN_MIGRATION_V3.md +339 -0
- package/package.json +2 -2
- package/scripts/migrate-to-profiles.mjs +205 -0
- package/dist/lib/orchestration/swarm.d.ts +0 -76
- package/dist/lib/orchestration/swarm.d.ts.map +0 -1
- package/dist/lib/orchestration/swarm.js +0 -241
- package/dist/lib/orchestration/swarm.js.map +0 -1
- package/dist/prompts/agent_prompts.d.ts +0 -2
- package/dist/prompts/agent_prompts.d.ts.map +0 -1
- package/dist/prompts/agent_prompts.js +0 -21
- package/dist/prompts/agent_prompts.js.map +0 -1
- package/dist/services/NousHermesRunner.d.ts +0 -83
- package/dist/services/NousHermesRunner.d.ts.map +0 -1
- package/dist/services/NousHermesRunner.js +0 -1241
- package/dist/services/NousHermesRunner.js.map +0 -1
- package/dist/services/hermes/binaryFinder.d.ts +0 -8
- package/dist/services/hermes/binaryFinder.d.ts.map +0 -1
- package/dist/services/hermes/binaryFinder.js +0 -92
- package/dist/services/hermes/binaryFinder.js.map +0 -1
- package/dist/services/hermes/configYamlFilter.d.ts +0 -12
- package/dist/services/hermes/configYamlFilter.d.ts.map +0 -1
- package/dist/services/hermes/configYamlFilter.js +0 -70
- package/dist/services/hermes/configYamlFilter.js.map +0 -1
- package/dist/services/hermes/providerConfig.d.ts +0 -19
- package/dist/services/hermes/providerConfig.d.ts.map +0 -1
- package/dist/services/hermes/providerConfig.js +0 -53
- package/dist/services/hermes/providerConfig.js.map +0 -1
- package/dist/services/hermesTokenResolver.d.ts +0 -74
- package/dist/services/hermesTokenResolver.d.ts.map +0 -1
- package/dist/services/hermesTokenResolver.js +0 -140
- package/dist/services/hermesTokenResolver.js.map +0 -1
- package/dist/tools/initialization_check.d.ts +0 -2
- package/dist/tools/initialization_check.d.ts.map +0 -1
- package/dist/tools/initialization_check.js +0 -23
- package/dist/tools/initialization_check.js.map +0 -1
- /package/bin/{launch.js → launch.cjs} +0 -0
- /package/dist/bin/{launch.js → launch.cjs} +0 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HermesRunner — Thin wrapper around the native Hermes Agent CLI.
|
|
3
|
+
*
|
|
4
|
+
* ╔════════════════════════════════════════════════════════════════════════╗
|
|
5
|
+
* ║ ARCHITECTURE (v3.0 — Refactored) ║
|
|
6
|
+
* ║ ║
|
|
7
|
+
* ║ This runner replaces the 1391-line NousHermesRunner. It does NOT: ║
|
|
8
|
+
* ║ - Resolve tokens (Hermes .env per-profile does that) ║
|
|
9
|
+
* ║ - Detect providers (Hermes config.yaml does that) ║
|
|
10
|
+
* ║ - Manage HERMES_HOME custom paths (Hermes ~/.hermes native) ║
|
|
11
|
+
* ║ - Filter config.yaml (1 config per profile now) ║
|
|
12
|
+
* ║ - Find the hermes binary (it's in PATH) ║
|
|
13
|
+
* ║ ║
|
|
14
|
+
* ║ It DOES: ║
|
|
15
|
+
* ║ - Spawn: hermes -p <profile> chat -q "<prompt>" -Q --yolo ║
|
|
16
|
+
* ║ - Capture stdout (response) + stderr (session_id + diagnostics) ║
|
|
17
|
+
* ║ - Handle timeout + abort signal ║
|
|
18
|
+
* ║ - Register with agent_lifecycle + processRegistry (UI parity) ║
|
|
19
|
+
* ║ ║
|
|
20
|
+
* ║ Profile management is handled by AgentManager via: ║
|
|
21
|
+
* ║ hermes profile create / delete / list / show ║
|
|
22
|
+
* ║ ║
|
|
23
|
+
* ║ Session resume is handled by: ║
|
|
24
|
+
* ║ hermes -p <name> chat -q "<prompt>" --resume <sessionId> ║
|
|
25
|
+
* ╚════════════════════════════════════════════════════════════════════════╝
|
|
26
|
+
*/
|
|
27
|
+
import { spawn } from 'child_process';
|
|
28
|
+
import { CONFIG, getWorkspaceDir } from '../lib/config.js';
|
|
29
|
+
import { getLastSessionId, saveSessionId } from '../lib/sessions.js';
|
|
30
|
+
import { linkSessionToPid } from '../lib/processRegistry.js';
|
|
31
|
+
import { withSpan } from '../lib/telemetry.js';
|
|
32
|
+
import { rootLogger } from '../lib/logger.js';
|
|
33
|
+
import { registerProcess, updateProcessStatus, } from '../lib/processRegistry.js';
|
|
34
|
+
import { registerLiveAgent, appendLiveOutput, setLiveStatus, unregisterLiveAgent, } from '../lib/agent_lifecycle.js';
|
|
35
|
+
import { killProcessTree } from './hermes/processUtils.js';
|
|
36
|
+
const logger = rootLogger.child({ module: 'HermesRunner' });
|
|
37
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
38
|
+
/** Kill a child process tree, cross-platform. */
|
|
39
|
+
function killChildTree(child) {
|
|
40
|
+
return killProcessTree(child);
|
|
41
|
+
}
|
|
42
|
+
/** Extract session_id from Hermes stderr output. */
|
|
43
|
+
function extractSessionId(stderr) {
|
|
44
|
+
// Hermes outputs: "session_id: 20260628_114351_3fa469"
|
|
45
|
+
const match = stderr.match(/session_id:\s*(\S+)/i);
|
|
46
|
+
return match?.[1];
|
|
47
|
+
}
|
|
48
|
+
/** Check if an error output indicates a retryable failure. */
|
|
49
|
+
function isRetryableError(stderr, stdout) {
|
|
50
|
+
const combined = (stderr + ' ' + stdout).toLowerCase();
|
|
51
|
+
return (combined.includes('401') ||
|
|
52
|
+
combined.includes('unauthorized') ||
|
|
53
|
+
combined.includes('invalid api key') ||
|
|
54
|
+
combined.includes('authentication failed') ||
|
|
55
|
+
combined.includes('429') ||
|
|
56
|
+
combined.includes('rate limit') ||
|
|
57
|
+
combined.includes('quota') ||
|
|
58
|
+
combined.includes('503') ||
|
|
59
|
+
combined.includes('service unavailable'));
|
|
60
|
+
}
|
|
61
|
+
// ─── Main Class ───────────────────────────────────────────────────────────────
|
|
62
|
+
export class HermesRunner {
|
|
63
|
+
timeoutMs;
|
|
64
|
+
MAX_BUF = 10 * 1024 * 1024; // 10MB buffer limit
|
|
65
|
+
constructor() {
|
|
66
|
+
this.timeoutMs = CONFIG.TIMEOUT_MS || 900000; // 15 min default
|
|
67
|
+
}
|
|
68
|
+
async runAgent(options) {
|
|
69
|
+
if (options.agentName) {
|
|
70
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(options.agentName)) {
|
|
71
|
+
return {
|
|
72
|
+
result: '',
|
|
73
|
+
error: `INVALID_AGENT_NAME: '${options.agentName}' contains invalid characters. Only [a-zA-Z0-9_-] allowed.`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
logger.info({ agentName: options.agentName, model: options.model, sessionId: options.sessionId }, '[RUN_AGENT] Starting Hermes thin-wrapper run.');
|
|
78
|
+
try {
|
|
79
|
+
const result = await withSpan('hermes.runAgent', async (span) => {
|
|
80
|
+
span.setAttribute('agentName', options.agentName || '');
|
|
81
|
+
span.setAttribute('model', options.model || '');
|
|
82
|
+
span.setAttribute('runner', 'hermes');
|
|
83
|
+
return await this.runAgentInternal(options);
|
|
84
|
+
}, {
|
|
85
|
+
agentName: options.agentName || '',
|
|
86
|
+
model: options.model || '',
|
|
87
|
+
runner: 'hermes',
|
|
88
|
+
});
|
|
89
|
+
if (options.agentName && result.sessionId) {
|
|
90
|
+
await saveSessionId(options.agentName, result.sessionId, options.configPath, 'hermes');
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
logger.error({ error: error instanceof Error ? error.message : String(error), agentName: options.agentName }, '[RUN_AGENT] Hermes runner threw.');
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async runAgentInternal(options) {
|
|
100
|
+
const { prompt, agentName, silent } = options;
|
|
101
|
+
let { sessionId } = options;
|
|
102
|
+
const cwd = options.cwd || process.cwd();
|
|
103
|
+
const configPath = options.configPath || getWorkspaceDir();
|
|
104
|
+
// ─── Auto Resume ─────────────────────────────────────────────────────────
|
|
105
|
+
if (options.autoResume && agentName && !sessionId) {
|
|
106
|
+
const lastId = await getLastSessionId(agentName, configPath, 'hermes');
|
|
107
|
+
if (lastId) {
|
|
108
|
+
sessionId = lastId;
|
|
109
|
+
logger.info({ sessionId }, '[RUN_AGENT] Auto-resume session.');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// ─── Build CLI args ──────────────────────────────────────────────────────
|
|
113
|
+
// Global flags come BEFORE the subcommand; subcommand flags come AFTER.
|
|
114
|
+
//
|
|
115
|
+
// hermes -p <profile> chat -q "<prompt>" -Q --yolo --pass-session-id
|
|
116
|
+
// ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
117
|
+
// profile quiet query
|
|
118
|
+
//
|
|
119
|
+
const cleanArgs = [];
|
|
120
|
+
// Profile selection — agentName maps to a Hermes profile
|
|
121
|
+
if (agentName) {
|
|
122
|
+
cleanArgs.push('-p', agentName);
|
|
123
|
+
}
|
|
124
|
+
// Subcommand
|
|
125
|
+
cleanArgs.push('chat');
|
|
126
|
+
// Query (non-interactive mode)
|
|
127
|
+
cleanArgs.push('-q', prompt);
|
|
128
|
+
// Quiet mode: suppress banner, spinner, tool previews
|
|
129
|
+
cleanArgs.push('-Q');
|
|
130
|
+
// Bypass all approval prompts (yolo mode — no human-in-the-loop)
|
|
131
|
+
cleanArgs.push('--yolo');
|
|
132
|
+
// Include session ID in output for extraction
|
|
133
|
+
cleanArgs.push('--pass-session-id');
|
|
134
|
+
// Tag as third-party integration (not shown in user session lists)
|
|
135
|
+
cleanArgs.push('--source', 'tool');
|
|
136
|
+
// Model override (optional — profile config.yaml is the default)
|
|
137
|
+
if (options.model) {
|
|
138
|
+
cleanArgs.push('--model', options.model);
|
|
139
|
+
}
|
|
140
|
+
// Provider override (optional — profile config.yaml is the default)
|
|
141
|
+
if (options.provider) {
|
|
142
|
+
cleanArgs.push('--provider', options.provider);
|
|
143
|
+
}
|
|
144
|
+
// Resume a previous session
|
|
145
|
+
if (sessionId) {
|
|
146
|
+
cleanArgs.push('--resume', sessionId);
|
|
147
|
+
}
|
|
148
|
+
// ─── Spawn ───────────────────────────────────────────────────────────────
|
|
149
|
+
const timeoutMs = this.timeoutMs;
|
|
150
|
+
const HARD_TIMEOUT_MS = 60000;
|
|
151
|
+
let currentChildRef = null;
|
|
152
|
+
return new Promise((resolve) => {
|
|
153
|
+
let resolved = false;
|
|
154
|
+
let currentSessionId = sessionId;
|
|
155
|
+
const abortListener = () => {
|
|
156
|
+
if (currentChildRef) {
|
|
157
|
+
killChildTree(currentChildRef).then(() => {
|
|
158
|
+
safeResolve({ result: '', error: 'ABORTED', rawOutput: '' });
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
safeResolve({ result: '', error: 'ABORTED', rawOutput: '' });
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
const safeResolve = (v) => {
|
|
166
|
+
if (!resolved) {
|
|
167
|
+
resolved = true;
|
|
168
|
+
if (options.signal) {
|
|
169
|
+
options.signal.removeEventListener('abort', abortListener);
|
|
170
|
+
}
|
|
171
|
+
resolve(v);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
// ─── Spawn the Hermes process ──────────────────────────────────────────
|
|
175
|
+
const child = spawn('hermes', cleanArgs, {
|
|
176
|
+
cwd,
|
|
177
|
+
shell: false,
|
|
178
|
+
windowsHide: true,
|
|
179
|
+
env: {
|
|
180
|
+
...process.env,
|
|
181
|
+
// Ensure Python uses UTF-8 (avoids Windows encoding crashes)
|
|
182
|
+
PYTHONIOENCODING: 'utf-8',
|
|
183
|
+
PYTHONUNBUFFERED: '1',
|
|
184
|
+
TERM: 'emacs',
|
|
185
|
+
// Disable interactive prompt_toolkit
|
|
186
|
+
PROMPT_TOOLKIT_NO_INTERACTIVE: '1',
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
currentChildRef = child;
|
|
190
|
+
if (child.pid) {
|
|
191
|
+
void registerProcess(child.pid, { agentName: agentName || '', runner: 'hermes', configPath });
|
|
192
|
+
void registerLiveAgent({
|
|
193
|
+
pid: child.pid,
|
|
194
|
+
runner: 'hermes',
|
|
195
|
+
agentName: agentName || '',
|
|
196
|
+
sessionId: currentSessionId || '',
|
|
197
|
+
cleanupFn: async () => { await killChildTree(child); },
|
|
198
|
+
childRef: child,
|
|
199
|
+
});
|
|
200
|
+
child.once('exit', (code) => {
|
|
201
|
+
setLiveStatus(child.pid, code === 0 ? 'done' : 'failed', code ?? null);
|
|
202
|
+
void unregisterLiveAgent(child.pid);
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
// ─── Capture output ────────────────────────────────────────────────────
|
|
206
|
+
let stdout = '';
|
|
207
|
+
let stderr = '';
|
|
208
|
+
child.stdout?.on('data', (d) => {
|
|
209
|
+
const chunk = d.toString();
|
|
210
|
+
if (child.pid) {
|
|
211
|
+
void appendLiveOutput(child.pid, chunk);
|
|
212
|
+
}
|
|
213
|
+
if (stdout.length + chunk.length > this.MAX_BUF) {
|
|
214
|
+
stdout = stdout.slice(-this.MAX_BUF);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
stdout += chunk;
|
|
218
|
+
}
|
|
219
|
+
if (!silent && agentName) {
|
|
220
|
+
process.stderr.write(`[Hermes:${agentName}] ${chunk}`);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
child.stderr?.on('data', (d) => {
|
|
224
|
+
const chunk = d.toString();
|
|
225
|
+
if (stderr.length + chunk.length > this.MAX_BUF) {
|
|
226
|
+
stderr = stderr.slice(-this.MAX_BUF);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
stderr += chunk;
|
|
230
|
+
}
|
|
231
|
+
if (!silent && agentName) {
|
|
232
|
+
process.stderr.write(`[Hermes:${agentName}:ERR] ${chunk}`);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
// ─── Timeout ───────────────────────────────────────────────────────────
|
|
236
|
+
const timer = setTimeout(() => {
|
|
237
|
+
if (child.stdin && !child.stdin.destroyed) {
|
|
238
|
+
try {
|
|
239
|
+
child.stdin.write('\n');
|
|
240
|
+
}
|
|
241
|
+
catch { /* ignore */ }
|
|
242
|
+
}
|
|
243
|
+
setTimeout(async () => {
|
|
244
|
+
await killChildTree(child);
|
|
245
|
+
safeResolve({ result: '', error: 'HARD_TIMEOUT', rawOutput: stdout + stderr });
|
|
246
|
+
}, HARD_TIMEOUT_MS);
|
|
247
|
+
}, timeoutMs);
|
|
248
|
+
// ─── Process exit ──────────────────────────────────────────────────────
|
|
249
|
+
child.on('close', async (code) => {
|
|
250
|
+
clearTimeout(timer);
|
|
251
|
+
if (child.pid) {
|
|
252
|
+
void updateProcessStatus(child.pid, code === 0 ? 'done' : 'failed', code, configPath);
|
|
253
|
+
}
|
|
254
|
+
// Extract session_id from stderr
|
|
255
|
+
const extractedSid = extractSessionId(stderr);
|
|
256
|
+
if (extractedSid) {
|
|
257
|
+
currentSessionId = extractedSid;
|
|
258
|
+
}
|
|
259
|
+
// Save session linkage
|
|
260
|
+
if (currentSessionId && agentName) {
|
|
261
|
+
await saveSessionId(agentName, currentSessionId, configPath, 'hermes');
|
|
262
|
+
if (child.pid) {
|
|
263
|
+
void linkSessionToPid(currentSessionId, child.pid, configPath);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// ─── Error handling ──────────────────────────────────────────────────
|
|
267
|
+
if (code !== 0) {
|
|
268
|
+
const retryable = isRetryableError(stderr, stdout);
|
|
269
|
+
if (retryable) {
|
|
270
|
+
// Surface the error — the caller (run_hermes.ts) handles session cleanup + retry
|
|
271
|
+
logger.warn({ agentName, code, retryable, sessionId: currentSessionId }, '[RUN_AGENT] Hermes exited with retryable error.');
|
|
272
|
+
}
|
|
273
|
+
if (!stdout.trim()) {
|
|
274
|
+
safeResolve({
|
|
275
|
+
result: '',
|
|
276
|
+
error: `EXIT_CODE_${code}`,
|
|
277
|
+
rawOutput: stderr || stdout,
|
|
278
|
+
sessionId: currentSessionId,
|
|
279
|
+
});
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// ─── Success ─────────────────────────────────────────────────────────
|
|
284
|
+
safeResolve({
|
|
285
|
+
result: stdout.trim(),
|
|
286
|
+
sessionId: currentSessionId,
|
|
287
|
+
rawOutput: stdout,
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
child.on('error', (err) => {
|
|
291
|
+
clearTimeout(timer);
|
|
292
|
+
killChildTree(child).then(() => {
|
|
293
|
+
safeResolve({
|
|
294
|
+
result: '',
|
|
295
|
+
error: `SPAWN_ERROR: ${err.message}`,
|
|
296
|
+
rawOutput: '',
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
// ─── Abort signal ──────────────────────────────────────────────────────
|
|
301
|
+
if (options.signal) {
|
|
302
|
+
if (options.signal.aborted) {
|
|
303
|
+
killChildTree(child).then(() => {
|
|
304
|
+
safeResolve({ result: '', error: 'ABORTED', rawOutput: '' });
|
|
305
|
+
});
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
options.signal.addEventListener('abort', abortListener);
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=HermesRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HermesRunner.js","sourceRoot":"","sources":["../../src/services/HermesRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KanbanAdapter — Thin wrapper around `hermes kanban` CLI.
|
|
3
|
+
*
|
|
4
|
+
* ╔════════════════════════════════════════════════════════════════════════╗
|
|
5
|
+
* ║ PURPOSE (v3.0 — Refactored) ║
|
|
6
|
+
* ║ ║
|
|
7
|
+
* ║ Replaces the old swarm.ts (368 lines) and the parallel orchestration ║
|
|
8
|
+
* ║ in dispatcher.ts with native Hermes Kanban tasks. ║
|
|
9
|
+
* ║ ║
|
|
10
|
+
* ║ Kanban = durable SQLite-backed task board shared across all Hermes ║
|
|
11
|
+
* ║ profiles. The dispatcher loop (60s default) atomically claims ready ║
|
|
12
|
+
* ║ tasks and spawns the assigned profile as its own OS process. ║
|
|
13
|
+
* ║ ║
|
|
14
|
+
* ║ YOLO CONFIG (no human-in-the-loop): ║
|
|
15
|
+
* ║ - autoReclaim on crash/timeout ║
|
|
16
|
+
* ║ - maxRetries: 5 (vs default 2) before block ║
|
|
17
|
+
* ║ - autoUnblock via admin API (no manual human intervention) ║
|
|
18
|
+
* ║ - dispatcherTick: 30s (vs default 60s — faster pickup) ║
|
|
19
|
+
* ╚════════════════════════════════════════════════════════════════════════╝
|
|
20
|
+
*/
|
|
21
|
+
export declare const YOLO_CONFIG: {
|
|
22
|
+
readonly autoReclaim: true;
|
|
23
|
+
readonly maxRetries: 5;
|
|
24
|
+
readonly autoUnblock: true;
|
|
25
|
+
readonly reclaimStaleMs: 900000;
|
|
26
|
+
readonly dispatcherTickSeconds: 30;
|
|
27
|
+
readonly goalModeMaxTurns: 20;
|
|
28
|
+
};
|
|
29
|
+
export interface CreateTaskOptions {
|
|
30
|
+
title: string;
|
|
31
|
+
assignee: string;
|
|
32
|
+
body?: string;
|
|
33
|
+
tenant?: string;
|
|
34
|
+
parents?: string[];
|
|
35
|
+
priority?: number;
|
|
36
|
+
workspace?: 'scratch' | `dir:${string}` | 'worktree';
|
|
37
|
+
idempotencyKey?: string;
|
|
38
|
+
maxRuntime?: string;
|
|
39
|
+
goalMode?: boolean;
|
|
40
|
+
goalMaxTurns?: number;
|
|
41
|
+
skills?: string[];
|
|
42
|
+
}
|
|
43
|
+
export interface TaskStatus {
|
|
44
|
+
id: string;
|
|
45
|
+
title: string;
|
|
46
|
+
assignee: string;
|
|
47
|
+
status: string;
|
|
48
|
+
body?: string;
|
|
49
|
+
tenant?: string;
|
|
50
|
+
workspace?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface TaskResult {
|
|
53
|
+
id: string;
|
|
54
|
+
status: string;
|
|
55
|
+
summary?: string;
|
|
56
|
+
metadata?: Record<string, unknown>;
|
|
57
|
+
error?: string;
|
|
58
|
+
durationMs?: number;
|
|
59
|
+
}
|
|
60
|
+
export interface TaskSummary {
|
|
61
|
+
id: string;
|
|
62
|
+
title: string;
|
|
63
|
+
assignee: string;
|
|
64
|
+
status: string;
|
|
65
|
+
tenant?: string;
|
|
66
|
+
}
|
|
67
|
+
export declare class KanbanAdapter {
|
|
68
|
+
private board?;
|
|
69
|
+
constructor(board?: string);
|
|
70
|
+
private get boardArgs();
|
|
71
|
+
/**
|
|
72
|
+
* Initialize the kanban board (idempotent).
|
|
73
|
+
*/
|
|
74
|
+
init(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Force a dispatcher tick immediately (don't wait for the 60s loop).
|
|
77
|
+
*/
|
|
78
|
+
nudge(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Create a single task.
|
|
81
|
+
*/
|
|
82
|
+
createTask(opts: CreateTaskOptions): Promise<{
|
|
83
|
+
taskId: string;
|
|
84
|
+
}>;
|
|
85
|
+
/**
|
|
86
|
+
* Create multiple independent tasks in parallel (fan-out).
|
|
87
|
+
*/
|
|
88
|
+
createParallelTasks(tasks: CreateTaskOptions[]): Promise<string[]>;
|
|
89
|
+
/**
|
|
90
|
+
* Create a pipeline (sequential chain: task[0] → task[1] → task[2]...).
|
|
91
|
+
* Each task has the previous one as parent.
|
|
92
|
+
*/
|
|
93
|
+
createPipeline(tasks: CreateTaskOptions[]): Promise<string[]>;
|
|
94
|
+
/**
|
|
95
|
+
* Get the status of a task.
|
|
96
|
+
*/
|
|
97
|
+
getStatus(taskId: string): Promise<TaskStatus>;
|
|
98
|
+
/**
|
|
99
|
+
* Wait for a task to complete (polling loop).
|
|
100
|
+
* YOLO: auto-reclaim on stale claims.
|
|
101
|
+
*/
|
|
102
|
+
wait(taskId: string, timeoutMs?: number): Promise<TaskResult>;
|
|
103
|
+
/**
|
|
104
|
+
* Reclaim a task (abort running worker, reset to ready).
|
|
105
|
+
*/
|
|
106
|
+
reclaim(taskId: string): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Unblock a blocked task.
|
|
109
|
+
*/
|
|
110
|
+
unblock(taskId: string): Promise<void>;
|
|
111
|
+
/**
|
|
112
|
+
* Archive a task.
|
|
113
|
+
*/
|
|
114
|
+
archive(taskId: string): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* List tasks with optional filter.
|
|
117
|
+
*/
|
|
118
|
+
listTasks(filter?: {
|
|
119
|
+
status?: string;
|
|
120
|
+
assignee?: string;
|
|
121
|
+
tenant?: string;
|
|
122
|
+
}): Promise<TaskSummary[]>;
|
|
123
|
+
/**
|
|
124
|
+
* Add a comment to a task (inter-agent protocol).
|
|
125
|
+
*/
|
|
126
|
+
comment(taskId: string, body: string): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Create a board for a specific project/workstream.
|
|
129
|
+
*/
|
|
130
|
+
createBoard(slug: string, name: string, opts?: {
|
|
131
|
+
description?: string;
|
|
132
|
+
switch?: boolean;
|
|
133
|
+
}): Promise<void>;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=KanbanAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KanbanAdapter.d.ts","sourceRoot":"","sources":["../../src/services/KanbanAdapter.ts"],"names":[],"mappings":"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"}
|