@luckydraw/cumulus 1.0.4 → 1.0.6
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 +18 -0
- package/dist/gateway/daemon.d.ts.map +1 -1
- package/dist/gateway/daemon.js +53 -18
- package/dist/gateway/daemon.js.map +1 -1
- package/dist/gateway/gateway-agents-mcp.js +133 -0
- package/dist/gateway/gateway-agents-mcp.js.map +1 -1
- package/dist/gateway/jobs.d.ts +158 -0
- package/dist/gateway/jobs.d.ts.map +1 -0
- package/dist/gateway/jobs.js +498 -0
- package/dist/gateway/jobs.js.map +1 -0
- package/dist/gateway/scheduler.d.ts.map +1 -1
- package/dist/gateway/scheduler.js +10 -30
- package/dist/gateway/scheduler.js.map +1 -1
- package/dist/gateway/senders.d.ts +29 -0
- package/dist/gateway/senders.d.ts.map +1 -0
- package/dist/gateway/senders.js +34 -0
- package/dist/gateway/senders.js.map +1 -0
- package/dist/gateway/server.d.ts +16 -0
- package/dist/gateway/server.d.ts.map +1 -1
- package/dist/gateway/server.js +188 -2
- package/dist/gateway/server.js.map +1 -1
- package/dist/gateway/setup.d.ts.map +1 -1
- package/dist/gateway/setup.js +10 -0
- package/dist/gateway/setup.js.map +1 -1
- package/dist/lib/gateway.d.ts +24 -44
- package/dist/lib/gateway.d.ts.map +1 -1
- package/dist/lib/gateway.js +47 -97
- package/dist/lib/gateway.js.map +1 -1
- package/dist/lib/tool-inventory.d.ts.map +1 -1
- package/dist/lib/tool-inventory.js +9 -1
- package/dist/lib/tool-inventory.js.map +1 -1
- package/docs/conditional-continuation.md +102 -147
- package/docs/web-app-agent-guide.md +14 -1
- package/examples/web-app-agent/README.md +8 -1
- package/examples/web-app-agent/thread-config.visitor.example.json +12 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/gateway/jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/gateway/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,IAAI,IAAI,IAAI,CAAC;IACb,mEAAmE;IACnE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,kDAAkD;IAClD,MAAM,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;CAC7D;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAgB5E;AA2BD,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,sBAAsB;IACtB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/gateway/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,IAAI,IAAI,IAAI,CAAC;IACb,mEAAmE;IACnE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,kDAAkD;IAClD,MAAM,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;CAC7D;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAgB5E;AA2BD,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,sBAAsB;IACtB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe,CA6NvE"}
|
|
@@ -13,8 +13,8 @@ import * as fs from 'fs';
|
|
|
13
13
|
import * as os from 'os';
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
import { loadThreadConfig, saveThreadConfig } from '../lib/config.js';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
16
|
+
import { automatedSender } from './senders.js';
|
|
17
|
+
import { deliverAgentTurn } from './server.js';
|
|
18
18
|
const THREADS_DIR = path.join(process.env.CUMULUS_DIR || path.join(os.homedir(), '.cumulus'), 'threads');
|
|
19
19
|
/**
|
|
20
20
|
* Parse a cron expression and check if it matches the current minute.
|
|
@@ -78,35 +78,15 @@ export function createScheduler(opts) {
|
|
|
78
78
|
const text = `[Scheduled trigger: ${schedule.id}] ${schedule.message}`;
|
|
79
79
|
// Task 120: a trigger fires on wall-clock time, not on the thread being free.
|
|
80
80
|
// Without this gate it spawned a second concurrent turn on the same thread
|
|
81
|
-
// (up to 4 observed on cdda, all writing the same projectDir).
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
sender: `schedule:${schedule.id}`,
|
|
88
|
-
type: 'inject',
|
|
89
|
-
targets: [threadName],
|
|
90
|
-
visibility: 'direct',
|
|
91
|
-
timestamp: Date.now(),
|
|
92
|
-
});
|
|
93
|
-
log(`Thread "${threadName}" busy — queued trigger "${schedule.id}" (position ${position})`);
|
|
81
|
+
// (up to 4 observed on cdda, all writing the same projectDir). The gate
|
|
82
|
+
// itself lives in server.ts's deliverAgentTurn (task 139), shared with job
|
|
83
|
+
// completions — every automated sender takes the same path.
|
|
84
|
+
const outcome = await deliverAgentTurn(threadName, text, automatedSender('schedule', schedule.id), opts.pipelineOpts);
|
|
85
|
+
if (outcome === 'queued') {
|
|
86
|
+
log(`Thread "${threadName}" busy — queued trigger "${schedule.id}"`);
|
|
94
87
|
}
|
|
95
|
-
else {
|
|
96
|
-
|
|
97
|
-
try {
|
|
98
|
-
await sendMessage({
|
|
99
|
-
threadName,
|
|
100
|
-
message: text,
|
|
101
|
-
...opts.pipelineOpts,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
catch (err) {
|
|
105
|
-
log(`Failed to fire trigger "${schedule.id}" on "${threadName}": ${err}`);
|
|
106
|
-
}
|
|
107
|
-
finally {
|
|
108
|
-
markThreadBusy(threadName, false);
|
|
109
|
-
}
|
|
88
|
+
else if (outcome === 'failed') {
|
|
89
|
+
log(`Failed to fire trigger "${schedule.id}" on "${threadName}"`);
|
|
110
90
|
}
|
|
111
91
|
// Auto-remove 'once' triggers after firing
|
|
112
92
|
if (schedule.trigger === 'once') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/gateway/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/gateway/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway-minted sender identities.
|
|
3
|
+
*
|
|
4
|
+
* Three kinds of thing start a turn on a thread: another thread, a transport
|
|
5
|
+
* (user/webhook), and the gateway itself — a scheduled trigger firing (task 120)
|
|
6
|
+
* or a background job finishing (task 139). Only the first is repliable.
|
|
7
|
+
*
|
|
8
|
+
* The gateway names its own senders `scheme:id`, which collides with the shape
|
|
9
|
+
* of a federation address (`gateway:thread`). Task 110's `isAgentSender` read any
|
|
10
|
+
* colon as federation, so `job:job_a1b2` and `schedule:nightly` were classified as
|
|
11
|
+
* agents and the recipient was told to reply to them — the exact phantom-thread
|
|
12
|
+
* hint task 110 exists to suppress, reintroduced by the sender names tasks 120 and
|
|
13
|
+
* 139 chose. Both task docs claimed the opposite; the claim was never tested.
|
|
14
|
+
*
|
|
15
|
+
* The scheme list lives here, in a module that imports nothing, so the sites that
|
|
16
|
+
* MINT these names and the predicate that CLASSIFIES them cannot drift apart:
|
|
17
|
+
* adding a scheme without making it non-repliable is not expressible.
|
|
18
|
+
*/
|
|
19
|
+
export declare const AUTOMATED_SENDER_SCHEMES: readonly ["job", "schedule"];
|
|
20
|
+
export type AutomatedSenderScheme = (typeof AUTOMATED_SENDER_SCHEMES)[number];
|
|
21
|
+
/** Mint the sender identity for a gateway-owned, non-repliable sender. */
|
|
22
|
+
export declare function automatedSender(scheme: AutomatedSenderScheme, id: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Is this sender the gateway itself rather than a thread?
|
|
25
|
+
*
|
|
26
|
+
* Checked BEFORE the federation-address rule, since these names share its shape.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isAutomatedSender(senderName: string): boolean;
|
|
29
|
+
//# sourceMappingURL=senders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"senders.d.ts","sourceRoot":"","sources":["../../src/gateway/senders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,eAAO,MAAM,wBAAwB,8BAA+B,CAAC;AAErE,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAG7D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway-minted sender identities.
|
|
3
|
+
*
|
|
4
|
+
* Three kinds of thing start a turn on a thread: another thread, a transport
|
|
5
|
+
* (user/webhook), and the gateway itself — a scheduled trigger firing (task 120)
|
|
6
|
+
* or a background job finishing (task 139). Only the first is repliable.
|
|
7
|
+
*
|
|
8
|
+
* The gateway names its own senders `scheme:id`, which collides with the shape
|
|
9
|
+
* of a federation address (`gateway:thread`). Task 110's `isAgentSender` read any
|
|
10
|
+
* colon as federation, so `job:job_a1b2` and `schedule:nightly` were classified as
|
|
11
|
+
* agents and the recipient was told to reply to them — the exact phantom-thread
|
|
12
|
+
* hint task 110 exists to suppress, reintroduced by the sender names tasks 120 and
|
|
13
|
+
* 139 chose. Both task docs claimed the opposite; the claim was never tested.
|
|
14
|
+
*
|
|
15
|
+
* The scheme list lives here, in a module that imports nothing, so the sites that
|
|
16
|
+
* MINT these names and the predicate that CLASSIFIES them cannot drift apart:
|
|
17
|
+
* adding a scheme without making it non-repliable is not expressible.
|
|
18
|
+
*/
|
|
19
|
+
export const AUTOMATED_SENDER_SCHEMES = ['job', 'schedule'];
|
|
20
|
+
/** Mint the sender identity for a gateway-owned, non-repliable sender. */
|
|
21
|
+
export function automatedSender(scheme, id) {
|
|
22
|
+
return `${scheme}:${id}`;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Is this sender the gateway itself rather than a thread?
|
|
26
|
+
*
|
|
27
|
+
* Checked BEFORE the federation-address rule, since these names share its shape.
|
|
28
|
+
*/
|
|
29
|
+
export function isAutomatedSender(senderName) {
|
|
30
|
+
if (!senderName)
|
|
31
|
+
return false;
|
|
32
|
+
return AUTOMATED_SENDER_SCHEMES.some(scheme => senderName.startsWith(`${scheme}:`));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=senders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"senders.js","sourceRoot":"","sources":["../../src/gateway/senders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,UAAU,CAAU,CAAC;AAIrE,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,MAA6B,EAAE,EAAU;IACvE,OAAO,GAAG,MAAM,IAAI,EAAE,EAAE,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,OAAO,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;AACtF,CAAC"}
|
package/dist/gateway/server.d.ts
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { type GatewayAgentsConfig } from '../lib/gateway.js';
|
|
18
18
|
import type { HooksConfig, NamespaceConfig, AppliedConfig } from './config.js';
|
|
19
|
+
import { type JobRegistryHandle } from './jobs.js';
|
|
19
20
|
import { type DemoCapDenial } from './namespaces.js';
|
|
20
21
|
import { type VapidConfig } from './push.js';
|
|
21
22
|
export interface GatewayServerOptions {
|
|
@@ -75,6 +76,8 @@ export interface GatewayServerHandle {
|
|
|
75
76
|
setScheduler: (s: {
|
|
76
77
|
reloadThread: (name: string) => void;
|
|
77
78
|
}) => void;
|
|
79
|
+
/** Set job registry reference — used by the background-job REST endpoints (task 139) */
|
|
80
|
+
setJobRegistry: (r: JobRegistryHandle) => void;
|
|
78
81
|
/** Set shutdown/restart callbacks — used by admin REST endpoints (cross-platform restart) */
|
|
79
82
|
setAdminCallbacks: (cbs: {
|
|
80
83
|
restart: () => void;
|
|
@@ -97,6 +100,19 @@ export declare function markThreadBusy(threadName: string, busy: boolean): void;
|
|
|
97
100
|
export declare function enqueueAgentMessage(threadName: string, msg: AgentQueuedMessage): number;
|
|
98
101
|
/** Check if a thread is currently busy (from any source). */
|
|
99
102
|
export declare function isThreadBusy(threadName: string): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Deliver an automated turn to a thread, honouring the single busy gate.
|
|
105
|
+
*
|
|
106
|
+
* THE one place a non-user, non-transport sender (a scheduled trigger, a
|
|
107
|
+
* finished background job) starts a turn. Task 120 had to add this gate to the
|
|
108
|
+
* scheduler after it spawned four concurrent turns on one thread; task 139
|
|
109
|
+
* needed the identical gate for job completions. Two copies of it is exactly
|
|
110
|
+
* the shape of task 100's stranded-queue bug, so there is one.
|
|
111
|
+
*
|
|
112
|
+
* Busy ⇒ queue (drained at the shared `markThreadBusy(false)` point).
|
|
113
|
+
* Idle ⇒ hold the thread busy for the duration, so the other paths see it.
|
|
114
|
+
*/
|
|
115
|
+
export declare function deliverAgentTurn(threadName: string, text: string, sender: string, pipelineOpts: Record<string, unknown>): Promise<'queued' | 'sent' | 'failed'>;
|
|
100
116
|
/**
|
|
101
117
|
* True if `err` is a benign socket error caused by a client disconnecting
|
|
102
118
|
* mid-stream (EPIPE/ECONNRESET/etc.). Used by the daemon's uncaughtException
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/gateway/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/gateway/server.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway/server.js
CHANGED
|
@@ -20,9 +20,9 @@ import * as fs from 'fs';
|
|
|
20
20
|
import * as http from 'http';
|
|
21
21
|
import * as os from 'os';
|
|
22
22
|
import * as path from 'path';
|
|
23
|
-
import { loadThreadConfig, saveThreadConfig, setConfigThreadsDir } from '../lib/config.js';
|
|
23
|
+
import { loadGlobalConfig, loadThreadConfig, mergeConfigs, saveThreadConfig, setConfigThreadsDir, } from '../lib/config.js';
|
|
24
24
|
import { loadEmbeddings, generateMissingEmbeddings } from '../lib/embeddings.js';
|
|
25
|
-
import { sendMessage, getOrCreateThread, clearThreadCache, getActiveSubprocessCount, setGatewayThreadsDir, } from '../lib/gateway.js';
|
|
25
|
+
import { sendMessage, getOrCreateThread, clearThreadCache, canRunBackgroundWork, getActiveSubprocessCount, setGatewayThreadsDir, } from '../lib/gateway.js';
|
|
26
26
|
import { verifyLicense, majorOf, LICENSE_CONTACT } from '../lib/license.js';
|
|
27
27
|
import { getPromptsDirForThreadPath, isValidCaptureId, readPromptCapture, } from '../lib/prompt-capture.js';
|
|
28
28
|
import { catchUpSegmentation, loadSegmentBoundaries, saveSegmentBoundaries, } from '../lib/segments.js';
|
|
@@ -33,8 +33,10 @@ import { authenticate, getPresentedKey } from './auth.js';
|
|
|
33
33
|
import { BridgeGateway } from './bridge/gateway.js';
|
|
34
34
|
import { applyConfigPatch, maskedConfigView } from './config.js';
|
|
35
35
|
import { handleEmailHook, handleFormHook, handleGenericWebhook, } from './hooks.js';
|
|
36
|
+
import { validateJobRequest } from './jobs.js';
|
|
36
37
|
import { allNamespaceKeys, demoMintDenial, extraMcpServersForThread, licenseBannerLines, namespaceForKey, namespaceForThread, resolveExecutorProxy, threadAccessibleToScope, threadVisibleToScope, } from './namespaces.js';
|
|
37
38
|
import { configureVapid, sendNotification, subscribe as pushSubscribe, unsubscribe as pushUnsubscribe, } from './push.js';
|
|
39
|
+
import { isAutomatedSender } from './senders.js';
|
|
38
40
|
import { validateTranscriptFlush, ingestTranscriptFlush } from './transcript-ingest.js';
|
|
39
41
|
const threadQueues = new Map();
|
|
40
42
|
const threadBusy = new Map();
|
|
@@ -127,6 +129,43 @@ export function enqueueAgentMessage(threadName, msg) {
|
|
|
127
129
|
export function isThreadBusy(threadName) {
|
|
128
130
|
return !!threadBusy.get(threadName);
|
|
129
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Deliver an automated turn to a thread, honouring the single busy gate.
|
|
134
|
+
*
|
|
135
|
+
* THE one place a non-user, non-transport sender (a scheduled trigger, a
|
|
136
|
+
* finished background job) starts a turn. Task 120 had to add this gate to the
|
|
137
|
+
* scheduler after it spawned four concurrent turns on one thread; task 139
|
|
138
|
+
* needed the identical gate for job completions. Two copies of it is exactly
|
|
139
|
+
* the shape of task 100's stranded-queue bug, so there is one.
|
|
140
|
+
*
|
|
141
|
+
* Busy ⇒ queue (drained at the shared `markThreadBusy(false)` point).
|
|
142
|
+
* Idle ⇒ hold the thread busy for the duration, so the other paths see it.
|
|
143
|
+
*/
|
|
144
|
+
export async function deliverAgentTurn(threadName, text, sender, pipelineOpts) {
|
|
145
|
+
if (threadBusy.get(threadName)) {
|
|
146
|
+
enqueueAgentMessage(threadName, {
|
|
147
|
+
text,
|
|
148
|
+
sender,
|
|
149
|
+
type: 'inject',
|
|
150
|
+
targets: [threadName],
|
|
151
|
+
visibility: 'direct',
|
|
152
|
+
timestamp: Date.now(),
|
|
153
|
+
});
|
|
154
|
+
return 'queued';
|
|
155
|
+
}
|
|
156
|
+
markThreadBusy(threadName, true);
|
|
157
|
+
try {
|
|
158
|
+
await sendMessage({ threadName, message: text, ...pipelineOpts });
|
|
159
|
+
return 'sent';
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
console.error(`[Gateway] Failed to deliver "${sender}" turn on "${threadName}": ${err}`);
|
|
163
|
+
return 'failed';
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
markThreadBusy(threadName, false);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
130
169
|
function enqueue(threadName, item) {
|
|
131
170
|
if (!threadQueues.has(threadName)) {
|
|
132
171
|
threadQueues.set(threadName, []);
|
|
@@ -597,6 +636,10 @@ const agentQueues = new Map();
|
|
|
597
636
|
export function isAgentSender(senderName) {
|
|
598
637
|
if (!senderName)
|
|
599
638
|
return false;
|
|
639
|
+
// Gateway-minted senders (job:<id>, schedule:<id>) share the shape of a
|
|
640
|
+
// federation address but route nowhere, so they must be ruled out FIRST.
|
|
641
|
+
if (isAutomatedSender(senderName))
|
|
642
|
+
return false;
|
|
600
643
|
// Federation address ("gateway:thread") — a reply routes over federation
|
|
601
644
|
if (senderName.includes(':'))
|
|
602
645
|
return true;
|
|
@@ -1386,6 +1429,115 @@ async function handleDeleteSchedule(threadName, scheduleId, res, scheduler) {
|
|
|
1386
1429
|
jsonResponse(res, 500, { error: String(err) });
|
|
1387
1430
|
}
|
|
1388
1431
|
}
|
|
1432
|
+
// ─── Background job handlers (task 139) ────────────────────
|
|
1433
|
+
/**
|
|
1434
|
+
* Can this thread start background jobs?
|
|
1435
|
+
*
|
|
1436
|
+
* `run_job` is arbitrary shell execution reached over MCP, so an unguarded
|
|
1437
|
+
* endpoint would let a thread that denies `Bash` run shell anyway — exactly
|
|
1438
|
+
* the bypass task 136 closed for `read_file`. Gated on the same derived
|
|
1439
|
+
* predicate the seeding gate uses (task 134), against the MERGED config, so a
|
|
1440
|
+
* global denial counts. The check lives at this seam and not in the tool list
|
|
1441
|
+
* because the MCP shim cannot see thread config, and a thread configured with
|
|
1442
|
+
* a denylist would otherwise be silently granted each new tool (task 137).
|
|
1443
|
+
*/
|
|
1444
|
+
async function threadCanRunJobs(threadName) {
|
|
1445
|
+
try {
|
|
1446
|
+
const merged = mergeConfigs(await loadGlobalConfig(), await loadThreadConfig(threadName));
|
|
1447
|
+
return canRunBackgroundWork(merged);
|
|
1448
|
+
}
|
|
1449
|
+
catch {
|
|
1450
|
+
return false;
|
|
1451
|
+
}
|
|
1452
|
+
}
|
|
1453
|
+
async function handleListJobs(threadName, res, jobs) {
|
|
1454
|
+
if (!jobs) {
|
|
1455
|
+
jsonResponse(res, 503, { error: 'Job registry not available' });
|
|
1456
|
+
return;
|
|
1457
|
+
}
|
|
1458
|
+
jsonResponse(res, 200, { jobs: jobs.list(threadName) });
|
|
1459
|
+
}
|
|
1460
|
+
async function handleCreateJob(threadName, req, res, jobs, projectRoot) {
|
|
1461
|
+
if (!jobs) {
|
|
1462
|
+
jsonResponse(res, 503, { error: 'Job registry not available' });
|
|
1463
|
+
return;
|
|
1464
|
+
}
|
|
1465
|
+
let body;
|
|
1466
|
+
try {
|
|
1467
|
+
body = JSON.parse(await readBody(req));
|
|
1468
|
+
}
|
|
1469
|
+
catch {
|
|
1470
|
+
jsonResponse(res, 400, { error: 'Invalid JSON body' });
|
|
1471
|
+
return;
|
|
1472
|
+
}
|
|
1473
|
+
const validation = validateJobRequest(body);
|
|
1474
|
+
if (!validation.ok) {
|
|
1475
|
+
jsonResponse(res, 400, { error: validation.error });
|
|
1476
|
+
return;
|
|
1477
|
+
}
|
|
1478
|
+
if (!(await threadCanRunJobs(threadName))) {
|
|
1479
|
+
jsonResponse(res, 403, {
|
|
1480
|
+
error: 'This thread is not permitted to run shell commands, so it cannot start background jobs.',
|
|
1481
|
+
});
|
|
1482
|
+
return;
|
|
1483
|
+
}
|
|
1484
|
+
// Default to where the thread's own turns run, so a job sees the same tree
|
|
1485
|
+
// the thread has been reading and editing.
|
|
1486
|
+
let cwd = body.cwd;
|
|
1487
|
+
if (!cwd) {
|
|
1488
|
+
try {
|
|
1489
|
+
const merged = mergeConfigs(await loadGlobalConfig(), await loadThreadConfig(threadName));
|
|
1490
|
+
cwd = merged.projectDir;
|
|
1491
|
+
}
|
|
1492
|
+
catch {
|
|
1493
|
+
/* fall through to the defaults below */
|
|
1494
|
+
}
|
|
1495
|
+
}
|
|
1496
|
+
cwd = cwd || projectRoot || os.homedir();
|
|
1497
|
+
if (!fs.existsSync(cwd)) {
|
|
1498
|
+
jsonResponse(res, 400, { error: `Working directory does not exist: ${cwd}` });
|
|
1499
|
+
return;
|
|
1500
|
+
}
|
|
1501
|
+
try {
|
|
1502
|
+
const job = jobs.create({ thread: threadName, command: body.command, label: body.label, cwd });
|
|
1503
|
+
jsonResponse(res, 200, {
|
|
1504
|
+
started: true,
|
|
1505
|
+
id: job.id,
|
|
1506
|
+
label: job.label,
|
|
1507
|
+
pid: job.pid,
|
|
1508
|
+
cwd: job.cwd,
|
|
1509
|
+
logPath: job.logPath,
|
|
1510
|
+
});
|
|
1511
|
+
}
|
|
1512
|
+
catch (err) {
|
|
1513
|
+
jsonResponse(res, 429, { error: String(err instanceof Error ? err.message : err) });
|
|
1514
|
+
}
|
|
1515
|
+
}
|
|
1516
|
+
async function handleJobLog(threadName, jobId, query, res, jobs) {
|
|
1517
|
+
if (!jobs) {
|
|
1518
|
+
jsonResponse(res, 503, { error: 'Job registry not available' });
|
|
1519
|
+
return;
|
|
1520
|
+
}
|
|
1521
|
+
const job = jobs.get(threadName, jobId);
|
|
1522
|
+
if (!job) {
|
|
1523
|
+
jsonResponse(res, 404, { error: `Job "${jobId}" not found` });
|
|
1524
|
+
return;
|
|
1525
|
+
}
|
|
1526
|
+
const requested = parseInt(query.tail || '', 10);
|
|
1527
|
+
const lines = Number.isNaN(requested) ? 100 : Math.min(Math.max(requested, 1), 2_000);
|
|
1528
|
+
jsonResponse(res, 200, { job, tail: jobs.tail(threadName, jobId, lines) ?? '' });
|
|
1529
|
+
}
|
|
1530
|
+
async function handleCancelJob(threadName, jobId, res, jobs) {
|
|
1531
|
+
if (!jobs) {
|
|
1532
|
+
jsonResponse(res, 503, { error: 'Job registry not available' });
|
|
1533
|
+
return;
|
|
1534
|
+
}
|
|
1535
|
+
if (!jobs.cancel(threadName, jobId)) {
|
|
1536
|
+
jsonResponse(res, 404, { error: `No running job "${jobId}" on this thread` });
|
|
1537
|
+
return;
|
|
1538
|
+
}
|
|
1539
|
+
jsonResponse(res, 200, { cancelled: true, id: jobId });
|
|
1540
|
+
}
|
|
1389
1541
|
async function handleListTemplates(res) {
|
|
1390
1542
|
try {
|
|
1391
1543
|
const templates = listTemplates();
|
|
@@ -1761,6 +1913,7 @@ export async function startGatewayServer(options) {
|
|
|
1761
1913
|
const nsKeys = allNamespaceKeys(namespaces);
|
|
1762
1914
|
let currentApiKeys = Array.from(new Set([...options.apiKeys, ...nsKeys]));
|
|
1763
1915
|
let scheduler;
|
|
1916
|
+
let jobRegistry;
|
|
1764
1917
|
let adminCallbacks;
|
|
1765
1918
|
// federationRouter is module-level (set via handle.setFederationRouter)
|
|
1766
1919
|
// Initialize VAPID for push notifications (if configured)
|
|
@@ -2092,6 +2245,36 @@ export async function startGatewayServer(options) {
|
|
|
2092
2245
|
return;
|
|
2093
2246
|
}
|
|
2094
2247
|
}
|
|
2248
|
+
// ─── Background jobs (task 139) ──────────────────────
|
|
2249
|
+
// Mounted under /api/thread/:name/ so they inherit the namespace access
|
|
2250
|
+
// gate above (task 097 P7) rather than needing their own.
|
|
2251
|
+
// GET /api/thread/:name/jobs — list this thread's jobs
|
|
2252
|
+
if (routePath === '/api/thread/:name/jobs' && req.method === 'GET') {
|
|
2253
|
+
await handleListJobs(params.name, res, jobRegistry);
|
|
2254
|
+
return;
|
|
2255
|
+
}
|
|
2256
|
+
// POST /api/thread/:name/jobs — start a background job
|
|
2257
|
+
if (routePath === '/api/thread/:name/jobs' && req.method === 'POST') {
|
|
2258
|
+
await handleCreateJob(params.name, req, res, jobRegistry, options.projectRoot);
|
|
2259
|
+
return;
|
|
2260
|
+
}
|
|
2261
|
+
// GET /api/thread/:name/jobs/:id/log — tail a job's output
|
|
2262
|
+
if (routePath.startsWith('/api/thread/:name/jobs/') && req.method === 'GET') {
|
|
2263
|
+
const rest = routePath.replace('/api/thread/:name/jobs/', '');
|
|
2264
|
+
if (rest.endsWith('/log')) {
|
|
2265
|
+
const jobId = decodeURIComponent(rest.slice(0, -'/log'.length));
|
|
2266
|
+
await handleJobLog(params.name, jobId, query, res, jobRegistry);
|
|
2267
|
+
return;
|
|
2268
|
+
}
|
|
2269
|
+
}
|
|
2270
|
+
// DELETE /api/thread/:name/jobs/:id — cancel a running job
|
|
2271
|
+
if (routePath.startsWith('/api/thread/:name/jobs/') && req.method === 'DELETE') {
|
|
2272
|
+
const jobId = routePath.replace('/api/thread/:name/jobs/', '');
|
|
2273
|
+
if (jobId) {
|
|
2274
|
+
await handleCancelJob(params.name, decodeURIComponent(jobId), res, jobRegistry);
|
|
2275
|
+
return;
|
|
2276
|
+
}
|
|
2277
|
+
}
|
|
2095
2278
|
// GET /api/dashboard — pipeline dashboard data. Lists thread names, so it
|
|
2096
2279
|
// is an enumeration surface: scoped keys see nothing (task 097 P7).
|
|
2097
2280
|
if (routePath === '/api/dashboard' && req.method === 'GET') {
|
|
@@ -2338,6 +2521,9 @@ export async function startGatewayServer(options) {
|
|
|
2338
2521
|
setScheduler: (s) => {
|
|
2339
2522
|
scheduler = s;
|
|
2340
2523
|
},
|
|
2524
|
+
setJobRegistry: (r) => {
|
|
2525
|
+
jobRegistry = r;
|
|
2526
|
+
},
|
|
2341
2527
|
setAdminCallbacks: (cbs) => {
|
|
2342
2528
|
adminCallbacks = cbs;
|
|
2343
2529
|
},
|