agim-cli 1.1.1 → 1.1.2
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/CHANGELOG.md +101 -0
- package/README.md +7 -1
- package/README.zh-CN.md +7 -1
- package/dist/cli.js +265 -30
- package/dist/cli.js.map +1 -1
- package/dist/core/a2a.d.ts +36 -0
- package/dist/core/a2a.d.ts.map +1 -0
- package/dist/core/a2a.js +203 -0
- package/dist/core/a2a.js.map +1 -0
- package/dist/core/approval-bus.d.ts +40 -0
- package/dist/core/approval-bus.d.ts.map +1 -1
- package/dist/core/approval-bus.js +106 -0
- package/dist/core/approval-bus.js.map +1 -1
- package/dist/core/approval-router.d.ts.map +1 -1
- package/dist/core/approval-router.js +31 -2
- package/dist/core/approval-router.js.map +1 -1
- package/dist/core/commands/a2a.d.ts +3 -0
- package/dist/core/commands/a2a.d.ts.map +1 -0
- package/dist/core/commands/a2a.js +148 -0
- package/dist/core/commands/a2a.js.map +1 -0
- package/dist/core/commands/job.d.ts.map +1 -1
- package/dist/core/commands/job.js +11 -2
- package/dist/core/commands/job.js.map +1 -1
- package/dist/core/commands/outbox.d.ts +3 -0
- package/dist/core/commands/outbox.d.ts.map +1 -0
- package/dist/core/commands/outbox.js +92 -0
- package/dist/core/commands/outbox.js.map +1 -0
- package/dist/core/job-board.d.ts +122 -1
- package/dist/core/job-board.d.ts.map +1 -1
- package/dist/core/job-board.js +404 -21
- package/dist/core/job-board.js.map +1 -1
- package/dist/core/job-recovery.d.ts +48 -0
- package/dist/core/job-recovery.d.ts.map +1 -0
- package/dist/core/job-recovery.js +185 -0
- package/dist/core/job-recovery.js.map +1 -0
- package/dist/core/message-sink.d.ts +63 -0
- package/dist/core/message-sink.d.ts.map +1 -0
- package/dist/core/message-sink.js +296 -0
- package/dist/core/message-sink.js.map +1 -0
- package/dist/core/outbox.d.ts +71 -0
- package/dist/core/outbox.d.ts.map +1 -0
- package/dist/core/outbox.js +301 -0
- package/dist/core/outbox.js.map +1 -0
- package/dist/core/reminders.d.ts.map +1 -1
- package/dist/core/reminders.js +12 -1
- package/dist/core/reminders.js.map +1 -1
- package/dist/core/restart-completion.d.ts.map +1 -1
- package/dist/core/restart-completion.js +18 -1
- package/dist/core/restart-completion.js.map +1 -1
- package/dist/core/router.d.ts +8 -0
- package/dist/core/router.d.ts.map +1 -1
- package/dist/core/router.js +16 -0
- package/dist/core/router.js.map +1 -1
- package/dist/core/types.d.ts +22 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/plugins/agents/claude-code/index.d.ts.map +1 -1
- package/dist/plugins/agents/claude-code/index.js +5 -0
- package/dist/plugins/agents/claude-code/index.js.map +1 -1
- package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +21 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -1
- package/dist/plugins/agents/claude-code/mcp-approval-server.js +106 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
- package/dist/plugins/agents/codex/index.d.ts.map +1 -1
- package/dist/plugins/agents/codex/index.js +5 -0
- package/dist/plugins/agents/codex/index.js.map +1 -1
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -1
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +5 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +28 -16
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
package/dist/core/job-board.js
CHANGED
|
@@ -75,23 +75,84 @@ function reapStaleRunning(d) {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
/**
|
|
78
|
-
* Idempotent column-
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
78
|
+
* Idempotent column-adds. Run on every helper init — SQLite's ALTER TABLE
|
|
79
|
+
* ADD COLUMN throws "duplicate column name" if the column already exists,
|
|
80
|
+
* which we silently swallow. Cheaper than the full pragma table_info()
|
|
81
|
+
* inspection round-trip.
|
|
82
|
+
*
|
|
83
|
+
* Columns added over time:
|
|
84
|
+
* - creator_id / workspace_id : ownership (v1.0.x)
|
|
85
|
+
* - thread_key : `${platform}:${channelId}:${threadId}` — needed
|
|
86
|
+
* so Phase 3 can recover an interrupted inline
|
|
87
|
+
* job back to the right IM thread.
|
|
88
|
+
* - kind : 'job' (explicit /job, retention 30d) vs
|
|
89
|
+
* 'inline' (auto-tracked inbound, retention 24h).
|
|
90
|
+
* - started_at / delivered_at : finer-grained lifecycle stamps.
|
|
91
|
+
* - replaced_by : when user retries an interrupted job, the
|
|
92
|
+
* old row points at the new one.
|
|
93
|
+
* - last_outbox_id : link to the outbox row that delivered (or is
|
|
94
|
+
* trying to deliver) this job's result.
|
|
95
|
+
* - parent_id : Phase A2A-L1 — when one agent calls another via
|
|
96
|
+
* mcp__imhub__call_agent, the callee's row points
|
|
97
|
+
* back at the caller's row. NULL on user-originated
|
|
98
|
+
* rows.
|
|
99
|
+
* - call_depth : Phase A2A-L1 — 0 for user-originated rows; +1 per
|
|
100
|
+
* nesting level. Lets us reject runaway chains
|
|
101
|
+
* (IMHUB_A2A_MAX_DEPTH, default 3).
|
|
82
102
|
*/
|
|
83
|
-
function
|
|
84
|
-
|
|
103
|
+
function migrateColumns(d) {
|
|
104
|
+
// [column, type] — type must include any NOT NULL / DEFAULT clauses.
|
|
105
|
+
const adds = [
|
|
106
|
+
['creator_id', `TEXT NOT NULL DEFAULT ''`],
|
|
107
|
+
['workspace_id', `TEXT NOT NULL DEFAULT ''`],
|
|
108
|
+
['thread_key', `TEXT NOT NULL DEFAULT ''`],
|
|
109
|
+
['kind', `TEXT NOT NULL DEFAULT 'job'`],
|
|
110
|
+
['started_at', `TEXT`],
|
|
111
|
+
['delivered_at', `TEXT`],
|
|
112
|
+
['replaced_by', `INTEGER`],
|
|
113
|
+
['last_outbox_id', `INTEGER`],
|
|
114
|
+
['parent_id', `INTEGER`],
|
|
115
|
+
['call_depth', `INTEGER NOT NULL DEFAULT 0`],
|
|
116
|
+
];
|
|
117
|
+
for (const [col, type] of adds) {
|
|
85
118
|
try {
|
|
86
|
-
d.prepare(`ALTER TABLE jobs ADD COLUMN ${col}
|
|
119
|
+
d.prepare(`ALTER TABLE jobs ADD COLUMN ${col} ${type}`).run();
|
|
87
120
|
rootLogger.info({ component: 'job-board', column: col, event: 'job-board.migration' }, `Added ${col} column to jobs table`);
|
|
88
121
|
}
|
|
89
122
|
catch {
|
|
90
123
|
// duplicate column — already migrated
|
|
91
124
|
}
|
|
92
125
|
}
|
|
126
|
+
// All indexes that reference columns added by migrateColumns above. Each
|
|
127
|
+
// create is wrapped individually so a single failure (corrupt index, etc.)
|
|
128
|
+
// doesn't kill the rest. IF NOT EXISTS handles idempotency on warm starts.
|
|
129
|
+
const indexes = [
|
|
130
|
+
// v1.0 ownership indexes — moved out of the schema string because the
|
|
131
|
+
// schema runs before migrateColumns, and a pre-v1.0 jobs.db doesn't have
|
|
132
|
+
// creator_id yet at schema-exec time. Putting them here makes them run
|
|
133
|
+
// AFTER the ALTER TABLE that adds the column.
|
|
134
|
+
`CREATE INDEX IF NOT EXISTS idx_jobs_creator ON jobs(creator_id)`,
|
|
135
|
+
`CREATE INDEX IF NOT EXISTS idx_jobs_status_created ON jobs(status, created_at)`,
|
|
136
|
+
// Phase 2 indexes — retention split (kind) + recovery sweep (kind +
|
|
137
|
+
// status + thread_key).
|
|
138
|
+
`CREATE INDEX IF NOT EXISTS idx_jobs_kind_status ON jobs(kind, status)`,
|
|
139
|
+
`CREATE INDEX IF NOT EXISTS idx_jobs_thread_key ON jobs(thread_key)`,
|
|
140
|
+
`CREATE INDEX IF NOT EXISTS idx_jobs_last_outbox ON jobs(last_outbox_id) WHERE last_outbox_id IS NOT NULL`,
|
|
141
|
+
// A2A-L1 — fast "children of parent_id" lookup for /a2a stats + audit
|
|
142
|
+
// join. parent_id is sparse (only rows from mcp__imhub__call_agent) so
|
|
143
|
+
// the partial index keeps it small.
|
|
144
|
+
`CREATE INDEX IF NOT EXISTS idx_jobs_parent ON jobs(parent_id) WHERE parent_id IS NOT NULL`,
|
|
145
|
+
];
|
|
146
|
+
for (const sql of indexes) {
|
|
147
|
+
try {
|
|
148
|
+
d.prepare(sql).run();
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
rootLogger.warn({ component: 'job-board', event: 'job-board.index_create_failed', sql, err: err instanceof Error ? err.message : String(err) }, 'index create failed (continuing)');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
93
154
|
}
|
|
94
|
-
/** Default
|
|
155
|
+
/** Default retention (days) for terminal explicit /job rows. */
|
|
95
156
|
function resolveRetentionDays() {
|
|
96
157
|
const raw = process.env.IM_HUB_JOB_RETENTION_DAYS;
|
|
97
158
|
if (raw) {
|
|
@@ -101,6 +162,20 @@ function resolveRetentionDays() {
|
|
|
101
162
|
}
|
|
102
163
|
return 30;
|
|
103
164
|
}
|
|
165
|
+
/** Retention (hours) for terminal inline jobs. Inline rows are auto-tracked
|
|
166
|
+
* from every inbound IM message — they accrue 100s of rows/day even on a
|
|
167
|
+
* quiet thread, so the default is much shorter than the explicit /job 30-day
|
|
168
|
+
* retention. Phase 3's recovery sweep needs at least the user's "回 1 重发"
|
|
169
|
+
* window, so don't drop below ~6h in production. */
|
|
170
|
+
function resolveInlineRetentionHours() {
|
|
171
|
+
const raw = process.env.IMHUB_INLINE_JOB_RETENTION_HOURS;
|
|
172
|
+
if (raw) {
|
|
173
|
+
const n = parseInt(raw, 10);
|
|
174
|
+
if (Number.isFinite(n) && n > 0)
|
|
175
|
+
return n;
|
|
176
|
+
}
|
|
177
|
+
return 24;
|
|
178
|
+
}
|
|
104
179
|
/** How often pruneOldJobs() is fired by the auto-sweep timer. 0 disables. */
|
|
105
180
|
const RETENTION_SWEEP_INTERVAL_MS = 6 * 60 * 60 * 1000;
|
|
106
181
|
let retentionSweepTimer = null;
|
|
@@ -108,6 +183,16 @@ const helper = createSqliteHelper({
|
|
|
108
183
|
file: BOARD_DB,
|
|
109
184
|
component: 'job-board',
|
|
110
185
|
logger: rootLogger,
|
|
186
|
+
// Schema only declares columns that have ALWAYS existed (v0.x onward).
|
|
187
|
+
// creator_id / workspace_id / Phase-2 columns are added in migrateColumns
|
|
188
|
+
// via idempotent ALTER TABLE, because legacy production dbs predate the
|
|
189
|
+
// v1.0 ownership migration. Indexes that reference any of those columns
|
|
190
|
+
// also live in migrateColumns — running them here against a pre-v1.0
|
|
191
|
+
// table throws "no such column" and broke the entire helper:
|
|
192
|
+
// sqlite-helper enters the "broken" state on any schema exec error
|
|
193
|
+
// → every subsequent get() returns null → job-board permanently disabled.
|
|
194
|
+
// That bug shipped from v1.0 onward but only surfaced once Phase 2
|
|
195
|
+
// landed and someone ran a fresh agim binary against a legacy jobs.db.
|
|
111
196
|
schema: `
|
|
112
197
|
CREATE TABLE IF NOT EXISTS jobs (
|
|
113
198
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -117,16 +202,12 @@ const helper = createSqliteHelper({
|
|
|
117
202
|
result TEXT,
|
|
118
203
|
error TEXT,
|
|
119
204
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
120
|
-
completed_at TEXT
|
|
121
|
-
creator_id TEXT NOT NULL DEFAULT '',
|
|
122
|
-
workspace_id TEXT NOT NULL DEFAULT ''
|
|
205
|
+
completed_at TEXT
|
|
123
206
|
);
|
|
124
207
|
CREATE INDEX IF NOT EXISTS idx_jobs_created ON jobs(created_at);
|
|
125
|
-
CREATE INDEX IF NOT EXISTS idx_jobs_creator ON jobs(creator_id);
|
|
126
|
-
CREATE INDEX IF NOT EXISTS idx_jobs_status_created ON jobs(status, created_at);
|
|
127
208
|
`,
|
|
128
209
|
init: (d) => {
|
|
129
|
-
|
|
210
|
+
migrateColumns(d);
|
|
130
211
|
// First-time / cold-start cleanup: any 'running' rows are leftover from a
|
|
131
212
|
// prior process that didn't get to finalize.
|
|
132
213
|
reapStaleRunning(d);
|
|
@@ -145,6 +226,149 @@ const helper = createSqliteHelper({
|
|
|
145
226
|
}
|
|
146
227
|
},
|
|
147
228
|
});
|
|
229
|
+
/** Phase 3 — shutdown step. Mark every running inline job as 'interrupted'
|
|
230
|
+
* so the next startup can offer the user a retry. Returns the row count for
|
|
231
|
+
* logging. Safe to call on a degraded DB (returns 0). */
|
|
232
|
+
export function markRunningInlineJobsInterrupted(reason = 'agim shutdown') {
|
|
233
|
+
const d = getDb();
|
|
234
|
+
if (!d)
|
|
235
|
+
return 0;
|
|
236
|
+
try {
|
|
237
|
+
const info = d.prepare(`UPDATE jobs
|
|
238
|
+
SET status = 'interrupted',
|
|
239
|
+
completed_at = datetime('now'),
|
|
240
|
+
error = ?
|
|
241
|
+
WHERE kind = 'inline'
|
|
242
|
+
AND status IN ('pending', 'running')`).run(reason.slice(0, 1024));
|
|
243
|
+
if (info.changes > 0) {
|
|
244
|
+
rootLogger.info({ component: 'job-board', event: 'job-board.interrupted', count: info.changes, reason }, `Marked ${info.changes} inline job(s) as interrupted (${reason})`);
|
|
245
|
+
}
|
|
246
|
+
return info.changes;
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
rootLogger.warn({ component: 'job-board', event: 'job-board.interrupt_failed', err: err instanceof Error ? err.message : String(err) }, 'markRunningInlineJobsInterrupted failed');
|
|
250
|
+
return 0;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/** Phase 3 — startup scan. Return interrupted inline jobs that finished
|
|
254
|
+
* within the recovery window (default 10 min via IMHUB_RECOVERY_WINDOW_MS).
|
|
255
|
+
* Caller iterates the result, sends a per-thread "retry / cancel" prompt,
|
|
256
|
+
* and tracks the user's reply via the in-memory pending-retry map.
|
|
257
|
+
*
|
|
258
|
+
* Older interrupted rows are NOT returned — they get swept to 'abandoned'
|
|
259
|
+
* by sweepAbandonedInterrupted() so they don't pile up in the table. */
|
|
260
|
+
export function findRecoverableInterrupted(windowMs) {
|
|
261
|
+
const d = getDb();
|
|
262
|
+
if (!d)
|
|
263
|
+
return [];
|
|
264
|
+
const ms = windowMs ?? resolveRecoveryWindowMs();
|
|
265
|
+
const seconds = Math.max(1, Math.floor(ms / 1000));
|
|
266
|
+
try {
|
|
267
|
+
return d.prepare(`SELECT * FROM jobs
|
|
268
|
+
WHERE kind = 'inline'
|
|
269
|
+
AND status = 'interrupted'
|
|
270
|
+
AND completed_at >= datetime('now', '-' || ? || ' seconds')
|
|
271
|
+
AND thread_key <> ''
|
|
272
|
+
ORDER BY completed_at ASC`).all(seconds);
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
rootLogger.warn({ component: 'job-board', event: 'job-board.recover_query_failed', err: err instanceof Error ? err.message : String(err) }, 'findRecoverableInterrupted failed');
|
|
276
|
+
return [];
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/** Phase 3 — startup sweep. Any 'interrupted' inline row past the recovery
|
|
280
|
+
* window transitions to 'abandoned' (preserved for audit but never
|
|
281
|
+
* notified). Returns the row count. */
|
|
282
|
+
export function sweepAbandonedInterrupted(windowMs) {
|
|
283
|
+
const d = getDb();
|
|
284
|
+
if (!d)
|
|
285
|
+
return 0;
|
|
286
|
+
const ms = windowMs ?? resolveRecoveryWindowMs();
|
|
287
|
+
const seconds = Math.max(1, Math.floor(ms / 1000));
|
|
288
|
+
try {
|
|
289
|
+
const info = d.prepare(`UPDATE jobs
|
|
290
|
+
SET status = 'abandoned'
|
|
291
|
+
WHERE kind = 'inline'
|
|
292
|
+
AND status = 'interrupted'
|
|
293
|
+
AND completed_at < datetime('now', '-' || ? || ' seconds')`).run(seconds);
|
|
294
|
+
if (info.changes > 0) {
|
|
295
|
+
rootLogger.info({ component: 'job-board', event: 'job-board.abandoned', count: info.changes }, `Swept ${info.changes} stale interrupted inline job(s) to 'abandoned'`);
|
|
296
|
+
}
|
|
297
|
+
return info.changes;
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
rootLogger.warn({ component: 'job-board', event: 'job-board.abandon_failed', err: err instanceof Error ? err.message : String(err) }, 'sweepAbandonedInterrupted failed');
|
|
301
|
+
return 0;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/** Phase 3 — link an old interrupted row to its replacement once the user
|
|
305
|
+
* picks "1 重发". The new row's id lands in `replaced_by`; the old row
|
|
306
|
+
* transitions interrupted → replaced so it stops showing up in any future
|
|
307
|
+
* recovery scan. */
|
|
308
|
+
export function markJobReplacedBy(oldId, newId) {
|
|
309
|
+
if (oldId <= 0 || newId <= 0)
|
|
310
|
+
return;
|
|
311
|
+
const d = getDb();
|
|
312
|
+
if (!d)
|
|
313
|
+
return;
|
|
314
|
+
try {
|
|
315
|
+
d.prepare(`UPDATE jobs
|
|
316
|
+
SET status = 'replaced',
|
|
317
|
+
replaced_by = ?
|
|
318
|
+
WHERE id = ? AND status = 'interrupted'`).run(newId, oldId);
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
rootLogger.debug({ component: 'job-board', event: 'markJobReplacedBy_failed', oldId, newId, err: String(err) });
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/** Phase 3 — user picked "2 取消" on the retry prompt. Interrupted → cancelled. */
|
|
325
|
+
export function markInterruptedCancelled(id) {
|
|
326
|
+
if (id <= 0)
|
|
327
|
+
return;
|
|
328
|
+
const d = getDb();
|
|
329
|
+
if (!d)
|
|
330
|
+
return;
|
|
331
|
+
try {
|
|
332
|
+
d.prepare(`UPDATE jobs
|
|
333
|
+
SET status = 'cancelled'
|
|
334
|
+
WHERE id = ? AND status = 'interrupted'`).run(id);
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
rootLogger.debug({ component: 'job-board', event: 'markInterruptedCancelled_failed', id, err: String(err) });
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
/** Recovery window in milliseconds. Default 10 minutes. Env override
|
|
341
|
+
* IMHUB_RECOVERY_WINDOW_MS. */
|
|
342
|
+
function resolveRecoveryWindowMs() {
|
|
343
|
+
const raw = process.env.IMHUB_RECOVERY_WINDOW_MS;
|
|
344
|
+
if (raw) {
|
|
345
|
+
const n = parseInt(raw, 10);
|
|
346
|
+
if (Number.isFinite(n) && n > 0)
|
|
347
|
+
return n;
|
|
348
|
+
}
|
|
349
|
+
return 10 * 60 * 1000;
|
|
350
|
+
}
|
|
351
|
+
/** Exported for the recovery module so it can use the same window for the
|
|
352
|
+
* user-facing "10 min 内有效" copy. */
|
|
353
|
+
export function getRecoveryWindowMs() {
|
|
354
|
+
return resolveRecoveryWindowMs();
|
|
355
|
+
}
|
|
356
|
+
/** Test hook: artificially age a row's completed_at (or created_at) by a
|
|
357
|
+
* SQLite modifier like '-2 hours' or '-40 days'. Production code must NOT
|
|
358
|
+
* call this; it's the only practical way to exercise retention without
|
|
359
|
+
* sleeping in tests. */
|
|
360
|
+
export function _backdateForTests(id, modifier) {
|
|
361
|
+
const d = getDb();
|
|
362
|
+
if (!d)
|
|
363
|
+
return;
|
|
364
|
+
try {
|
|
365
|
+
d.prepare(`UPDATE jobs
|
|
366
|
+
SET completed_at = datetime(COALESCE(completed_at, datetime('now')), ?),
|
|
367
|
+
created_at = datetime(created_at, ?)
|
|
368
|
+
WHERE id = ?`).run(modifier, modifier, id);
|
|
369
|
+
}
|
|
370
|
+
catch { /* tests fail loudly via the next assertion */ }
|
|
371
|
+
}
|
|
148
372
|
/** Stop the retention sweep (used by tests + graceful shutdown). */
|
|
149
373
|
export function stopJobRetentionSweep() {
|
|
150
374
|
if (retentionSweepTimer) {
|
|
@@ -164,11 +388,40 @@ export function createJob(agent, prompt, opts = {}) {
|
|
|
164
388
|
const d = getDb();
|
|
165
389
|
if (!d)
|
|
166
390
|
throw new Error('Job board unavailable (SQLite not initialized)');
|
|
167
|
-
const row = d.prepare(
|
|
391
|
+
const row = d.prepare(`INSERT INTO jobs
|
|
392
|
+
(agent, prompt, status, creator_id, workspace_id, thread_key, kind, parent_id, call_depth)
|
|
393
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(agent, prompt, 'pending', opts.creatorId || '', opts.workspaceId || '', opts.threadKey || '', opts.kind || 'job', opts.parentId ?? null, opts.callDepth ?? 0);
|
|
168
394
|
const id = Number(row.lastInsertRowid);
|
|
169
395
|
eventBus.publish({ type: 'job', phase: 'created', jobId: id, agent });
|
|
170
396
|
return id;
|
|
171
397
|
}
|
|
398
|
+
/** Inline-job convenience: same as createJob but never throws — returns -1
|
|
399
|
+
* when the board is disabled / locked. Caller is expected to log + carry
|
|
400
|
+
* on with the in-memory fast path. The whole tracking machinery short-
|
|
401
|
+
* circuits when env IMHUB_INLINE_JOB_TRACKING=0.
|
|
402
|
+
*
|
|
403
|
+
* parentId/callDepth are A2A-L1 hand-offs: when an agent tool-calls
|
|
404
|
+
* another agent via mcp__imhub__call_agent, the bus routes through here
|
|
405
|
+
* to record the parent/depth relationship. User-originated rows leave
|
|
406
|
+
* these undefined → NULL parent, depth=0. */
|
|
407
|
+
export function createInlineJob(opts) {
|
|
408
|
+
if (process.env.IMHUB_INLINE_JOB_TRACKING === '0')
|
|
409
|
+
return -1;
|
|
410
|
+
try {
|
|
411
|
+
return createJob(opts.agent, opts.prompt, {
|
|
412
|
+
kind: 'inline',
|
|
413
|
+
threadKey: opts.threadKey,
|
|
414
|
+
creatorId: opts.creatorId,
|
|
415
|
+
workspaceId: opts.workspaceId,
|
|
416
|
+
parentId: opts.parentId ?? null,
|
|
417
|
+
callDepth: opts.callDepth ?? 0,
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
catch (err) {
|
|
421
|
+
rootLogger.warn({ component: 'job-board', event: 'job-board.inline_create_failed', err: err instanceof Error ? err.message : String(err) }, 'createInlineJob fell back to in-memory path');
|
|
422
|
+
return -1;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
172
425
|
export function getJob(id, opts = {}) {
|
|
173
426
|
const d = getDb();
|
|
174
427
|
if (!d)
|
|
@@ -218,6 +471,119 @@ function updateJob(id, fields) {
|
|
|
218
471
|
return;
|
|
219
472
|
d.prepare(`UPDATE jobs SET ${sets.join(', ')} WHERE id = ?`).run(...vals, id);
|
|
220
473
|
}
|
|
474
|
+
// ─── Inline-job state-machine helpers ────────────────────────────────
|
|
475
|
+
//
|
|
476
|
+
// All of these are no-op when id<=0 (board disabled / inline tracking off)
|
|
477
|
+
// or when the DB is unavailable. The caller never has to guard.
|
|
478
|
+
/** Replace the agent column. Used by inline jobs: cli.ts creates the row with
|
|
479
|
+
* the default agent name before routing resolves the actual agent, then this
|
|
480
|
+
* fires inside onAgentResolved to correct the record. No-op when status is
|
|
481
|
+
* past 'running' so we don't rewrite history. */
|
|
482
|
+
export function updateJobAgent(id, agent) {
|
|
483
|
+
if (id <= 0 || !agent)
|
|
484
|
+
return;
|
|
485
|
+
const d = getDb();
|
|
486
|
+
if (!d)
|
|
487
|
+
return;
|
|
488
|
+
try {
|
|
489
|
+
d.prepare(`UPDATE jobs SET agent = ? WHERE id = ? AND status IN ('pending', 'running')`).run(agent, id);
|
|
490
|
+
}
|
|
491
|
+
catch (err) {
|
|
492
|
+
rootLogger.debug({ component: 'job-board', event: 'updateJobAgent_failed', id, agent, err: String(err) });
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
/** pending → running. Stamps started_at. Idempotent: an already-running row
|
|
496
|
+
* keeps its original started_at. */
|
|
497
|
+
export function markJobRunning(id) {
|
|
498
|
+
if (id <= 0)
|
|
499
|
+
return;
|
|
500
|
+
const d = getDb();
|
|
501
|
+
if (!d)
|
|
502
|
+
return;
|
|
503
|
+
try {
|
|
504
|
+
d.prepare(`UPDATE jobs
|
|
505
|
+
SET status = 'running',
|
|
506
|
+
started_at = COALESCE(started_at, datetime('now'))
|
|
507
|
+
WHERE id = ? AND status IN ('pending', 'running')`).run(id);
|
|
508
|
+
}
|
|
509
|
+
catch (err) {
|
|
510
|
+
rootLogger.debug({ component: 'job-board', event: 'markJobRunning_failed', id, err: String(err) });
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
/** running → completed (result captured). For inline kind 'delivered' is the
|
|
514
|
+
* next hop, triggered by the outbox worker once the IM platform confirms.
|
|
515
|
+
* For 'job' kind this is the terminal success state (no delivery channel). */
|
|
516
|
+
export function markJobCompleted(id, result) {
|
|
517
|
+
if (id <= 0)
|
|
518
|
+
return;
|
|
519
|
+
const d = getDb();
|
|
520
|
+
if (!d)
|
|
521
|
+
return;
|
|
522
|
+
try {
|
|
523
|
+
d.prepare(`UPDATE jobs
|
|
524
|
+
SET status = 'completed',
|
|
525
|
+
completed_at = datetime('now'),
|
|
526
|
+
result = ?
|
|
527
|
+
WHERE id = ? AND status IN ('pending', 'running')`).run(result, id);
|
|
528
|
+
}
|
|
529
|
+
catch (err) {
|
|
530
|
+
rootLogger.debug({ component: 'job-board', event: 'markJobCompleted_failed', id, err: String(err) });
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
/** Link a job row to the outbox row that will (try to) deliver its result.
|
|
534
|
+
* Worker uses outbox.job_id to find this row; this column is the reverse
|
|
535
|
+
* link for /job inspection ("which outbox row carried this reply"). */
|
|
536
|
+
export function linkJobOutbox(id, outboxId) {
|
|
537
|
+
if (id <= 0 || outboxId <= 0)
|
|
538
|
+
return;
|
|
539
|
+
const d = getDb();
|
|
540
|
+
if (!d)
|
|
541
|
+
return;
|
|
542
|
+
try {
|
|
543
|
+
d.prepare(`UPDATE jobs SET last_outbox_id = ? WHERE id = ?`).run(outboxId, id);
|
|
544
|
+
}
|
|
545
|
+
catch (err) {
|
|
546
|
+
rootLogger.debug({ component: 'job-board', event: 'linkJobOutbox_failed', id, outboxId, err: String(err) });
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
/** completed → delivered. Called by the outbox worker after the IM platform
|
|
550
|
+
* ack. No-op if the row isn't in 'completed' (e.g. user cancelled meanwhile). */
|
|
551
|
+
export function markJobDelivered(id) {
|
|
552
|
+
if (id <= 0)
|
|
553
|
+
return;
|
|
554
|
+
const d = getDb();
|
|
555
|
+
if (!d)
|
|
556
|
+
return;
|
|
557
|
+
try {
|
|
558
|
+
d.prepare(`UPDATE jobs
|
|
559
|
+
SET status = 'delivered',
|
|
560
|
+
delivered_at = datetime('now')
|
|
561
|
+
WHERE id = ? AND status = 'completed'`).run(id);
|
|
562
|
+
}
|
|
563
|
+
catch (err) {
|
|
564
|
+
rootLogger.debug({ component: 'job-board', event: 'markJobDelivered_failed', id, err: String(err) });
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
/** Terminal failure (agent threw, outbox gave up, etc.). Captures the error
|
|
568
|
+
* on the row. completed_at gets stamped so retention sweeps treat the row
|
|
569
|
+
* the same as a normal terminal state. */
|
|
570
|
+
export function markJobFailed(id, error) {
|
|
571
|
+
if (id <= 0)
|
|
572
|
+
return;
|
|
573
|
+
const d = getDb();
|
|
574
|
+
if (!d)
|
|
575
|
+
return;
|
|
576
|
+
try {
|
|
577
|
+
d.prepare(`UPDATE jobs
|
|
578
|
+
SET status = 'failed',
|
|
579
|
+
completed_at = datetime('now'),
|
|
580
|
+
error = ?
|
|
581
|
+
WHERE id = ? AND status NOT IN ('cancelled', 'replaced', 'abandoned')`).run(error.slice(0, 4096), id);
|
|
582
|
+
}
|
|
583
|
+
catch (err) {
|
|
584
|
+
rootLogger.debug({ component: 'job-board', event: 'markJobFailed_failed', id, err: String(err) });
|
|
585
|
+
}
|
|
586
|
+
}
|
|
221
587
|
/**
|
|
222
588
|
* Acquire a job slot. Returns immediately when capacity available, otherwise
|
|
223
589
|
* queues the caller and returns a promise that resolves when a slot frees.
|
|
@@ -331,20 +697,37 @@ export function cancelJob(id, opts = {}) {
|
|
|
331
697
|
export function pruneOldJobs(d = getDb(), daysRetention = resolveRetentionDays()) {
|
|
332
698
|
if (!d)
|
|
333
699
|
return 0;
|
|
700
|
+
const inlineHours = resolveInlineRetentionHours();
|
|
701
|
+
// Terminal statuses across both kinds. 'delivered' is inline-only.
|
|
702
|
+
// 'interrupted' / 'replaced' / 'abandoned' are Phase 3 statuses — pre-
|
|
703
|
+
// declared here so retention works consistently when Phase 3 lands.
|
|
704
|
+
const TERMINAL = "'completed','delivered','failed','cancelled','replaced','abandoned'";
|
|
334
705
|
try {
|
|
335
|
-
|
|
706
|
+
// Two passes — different retention by kind. SQLite can't do this in one
|
|
707
|
+
// statement without a CASE-on-window-or-something gnarly; two prepares
|
|
708
|
+
// keeps it readable and the row counts attributable.
|
|
709
|
+
const jobInfo = d.prepare(`
|
|
336
710
|
DELETE FROM jobs
|
|
337
|
-
WHERE
|
|
711
|
+
WHERE kind = 'job'
|
|
712
|
+
AND status IN (${TERMINAL})
|
|
338
713
|
AND completed_at IS NOT NULL
|
|
339
714
|
AND completed_at < datetime('now', ?)
|
|
340
715
|
`).run(`-${daysRetention} days`);
|
|
341
|
-
|
|
716
|
+
const inlineInfo = d.prepare(`
|
|
717
|
+
DELETE FROM jobs
|
|
718
|
+
WHERE kind = 'inline'
|
|
719
|
+
AND status IN (${TERMINAL})
|
|
720
|
+
AND COALESCE(completed_at, created_at) < datetime('now', ?)
|
|
721
|
+
`).run(`-${inlineHours} hours`);
|
|
722
|
+
const total = jobInfo.changes + inlineInfo.changes;
|
|
723
|
+
if (total > 0) {
|
|
342
724
|
rootLogger.info({
|
|
343
725
|
component: 'job-board', event: 'job-board.pruned',
|
|
344
|
-
|
|
345
|
-
|
|
726
|
+
deletedJob: jobInfo.changes, deletedInline: inlineInfo.changes,
|
|
727
|
+
days: daysRetention, inlineHours,
|
|
728
|
+
}, `Pruned ${jobInfo.changes} job + ${inlineInfo.changes} inline row(s)`);
|
|
346
729
|
}
|
|
347
|
-
return
|
|
730
|
+
return total;
|
|
348
731
|
}
|
|
349
732
|
catch (err) {
|
|
350
733
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-board.js","sourceRoot":"","sources":["../../src/core/job-board.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"job-board.js","sourceRoot":"","sources":["../../src/core/job-board.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
interface PendingRetry {
|
|
2
|
+
jobId: number;
|
|
3
|
+
agent: string;
|
|
4
|
+
prompt: string;
|
|
5
|
+
threadKey: string;
|
|
6
|
+
platform: string;
|
|
7
|
+
channelId: string;
|
|
8
|
+
threadId: string;
|
|
9
|
+
creatorId: string;
|
|
10
|
+
/** ms-epoch when the entry expires (interrupted_at + window). */
|
|
11
|
+
expiresAt: number;
|
|
12
|
+
}
|
|
13
|
+
/** Test hook — wipe the in-memory state. */
|
|
14
|
+
export declare function _resetPendingForTests(): void;
|
|
15
|
+
/** Test hook — inspect current state. */
|
|
16
|
+
export declare function _peekPendingForTests(): Map<string, PendingRetry>;
|
|
17
|
+
/** Run once on agim startup, after messengers + sink are up. */
|
|
18
|
+
export declare function scanInterruptedAndNotify(): Promise<{
|
|
19
|
+
notified: number;
|
|
20
|
+
abandoned: number;
|
|
21
|
+
}>;
|
|
22
|
+
/** Periodic in-memory expiry sweep. Removes entries whose `expiresAt` has
|
|
23
|
+
* passed without a user reply. Called from cli.ts on a setInterval. */
|
|
24
|
+
export declare function sweepExpiredPending(now?: number): number;
|
|
25
|
+
/** Result of a recovery-reply attempt. */
|
|
26
|
+
export type RecoveryReplyOutcome = {
|
|
27
|
+
kind: 'not-pending';
|
|
28
|
+
} | {
|
|
29
|
+
kind: 'not-recovery-reply';
|
|
30
|
+
} | {
|
|
31
|
+
kind: 'retried';
|
|
32
|
+
newJobId: number;
|
|
33
|
+
oldJobId: number;
|
|
34
|
+
entry: PendingRetry;
|
|
35
|
+
} | {
|
|
36
|
+
kind: 'cancelled';
|
|
37
|
+
oldJobId: number;
|
|
38
|
+
};
|
|
39
|
+
/** Try to interpret a user's reply as a recovery decision. Returns an
|
|
40
|
+
* outcome the caller can render. Side-effect: on a recognized decision,
|
|
41
|
+
* the pending entry is removed and the DB row transitions. */
|
|
42
|
+
export declare function tryHandleRecoveryReply(threadKey: string, text: string): RecoveryReplyOutcome;
|
|
43
|
+
/** Convenience for cli.ts: was the thread expecting a recovery reply just
|
|
44
|
+
* before we routed this message? Used to skip approval / reminder
|
|
45
|
+
* interceptors when the user is replying to a recovery prompt. */
|
|
46
|
+
export declare function hasPendingRecovery(threadKey: string): boolean;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=job-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-recovery.d.ts","sourceRoot":"","sources":["../../src/core/job-recovery.ts"],"names":[],"mappings":"AAyCA,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAA;CAClB;AAOD,4CAA4C;AAC5C,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAEhE;AA+BD,gEAAgE;AAChE,wBAAsB,wBAAwB,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA8DjG;AAED;wEACwE;AACxE,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM,CAYpE;AAED,0CAA0C;AAC1C,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3C;;+DAE+D;AAC/D,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAkC5F;AAED;;mEAEmE;AACnE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|