@decibelsystems/tools 2.1.4 → 3.0.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/CHANGELOG.md +160 -0
- package/README.md +1 -1
- package/dist/agentPresence.d.ts +80 -0
- package/dist/agentPresence.d.ts.map +1 -1
- package/dist/agentPresence.js +177 -0
- package/dist/agentPresence.js.map +1 -1
- package/dist/agentic/index.d.ts +18 -8
- package/dist/agentic/index.d.ts.map +1 -1
- package/dist/agentic/index.js +18 -144
- package/dist/agentic/index.js.map +1 -1
- package/dist/agentic/types.d.ts +106 -0
- package/dist/agentic/types.d.ts.map +1 -1
- package/dist/agentic/types.js +77 -1
- package/dist/agentic/types.js.map +1 -1
- package/dist/architectAdrs.d.ts +14 -2
- package/dist/architectAdrs.d.ts.map +1 -1
- package/dist/architectAdrs.js +9 -3
- package/dist/architectAdrs.js.map +1 -1
- package/dist/client/transports.d.ts.map +1 -1
- package/dist/client/transports.js +13 -3
- package/dist/client/transports.js.map +1 -1
- package/dist/daemon.d.ts +19 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +181 -38
- package/dist/daemon.js.map +1 -1
- package/dist/daemonConfig.d.ts +30 -0
- package/dist/daemonConfig.d.ts.map +1 -1
- package/dist/daemonConfig.js +56 -9
- package/dist/daemonConfig.js.map +1 -1
- package/dist/decibelPaths.d.ts.map +1 -1
- package/dist/decibelPaths.js +39 -6
- package/dist/decibelPaths.js.map +1 -1
- package/dist/domain/issue.d.ts +77 -0
- package/dist/domain/issue.d.ts.map +1 -0
- package/dist/domain/issue.js +134 -0
- package/dist/domain/issue.js.map +1 -0
- package/dist/domain/issueCodec.d.ts +39 -0
- package/dist/domain/issueCodec.d.ts.map +1 -0
- package/dist/domain/issueCodec.js +298 -0
- package/dist/domain/issueCodec.js.map +1 -0
- package/dist/domain/issueRepository.d.ts +91 -0
- package/dist/domain/issueRepository.d.ts.map +1 -0
- package/dist/domain/issueRepository.js +257 -0
- package/dist/domain/issueRepository.js.map +1 -0
- package/dist/facades/definitions.d.ts +0 -1
- package/dist/facades/definitions.d.ts.map +1 -1
- package/dist/facades/definitions.js +94 -98
- package/dist/facades/definitions.js.map +1 -1
- package/dist/facades/index.d.ts +2 -1
- package/dist/facades/index.d.ts.map +1 -1
- package/dist/facades/index.js +1 -1
- package/dist/facades/index.js.map +1 -1
- package/dist/facades/types.d.ts +17 -0
- package/dist/facades/types.d.ts.map +1 -1
- package/dist/httpArgs.d.ts +11 -0
- package/dist/httpArgs.d.ts.map +1 -0
- package/dist/httpArgs.js +39 -0
- package/dist/httpArgs.js.map +1 -0
- package/dist/httpServer.d.ts +1 -12
- package/dist/httpServer.d.ts.map +1 -1
- package/dist/httpServer.js +173 -98
- package/dist/httpServer.js.map +1 -1
- package/dist/kernel.d.ts +55 -1
- package/dist/kernel.d.ts.map +1 -1
- package/dist/kernel.js +366 -31
- package/dist/kernel.js.map +1 -1
- package/dist/lib/agent-services/assumptions.d.ts.map +1 -1
- package/dist/lib/agent-services/assumptions.js +8 -2
- package/dist/lib/agent-services/assumptions.js.map +1 -1
- package/dist/lib/atomicWrite.d.ts +26 -0
- package/dist/lib/atomicWrite.d.ts.map +1 -0
- package/dist/lib/atomicWrite.js +73 -0
- package/dist/lib/atomicWrite.js.map +1 -0
- package/dist/lib/envelope.d.ts +31 -0
- package/dist/lib/envelope.d.ts.map +1 -0
- package/dist/lib/envelope.js +80 -0
- package/dist/lib/envelope.js.map +1 -0
- package/dist/lib/fileLock.d.ts +38 -0
- package/dist/lib/fileLock.d.ts.map +1 -0
- package/dist/lib/fileLock.js +124 -0
- package/dist/lib/fileLock.js.map +1 -0
- package/dist/lib/recordIdAllocator.d.ts +86 -0
- package/dist/lib/recordIdAllocator.d.ts.map +1 -0
- package/dist/lib/recordIdAllocator.js +161 -0
- package/dist/lib/recordIdAllocator.js.map +1 -0
- package/dist/license.js +3 -3
- package/dist/license.js.map +1 -1
- package/dist/projectRegistry.d.ts +65 -3
- package/dist/projectRegistry.d.ts.map +1 -1
- package/dist/projectRegistry.js +233 -33
- package/dist/projectRegistry.js.map +1 -1
- package/dist/runtime/circuitBreaker.d.ts +95 -0
- package/dist/runtime/circuitBreaker.d.ts.map +1 -0
- package/dist/runtime/circuitBreaker.js +178 -0
- package/dist/runtime/circuitBreaker.js.map +1 -0
- package/dist/runtime/ensureRuntime.d.ts +103 -0
- package/dist/runtime/ensureRuntime.d.ts.map +1 -0
- package/dist/runtime/ensureRuntime.js +281 -0
- package/dist/runtime/ensureRuntime.js.map +1 -0
- package/dist/runtime/extensions.d.ts +57 -0
- package/dist/runtime/extensions.d.ts.map +1 -0
- package/dist/runtime/extensions.js +216 -0
- package/dist/runtime/extensions.js.map +1 -0
- package/dist/runtime/localHttp.d.ts +24 -0
- package/dist/runtime/localHttp.d.ts.map +1 -0
- package/dist/runtime/localHttp.js +84 -0
- package/dist/runtime/localHttp.js.map +1 -0
- package/dist/runtime/projectResolution.d.ts +29 -0
- package/dist/runtime/projectResolution.d.ts.map +1 -0
- package/dist/runtime/projectResolution.js +67 -0
- package/dist/runtime/projectResolution.js.map +1 -0
- package/dist/runtime/protocol.d.ts +62 -0
- package/dist/runtime/protocol.d.ts.map +1 -0
- package/dist/runtime/protocol.js +74 -0
- package/dist/runtime/protocol.js.map +1 -0
- package/dist/sentinelIssues.d.ts +26 -2
- package/dist/sentinelIssues.d.ts.map +1 -1
- package/dist/sentinelIssues.js +163 -76
- package/dist/sentinelIssues.js.map +1 -1
- package/dist/server.js +65 -12
- package/dist/server.js.map +1 -1
- package/dist/setup.d.ts +83 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +445 -0
- package/dist/setup.js.map +1 -0
- package/dist/store/markdown.d.ts +14 -1
- package/dist/store/markdown.d.ts.map +1 -1
- package/dist/store/markdown.js +36 -3
- package/dist/store/markdown.js.map +1 -1
- package/dist/tools/agentic/index.d.ts.map +1 -1
- package/dist/tools/agentic/index.js +28 -2
- package/dist/tools/agentic/index.js.map +1 -1
- package/dist/tools/architect/index.d.ts.map +1 -1
- package/dist/tools/architect/index.js +7 -2
- package/dist/tools/architect/index.js.map +1 -1
- package/dist/tools/conductor/index.d.ts +9 -0
- package/dist/tools/conductor/index.d.ts.map +1 -0
- package/dist/tools/conductor/index.js +242 -0
- package/dist/tools/conductor/index.js.map +1 -0
- package/dist/tools/context.d.ts +10 -5
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +45 -18
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/coordinator/coordinator.d.ts.map +1 -1
- package/dist/tools/coordinator/coordinator.js +48 -19
- package/dist/tools/coordinator/coordinator.js.map +1 -1
- package/dist/tools/crit.d.ts +2 -1
- package/dist/tools/crit.d.ts.map +1 -1
- package/dist/tools/crit.js +19 -4
- package/dist/tools/crit.js.map +1 -1
- package/dist/tools/designer/index.d.ts.map +1 -1
- package/dist/tools/designer/index.js +4 -3
- package/dist/tools/designer/index.js.map +1 -1
- package/dist/tools/designer/lateral-tools.d.ts.map +1 -1
- package/dist/tools/designer/lateral-tools.js +4 -2
- package/dist/tools/designer/lateral-tools.js.map +1 -1
- package/dist/tools/designer.d.ts +2 -1
- package/dist/tools/designer.d.ts.map +1 -1
- package/dist/tools/designer.js +24 -12
- package/dist/tools/designer.js.map +1 -1
- package/dist/tools/dojo.d.ts +3 -2
- package/dist/tools/dojo.d.ts.map +1 -1
- package/dist/tools/dojo.js +64 -22
- package/dist/tools/dojo.js.map +1 -1
- package/dist/tools/dojoPolicy.js +1 -1
- package/dist/tools/dojoPolicy.js.map +1 -1
- package/dist/tools/friction.d.ts.map +1 -1
- package/dist/tools/friction.js +16 -6
- package/dist/tools/friction.js.map +1 -1
- package/dist/tools/guardian.d.ts +29 -7
- package/dist/tools/guardian.d.ts.map +1 -1
- package/dist/tools/guardian.js +90 -75
- package/dist/tools/guardian.js.map +1 -1
- package/dist/tools/hygiene/oracle-hygiene.d.ts.map +1 -1
- package/dist/tools/hygiene/oracle-hygiene.js +8 -2
- package/dist/tools/hygiene/oracle-hygiene.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +29 -18
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/learnings.d.ts +2 -1
- package/dist/tools/learnings.d.ts.map +1 -1
- package/dist/tools/learnings.js +31 -15
- package/dist/tools/learnings.js.map +1 -1
- package/dist/tools/oracle.d.ts.map +1 -1
- package/dist/tools/oracle.js +19 -6
- package/dist/tools/oracle.js.map +1 -1
- package/dist/tools/policy.d.ts +2 -1
- package/dist/tools/policy.d.ts.map +1 -1
- package/dist/tools/policy.js +28 -9
- package/dist/tools/policy.js.map +1 -1
- package/dist/tools/postoffice/index.d.ts +10 -0
- package/dist/tools/postoffice/index.d.ts.map +1 -0
- package/dist/tools/postoffice/index.js +218 -0
- package/dist/tools/postoffice/index.js.map +1 -0
- package/dist/tools/postoffice.d.ts +78 -0
- package/dist/tools/postoffice.d.ts.map +1 -0
- package/dist/tools/postoffice.js +199 -0
- package/dist/tools/postoffice.js.map +1 -0
- package/dist/tools/provenance.d.ts +7 -0
- package/dist/tools/provenance.d.ts.map +1 -1
- package/dist/tools/provenance.js +42 -16
- package/dist/tools/provenance.js.map +1 -1
- package/dist/tools/registry/index.d.ts.map +1 -1
- package/dist/tools/registry/index.js +41 -12
- package/dist/tools/registry/index.js.map +1 -1
- package/dist/tools/sentinel/index.d.ts +1 -0
- package/dist/tools/sentinel/index.d.ts.map +1 -1
- package/dist/tools/sentinel/index.js +88 -4
- package/dist/tools/sentinel/index.js.map +1 -1
- package/dist/tools/sentinel.d.ts +117 -1
- package/dist/tools/sentinel.d.ts.map +1 -1
- package/dist/tools/sentinel.js +761 -339
- package/dist/tools/sentinel.js.map +1 -1
- package/dist/tools/shared/index.d.ts +2 -1
- package/dist/tools/shared/index.d.ts.map +1 -1
- package/dist/tools/shared/index.js +2 -1
- package/dist/tools/shared/index.js.map +1 -1
- package/dist/tools/shared/response.d.ts +24 -0
- package/dist/tools/shared/response.d.ts.map +1 -1
- package/dist/tools/shared/response.js +61 -7
- package/dist/tools/shared/response.js.map +1 -1
- package/dist/tools/shared/storeRead.d.ts +153 -0
- package/dist/tools/shared/storeRead.d.ts.map +1 -0
- package/dist/tools/shared/storeRead.js +242 -0
- package/dist/tools/shared/storeRead.js.map +1 -0
- package/dist/tools/testSpec.d.ts +3 -2
- package/dist/tools/testSpec.d.ts.map +1 -1
- package/dist/tools/testSpec.js +51 -14
- package/dist/tools/testSpec.js.map +1 -1
- package/dist/tools/vector.d.ts +33 -1
- package/dist/tools/vector.d.ts.map +1 -1
- package/dist/tools/vector.js +31 -5
- package/dist/tools/vector.js.map +1 -1
- package/dist/tools/zoom/index.d.ts +15 -0
- package/dist/tools/zoom/index.d.ts.map +1 -0
- package/dist/tools/zoom/index.js +174 -0
- package/dist/tools/zoom/index.js.map +1 -0
- package/dist/tools/zoom.d.ts +234 -0
- package/dist/tools/zoom.d.ts.map +1 -0
- package/dist/tools/zoom.js +627 -0
- package/dist/tools/zoom.js.map +1 -0
- package/dist/transports/bridge.d.ts +1 -1
- package/dist/transports/bridge.d.ts.map +1 -1
- package/dist/transports/bridge.js +2 -0
- package/dist/transports/bridge.js.map +1 -1
- package/dist/transports/http.d.ts +1 -1
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +3 -1
- package/dist/transports/http.js.map +1 -1
- package/dist/transports/index.d.ts +1 -0
- package/dist/transports/index.d.ts.map +1 -1
- package/dist/transports/index.js +1 -0
- package/dist/transports/index.js.map +1 -1
- package/dist/transports/mcp.d.ts +1 -1
- package/dist/transports/mcp.d.ts.map +1 -1
- package/dist/transports/mcp.js +7 -3
- package/dist/transports/mcp.js.map +1 -1
- package/dist/transports/stdio.d.ts +1 -1
- package/dist/transports/stdio.d.ts.map +1 -1
- package/dist/transports/stdio.js +2 -0
- package/dist/transports/stdio.js.map +1 -1
- package/dist/transports/thinStdio.d.ts +22 -0
- package/dist/transports/thinStdio.d.ts.map +1 -0
- package/dist/transports/thinStdio.js +218 -0
- package/dist/transports/thinStdio.js.map +1 -0
- package/dist/transports/types.d.ts +8 -1
- package/dist/transports/types.d.ts.map +1 -1
- package/dist/types/agent-services.d.ts +7 -0
- package/dist/types/agent-services.d.ts.map +1 -1
- package/package.json +9 -4
- package/templates/com.decibel.daemon.plist +6 -1
- package/dist/tools/deck.d.ts +0 -11
- package/dist/tools/deck.d.ts.map +0 -1
- package/dist/tools/deck.js +0 -1656
- package/dist/tools/deck.js.map +0 -1
- package/dist/tools/mother.d.ts +0 -11
- package/dist/tools/mother.d.ts.map +0 -1
- package/dist/tools/mother.js +0 -503
- package/dist/tools/mother.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -3
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -189
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/senken.d.ts +0 -11
- package/dist/tools/senken.d.ts.map +0 -1
- package/dist/tools/senken.js +0 -482
- package/dist/tools/senken.js.map +0 -1
- package/dist/tools/terminal.d.ts +0 -17
- package/dist/tools/terminal.d.ts.map +0 -1
- package/dist/tools/terminal.js +0 -968
- package/dist/tools/terminal.js.map +0 -1
- package/dist/tools/toolsIndex.d.ts +0 -5
- package/dist/tools/toolsIndex.d.ts.map +0 -1
- package/dist/tools/toolsIndex.js +0 -37
- package/dist/tools/toolsIndex.js.map +0 -1
package/dist/projectRegistry.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
// ============================================================================
|
|
10
10
|
import fs from 'fs';
|
|
11
11
|
import path from 'path';
|
|
12
|
+
import { recordResolution } from './runtime/projectResolution.js';
|
|
12
13
|
import os from 'os';
|
|
13
14
|
import { fileURLToPath } from 'url';
|
|
14
15
|
import { dirname } from 'path';
|
|
@@ -17,6 +18,107 @@ import { log } from './config.js';
|
|
|
17
18
|
const __filename = fileURLToPath(import.meta.url);
|
|
18
19
|
const __dirname = dirname(__filename);
|
|
19
20
|
// ============================================================================
|
|
21
|
+
// Device Identity
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// A stable per-machine ID so one registry file can hold paths for several
|
|
24
|
+
// devices (desktop vs laptop) without them clobbering each other.
|
|
25
|
+
// Precedence: DECIBEL_DEVICE_ID env → ~/.decibel/device.json → generated from
|
|
26
|
+
// hostname and persisted. Hostnames drift (.local suffixes, network renames),
|
|
27
|
+
// so the generated ID is written once and read thereafter.
|
|
28
|
+
let cachedDeviceId;
|
|
29
|
+
function sanitizeDeviceId(raw) {
|
|
30
|
+
const id = raw
|
|
31
|
+
.trim()
|
|
32
|
+
.toLowerCase()
|
|
33
|
+
.replace(/\.local$/, '')
|
|
34
|
+
.replace(/[^a-z0-9-]+/g, '-')
|
|
35
|
+
.replace(/^-+|-+$/g, '');
|
|
36
|
+
return id || 'unknown-device';
|
|
37
|
+
}
|
|
38
|
+
export function getDeviceId() {
|
|
39
|
+
if (process.env.DECIBEL_DEVICE_ID) {
|
|
40
|
+
return sanitizeDeviceId(process.env.DECIBEL_DEVICE_ID);
|
|
41
|
+
}
|
|
42
|
+
if (cachedDeviceId)
|
|
43
|
+
return cachedDeviceId;
|
|
44
|
+
const deviceFile = path.join(os.homedir(), '.decibel', 'device.json');
|
|
45
|
+
try {
|
|
46
|
+
const data = JSON.parse(fs.readFileSync(deviceFile, 'utf-8'));
|
|
47
|
+
if (typeof data.id === 'string' && data.id) {
|
|
48
|
+
cachedDeviceId = sanitizeDeviceId(data.id);
|
|
49
|
+
return cachedDeviceId;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// No device file yet — generate one below.
|
|
54
|
+
}
|
|
55
|
+
const id = sanitizeDeviceId(os.hostname());
|
|
56
|
+
try {
|
|
57
|
+
fs.mkdirSync(path.dirname(deviceFile), { recursive: true });
|
|
58
|
+
fs.writeFileSync(deviceFile, JSON.stringify({ id, hostname: os.hostname(), created_at: new Date().toISOString() }, null, 2));
|
|
59
|
+
log(`ProjectRegistry: Generated device ID "${id}" → ${deviceFile}`);
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
log(`ProjectRegistry: Could not persist device ID (${err}) — using "${id}" for this process`);
|
|
63
|
+
}
|
|
64
|
+
cachedDeviceId = id;
|
|
65
|
+
return id;
|
|
66
|
+
}
|
|
67
|
+
// ============================================================================
|
|
68
|
+
// Effective Path Resolution (device-aware)
|
|
69
|
+
// ============================================================================
|
|
70
|
+
/**
|
|
71
|
+
* All paths an entry might live at, most-specific first:
|
|
72
|
+
* this device's override → canonical path → other devices' copies.
|
|
73
|
+
*/
|
|
74
|
+
export function listCandidatePaths(entry) {
|
|
75
|
+
const deviceId = getDeviceId();
|
|
76
|
+
const candidates = [];
|
|
77
|
+
const devicePath = entry.devicePaths?.[deviceId];
|
|
78
|
+
if (devicePath)
|
|
79
|
+
candidates.push(devicePath);
|
|
80
|
+
candidates.push(entry.path);
|
|
81
|
+
for (const [device, p] of Object.entries(entry.devicePaths ?? {})) {
|
|
82
|
+
if (device !== deviceId && !candidates.includes(p))
|
|
83
|
+
candidates.push(p);
|
|
84
|
+
}
|
|
85
|
+
return candidates;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Pick the path this entry actually lives at ON THIS DEVICE: the first
|
|
89
|
+
* candidate whose .decibel/ folder exists. External drives resolve via the
|
|
90
|
+
* canonical path whenever mounted; machine-local checkouts via devicePaths.
|
|
91
|
+
* If nothing exists (drive unplugged, no local copy), returns the
|
|
92
|
+
* most-specific candidate with available=false so error messages can point
|
|
93
|
+
* at the right location.
|
|
94
|
+
*/
|
|
95
|
+
export function getEffectivePath(entry) {
|
|
96
|
+
const deviceId = getDeviceId();
|
|
97
|
+
const devicePath = entry.devicePaths?.[deviceId];
|
|
98
|
+
const sourceOf = (p) => p === devicePath ? 'device' : p === entry.path ? 'canonical' : 'other_device';
|
|
99
|
+
const candidates = listCandidatePaths(entry);
|
|
100
|
+
for (const candidate of candidates) {
|
|
101
|
+
if (hasDecibelFolder(candidate)) {
|
|
102
|
+
return { path: candidate, source: sourceOf(candidate), available: true };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const preferred = candidates[0];
|
|
106
|
+
return { path: preferred, source: sourceOf(preferred), available: false };
|
|
107
|
+
}
|
|
108
|
+
/** Copy of the entry with `path` replaced by the device-effective path. */
|
|
109
|
+
function withEffectivePath(entry) {
|
|
110
|
+
const eff = getEffectivePath(entry);
|
|
111
|
+
return { ...entry, path: eff.path };
|
|
112
|
+
}
|
|
113
|
+
/** Error text for a registered-but-absent project, with device context. */
|
|
114
|
+
function unavailableMessage(entry, requestedAs) {
|
|
115
|
+
const candidates = listCandidatePaths(entry);
|
|
116
|
+
return (`Project "${requestedAs}" is registered but not available on this device (${getDeviceId()}). ` +
|
|
117
|
+
`Tried: ${candidates.join(', ')}. ` +
|
|
118
|
+
`If it lives on an external drive, mount it. If this machine has its own copy, ` +
|
|
119
|
+
`link it with registry_add (same id, this machine's path) or registry_scan with apply=true.`);
|
|
120
|
+
}
|
|
121
|
+
// ============================================================================
|
|
20
122
|
// Registry Loading
|
|
21
123
|
// ============================================================================
|
|
22
124
|
/**
|
|
@@ -161,46 +263,52 @@ export function resolveProject(projectId) {
|
|
|
161
263
|
// Strategy 1: Exact ID match in registry
|
|
162
264
|
const exactMatch = registry.projects.find((p) => p.id === projectId);
|
|
163
265
|
if (exactMatch) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
266
|
+
const eff = getEffectivePath(exactMatch);
|
|
267
|
+
if (!eff.available) {
|
|
268
|
+
throw new Error(unavailableMessage(exactMatch, projectId));
|
|
167
269
|
}
|
|
168
|
-
log(`ProjectRegistry: Resolved "${projectId}" via exact ID match`);
|
|
169
|
-
|
|
270
|
+
log(`ProjectRegistry: Resolved "${projectId}" via exact ID match (${eff.source} path)`);
|
|
271
|
+
recordResolution(projectId, exactMatch.id, eff.path, 'exact_id');
|
|
272
|
+
return { ...exactMatch, path: eff.path };
|
|
170
273
|
}
|
|
171
274
|
// Strategy 2: Alias match in registry
|
|
172
275
|
const aliasMatch = registry.projects.find((p) => p.aliases?.includes(projectId));
|
|
173
276
|
if (aliasMatch) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
277
|
+
const eff = getEffectivePath(aliasMatch);
|
|
278
|
+
if (!eff.available) {
|
|
279
|
+
throw new Error(unavailableMessage(aliasMatch, `${projectId}" (alias for "${aliasMatch.id}`));
|
|
177
280
|
}
|
|
178
|
-
log(`ProjectRegistry: Resolved "${projectId}" via alias -> "${aliasMatch.id}"`);
|
|
179
|
-
|
|
281
|
+
log(`ProjectRegistry: Resolved "${projectId}" via alias -> "${aliasMatch.id}" (${eff.source} path)`);
|
|
282
|
+
recordResolution(projectId, aliasMatch.id, eff.path, 'alias');
|
|
283
|
+
return { ...aliasMatch, path: eff.path };
|
|
180
284
|
}
|
|
181
285
|
// Strategy 3: DECIBEL_PROJECT_ROOT env var
|
|
182
286
|
const envRoot = process.env.DECIBEL_PROJECT_ROOT;
|
|
183
287
|
if (envRoot && path.basename(envRoot) === projectId) {
|
|
184
288
|
if (hasDecibelFolder(envRoot)) {
|
|
185
289
|
log(`ProjectRegistry: Resolved "${projectId}" via DECIBEL_PROJECT_ROOT`);
|
|
290
|
+
recordResolution(projectId, projectId, envRoot, 'env_root_exact');
|
|
186
291
|
return { id: projectId, path: envRoot };
|
|
187
292
|
}
|
|
188
293
|
}
|
|
189
294
|
// Strategy 4: Absolute path with .decibel
|
|
190
295
|
if (path.isAbsolute(projectId) && hasDecibelFolder(projectId)) {
|
|
191
296
|
log(`ProjectRegistry: Resolved "${projectId}" as absolute path`);
|
|
297
|
+
recordResolution(projectId, path.basename(projectId), projectId, 'absolute_path');
|
|
192
298
|
return { id: path.basename(projectId), path: projectId };
|
|
193
299
|
}
|
|
194
300
|
// Strategy 5: Discover from cwd (exact basename match)
|
|
195
301
|
const discoveredRoot = findDecibelDir(process.cwd());
|
|
196
302
|
if (discoveredRoot && path.basename(discoveredRoot) === projectId) {
|
|
197
303
|
log(`ProjectRegistry: Resolved "${projectId}" via cwd discovery`);
|
|
304
|
+
recordResolution(projectId, projectId, discoveredRoot, 'cwd_exact');
|
|
198
305
|
return { id: projectId, path: discoveredRoot };
|
|
199
306
|
}
|
|
200
307
|
// Strategy 6: If DECIBEL_PROJECT_ROOT is set and has .decibel, use it as fallback
|
|
201
308
|
// This allows tests and scripts to set a project root and use any projectId as a label
|
|
202
309
|
if (envRoot && hasDecibelFolder(envRoot)) {
|
|
203
310
|
log(`ProjectRegistry: Resolved "${projectId}" via DECIBEL_PROJECT_ROOT fallback (treating as label)`);
|
|
311
|
+
recordResolution(projectId, projectId, envRoot, 'env_root_fallback');
|
|
204
312
|
return { id: projectId, path: envRoot };
|
|
205
313
|
}
|
|
206
314
|
// Strategy 7: If we discovered a project from cwd but ID didn't match, use it anyway
|
|
@@ -208,6 +316,7 @@ export function resolveProject(projectId) {
|
|
|
208
316
|
if (discoveredRoot) {
|
|
209
317
|
const discoveredId = path.basename(discoveredRoot);
|
|
210
318
|
log(`ProjectRegistry: Resolved "${projectId}" via cwd fallback (actual project: "${discoveredId}")`);
|
|
319
|
+
recordResolution(projectId, discoveredId, discoveredRoot, 'cwd_fallback');
|
|
211
320
|
return { id: discoveredId, path: discoveredRoot };
|
|
212
321
|
}
|
|
213
322
|
// Build helpful error message
|
|
@@ -222,16 +331,40 @@ export function resolveProject(projectId) {
|
|
|
222
331
|
throw new Error(errorMsg);
|
|
223
332
|
}
|
|
224
333
|
/**
|
|
225
|
-
* List all registered projects
|
|
334
|
+
* List all registered projects. Entries carry the device-effective `path`
|
|
335
|
+
* (so every consumer reads the right location for this machine), plus
|
|
336
|
+
* display fields: canonicalPath, available, pathSource.
|
|
226
337
|
*/
|
|
227
338
|
export function listProjects() {
|
|
228
339
|
const registry = loadRegistry();
|
|
229
|
-
return registry.projects
|
|
340
|
+
return registry.projects.map((p) => {
|
|
341
|
+
const eff = getEffectivePath(p);
|
|
342
|
+
return {
|
|
343
|
+
...p,
|
|
344
|
+
path: eff.path,
|
|
345
|
+
canonicalPath: p.path,
|
|
346
|
+
available: eff.available,
|
|
347
|
+
pathSource: eff.source,
|
|
348
|
+
};
|
|
349
|
+
});
|
|
230
350
|
}
|
|
231
351
|
/**
|
|
232
|
-
* Register a new project or update an existing one
|
|
352
|
+
* Register a new project or update an existing one — device-aware.
|
|
353
|
+
*
|
|
354
|
+
* New IDs register their path as canonical. For an existing ID with a
|
|
355
|
+
* DIFFERENT path, the new path is recorded as this device's override
|
|
356
|
+
* (devicePaths[deviceId]) so machines don't clobber each other's locations —
|
|
357
|
+
* the scenario that broke the laptop when the registry held desktop-only
|
|
358
|
+
* /Volumes/Ashitaka paths. Pass opts.canonical=true to deliberately rewrite
|
|
359
|
+
* the canonical path (e.g. the project genuinely moved).
|
|
360
|
+
*
|
|
361
|
+
* If this device is ALREADY linked to a valid copy, a differing path is NOT
|
|
362
|
+
* recorded unless opts.repoint=true — otherwise a second copy of the same
|
|
363
|
+
* project (e.g. a backup on an external drive) discovered later in a scan
|
|
364
|
+
* would silently steal the link from the working copy. registry_add passes
|
|
365
|
+
* repoint (explicit user intent); registry_scan apply does not.
|
|
233
366
|
*/
|
|
234
|
-
export function registerProject(entry) {
|
|
367
|
+
export function registerProject(entry, opts) {
|
|
235
368
|
const registry = loadRegistry();
|
|
236
369
|
// Validate path exists and has .decibel
|
|
237
370
|
if (!fs.existsSync(entry.path)) {
|
|
@@ -241,21 +374,62 @@ export function registerProject(entry) {
|
|
|
241
374
|
throw new Error(`No .decibel folder found at ${entry.path}. ` +
|
|
242
375
|
`Initialize with 'decibel init' first.`);
|
|
243
376
|
}
|
|
244
|
-
// Normalize path
|
|
377
|
+
// Normalize path; strip display-only fields so they never persist to disk
|
|
378
|
+
// (callers sometimes round-trip entries that came from listProjects).
|
|
245
379
|
entry.path = path.resolve(entry.path);
|
|
246
|
-
|
|
380
|
+
delete entry.canonicalPath;
|
|
381
|
+
delete entry.available;
|
|
382
|
+
delete entry.pathSource;
|
|
383
|
+
const deviceId = getDeviceId();
|
|
384
|
+
let result;
|
|
247
385
|
const existingIdx = registry.projects.findIndex((p) => p.id === entry.id);
|
|
248
386
|
if (existingIdx >= 0) {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
387
|
+
const existing = registry.projects[existingIdx];
|
|
388
|
+
if (opts?.canonical || existing.path === entry.path) {
|
|
389
|
+
// Same path (metadata refresh) or explicit canonical rewrite.
|
|
390
|
+
const updated = {
|
|
391
|
+
...existing,
|
|
392
|
+
...entry,
|
|
393
|
+
devicePaths: entry.devicePaths ?? existing.devicePaths,
|
|
394
|
+
};
|
|
395
|
+
// A device override equal to the new canonical path is redundant — drop it.
|
|
396
|
+
if (updated.devicePaths?.[deviceId] === updated.path) {
|
|
397
|
+
delete updated.devicePaths[deviceId];
|
|
398
|
+
if (Object.keys(updated.devicePaths).length === 0)
|
|
399
|
+
delete updated.devicePaths;
|
|
400
|
+
}
|
|
401
|
+
registry.projects[existingIdx] = updated;
|
|
402
|
+
log(`ProjectRegistry: Updated project "${entry.id}" (canonical: ${updated.path})`);
|
|
403
|
+
result = { action: 'updated_canonical', id: entry.id, path: updated.path };
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
// Different path for a known project: this machine's copy, not a move.
|
|
407
|
+
const currentLink = existing.devicePaths?.[deviceId];
|
|
408
|
+
if (currentLink && currentLink !== entry.path && hasDecibelFolder(currentLink) && !opts?.repoint) {
|
|
409
|
+
// Device already linked to a valid copy — don't let a second copy
|
|
410
|
+
// (backup drive, stale clone) steal the link.
|
|
411
|
+
log(`ProjectRegistry: Kept existing device link for "${entry.id}" on ${deviceId} ` +
|
|
412
|
+
`(${currentLink}); not repointing to ${entry.path}`);
|
|
413
|
+
return { action: 'kept_existing_device_link', id: entry.id, path: currentLink, skippedPath: entry.path };
|
|
414
|
+
}
|
|
415
|
+
existing.devicePaths = { ...(existing.devicePaths ?? {}), [deviceId]: entry.path };
|
|
416
|
+
if (entry.name && !existing.name)
|
|
417
|
+
existing.name = entry.name;
|
|
418
|
+
if (entry.aliases?.length) {
|
|
419
|
+
existing.aliases = Array.from(new Set([...(existing.aliases ?? []), ...entry.aliases]));
|
|
420
|
+
}
|
|
421
|
+
log(`ProjectRegistry: Linked device path for "${entry.id}" on ${deviceId}: ${entry.path}`);
|
|
422
|
+
result = { action: 'device_linked', id: entry.id, path: entry.path };
|
|
423
|
+
}
|
|
252
424
|
}
|
|
253
425
|
else {
|
|
254
426
|
// Add new
|
|
255
427
|
registry.projects.push(entry);
|
|
256
428
|
log(`ProjectRegistry: Added project "${entry.id}"`);
|
|
429
|
+
result = { action: 'added', id: entry.id, path: entry.path };
|
|
257
430
|
}
|
|
258
431
|
saveRegistry(registry);
|
|
432
|
+
return result;
|
|
259
433
|
}
|
|
260
434
|
/**
|
|
261
435
|
* Remove a project from the registry
|
|
@@ -341,7 +515,7 @@ export function getScanRoots(explicit) {
|
|
|
341
515
|
}
|
|
342
516
|
const registry = loadRegistry();
|
|
343
517
|
const parents = registry.projects
|
|
344
|
-
.
|
|
518
|
+
.flatMap((p) => listCandidatePaths(p))
|
|
345
519
|
.filter((p) => p && fs.existsSync(p))
|
|
346
520
|
.map((p) => path.dirname(path.resolve(p)));
|
|
347
521
|
return Array.from(new Set(parents));
|
|
@@ -355,7 +529,15 @@ export function getScanRoots(explicit) {
|
|
|
355
529
|
export function scanForProjects(explicitRoots) {
|
|
356
530
|
const roots = getScanRoots(explicitRoots);
|
|
357
531
|
const registry = loadRegistry();
|
|
358
|
-
|
|
532
|
+
// Match discovered directories against EVERY path an entry is known by
|
|
533
|
+
// (canonical + all device overrides), so a copy already linked for some
|
|
534
|
+
// device isn't re-reported as unregistered.
|
|
535
|
+
const registeredByPath = new Map();
|
|
536
|
+
for (const p of registry.projects) {
|
|
537
|
+
for (const candidate of listCandidatePaths(p)) {
|
|
538
|
+
registeredByPath.set(path.resolve(candidate), p);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
359
541
|
const found = [];
|
|
360
542
|
const seenPaths = new Set();
|
|
361
543
|
for (const root of roots) {
|
|
@@ -385,14 +567,27 @@ export function scanForProjects(explicitRoots) {
|
|
|
385
567
|
}
|
|
386
568
|
}
|
|
387
569
|
const unregistered = found.filter((f) => !f.registered);
|
|
570
|
+
// Orphans = no candidate path (canonical or any device override) is usable
|
|
571
|
+
// on this device. An unmounted external volume gets its own reason so it
|
|
572
|
+
// reads as "plug the drive in", not "the project is gone".
|
|
388
573
|
const orphans = [];
|
|
389
574
|
for (const project of registry.projects) {
|
|
390
|
-
|
|
391
|
-
|
|
575
|
+
const eff = getEffectivePath(project);
|
|
576
|
+
if (eff.available)
|
|
577
|
+
continue;
|
|
578
|
+
const candidates = listCandidatePaths(project);
|
|
579
|
+
let reason = 'path_missing';
|
|
580
|
+
if (candidates.some((p) => fs.existsSync(p))) {
|
|
581
|
+
reason = 'no_decibel_dir';
|
|
392
582
|
}
|
|
393
|
-
else
|
|
394
|
-
|
|
583
|
+
else {
|
|
584
|
+
const unmounted = candidates
|
|
585
|
+
.map((p) => /^\/Volumes\/[^/]+/.exec(p)?.[0])
|
|
586
|
+
.find((vol) => vol && !fs.existsSync(vol));
|
|
587
|
+
if (unmounted)
|
|
588
|
+
reason = `volume_unmounted:${path.basename(unmounted)}`;
|
|
395
589
|
}
|
|
590
|
+
orphans.push({ id: project.id, path: eff.path, reason });
|
|
396
591
|
}
|
|
397
592
|
return { roots, found, unregistered, orphans };
|
|
398
593
|
}
|
|
@@ -410,34 +605,36 @@ export function getDefaultProject() {
|
|
|
410
605
|
const registry = loadRegistry();
|
|
411
606
|
// Strategy 1: Explicitly marked default
|
|
412
607
|
const explicitDefault = registry.projects.find((p) => p.default === true);
|
|
413
|
-
if (explicitDefault &&
|
|
608
|
+
if (explicitDefault && getEffectivePath(explicitDefault).available) {
|
|
414
609
|
log(`ProjectRegistry: Using explicit default project "${explicitDefault.id}"`);
|
|
415
|
-
return explicitDefault;
|
|
610
|
+
return withEffectivePath(explicitDefault);
|
|
416
611
|
}
|
|
417
612
|
// Strategy 2: DECIBEL_DEFAULT_PROJECT env var
|
|
418
613
|
const envDefault = process.env.DECIBEL_DEFAULT_PROJECT;
|
|
419
614
|
if (envDefault) {
|
|
420
615
|
const envMatch = registry.projects.find((p) => p.id === envDefault || p.aliases?.includes(envDefault));
|
|
421
|
-
if (envMatch &&
|
|
616
|
+
if (envMatch && getEffectivePath(envMatch).available) {
|
|
422
617
|
log(`ProjectRegistry: Using DECIBEL_DEFAULT_PROJECT "${envMatch.id}"`);
|
|
423
|
-
return envMatch;
|
|
618
|
+
return withEffectivePath(envMatch);
|
|
424
619
|
}
|
|
425
620
|
}
|
|
426
621
|
// Strategy 3: If only one project, use it
|
|
427
|
-
const validProjects = registry.projects.filter((p) =>
|
|
622
|
+
const validProjects = registry.projects.filter((p) => getEffectivePath(p).available);
|
|
428
623
|
if (validProjects.length === 1) {
|
|
429
624
|
log(`ProjectRegistry: Using only registered project "${validProjects[0].id}" as default`);
|
|
430
|
-
return validProjects[0];
|
|
625
|
+
return withEffectivePath(validProjects[0]);
|
|
431
626
|
}
|
|
432
627
|
// Strategy 4: Discover from cwd
|
|
433
628
|
const discoveredRoot = findDecibelDir(process.cwd());
|
|
434
629
|
if (discoveredRoot) {
|
|
435
630
|
const discoveredId = path.basename(discoveredRoot);
|
|
436
|
-
// Check if it matches a registered project
|
|
631
|
+
// Check if it matches a registered project. The cwd-discovered root is
|
|
632
|
+
// certainly valid on this device, so prefer it over a registered path
|
|
633
|
+
// that may point at another machine's location.
|
|
437
634
|
const registeredMatch = registry.projects.find((p) => p.id === discoveredId);
|
|
438
635
|
if (registeredMatch) {
|
|
439
636
|
log(`ProjectRegistry: Using cwd-discovered project "${registeredMatch.id}" as default`);
|
|
440
|
-
return registeredMatch;
|
|
637
|
+
return { ...registeredMatch, path: discoveredRoot };
|
|
441
638
|
}
|
|
442
639
|
// Return an ad-hoc entry for the discovered project
|
|
443
640
|
log(`ProjectRegistry: Using cwd-discovered unregistered project "${discoveredId}" as default`);
|
|
@@ -503,6 +700,9 @@ export function resolveProjectPaths(projectId) {
|
|
|
503
700
|
throw new Error(msg);
|
|
504
701
|
}
|
|
505
702
|
project = defaultProject;
|
|
703
|
+
// No id was requested, so nothing was substituted — this is a match by
|
|
704
|
+
// definition, and the caller still learns which project it got.
|
|
705
|
+
recordResolution(undefined, project.id, project.path, 'default_project');
|
|
506
706
|
}
|
|
507
707
|
const decibelPath = path.join(project.path, '.decibel');
|
|
508
708
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectRegistry.js","sourceRoot":"","sources":["../src/projectRegistry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"projectRegistry.js","sourceRoot":"","sources":["../src/projectRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-facade circuit breaker.
|
|
3
|
+
*
|
|
4
|
+
* The failure this exists for: one facade's dependency wedges — Mother's
|
|
5
|
+
* Postgres stops accepting connections, Supabase hangs, a disk mount goes
|
|
6
|
+
* away — and every call into that facade sits on a socket until it times out.
|
|
7
|
+
* With six clients sharing one runtime that is enough to make the whole
|
|
8
|
+
* runtime feel dead, even though twenty other facades are fine. The breaker
|
|
9
|
+
* turns a slow, repeated failure into a fast, local one.
|
|
10
|
+
*
|
|
11
|
+
* WHAT COUNTS AS A FAULT is the whole design, because Decibel's tools rarely
|
|
12
|
+
* throw. `senken_trade_summary` catches its own Postgres error and returns
|
|
13
|
+
* `{isError: true}` (src/tools/senken.ts:117), so a breaker that only counted
|
|
14
|
+
* exceptions would never trip on the exact case it was built for. But counting
|
|
15
|
+
* every `isError` is worse: `create_issue` missing a title is an `isError`
|
|
16
|
+
* too, and five bad calls in a row from one confused agent must not take the
|
|
17
|
+
* sentinel facade offline for everyone.
|
|
18
|
+
*
|
|
19
|
+
* So the signal is *unresponsiveness*, not *unhappiness*:
|
|
20
|
+
*
|
|
21
|
+
* - a thrown exception is always a fault (the handler didn't handle it)
|
|
22
|
+
* - an `isError` result that took longer than `slowFailureMs` is a fault
|
|
23
|
+
* (a dependency that times out is slow; a rejected argument is not)
|
|
24
|
+
* - an `isError` result that came back fast is neither fault nor proof of
|
|
25
|
+
* health — it leaves the counters exactly where they were
|
|
26
|
+
* - a success closes the circuit and clears the count
|
|
27
|
+
*
|
|
28
|
+
* State machine: closed → (threshold consecutive faults) → open → (cooldown
|
|
29
|
+
* elapses) → half-open → success closes it, fault re-opens it. Half-open
|
|
30
|
+
* admits exactly one probe; concurrent callers are rejected until it lands, so
|
|
31
|
+
* a recovering database gets one connection attempt rather than six.
|
|
32
|
+
*
|
|
33
|
+
* The breaker never converts a working call into a failure — it only refuses
|
|
34
|
+
* calls it has good reason to believe would fail slowly.
|
|
35
|
+
*/
|
|
36
|
+
export type CircuitState = 'closed' | 'open' | 'half_open';
|
|
37
|
+
export interface CircuitBreakerOptions {
|
|
38
|
+
/** Consecutive faults before the circuit opens. Default 5. */
|
|
39
|
+
failureThreshold?: number;
|
|
40
|
+
/** How long the circuit stays open before admitting a probe. Default 30s. */
|
|
41
|
+
cooldownMs?: number;
|
|
42
|
+
/** An `isError` result slower than this counts as a fault. Default 2s. */
|
|
43
|
+
slowFailureMs?: number;
|
|
44
|
+
/** Injectable clock — tests drive this instead of sleeping. */
|
|
45
|
+
now?: () => number;
|
|
46
|
+
}
|
|
47
|
+
export interface CircuitSnapshot {
|
|
48
|
+
state: CircuitState;
|
|
49
|
+
consecutive_faults: number;
|
|
50
|
+
opened_at?: string;
|
|
51
|
+
retry_after_ms?: number;
|
|
52
|
+
last_error?: string;
|
|
53
|
+
}
|
|
54
|
+
/** What the caller learns when it asks permission to run. */
|
|
55
|
+
export type CircuitDecision = {
|
|
56
|
+
allowed: true;
|
|
57
|
+
} | {
|
|
58
|
+
allowed: false;
|
|
59
|
+
retryAfterMs: number;
|
|
60
|
+
lastError?: string;
|
|
61
|
+
openedAt?: string;
|
|
62
|
+
};
|
|
63
|
+
export declare class CircuitBreakerRegistry {
|
|
64
|
+
private readonly circuits;
|
|
65
|
+
private readonly failureThreshold;
|
|
66
|
+
private readonly cooldownMs;
|
|
67
|
+
readonly slowFailureMs: number;
|
|
68
|
+
private readonly now;
|
|
69
|
+
constructor(opts?: CircuitBreakerOptions);
|
|
70
|
+
/**
|
|
71
|
+
* Ask whether a call to `key` may proceed. Transitions open → half_open when
|
|
72
|
+
* the cooldown has elapsed, and reserves the half-open probe for the caller
|
|
73
|
+
* it says yes to.
|
|
74
|
+
*/
|
|
75
|
+
beforeCall(key: string): CircuitDecision;
|
|
76
|
+
/**
|
|
77
|
+
* Report what happened. `threw` and `durationMs` decide whether this was a
|
|
78
|
+
* fault; see the module comment for why `isError` alone is not enough and
|
|
79
|
+
* not too much.
|
|
80
|
+
*/
|
|
81
|
+
afterCall(key: string, outcome: {
|
|
82
|
+
threw: boolean;
|
|
83
|
+
isError: boolean;
|
|
84
|
+
durationMs: number;
|
|
85
|
+
error?: string;
|
|
86
|
+
}): void;
|
|
87
|
+
recordSuccess(key: string): void;
|
|
88
|
+
recordFault(key: string, error?: string): void;
|
|
89
|
+
state(key: string): CircuitState;
|
|
90
|
+
/** Open circuits only — a healthy runtime reports `{}`. */
|
|
91
|
+
snapshot(): Record<string, CircuitSnapshot>;
|
|
92
|
+
reset(key?: string): void;
|
|
93
|
+
private close;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=circuitBreaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuitBreaker.d.ts","sourceRoot":"","sources":["../../src/runtime/circuitBreaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GACvB;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GACjB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAgBpF,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,IAAI,GAAE,qBAA0B;IAO5C;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAiCxC;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAiB/G,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMhC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IA0B9C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;IAIhC,2DAA2D;IAC3D,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAiB3C,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAKzB,OAAO,CAAC,KAAK;CAQd"}
|