Feat/spindle expansion for loom editor extensions#249
Draft
TheLiquorPriest wants to merge 24 commits into
Draft
Conversation
TheLiquorPriest
force-pushed
the
feat/spindle-expansion-for-loom-editor-extensions
branch
from
July 19, 2026 01:45
2d54423 to
525e307
Compare
TheLiquorPriest
force-pushed
the
feat/spindle-expansion-for-loom-editor-extensions
branch
from
July 19, 2026 02:04
525e307 to
0868059
Compare
Keep callback AbortSignals local to each runtime boundary, preserve host generation liveness, and settle transport failures and cancellation without orphaning bound operations.
Keep callback AbortSignals local to each runtime boundary, preserve host generation liveness, and settle transport failures and cancellation without orphaning bound operations.
…n-for-loom-editor-extensions' into feat/spindle-expansion-for-loom-editor-extensions
Add test-time tracking of droppable and sortable IDs for DND wiring Introduce droppableIds and sortableIds arrays; push IDs in mocks and reset them in afterEach Update a test to assert these IDs are recorded and rename for clarity In LoomBuilder.tsx, close prompts when blockLimitReached
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.
Add capability-bound generation orchestration to Spindle
NOTE: The lumiverse-spindle-types package
Is sourced from my own fork awaiting a merge, so both package.json files will not be modified once that is reflected in staging.
Executive summary
This PR adds a generic, permissioned generation-orchestration contract to Spindle. During an authenticated interceptor callback, an extension can work from an immutable host-captured
request snapshot, resolve the exact connection dispatch, assemble the native prompt, run tracked auxiliary generations, and—with a separate privileged permission—submit a candidate final
assistant response.
Lumiverse remains authoritative over user identity, connection secrets, revision validity, cancellation, deadlines, provider fallback, post-processing, persistence, events, and cleanup.
This PR also adds a versioned host-capability descriptor and frontend/backend compatibility handshake, plus predictable asynchronous frontend readiness, awaited teardown, and host-locale
access. This allows extensions and hosts to reject incompatible combinations before extension code executes.
It adds no new first-party workflow or extension-specific UI. Normal and Continue generation now capture the bound host state needed by these APIs, but ordinary provider behavior remains
unchanged unless an eligible extension explicitly participates.
No Breaking Changes to existing Lumiverse instances or extensions
This PR does not collide with existing functionality or require extensions to be updated, though I'd recommend you take advantage of the additions where applicable.
Why?
The purpose is to let advanced Spindle extensions coordinate multi-stage generation without exposing internal databases, credentials, or unrestricted provider access—and without transferring ownership of critical generation behavior away from Lumiverse.
This lays the ground work for allowing Spindle extensions to introduce behavior to the Loom Editor and logic to its generation pipeline, for example if one desired to write an extension that allows certain prompt blocks to be separate responses from separate agents from the main chat agent that then feed their responses into the preset pipeline, you could do so now.
Essentially the goal is to provide safe and complete control over the Loom Editor and native response generation systems to extensions. This PR achieve this.
Main capability groups
Status: NOT READY
TESTING AND GAP PASS:
ISSUES OBSERVED:
a host-created AbortSignal inside the interceptor context and then sends that context across the Spindle runtime IPC boundary. AbortSignal is not structured-cloneable in Bun.HostContainmentFatal identity is lost across the worker wire, reconstructed as a generic Error, then swallowed by interceptor fallback.Validation (stale)
Environment: Bun 1.3.14
Repository-wide unit suite:
bun testIsolated frontend unit suite:
cd frontend && bun test- 427 passed
- 0 failed
- 1,649 assertions
- 427 tests across 76 files
Backend TypeScript:
bunx tsc --noEmit -p tsconfig.jsonFrontend TypeScript:
cd frontend && bunx tsc --noEmit