crewly 1.11.2 → 1.11.4
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/config/skills/agent/core/accept-task/SKILL.md +35 -7
- package/config/skills/agent/core/poll-tasks/execute.sh +44 -9
- package/config/skills/agent/core/poll-tasks/execute.test.sh +98 -0
- package/config/skills/agent/core/record-learning/execute.sh +92 -3
- package/config/skills/agent/core/register-self/SKILL.md +51 -8
- package/config/skills/agent/transcribe-audio/SKILL.md +110 -0
- package/config/skills/agent/transcribe-audio/execute.sh +223 -0
- package/config/skills/agent/transcribe-audio/instructions.md +92 -0
- package/config/skills/agent/transcribe-audio/skill.json +22 -0
- package/config/skills/orchestrator/assign-task/SKILL.md +40 -6
- package/config/skills/orchestrator/broadcast/SKILL.md +45 -8
- package/dist/backend/backend/src/constants.d.ts +0 -16
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +0 -16
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/memory/memory.controller.js +3 -10
- package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.js +24 -5
- package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +57 -2
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +2 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +124 -1
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +0 -3
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +56 -20
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +2 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
- package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts +88 -0
- package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/boot/boot-announce.service.js +119 -0
- package/dist/backend/backend/src/services/boot/boot-announce.service.js.map +1 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +14 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
- package/dist/backend/backend/src/services/mcp-server.js +0 -6
- package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
- package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts +97 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.js +209 -0
- package/dist/backend/backend/src/services/memory/learning-format.validator.js.map +1 -0
- package/dist/backend/backend/src/services/memory/memory.service.d.ts +78 -41
- package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.js +209 -127
- package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/project-memory.service.js +37 -9
- package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts +46 -0
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js +51 -0
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +29 -0
- package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +9 -0
- package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
- package/dist/backend/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
- package/dist/backend/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/runtime-pid-registry.service.js +214 -0
- package/dist/backend/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
- package/dist/backend/backend/src/services/sop/sop.service.d.ts +70 -2
- package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/sop/sop.service.js +93 -3
- package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/claim.service.d.ts +41 -0
- package/dist/backend/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/claim.service.js +72 -0
- package/dist/backend/backend/src/services/task-pool/claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +16 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +20 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js +11 -0
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram.service.js +24 -2
- package/dist/backend/backend/src/services/telegram/telegram.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js +18 -18
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +10 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +20 -12
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +12 -3
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +15 -5
- package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-query.service.js +31 -50
- package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +16 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js +20 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts +8 -0
- package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.js +2 -0
- package/dist/backend/backend/src/types/settings.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +23 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +29 -0
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +0 -16
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +0 -16
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
- package/dist/cli/backend/src/services/mcp-server.js +0 -6
- package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.d.ts +78 -41
- package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.js +209 -127
- package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/project-memory.service.js +37 -9
- package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/claim.service.d.ts +41 -0
- package/dist/cli/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/claim.service.js +72 -0
- package/dist/cli/backend/src/services/task-pool/claim.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +16 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +20 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/schema-loader.service.d.ts +57 -0
- package/dist/cli/backend/src/services/wiki/schema-loader.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/schema-loader.service.js +183 -0
- package/dist/cli/backend/src/services/wiki/schema-loader.service.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +100 -0
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js +212 -0
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.d.ts +43 -0
- package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.js +67 -0
- package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts +166 -0
- package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-search.service.js +379 -0
- package/dist/cli/backend/src/services/wiki/wiki-search.service.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki.types.d.ts +84 -0
- package/dist/cli/backend/src/services/wiki/wiki.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki.types.js +10 -0
- package/dist/cli/backend/src/services/wiki/wiki.types.js.map +1 -0
- package/dist/cli/backend/src/types/settings.types.d.ts +8 -0
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.js +2 -0
- package/dist/cli/backend/src/types/settings.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +23 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +29 -0
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/frontend/dist/assets/{index-44266b5d.css → index-8205ea5e.css} +1 -1
- package/frontend/dist/assets/{index-4099a91c.js → index-890d3f9d.js} +289 -289
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-pid-registry.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/runtime-pid-registry.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAoBH,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAOpD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyB7D;AAED,yDAAyD;AACzD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAS/C;AAED;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAChD;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,OAAO;IAMP,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAKxC,kFAAkF;IAClF,MAAM,CAAC,eAAe,CAAC,OAAO,GAAE,yBAA8B,GAAG,kBAAkB;IAKnF,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,KAAK;IAWb;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,IAAI;IAQpF;;;;;OAKG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMjC,sEAAsE;IACtE,KAAK,IAAI,IAAI;IAIb;;;;;;;OAOG;IACH,WAAW,IAAI,MAAM;CAgDtB"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime PID Registry
|
|
3
|
+
*
|
|
4
|
+
* Tracks the OS process ids of spawned agent-runtime PTY sessions so orphaned
|
|
5
|
+
* runtime processes can be reaped after a NON-graceful backend death (crash,
|
|
6
|
+
* OOM-kill, external `kill -9`, or the shutdown force-exit `SIGKILL`-self firing
|
|
7
|
+
* mid-cleanup). Normal teardown (`killSession`/`forceDestroyAll`) already reaps
|
|
8
|
+
* children; the gap this closes is the cross-restart one — a fresh backend has
|
|
9
|
+
* no record of the previous run's children, so they live on indefinitely
|
|
10
|
+
* (issue #715: ~7 stray `gemini --yolo` on Irissair since Feb).
|
|
11
|
+
*
|
|
12
|
+
* Safety is the whole point. The startup reaper:
|
|
13
|
+
* 1. only ever touches PIDs THIS backend recorded (never a broad `pkill`),
|
|
14
|
+
* 2. re-reads each live PID's command line and kills it ONLY if it still
|
|
15
|
+
* matches the recorded spawn signature — so a PID reused by an unrelated
|
|
16
|
+
* process after a crash is left untouched.
|
|
17
|
+
*
|
|
18
|
+
* @module services/session/runtime-pid-registry.service
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
21
|
+
import { execFileSync } from 'child_process';
|
|
22
|
+
import * as path from 'path';
|
|
23
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
24
|
+
import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
|
|
25
|
+
/** Registry file name under the Crewly home. */
|
|
26
|
+
export const RUNTIME_PID_FILE = 'runtime-pids.json';
|
|
27
|
+
/** Collapse whitespace + trim so signatures compare stably across `/proc` and `ps`. */
|
|
28
|
+
function normalizeCmdline(s) {
|
|
29
|
+
return s.replace(/\s+/g, ' ').trim();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Read the live command line for a pid, cross-platform, or null if the process
|
|
33
|
+
* does not exist / is unreadable.
|
|
34
|
+
*
|
|
35
|
+
* - Linux: `/proc/<pid>/cmdline` (NUL-separated argv).
|
|
36
|
+
* - Other (macOS/BSD): `ps -o command= -p <pid>`.
|
|
37
|
+
*
|
|
38
|
+
* @param pid - Process id to inspect.
|
|
39
|
+
* @returns The normalised command line, or null.
|
|
40
|
+
*/
|
|
41
|
+
export function readProcessCmdline(pid) {
|
|
42
|
+
// Linux fast path — read argv directly from /proc.
|
|
43
|
+
const procPath = `/proc/${pid}/cmdline`;
|
|
44
|
+
if (existsSync(procPath)) {
|
|
45
|
+
try {
|
|
46
|
+
const raw = readFileSync(procPath);
|
|
47
|
+
// argv is NUL-separated, trailing NUL.
|
|
48
|
+
const cmd = raw.toString('utf8').replace(/\0/g, ' ');
|
|
49
|
+
return normalizeCmdline(cmd) || null;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Portable fallback (macOS): ask `ps`.
|
|
56
|
+
try {
|
|
57
|
+
const out = execFileSync('ps', ['-o', 'command=', '-p', String(pid)], {
|
|
58
|
+
encoding: 'utf8',
|
|
59
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
60
|
+
});
|
|
61
|
+
const cmd = normalizeCmdline(out);
|
|
62
|
+
return cmd || null;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Non-zero exit = no such process.
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Whether a pid is currently alive (signal 0 probe). */
|
|
70
|
+
export function isPidAlive(pid) {
|
|
71
|
+
if (!Number.isInteger(pid) || pid <= 1)
|
|
72
|
+
return false; // never touch pid 0/1
|
|
73
|
+
try {
|
|
74
|
+
process.kill(pid, 0);
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
// EPERM = exists but not ours to signal → treat as alive (don't reap).
|
|
79
|
+
return err.code === 'EPERM';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export class RuntimePidRegistry {
|
|
83
|
+
static instance = null;
|
|
84
|
+
filePath;
|
|
85
|
+
cmdlineReader;
|
|
86
|
+
logger;
|
|
87
|
+
constructor(options = {}) {
|
|
88
|
+
this.filePath = options.filePath ?? path.join(getCrewlyHomePath(), RUNTIME_PID_FILE);
|
|
89
|
+
this.cmdlineReader = options.cmdlineReader ?? readProcessCmdline;
|
|
90
|
+
this.logger = LoggerService.getInstance().createComponentLogger('RuntimePidRegistry');
|
|
91
|
+
}
|
|
92
|
+
static getInstance() {
|
|
93
|
+
if (!this.instance)
|
|
94
|
+
this.instance = new RuntimePidRegistry();
|
|
95
|
+
return this.instance;
|
|
96
|
+
}
|
|
97
|
+
/** Reset for tests (optionally pointing at a temp file + stub cmdline reader). */
|
|
98
|
+
static resetForTesting(options = {}) {
|
|
99
|
+
this.instance = new RuntimePidRegistry(options);
|
|
100
|
+
return this.instance;
|
|
101
|
+
}
|
|
102
|
+
read() {
|
|
103
|
+
if (!existsSync(this.filePath))
|
|
104
|
+
return [];
|
|
105
|
+
try {
|
|
106
|
+
const parsed = JSON.parse(readFileSync(this.filePath, 'utf8'));
|
|
107
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Corrupt file — treat as empty (and it gets rewritten on next mutation).
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
write(records) {
|
|
115
|
+
try {
|
|
116
|
+
mkdirSync(path.dirname(this.filePath), { recursive: true });
|
|
117
|
+
writeFileSync(this.filePath, JSON.stringify(records, null, 2), 'utf8');
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
this.logger.warn('Failed to persist runtime PID registry (non-fatal)', {
|
|
121
|
+
error: err instanceof Error ? err.message : String(err),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Record a freshly spawned runtime process.
|
|
127
|
+
*
|
|
128
|
+
* @param pid - PTY child pid.
|
|
129
|
+
* @param sessionName - Owning session.
|
|
130
|
+
* @param command - Spawn executable.
|
|
131
|
+
* @param args - Spawn args.
|
|
132
|
+
*/
|
|
133
|
+
record(pid, sessionName, command, args = []) {
|
|
134
|
+
if (!Number.isInteger(pid) || pid <= 1)
|
|
135
|
+
return;
|
|
136
|
+
const signature = normalizeCmdline([command, ...args].join(' '));
|
|
137
|
+
const records = this.read().filter((r) => r.sessionName !== sessionName && r.pid !== pid);
|
|
138
|
+
records.push({ pid, sessionName, signature, spawnedAt: new Date().toISOString() });
|
|
139
|
+
this.write(records);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Drop the record for a session we have torn down ourselves (so it is not a
|
|
143
|
+
* reap candidate next boot).
|
|
144
|
+
*
|
|
145
|
+
* @param sessionName - Session whose record to remove.
|
|
146
|
+
*/
|
|
147
|
+
remove(sessionName) {
|
|
148
|
+
const records = this.read();
|
|
149
|
+
const next = records.filter((r) => r.sessionName !== sessionName);
|
|
150
|
+
if (next.length !== records.length)
|
|
151
|
+
this.write(next);
|
|
152
|
+
}
|
|
153
|
+
/** Clear all records (graceful shutdown reaped everything itself). */
|
|
154
|
+
clear() {
|
|
155
|
+
this.write([]);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Reap orphaned runtime processes left by a previous, non-graceful backend
|
|
159
|
+
* exit. Call ONCE at boot, before sessions are restored. Kills a recorded pid
|
|
160
|
+
* only if it is still alive AND its live command line still matches the
|
|
161
|
+
* recorded signature (guards against PID reuse). Clears the registry after.
|
|
162
|
+
*
|
|
163
|
+
* @returns The number of orphan processes reaped.
|
|
164
|
+
*/
|
|
165
|
+
reapOrphans() {
|
|
166
|
+
const records = this.read();
|
|
167
|
+
if (records.length === 0)
|
|
168
|
+
return 0;
|
|
169
|
+
let reaped = 0;
|
|
170
|
+
for (const rec of records) {
|
|
171
|
+
if (!isPidAlive(rec.pid))
|
|
172
|
+
continue;
|
|
173
|
+
const liveCmdline = this.cmdlineReader(rec.pid);
|
|
174
|
+
if (!liveCmdline || !liveCmdline.includes(rec.signature)) {
|
|
175
|
+
// Either unreadable, or the PID was reused by an unrelated process —
|
|
176
|
+
// do NOT kill. Log so a surprising mismatch is observable.
|
|
177
|
+
this.logger.warn('Skipping recorded PID — not a matching runtime (reused or changed)', {
|
|
178
|
+
pid: rec.pid,
|
|
179
|
+
sessionName: rec.sessionName,
|
|
180
|
+
expected: rec.signature,
|
|
181
|
+
live: liveCmdline ?? '(gone)',
|
|
182
|
+
});
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
// Verified orphan — SIGKILL the process and its group.
|
|
186
|
+
this.logger.error('Reaping orphaned runtime process from a previous backend run', {
|
|
187
|
+
pid: rec.pid,
|
|
188
|
+
sessionName: rec.sessionName,
|
|
189
|
+
signature: rec.signature,
|
|
190
|
+
spawnedAt: rec.spawnedAt,
|
|
191
|
+
});
|
|
192
|
+
try {
|
|
193
|
+
process.kill(rec.pid, 'SIGKILL');
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
/* already gone between the probe and now */
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
process.kill(-rec.pid, 'SIGKILL'); // process group
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
/* no group / already gone */
|
|
203
|
+
}
|
|
204
|
+
reaped++;
|
|
205
|
+
}
|
|
206
|
+
// Whatever was recorded belongs to a prior run — this run records fresh.
|
|
207
|
+
this.clear();
|
|
208
|
+
if (reaped > 0) {
|
|
209
|
+
this.logger.warn('Orphan runtime reaper finished', { reaped, scanned: records.length });
|
|
210
|
+
}
|
|
211
|
+
return reaped;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=runtime-pid-registry.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-pid-registry.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/runtime-pid-registry.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,6 +87,18 @@ export interface ISOPService {
|
|
|
87
87
|
* @returns Matching index entries
|
|
88
88
|
*/
|
|
89
89
|
searchSOPs(query: string): Promise<SOPIndexEntry[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Get the reason for the last graceful fallback, if any.
|
|
92
|
+
*
|
|
93
|
+
* Used by the API layer to surface degraded-mode telemetry to callers
|
|
94
|
+
* (e.g. when the index file is missing and an empty in-memory fallback
|
|
95
|
+
* was substituted). Returns null after any operation that successfully
|
|
96
|
+
* read the index from disk.
|
|
97
|
+
*
|
|
98
|
+
* @returns Fallback reason string, or null if last operation served
|
|
99
|
+
* from real data on disk.
|
|
100
|
+
*/
|
|
101
|
+
getLastFallbackReason(): string | null;
|
|
90
102
|
}
|
|
91
103
|
/**
|
|
92
104
|
* Service for managing Standard Operating Procedures
|
|
@@ -112,6 +124,16 @@ export declare class SOPService implements ISOPService {
|
|
|
112
124
|
private index;
|
|
113
125
|
private sopCache;
|
|
114
126
|
private initialized;
|
|
127
|
+
private lastFallbackReason;
|
|
128
|
+
/**
|
|
129
|
+
* Sentinel reason emitted when the canonical index is missing/unparseable
|
|
130
|
+
* and we synthesise an empty in-memory index so callers can degrade
|
|
131
|
+
* cleanly instead of receiving a 500.
|
|
132
|
+
*
|
|
133
|
+
* Surfaced via `getLastFallbackReason()` and propagated by the API
|
|
134
|
+
* controller to clients in the response envelope.
|
|
135
|
+
*/
|
|
136
|
+
static readonly FALLBACK_REASON_INDEX_MISSING = "index-missing-graceful-fallback";
|
|
115
137
|
/**
|
|
116
138
|
* Private constructor for singleton pattern
|
|
117
139
|
*
|
|
@@ -146,9 +168,32 @@ export declare class SOPService implements ISOPService {
|
|
|
146
168
|
*/
|
|
147
169
|
initialize(): Promise<void>;
|
|
148
170
|
/**
|
|
149
|
-
* Rebuild the SOP index from filesystem
|
|
171
|
+
* Rebuild the SOP index from filesystem.
|
|
172
|
+
*
|
|
173
|
+
* Resilience contract (F8 — get-sops graceful fallback):
|
|
174
|
+
* - Walks `systemPath` and `customPath` to collect entries (each walker
|
|
175
|
+
* silently no-ops when its directory is absent).
|
|
176
|
+
* - Populates `this.index` with the collected entries (possibly empty)
|
|
177
|
+
* BEFORE attempting any disk write, so callers reading the index
|
|
178
|
+
* in-memory always see a valid object even if persistence fails.
|
|
179
|
+
* - Persists by ensuring `basePath` exists (`mkdir -p`) and then
|
|
180
|
+
* writing the index file. Persistence failure is logged-warn and
|
|
181
|
+
* swallowed — the in-memory index remains canonical for this process.
|
|
182
|
+
*
|
|
183
|
+
* Should not throw under normal failure modes (missing dir, ENOSPC,
|
|
184
|
+
* permission to write index). Pathological errors in helpers are
|
|
185
|
+
* logged inside them; this method returns successfully with an
|
|
186
|
+
* in-memory index regardless.
|
|
150
187
|
*/
|
|
151
188
|
rebuildIndex(): Promise<void>;
|
|
189
|
+
/**
|
|
190
|
+
* Ensure the SOP base directory exists before writing the index.
|
|
191
|
+
*
|
|
192
|
+
* Idempotent. Created with `recursive: true` so any missing parent
|
|
193
|
+
* (e.g. a fresh `~/.crewly` install where `sops/` was never created)
|
|
194
|
+
* is materialised in one call.
|
|
195
|
+
*/
|
|
196
|
+
private ensureBasePathExists;
|
|
152
197
|
/**
|
|
153
198
|
* Index a directory recursively
|
|
154
199
|
*
|
|
@@ -274,9 +319,32 @@ export declare class SOPService implements ISOPService {
|
|
|
274
319
|
*/
|
|
275
320
|
searchSOPs(query: string): Promise<SOPIndexEntry[]>;
|
|
276
321
|
/**
|
|
277
|
-
* Ensure the index exists (load or rebuild)
|
|
322
|
+
* Ensure the index exists (load from disk or rebuild from filesystem).
|
|
323
|
+
*
|
|
324
|
+
* Graceful-fallback contract (F8):
|
|
325
|
+
* - Happy path: read `index.json`, JSON.parse it, set `this.index`.
|
|
326
|
+
* `lastFallbackReason` is cleared.
|
|
327
|
+
* - Index missing/unparseable: invoke `rebuildIndex()`. If rebuild
|
|
328
|
+
* succeeded with N>=0 entries, mark fallback reason iff the index
|
|
329
|
+
* was rebuilt due to missing-on-disk (so the controller can surface
|
|
330
|
+
* `index-missing-graceful-fallback` to clients).
|
|
331
|
+
* - Catastrophic rebuild failure (extremely unlikely — rebuild itself
|
|
332
|
+
* swallows persistence errors): synthesise an empty in-memory index
|
|
333
|
+
* and stamp `lastFallbackReason`. The endpoint returns 200 with an
|
|
334
|
+
* empty payload rather than 500.
|
|
278
335
|
*/
|
|
279
336
|
private ensureIndex;
|
|
337
|
+
/**
|
|
338
|
+
* Get the reason for the last graceful fallback, if any.
|
|
339
|
+
*
|
|
340
|
+
* Returns the `FALLBACK_REASON_INDEX_MISSING` sentinel when the most
|
|
341
|
+
* recent index load fell back to a regenerated/synthesised in-memory
|
|
342
|
+
* index. Returns null when the cached index was loaded directly from
|
|
343
|
+
* a healthy `index.json` on disk.
|
|
344
|
+
*
|
|
345
|
+
* @returns Fallback reason string, or null.
|
|
346
|
+
*/
|
|
347
|
+
getLastFallbackReason(): string | null;
|
|
280
348
|
/**
|
|
281
349
|
* Save the index to disk
|
|
282
350
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sop.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/sop/sop.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,EACL,GAAG,EACH,OAAO,EACP,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EAIf,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAExC;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAErD;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEzD;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEzD;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5D;;;;;OAKG;IACH,eAAe,CACb,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC,GAC3D,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;;;OAIG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;;OAIG;IACH,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE9B;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"sop.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/sop/sop.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,16 @@ export class SOPService {
|
|
|
37
37
|
index = null;
|
|
38
38
|
sopCache = new Map();
|
|
39
39
|
initialized = false;
|
|
40
|
+
lastFallbackReason = null;
|
|
41
|
+
/**
|
|
42
|
+
* Sentinel reason emitted when the canonical index is missing/unparseable
|
|
43
|
+
* and we synthesise an empty in-memory index so callers can degrade
|
|
44
|
+
* cleanly instead of receiving a 500.
|
|
45
|
+
*
|
|
46
|
+
* Surfaced via `getLastFallbackReason()` and propagated by the API
|
|
47
|
+
* controller to clients in the response envelope.
|
|
48
|
+
*/
|
|
49
|
+
static FALLBACK_REASON_INDEX_MISSING = 'index-missing-graceful-fallback';
|
|
40
50
|
/**
|
|
41
51
|
* Private constructor for singleton pattern
|
|
42
52
|
*
|
|
@@ -99,7 +109,22 @@ export class SOPService {
|
|
|
99
109
|
this.logger.info('SOPService initialized', { basePath: this.basePath });
|
|
100
110
|
}
|
|
101
111
|
/**
|
|
102
|
-
* Rebuild the SOP index from filesystem
|
|
112
|
+
* Rebuild the SOP index from filesystem.
|
|
113
|
+
*
|
|
114
|
+
* Resilience contract (F8 — get-sops graceful fallback):
|
|
115
|
+
* - Walks `systemPath` and `customPath` to collect entries (each walker
|
|
116
|
+
* silently no-ops when its directory is absent).
|
|
117
|
+
* - Populates `this.index` with the collected entries (possibly empty)
|
|
118
|
+
* BEFORE attempting any disk write, so callers reading the index
|
|
119
|
+
* in-memory always see a valid object even if persistence fails.
|
|
120
|
+
* - Persists by ensuring `basePath` exists (`mkdir -p`) and then
|
|
121
|
+
* writing the index file. Persistence failure is logged-warn and
|
|
122
|
+
* swallowed — the in-memory index remains canonical for this process.
|
|
123
|
+
*
|
|
124
|
+
* Should not throw under normal failure modes (missing dir, ENOSPC,
|
|
125
|
+
* permission to write index). Pathological errors in helpers are
|
|
126
|
+
* logged inside them; this method returns successfully with an
|
|
127
|
+
* in-memory index regardless.
|
|
103
128
|
*/
|
|
104
129
|
async rebuildIndex() {
|
|
105
130
|
const entries = [];
|
|
@@ -107,15 +132,37 @@ export class SOPService {
|
|
|
107
132
|
await this.indexDirectory(this.systemPath, entries, true);
|
|
108
133
|
// Index custom SOPs
|
|
109
134
|
await this.indexDirectory(this.customPath, entries, false);
|
|
135
|
+
// Always populate in-memory index FIRST so callers can read even if
|
|
136
|
+
// persistence below fails (e.g. read-only FS, ENOSPC).
|
|
110
137
|
this.index = {
|
|
111
138
|
version: SOP_CONSTANTS.INDEX_VERSION,
|
|
112
139
|
lastUpdated: new Date().toISOString(),
|
|
113
140
|
sops: entries,
|
|
114
141
|
};
|
|
115
|
-
|
|
142
|
+
// Persist — failures are logged but never thrown to the caller.
|
|
143
|
+
try {
|
|
144
|
+
await this.ensureBasePathExists();
|
|
145
|
+
await this.saveIndex();
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
this.logger.warn('SOP index regenerated in memory but persistence failed', {
|
|
149
|
+
indexPath: this.indexPath,
|
|
150
|
+
error: error instanceof Error ? error.message : String(error),
|
|
151
|
+
});
|
|
152
|
+
}
|
|
116
153
|
this.sopCache.clear();
|
|
117
154
|
this.logger.info('SOP index rebuilt', { count: entries.length });
|
|
118
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Ensure the SOP base directory exists before writing the index.
|
|
158
|
+
*
|
|
159
|
+
* Idempotent. Created with `recursive: true` so any missing parent
|
|
160
|
+
* (e.g. a fresh `~/.crewly` install where `sops/` was never created)
|
|
161
|
+
* is materialised in one call.
|
|
162
|
+
*/
|
|
163
|
+
async ensureBasePathExists() {
|
|
164
|
+
await fs.mkdir(this.basePath, { recursive: true });
|
|
165
|
+
}
|
|
119
166
|
/**
|
|
120
167
|
* Index a directory recursively
|
|
121
168
|
*
|
|
@@ -587,17 +634,60 @@ export class SOPService {
|
|
|
587
634
|
});
|
|
588
635
|
}
|
|
589
636
|
/**
|
|
590
|
-
* Ensure the index exists (load or rebuild)
|
|
637
|
+
* Ensure the index exists (load from disk or rebuild from filesystem).
|
|
638
|
+
*
|
|
639
|
+
* Graceful-fallback contract (F8):
|
|
640
|
+
* - Happy path: read `index.json`, JSON.parse it, set `this.index`.
|
|
641
|
+
* `lastFallbackReason` is cleared.
|
|
642
|
+
* - Index missing/unparseable: invoke `rebuildIndex()`. If rebuild
|
|
643
|
+
* succeeded with N>=0 entries, mark fallback reason iff the index
|
|
644
|
+
* was rebuilt due to missing-on-disk (so the controller can surface
|
|
645
|
+
* `index-missing-graceful-fallback` to clients).
|
|
646
|
+
* - Catastrophic rebuild failure (extremely unlikely — rebuild itself
|
|
647
|
+
* swallows persistence errors): synthesise an empty in-memory index
|
|
648
|
+
* and stamp `lastFallbackReason`. The endpoint returns 200 with an
|
|
649
|
+
* empty payload rather than 500.
|
|
591
650
|
*/
|
|
592
651
|
async ensureIndex() {
|
|
593
652
|
try {
|
|
594
653
|
const content = await fs.readFile(this.indexPath, 'utf-8');
|
|
595
654
|
this.index = JSON.parse(content);
|
|
655
|
+
this.lastFallbackReason = null;
|
|
656
|
+
return;
|
|
596
657
|
}
|
|
597
658
|
catch {
|
|
659
|
+
// fall through to rebuild
|
|
660
|
+
}
|
|
661
|
+
try {
|
|
598
662
|
await this.rebuildIndex();
|
|
663
|
+
// Index was missing/unparseable on disk; even after a successful
|
|
664
|
+
// rebuild we stamp the reason so the controller can advertise the
|
|
665
|
+
// degraded path to callers (telemetry / client-side back-off).
|
|
666
|
+
this.lastFallbackReason = SOPService.FALLBACK_REASON_INDEX_MISSING;
|
|
667
|
+
}
|
|
668
|
+
catch (error) {
|
|
669
|
+
this.logger.warn('SOP index rebuild failed catastrophically — serving empty fallback', { error: error instanceof Error ? error.message : String(error) });
|
|
670
|
+
this.index = {
|
|
671
|
+
version: SOP_CONSTANTS.INDEX_VERSION,
|
|
672
|
+
lastUpdated: new Date().toISOString(),
|
|
673
|
+
sops: [],
|
|
674
|
+
};
|
|
675
|
+
this.lastFallbackReason = SOPService.FALLBACK_REASON_INDEX_MISSING;
|
|
599
676
|
}
|
|
600
677
|
}
|
|
678
|
+
/**
|
|
679
|
+
* Get the reason for the last graceful fallback, if any.
|
|
680
|
+
*
|
|
681
|
+
* Returns the `FALLBACK_REASON_INDEX_MISSING` sentinel when the most
|
|
682
|
+
* recent index load fell back to a regenerated/synthesised in-memory
|
|
683
|
+
* index. Returns null when the cached index was loaded directly from
|
|
684
|
+
* a healthy `index.json` on disk.
|
|
685
|
+
*
|
|
686
|
+
* @returns Fallback reason string, or null.
|
|
687
|
+
*/
|
|
688
|
+
getLastFallbackReason() {
|
|
689
|
+
return this.lastFallbackReason;
|
|
690
|
+
}
|
|
601
691
|
/**
|
|
602
692
|
* Save the index to disk
|
|
603
693
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sop.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/sop/sop.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,aAAa,EAAmB,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAOL,aAAa,GAGd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAiGpC;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,UAAU;IACb,MAAM,CAAC,QAAQ,GAAsB,IAAI,CAAC;IAEjC,MAAM,CAAkB;IACxB,QAAQ,CAAS;IACjB,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,SAAS,CAAS;IAE3B,KAAK,GAAoB,IAAI,CAAC;IAC9B,QAAQ,GAAqB,IAAI,GAAG,EAAE,CAAC;IACvC,WAAW,GAAY,KAAK,CAAC;IAErC;;;;OAIG;IACH,YAAoB,QAAiB;QACnC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAC9E,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5E,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,aAAa;QACzB,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,cAAc,CAAC,QAAgB;QAC3C,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACK,aAAa;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,UAAU;QACrB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAErD,wCAAwC;QACxC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,YAAY;QACvB,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,oBAAoB;QACpB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAE1D,oBAAoB;QACpB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAE3D,IAAI,CAAC,KAAK,GAAG;YACX,OAAO,EAAE,aAAa,CAAC,aAAa;YACpC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,IAAI,EAAE,OAAO;SACd,CAAC;QAEF,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,cAAc,CAC1B,OAAe,EACf,OAAwB,EACxB,QAAiB;QAEjB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAEjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE/C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;oBACvB,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACjD,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,CAAC,IAAI,CAAC;4BACX,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE;4BACzB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;4BAC5C,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;4BAC7B,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;4BACrC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;4BACrC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;4BACrC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK;4BAC/B,QAAQ;yBACT,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,YAAY,CAAC,QAAgB;QACzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,eAAe,CAAC,OAAe;QACrC,uCAAuC;QACvC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAE5E,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,gBAAgB,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,CAAmB,CAAC;YAEhE,2BAA2B;YAC3B,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAClE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,WAAW,EAAE;oBACX,EAAE,EAAE,WAAW,CAAC,EAAE;oBAClB,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,CAAC;oBACjC,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAC5D,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAC5D,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,QAAQ;oBAC5C,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,gBAAgB;oBACzE,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,EAAE;oBAC1C,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;oBAC1C,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,EAAE;oBACpC,UAAU,EAAE,WAAW,CAAC,UAAU;oBAClC,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;oBAC5B,WAAW,EAAE,WAAW,CAAC,WAAW;iBACrC;gBACD,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;aACrB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,MAAiB;QACnC,OAAO;YACL,GAAG,MAAM,CAAC,WAAW;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,MAAM,CAAC,EAAU;QAC5B,cAAc;QACd,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QAChC,CAAC;QAED,gBAAgB;QAChB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,YAAY;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAEjD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,aAAa,CAAC,IAAqB;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAC7D,CAAC;QAEF,MAAM,IAAI,GAAU,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,iBAAiB,CAAC,QAAqB;QAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAElE,MAAM,IAAI,GAAU,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,gBAAgB,CAAC,MAAsB;QAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,MAAM,CAAC;QAEhG,2BAA2B;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI;aACtB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aAChD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,EAAE,QAAQ,CAAC;SAC/D,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAC,uBAAuB,CAAC;aACxE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,+BAA+B;YAC/B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YAC3B,CAAC;YACD,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7C,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEnB,iBAAiB;QACjB,MAAM,IAAI,GAAU,EAAE,CAAC;QACvB,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACK,WAAW,CAAC,KAAoB,EAAE,IAAY;QACpD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0BAA0B;QAC1B,MAAM,aAAa,GAA6B;YAC9C,oBAAoB,EAAE,CAAC,WAAW,CAAC;YACnC,mBAAmB,EAAE,CAAC,WAAW,CAAC;YAClC,SAAS,EAAE,EAAE;YACb,EAAE,EAAE,EAAE;YACN,GAAG,EAAE,EAAE;YACP,GAAG,EAAE,EAAE;YACP,EAAE,EAAE,EAAE;YACN,MAAM,EAAE,EAAE;YACV,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACI,cAAc,CAAC,KAAoB,EAAE,OAAe,EAAE,QAAiB;QAC5E,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExC,wBAAwB;QACxB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,KAAK,IAAI,GAAG,CAAC;YACf,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjC,KAAK,IAAI,GAAG,CAAC;YACf,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC5C,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACvD,CAAC;QAED,kBAAkB;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,kBAAkB,CAAC,MAAsB;QACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACjD,4EAA4E;QAC5E,2EAA2E;QAC3E,kEAAkE;QAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAE,QAAyB,EAAE,GAAW,EAAU,EAAE;YACjG,MAAM,OAAO,GACX,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,sBAAsB;gBACtD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,sBAAsB,CAAC,GAAG,2BAA2B;gBAC7F,CAAC,CAAC,GAAG,CAAC;YACV,OAAO,OAAO,KAAK,kBAAkB,QAAQ,gBAAgB,QAAQ,QAAQ,OAAO,aAAa,CAAC;QACpG,CAAC,CAAC;QAEF,IAAI,OAAO,GAAG,+CAA+C,CAAC;QAC9D,OAAO,IAAI,oDAAoD,CAAC;QAChE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,kBAAkB,CAAC;YAC9B,OAAO,IAAI,2BAA2B,CAAC;YACvC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,YAAY,CACxB,MAAc;QAEd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtE,MAAM,GAAG,GAAgE,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAE,YAAoB,EAAiB,EAAE;YACtE,IAAI,OAA8B,CAAC;YACnC,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,MAAM,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxD,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;wBAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;wBACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;wBACzD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC9D,GAAG,CAAC,IAAI,CAAC;4BACP,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;4BAChG,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM;4BAChE,OAAO,EAAE,IAAI,IAAI,GAAG;yBACrB,CAAC,CAAC;oBACL,CAAC;oBAAC,MAAM,CAAC;wBACP,uBAAuB;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,eAAe,CAC1B,OAAgE;QAEhE,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,MAAM,GAAG,GAAQ;YACf,GAAG,OAAO;YACV,EAAE;YACF,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,cAAc;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE/C,eAAe;QACf,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,OAAqB;QACtD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,UAAU,GAAQ;YACtB,GAAG,WAAW;YACd,GAAG,OAAO;YACV,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,oBAAoB;YACxC,OAAO,EAAE,WAAW,CAAC,OAAO,GAAG,CAAC;YAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,cAAc;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE/C,yBAAyB;QACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAS,CAAC,EAAU;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,cAAc;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE1B,yBAAyB;QACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,QAAQ;QACnB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC,KAAM,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU,CAAC,KAAa;QACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACjC,kBAAkB;YAClB,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,qBAAqB;YACrB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;gBACrE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,qBAAqB;YACrB,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC3D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACrB,0EAA0E;QAC1E,wEAAwE;QACxE,0EAA0E;QAC1E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACnF,CAAC;IAED;;;;;OAKG;IACK,aAAa,CAAC,GAAQ;QAC5B,MAAM,WAAW,GAAmB;YAClC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B,CAAC;QAEF,OAAO,QAAQ,aAAa,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC;IACnE,CAAC;IAED;;OAEG;IACI,UAAU;QACf,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"sop.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/sop/sop.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,14 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { PoolStorage } from './pool-storage.js';
|
|
15
15
|
import { type TaskClaim, type CreateClaimInput } from '../../types/v2/claim.types.js';
|
|
16
|
+
/**
|
|
17
|
+
* Consecutive grace-period revocations (with NO intervening heartbeat) after
|
|
18
|
+
* which an agent's session is considered HUNG — it keeps claiming work but
|
|
19
|
+
* never proves liveness. This is the Irissair orchestrator 假死 signature:
|
|
20
|
+
* claimed hourly, never heartbeated, revoked ~13 min later, repeat. Surfaced
|
|
21
|
+
* via {@link ClaimService.getHungAgents}.
|
|
22
|
+
*/
|
|
23
|
+
export declare const HUNG_SESSION_GRACE_REVOKE_THRESHOLD = 3;
|
|
16
24
|
/**
|
|
17
25
|
* Result of a heartbeat operation.
|
|
18
26
|
*/
|
|
@@ -75,6 +83,13 @@ export interface ExpiredClaimsSummary {
|
|
|
75
83
|
export declare class ClaimService {
|
|
76
84
|
private readonly storage;
|
|
77
85
|
private readonly logger;
|
|
86
|
+
/**
|
|
87
|
+
* Per-agent count of consecutive grace-period revocations with NO intervening
|
|
88
|
+
* heartbeat. Incremented on each grace revoke, reset to 0 on any successful
|
|
89
|
+
* heartbeat (proof the session is alive). Powers hung-session detection
|
|
90
|
+
* ({@link getHungAgents}).
|
|
91
|
+
*/
|
|
92
|
+
private readonly consecutiveGraceRevokes;
|
|
78
93
|
constructor(storage: PoolStorage);
|
|
79
94
|
/**
|
|
80
95
|
* Creates a new claim for a work item.
|
|
@@ -127,6 +142,32 @@ export declare class ClaimService {
|
|
|
127
142
|
* @throws Error if claim not found
|
|
128
143
|
*/
|
|
129
144
|
revoke(claimId: string, reason: string): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* Consecutive grace-period revocations (with no intervening heartbeat) for an
|
|
147
|
+
* agent. Resets to 0 on the agent's next successful heartbeat.
|
|
148
|
+
*
|
|
149
|
+
* @param agentId - The agent/session id.
|
|
150
|
+
* @returns The current consecutive grace-revoke count (0 if none).
|
|
151
|
+
*/
|
|
152
|
+
getConsecutiveGraceRevokes(agentId: string): number;
|
|
153
|
+
/**
|
|
154
|
+
* Agents whose consecutive grace-revoke count is at or above `threshold` —
|
|
155
|
+
* their sessions keep claiming work but never heartbeat, i.e. they look HUNG.
|
|
156
|
+
*
|
|
157
|
+
* @param threshold - Minimum consecutive grace-revokes (default
|
|
158
|
+
* {@link HUNG_SESSION_GRACE_REVOKE_THRESHOLD}).
|
|
159
|
+
* @returns Agent ids that currently look hung.
|
|
160
|
+
*/
|
|
161
|
+
getHungAgents(threshold?: number): string[];
|
|
162
|
+
/**
|
|
163
|
+
* Clear an agent's consecutive grace-revoke count. Called by the hung-session
|
|
164
|
+
* watchdog after it triggers a recovery (session restart) so the freshly
|
|
165
|
+
* restarted session is not immediately re-flagged as hung before it has had a
|
|
166
|
+
* chance to heartbeat.
|
|
167
|
+
*
|
|
168
|
+
* @param agentId - The agent/session id to clear.
|
|
169
|
+
*/
|
|
170
|
+
clearGraceRevokes(agentId: string): void;
|
|
130
171
|
/**
|
|
131
172
|
* Scans all active claims and categorizes expired ones.
|
|
132
173
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/claim.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,gBAAgB,EAYtB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"claim.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/claim.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,gBAAgB,EAYtB,MAAM,+BAA+B,CAAC;AAEvC;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,IAAI,CAAC;AASrD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,mDAAmD;IACnD,aAAa,EAAE,SAAS,EAAE,CAAC;CAC5B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA6B;gBAEzD,OAAO,EAAE,WAAW;IAShC;;;;;;;;;OASG;IACG,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAuC9D;;;;;;;;;OASG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAkD3E;;;;;;;;;;;OAWG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkD/E;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B7D;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C5D;;;;;;OAMG;IACH,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAInD;;;;;;;OAOG;IACH,aAAa,CAAC,SAAS,GAAE,MAA4C,GAAG,MAAM,EAAE;IAQhF;;;;;;;OAOG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQxC;;;;;;;;;;OAUG;IACG,iBAAiB,CACrB,GAAG,GAAE,MAAmB,EACxB,aAAa,GAAE,MAAgC,GAC9C,OAAO,CAAC,oBAAoB,CAAC;IAoBhC;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAerD;;;;;OAKG;IACG,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAI5E;;;;;OAKG;IACG,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAIlF;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK7C;;;;;OAKG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAKnE;;;;;;;;OAQG;IACH,gBAAgB,CACd,KAAK,EAAE,SAAS,EAChB,mBAAmB,GAAE,MAAsC,EAC3D,WAAW,GAAE,MAAe,EAC5B,GAAG,GAAE,MAAmB,GACvB,OAAO;IASV;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|