@aiden-ade/sandbox-agent 0.1.59 → 0.1.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/binding-switch-git.test.d.ts +2 -0
- package/dist/__tests__/binding-switch-git.test.d.ts.map +1 -0
- package/dist/__tests__/binding-switch-git.test.js +610 -0
- package/dist/__tests__/binding-switch-git.test.js.map +1 -0
- package/dist/__tests__/cli-ensure-install.test.d.ts +2 -0
- package/dist/__tests__/cli-ensure-install.test.d.ts.map +1 -0
- package/dist/__tests__/cli-ensure-install.test.js +109 -0
- package/dist/__tests__/cli-ensure-install.test.js.map +1 -0
- package/dist/__tests__/cli-executable.test.d.ts +2 -0
- package/dist/__tests__/cli-executable.test.d.ts.map +1 -0
- package/dist/__tests__/cli-executable.test.js +129 -0
- package/dist/__tests__/cli-executable.test.js.map +1 -0
- package/dist/__tests__/cli-help.test.d.ts +2 -0
- package/dist/__tests__/cli-help.test.d.ts.map +1 -0
- package/dist/__tests__/cli-help.test.js +34 -0
- package/dist/__tests__/cli-help.test.js.map +1 -0
- package/dist/__tests__/computer-readiness.test.d.ts +2 -0
- package/dist/__tests__/computer-readiness.test.d.ts.map +1 -0
- package/dist/__tests__/computer-readiness.test.js +63 -0
- package/dist/__tests__/computer-readiness.test.js.map +1 -0
- package/dist/__tests__/core-agent-workflow-context.test.d.ts +2 -0
- package/dist/__tests__/core-agent-workflow-context.test.d.ts.map +1 -0
- package/dist/__tests__/core-agent-workflow-context.test.js +139 -0
- package/dist/__tests__/core-agent-workflow-context.test.js.map +1 -0
- package/dist/__tests__/daemon-reconcile-ask.test.d.ts +2 -0
- package/dist/__tests__/daemon-reconcile-ask.test.d.ts.map +1 -0
- package/dist/__tests__/daemon-reconcile-ask.test.js +86 -0
- package/dist/__tests__/daemon-reconcile-ask.test.js.map +1 -0
- package/dist/__tests__/daemon-socket.integration.test.d.ts +2 -0
- package/dist/__tests__/daemon-socket.integration.test.d.ts.map +1 -0
- package/dist/__tests__/daemon-socket.integration.test.js +450 -0
- package/dist/__tests__/daemon-socket.integration.test.js.map +1 -0
- package/dist/__tests__/daemon.test.d.ts +2 -0
- package/dist/__tests__/daemon.test.d.ts.map +1 -0
- package/dist/__tests__/daemon.test.js +3975 -0
- package/dist/__tests__/daemon.test.js.map +1 -0
- package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts +2 -0
- package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts.map +1 -0
- package/dist/__tests__/ensure-shared-checkout-branch.test.js +129 -0
- package/dist/__tests__/ensure-shared-checkout-branch.test.js.map +1 -0
- package/dist/__tests__/event-outbox-persist-failure.test.d.ts +2 -0
- package/dist/__tests__/event-outbox-persist-failure.test.d.ts.map +1 -0
- package/dist/__tests__/event-outbox-persist-failure.test.js +84 -0
- package/dist/__tests__/event-outbox-persist-failure.test.js.map +1 -0
- package/dist/__tests__/event-outbox.test.d.ts +2 -0
- package/dist/__tests__/event-outbox.test.d.ts.map +1 -0
- package/dist/__tests__/event-outbox.test.js +256 -0
- package/dist/__tests__/event-outbox.test.js.map +1 -0
- package/dist/__tests__/fake-provider-cli.test.d.ts +2 -0
- package/dist/__tests__/fake-provider-cli.test.d.ts.map +1 -0
- package/dist/__tests__/fake-provider-cli.test.js +46 -0
- package/dist/__tests__/fake-provider-cli.test.js.map +1 -0
- package/dist/__tests__/generated-images.test.d.ts +2 -0
- package/dist/__tests__/generated-images.test.d.ts.map +1 -0
- package/dist/__tests__/generated-images.test.js +132 -0
- package/dist/__tests__/generated-images.test.js.map +1 -0
- package/dist/__tests__/lifecycle-logger.test.d.ts +2 -0
- package/dist/__tests__/lifecycle-logger.test.d.ts.map +1 -0
- package/dist/__tests__/lifecycle-logger.test.js +49 -0
- package/dist/__tests__/lifecycle-logger.test.js.map +1 -0
- package/dist/__tests__/local-skill-scan.test.d.ts +2 -0
- package/dist/__tests__/local-skill-scan.test.d.ts.map +1 -0
- package/dist/__tests__/local-skill-scan.test.js +91 -0
- package/dist/__tests__/local-skill-scan.test.js.map +1 -0
- package/dist/__tests__/local-workspace-migration.test.d.ts +2 -0
- package/dist/__tests__/local-workspace-migration.test.d.ts.map +1 -0
- package/dist/__tests__/local-workspace-migration.test.js +195 -0
- package/dist/__tests__/local-workspace-migration.test.js.map +1 -0
- package/dist/__tests__/mcp-inspect-timeout.test.d.ts +2 -0
- package/dist/__tests__/mcp-inspect-timeout.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-inspect-timeout.test.js +97 -0
- package/dist/__tests__/mcp-inspect-timeout.test.js.map +1 -0
- package/dist/__tests__/mcp-readiness.test.d.ts +2 -0
- package/dist/__tests__/mcp-readiness.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-readiness.test.js +267 -0
- package/dist/__tests__/mcp-readiness.test.js.map +1 -0
- package/dist/__tests__/mcp-registration-cli.test.d.ts +2 -0
- package/dist/__tests__/mcp-registration-cli.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-registration-cli.test.js +71 -0
- package/dist/__tests__/mcp-registration-cli.test.js.map +1 -0
- package/dist/__tests__/mcp-registration.test.d.ts +2 -0
- package/dist/__tests__/mcp-registration.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-registration.test.js +426 -0
- package/dist/__tests__/mcp-registration.test.js.map +1 -0
- package/dist/__tests__/model-scan-runner.test.d.ts +2 -0
- package/dist/__tests__/model-scan-runner.test.d.ts.map +1 -0
- package/dist/__tests__/model-scan-runner.test.js +67 -0
- package/dist/__tests__/model-scan-runner.test.js.map +1 -0
- package/dist/__tests__/network-diagnostics.test.d.ts +2 -0
- package/dist/__tests__/network-diagnostics.test.d.ts.map +1 -0
- package/dist/__tests__/network-diagnostics.test.js +26 -0
- package/dist/__tests__/network-diagnostics.test.js.map +1 -0
- package/dist/__tests__/observable-map.test.d.ts +2 -0
- package/dist/__tests__/observable-map.test.d.ts.map +1 -0
- package/dist/__tests__/observable-map.test.js +54 -0
- package/dist/__tests__/observable-map.test.js.map +1 -0
- package/dist/__tests__/provider-auth-preflight.test.d.ts +2 -0
- package/dist/__tests__/provider-auth-preflight.test.d.ts.map +1 -0
- package/dist/__tests__/provider-auth-preflight.test.js +123 -0
- package/dist/__tests__/provider-auth-preflight.test.js.map +1 -0
- package/dist/__tests__/provider-model-discovery.test.d.ts +2 -0
- package/dist/__tests__/provider-model-discovery.test.d.ts.map +1 -0
- package/dist/__tests__/provider-model-discovery.test.js +472 -0
- package/dist/__tests__/provider-model-discovery.test.js.map +1 -0
- package/dist/__tests__/remove-worktrees-if-clean.test.d.ts +2 -0
- package/dist/__tests__/remove-worktrees-if-clean.test.d.ts.map +1 -0
- package/dist/__tests__/remove-worktrees-if-clean.test.js +221 -0
- package/dist/__tests__/remove-worktrees-if-clean.test.js.map +1 -0
- package/dist/__tests__/resume-fallback-env.test.d.ts +2 -0
- package/dist/__tests__/resume-fallback-env.test.d.ts.map +1 -0
- package/dist/__tests__/resume-fallback-env.test.js +28 -0
- package/dist/__tests__/resume-fallback-env.test.js.map +1 -0
- package/dist/__tests__/run-journal.test.d.ts +2 -0
- package/dist/__tests__/run-journal.test.d.ts.map +1 -0
- package/dist/__tests__/run-journal.test.js +121 -0
- package/dist/__tests__/run-journal.test.js.map +1 -0
- package/dist/__tests__/run-start-gate.test.d.ts +2 -0
- package/dist/__tests__/run-start-gate.test.d.ts.map +1 -0
- package/dist/__tests__/run-start-gate.test.js +29 -0
- package/dist/__tests__/run-start-gate.test.js.map +1 -0
- package/dist/__tests__/runtime-capabilities-sync.test.d.ts +2 -0
- package/dist/__tests__/runtime-capabilities-sync.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-capabilities-sync.test.js +66 -0
- package/dist/__tests__/runtime-capabilities-sync.test.js.map +1 -0
- package/dist/__tests__/runtime-config.test.d.ts +2 -0
- package/dist/__tests__/runtime-config.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-config.test.js +102 -0
- package/dist/__tests__/runtime-config.test.js.map +1 -0
- package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts +2 -0
- package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-presenter-heartbeat.test.js +159 -0
- package/dist/__tests__/runtime-presenter-heartbeat.test.js.map +1 -0
- package/dist/__tests__/sandbox-outbox.test.d.ts +2 -0
- package/dist/__tests__/sandbox-outbox.test.d.ts.map +1 -0
- package/dist/__tests__/sandbox-outbox.test.js +214 -0
- package/dist/__tests__/sandbox-outbox.test.js.map +1 -0
- package/dist/__tests__/sandbox-workflow-context.test.d.ts +2 -0
- package/dist/__tests__/sandbox-workflow-context.test.d.ts.map +1 -0
- package/dist/__tests__/sandbox-workflow-context.test.js +396 -0
- package/dist/__tests__/sandbox-workflow-context.test.js.map +1 -0
- package/dist/__tests__/service-manager.test.d.ts +2 -0
- package/dist/__tests__/service-manager.test.d.ts.map +1 -0
- package/dist/__tests__/service-manager.test.js +50 -0
- package/dist/__tests__/service-manager.test.js.map +1 -0
- package/dist/__tests__/sleep-inhibitor.test.d.ts +2 -0
- package/dist/__tests__/sleep-inhibitor.test.d.ts.map +1 -0
- package/dist/__tests__/sleep-inhibitor.test.js +236 -0
- package/dist/__tests__/sleep-inhibitor.test.js.map +1 -0
- package/dist/__tests__/status-local-workspace.test.d.ts +2 -0
- package/dist/__tests__/status-local-workspace.test.d.ts.map +1 -0
- package/dist/__tests__/status-local-workspace.test.js +121 -0
- package/dist/__tests__/status-local-workspace.test.js.map +1 -0
- package/dist/__tests__/suspension-detector.test.d.ts +2 -0
- package/dist/__tests__/suspension-detector.test.d.ts.map +1 -0
- package/dist/__tests__/suspension-detector.test.js +112 -0
- package/dist/__tests__/suspension-detector.test.js.map +1 -0
- package/dist/__tests__/web-presenter-parent-events.test.d.ts +2 -0
- package/dist/__tests__/web-presenter-parent-events.test.d.ts.map +1 -0
- package/dist/__tests__/web-presenter-parent-events.test.js +130 -0
- package/dist/__tests__/web-presenter-parent-events.test.js.map +1 -0
- package/dist/__tests__/workspace-relocation.test.d.ts +2 -0
- package/dist/__tests__/workspace-relocation.test.d.ts.map +1 -0
- package/dist/__tests__/workspace-relocation.test.js +66 -0
- package/dist/__tests__/workspace-relocation.test.js.map +1 -0
- package/dist/__tests__/workspace-run-lease.test.d.ts +2 -0
- package/dist/__tests__/workspace-run-lease.test.d.ts.map +1 -0
- package/dist/__tests__/workspace-run-lease.test.js +230 -0
- package/dist/__tests__/workspace-run-lease.test.js.map +1 -0
- package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts +2 -0
- package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts.map +1 -0
- package/dist/__tests__/ws-client-heartbeat-volatile.test.js +61 -0
- package/dist/__tests__/ws-client-heartbeat-volatile.test.js.map +1 -0
- package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts +2 -0
- package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts.map +1 -0
- package/dist/__tests__/ws-client-heartbeat.integration.test.js +109 -0
- package/dist/__tests__/ws-client-heartbeat.integration.test.js.map +1 -0
- package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts +2 -0
- package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts.map +1 -0
- package/dist/__tests__/ws-client-user-message-ack.integration.test.js +167 -0
- package/dist/__tests__/ws-client-user-message-ack.integration.test.js.map +1 -0
- package/dist/aiden-system-prompt.d.ts +6 -0
- package/dist/aiden-system-prompt.d.ts.map +1 -0
- package/dist/aiden-system-prompt.js +6 -0
- package/dist/aiden-system-prompt.js.map +1 -0
- package/dist/binding-switch-git.d.ts +26 -0
- package/dist/binding-switch-git.d.ts.map +1 -0
- package/dist/binding-switch-git.js +973 -0
- package/dist/binding-switch-git.js.map +1 -0
- package/dist/cli-ensure-install.d.ts +39 -0
- package/dist/cli-ensure-install.d.ts.map +1 -0
- package/dist/cli-ensure-install.js +133 -0
- package/dist/cli-ensure-install.js.map +1 -0
- package/dist/cli-executable.d.ts +97 -0
- package/dist/cli-executable.d.ts.map +1 -0
- package/dist/cli-executable.js +432 -0
- package/dist/cli-executable.js.map +1 -0
- package/dist/cli-help.d.ts +7 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +49 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/computer-readiness.d.ts +42 -0
- package/dist/computer-readiness.d.ts.map +1 -0
- package/dist/computer-readiness.js +191 -0
- package/dist/computer-readiness.js.map +1 -0
- package/dist/core-agent.d.ts +47 -0
- package/dist/core-agent.d.ts.map +1 -0
- package/dist/core-agent.js +364 -0
- package/dist/core-agent.js.map +1 -0
- package/dist/daemon.d.ts +392 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +4711 -0
- package/dist/daemon.js.map +1 -0
- package/dist/event-outbox.d.ts +83 -0
- package/dist/event-outbox.d.ts.map +1 -0
- package/dist/event-outbox.js +440 -0
- package/dist/event-outbox.js.map +1 -0
- package/dist/fake-provider-cli.d.ts +13 -0
- package/dist/fake-provider-cli.d.ts.map +1 -0
- package/dist/fake-provider-cli.js +53 -0
- package/dist/fake-provider-cli.js.map +1 -0
- package/dist/generated-images.d.ts +2 -0
- package/dist/generated-images.d.ts.map +1 -0
- package/dist/generated-images.js +2 -0
- package/dist/generated-images.js.map +1 -0
- package/dist/index.cjs +129 -29
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +209 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle-logger.d.ts +25 -0
- package/dist/lifecycle-logger.d.ts.map +1 -0
- package/dist/lifecycle-logger.js +73 -0
- package/dist/lifecycle-logger.js.map +1 -0
- package/dist/local-skill-scan.d.ts +21 -0
- package/dist/local-skill-scan.d.ts.map +1 -0
- package/dist/local-skill-scan.js +109 -0
- package/dist/local-skill-scan.js.map +1 -0
- package/dist/local-workspace-migration.d.ts +68 -0
- package/dist/local-workspace-migration.d.ts.map +1 -0
- package/dist/local-workspace-migration.js +157 -0
- package/dist/local-workspace-migration.js.map +1 -0
- package/dist/mcp-readiness.d.ts +59 -0
- package/dist/mcp-readiness.d.ts.map +1 -0
- package/dist/mcp-readiness.js +202 -0
- package/dist/mcp-readiness.js.map +1 -0
- package/dist/mcp-registration.d.ts +75 -0
- package/dist/mcp-registration.d.ts.map +1 -0
- package/dist/mcp-registration.js +563 -0
- package/dist/mcp-registration.js.map +1 -0
- package/dist/model-scan-runner.d.ts +15 -0
- package/dist/model-scan-runner.d.ts.map +1 -0
- package/dist/model-scan-runner.js +51 -0
- package/dist/model-scan-runner.js.map +1 -0
- package/dist/network-diagnostics.d.ts +8 -0
- package/dist/network-diagnostics.d.ts.map +1 -0
- package/dist/network-diagnostics.js +56 -0
- package/dist/network-diagnostics.js.map +1 -0
- package/dist/observable-map.d.ts +25 -0
- package/dist/observable-map.d.ts.map +1 -0
- package/dist/observable-map.js +42 -0
- package/dist/observable-map.js.map +1 -0
- package/dist/provider-auth-preflight.d.ts +22 -0
- package/dist/provider-auth-preflight.d.ts.map +1 -0
- package/dist/provider-auth-preflight.js +110 -0
- package/dist/provider-auth-preflight.js.map +1 -0
- package/dist/provider-model-discovery.d.ts +38 -0
- package/dist/provider-model-discovery.d.ts.map +1 -0
- package/dist/provider-model-discovery.js +519 -0
- package/dist/provider-model-discovery.js.map +1 -0
- package/dist/resume-fallback-env.d.ts +20 -0
- package/dist/resume-fallback-env.d.ts.map +1 -0
- package/dist/resume-fallback-env.js +30 -0
- package/dist/resume-fallback-env.js.map +1 -0
- package/dist/run-journal.d.ts +53 -0
- package/dist/run-journal.d.ts.map +1 -0
- package/dist/run-journal.js +193 -0
- package/dist/run-journal.js.map +1 -0
- package/dist/run-start-gate.d.ts +9 -0
- package/dist/run-start-gate.d.ts.map +1 -0
- package/dist/run-start-gate.js +24 -0
- package/dist/run-start-gate.js.map +1 -0
- package/dist/runtime-backends.d.ts +2 -0
- package/dist/runtime-backends.d.ts.map +1 -0
- package/dist/runtime-backends.js +2 -0
- package/dist/runtime-backends.js.map +1 -0
- package/dist/runtime-capabilities-sync.d.ts +33 -0
- package/dist/runtime-capabilities-sync.d.ts.map +1 -0
- package/dist/runtime-capabilities-sync.js +56 -0
- package/dist/runtime-capabilities-sync.js.map +1 -0
- package/dist/runtime-config.d.ts +24 -0
- package/dist/runtime-config.d.ts.map +1 -0
- package/dist/runtime-config.js +124 -0
- package/dist/runtime-config.js.map +1 -0
- package/dist/sandbox-outbox.d.ts +122 -0
- package/dist/sandbox-outbox.d.ts.map +1 -0
- package/dist/sandbox-outbox.js +180 -0
- package/dist/sandbox-outbox.js.map +1 -0
- package/dist/sandbox.d.ts +44 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +438 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/service-manager.d.ts +28 -0
- package/dist/service-manager.d.ts.map +1 -0
- package/dist/service-manager.js +259 -0
- package/dist/service-manager.js.map +1 -0
- package/dist/sleep-inhibitor.d.ts +111 -0
- package/dist/sleep-inhibitor.d.ts.map +1 -0
- package/dist/sleep-inhibitor.js +412 -0
- package/dist/sleep-inhibitor.js.map +1 -0
- package/dist/suspension-detector.d.ts +48 -0
- package/dist/suspension-detector.d.ts.map +1 -0
- package/dist/suspension-detector.js +89 -0
- package/dist/suspension-detector.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/updater.d.ts +15 -0
- package/dist/updater.d.ts.map +1 -0
- package/dist/updater.js +50 -0
- package/dist/updater.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/web-presenter.d.ts +55 -0
- package/dist/web-presenter.d.ts.map +1 -0
- package/dist/web-presenter.js +265 -0
- package/dist/web-presenter.js.map +1 -0
- package/dist/workspace-relocation.d.ts +22 -0
- package/dist/workspace-relocation.d.ts.map +1 -0
- package/dist/workspace-relocation.js +90 -0
- package/dist/workspace-relocation.js.map +1 -0
- package/dist/workspace-run-lease.d.ts +97 -0
- package/dist/workspace-run-lease.d.ts.map +1 -0
- package/dist/workspace-run-lease.js +241 -0
- package/dist/workspace-run-lease.js.map +1 -0
- package/dist/ws-client.d.ts +194 -0
- package/dist/ws-client.d.ts.map +1 -0
- package/dist/ws-client.js +282 -0
- package/dist/ws-client.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { existsSync, realpathSync, statSync } from "node:fs";
|
|
3
|
+
import { isAbsolute, resolve } from "node:path";
|
|
4
|
+
import { getDaemonCliEnvironment } from "./cli-executable.js";
|
|
5
|
+
import { normalizeRepositoryIdentity } from "./workspace-relocation.js";
|
|
6
|
+
export const WORKSPACE_LEASE_CHECK_INTERVAL_MS = 1_000;
|
|
7
|
+
/**
|
|
8
|
+
* Git probe timeout. A single `git rev-parse` can overrun a tight 2s window under
|
|
9
|
+
* OS timer coalescing (backgrounded app / App Nap) or disk-IO contention even
|
|
10
|
+
* though the checkout is perfectly healthy, which the monitor would misread as a
|
|
11
|
+
* vanished workspace. Kept configurable; the consecutive-failure gate in the
|
|
12
|
+
* daemon monitor is the primary defense against a single slow probe.
|
|
13
|
+
*/
|
|
14
|
+
function parsePositiveMs(value, fallback) {
|
|
15
|
+
const parsed = value ? Number(value) : Number.NaN;
|
|
16
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
17
|
+
}
|
|
18
|
+
export const WORKSPACE_LEASE_GIT_TIMEOUT_MS = parsePositiveMs(process.env.ALAN_WORKSPACE_LEASE_GIT_TIMEOUT_MS, 2_000);
|
|
19
|
+
function gitValue(cwd, args) {
|
|
20
|
+
const result = spawnSync("git", ["-C", cwd, ...args], {
|
|
21
|
+
encoding: "utf8",
|
|
22
|
+
env: getDaemonCliEnvironment(),
|
|
23
|
+
timeout: WORKSPACE_LEASE_GIT_TIMEOUT_MS,
|
|
24
|
+
});
|
|
25
|
+
if (result.status !== 0)
|
|
26
|
+
return null;
|
|
27
|
+
return result.stdout.trim() || null;
|
|
28
|
+
}
|
|
29
|
+
function filesystemIdentity(path) {
|
|
30
|
+
const canonicalPath = realpathSync.native(path);
|
|
31
|
+
const stat = statSync(canonicalPath);
|
|
32
|
+
return `${canonicalPath}:${stat.dev}:${stat.ino}`;
|
|
33
|
+
}
|
|
34
|
+
function resolveGitPath(workspacePath, value) {
|
|
35
|
+
return isAbsolute(value) ? value : resolve(workspacePath, value);
|
|
36
|
+
}
|
|
37
|
+
const DEFAULT_PROBE = {
|
|
38
|
+
snapshot: (workspacePath) => {
|
|
39
|
+
try {
|
|
40
|
+
const canonicalWorkspacePath = realpathSync.native(resolve(workspacePath));
|
|
41
|
+
const repositoryRoot = gitValue(canonicalWorkspacePath, ["rev-parse", "--show-toplevel"]);
|
|
42
|
+
const gitDirectory = gitValue(canonicalWorkspacePath, ["rev-parse", "--git-dir"]);
|
|
43
|
+
const commonDirectory = gitValue(canonicalWorkspacePath, ["rev-parse", "--git-common-dir"]);
|
|
44
|
+
const branch = gitValue(canonicalWorkspacePath, ["rev-parse", "--abbrev-ref", "HEAD"]);
|
|
45
|
+
if (!repositoryRoot || !gitDirectory || !commonDirectory || !branch)
|
|
46
|
+
return null;
|
|
47
|
+
const remote = gitValue(canonicalWorkspacePath, ["config", "--get", "remote.origin.url"]);
|
|
48
|
+
const remoteIdentity = remote ? normalizeRepositoryIdentity(remote) : null;
|
|
49
|
+
return {
|
|
50
|
+
workspacePath: resolve(workspacePath),
|
|
51
|
+
workspaceIdentity: filesystemIdentity(canonicalWorkspacePath),
|
|
52
|
+
repositoryIdentity: `${filesystemIdentity(resolveGitPath(canonicalWorkspacePath, commonDirectory))}:${remoteIdentity ?? "local"}`,
|
|
53
|
+
worktreeIdentity: filesystemIdentity(resolveGitPath(canonicalWorkspacePath, gitDirectory)),
|
|
54
|
+
branch,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
pathExists: (workspacePath) => {
|
|
62
|
+
try {
|
|
63
|
+
return existsSync(resolve(workspacePath));
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// A permission/IO error while stat-ing is not proof the path is gone —
|
|
67
|
+
// treat as "present" (unknown) so it is classified retryable, not fatal.
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
function unavailableFailure(target) {
|
|
73
|
+
return {
|
|
74
|
+
code: "workspace_lease_unavailable",
|
|
75
|
+
message: "The workspace or Git checkout became unavailable while the run was active. Restore it and start a new run.",
|
|
76
|
+
workspacePath: target.workspacePath,
|
|
77
|
+
expectedBranch: target.expectedBranch,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function branchFailure(target, expectedBranch, actualBranch) {
|
|
81
|
+
return {
|
|
82
|
+
code: "workspace_lease_branch_changed",
|
|
83
|
+
message: `The workspace branch changed from ${expectedBranch} to ${actualBranch} while the run was active. Restore ${expectedBranch} and start a new run.`,
|
|
84
|
+
workspacePath: target.workspacePath,
|
|
85
|
+
expectedBranch,
|
|
86
|
+
actualBranch,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export class WorkspaceRunLease {
|
|
90
|
+
captured;
|
|
91
|
+
probe;
|
|
92
|
+
constructor(captured, probe) {
|
|
93
|
+
this.captured = captured;
|
|
94
|
+
this.probe = probe;
|
|
95
|
+
}
|
|
96
|
+
static capture(targets, probe = DEFAULT_PROBE) {
|
|
97
|
+
const captured = [];
|
|
98
|
+
for (const target of targets) {
|
|
99
|
+
const normalizedTarget = { ...target, workspacePath: resolve(target.workspacePath) };
|
|
100
|
+
const identity = probe.snapshot(normalizedTarget.workspacePath);
|
|
101
|
+
if (!identity)
|
|
102
|
+
return { lease: null, failure: unavailableFailure(normalizedTarget) };
|
|
103
|
+
if (normalizedTarget.expectedBranch && identity.branch !== normalizedTarget.expectedBranch) {
|
|
104
|
+
return {
|
|
105
|
+
lease: null,
|
|
106
|
+
failure: branchFailure(normalizedTarget, normalizedTarget.expectedBranch, identity.branch),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
captured.push({ target: normalizedTarget, identity });
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
lease: captured.length > 0 ? new WorkspaceRunLease(captured, probe) : null,
|
|
113
|
+
failure: null,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Classify the lease state for the run monitor.
|
|
118
|
+
*
|
|
119
|
+
* - `transient: true` — a null snapshot while the workspace path still exists:
|
|
120
|
+
* the git probe timed out or failed transiently (OS throttling / IO
|
|
121
|
+
* contention), NOT a vanished checkout. The monitor should retry (require N
|
|
122
|
+
* consecutive transient failures) before declaring the workspace lost.
|
|
123
|
+
* - `transient: false` — a definitive change: the path is genuinely missing
|
|
124
|
+
* (ENOENT), or the workspace/repository/worktree/branch identity changed.
|
|
125
|
+
* These are real and fail fast.
|
|
126
|
+
*/
|
|
127
|
+
verifyDetailed() {
|
|
128
|
+
for (const captured of this.captured) {
|
|
129
|
+
const current = this.probe.snapshot(captured.target.workspacePath);
|
|
130
|
+
if (!current) {
|
|
131
|
+
const pathGone = this.probe.pathExists?.(captured.target.workspacePath) === false;
|
|
132
|
+
return { failure: unavailableFailure(captured.target), transient: !pathGone };
|
|
133
|
+
}
|
|
134
|
+
if (current.workspaceIdentity !== captured.identity.workspaceIdentity) {
|
|
135
|
+
return {
|
|
136
|
+
failure: {
|
|
137
|
+
code: "workspace_lease_path_changed",
|
|
138
|
+
message: "The selected workspace folder changed while the run was active. The run stopped before continuing; choose the correct folder and start a new run.",
|
|
139
|
+
workspacePath: captured.target.workspacePath,
|
|
140
|
+
expectedBranch: captured.identity.branch,
|
|
141
|
+
actualBranch: current.branch,
|
|
142
|
+
},
|
|
143
|
+
transient: false,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
if (current.repositoryIdentity !== captured.identity.repositoryIdentity ||
|
|
147
|
+
current.worktreeIdentity !== captured.identity.worktreeIdentity) {
|
|
148
|
+
return {
|
|
149
|
+
failure: {
|
|
150
|
+
code: "workspace_lease_repository_changed",
|
|
151
|
+
message: "The workspace now points to a different repository or worktree. The run stopped before continuing; restore the original checkout and start a new run.",
|
|
152
|
+
workspacePath: captured.target.workspacePath,
|
|
153
|
+
expectedBranch: captured.identity.branch,
|
|
154
|
+
actualBranch: current.branch,
|
|
155
|
+
},
|
|
156
|
+
transient: false,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
if (current.branch !== captured.identity.branch) {
|
|
160
|
+
return {
|
|
161
|
+
failure: branchFailure(captured.target, captured.identity.branch, current.branch),
|
|
162
|
+
transient: false,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return { failure: null, transient: false };
|
|
167
|
+
}
|
|
168
|
+
verify() {
|
|
169
|
+
for (const captured of this.captured) {
|
|
170
|
+
const current = this.probe.snapshot(captured.target.workspacePath);
|
|
171
|
+
if (!current)
|
|
172
|
+
return unavailableFailure(captured.target);
|
|
173
|
+
if (current.workspaceIdentity !== captured.identity.workspaceIdentity) {
|
|
174
|
+
return {
|
|
175
|
+
code: "workspace_lease_path_changed",
|
|
176
|
+
message: "The selected workspace folder changed while the run was active. The run stopped before continuing; choose the correct folder and start a new run.",
|
|
177
|
+
workspacePath: captured.target.workspacePath,
|
|
178
|
+
expectedBranch: captured.identity.branch,
|
|
179
|
+
actualBranch: current.branch,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
if (current.repositoryIdentity !== captured.identity.repositoryIdentity ||
|
|
183
|
+
current.worktreeIdentity !== captured.identity.worktreeIdentity) {
|
|
184
|
+
return {
|
|
185
|
+
code: "workspace_lease_repository_changed",
|
|
186
|
+
message: "The workspace now points to a different repository or worktree. The run stopped before continuing; restore the original checkout and start a new run.",
|
|
187
|
+
workspacePath: captured.target.workspacePath,
|
|
188
|
+
expectedBranch: captured.identity.branch,
|
|
189
|
+
actualBranch: current.branch,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
if (current.branch !== captured.identity.branch) {
|
|
193
|
+
return branchFailure(captured.target, captured.identity.branch, current.branch);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
export const FRESH_LEASE_MONITOR_STATE = {
|
|
200
|
+
transientStreak: 0,
|
|
201
|
+
nextCheckAtMs: 0,
|
|
202
|
+
};
|
|
203
|
+
/** Whether the monitor should probe this tick, or is still inside a backoff window. */
|
|
204
|
+
export function isLeaseCheckDue(state, nowMs) {
|
|
205
|
+
return nowMs >= state.nextCheckAtMs;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Fold a `verifyDetailed()` result into the monitor state.
|
|
209
|
+
*
|
|
210
|
+
* - No failure → reset the streak, resume the normal cadence (`ok`).
|
|
211
|
+
* - Definitive failure → `fail` immediately (path/repo/branch changed, path gone).
|
|
212
|
+
* - Transient failure below the streak cap → `transient`: keep the run alive, bump
|
|
213
|
+
* the streak, and back the next probe off exponentially (capped). This is what
|
|
214
|
+
* stops a single slow/coalesced `git` probe from false-failing a healthy run.
|
|
215
|
+
* - Transient failure reaching the cap → `fail` (the workspace really is gone).
|
|
216
|
+
*/
|
|
217
|
+
export function applyLeaseCheckResult(input) {
|
|
218
|
+
const { detailed, nowMs, policy } = input;
|
|
219
|
+
if (!detailed.failure) {
|
|
220
|
+
return { action: "ok", state: { ...FRESH_LEASE_MONITOR_STATE } };
|
|
221
|
+
}
|
|
222
|
+
if (!detailed.transient) {
|
|
223
|
+
return { action: "fail", state: input.state, failure: detailed.failure };
|
|
224
|
+
}
|
|
225
|
+
const transientStreak = input.state.transientStreak + 1;
|
|
226
|
+
if (transientStreak >= policy.maxTransientFailures) {
|
|
227
|
+
return {
|
|
228
|
+
action: "fail",
|
|
229
|
+
state: { transientStreak, nextCheckAtMs: input.state.nextCheckAtMs },
|
|
230
|
+
failure: detailed.failure,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
const backoffMs = Math.min(policy.backoffBaseMs * 2 ** (transientStreak - 1), policy.backoffMaxMs);
|
|
234
|
+
return {
|
|
235
|
+
action: "transient",
|
|
236
|
+
state: { transientStreak, nextCheckAtMs: nowMs + backoffMs },
|
|
237
|
+
failure: detailed.failure,
|
|
238
|
+
backoffMs,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=workspace-run-lease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-run-lease.js","sourceRoot":"","sources":["../src/workspace-run-lease.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import type { AlanMcpRegistration, TerminalRef, TerminalSnapshot } from "@alan-ai/shared/agent";
|
|
2
|
+
import { type AgentRunState } from "@alan-ai/shared/agent-liveness";
|
|
3
|
+
import type { AgentLifecycleContext, AgentLifecycleLogger } from "./lifecycle-logger.js";
|
|
4
|
+
import type { AgentEvent } from "./types.js";
|
|
5
|
+
export interface ResolvedImage {
|
|
6
|
+
id: string;
|
|
7
|
+
data: string;
|
|
8
|
+
mimeType: string;
|
|
9
|
+
filename: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ResolvedFileAttachment {
|
|
12
|
+
id: string;
|
|
13
|
+
data: string;
|
|
14
|
+
mimeType: string;
|
|
15
|
+
filename: string;
|
|
16
|
+
size: number;
|
|
17
|
+
label: string;
|
|
18
|
+
}
|
|
19
|
+
export interface UserMessagePayload {
|
|
20
|
+
text: string;
|
|
21
|
+
images?: ResolvedImage[];
|
|
22
|
+
files?: ResolvedFileAttachment[];
|
|
23
|
+
providerSessionId?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Compact recent transcript the runner injects when a `providerSessionId`
|
|
26
|
+
* resume fails on this turn (provider session store lost/corrupt on the
|
|
27
|
+
* machine). Server-computed per resume dispatch (buildSharedAgentPayload);
|
|
28
|
+
* carried here so interactive multi-turn resumes rehydrate with context
|
|
29
|
+
* instead of amnesiac. Only meaningful alongside `providerSessionId`.
|
|
30
|
+
*/
|
|
31
|
+
resumeFallbackContext?: string;
|
|
32
|
+
backendKind?: string;
|
|
33
|
+
agentId?: string;
|
|
34
|
+
agentPrompt?: string;
|
|
35
|
+
selectedModel?: string;
|
|
36
|
+
selectedContextWindow?: string | null;
|
|
37
|
+
selectedEffortLevel?: string | null;
|
|
38
|
+
mode?: string;
|
|
39
|
+
/** Structured task metadata for system prompt injection. */
|
|
40
|
+
taskMeta?: {
|
|
41
|
+
id: string;
|
|
42
|
+
title: string;
|
|
43
|
+
description: string | null;
|
|
44
|
+
status: string;
|
|
45
|
+
priority: string;
|
|
46
|
+
labels: string[] | null;
|
|
47
|
+
assignees: Array<{
|
|
48
|
+
name: string | null;
|
|
49
|
+
email: string;
|
|
50
|
+
}>;
|
|
51
|
+
descriptionAttachmentIds?: Array<{
|
|
52
|
+
id: string;
|
|
53
|
+
filename: string;
|
|
54
|
+
}>;
|
|
55
|
+
linkedResources?: Array<{
|
|
56
|
+
id: string;
|
|
57
|
+
type: "document" | "whiteboard" | "url";
|
|
58
|
+
title: string;
|
|
59
|
+
url?: string;
|
|
60
|
+
}>;
|
|
61
|
+
};
|
|
62
|
+
/** Structured pull-request metadata for PR Review Agent sessions. */
|
|
63
|
+
prMeta?: {
|
|
64
|
+
prNumber: number;
|
|
65
|
+
owner: string;
|
|
66
|
+
repo: string;
|
|
67
|
+
title: string;
|
|
68
|
+
body?: string;
|
|
69
|
+
baseBranch: string;
|
|
70
|
+
headBranch: string;
|
|
71
|
+
author?: string;
|
|
72
|
+
state: "open" | "closed" | "merged";
|
|
73
|
+
mergeable?: boolean | null;
|
|
74
|
+
labels: string[];
|
|
75
|
+
changedFilesCount?: number;
|
|
76
|
+
additions?: number;
|
|
77
|
+
deletions?: number;
|
|
78
|
+
changedFiles?: Array<{
|
|
79
|
+
path: string;
|
|
80
|
+
status: string;
|
|
81
|
+
additions: number;
|
|
82
|
+
deletions: number;
|
|
83
|
+
}>;
|
|
84
|
+
linkedTaskReadableId?: string | null;
|
|
85
|
+
linkedTaskId?: string | null;
|
|
86
|
+
linkedTaskNumber?: number | null;
|
|
87
|
+
htmlUrl?: string;
|
|
88
|
+
};
|
|
89
|
+
/** Workflow tool allowlist (present when triggered from a workflow). */
|
|
90
|
+
workflowTools?: Array<{
|
|
91
|
+
type: string;
|
|
92
|
+
id: string;
|
|
93
|
+
}>;
|
|
94
|
+
/**
|
|
95
|
+
* Per-run Alan MCP registration (fresh PAT + run-scoped headers). When present
|
|
96
|
+
* the sandbox agent writes/refreshes the backend's MCP config before spawning
|
|
97
|
+
* the CLI instead of relying solely on provision-time injection.
|
|
98
|
+
*/
|
|
99
|
+
alanMcp?: AlanMcpRegistration;
|
|
100
|
+
/** Agent run ID for status tracking. */
|
|
101
|
+
runId?: string;
|
|
102
|
+
/** Message ID that triggered this run. */
|
|
103
|
+
messageId?: string;
|
|
104
|
+
/** Maximum number of agent iterations. */
|
|
105
|
+
maxIterations?: number;
|
|
106
|
+
/** Task ID for MCP artifact creation. */
|
|
107
|
+
taskId?: string;
|
|
108
|
+
/** Cloud environment ID for telemetry correlation. */
|
|
109
|
+
cloudEnvironmentId?: string;
|
|
110
|
+
/** Conversation ID for MCP artifact creation. */
|
|
111
|
+
conversationId?: string;
|
|
112
|
+
/** Role attached to this conversation. */
|
|
113
|
+
/** Team ID of the active team context — injected into system prompt for MCP calls. */
|
|
114
|
+
teamId?: string;
|
|
115
|
+
/** User who initiated the run. */
|
|
116
|
+
currentUser?: {
|
|
117
|
+
id: string;
|
|
118
|
+
name: string | null;
|
|
119
|
+
email: string;
|
|
120
|
+
};
|
|
121
|
+
terminalContextRefs?: TerminalRef[];
|
|
122
|
+
terminalSnapshots?: TerminalSnapshot[];
|
|
123
|
+
}
|
|
124
|
+
export interface WSClientCallbacks {
|
|
125
|
+
/**
|
|
126
|
+
* Handle an incoming user message. May be synchronous or return a promise —
|
|
127
|
+
* either way, the `user_message` socket.io ack is held until this settles
|
|
128
|
+
* (see the handler in `setupListeners`), so the server only sees `ok:true`
|
|
129
|
+
* once the message is durably handed off (e.g. enqueued on the run loop),
|
|
130
|
+
* not merely received. Throwing or rejecting acks `{ ok: false }` so the
|
|
131
|
+
* server's delivery-failure handling treats the send as undelivered instead
|
|
132
|
+
* of silently dropping it.
|
|
133
|
+
*/
|
|
134
|
+
onUserMessage: (payload: UserMessagePayload) => void | Promise<void>;
|
|
135
|
+
onStop: () => void;
|
|
136
|
+
onToolResponse?: (toolId: string, response: string) => void;
|
|
137
|
+
onConnect?: () => void;
|
|
138
|
+
onDisconnect?: (reason: string) => void;
|
|
139
|
+
/**
|
|
140
|
+
* Current run state for the liveness heartbeat. When omitted the agent is
|
|
141
|
+
* reported as idle. Called on every hello/heartbeat/probe.
|
|
142
|
+
*/
|
|
143
|
+
getRunState?: () => AgentRunState;
|
|
144
|
+
}
|
|
145
|
+
export declare class WSClient {
|
|
146
|
+
private readonly lifecycle?;
|
|
147
|
+
private socket;
|
|
148
|
+
/** Stable id for this agent process; fences stale heartbeats server-side. */
|
|
149
|
+
private readonly agentSessionId;
|
|
150
|
+
/** Monotonic heartbeat sequence — advances on every hello + heartbeat. */
|
|
151
|
+
private heartbeatSeq;
|
|
152
|
+
private heartbeatTimer;
|
|
153
|
+
private readonly agentVersion;
|
|
154
|
+
private getRunState?;
|
|
155
|
+
/**
|
|
156
|
+
* Durable at-least-once delivery for stream events. Active only when
|
|
157
|
+
* `ALAN_EVENT_OUTBOX_ENABLED === "true"`; otherwise events are fired-and-
|
|
158
|
+
* forgotten exactly as before (see {@link SandboxEventDispatcher}).
|
|
159
|
+
*/
|
|
160
|
+
private readonly eventDispatcher;
|
|
161
|
+
/**
|
|
162
|
+
* Bounded record of `messageId`s whose handoff to `onUserMessage` already
|
|
163
|
+
* completed successfully. A redelivered `user_message` for one of these ids
|
|
164
|
+
* (e.g. the original `ok:true` ack was lost in transit and the server's
|
|
165
|
+
* ≤5-attempt redelivery re-armed the run) is re-acked `{ ok: true }`
|
|
166
|
+
* without invoking the handler again, so the message is never processed
|
|
167
|
+
* twice. A `Set`'s insertion order doubles as recency, so eviction is just
|
|
168
|
+
* "drop the oldest key" — a minimal LRU without extra bookkeeping.
|
|
169
|
+
*/
|
|
170
|
+
private readonly acceptedMessageIds;
|
|
171
|
+
constructor(wsUrl: string, sessionId: string, // conversationId
|
|
172
|
+
taskId: string, token: string, // sandboxSessionToken
|
|
173
|
+
callbacks: WSClientCallbacks, agentVersion?: string, lifecycle?: AgentLifecycleLogger | undefined);
|
|
174
|
+
/** Record a successfully-handed-off messageId, evicting the oldest entry past the cap. */
|
|
175
|
+
private rememberAcceptedMessageId;
|
|
176
|
+
/**
|
|
177
|
+
* Record the run id for events emitted from here on, so the durable outbox can
|
|
178
|
+
* bucket per-run caps and terminal-event condensation correctly. No-op when the
|
|
179
|
+
* outbox is disabled.
|
|
180
|
+
*/
|
|
181
|
+
setCurrentRunId(runId: string | undefined): void;
|
|
182
|
+
private currentRunState;
|
|
183
|
+
private buildHeartbeat;
|
|
184
|
+
/** Emit `agent.hello` on (re)connect and (re)start the heartbeat interval. */
|
|
185
|
+
private startHeartbeat;
|
|
186
|
+
private stopHeartbeat;
|
|
187
|
+
emitEvent(event: AgentEvent): void;
|
|
188
|
+
waitForConnection(timeoutMs?: number): Promise<void>;
|
|
189
|
+
get connected(): boolean;
|
|
190
|
+
setLifecycleContext(context: AgentLifecycleContext): void;
|
|
191
|
+
close(): void;
|
|
192
|
+
private setupListeners;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=ws-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAMzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,QAAQ,CAAC,EAAE;QACT,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,SAAS,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzD,wBAAwB,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACnE,eAAe,CAAC,EAAE,KAAK,CAAC;YACtB,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,KAAK,CAAC;YACxC,KAAK,EAAE,MAAM,CAAC;YACd,GAAG,CAAC,EAAE,MAAM,CAAC;SACd,CAAC,CAAC;KACJ,CAAC;IACF,qEAAqE;IACrE,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACpC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC7F,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,wEAAwE;IACxE,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD;;;;OAIG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,WAAW,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,mBAAmB,CAAC,EAAE,WAAW,EAAE,CAAC;IACpC,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,aAAa,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,aAAa,CAAC;CACnC;AAWD,qBAAa,QAAQ;IAkCjB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAjC7B,OAAO,CAAC,MAAM,CAAS;IAEvB,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,0EAA0E;IAC1E,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,WAAW,CAAC,CAAsB;IAC1C;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IACzD;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;gBAGtD,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EAAE,iBAAiB;IACpC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,sBAAsB;IACrC,SAAS,EAAE,iBAAiB,EAC5B,YAAY,CAAC,EAAE,MAAM,EACJ,SAAS,CAAC,EAAE,oBAAoB,YAAA;IAmCnD,0FAA0F;IAC1F,OAAO,CAAC,yBAAyB;IASjC;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIhD,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,cAAc;IAWtB,8EAA8E;IAC9E,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,aAAa;IAOrB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAMlC,iBAAiB,CAAC,SAAS,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnD,IAAI,SAAS,IAAI,OAAO,CAEvB;IACD,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAGzD,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,cAAc;CAiHvB"}
|