diff options
| author | Adam Malczewski <[email protected]> | 2026-06-28 08:57:17 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-28 08:57:17 +0900 |
| commit | 73ff84c606f5307e5f40e649cae9f93484c0d99d (patch) | |
| tree | 67444812b587135eadb15316ec2a0467b9f289c0 | |
| parent | 1cd66da48f8c0a35b4208202d07bcd9f20fbc2c2 (diff) | |
| download | dispatch-73ff84c606f5307e5f40e649cae9f93484c0d99d.tar.gz dispatch-73ff84c606f5307e5f40e649cae9f93484c0d99d.zip | |
fix: disable LSP + change memory telemetry interval to 15s
- Disable LSP extension (import + CORE_EXTENSIONS) due to crashes
- Make transport-http tolerate LSP being absent (optional getService)
- Remove lsp from transport-http dependsOn manifest
- Change memory telemetry sample interval from 60s to 15s
| -rw-r--r-- | packages/host-bin/src/main.ts | 6 | ||||
| -rw-r--r-- | packages/host-bin/src/mem-telemetry.ts | 10 | ||||
| -rw-r--r-- | packages/transport-http/src/extension.ts | 13 |
3 files changed, 19 insertions, 10 deletions
diff --git a/packages/host-bin/src/main.ts b/packages/host-bin/src/main.ts index f892fe8..29e402e 100644 --- a/packages/host-bin/src/main.ts +++ b/packages/host-bin/src/main.ts @@ -21,7 +21,9 @@ import { type SecretsAccess, type StorageNamespace, } from "@dispatch/kernel"; -import { extension as lspExt } from "@dispatch/lsp"; +// LSP temporarily disabled — crashes (unhandled JSON parse, ENOENT on +// transient .old_modules dirs) and a memory leak. Re-enable after fix. +// import { extension as lspExt } from "@dispatch/lsp"; import { extension as mcpExt } from "@dispatch/mcp"; import { extension as messageQueueExt } from "@dispatch/message-queue"; import { extension as providerConcurrencyExt } from "@dispatch/provider-concurrency"; @@ -106,7 +108,7 @@ const CORE_EXTENSIONS: readonly Extension[] = [ skillsExt, systemPromptExt, cacheWarmingExt, - lspExt, + // lspExt, // LSP temporarily disabled — see import above // ssh declares `dependsOn: ["exec-backend"]` and PROVIDES the remote // exec-backend factory + the ComputerService the HTTP routes delegate to. // Its lookups are lazy (tool-/request-time), but it is placed after diff --git a/packages/host-bin/src/mem-telemetry.ts b/packages/host-bin/src/mem-telemetry.ts index 7f0bb42..576347b 100644 --- a/packages/host-bin/src/mem-telemetry.ts +++ b/packages/host-bin/src/mem-telemetry.ts @@ -23,8 +23,8 @@ import { memorySampleAttributes, } from "@dispatch/session-orchestrator"; -/** Default periodic sample interval: every 60s. */ -export const DEFAULT_MEMORY_SAMPLE_INTERVAL_MS = 60_000; +/** Default periodic sample interval: every 15s. */ +export const DEFAULT_MEMORY_SAMPLE_INTERVAL_MS = 15_000; /** Default GC interval: every 5 min (longer than the sample interval). */ export const DEFAULT_GC_INTERVAL_MS = 5 * 60_000; @@ -52,7 +52,7 @@ export interface MemoryTelemetryDeps { * baseline. */ readonly getActiveConversationCount: () => number; - /** Periodic sample interval (ms). Defaults to 60s. */ + /** Periodic sample interval (ms). Defaults to 15s. */ readonly sampleIntervalMs?: number; /** GC interval (ms). Defaults to 5 min. */ readonly gcIntervalMs?: number; @@ -77,7 +77,7 @@ export interface MemoryTelemetryHandle { /** * Start periodic memory telemetry. Logs process.memoryUsage() every - * `sampleIntervalMs` (default 60s) tagged with the active-conversation count, + * `sampleIntervalMs` (default 15s) tagged with the active-conversation count, * and every `gcIntervalMs` (default 5 min) runs `gc()` and logs RSS * before/after to distinguish live retained objects from GC fragmentation. * @@ -97,7 +97,7 @@ export function startMemoryTelemetry(deps: MemoryTelemetryDeps): MemoryTelemetry let gcHandle: MemoryTimerHandle | undefined; // Periodic sample: log rss/heap/external/arrayBuffers + active-conversation - // count every 60s. Correlates RSS growth with active turns so the leak can + // count every 15s. Correlates RSS growth with active turns so the leak can // be attributed to the streaming path vs an idle baseline. const sampleHandle: MemoryTimerHandle | undefined = setIntervalFn(() => { const sample = deps.sampleMemory(); diff --git a/packages/transport-http/src/extension.ts b/packages/transport-http/src/extension.ts index f46fca5..5d394b8 100644 --- a/packages/transport-http/src/extension.ts +++ b/packages/transport-http/src/extension.ts @@ -11,6 +11,7 @@ import { credentialStoreHandle, heartbeatServiceHandle, lspServiceHandle, + type LspService, mcpServiceHandle, sessionOrchestratorHandle, systemPromptHandle, @@ -27,7 +28,6 @@ export const manifest: Manifest = { "conversation-store", "credential-store", "heartbeat", - "lsp", "mcp", "session-orchestrator", "throughput-store", @@ -95,7 +95,14 @@ export function createTransportHttpExtension(): Extension & { const throughputStore = host.getService(throughputStoreHandle); const warmService = host.getService(cacheWarmHandle); const compactionService = host.getService(compactionHandle); - const lspService = host.getService(lspServiceHandle); + // Optional: the `lsp` extension may be disabled (hot-fix). Wrapped because + // getService throws for an unregistered handle — degrades to no diagnostics. + let lspService: LspService | undefined; + try { + lspService = host.getService(lspServiceHandle); + } catch { + lspService = undefined; + } const mcpService = host.getService(mcpServiceHandle); const systemPromptService = host.getService(systemPromptHandle); const heartbeatService = host.getService(heartbeatServiceHandle); @@ -128,7 +135,7 @@ export function createTransportHttpExtension(): Extension & { throughputStore, warmService, compactionService, - lspService, + ...(lspService !== undefined ? { lspService } : {}), mcpService, systemPromptService, heartbeatService, |
