Merged
Conversation
All connectors are now installed via `spool connector install` or the app's install UI. No more built-in/bundled connectors. Changes: - Publish @spool-lab/connector-twitter-bookmarks@0.1.0 to npm - Delete bundle-extract.ts and build-bundled-connectors.sh - Remove bundledConnectorsDir from LoadDeps and all callers - Remove .do-not-restore mechanism from uninstallConnector - Remove ConnectorStatus.bundled field and UI guards - Remove bundledConnectorIds tracking from app - Remove extraResources and prebuild:connectors from app build - Simplify dev-connectors to link ALL workspace connectors (not just those listed in FIRST_PARTY_PLUGINS) - Remove bundled uninstall guard from CLI - Update all tests BREAKING: First-time app users will not have twitter-bookmarks pre-installed. They can install it via the CLI or app UI. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove `bundled` field from registry.json and connectors page - All connectors now show Install + Copy CLI buttons (no more "Built-in" badge) - Display actual author from registry instead of hardcoded "Spool Lab" Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
graydawnc
added a commit
that referenced
this pull request
Apr 23, 2026
Root cause of the "Installing..." → reverts to "Install" regression: 1. PR #97 removed the bundled-connector system that shipped @spool-lab/connector-sdk into ~/.spool/connectors/node_modules at app startup. After that, packaged builds had no SDK on the user's disk for installed connectors to import. 2. core/types.ts did `e instanceof SdkSyncError` — a class-identity check across the plugin boundary. Even when an SDK copy is present, any duplicated copy (a connector bundling its own) breaks this check: connector errors get misclassified as generic CONNECTOR_ERROR instead of AUTH_*, API_RATE_LIMITED, etc. Fix treats the SDK the way mature plugin systems (VS Code, Obsidian) do: the cross-boundary contract is types + tags, not class identity. - Add isSyncError structural guard (_tag === 'SyncError'); switch core/types.ts and SDK's own SyncError.from() to use it. - Each connector now declares @spool-lab/connector-sdk as a regular dependency + bundledDependencies, so its tarball is self-contained. No host-side SDK provisioning needed. - Keep rmSync-before-mkdirSync and pruneBrokenConnectorLinks as independent hygiene (they handle stale dev symlinks from deleted worktrees, which caused the original ENOENT symptom). Delivery: - scripts/pack-connector.sh produces publish-ready tarballs. pnpm pack alone errors with ERR_PNPM_BUNDLED_DEPENDENCIES_WITHOUT_HOISTED under the workspace's isolated node-linker, so we run `pnpm deploy --prod --config.node-linker=hoisted` → `npm pack`. - phantom-independence-check.sh rewritten to use the new pack script; no longer installs SDK separately (it's bundled). Versions published to npm: @spool-lab/connector-sdk@0.1.2 @spool-lab/connector-github@0.1.3 @spool-lab/connector-hackernews-hot@0.1.2 @spool-lab/connector-reddit@0.1.2 @spool-lab/connector-twitter-bookmarks@0.1.1 @spool-lab/connector-typeless@0.1.2 @spool-lab/connector-xiaohongshu@0.1.2 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7 tasks
graydawnc
added a commit
that referenced
this pull request
Apr 23, 2026
…#106) * fix(connectors): bundle SDK per connector; structural SyncError check Root cause of the "Installing..." → reverts to "Install" regression: 1. PR #97 removed the bundled-connector system that shipped @spool-lab/connector-sdk into ~/.spool/connectors/node_modules at app startup. After that, packaged builds had no SDK on the user's disk for installed connectors to import. 2. core/types.ts did `e instanceof SdkSyncError` — a class-identity check across the plugin boundary. Even when an SDK copy is present, any duplicated copy (a connector bundling its own) breaks this check: connector errors get misclassified as generic CONNECTOR_ERROR instead of AUTH_*, API_RATE_LIMITED, etc. Fix treats the SDK the way mature plugin systems (VS Code, Obsidian) do: the cross-boundary contract is types + tags, not class identity. - Add isSyncError structural guard (_tag === 'SyncError'); switch core/types.ts and SDK's own SyncError.from() to use it. - Each connector now declares @spool-lab/connector-sdk as a regular dependency + bundledDependencies, so its tarball is self-contained. No host-side SDK provisioning needed. - Keep rmSync-before-mkdirSync and pruneBrokenConnectorLinks as independent hygiene (they handle stale dev symlinks from deleted worktrees, which caused the original ENOENT symptom). Delivery: - scripts/pack-connector.sh produces publish-ready tarballs. pnpm pack alone errors with ERR_PNPM_BUNDLED_DEPENDENCIES_WITHOUT_HOISTED under the workspace's isolated node-linker, so we run `pnpm deploy --prod --config.node-linker=hoisted` → `npm pack`. - phantom-independence-check.sh rewritten to use the new pack script; no longer installs SDK separately (it's bundled). Versions published to npm: @spool-lab/connector-sdk@0.1.2 @spool-lab/connector-github@0.1.3 @spool-lab/connector-hackernews-hot@0.1.2 @spool-lab/connector-reddit@0.1.2 @spool-lab/connector-twitter-bookmarks@0.1.1 @spool-lab/connector-typeless@0.1.2 @spool-lab/connector-xiaohongshu@0.1.2 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: regenerate pnpm-lock after moving SDK to bundled dep --------- Co-authored-by: Chen <99816898+donteatfriedrice@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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
spool connector installor the app UI@spool-lab/connector-twitter-bookmarks@0.1.0to npm (was the only bundled connector)bundle-extract.ts,build-bundled-connectors.sh,.do-not-restoremechanismConnectorStatus.bundledfield,bundledConnectorIdstracking, and related UI conditionalsFIRST_PARTY_PLUGINSTest plan
@spool-lab/connector-twitter-bookmarkspublished to npm and installable viaspool connector install🤖 Generated with Claude Code