feat(apex-lsp-extension): Effect Platform multi-worker topology with enrichment offload - W-22007395#330
Draft
peternhale wants to merge 42 commits intomainfrom
Draft
feat(apex-lsp-extension): Effect Platform multi-worker topology with enrichment offload - W-22007395#330peternhale wants to merge 42 commits intomainfrom
peternhale wants to merge 42 commits intomainfrom
Conversation
- Add Claude/Cursor skills, hooks, agents, and rules updates - Knip: e2e entries, vsce ignore; remove dead code - apex-lsp-shared: @jest/globals; apex-ls: trim direct deps - Remove unused CaseInsensitiveStringSet; drop e2e pages barrel - pr-draft safety text; block-git-hook-bypass hook Made-with: Cursor
Add foundational worker thread infrastructure for the Apex language server using effect platform serialized worker system. Steps completed: - Step 0: Add effect platform dependencies - Step 1: Define wire DTOs with Schema.TaggedRequest - Step 2: Create worker.platform.ts entry with role guards - Step 3: WorkerCoordinator vertical slice behind feature flag - Step 4: Full pool topology with integration tests Made-with: Cursor
Wire the worker topology with real dispatch infrastructure: - Step 5: LSP priority queue manager with worker dispatch strategy - Step 6: Worker topology dispatcher (executeEffect, batch ingestion) - Step 7: Worker→coordinator assistance proxy (parentPort IPC) - Step 8: Workspace batch ingestion offloaded to data-owner worker - Step 9: ResourceLoader migrated to resource-loader worker with IPC proxy - Step 10: Browser worker entry (BrowserWorkerRunner, polyfills, sanitization) Made-with: Cursor
Replace worker handler stubs with actual processing service delegation: - WorkerBackendBootstrap bootstraps role-specific services in workers - Data-owner handlers parse documents via DocumentProcessingService - Enrichment handlers delegate to hover/definition/references/etc services - canDispatch gates opened for all types except completion/signatureHelp/rename - QuerySymbolSubset returns real symbol table data from worker ISymbolManager Made-with: Cursor
Step 12: WorkerTransport/WorkerPoolTransport interfaces in
lsp-compliant-services abstract @effect/platform Worker behind opaque
handles. EffectPlatformWorkerTransport is the concrete adapter.
TransportTopologyDispatcher routes through the transport interface.
MockWorkerTransport enables unit testing without real threads.
Step 13: Add apex.experimental.workers.{enabled,poolSize,resourceLoader}
settings to extension package.json. Create ADR documenting topology,
wire contract, sole-entry invariant, and coordinator-only exceptions.
Made-with: Cursor
- Disable WorkerLoggerLayer and WorkerLogLevelChange message posting via parentPort — custom messages collide with @effect/platform worker protocol, crashing worker fibers. Both need a dedicated MessageChannel (future work). - Add enrichment types (hover, definition, references, etc.) to COORDINATOR_ONLY_TYPES — enrichment workers have no document data until Step 11 data sharing is implemented, so requests fall back to local handler processing. - Guard worker topology initialization with require.resolve check for node:worker_threads to prevent browser bundle crashes. - Wire worker log-level propagation via WorkerInit.logLevel at startup, add WorkerLogMessage/WorkerLogLevelChange schemas, and add coordinator-side log message forwarding. Made-with: Cursor
Made-with: Cursor
- Unify LSPRequestType/WireLspRequestType into single LSP_REQUEST_TYPES const array in apex-lsp-shared, deriving both TS union and Schema literal - Extract enrichmentHandler factory in worker.platform.ts, reducing 7 copy-paste handlers to factory + one-liner configs - Extract dataOwnerDocHandler factory for 4 document mutation handlers - Add cloneForWire helper replacing 11 JSON.parse(JSON.stringify()) calls - Define DISPATCH_ROUTING registry in WorkerCoordinator, deriving DATA_OWNER_TYPES and COORDINATOR_ONLY_TYPES automatically - Share WorkerTopologyStatus type from WorkerDispatchStrategy instead of duplicating in WorkerCoordinator - Share AssistanceRequestPayload/ResponsePayload and guards from workerWireSchemas instead of inline definitions in mediator and worker - Add handleLspRequest helper in LCSAdapter, reducing 5 protocol handlers from ~20 lines each to ~7 lines - Convert LSPQueueManager to typed Effect.Service with proper error handling via Fiber.join, removing manual Cause dissection - Remove unsafe as-any casts, replace with proper interfaces - Fix TypeScript parameter properties incompatible with Node strip-only mode Made-with: Cursor
…e functions Extract ApexSymbolManager/ApexSymbolRefManager monoliths into a layered Effect architecture: 5 data service Tags with shim Layers (SymbolIndexStore, ReferenceStore, CacheStore, FileStateStore, ConcurrencyGuards), 7 standalone function modules (symbolLookup, typeHierarchy, referenceOps, graphAnalysis, symbolProvider, symbolMutation, symbolResolution, stdlibLoading), an IEffectSymbolManager facade Layer, a Ref-based SymbolIndexStoreLive, and a shared mock factory. Eliminate Ref-class-field sync bridges in ApexSymbolRefManager. This enables worker proxy via Layer swap without interface changes. Made-with: Cursor
All ~32 ISymbolManager/SymbolProvider methods now return Promise<T>, enabling transparent IPC proxying for enrichment workers. Cascaded async/await through ApexSymbolManager internals (~130 sites), resolution rules, 19 validators (via yield* Effect.promise), 15 processing services, the Effect facade, all mocks, and ~200 test sites. Made-with: Cursor
Extract ~5,300 lines from ApexSymbolManager into standalone async functions, reducing the class from ~10,730 to ~6,094 lines. The class now delegates to extracted ops modules via a SymbolManagerOps structural interface. - positionUtils.ts: pure position/location checking helpers - resolutionContext.ts: fallback context and text-based helpers - symbolRefResolution.ts: standard class/type resolution, qualifier extraction, stdlib loading - chainResolution.ts: chain walking, member resolution, disambiguation, qualified reference resolution - services/symbolResolver.ts: SymbolResolver Effect service tag and SymbolManagerOps interface to break mutual recursion - addSymbolTableAsync wrapper to bridge Effect.Effect<void> return type with Promise-based ops interface Made-with: Cursor
…over - Remove scope-strategy fallback from no-references path: scope's containment result is the enclosing method/class, not the token the cursor is on, so it returns wrong results for keywords/whitespace. - Remove scope-strategy fallback from references path for same reason; precise + enrichment handle chained-ref resolution correctly. - DML keyword hover (insert/update AS SYSTEM) and SOQL keyword hover (WITH SYSTEM_MODE) now correctly return null. - Add getEffectiveServerMode() for worker bundle mode detection. - Remove dev-only metrics block that caused errors in worker graphs. Made-with: Cursor
Enable enrichment workers to enrich symbol tables locally and write back to data-owner with version validation. Wire Protocol (Phase 1): - Extend QuerySymbolSubset to return version and detailLevel metadata - Add UpdateSymbolSubset schema with validation fields - Data owner validates: version match, detail level strictly higher Enrichment Worker Write-Back (Phase 2): - Add worker ID tracking for telemetry - Return version metadata from loadSymbolDataForEnrichment - Implement writeBackEnrichedSymbols helper - Integrate write-back in DispatchHover Enrichment Level Detection (Phase 3): - Add shouldEnrich utility using LayerEnrichmentService ordering - Configure hover to require 'full' detail level - Conditional write-back based on enrichment need Coordinator Integration (Phase 4): - Route UpdateSymbolSubset through queryDataOwner - Export UpdateSymbolSubset from apex-lsp-shared - Update web worker QuerySymbolSubset with version metadata Testing & Observability (Phases 5-6): - Unit tests for UpdateSymbolSubset validation - Track write-back metrics: accepted, rejected (version/level/missing) - Debug logging for data owner and enrichment workers Documentation (Phase 8): - Comprehensive doc: docs/architecture/version-aware-writeback.md - Validation rules, flow, metrics, future optimizations Pattern: Single data-owner (writer) + enrichment pool (readers/enrichers) solves single-worker performance bottleneck via distributed enrichment.
…apping bug Fix deadlock in UpdateSymbolSubset handler: - addSymbolTable returns Effect, now yields directly - Was double-wrapping with Effect.promise(Effect.runPromise(...)) Adds tests and guides: - WriteBackProtocol.debug.test.ts: minimal test (PASSING) - WriteBackProtocol.simple.test.ts: validation tests (2/4 pass) - Debugging guide and manual test guide Write-back protocol validation works correctly.
Enable Effect.logDebug messages from workers by fixing two issues: 1. Set Effect Logger.minimumLogLevel to Debug (was filtering at Info) 2. Route worker logs through dedicated assistance port (avoid protocol collision) 3. Simplify configuration by removing separate apex.worker.logLevel setting Changes: - WorkerLoggerLayer: Add Logger.minimumLogLevel(LogLevel.Debug) to allow debug messages through Effect's filter - workerLogger: Use assistPort ?? parentPort to avoid colliding with @effect/platform protocol - CoordinatorAssistanceMediator: Listen for WorkerLogMessage on assistance port - LCSAdapter: Use main apex.logLevel for workers (no separate worker.logLevel) - LSPConfigurationManager: Auto-sync worker log level with main log level - package.json: Remove apex.worker.logLevel setting - Add docs/debugging/enabling-worker-logs.md with architecture and troubleshooting Now apex.logLevel="debug" shows write-back protocol logs: [worker:1] [DATA-OWNER] Write-back accepted: 74 symbols merged... [worker:2] [ENRICHMENT] Write-back accepted: 42 symbols, full level... Tested: Worker logs appear in VS Code Extension Host Output panel
Route pull diagnostics requests to enrichment workers to enable: - Parallel processing across worker pool - Symbol table enrichment with write-back - Consistent detail level progression with hover Changes: - WorkerCoordinator: Change diagnostics routing from 'coordinatorOnly' to 'enrichmentPool' - Worker already has DispatchDiagnostic handler (no changes needed) - buildEnrichmentMessage already supports diagnostics (no changes needed) Now diagnostics and hover both benefit from: - Worker-based enrichment (public-api → protected → private → full) - Write-back protocol to share enriched symbols with data owner - Parallel processing for better performance Debug logs will show: [worker:2] [ENRICHMENT] Write-back accepted: 74 symbols, full level... [worker:0] [DATA-OWNER] Write-back accepted: 74 symbols merged... This is a single-line routing change; infrastructure already in place.
The DispatchDiagnostic handler was missing the write-back logic that DispatchHover has, causing diagnostics to run enrichment but not share the results back to the data owner. Changes: - Add loadSymbolDataForEnrichment call to get current detail level - Add shouldEnrich check to determine if enrichment is needed - Add writeBackEnrichedSymbols call when enrichment occurs - Match the pattern used in DispatchHover handler Now diagnostics will: 1. Load current symbol data from data owner 2. Check if enrichment is needed (current < full) 3. Run diagnostics processing (which enriches symbols) 4. Write back enriched symbols to data owner Debug logs will show: [WorkerDispatch] → enrichmentPool: diagnostics [worker:2] [ENRICHMENT] Write-back accepted: 74 symbols, full level... [worker:0] [DATA-OWNER] Write-back accepted: 74 symbols merged...
- Pass logLevel and serverMode to EffectPlatformWorkerTransport - Add logLevel to WriteBackProtocol debug test config - Remove excessive debug logs from CodeLensProcessingService - Update WorkerCoordinator test to reflect diagnostics routing change
- Route definition to enrichmentPool in DISPATCH_ROUTING - Add write-back logic to DispatchDefinition handler - Update WorkerCoordinator test to reflect definition routing change Definition requests now run on enrichment workers with write-back protocol, matching the pattern used by hover and diagnostics.
… resolution
cloneForWire (JSON round-trip) strips class prototypes, so enrichment
workers received plain objects instead of SymbolTable instances when
requesting stdlib classes via IPC. This silently broke hover and
goto-definition on standard types like String.
Two fixes:
- SymbolTable.fromJSON now handles the toJSON wire format ({key,symbol}
entries) by unwrapping inner symbol objects before reconstruction.
- The enrichment worker's remote getSymbolTable calls fromJSON to
rebuild a proper SymbolTable instance from the IPC response.
…orker topology failures The web jest config (setup-web.js) was missing the APEX_LS_DISABLE_WORKER_TOPOLOGY_EXIT env var that jest-setup.ts already sets for Node tests. Worker topology init failures in the jsdom environment called process.exit(1), crashing 2 test suites.
…solution When precise symbol resolution failed, hover fell back to the scope strategy which returns the nearest containing symbol (e.g. the enclosing method). This displayed misleading hover info for unresolved types instead of showing nothing.
…ment workers Enrichment workers only loaded the current file's symbols from the data-owner, so cross-file references (e.g. FileUtilities.createFile) could not resolve — hover and goto-def failed for workspace classes. Adds a two-phase load in loadSymbolDataForEnrichment: 1. Load current file's symbol table (existing behavior) 2. Extract unresolved CLASS_REFERENCE/CONSTRUCTOR_CALL names from its references, send them to the data-owner via a new ResolveDepUris message, and ingest the returned dependency symbol tables The data-owner resolves class names to file URIs via findFilesForSymbol and returns the corresponding symbol tables in a single round trip.
These are build artifacts already listed in .gitignore but were previously committed. Removing from tracking so they stop appearing in diffs.
…ce processing The syncRefsToClassFields and syncClassFieldsFromRefs methods were incorrectly marked as no-ops. This caused Effect Ref state to diverge from class field state during deferred reference batch processing, leading to stale data when queueing and retrieving deferred references. Also adds shared AI skills for language server architecture.
Local Claude Code permission settings should not be tracked.
Resolved conflicts: - 14 semantic validators: combined our async ISymbolManager wrappers with main's typed narrowing helpers (isClassSymbol, etc.) - ApexSymbolManager.ts: kept our extracted ops delegation - ResourceLoaderIntegration.test.ts: kept await + main's updated FQN - package-lock.json: regenerated
Picks up CI dependabot automerge workflow change.
These generated files are already in .gitignore but were previously committed. Removing from tracking.
Ephemeral working files, not source.
Test runner download cache, not source.
E2E Test Results SummaryRun: 441 No test results found Searched for Specs With No ResultsThe following specs did not produce test results. This usually means the job crashed before tests ran (e.g. build failure, infra error, dependency download timeout).
ArtifactsView detailed test reports in the Artifacts section. |
Introduces a new compilation worker role that handles all public-api compilation, keeping the data-owner responsive for read queries and the enrichment interface clean of raw source handling. Key changes: - New CompileDocument and WorkspaceBatchCompile wire messages - Compilation worker compiles files and writes back symbols to data-owner via the existing UpdateSymbolSubset assistance channel - Dual dispatch for didOpen/didChange: data-owner stores content, compilation worker compiles in parallel - Post-workspace-load batch compilation: 648 files in ~8s (81 files/sec) - Data-owner DispatchDocumentOpen/Change slimmed to storage-only - Queue state webview updated with Compilation worker card - Fix: write-back detail level check treats missing cache entry as level 0 (no symbols) instead of defaulting to public-api - Fix: inject real stdlib provider into coordinator symbol manager after ResourceLoader init, fixing web-mode hover for stdlib types - Add test:web:debug npm script with --log-level override support
…hreads Workers now inherit profiling (--cpu-prof, --heap-prof), debug (--inspect=0 for auto-assigned ports), and heap-size flags from the main LS process. - Add WorkerExecArgvBuilder: pure utility that derives per-role execArgv from process.execArgv (profile dirs get role subdirectories, debug ports become port 0, passthrough flags kept as-is) - Add workerLayerFactory to TopologyConfig with overloaded initializeTopology so per-role layers can provide custom WorkerOptions (execArgv, name) - Name worker threads apex-worker-<role> for Chrome DevTools visibility - Forward worker stderr with role labels for debug port discoverability - Pre-create per-role profile subdirectories in the extension client - Update ADR, worker logging docs, and architecture skill files
…ace symbol visibility Add QueryGraphData IPC request and wire the apex/graphData LSP handler through the worker dispatcher so graph queries execute against the data-owner's symbol manager (populated by batch ingest + enrichment write-backs) rather than the empty coordinator-side manager. - workerWireSchemas: add QueryGraphData TaggedRequest, DataOwnerTags entry, union member - worker.platform: handle QueryGraphData in data-owner using GraphDataProcessingService - WorkerCoordinator: extend createDispatcher with queryGraphData() routing to data-owner - LCSAdapter: route apex/graphData through workerDispatcher.queryGraphData() when topology active - showGraph.ts: fix prettier lint on inline object literals - WorkerCoordinator.test: add live-worker and transport-unit tests for queryGraphData routing Made-with: Cursor
…ing details - README: expand Language Server Implementation with full architecture section covering request pipeline, multi-worker topology diagram, worker roles, cross-worker IPC patterns, wire protocol, transport isolation, and settings - ADR: add QueryGraphData to data-owner responsibilities; note graph visualization fix in Consequences; correct resource-loader count from 0-1 to always-1; clarify resourceLoader flag is test-only; add LCSAdapter and diagrams to refs Made-with: Cursor
* chore: bump versions for release [skip ci] * chore: bump versions for release [skip ci] * chore: bump versions for release [skip ci] * fix(security): initial security audit remediation - W-22109681 (#331) * fix(apex-lsp-web): escape queue dashboard bootstrap errors Escape initialization errors before rendering them into the queue dashboard empty state. Made-with: Cursor * fix(apex-lsp-web): escape inline webview json payloads Escape serialized webview data before embedding it in script tags to prevent tag breaks. Made-with: Cursor * fix(apex-lsp-web): use secure webview csp nonces Generate webview CSP nonces with Web Crypto so they are not derived from Math.random. Made-with: Cursor * fix(apex-lsp-web): validate webview message origins Ignore webview messages whose origin does not match the current webview origin. Made-with: Cursor * fix(ci): move shell expressions into environment variables Use env vars in ci.yml before shell evaluation. Made-with: Cursor * fix(ci): move nightly shell input into environment variables Use an env var in nightly.yml before shell evaluation. Made-with: Cursor * fix(ci): disable checkout credential persistence Set persist-credentials to false for ci.yml jobs that do not push. Made-with: Cursor * fix(ci): disable nightly checkout credential persistence Set persist-credentials to false for the nightly get-extensions checkout. Made-with: Cursor * fix(deps): bump knip to 6.4.1 Update knip and refresh the lockfile to remove the smol-toml audit finding. Made-with: Cursor * fix(deps): update extension packaging tooling Bump vscode-services and vsce to reduce audit findings in the extension toolchain. Made-with: Cursor * fix(deps): update browser test tooling Bump @vscode/test-web and refresh path-to-regexp to clear that audit finding. Made-with: Cursor * fix(repo): remove stale Commitizen tooling Drop the unused Commitizen workflow and refresh the lockfile to clear lodash and tmp findings. Made-with: Cursor * build(repo): upgrade semantic-release to v25 Update semantic-release and align the release config with installed plugins. Made-with: Cursor * fix(apex-lsp-web): remove browser crypto polyfill Replace bundled crypto helpers so web builds no longer need crypto-browserify. Made-with: Cursor * docs(repo): update security audit report with remediation status Made-with: Cursor * fix(ci): remove orphaned eda gitlink and add explicit submodules: false actions/checkout@v6 enumerates submodule configuration even when submodules recursion is disabled, causing a fatal error when a gitlink entry exists in the index without a matching .gitmodules URL. - Remove dangling gitlink for packages/apex-parser-ast/test/fixtures/eda (no tests reference this path; no .gitmodules entry exists for it) - Add explicit submodules: false to all checkout steps in ci.yml and nightly.yml to make the intent unambiguous and prevent future regressions Made-with: Cursor * test(ci): strengthen e2e assertions and remove silent-pass patterns - W-21451133 (#316) * test(ci): strengthen vacuous assertions and remove silent-pass patterns - W-22032496 Replace 8 go-to-definition tests that only checked isApexFileOpen() with content verification assertions that validate actual navigation. Remove try-catch-return pattern in 9 tests that silently passed when test data files failed to open. Made-with: Cursor * fix(ci): use method usage site for post-edit go-to-definition test - W-22032496 F12 on a class declaration can navigate cross-file; use sayHello method reference instead for reliable same-file navigation. Made-with: Cursor * fix: removed open web on startup + gotodef fixes * fix: web specific fixes * build(deps-dev): bump knip from 6.0.1 to 6.4.1 (#328) Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip) from 6.0.1 to 6.4.1. - [Release notes](https://github.com/webpro-nl/knip/releases) - [Commits](https://github.com/webpro-nl/knip/commits/knip@6.4.1/packages/knip) --- updated-dependencies: - dependency-name: knip dependency-version: 6.4.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kyle Walker <kylewalker19@hotmail.com> * build(deps-dev): bump jscpd from 4.0.8 to 4.0.9 (#326) Bumps [jscpd](https://github.com/kucherenko/jscpd) from 4.0.8 to 4.0.9. - [Changelog](https://github.com/kucherenko/jscpd/blob/master/CHANGELOG.md) - [Commits](https://github.com/kucherenko/jscpd/commits) --- updated-dependencies: - dependency-name: jscpd dependency-version: 4.0.9 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kyle Walker <kylewalker19@hotmail.com> * build(deps-dev): bump @typescript-eslint/parser from 8.58.1 to 8.58.2 (#325) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.58.1 to 8.58.2. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.58.2/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-version: 8.58.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kyle Walker <kylewalker19@hotmail.com> * build(deps): bump @salesforce/vscode-i18n from 66.5.2 to 66.7.0 (#324) Bumps [@salesforce/vscode-i18n](https://github.com/forcedotcom/salesforcedx-vscode) from 66.5.2 to 66.7.0. - [Release notes](https://github.com/forcedotcom/salesforcedx-vscode/releases) - [Changelog](https://github.com/forcedotcom/salesforcedx-vscode/blob/develop/CHANGELOG.md) - [Commits](forcedotcom/salesforcedx-vscode@v66.5.2...vscode-i18n-v66.7.0) --- updated-dependencies: - dependency-name: "@salesforce/vscode-i18n" dependency-version: 66.7.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kyle Walker <kylewalker19@hotmail.com> * build(deps-dev): bump @types/node from 20.19.37 to 20.19.39 (#323) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.19.37 to 20.19.39. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 20.19.39 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kyle Walker <kylewalker19@hotmail.com> * build(deps-dev): bump ts-jest from 29.4.6 to 29.4.9 (#322) Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.4.6 to 29.4.9. - [Release notes](https://github.com/kulshekhar/ts-jest/releases) - [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md) - [Commits](kulshekhar/ts-jest@v29.4.6...v29.4.9) --- updated-dependencies: - dependency-name: ts-jest dependency-version: 29.4.9 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kyle Walker <kylewalker19@hotmail.com> * build(deps-dev): bump esbuild from 0.27.7 to 0.28.0 (#319) Bumps [esbuild](https://github.com/evanw/esbuild) from 0.27.7 to 0.28.0. - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](evanw/esbuild@v0.27.7...v0.28.0) --- updated-dependencies: - dependency-name: esbuild dependency-version: 0.28.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kyle Walker <kylewalker19@hotmail.com> * build(deps): co-locate playwright and @playwright/test in e2e-tests (#332) Both packages belong exclusively to E2E testing. Keeping them in the root package.json meant Dependabot bumped them in separate PRs, causing node_modules/.bin/playwright (owned by @playwright/test) to install the wrong Chromium revision while @vscode/test-web resolved a different playwright version from the root. Co-locating both at the same ^1.58.2 constraint in e2e-tests/package.json ensures Dependabot bumps them together and the binary/browser versions stay in sync. Made-with: Cursor * chore: bump versions for release [skip ci] * fix: update pjson --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: GitHub Action <action@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…sage filtering Implement multi-worker topology for VS Code web extensions using Web Workers. Browser workers share the main postMessage channel with Effect protocol; filter non-array messages (WorkerLogMessage, WorkerAssistanceRequest) before they reach the Effect runtime handler to prevent TypeError crashes. - Add worker.platform.web.ts browser worker entry point with BrowserWorkerRunner - Add makeBrowserWorkerLayer to WorkerCoordinator with array-gated filteredWorker - Branch LCSAdapter topology init: Node vs browser - Unminify browser bundles for debugging (minify: false) Made-with: Cursor
… close Replace single-channel AssistancePortInit (sent on self, colliding with Effect's BrowserWorkerRunner.layer handlePort listener) with two dedicated MessageChannels per worker: one for Effect protocol (returned to BrowserWorker.layer), one for logs/assistance (side-channel). Worker defers Effect launch until WorkerPortsInit arrives on self. Remove AssistancePortInit interface and isAssistancePortInit from apex-lsp-shared. Remove debug agent-log fetch instrumentation blocks from HoverProcessingService, MissingArtifactResolutionService, and PrerequisiteOrchestrationService. Made-with: Cursor
…sLog Ensure worker topology init messages (worker script URLs, per-role initialized, topology active, mediator attached) are always visible regardless of the configured log level. Update test mock loggers to include alwaysLog. Made-with: Cursor
…r spinner Replace vscode.window.withProgress notification toast with updates to the Apex language status bar item throughout workspace loading. The spinner runs from file scanning through server-side batch ingestion, clearing only when apex/workspaceIngestionComplete arrives from the server. A new ingestion complete callback in WorkspaceBatchHandler triggers the notification after the daemon fiber finishes processing. Made-with: Cursor
…support into phale/workers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
FileUtilities.createFile) in a single data-owner round tripTest plan
String) — shows class info and goto-def navigates to stdlib sourceFileUtilities.createFile) — shows method signature after artifact resolutionnpm test)What issues does this PR fix or reference?
@W-22007395@