Skip to content

Batch 2026-10-09b: plugin host for atomic-plugins drive apps (#2148) - #2169

Merged
joepio merged 6 commits into
developfrom
trekmeester/combined-20261009b
Oct 9, 2026
Merged

joepio merged 6 commits into
developfrom
trekmeester/combined-20261009b

Conversation

@joepio

@joepio joepio commented Oct 9, 2026

Copy link
Copy Markdown
Member

Before: #2148 (plugin host for atomic-plugins drive apps) was green alone on a develop from before the last two batches.

After: it is merged on top of the current develop (8066959), so one run validates it there.

Conflicts: only the message catalogs (.po), re-extracted.

How: merge of the #2148 head (6126887) into a branch off develop; CI dispatched on this branch. After a green run #2148 is closed by hand.


Generated by Claude Code

Michiel de Jong and others added 6 commits October 8, 2026 11:29
A plugin's manifest `destination` can now declare keyed `tables` beside
(or instead of) its single `table`. Set up creates each one beneath the
plugin with its own row class and default view, and stores
`tables: { <key>: { table, rowClass } }` in the plugin's config next to
the unchanged `{ table, rowClass, properties }`. A drive app shown as a
view of any of those tables gets the same map from `store.getData()`.
This is what the money app needs for statements and closing balances
(atomic-plugins#148, M-7 and M-12).

- provisionDestination moves from FileImport into @tomic/lib
  (plugin-destination.ts), with destinationTablesFor for the host's
  `data` op. Set up resumes: a release that adds a key creates only that
  table.
- The server now checks `destination` with the browser's rules and
  messages instead of only requiring a map. Both parsers are held to new
  shared fixtures in testdata/plugin-manifest/.
- A single-table manifest keeps its config, its table localId and its
  release id; the single-table fixture's id is pinned, and so is the
  stored bytes of an app package carrying it.
- Docs: creating-plugins.md describes `accepts`, `destination.table`
  and `destination.tables`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ported from #1768 onto develop. Hand edits while
resolving: `manifest.rs` and `plugin-manifest.ts` keep develop's operation
URL check; the `atomic-proxy:` parsing (#1725) that sat next to this change
in the stack is left out. The `.po` catalogs are develop's, settled
separately.

(cherry picked from commit e739bf7)
Reads up to 100 resources in one round trip, each exactly as `get` reads
it, through the person's store; an unreadable subject is reported in its
place. Used by atomic-plugins' issue-tracker, money and notion drive apps.

Ported from #1748 (97eff29) onto develop's plugin
contract (#1970). Hand edits while resolving: kept develop's Store-shaped
`query`, `search` and `getContext` in view-client.js and added `getMany`
beside them, passing the title to `makeResource` like `getResource` does;
dropped the openExternal/openResource/proxy.disconnect pieces this commit
carried as context (types, docs, TESTING_COVERAGE, hostStore.test), which
wait on the questions on #1726.

(cherry picked from commit 97eff29)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Apps had no success colour and guessed dark mode from the background colour.

- The theme gets `colors.success`: #237a42 in light mode, #4cc27a in dark.
  Frames get it as `--t-color-success`.
- The frame stylesheet sets `color-scheme: light | dark` on `:root`, and the
  theme message now carries `colorScheme`, both from the built theme's
  `darkMode` (the host's actual setting, including "auto"). FrameBridge
  keeps it across a ready message and a reload. AppFrame and packaged
  plugin views both send it.
- view-client: `store.getTheme()` returns `{ colorScheme }`. Before any
  message has arrived it reads the applied `color-scheme` back.
  `store.onThemeChange(handler)` fires once per real switch.
- `ColorScheme` and `ThemeMessage` in `@tomic/plugin`; documented in
  custom-views.md.

Closes #1738

Ported from #1750 (2923ce1, with the theme-test
rename from 62187a1) onto develop's plugin contract (#1970). Hand edits
while resolving: AppFrame keeps develop's host UI next to the frame's
colour scheme; pluginRPC keeps develop's HostUI import beside the
ColorScheme one; view-client.js keeps develop's ASKS_THE_PERSON and
`point` and adds the theme listener; the openExternal/openResource methods
and docs this commit carried as context are left out (they wait on #1726).

(cherry picked from commit 2923ce1)
(cherry picked from commit 62187a1)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pnpm clean-translations after the #1768 port: the new "Set up creates {0}
tables" message, the renamed placeholder of the single-table one, and a
msgstr develop's catalogs were missing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@joepio
joepio merged commit b214af0 into develop Oct 9, 2026
18 of 24 checks passed
@joepio
joepio deleted the trekmeester/combined-20261009b branch October 9, 2026 09:58
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.

2 participants