principles-disciple 1.24.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/openclaw.plugin.json +4 -4
- package/package.json +1 -1
- package/scripts/diagnose-nocturnal.mjs +11 -4
- package/src/core/event-log.ts +14 -0
- package/src/hooks/gate-block-helper.ts +49 -2
- package/src/service/evolution-worker.ts +3 -0
- package/src/service/nocturnal-runtime.ts +14 -9
- package/src/service/nocturnal-service.ts +50 -24
- package/src/service/nocturnal-target-selector.ts +7 -5
- package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +8 -2
- package/tsconfig.tsbuildinfo +0 -1
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "principles-disciple",
|
|
3
3
|
"name": "Principles Disciple",
|
|
4
4
|
"description": "Evolutionary programming agent framework with strategic guardrails and reflection loops.",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.26.0",
|
|
6
6
|
"skills": [
|
|
7
7
|
"./skills"
|
|
8
8
|
],
|
|
@@ -76,8 +76,8 @@
|
|
|
76
76
|
}
|
|
77
77
|
},
|
|
78
78
|
"buildFingerprint": {
|
|
79
|
-
"gitSha": "
|
|
80
|
-
"bundleMd5": "
|
|
81
|
-
"builtAt": "2026-04-
|
|
79
|
+
"gitSha": "6c8a61389b46",
|
|
80
|
+
"bundleMd5": "2803099a748622cc50286ad4c55be551",
|
|
81
|
+
"builtAt": "2026-04-13T02:02:51.311Z"
|
|
82
82
|
}
|
|
83
83
|
}
|
package/package.json
CHANGED
|
@@ -126,6 +126,9 @@ function main() {
|
|
|
126
126
|
if (data.sessionId && data.lastActivityAt) validSessions++;
|
|
127
127
|
} catch { /* corrupted, skip */ }
|
|
128
128
|
}
|
|
129
|
+
if (validSessions === 0) {
|
|
130
|
+
return { status: 'warn', detail: `${files.length} session file(s) found but none are valid JSON — idle check will likely report idle immediately` };
|
|
131
|
+
}
|
|
129
132
|
return `${files.length} session files, ${validSessions} valid with sessionId+lastActivityAt`;
|
|
130
133
|
});
|
|
131
134
|
|
|
@@ -221,7 +224,7 @@ function main() {
|
|
|
221
224
|
if (active.length > 0) {
|
|
222
225
|
return { status: 'warn', detail: `${active.length} workflow(s) still active — may be in progress or stuck. IDs: ${active.map(w => w.workflow_id).join(', ')}` };
|
|
223
226
|
}
|
|
224
|
-
return `${workflows.length} total: ${completed} completed, ${errored} errored, ${expired} expired`;
|
|
227
|
+
return `${workflows.length} total: ${completed.length} completed, ${errored.length} errored, ${expired.length} expired`;
|
|
225
228
|
});
|
|
226
229
|
|
|
227
230
|
// ─────────────────────────────────────────────────────────
|
|
@@ -318,10 +321,14 @@ function main() {
|
|
|
318
321
|
fields[line.substring(0, colonIdx).trim()] = line.substring(colonIdx + 1).trim();
|
|
319
322
|
}
|
|
320
323
|
}
|
|
321
|
-
|
|
322
|
-
|
|
324
|
+
// Accept either the legacy contract (fields.score + fields.reason)
|
|
325
|
+
// or the current contract (active.source.score)
|
|
326
|
+
const legacy = fields.score && fields.reason;
|
|
327
|
+
const current = fields.active && fields.source && fields.score;
|
|
328
|
+
if (!legacy && !current) {
|
|
329
|
+
return { status: 'warn', detail: 'Pain flag exists but is missing required fields (need score + reason, or active.source.score)' };
|
|
323
330
|
}
|
|
324
|
-
return `Pain flag active (score: ${fields.score}, source: ${fields.source || 'unknown'}, session: ${fields.session_id || 'none'})`;
|
|
331
|
+
return `Pain flag active (score: ${fields.score}, source: ${fields.source || fields.active?.source || 'unknown'}, session: ${fields.session_id || 'none'})`;
|
|
325
332
|
});
|
|
326
333
|
|
|
327
334
|
// ─────────────────────────────────────────────────────────
|
package/src/core/event-log.ts
CHANGED
|
@@ -510,6 +510,20 @@ export class EventLog {
|
|
|
510
510
|
return null;
|
|
511
511
|
}
|
|
512
512
|
|
|
513
|
+
/**
|
|
514
|
+
* Find the latest pain signal for a given session.
|
|
515
|
+
*/
|
|
516
|
+
findLatestPainSignal(sessionId: string | undefined): PainSignalEventData | null {
|
|
517
|
+
const allEvents = this.getMergedEvents();
|
|
518
|
+
for (let i = allEvents.length - 1; i >= 0; i--) {
|
|
519
|
+
const entry = allEvents[i];
|
|
520
|
+
if (entry.sessionId === sessionId && entry.type === "pain_signal") {
|
|
521
|
+
return entry.data as unknown as PainSignalEventData;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
return null;
|
|
525
|
+
}
|
|
526
|
+
|
|
513
527
|
/**
|
|
514
528
|
* Dispose of the EventLog, flushing pending data and clearing timer.
|
|
515
529
|
*/
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
TRAJECTORY_GATE_BLOCK_RETRY_DELAY_MS,
|
|
18
18
|
TRAJECTORY_GATE_BLOCK_MAX_RETRIES
|
|
19
19
|
} from '../config/index.js';
|
|
20
|
+
import { buildPainFlag, writePainFlag } from '../core/pain.js';
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* Block context containing all information needed for block persistence
|
|
@@ -93,11 +94,57 @@ export function recordGateBlockAndReturn(
|
|
|
93
94
|
wctx.trajectory?.recordGateBlock?.(trajectoryPayload);
|
|
94
95
|
} catch (error: unknown) {
|
|
95
96
|
logWarn(`[PD_GATE] Failed to record trajectory gate block: ${String(error)}`);
|
|
96
|
-
|
|
97
|
+
|
|
97
98
|
scheduleTrajectoryGateBlockRetry(wctx, trajectoryPayload, 1, logWarn, logError);
|
|
98
99
|
}
|
|
99
100
|
|
|
100
|
-
// 5.
|
|
101
|
+
// 5. Emit pain signal for gate block (#256)
|
|
102
|
+
// Gate blocks are a strong frustration signal — the agent tried to do something
|
|
103
|
+
// and was blocked by a principle gate. This should feed into the nocturnal pipeline.
|
|
104
|
+
if (sessionId) {
|
|
105
|
+
const GATE_BLOCK_PAIN_SCORE = 30; // Moderate — not a failure but a blocked intent
|
|
106
|
+
try {
|
|
107
|
+
wctx.trajectory?.recordPainEvent?.({
|
|
108
|
+
sessionId,
|
|
109
|
+
source: 'gate_blocked',
|
|
110
|
+
score: GATE_BLOCK_PAIN_SCORE,
|
|
111
|
+
reason: `Gate blocked ${toolName} on ${filePath}: ${reason}`,
|
|
112
|
+
severity: 'mild',
|
|
113
|
+
origin: 'system_infer',
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// Update .pain_flag if score is significant
|
|
117
|
+
wctx.eventLog.recordPainSignal(sessionId, {
|
|
118
|
+
source: 'gate_blocked',
|
|
119
|
+
score: GATE_BLOCK_PAIN_SCORE,
|
|
120
|
+
reason,
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// Write to pain flag file (merge with existing if present)
|
|
124
|
+
try {
|
|
125
|
+
const workspaceDir = wctx.workspaceDir;
|
|
126
|
+
const currentFlag = wctx.eventLog.findLatestPainSignal(sessionId);
|
|
127
|
+
const currentScore = currentFlag?.score ?? 0;
|
|
128
|
+
if (currentScore < GATE_BLOCK_PAIN_SCORE) {
|
|
129
|
+
const flag = buildPainFlag({
|
|
130
|
+
source: 'gate_blocked',
|
|
131
|
+
score: String(GATE_BLOCK_PAIN_SCORE),
|
|
132
|
+
reason: `Gate blocked: ${reason}`,
|
|
133
|
+
session_id: sessionId,
|
|
134
|
+
agent_id: 'main',
|
|
135
|
+
is_risky: false,
|
|
136
|
+
});
|
|
137
|
+
writePainFlag(workspaceDir, flag);
|
|
138
|
+
}
|
|
139
|
+
} catch (flagErr) {
|
|
140
|
+
logWarn(`[PD_GATE] Failed to update pain flag for gate block: ${String(flagErr)}`);
|
|
141
|
+
}
|
|
142
|
+
} catch (painErr) {
|
|
143
|
+
logWarn(`[PD_GATE] Failed to record gate block pain signal: ${String(painErr)}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// 6. Return consistent block result with operator guidance
|
|
101
148
|
return {
|
|
102
149
|
block: true,
|
|
103
150
|
blockReason: `[Principles Disciple] Security Gate Blocked this action.
|
|
@@ -1003,6 +1003,7 @@ async function processEvolutionQueue(wctx: WorkspaceContext, logger: PluginLogge
|
|
|
1003
1003
|
logger: api?.logger || logger,
|
|
1004
1004
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- Reason: api is guaranteed non-null in this recovery path where runtimeAdapter is required
|
|
1005
1005
|
runtimeAdapter: new OpenClawTrinityRuntimeAdapter(api!),
|
|
1006
|
+
subagent: api?.runtime?.subagent,
|
|
1006
1007
|
});
|
|
1007
1008
|
try {
|
|
1008
1009
|
// Force-expire this specific workflow regardless of TTL
|
|
@@ -1596,6 +1597,7 @@ async function processEvolutionQueue(wctx: WorkspaceContext, logger: PluginLogge
|
|
|
1596
1597
|
stateDir: wctx.stateDir,
|
|
1597
1598
|
logger: api.logger,
|
|
1598
1599
|
runtimeAdapter: new OpenClawTrinityRuntimeAdapter(api),
|
|
1600
|
+
subagent: api.runtime.subagent,
|
|
1599
1601
|
});
|
|
1600
1602
|
|
|
1601
1603
|
if (!isPollingTask) {
|
|
@@ -2096,6 +2098,7 @@ export const EvolutionWorkerService: ExtendedEvolutionWorkerService = {
|
|
|
2096
2098
|
stateDir: wctx.stateDir,
|
|
2097
2099
|
logger: api.logger,
|
|
2098
2100
|
runtimeAdapter: new OpenClawTrinityRuntimeAdapter(api),
|
|
2101
|
+
subagent: api.runtime.subagent,
|
|
2099
2102
|
});
|
|
2100
2103
|
swept += await nocturnalMgr.sweepExpiredWorkflows(WORKFLOW_TTL_MS, subagentRuntime, agentSession);
|
|
2101
2104
|
nocturnalMgr.dispose();
|
|
@@ -560,7 +560,8 @@ export function checkPreflight(
|
|
|
560
560
|
stateDir: string,
|
|
561
561
|
principleId?: string,
|
|
562
562
|
trajectoryLastActivityAt?: number,
|
|
563
|
-
idleCheckOverride?: IdleCheckResult
|
|
563
|
+
idleCheckOverride?: IdleCheckResult,
|
|
564
|
+
skipGatesForManualTrigger?: boolean
|
|
564
565
|
): PreflightCheckResult {
|
|
565
566
|
const idle = idleCheckOverride ?? checkWorkspaceIdle(workspaceDir, {}, trajectoryLastActivityAt);
|
|
566
567
|
const cooldown = checkCooldown(stateDir, principleId);
|
|
@@ -571,16 +572,20 @@ export function checkPreflight(
|
|
|
571
572
|
blockers.push(`Workspace not idle (active for ${idle.idleForMs}ms, threshold=${DEFAULT_IDLE_THRESHOLD_MS}ms)`);
|
|
572
573
|
}
|
|
573
574
|
|
|
574
|
-
if (
|
|
575
|
-
|
|
576
|
-
|
|
575
|
+
if (!skipGatesForManualTrigger) {
|
|
576
|
+
if (cooldown.globalCooldownActive) {
|
|
577
|
+
blockers.push(`Global cooldown active until ${cooldown.globalCooldownUntil}`);
|
|
578
|
+
}
|
|
577
579
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
580
|
+
if (cooldown.principleCooldownActive) {
|
|
581
|
+
blockers.push(`Principle cooldown active until ${cooldown.principleCooldownUntil}`);
|
|
582
|
+
}
|
|
581
583
|
|
|
582
|
-
|
|
583
|
-
|
|
584
|
+
if (cooldown.quotaExhausted) {
|
|
585
|
+
blockers.push(`Quota exhausted (${DEFAULT_MAX_RUNS_PER_WINDOW} runs per ${DEFAULT_QUOTA_WINDOW_MS / 3600000}h window)`);
|
|
586
|
+
}
|
|
587
|
+
} else if (cooldown.globalCooldownActive || cooldown.principleCooldownActive || cooldown.quotaExhausted) {
|
|
588
|
+
// Log that gates are being bypassed for manual trigger
|
|
584
589
|
}
|
|
585
590
|
|
|
586
591
|
if (idle.abandonedSessionIds.length > 0 && idle.userActiveSessions === 0) {
|
|
@@ -280,33 +280,52 @@ function invokeStubReflector(
|
|
|
280
280
|
const artifactId = randomUUID();
|
|
281
281
|
const now = new Date().toISOString();
|
|
282
282
|
|
|
283
|
-
// Build
|
|
284
|
-
//
|
|
285
|
-
|
|
286
|
-
|
|
283
|
+
// #256: Build artifact from actual event content, not just stats counts.
|
|
284
|
+
// Previously the stub only checked stats.failureCount/painEvents/gateBlocks > 0
|
|
285
|
+
// and emitted the same template artifact regardless of what actually happened.
|
|
286
|
+
// Now we examine the actual event data to generate targeted reflections.
|
|
287
|
+
|
|
287
288
|
const hasGateBlocks = (snapshot.stats.totalGateBlocks ?? 0) > 0;
|
|
289
|
+
const hasPain = snapshot.stats.totalPainEvents > 0;
|
|
290
|
+
const hasFailures = (snapshot.stats.failureCount ?? 0) > 0;
|
|
288
291
|
|
|
289
|
-
// Detect what kind of signal is available and craft appropriate artifact
|
|
290
|
-
|
|
291
292
|
let badDecision: string;
|
|
292
|
-
|
|
293
293
|
let betterDecision: string;
|
|
294
|
-
|
|
295
294
|
let rationale: string;
|
|
296
295
|
|
|
297
|
-
if (hasGateBlocks) {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
badDecision = `
|
|
303
|
-
betterDecision = `
|
|
304
|
-
rationale = `
|
|
305
|
-
} else if (
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
296
|
+
if (hasGateBlocks && snapshot.gateBlocks.length > 0) {
|
|
297
|
+
// Use actual gate block content
|
|
298
|
+
const block = snapshot.gateBlocks[0];
|
|
299
|
+
const tool = block.toolName ?? 'a tool';
|
|
300
|
+
const file = block.filePath ? ` on ${block.filePath}` : '';
|
|
301
|
+
badDecision = `Attempted to invoke ${tool}${file} without satisfying the gate requirements`;
|
|
302
|
+
betterDecision = `Review the gate block reason "${block.reason ?? 'unspecified'}" and resolve the blocking condition before retrying`;
|
|
303
|
+
rationale = `Gate blocks exist for a reason — bypassing them without understanding the underlying constraint risks unintended consequences. The block on ${tool}${file} indicates the operation exceeded allowed thresholds for the current evolution tier.`;
|
|
304
|
+
} else if (hasPain && snapshot.painEvents.length > 0) {
|
|
305
|
+
// Use actual pain event content
|
|
306
|
+
const pain = snapshot.painEvents[0];
|
|
307
|
+
const painSource = pain.source ?? 'unknown';
|
|
308
|
+
const painReason = pain.reason ? `: ${pain.reason}` : '';
|
|
309
|
+
badDecision = `Continued operating despite ${painSource} pain signal (score ${pain.score ?? 'unknown'})${painReason}`;
|
|
310
|
+
betterDecision = `Pause and analyze the ${painSource} signal — the pain indicates accumulated friction that should be diagnosed before proceeding`;
|
|
311
|
+
rationale = `Pain signals from ${painSource} are early warnings of systemic issues. Score ${pain.score ?? 'N/A'} indicates ${((pain.score ?? 0) >= 70) ? 'severe' : ((pain.score ?? 0) >= 40) ? 'moderate' : 'mild'} friction that should be addressed before continuing operations.`;
|
|
312
|
+
} else if (hasFailures && snapshot.toolCalls.length > 0) {
|
|
313
|
+
// Use actual tool failure content
|
|
314
|
+
const failedCall = snapshot.toolCalls.find(tc => tc.outcome === 'failure');
|
|
315
|
+
if (failedCall) {
|
|
316
|
+
const tool = failedCall.toolName ?? 'a tool';
|
|
317
|
+
const file = failedCall.filePath ? ` on ${failedCall.filePath}` : '';
|
|
318
|
+
const error = failedCall.errorMessage ? ` — ${failedCall.errorMessage}` : '';
|
|
319
|
+
badDecision = `Retried ${tool}${file} after failure without first diagnosing the root cause${error}`;
|
|
320
|
+
betterDecision = `Examine the error details (${failedCall.errorType ?? 'unknown type'}${error ? error : ''}) and verify preconditions before attempting ${tool} again`;
|
|
321
|
+
rationale = `Tool failures are opportunities for learning. The ${tool} failure${file} with error type ${failedCall.errorType ?? 'unknown'} suggests a gap in precondition checking or error handling that should be addressed to prevent recurrence.`;
|
|
322
|
+
} else {
|
|
323
|
+
badDecision = `Retried a failing operation without diagnosing the root cause of the failure`;
|
|
324
|
+
betterDecision = `Based on the evidence from the error logs, let me first check the actual source code to understand the precondition before retrying`;
|
|
325
|
+
rationale = `Diagnosing failures before retry prevents repeated failures and respects the cost of each action attempt`;
|
|
326
|
+
}
|
|
309
327
|
} else {
|
|
328
|
+
// Fallback — no specific signal content available
|
|
310
329
|
badDecision = `Proceeded with an operation without verifying preconditions or checking for conflicting changes`;
|
|
311
330
|
betterDecision = `Let me first understand the current state of the codebase by reading the relevant files before making any changes`;
|
|
312
331
|
rationale = `Verifying preconditions and current state prevents errors and ensures actions are appropriate for the actual situation`;
|
|
@@ -686,7 +705,8 @@ export function executeNocturnalReflection(
|
|
|
686
705
|
stateDir,
|
|
687
706
|
undefined, // principleId
|
|
688
707
|
undefined, // trajectoryLastActivityAt
|
|
689
|
-
options.idleCheckOverride
|
|
708
|
+
options.idleCheckOverride,
|
|
709
|
+
!!options.idleCheckOverride // skip cooldown/quota gates for manual/test triggers
|
|
690
710
|
);
|
|
691
711
|
diagnostics.preflight = preflight;
|
|
692
712
|
|
|
@@ -920,11 +940,15 @@ export function executeNocturnalReflection(
|
|
|
920
940
|
// -------------------------------------------------------------------------
|
|
921
941
|
// Step 6: Arbiter validation
|
|
922
942
|
// -------------------------------------------------------------------------
|
|
943
|
+
// #256: Use 0 for thinkingModelDeltaMin — Trinity chain (Dreamer→Philosopher→Scribe)
|
|
944
|
+
// already ensures quality. A delta of 0 is valid when both bad and better decisions
|
|
945
|
+
// show equally well-reasoned thinking (the Scribe's job is to contrast decisions,
|
|
946
|
+
// not to make one sound more "cognitive" than the other).
|
|
923
947
|
const arbiterResult = parseAndValidateArtifact(rawJson, {
|
|
924
948
|
expectedPrincipleId: selectedPrincipleId,
|
|
925
949
|
expectedSessionId: selectedSessionId,
|
|
926
950
|
qualityThresholds: {
|
|
927
|
-
thinkingModelDeltaMin: 0
|
|
951
|
+
thinkingModelDeltaMin: 0,
|
|
928
952
|
planningRatioGainMin: -0.5,
|
|
929
953
|
},
|
|
930
954
|
});
|
|
@@ -1153,7 +1177,8 @@ async function executeNocturnalReflectionWithAdapter(
|
|
|
1153
1177
|
stateDir,
|
|
1154
1178
|
undefined,
|
|
1155
1179
|
undefined,
|
|
1156
|
-
options.idleCheckOverride
|
|
1180
|
+
options.idleCheckOverride,
|
|
1181
|
+
!!options.idleCheckOverride // skip cooldown/quota gates for manual/test triggers
|
|
1157
1182
|
);
|
|
1158
1183
|
diagnostics.preflight = preflight;
|
|
1159
1184
|
|
|
@@ -1354,11 +1379,12 @@ async function executeNocturnalReflectionWithAdapter(
|
|
|
1354
1379
|
}
|
|
1355
1380
|
|
|
1356
1381
|
// Step 5: Arbiter validation
|
|
1382
|
+
// #256: Use 0 for thinkingModelDeltaMin — Trinity chain already ensures quality
|
|
1357
1383
|
const arbiterResult = parseAndValidateArtifact(rawJson, {
|
|
1358
1384
|
expectedPrincipleId: selectedPrincipleId,
|
|
1359
1385
|
expectedSessionId: selectedSessionId,
|
|
1360
1386
|
qualityThresholds: {
|
|
1361
|
-
thinkingModelDeltaMin: 0
|
|
1387
|
+
thinkingModelDeltaMin: 0,
|
|
1362
1388
|
planningRatioGainMin: -0.5,
|
|
1363
1389
|
},
|
|
1364
1390
|
});
|
|
@@ -347,11 +347,13 @@ export class NocturnalTargetSelector {
|
|
|
347
347
|
}
|
|
348
348
|
|
|
349
349
|
// Step 2: Cooldown and quota check
|
|
350
|
+
// #256: Skip cooldown/quota for manual/test triggers (idleCheckOverride present)
|
|
351
|
+
const skipGates = !!this.idleCheckOverride;
|
|
350
352
|
const cooldownResult = checkCooldown(this.stateDir);
|
|
351
353
|
diagnostics.cooldownCheckPassed = !cooldownResult.globalCooldownActive;
|
|
352
354
|
diagnostics.quotaCheckPassed = !cooldownResult.quotaExhausted;
|
|
353
355
|
|
|
354
|
-
if (cooldownResult.globalCooldownActive) {
|
|
356
|
+
if (!skipGates && cooldownResult.globalCooldownActive) {
|
|
355
357
|
return {
|
|
356
358
|
decision: 'skip',
|
|
357
359
|
skipReason: 'global_cooldown_active',
|
|
@@ -359,7 +361,7 @@ export class NocturnalTargetSelector {
|
|
|
359
361
|
};
|
|
360
362
|
}
|
|
361
363
|
|
|
362
|
-
if (cooldownResult.quotaExhausted) {
|
|
364
|
+
if (!skipGates && cooldownResult.quotaExhausted) {
|
|
363
365
|
return {
|
|
364
366
|
decision: 'skip',
|
|
365
367
|
skipReason: 'quota_exhausted',
|
|
@@ -440,9 +442,9 @@ export class NocturnalTargetSelector {
|
|
|
440
442
|
}
|
|
441
443
|
|
|
442
444
|
// Compute violation signals for each session
|
|
443
|
-
// #
|
|
444
|
-
//
|
|
445
|
-
const MIN_VIOLATION_DEPTH =
|
|
445
|
+
// #256: Lowered from 2 to 1 — most sessions have exactly 1 failure + 1 pain event
|
|
446
|
+
// which is a high-quality candidate. Requiring >= 2 excluded the majority of meaningful sessions.
|
|
447
|
+
const MIN_VIOLATION_DEPTH = 1;
|
|
446
448
|
const richSessions = recentSessions.filter(
|
|
447
449
|
s => (s.failureCount ?? 0) + (s.painEventCount ?? 0) + (s.gateBlockCount ?? 0) >= MIN_VIOLATION_DEPTH
|
|
448
450
|
);
|
|
@@ -41,6 +41,7 @@ import type { RecentPainContext } from '../evolution-worker.js';
|
|
|
41
41
|
import * as fs from 'fs';
|
|
42
42
|
import * as path from 'path';
|
|
43
43
|
import { validateNocturnalSnapshotIngress } from '../../core/nocturnal-snapshot-contract.js';
|
|
44
|
+
import { isSubagentRuntimeAvailable } from '../../utils/subagent-probe.js';
|
|
44
45
|
|
|
45
46
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
46
47
|
// NocturnalResult Type Alias
|
|
@@ -65,6 +66,8 @@ export interface NocturnalWorkflowOptions {
|
|
|
65
66
|
logger: PluginLogger;
|
|
66
67
|
/** Trinity runtime adapter for subagent execution */
|
|
67
68
|
runtimeAdapter: TrinityRuntimeAdapter;
|
|
69
|
+
/** Subagent runtime for availability probing (#254) */
|
|
70
|
+
subagent?: { run?: unknown };
|
|
68
71
|
}
|
|
69
72
|
|
|
70
73
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -138,6 +141,7 @@ export class NocturnalWorkflowManager implements WorkflowManager {
|
|
|
138
141
|
private readonly stateDir: string;
|
|
139
142
|
private readonly logger: PluginLogger;
|
|
140
143
|
private readonly runtimeAdapter: TrinityRuntimeAdapter;
|
|
144
|
+
private readonly subagent: { run?: unknown } | undefined;
|
|
141
145
|
private readonly store: WorkflowStore;
|
|
142
146
|
|
|
143
147
|
/** Tracks completion timestamps for idempotency */
|
|
@@ -156,6 +160,7 @@ export class NocturnalWorkflowManager implements WorkflowManager {
|
|
|
156
160
|
this.stateDir = opts.stateDir;
|
|
157
161
|
this.logger = opts.logger;
|
|
158
162
|
this.runtimeAdapter = opts.runtimeAdapter;
|
|
163
|
+
this.subagent = opts.subagent;
|
|
159
164
|
this.store = new WorkflowStore({ workspaceDir: opts.workspaceDir });
|
|
160
165
|
}
|
|
161
166
|
|
|
@@ -172,8 +177,9 @@ export class NocturnalWorkflowManager implements WorkflowManager {
|
|
|
172
177
|
metadata?: Record<string, unknown>;
|
|
173
178
|
}
|
|
174
179
|
): Promise<WorkflowHandle> {
|
|
175
|
-
|
|
176
|
-
|
|
180
|
+
// #254: Use isSubagentRuntimeAvailable instead of runtimeAdapter.isRuntimeAvailable()
|
|
181
|
+
// (which always returns true in OpenClawTrinityRuntimeAdapter)
|
|
182
|
+
if (!isSubagentRuntimeAvailable(this.subagent)) {
|
|
177
183
|
this.logger.warn(`[PD:NocturnalWorkflow] Subagent runtime unavailable, skipping workflow`);
|
|
178
184
|
throw new Error(`NocturnalWorkflowManager: subagent runtime unavailable`);
|
|
179
185
|
}
|
package/tsconfig.tsbuildinfo
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"fileNames":["../../../../.npm-global/lib/node_modules/typescript/lib/lib.es5.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2015.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2016.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2017.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2018.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2019.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2020.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2021.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2022.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.dom.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.scripthost.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.decorators.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../../.npm-global/lib/node_modules/typescript/lib/lib.es2022.full.d.ts","./src/openclaw-sdk.d.ts","./src/utils/file-lock.ts","./src/core/model-training-registry.ts","./src/core/external-training-contract.ts","./src/core/shadow-observation-registry.ts","./src/core/promotion-gate.ts","./src/core/model-deployment-registry.ts","./src/core/local-worker-routing.ts","./src/i18n/commands.ts","./src/core/paths.ts","./src/config/defaults/runtime.ts","./src/config/errors.ts","./src/config/index.ts","./src/core/path-resolver.ts","./src/core/config.ts","./src/core/config-service.ts","./src/types/event-types.ts","./src/core/event-log.ts","./src/core/dictionary.ts","./src/core/dictionary-service.ts","./src/types/hygiene-types.ts","./src/core/hygiene/tracker.ts","./src/core/system-logger.ts","./src/core/trajectory.ts","./src/core/evolution-types.ts","./src/core/evolution-reducer.ts","./src/core/workspace-context.ts","./src/core/session-tracker.ts","./src/types.ts","./src/core/focus-history.ts","./src/utils/subagent-probe.ts","./src/service/empathy-observer-manager.ts","./src/service/subagent-workflow/runtime-direct-driver.ts","./src/service/subagent-workflow/types.ts","./src/service/subagent-workflow/workflow-store.ts","./src/service/subagent-workflow/empathy-observer-workflow-manager.ts","./src/service/subagent-workflow/index.ts","./src/hooks/prompt.ts","./src/utils/io.ts","./src/core/profile.ts","./src/core/risk-calculator.ts","./src/hooks/thinking-checkpoint.ts","./src/hooks/edit-verification.ts","./src/hooks/bash-risk.ts","./src/constants/tools.ts","./src/hooks/gate-block-helper.ts","./src/core/evolution-engine.ts","./src/hooks/gfi-gate.ts","./src/hooks/progressive-trust-gate.ts","./src/hooks/gate.ts","./src/core/pain.ts","./src/utils/hashing.ts","./src/core/evolution-logger.ts","./src/hooks/pain.ts","./src/hooks/lifecycle.ts","./src/core/control-ui-db.ts","./src/core/detection-funnel.ts","./src/core/detection-service.ts","./src/core/thinking-models.ts","./src/hooks/message-sanitize.ts","./src/hooks/llm.ts","./src/core/init.ts","./src/utils/nlp.ts","./src/constants/diagnostician.ts","./src/service/nocturnal-runtime.ts","./src/core/nocturnal-trajectory-extractor.ts","./src/core/principle-training-state.ts","./src/core/nocturnal-compliance.ts","./src/service/nocturnal-target-selector.ts","./src/core/nocturnal-arbiter.ts","./src/core/adaptive-thresholds.ts","./src/core/nocturnal-candidate-scoring.ts","./src/core/nocturnal-trinity.ts","./src/core/nocturnal-executability.ts","./src/core/nocturnal-paths.ts","./src/core/nocturnal-dataset.ts","./src/service/nocturnal-service.ts","./src/service/evolution-worker.ts","./src/hooks/subagent.ts","./src/hooks/trajectory-collector.ts","./src/commands/strategy.ts","./src/commands/capabilities.ts","./src/commands/thinking-os.ts","./src/commands/evolver.ts","./src/commands/pain.ts","./src/commands/context.ts","./src/commands/focus.ts","./src/commands/rollback.ts","./src/service/phase3-input-filter.ts","./src/types/runtime-summary.ts","./src/service/runtime-summary-service.ts","./src/commands/evolution-status.ts","./src/commands/principle-rollback.ts","./src/core/nocturnal-export.ts","./src/commands/export.ts","./src/commands/samples.ts","./src/commands/nocturnal-review.ts","./src/core/training-program.ts","./src/commands/nocturnal-train.ts","./src/commands/nocturnal-rollout.ts","./src/service/trajectory-service.ts","./src/core/migration.ts","./src/tools/model-index.ts","./src/tools/critique-prompt.ts","./src/tools/deep-reflect.ts","./src/service/control-ui-query-service.ts","./src/service/evolution-query-service.ts","./src/service/health-query-service.ts","./src/service/central-database.ts","./src/http/principles-console-route.ts","./src/index.ts","./src/core/evolution-migration.ts","./src/utils/glob-match.ts","./src/utils/plugin-logger.ts"],"fileIdsList":[[64,90],[64,92,101],[64,72,89,154],[64,90,157],[64,90,93],[64,139],[64,66,67,68,69,70,71,90],[64,66,67,69,70,90,161],[64,80,90,91],[64,89],[64,90,91],[74,75],[65],[78],[65,73],[82],[83,120],[64,80],[65,73,88,108],[86,87],[86,88,89],[65,77,82,86,87,88],[64,84],[64,73,92],[66,69,70],[64,73],[65,66,69],[129],[134,136],[65,133,138],[133],[138,139],[87,122],[129,134,135],[73,79,102],[76],[65,88],[65,66,67,68,70],[102],[64,78,81,86],[73],[66,67],[65,73,76],[73,77,78,79,81,82,83,85,87,89],[64,76,90,91],[64,90,102,103,104,105,106,108,109,111,112],[64,76,90,91,104,107,108,109,110],[64,73,90,93,114],[64,90,91,114,119,121,122,123],[64],[64,86,88,90,91,102,103,110,114,115,116],[64,90,102,109,110],[64,71,77,90,91,92,93,95,100],[64,88,90,95,110,114,141],[64,76,91],[64,87,169,170,171,172],[64,68,70,71,72,77,86,90,101,113,117,118,123,124,125,141,142,143,144,145,146,147,148,149,150,151,155,156,158,159,160,162,163,164,165,168,173],[90,119,122],[64,90,91,94],[87,116],[64,65,76,83,86,90,91,116,121,125,126,127,128,136,140],[70,73,80,90,91,114,119],[65,91],[128,129,132,133,134,136,137,138,139,141],[128,129,130,131],[87,90,91,114,152,153],[64,90,91,94,96,97,98],[96,97,98,99],[97],[64,87,90],[64,166],[64,73,81,92,167]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},"9d8b3a1813740b581aa1a2b50a25fd976276a8ada08bcb362854fcfa1f91521f","262eaabfa3905fb4a82d082990b44c1d888b41955944254aec6c75624bf9a6fe","c3c4b14d7f2f86acef18a32ca98559116d81416e85328f8f7202abc8d00eb6ee","fb0b83a68d1ab00013e50783a8a3485659cc11df4cea678bb8c867e63eed6ccb","74efa7673bc1dfde11ed9badbfc36bc4e16d8cf2d0204398991f90cd6a7c9c00","ca56da3cdccf7731263f77dc5b0fce7a4ede885bb9dee3d0ed3d961a5ddaa001","6c7af54fb57f4ed3f0cbf29784f62df694c5d393f7736a4a8b0d61415491aa38","6e5be48fddbecfb48354c7dbbb0e7e19449d1edc400df37d6d4ecfd5b3636496","e4623380656c5939d7849669914ecd52107a979b4ffd3476c36db153e13f86b4","1e2bede1af57d49af563701f7b78765ccd40674ce66a0cf451e293e6bb1f5d6a","fec28636b608cbae5fff7935cbd758a1818f4ed11136fd8b171c6dc030aaf826","0e9c0067cab37fb3a3066199440cd2d341071ff2c3d1e870502f6d4f6c38b388","55bad809622ff93ba248aa092fc7b5d034fb0d951b7408ad6b96a1d5a8c7d620","395748eedf239c6007d0c59d53cb61efa60daed51f3069c43db018ae864cc42d","96c1ece41aabd170785a27097c56383086e36cb1c0bfa0d93a55c2117a33c6ad","5cd5deab63096b54ac0a8602730a33f93fa78da7c92f73ee77c2c656a1e66220","bcabdcb3fc75fe4324a1f76521d3e3c9771cbdce9a70b6ca67cba3edd13fe600","cc6be56007351d7642dee75881e18cfaf9e4d5a80633c43b3819cead85328721","c7840dcf758cf962c9b5921bf2877a7d68ac3d5f9c0535b72d4be1fb7fe331d0","8a815153c34f6a4cc7370af59338282870ea05d5f7bb504391a24eaa8061571f","71910559d2afc62ad138692ba1de6807d7ce5fae088d412473b6ea1f12345455","5a417b46d2266124171f0d6cf04d87e03c0147353f00cee80ebea6eb21b15af3","b467f6d92ed3a076db89c1b4c907c8f52a120cad62ddccaaadeb0d779d413ec0","385d5a57193712804d9af710dba2a9a1bd7f7d61227f42b1279a896e12b02aec","3fe7b54125bbae42abe66758bf11135c1c7ac240a41d0ec8bd8175d33cb811da","761bf70b706e61ffc18d005b50025c713127379f0b71c88c23d9d13ddb4329e4","14ddff59bfe118c36eedbc599fe3f851ab96f9e2533d597144f5c7a337549acb","7785f0c8ddd30197fbbc2e0fcc639a85796955dd621fe7a2b7e4a109c7be0e5c","861986bb92809c085bef8f1a196844c314c77bedbebb3c762dec53d31c1b5fa2","c5c1c808b8a5a3376840c6f1c076508066439e5aac48a437fb51a40281b74b10","50d39ae9732f40294c7ad597efa7f8b51e8020db3f53c196817a89021ef4cffe","ab3f1e1cac00fdeb41bfcd285343714cda84ee915e2a0848eb06d2a480b60225","9ff3769fea15f3ea87604fab66f9df9c60253e3d8e35a27e30c45368f302823c","f1cc34f32d35fbe8cf9da310d3e827c1075ffc59f67f8ab63b5ea5998e8f9ac8","fe36c4012ea1592148cf8dcf233046e70ed00d8ff3ac17ce2f60deefc7bfc814","0936b33ea78cca7a3b9a43659de1c608a6a1f74745a8cf64cd579fd478f7d0e9","e78c4428e63742f8ce9f6b458c2f77d342895c6186874e07f26ee1b2babc20bb","dd31048fd48693c6e5e9f9daafc488f45d3e075273b488dbe8ffe66547c32456","0065522b7c253c24f790f5fd9b92f6aa2b5281e02f59aee67df4fd83252cf4fe","33e05b1149b08b208119b49f401d3c52f1325add13e252a4ca53117118f79a90","db1c5da92fca254ca627b827ec69156af474512cbc1053219b0db6b43a6c622f","02b1b99f03bff793c1167f22dbc426ff5d0a576cfea997325f304fb3a0910cc3","6a370db16331a34a75f9a996207a90e8653cf8f0c7b8e1271192b9f024d19449","f0570fc2ac9b5a8f7e56581a7b8bfc46ebb2dcc0426369cc30d4c36cd1fb4ad7","f17ca09660b4d7e49cfe351105da8a0d0e33a2da7d053faf9a97cde219874b88","46cd1d609cb3519e2f837747f5c4d5983c440b627f6b093b35c6c8b0cde78c57","2f0fcf3fe2b5eb552d5b7d5388d0abc0937359b58c21b505b4f25d7865b15f43","0dc53e0ed5346d2f1673a98301c9fd04910220f5ec52fbc1bba9562d52d78459","1cecbfd332d84e92823294503c7fc94946f92e5e5d561bd7cd738182a45c3e0a","1389c9a0f3194c4092ac35e5111073a71edaebfca0c4c37822c5749b555c82b9","81d926659a72220ee69b2c0d127afb3b6899f845c15eaacdb161570427d4d697","153033e9c0e1e1378df25d7d993bef559363cf093eda1d88c7df3bbbac811ebd","6d8a1b531cfad78ba0bf2bb22128f540d69ca9ff7d7e7a51a82492cb8cfc1990","5f2a66a6b0d89fc5e2ae32436e6cf9f893fea8ceb0eeac4178939b22b30ec8d0","7f627e420fe7e40964ed65e76f3026728e3e4e56b17d46d74f8732309cd3b0c4","8dfb4addf7ec8a53139f961e986244b51e5b62ad285dd5ef2f2ddad79e4b76e3","975a0346ef51073e5f0628f48cfd0e5ec9eab7661aa48ef4e8bf3df60a397e02","05c62efccea581a27d72d6be673a484887ed4776b4734c222f2a3700d063305a","91f5da2550c281aa28827085442ad8927bf1e13ee7b22a135976eed0823dbe07","3b0d26c6101b5b3b94e5d070ac511f32935da7060096e1c4af77af0acf799ab5","cc9f8ea2b0e60cb1109783a68b3fe70c726521f2e9be18b766e6e6bdc1d7f746","7bffbd69d62237085abeff2337cf289d87b8ef503d2c2a550794ce0de84e1ec8","453603986384ec482e4367057c899fa72607aeeda1f5e8c11a42bea3d763b792","0da32f4b974db17f1b98b3e70daf98887fc42753bcb0efe8acc7d8f3535cedbe","67e81ace6fe5f7808efbf4ef94896ccd3a6d37383aeb9ad1aa2d8ce1a79cf73d","217a5d46bc48bf78af9ed0dc4a57f86585e905925a090c53f4ffd2c98c0e32cc","951ba9347de5ccd741f1373d7b8f87038c507ffd53e9a7cc1e17181fe778d20a","49e9fa4f7f81de98352581c03c469ca5171ce982d6d917bcd46c0c599a7fe80a","189618d658d4fdddcca2ee77755fd64a9b7fb7bd29d7d13d25bc8c8c673a0861","5d4c758c9df5c060812520bd0cb90cd56da75e74a4ad72a9697ad0ef8590718b","7694821ca40004d1d6ebdfb044d48ca9c0fbd81c94a7d0d2655272078e1db89e","16943c31b37a6b82d53f12968442dc925310e48aa9c51c9c0268e137cedf56a1","f9ba6113c421c0c974615178a8eda513dd403082e43f7b18ead8096d264890e4","404cd3ad8ab0664132968fc86c0f38594c971e33e0142173a4057c7904393d88","709b285f80272eccbb391930eda1cea625cdbaa2692288869d182d56b38446b7","3f3f70b08621799e3ed841b6eaae54bb3284558c2a26c399387948218794f713","c79040137cc6fb54071b9124700f4c13a8e453d18ca3a12c1829869f8f5b2855","e6024c2232c8e4eb94decd14f2249be85c01ffba0a7cd2488be59be170b2c88c","6f57d65e12c95626fcbb352815f8c9326e3ff4c5240354d399e397f552340fa9","298798cab06c5760f9e09acb274f22e4574d1616f5e7e64d9ef9a9a24d5ccb8c","7f3b9e3f807ef757640343e60d56918a28f438c2219aa3d96018ae0259157872","9d42e3b90864643bded9bfc940f8fa06615414376a447398cd098a712d8a75cf","7b35df5aba4bfa54ad83884a353e201266ff2c85bb4471415c16bd792117d574","00a02646cfd0fe098bd82f25fc3bc99038ee931cd9a36471a72312654e6d7321","260e88a5b6d4ee08d6065c75c3d47414334543940f72002fb9d21e8bfd9570c9","bf8889b96771e9da3b30052ffc548124a75f6a0e2bcf21e17e6fa7a4916668a2","0b0bd6e68ed04b2b3ad25e7a8c2c9fc4fb11c86acb50fab6a8fdf8f9579cb452","7db0cc4fac0f7add2551acb6a3c73948c6dc5c583ef5793811abdd49319aa0e4","c8044dce86bddc6fbc03787e97ac6507e0987164eaac5dc1abf896f368a13528","12390f3103f6561fa96dec434abf056683962548969f2de2736f38d3ad0dd9bd","c4a9493482d93ab7d12c7a57e115c20413aa871112823320dc2043a325d6562d","438f519b40e011c79460b933a21b5ce18f5fd287651607681668bc73c215a9ab","c8c3bc1cf6026ad1291fc4e16875098b9dd051f9c11ae06bbccd55e8e5d436fd","886fb29537b13c577be11ac30c79d38c645260347f15deb92b5437cd974a434c","dd0de2d2c40ea3698037db273b569472ccbbd44b34aed0cef8a06952192ba7fa","ca1495b5164d2fc89542a29fa6838876c24cda589de48c26aee32284ab1a4ccb","4ae080e8d9ae2d39e5aca702182ba9ccaf2f80ce1793104084ac1ba2519b895b","0706d0cc6f3c6280b8c069d532b19eaee9a888de7886814823899197f22998d0","2e4cf85ae80c6669f9a789dffb0f7ecc55747c9dabdb43007d5d76b4b87d8ee3","05f7fdc21577226560aec69adfd18aebb700764c19831bd98e376b1513fed1c0","0312e6a7baa729f03f8829830ef313f33a059c3a18dd7f999eedf7bc8324d942","4e6759a834a759099219a887f137231ab8c42a5151864b638ca1262c9b93796c","0ae9ef2aa36812f9214947b2cd556dcaa7c4dcd4ccffc57010be1a66662dae67","a9c644c73bb60c4ab0ecce0a9c1f35785e6c3d9f5e06e03866b5e8bf521f6a85","2f37eb16f2c33a4757a05eb893cc725ab9461a78649801e64145100248b2d04a","e210b79bef1ecd1a1c133fba3835f9f4c4c04bfcf2245fa63de4b993ef620941","6e45f45c6b53193003d13114b10b522525b89d8cd1b6b28f8039952acd3b47d5","34e324900ae13db9f8e2f012c4dca329056881bc02e234decccc18d579fa0b65","b96cc7fe4039b41ba6bbb9927ab56381d34ee127f896f79e16213a45ceffb656","4aad48a4381c9658e6a66d03a703d377ff8b1b3aae7db65a68b394818e8c8dd8","307741545a33847665dbf8130e25c2eac8759787c1d68f209fb208b9f60eefcb","4af8ab48cde79e3103beb4a0b4de30a29f2ee5342ceb8470a20a8d512dc18144","02a39882b46c16e90cf54d99fdd2b2841b602373536fc7681c14e7d78d8c1762","380ba1268958e259fc0259333840f90f0f840f56acbfadf508f7ae1ff41d7997"],"root":[[64,177]],"options":{"declaration":true,"esModuleInterop":true,"jsx":4,"module":99,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[145,1],[149,2],[155,3],[147,1],[158,4],[150,5],[160,6],[163,7],[162,8],[148,9],[156,10],[151,11],[159,1],[144,1],[146,1],[76,12],[134,13],[79,14],[119,15],[120,16],[121,17],[83,16],[81,18],[110,19],[116,20],[175,21],[89,22],[85,23],[125,24],[71,25],[165,26],[70,27],[66,13],[133,28],[135,29],[139,30],[137,31],[157,32],[129,33],[136,34],[114,35],[77,36],[130,37],[69,38],[104,39],[91,40],[68,13],[86,41],[161,42],[87,43],[90,44],[106,1],[109,45],[113,46],[111,47],[118,48],[124,49],[123,50],[117,51],[112,52],[101,53],[142,54],[105,55],[143,50],[173,56],[174,57],[172,36],[169,58],[95,59],[170,60],[141,61],[171,62],[128,63],[140,64],[132,65],[154,66],[99,67],[100,68],[96,50],[97,50],[98,69],[164,70],[167,71],[168,72],[166,1],[92,50],[102,41],[94,50]],"semanticDiagnosticsPerFile":[[65,[{"start":187,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":215,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1269,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":5410,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":5999,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[66,[{"start":1390,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1418,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1450,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[67,[{"start":1541,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307},{"start":1571,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1607,"length":5,"messageText":"Cannot find module 'url' or its corresponding type declarations.","category":1,"code":2307}]],[68,[{"start":1512,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1540,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1572,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[69,[{"start":1620,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1648,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1680,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[70,[{"start":1455,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1483,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1515,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[73,[{"start":22,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[77,[{"start":22,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":50,"length":4,"messageText":"Cannot find module 'os' or its corresponding type declarations.","category":1,"code":2307},{"start":76,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":2108,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":4976,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":5632,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":5880,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":8270,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":8496,"length":6,"code":2322,"category":1,"messageText":{"messageText":"Type 'string | null' is not assignable to type 'string'.","category":1,"code":2322,"next":[{"messageText":"Type 'null' is not assignable to type 'string'.","category":1,"code":2322}]}},{"start":9001,"length":6,"code":2322,"category":1,"messageText":{"messageText":"Type 'string | null' is not assignable to type 'string'.","category":1,"code":2322,"next":[{"messageText":"Type 'null' is not assignable to type 'string'.","category":1,"code":2322}]}},{"start":9544,"length":6,"code":2322,"category":1,"messageText":{"messageText":"Type 'string | null' is not assignable to type 'string'.","category":1,"code":2322,"next":[{"messageText":"Type 'null' is not assignable to type 'string'.","category":1,"code":2322}]}},{"start":9826,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[78,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[81,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":8907,"length":4,"messageText":"Parameter 'line' implicitly has an 'any' type.","category":1,"code":7006},{"start":8954,"length":4,"messageText":"Parameter 'line' implicitly has an 'any' type.","category":1,"code":7006},{"start":9120,"length":5,"messageText":"Parameter 'entry' implicitly has an 'any' type.","category":1,"code":7006}]],[82,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[85,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[86,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1097,"length":3,"messageText":"Parameter 'err' implicitly has an 'any' type.","category":1,"code":7006}]],[87,[{"start":21,"length":16,"messageText":"Cannot find module 'better-sqlite3' or its corresponding type declarations.","category":1,"code":2307},{"start":54,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":77,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":104,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307},{"start":50487,"length":5,"messageText":"Parameter 'entry' implicitly has an 'any' type.","category":1,"code":7006},{"start":58089,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":59004,"length":3,"messageText":"Parameter 'sum' implicitly has an 'any' type.","category":1,"code":7006},{"start":59009,"length":4,"messageText":"Parameter 'file' implicitly has an 'any' type.","category":1,"code":7006}]],[89,[{"start":24,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307},{"start":54,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":82,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[91,[{"start":85,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":113,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":3232,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006}]],[93,[{"start":146,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":174,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":3525,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":3595,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":3752,"length":1,"messageText":"Parameter 'a' implicitly has an 'any' type.","category":1,"code":7006},{"start":3755,"length":1,"messageText":"Parameter 'b' implicitly has an 'any' type.","category":1,"code":7006},{"start":4560,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":4628,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":4760,"length":1,"messageText":"Parameter 'a' implicitly has an 'any' type.","category":1,"code":7006},{"start":4763,"length":1,"messageText":"Parameter 'b' implicitly has an 'any' type.","category":1,"code":7006},{"start":4830,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":6033,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":6205,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":30389,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":32682,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[98,[{"start":21,"length":16,"messageText":"Cannot find module 'better-sqlite3' or its corresponding type declarations.","category":1,"code":2307},{"start":59,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":87,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[99,[{"start":1249,"length":6,"messageText":"Cannot find namespace 'NodeJS'.","category":1,"code":2503}]],[101,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[102,[{"start":22,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":50,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307}]],[104,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":2568,"length":6,"messageText":"Cannot find namespace 'NodeJS'.","category":1,"code":2503}]],[106,[{"start":649,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":677,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[110,[{"start":219,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":247,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":12311,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":14512,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[113,[{"start":791,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":819,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[114,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[115,[{"start":27,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[116,[{"start":258,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[117,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[118,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":82,"length":10,"messageText":"Cannot find module 'readline' or its corresponding type declarations.","category":1,"code":2307}]],[119,[{"start":21,"length":16,"messageText":"Cannot find module 'better-sqlite3' or its corresponding type declarations.","category":1,"code":2307},{"start":54,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":77,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[120,[{"start":27,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[124,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[125,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":86,"length":5,"messageText":"Cannot find module 'url' or its corresponding type declarations.","category":1,"code":2307}]],[128,[{"start":903,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":931,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[130,[{"start":796,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":824,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[134,[{"start":828,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":856,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[136,[{"start":1362,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307},{"start":1392,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1420,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1449,"length":5,"messageText":"Cannot find module 'url' or its corresponding type declarations.","category":1,"code":2307}]],[138,[{"start":1312,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1340,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":7000,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":7047,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":7094,"length":1,"messageText":"Parameter 'a' implicitly has an 'any' type.","category":1,"code":7006},{"start":7097,"length":1,"messageText":"Parameter 'b' implicitly has an 'any' type.","category":1,"code":7006}]],[139,[{"start":1195,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1223,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1255,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[140,[{"start":1258,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1286,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1321,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[141,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":83,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307},{"start":1192,"length":6,"messageText":"Cannot find namespace 'NodeJS'.","category":1,"code":2503},{"start":1237,"length":6,"messageText":"Cannot find namespace 'NodeJS'.","category":1,"code":2503}]],[142,[{"start":133,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307}]],[143,[{"start":152,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":180,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":6779,"length":4,"messageText":"Parameter 'line' implicitly has an 'any' type.","category":1,"code":7006},{"start":6837,"length":4,"messageText":"Parameter 'line' implicitly has an 'any' type.","category":1,"code":7006},{"start":6979,"length":4,"messageText":"Parameter 'line' implicitly has an 'any' type.","category":1,"code":7006},{"start":7120,"length":4,"messageText":"Parameter 'line' implicitly has an 'any' type.","category":1,"code":7006}]],[144,[{"start":299,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":1285,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[145,[{"start":25,"length":15,"messageText":"Cannot find module 'child_process' or its corresponding type declarations.","category":1,"code":2307},{"start":62,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":90,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1081,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":1109,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":1133,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":1645,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":2174,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[146,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":320,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[147,[{"start":567,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[148,[{"start":3597,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[149,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":458,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[150,[{"start":173,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":201,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":236,"length":13,"messageText":"Cannot find module 'node:crypto' or its corresponding type declarations.","category":1,"code":2307},{"start":4506,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":5627,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":5695,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":6058,"length":1,"messageText":"Parameter 'a' implicitly has an 'any' type.","category":1,"code":7006},{"start":6061,"length":1,"messageText":"Parameter 'b' implicitly has an 'any' type.","category":1,"code":7006},{"start":6239,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":6242,"length":1,"messageText":"Parameter 'i' implicitly has an 'any' type.","category":1,"code":7006},{"start":10382,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":10450,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":10598,"length":1,"messageText":"Parameter 'a' implicitly has an 'any' type.","category":1,"code":7006},{"start":10601,"length":1,"messageText":"Parameter 'b' implicitly has an 'any' type.","category":1,"code":7006}]],[151,[{"start":577,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[154,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":16225,"length":4,"messageText":"Parameter 'line' implicitly has an 'any' type.","category":1,"code":7006},{"start":16423,"length":5,"messageText":"Parameter 'entry' implicitly has an 'any' type.","category":1,"code":7006}]],[155,[{"start":6593,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[156,[{"start":291,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[157,[{"start":1608,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1636,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1668,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[158,[{"start":497,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[159,[{"start":420,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[160,[{"start":1097,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":3669,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[161,[{"start":1423,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1451,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1483,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307},{"start":1523,"length":5,"messageText":"Cannot find module 'url' or its corresponding type declarations.","category":1,"code":2307},{"start":11046,"length":15,"messageText":"Cannot find module 'child_process' or its corresponding type declarations.","category":1,"code":2307},{"start":11420,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":11890,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":11969,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":12304,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":12497,"length":4,"messageText":"Parameter 'code' implicitly has an 'any' type.","category":1,"code":7006},{"start":12588,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":14217,"length":3,"messageText":"Parameter 'err' implicitly has an 'any' type.","category":1,"code":7006}]],[162,[{"start":1012,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":1040,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":1082,"length":15,"messageText":"Cannot find module 'child_process' or its corresponding type declarations.","category":1,"code":2307},{"start":1129,"length":5,"messageText":"Cannot find module 'url' or its corresponding type declarations.","category":1,"code":2307},{"start":4646,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":9646,"length":1,"messageText":"Parameter 'f' implicitly has an 'any' type.","category":1,"code":7006},{"start":14569,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":15015,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":15110,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":15506,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":15739,"length":4,"messageText":"Parameter 'code' implicitly has an 'any' type.","category":1,"code":7006},{"start":15854,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":17440,"length":3,"messageText":"Parameter 'err' implicitly has an 'any' type.","category":1,"code":7006},{"start":23723,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'string | undefined' is not assignable to parameter of type 'string'.","category":1,"code":2345,"next":[{"messageText":"Type 'undefined' is not assignable to type 'string'.","category":1,"code":2322}]}},{"start":31354,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[163,[{"start":3831,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[165,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[166,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[168,[{"start":102,"length":19,"messageText":"Cannot find module '@sinclair/typebox' or its corresponding type declarations.","category":1,"code":2307},{"start":150,"length":13,"messageText":"Cannot find module 'node:crypto' or its corresponding type declarations.","category":1,"code":2307},{"start":185,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":213,"length":11,"messageText":"Cannot find module 'node:path' or its corresponding type declarations.","category":1,"code":2307}]],[171,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":21771,"length":4,"messageText":"Parameter 'line' implicitly has an 'any' type.","category":1,"code":7006},{"start":21937,"length":5,"messageText":"Parameter 'entry' implicitly has an 'any' type.","category":1,"code":7006},{"start":26393,"length":4,"messageText":"Parameter 'name' implicitly has an 'any' type.","category":1,"code":7006},{"start":26433,"length":4,"messageText":"Parameter 'name' implicitly has an 'any' type.","category":1,"code":7006}]],[172,[{"start":21,"length":16,"messageText":"Cannot find module 'better-sqlite3' or its corresponding type declarations.","category":1,"code":2307},{"start":54,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":77,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":100,"length":4,"messageText":"Cannot find module 'os' or its corresponding type declarations.","category":1,"code":2307}]],[173,[{"start":15,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":38,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307},{"start":99,"length":11,"messageText":"Cannot find module 'node:http' or its corresponding type declarations.","category":1,"code":2307},{"start":1726,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":1792,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":1825,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":1903,"length":6,"messageText":"Cannot find name 'Buffer'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580},{"start":21307,"length":7,"messageText":"Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.","category":1,"code":2580}]],[174,[{"start":644,"length":8,"messageText":"Cannot find module 'crypto' or its corresponding type declarations.","category":1,"code":2307}]],[175,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]],[176,[{"start":172,"length":12,"messageText":"Cannot find module 'micromatch' or its corresponding type declarations.","category":1,"code":2307}]],[177,[{"start":20,"length":4,"messageText":"Cannot find module 'fs' or its corresponding type declarations.","category":1,"code":2307},{"start":48,"length":6,"messageText":"Cannot find module 'path' or its corresponding type declarations.","category":1,"code":2307}]]],"affectedFilesPendingEmit":[145,149,155,147,158,150,160,163,162,148,156,151,159,144,146,74,75,76,127,108,134,79,78,119,120,121,83,82,81,110,116,175,89,88,67,93,85,125,71,165,70,66,133,135,131,139,137,157,138,129,136,114,77,73,130,103,69,104,91,68,86,122,161,87,90,107,106,109,113,111,118,124,123,117,112,101,142,105,143,173,72,174,172,169,95,170,141,171,128,140,132,152,154,99,100,96,97,98,164,167,168,166,92,80,84,153,65,176,115,102,126,177,94],"version":"5.9.3"}
|