Skip to content

feat!: mirror the inline-edit HTTP gate, page-event actor and typed capability keys - #3

Merged
zumbrunn merged 19 commits into
mainfrom
feat/inline-edit-routes
Nov 10, 2026
Merged

zumbrunn merged 19 commits into
mainfrom
feat/inline-edit-routes

Conversation

@zumbrunn

@zumbrunn zumbrunn commented Nov 8, 2026 •

Copy link
Copy Markdown
Member

Part of duneorg/dune#127 (slice 2). Stacked on #2; mirrors duneorg/dune#134.

  • Extension points are typed CapabilityKey<T> tokens (capabilityKey(name)), not declare module augmentation; Contributions is gone and Capabilities is closed to what core reads.
  • InlineEditManager gains handleRequest(req, { editor, path, pageFrontmatter }) (core gates /api/inline-edit/*, the provider serves it) and loses commit/patchFields; EditorIdentity and InlineEditRequestContext are declared. Page events document an optional actor.
  • Tests for capabilityKey.

🤖 Generated with Claude Code

zumbrunn and others added 12 commits November 6, 2026 13:41
…nd form contracts

First slice of the plugin contract. Copied from @dune/core where the shape
is already the public one, narrowed where core's is wider than a plugin
needs (SearchEngineCreateContext).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… (slice 2a)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ions (slice 2b)

DunePlugin, PluginApi, MountApi, HookRegistry, HookContext and the hook events;
the capability slot and contribution types; a narrow DuneConfig and PluginAuthz;
PluginRuntime with narrow structural interfaces for the engine, router, theme
loader, search, flex, submissions, sections, metrics and jobs. Handlers and
plugin callbacks are bivariant so core's wider contexts are accepted.

Also drops two unused imports left by slice 2a.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
User loses avatarUrl, providerId, linkedProviders, lastSeenAt and
stripeCustomerId; UserStore loses getByProvider, linkProvider and
unlinkProvider. PageIndex loses gated, roles, publishAt, unpublishAt, fileUrl,
termPageFor and coverImage. Nothing in the first-party plugins or the testing
harness reads them; adding a field later is additive, removing one is not.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
providerId, linkedProviders, getByProvider, linkProvider and unlinkProvider are
what a third-party OAuth login provider is built from. No first-party plugin
uses them yet; they stay so one can be written against the 1.0 contract.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Where the admin is mounted. Core reads it instead of assuming /admin; with no
provider there is no admin.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…une#125)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…wn extension points (#127)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…t) and page-event actor

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…127)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…f Contributions and module augmentation

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
zumbrunn and others added 5 commits November 10, 2026 13:50
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
# Conflicts:
#	CHANGELOG.md
#	src/capabilities.ts
#	src/hooks.ts
#	src/inline-edit.ts
#	src/mod.ts
#	tests/errors_test.ts
@zumbrunn
zumbrunn changed the base branch from feat/own-contributions to main November 10, 2026 15:34
@zumbrunn zumbrunn closed this Nov 10, 2026
@zumbrunn zumbrunn reopened this Nov 10, 2026
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@zumbrunn
zumbrunn merged commit 27f54b1 into main Nov 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant