@coralai/sps-cli 0.65.14 → 0.65.15
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/commands/projectInit.d.ts +2 -0
- package/dist/commands/projectInit.d.ts.map +1 -1
- package/dist/commands/projectInit.js +12 -0
- package/dist/commands/projectInit.js.map +1 -1
- package/dist/console/routes/chat.d.ts.map +1 -1
- package/dist/console/routes/chat.js +25 -7
- package/dist/console/routes/chat.js.map +1 -1
- package/dist/console/routes/projects.d.ts.map +1 -1
- package/dist/console/routes/projects.js +6 -0
- package/dist/console/routes/projects.js.map +1 -1
- package/dist/console-assets/assets/{ShowcasePage-DSizY6UX.js → ShowcasePage-XZK044R7.js} +1 -1
- package/dist/console-assets/assets/{index-NjCOZUp4.js → index-BegxvcJx.js} +188 -188
- package/dist/console-assets/index.html +1 -1
- package/dist/core/config.d.ts +2 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +1 -0
- package/dist/core/config.js.map +1 -1
- package/dist/daemon/daemonClient.d.ts +8 -0
- package/dist/daemon/daemonClient.d.ts.map +1 -1
- package/dist/daemon/daemonClient.js +21 -5
- package/dist/daemon/daemonClient.js.map +1 -1
- package/dist/daemon/daemonEnv.d.ts +8 -0
- package/dist/daemon/daemonEnv.d.ts.map +1 -0
- package/dist/daemon/daemonEnv.js +59 -0
- package/dist/daemon/daemonEnv.js.map +1 -0
- package/dist/daemon/runGovernor.d.ts +50 -0
- package/dist/daemon/runGovernor.d.ts.map +1 -0
- package/dist/daemon/runGovernor.js +156 -0
- package/dist/daemon/runGovernor.js.map +1 -0
- package/dist/daemon/sessionDaemon.d.ts +16 -1
- package/dist/daemon/sessionDaemon.d.ts.map +1 -1
- package/dist/daemon/sessionDaemon.js +82 -2
- package/dist/daemon/sessionDaemon.js.map +1 -1
- package/dist/manager/worker-manager-impl.d.ts.map +1 -1
- package/dist/manager/worker-manager-impl.js +11 -0
- package/dist/manager/worker-manager-impl.js.map +1 -1
- package/dist/openai-agent/sandbox/productionDocker.d.ts +9 -0
- package/dist/openai-agent/sandbox/productionDocker.d.ts.map +1 -1
- package/dist/openai-agent/sandbox/productionDocker.js +32 -7
- package/dist/openai-agent/sandbox/productionDocker.js.map +1 -1
- package/dist/providers/RuntimeSessionRuntime.d.ts.map +1 -1
- package/dist/providers/RuntimeSessionRuntime.js +10 -1
- package/dist/providers/RuntimeSessionRuntime.js.map +1 -1
- package/dist/services/ProjectService.d.ts +4 -0
- package/dist/services/ProjectService.d.ts.map +1 -1
- package/dist/services/ProjectService.js +20 -0
- package/dist/services/ProjectService.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
10
|
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
11
|
-
<script type="module" crossorigin src="/assets/index-
|
|
11
|
+
<script type="module" crossorigin src="/assets/index-BegxvcJx.js"></script>
|
|
12
12
|
<link rel="stylesheet" crossorigin href="/assets/index-CSTupcwK.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
package/dist/core/config.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export interface ProjectConfig {
|
|
|
19
19
|
WORKER_PROVIDER: string;
|
|
20
20
|
/** 项目级 reviewer 模型覆盖(conf 手写 SA_REVIEWER_MODEL 生效);空=全局默认。 */
|
|
21
21
|
SA_REVIEWER_MODEL: string;
|
|
22
|
+
/** 创建方平台标记(conf ORIGIN,0.65.15 起必写);空=旧项目(消费方按需派生/兜底 'sps')。 */
|
|
23
|
+
ORIGIN: string;
|
|
22
24
|
MAX_CONCURRENT_WORKERS: number;
|
|
23
25
|
WORKER_RESTART_LIMIT: number;
|
|
24
26
|
MAX_ACTIONS_PER_TICK: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAE5B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAG5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;IAE3B,uEAAuE;IACvE,cAAc,EAAE,OAAO,CAAC;IACxB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAE5B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAG5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;IAE3B,uEAAuE;IACvE,cAAc,EAAE,OAAO,CAAC;IACxB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IAEf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAG7B,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAG9B,wBAAwB,EAAE,MAAM,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,QAAQ,GAAG,UAAU,CAAC;IACxC,yBAAyB,EAAE,MAAM,CAAC;IAGlC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAG/B,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,GAAG,EAAE,SAAS,CAAC;CAChB;AASD,wBAAgB,aAAa,IAAI,SAAS,CAIzC;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAgElE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAQ1F;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAiCpE"}
|
package/dist/core/config.js
CHANGED
|
@@ -59,6 +59,7 @@ export function loadProjectConf(projectName) {
|
|
|
59
59
|
WORKER_MODE: raw.WORKER_MODE || '',
|
|
60
60
|
WORKER_PROVIDER: raw.WORKER_PROVIDER || '',
|
|
61
61
|
SA_REVIEWER_MODEL: raw.SA_REVIEWER_MODEL || '',
|
|
62
|
+
ORIGIN: raw.ORIGIN || '',
|
|
62
63
|
MAX_CONCURRENT_WORKERS: parseInt(raw.MAX_CONCURRENT_WORKERS || '3', 10),
|
|
63
64
|
WORKER_RESTART_LIMIT: parseInt(raw.WORKER_RESTART_LIMIT || '2', 10),
|
|
64
65
|
MAX_ACTIONS_PER_TICK: parseInt(raw.MAX_ACTIONS_PER_TICK || '1', 10),
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE9F,wEAAwE;AACxE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,14 @@ export declare class DaemonClient {
|
|
|
28
28
|
isRunning(): Promise<boolean>;
|
|
29
29
|
ensureSession(slot: string, tool?: AgentTool, cwd?: string, opts?: EnsureSessionOpts): Promise<WorkerSessionRecord>;
|
|
30
30
|
startRun(slot: string, prompt: string, tool?: AgentTool, cwd?: string, opts?: StartRunOpts): Promise<WorkerSessionRecord>;
|
|
31
|
+
/** daemon 并发总闸实时状态(running/max/queueDepth/byOrigin/quotas)。 */
|
|
32
|
+
capacity(): Promise<{
|
|
33
|
+
running: number;
|
|
34
|
+
max: number;
|
|
35
|
+
queueDepth: number;
|
|
36
|
+
byOrigin: Record<string, number>;
|
|
37
|
+
quotas: Record<string, number>;
|
|
38
|
+
}>;
|
|
31
39
|
inspect(slot?: string): Promise<WorkerRuntimeState>;
|
|
32
40
|
stopSession(slot: string): Promise<void>;
|
|
33
41
|
deleteSession(slot: string, sessionId?: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemonClient.d.ts","sourceRoot":"","sources":["../../src/daemon/daemonClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EACV,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,oBAAoB,CAAC;AAErF,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;CAWhE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAID,qBAAa,YAAY;IACX,OAAO,CAAC,UAAU;gBAAV,UAAU,SAAiB;IAE/C,oCAAoC;IAC9B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAU7B,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,iBAAiB,GACvB,OAAO,CAAC,mBAAmB,CAAC;IAIzB,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"daemonClient.d.ts","sourceRoot":"","sources":["../../src/daemon/daemonClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EACV,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,oBAAoB,CAAC;AAErF,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;CAWhE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAID,qBAAa,YAAY;IACX,OAAO,CAAC,UAAU;gBAAV,UAAU,SAAiB;IAE/C,oCAAoC;IAC9B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAU7B,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,iBAAiB,GACvB,OAAO,CAAC,mBAAmB,CAAC;IAIzB,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,mBAAmB,CAAC;IAM/B,+DAA+D;IACzD,QAAQ,IAAI,OAAO,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,CAAC;IAII,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAInD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,wEAAwE;IAClE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B;;;;;;;;;;OAUG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,GACrB,aAAa,CAAC,WAAW,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE;IAoFtD;;;;;OAKG;IACH,qBAAqB,CACnB,IAAI,EAAE,MAAM,EACZ,aAAa,SAAI,GAChB,aAAa,CAAC,WAAW,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE;IAkDhD,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,OAAO,EACf,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IASV,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB,uDAAuD;IACvD,OAAO,CAAC,OAAO;CAwDhB;AAED,0CAA0C;AAC1C,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
|
|
@@ -38,7 +38,13 @@ export class DaemonClient {
|
|
|
38
38
|
return this.request('ensureSession', { slot, tool, cwd, opts });
|
|
39
39
|
}
|
|
40
40
|
async startRun(slot, prompt, tool, cwd, opts) {
|
|
41
|
-
|
|
41
|
+
// 总闸满载时 daemon 侧会 FIFO 排队(缺省最多 20s,SPS_DAEMON_QUEUE_WAIT_S 最高 600s),
|
|
42
|
+
// 故 startRun 的请求超时放宽到 630s 兜住配置上限;其余方法维持 30s。
|
|
43
|
+
return this.request('startRun', { slot, prompt, tool, cwd, opts }, 630_000);
|
|
44
|
+
}
|
|
45
|
+
/** daemon 并发总闸实时状态(running/max/queueDepth/byOrigin/quotas)。 */
|
|
46
|
+
async capacity() {
|
|
47
|
+
return this.request('capacity', {});
|
|
42
48
|
}
|
|
43
49
|
async inspect(slot) {
|
|
44
50
|
return this.request('inspect', { slot });
|
|
@@ -231,7 +237,7 @@ export class DaemonClient {
|
|
|
231
237
|
});
|
|
232
238
|
}
|
|
233
239
|
/** Send a single NDJSON request, wait for response. */
|
|
234
|
-
request(method, params) {
|
|
240
|
+
request(method, params, timeoutMs = 30_000) {
|
|
235
241
|
return new Promise((resolve, reject) => {
|
|
236
242
|
const socket = createConnection(this.socketPath);
|
|
237
243
|
let buffer = '';
|
|
@@ -267,15 +273,25 @@ export class DaemonClient {
|
|
|
267
273
|
const res = JSON.parse(line);
|
|
268
274
|
if (res.ok)
|
|
269
275
|
finish(undefined, res.data);
|
|
270
|
-
else
|
|
271
|
-
|
|
276
|
+
else {
|
|
277
|
+
const err = new Error(res.error ?? 'Daemon error');
|
|
278
|
+
// 类型化错误透传(如 code='CAPACITY' + retryAfterS + queueDepth),调用方可映射 429。
|
|
279
|
+
if (res.code) {
|
|
280
|
+
Object.assign(err, {
|
|
281
|
+
code: res.code,
|
|
282
|
+
...(res.retryAfterS != null ? { retryAfterS: res.retryAfterS } : {}),
|
|
283
|
+
...(res.queueDepth != null ? { queueDepth: res.queueDepth } : {}),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
finish(err);
|
|
287
|
+
}
|
|
272
288
|
}
|
|
273
289
|
catch {
|
|
274
290
|
finish(new Error('Invalid daemon response'));
|
|
275
291
|
}
|
|
276
292
|
});
|
|
277
293
|
socket.on('error', (err) => finish(err));
|
|
278
|
-
socket.setTimeout(
|
|
294
|
+
socket.setTimeout(timeoutMs, () => finish(new Error('Daemon request timeout')));
|
|
279
295
|
});
|
|
280
296
|
}
|
|
281
297
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemonClient.js","sourceRoot":"","sources":["../../src/daemon/daemonClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAExI,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,aAAa,cAAc;QAA3B,eAAU,GAAV,UAAU,CAAiB;IAAG,CAAC;IAEnD,oCAAoC;IACpC,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,IAAY,EACZ,IAAgB,EAChB,GAAY,EACZ,IAAwB;QAExB,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,IAAY,EACZ,MAAc,EACd,IAAgB,EAChB,GAAY,EACZ,IAAmB;QAEnB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"daemonClient.js","sourceRoot":"","sources":["../../src/daemon/daemonClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** 解析 shell 风格 env 文件(`export KEY="VALUE"` / `KEY=VALUE`;# 注释)。 */
|
|
2
|
+
export declare function parseEnvFile(text: string): Record<string, string>;
|
|
3
|
+
/**
|
|
4
|
+
* 把 ~/.coral/env 应用到 env(默认 process.env):权威键覆盖,其余缺失才补。
|
|
5
|
+
* 文件不存在/不可读 → 静默跳过(daemon 无此文件也能跑)。返回被覆盖的权威键(供启动日志)。
|
|
6
|
+
*/
|
|
7
|
+
export declare function applyPersistentDaemonEnv(env?: Record<string, string | undefined>, filePath?: string): string[];
|
|
8
|
+
//# sourceMappingURL=daemonEnv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemonEnv.d.ts","sourceRoot":"","sources":["../../src/daemon/daemonEnv.ts"],"names":[],"mappings":"AAsBA,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASjE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,QAAQ,GAAE,MAAwB,GACjC,MAAM,EAAE,CAiBV"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module daemon/daemonEnv
|
|
3
|
+
* @description daemon 启动时应用 ~/.coral/env 的持久化配置,防"重生继承拉起方 env 污染"。
|
|
4
|
+
*
|
|
5
|
+
* 背景:daemon 意外死亡后常由嵌入方(如 coral,pm2 下 NODE_ENV=production)经 ensureDaemon
|
|
6
|
+
* 重拉,整套 {...process.env} 继承会翻转 daemon 的关键行为(实测:NODE_ENV=production 强切
|
|
7
|
+
* docker 沙箱)。修法:daemon 的**权威配置键**以 ~/.coral/env 为准——文件里写了就覆盖继承值,
|
|
8
|
+
* 与谁拉起无关;非权威键仅在进程 env 缺失时补上(向后兼容普通 env 文件语义)。
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync } from 'node:fs';
|
|
11
|
+
import { globalEnvFile } from '../shared/runtimePaths.js';
|
|
12
|
+
/** daemon 行为的权威配置键:~/.coral/env 中出现即覆盖进程继承值(重生不回归)。 */
|
|
13
|
+
const AUTHORITATIVE_KEYS = new Set([
|
|
14
|
+
'SPS_OPENAI_SANDBOX_PROVIDER',
|
|
15
|
+
'SPS_OPENAI_SANDBOX_IMAGE',
|
|
16
|
+
'SPS_DAEMON_MAX_CONCURRENT_RUNS',
|
|
17
|
+
'SPS_DAEMON_ORIGIN_QUOTAS',
|
|
18
|
+
'SPS_DAEMON_MAX_QUEUE',
|
|
19
|
+
'SPS_DAEMON_QUEUE_WAIT_S',
|
|
20
|
+
]);
|
|
21
|
+
/** 解析 shell 风格 env 文件(`export KEY="VALUE"` / `KEY=VALUE`;# 注释)。 */
|
|
22
|
+
export function parseEnvFile(text) {
|
|
23
|
+
const out = {};
|
|
24
|
+
for (const line of text.split('\n')) {
|
|
25
|
+
const trimmed = line.trim();
|
|
26
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
27
|
+
continue;
|
|
28
|
+
const m = trimmed.match(/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)=["']?(.*?)["']?\s*$/);
|
|
29
|
+
if (m)
|
|
30
|
+
out[m[1]] = m[2];
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 把 ~/.coral/env 应用到 env(默认 process.env):权威键覆盖,其余缺失才补。
|
|
36
|
+
* 文件不存在/不可读 → 静默跳过(daemon 无此文件也能跑)。返回被覆盖的权威键(供启动日志)。
|
|
37
|
+
*/
|
|
38
|
+
export function applyPersistentDaemonEnv(env = process.env, filePath = globalEnvFile()) {
|
|
39
|
+
let text;
|
|
40
|
+
try {
|
|
41
|
+
text = readFileSync(filePath, 'utf-8');
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
const overridden = [];
|
|
47
|
+
for (const [key, value] of Object.entries(parseEnvFile(text))) {
|
|
48
|
+
if (AUTHORITATIVE_KEYS.has(key)) {
|
|
49
|
+
if (env[key] !== value)
|
|
50
|
+
overridden.push(key);
|
|
51
|
+
env[key] = value;
|
|
52
|
+
}
|
|
53
|
+
else if (env[key] === undefined) {
|
|
54
|
+
env[key] = value;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return overridden;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=daemonEnv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemonEnv.js","sourceRoot":"","sources":["../../src/daemon/daemonEnv.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,uDAAuD;AACvD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,6BAA6B;IAC7B,0BAA0B;IAC1B,gCAAgC;IAChC,0BAA0B;IAC1B,sBAAsB;IACtB,yBAAyB;CAC1B,CAAC,CAAC;AAEH,mEAAmE;AACnE,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACvF,IAAI,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IAC5B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA0C,OAAO,CAAC,GAAG,EACrD,WAAmB,aAAa,EAAE;IAElC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9D,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK;gBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7C,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAClC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export interface RunGovernorConfig {
|
|
2
|
+
/** 全局同时 running 的 run 上限。 */
|
|
3
|
+
maxConcurrentRuns: number;
|
|
4
|
+
/** 按 origin 的 running 上限;未列出的 origin 只受总闸约束。 */
|
|
5
|
+
originQuotas: Record<string, number>;
|
|
6
|
+
/** 排队上限,超出直接拒绝。 */
|
|
7
|
+
maxQueue: number;
|
|
8
|
+
/** 排队最长等待(ms),超时拒绝(带 Retry-After)。 */
|
|
9
|
+
queueWaitMs: number;
|
|
10
|
+
}
|
|
11
|
+
/** 类型化容量拒绝 —— daemon 响应层映射为 {code:'CAPACITY', retryAfterS, queueDepth},客户端可转 429。 */
|
|
12
|
+
export declare class CapacityError extends Error {
|
|
13
|
+
readonly retryAfterS: number;
|
|
14
|
+
readonly queueDepth: number;
|
|
15
|
+
readonly running: number;
|
|
16
|
+
readonly max: number;
|
|
17
|
+
readonly code = "CAPACITY";
|
|
18
|
+
constructor(message: string, retryAfterS: number, queueDepth: number, running: number, max: number);
|
|
19
|
+
}
|
|
20
|
+
export interface RunGovernorStats {
|
|
21
|
+
running: number;
|
|
22
|
+
max: number;
|
|
23
|
+
queueDepth: number;
|
|
24
|
+
byOrigin: Record<string, number>;
|
|
25
|
+
quotas: Record<string, number>;
|
|
26
|
+
}
|
|
27
|
+
export declare class RunGovernor {
|
|
28
|
+
private readonly cfg;
|
|
29
|
+
/** slot → origin(该 slot 当前 running 的 run 归属平台)。 */
|
|
30
|
+
private readonly running;
|
|
31
|
+
private readonly queue;
|
|
32
|
+
constructor(cfg: RunGovernorConfig);
|
|
33
|
+
/**
|
|
34
|
+
* 申请一个 run 槽位。立即可入 → resolve;满载 → FIFO 排队(最多 queueWaitMs);
|
|
35
|
+
* 队满/超时 → reject CapacityError。同一 slot 重复申请视为已入(runtime 层会拒绝并发 run)。
|
|
36
|
+
*/
|
|
37
|
+
acquire(slot: string, origin: string): Promise<void>;
|
|
38
|
+
/** run 结算(complete/error/cancel/丢失)后释放槽位并按序派发排队项。幂等。 */
|
|
39
|
+
release(slot: string): void;
|
|
40
|
+
/** 当前被计数为 running 的 slot 集(供 poll 对账:runtime 已不 running 的 slot 应 release)。 */
|
|
41
|
+
runningSlots(): string[];
|
|
42
|
+
stats(): RunGovernorStats;
|
|
43
|
+
private dispatch;
|
|
44
|
+
private canAdmit;
|
|
45
|
+
private capacityError;
|
|
46
|
+
}
|
|
47
|
+
/** 缺省总闸:usable = totalmem*0.75 - 4GB(留给系统/daemon/页缓存),按 ~400MB/run,夹 [4,100]。 */
|
|
48
|
+
export declare function defaultMaxRuns(totalBytes?: number): number;
|
|
49
|
+
export declare function loadRunGovernorConfig(env?: Record<string, string | undefined>): RunGovernorConfig;
|
|
50
|
+
//# sourceMappingURL=runGovernor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runGovernor.d.ts","sourceRoot":"","sources":["../../src/daemon/runGovernor.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,mBAAmB;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qFAAqF;AACrF,qBAAa,aAAc,SAAQ,KAAK;IAIpC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM;IANtB,QAAQ,CAAC,IAAI,cAAc;gBAEzB,OAAO,EAAE,MAAM,EACN,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM;CAKvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAUD,qBAAa,WAAW;IAKV,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJhC,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;gBAET,GAAG,EAAE,iBAAiB;IAEnD;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BpD,wDAAwD;IACxD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,8EAA8E;IAC9E,YAAY,IAAI,MAAM,EAAE;IAIxB,KAAK,IAAI,gBAAgB;IAczB,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,aAAa;CAYtB;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,UAAU,GAAE,MAAmB,GAAG,MAAM,CAGtE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,iBAAiB,CAgB9G"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module daemon/runGovernor
|
|
3
|
+
* @description daemon 全局并发总闸 + FIFO 排队 + 按 origin 配额。
|
|
4
|
+
*
|
|
5
|
+
* 并发权威门在这里(daemon 拥有机器资源,看得见所有客户端进程派来的 run):
|
|
6
|
+
* - 总闸:同时 running 的 run 数 ≤ maxConcurrentRuns(env SPS_DAEMON_MAX_CONCURRENT_RUNS,
|
|
7
|
+
* 缺省按机器内存推导:usable = total*0.75 - 4GB,按 ~400MB/run,夹在 [4,100])。
|
|
8
|
+
* - 排队:满载时 startRun 入 FIFO 队列等待(缺省最多 20s,SPS_DAEMON_QUEUE_WAIT_S),
|
|
9
|
+
* 槽位空出按序派发(受 origin 配额约束的排队项被跳过,不阻塞其他平台)。
|
|
10
|
+
* 队列有界(SPS_DAEMON_MAX_QUEUE,缺省 200);队满/等待超时 → CapacityError
|
|
11
|
+
* (类型化,携带 retryAfterS + queueDepth + position,客户端可映射 429 + Retry-After)。
|
|
12
|
+
* - origin 配额:SPS_DAEMON_ORIGIN_QUOTAS="coral-platform=30,gameforge=20" —— 单平台
|
|
13
|
+
* running 数达到配额即排队,即使总闸未满;防单平台吃光全机。
|
|
14
|
+
*
|
|
15
|
+
* 进程内门(SPS_CHAT_MAX_CONCURRENT)自此降级为接入方可选的自限 QoS,不再承担保护机器的职责。
|
|
16
|
+
*/
|
|
17
|
+
import { totalmem } from 'node:os';
|
|
18
|
+
/** 类型化容量拒绝 —— daemon 响应层映射为 {code:'CAPACITY', retryAfterS, queueDepth},客户端可转 429。 */
|
|
19
|
+
export class CapacityError extends Error {
|
|
20
|
+
retryAfterS;
|
|
21
|
+
queueDepth;
|
|
22
|
+
running;
|
|
23
|
+
max;
|
|
24
|
+
code = 'CAPACITY';
|
|
25
|
+
constructor(message, retryAfterS, queueDepth, running, max) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.retryAfterS = retryAfterS;
|
|
28
|
+
this.queueDepth = queueDepth;
|
|
29
|
+
this.running = running;
|
|
30
|
+
this.max = max;
|
|
31
|
+
this.name = 'CapacityError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class RunGovernor {
|
|
35
|
+
cfg;
|
|
36
|
+
/** slot → origin(该 slot 当前 running 的 run 归属平台)。 */
|
|
37
|
+
running = new Map();
|
|
38
|
+
queue = [];
|
|
39
|
+
constructor(cfg) {
|
|
40
|
+
this.cfg = cfg;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 申请一个 run 槽位。立即可入 → resolve;满载 → FIFO 排队(最多 queueWaitMs);
|
|
44
|
+
* 队满/超时 → reject CapacityError。同一 slot 重复申请视为已入(runtime 层会拒绝并发 run)。
|
|
45
|
+
*/
|
|
46
|
+
acquire(slot, origin) {
|
|
47
|
+
if (this.running.has(slot)) {
|
|
48
|
+
this.running.set(slot, origin);
|
|
49
|
+
return Promise.resolve();
|
|
50
|
+
}
|
|
51
|
+
if (this.canAdmit(origin)) {
|
|
52
|
+
this.running.set(slot, origin);
|
|
53
|
+
return Promise.resolve();
|
|
54
|
+
}
|
|
55
|
+
if (this.queue.length >= this.cfg.maxQueue) {
|
|
56
|
+
return Promise.reject(this.capacityError('queue full'));
|
|
57
|
+
}
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
59
|
+
const waiter = {
|
|
60
|
+
slot,
|
|
61
|
+
origin,
|
|
62
|
+
resolve,
|
|
63
|
+
reject,
|
|
64
|
+
timer: setTimeout(() => {
|
|
65
|
+
const i = this.queue.indexOf(waiter);
|
|
66
|
+
if (i >= 0)
|
|
67
|
+
this.queue.splice(i, 1);
|
|
68
|
+
reject(this.capacityError(`queue wait exceeded ${Math.round(this.cfg.queueWaitMs / 1000)}s`));
|
|
69
|
+
}, this.cfg.queueWaitMs),
|
|
70
|
+
};
|
|
71
|
+
this.queue.push(waiter);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/** run 结算(complete/error/cancel/丢失)后释放槽位并按序派发排队项。幂等。 */
|
|
75
|
+
release(slot) {
|
|
76
|
+
if (!this.running.delete(slot))
|
|
77
|
+
return;
|
|
78
|
+
this.dispatch();
|
|
79
|
+
}
|
|
80
|
+
/** 当前被计数为 running 的 slot 集(供 poll 对账:runtime 已不 running 的 slot 应 release)。 */
|
|
81
|
+
runningSlots() {
|
|
82
|
+
return [...this.running.keys()];
|
|
83
|
+
}
|
|
84
|
+
stats() {
|
|
85
|
+
const byOrigin = {};
|
|
86
|
+
for (const origin of this.running.values()) {
|
|
87
|
+
byOrigin[origin] = (byOrigin[origin] ?? 0) + 1;
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
running: this.running.size,
|
|
91
|
+
max: this.cfg.maxConcurrentRuns,
|
|
92
|
+
queueDepth: this.queue.length,
|
|
93
|
+
byOrigin,
|
|
94
|
+
quotas: { ...this.cfg.originQuotas },
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
dispatch() {
|
|
98
|
+
// FIFO + 配额跳过:被 origin 配额挡住的排队项不阻塞后面其他平台的项。
|
|
99
|
+
for (let i = 0; i < this.queue.length && this.running.size < this.cfg.maxConcurrentRuns;) {
|
|
100
|
+
const w = this.queue[i];
|
|
101
|
+
if (this.canAdmit(w.origin)) {
|
|
102
|
+
this.queue.splice(i, 1);
|
|
103
|
+
clearTimeout(w.timer);
|
|
104
|
+
this.running.set(w.slot, w.origin);
|
|
105
|
+
w.resolve();
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
i += 1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
canAdmit(origin) {
|
|
113
|
+
if (this.running.size >= this.cfg.maxConcurrentRuns)
|
|
114
|
+
return false;
|
|
115
|
+
const quota = this.cfg.originQuotas[origin];
|
|
116
|
+
if (quota != null) {
|
|
117
|
+
let n = 0;
|
|
118
|
+
for (const o of this.running.values())
|
|
119
|
+
if (o === origin)
|
|
120
|
+
n += 1;
|
|
121
|
+
if (n >= quota)
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
capacityError(reason) {
|
|
127
|
+
const depth = this.queue.length;
|
|
128
|
+
// Retry-After 估算:无精确 run 时长模型,按"半个排队等待窗 + 队列深度线性加压"给出,夹在 [5,120]s。
|
|
129
|
+
const retryAfterS = Math.min(120, Math.max(5, Math.round(this.cfg.queueWaitMs / 2000) + depth * 2));
|
|
130
|
+
return new CapacityError(`daemon at capacity (${this.running.size}/${this.cfg.maxConcurrentRuns} running, ${depth} queued): ${reason}`, retryAfterS, depth, this.running.size, this.cfg.maxConcurrentRuns);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** 缺省总闸:usable = totalmem*0.75 - 4GB(留给系统/daemon/页缓存),按 ~400MB/run,夹 [4,100]。 */
|
|
134
|
+
export function defaultMaxRuns(totalBytes = totalmem()) {
|
|
135
|
+
const usable = totalBytes * 0.75 - 4 * 1024 ** 3;
|
|
136
|
+
return Math.min(100, Math.max(4, Math.floor(usable / (400 * 1024 ** 2))));
|
|
137
|
+
}
|
|
138
|
+
export function loadRunGovernorConfig(env = process.env) {
|
|
139
|
+
const intOr = (raw, dflt, min, max) => {
|
|
140
|
+
const n = parseInt(raw ?? '', 10);
|
|
141
|
+
return Number.isInteger(n) && n >= min && n <= max ? n : dflt;
|
|
142
|
+
};
|
|
143
|
+
const originQuotas = {};
|
|
144
|
+
for (const part of (env.SPS_DAEMON_ORIGIN_QUOTAS ?? '').split(',')) {
|
|
145
|
+
const m = part.trim().match(/^([A-Za-z0-9_-]{1,32})=(\d{1,3})$/);
|
|
146
|
+
if (m)
|
|
147
|
+
originQuotas[m[1]] = parseInt(m[2], 10);
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
maxConcurrentRuns: intOr(env.SPS_DAEMON_MAX_CONCURRENT_RUNS, defaultMaxRuns(), 1, 500),
|
|
151
|
+
originQuotas,
|
|
152
|
+
maxQueue: intOr(env.SPS_DAEMON_MAX_QUEUE, 200, 0, 10_000),
|
|
153
|
+
queueWaitMs: intOr(env.SPS_DAEMON_QUEUE_WAIT_S, 20, 0, 600) * 1000,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=runGovernor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runGovernor.js","sourceRoot":"","sources":["../../src/daemon/runGovernor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAanC,qFAAqF;AACrF,MAAM,OAAO,aAAc,SAAQ,KAAK;IAI3B;IACA;IACA;IACA;IANF,IAAI,GAAG,UAAU,CAAC;IAC3B,YACE,OAAe,EACN,WAAmB,EACnB,UAAkB,EAClB,OAAe,EACf,GAAW;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QALN,gBAAW,GAAX,WAAW,CAAQ;QACnB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAQ;QACf,QAAG,GAAH,GAAG,CAAQ;QAGpB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAkBD,MAAM,OAAO,WAAW;IAKO;IAJ7B,mDAAmD;IAClC,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,KAAK,GAAa,EAAE,CAAC;IAEtC,YAA6B,GAAsB;QAAtB,QAAG,GAAH,GAAG,CAAmB;IAAG,CAAC;IAEvD;;;OAGG;IACH,OAAO,CAAC,IAAY,EAAE,MAAc;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,MAAM,GAAW;gBACrB,IAAI;gBACJ,MAAM;gBACN,OAAO;gBACP,MAAM;gBACN,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE;oBACrB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC;wBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,uBAAuB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;aACzB,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,8EAA8E;IAC9E,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,KAAK;QACH,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAC1B,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB;YAC/B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAC7B,QAAQ;YACR,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;SACrC,CAAC;IACJ,CAAC;IAEO,QAAQ;QACd,4CAA4C;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAI,CAAC;YAC1F,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxB,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBACnC,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,MAAc;QAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB;YAAE,OAAO,KAAK,CAAC;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAAE,IAAI,CAAC,KAAK,MAAM;oBAAE,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,aAAa,CAAC,MAAc;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAChC,mEAAmE;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACpG,OAAO,IAAI,aAAa,CACtB,uBAAuB,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,aAAa,KAAK,aAAa,MAAM,EAAE,EAC7G,WAAW,EACX,KAAK,EACL,IAAI,CAAC,OAAO,CAAC,IAAI,EACjB,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAC3B,CAAC;IACJ,CAAC;CACF;AAED,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAAC,aAAqB,QAAQ,EAAE;IAC5D,MAAM,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAA0C,OAAO,CAAC,GAAG;IACzF,MAAM,KAAK,GAAG,CAAC,GAAuB,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW,EAAU,EAAE;QACxF,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC,CAAC;IACF,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACjE,IAAI,CAAC;YAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO;QACL,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,8BAA8B,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;QACtF,YAAY;QACZ,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC;QACzD,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI;KACnE,CAAC;AACJ,CAAC"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
export interface DaemonRequest {
|
|
17
17
|
id?: number;
|
|
18
|
-
method: 'ensureSession' | 'startRun' | 'inspect' | 'stopSession' | 'deleteSession' | 'clearRun' | 'cancelRun' | 'submitInteraction' | 'cancelInteraction' | 'shutdown' | 'subscribeRun';
|
|
18
|
+
method: 'ensureSession' | 'startRun' | 'inspect' | 'stopSession' | 'deleteSession' | 'clearRun' | 'cancelRun' | 'submitInteraction' | 'cancelInteraction' | 'shutdown' | 'subscribeRun' | 'capacity';
|
|
19
19
|
params: Record<string, unknown>;
|
|
20
20
|
}
|
|
21
21
|
export interface DaemonResponse {
|
|
@@ -23,6 +23,12 @@ export interface DaemonResponse {
|
|
|
23
23
|
ok: boolean;
|
|
24
24
|
data?: unknown;
|
|
25
25
|
error?: string;
|
|
26
|
+
/** 类型化错误码(如 'CAPACITY'=总闸满,客户端可映射 429)。 */
|
|
27
|
+
code?: string;
|
|
28
|
+
/** CAPACITY 拒绝时:建议重试等待秒数(可映射 Retry-After)。 */
|
|
29
|
+
retryAfterS?: number;
|
|
30
|
+
/** CAPACITY 拒绝时:当前排队深度。 */
|
|
31
|
+
queueDepth?: number;
|
|
26
32
|
}
|
|
27
33
|
/**
|
|
28
34
|
* Event frame sent on a subscribeRun socket. NDJSON stream until the run
|
|
@@ -122,6 +128,12 @@ export declare class SessionDaemon {
|
|
|
122
128
|
*/
|
|
123
129
|
private lastActivity;
|
|
124
130
|
private readonly startedAtMs;
|
|
131
|
+
/** 并发权威门(总闸+FIFO 排队+origin 配额)。 */
|
|
132
|
+
private readonly governor;
|
|
133
|
+
/** slot → origin:ensureSession 时记录,startRun 计入配额;会话删除时清。 */
|
|
134
|
+
private readonly slotOrigin;
|
|
135
|
+
/** 已挂结算监听的 slot(complete → governor.release,防重复订阅)。 */
|
|
136
|
+
private readonly settleWatch;
|
|
125
137
|
constructor(socketPath?: string, pidFile?: string);
|
|
126
138
|
start(): Promise<void>;
|
|
127
139
|
private handleClient;
|
|
@@ -133,6 +145,9 @@ export declare class SessionDaemon {
|
|
|
133
145
|
*/
|
|
134
146
|
private handleSubscribeRun;
|
|
135
147
|
private dispatch;
|
|
148
|
+
/** run 结算(complete)→ 释放总闸槽位。幂等;订阅在结算后自拆。 */
|
|
149
|
+
private watchRunSettle;
|
|
150
|
+
private releaseRunSlot;
|
|
136
151
|
/** Backend-neutral liveness: normalized output timestamps are authoritative. */
|
|
137
152
|
private isChatRunStale;
|
|
138
153
|
/** 删 state.json 里超期的死记录(offline+无run+超 SESSION_GC_MS),让登记表收敛。best-effort。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionDaemon.d.ts","sourceRoot":"","sources":["../../src/daemon/sessionDaemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"sessionDaemon.d.ts","sourceRoot":"","sources":["../../src/daemon/sessionDaemon.ts"],"names":[],"mappings":"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"}
|