Peter Steinberger
bbd66c475e
fix(plugins): fail closed when plugin runtime is unavailable during registration ( #130597 )
...
* fix(plugins): fail closed when plugin runtime is unavailable
Core fabricated an empty object as `PluginRuntime` for the `cli-metadata`
and `setup-only` registration passes, so any plugin touching `api.runtime`
during `register()` died with an opaque
`TypeError: Cannot read properties of undefined (reading 'openSyncKeyedStore')`
that named neither the contract nor the mode.
Replace those fabrications with one shared fail-closed runtime that throws a
named, actionable error identifying the plugin and registration mode. Symbol
reads stay inert so inspection and reflection cannot trigger the guard.
Also resolve the lightweight `cli-metadata` entry beside the resolved plugin
entry, not only at the package root. Published plugin packages emit it at
`dist/cli-metadata.js`, so the probe always missed and the loader fell back to
executing the full heavy entry for CLI metadata collection.
Documents which registration modes expose a live `api.runtime`; the SDK
reference previously claimed it was injected into every plugin.
* fix(ui): restore sidebar lazy import boundaries
Remove the redundant viewer-facepile dynamic import: sidebar consumers
already register that element through the static graph.
Import pet data and sprite helpers from their owning leaf modules, delete
the registration module's re-export barrel, and make the element itself
the lobster-pet.runtime.ts lazy boundary. Keep shared sprite styles with
the look renderer so standalone pages do not need element registration.
Regenerate the measured boot inventory with the canonical browser probe.
Use Lit's typed lifecycle map to remove the obsolete assertion baseline
entry and keep the now-private facepile variant type local.
The full build has no INEFFECTIVE_DYNAMIC_IMPORT warnings. Relevant UI
coverage passes (503 tests plus 5 Chromium E2E tests); the unchanged plugin
runtime regression suites pass all 58 tests. The broad plugin suite still
reports schema-version, doctor-closure, hook-process, and catalog failures.
2026-08-26 19:45:39 -07:00
Peter Steinberger
4d4ee7bc86
refactor(plugin-sdk): consolidate session catalog families ( #124801 )
2026-08-16 13:25:11 -07:00
Peter Steinberger
ebd23631ae
perf(cli): build root help from plugin metadata ( #124562 )
2026-08-16 05:43:35 -07:00
Peter Steinberger
848a7e30b3
refactor(computer-use): one canonical wire contract + node-host provider seam ( #123509 )
...
* refactor(computer-use): add provider seam
* refactor(computer-use): retry provider open after failure; drop changelog entry
2026-08-13 23:32:32 -07:00
Peter Steinberger
e45a9460ce
docs: repair spellcheck and anchor drift ( #122960 )
...
* docs: repair spellcheck and anchor drift
* docs: satisfy markdown anchor lint
2026-08-12 20:50:56 -07:00
Peter Steinberger
9a96375e60
feat(gateway): session-catalog terminal start plans behind cliAgents gate ( #121020 )
...
* feat(gateway): add session-catalog terminal start plans
* refactor(gateway): split catalog terminal start handler
* fix(gateway): enforce catalog terminal start eligibility
* test(gateway): split session catalog snapshot coverage
2026-08-09 08:13:39 -07:00
Peter Steinberger
1e9a620a28
refactor(gateway): remove deferred channel load flag; 503 plugin routes until runtime ready ( #117852 )
...
* refactor(gateway): remove deferred channel load flag; 503 plugin routes until runtime ready
* test(agents): make setup middleware load intent explicit
* test(gateway): pin webhook startup routing outside SPA
2026-08-02 00:36:21 -07:00
Peter Steinberger
fdec6fe7d4
refactor(plugins): reuse scoped loader for capability discovery ( #117373 )
...
* refactor(plugins): reuse scoped loader for capabilities
* fix(plugins): retain channel capabilities during discovery
2026-08-01 09:50:34 -07:00
Peter Steinberger
0d7fb8eb39
refactor(fs): adopt fs-safe 0.5 core primitives ( #113705 )
...
* refactor(fs): unify exclusive file publication
* fix(fs): fence stale lock reclamation
* refactor(fs): bound wiki scans and secret reads
* chore(fs): finalize fs-safe 0.5 compatibility
* fix(fs): preserve publication ownership and legacy mode
* fix(fs): fail closed on unverifiable lock owners
* fix(fs): preserve concurrent backup publications
* refactor(fs): preserve ambiguous backup outputs
* fix(fs): preserve mixed-version lock coordination
* refactor(file-transfer): adopt fs-safe archive extraction
* refactor(fs): add bounded walk and secret seams
* refactor(auth): replace proper-lockfile with fs-safe
* fix(fs): honor Windows mode override casing
* refactor(snapshot): adopt fs-safe publication
* refactor(memory-wiki): adopt prunable root walks
* refactor(fleet): adopt bounded archive restore
* fix(fs): preserve post-publication ownership receipts
* refactor(fs): harvest final fs-safe primitives
* style(fs): clean harvest lint
* chore(plugin-sdk): refresh move helper API baseline
* refactor(snapshot): adopt native Windows ACL facts
* refactor(fs): adopt hardened atomic outputs
* fix(fs): scope lock reentrancy to logical owners
* chore(config): lower env var count budget
* fix(deps): adopt published fs-safe 0.5.0
* fix(ci): align SDK surface ratchets
* fix(ci): regenerate SDK API baseline after rebase
* fix(fs): preserve owner-scoped file lock nesting
* fix(ci): refresh SDK API baseline for file locks
* fix(fs): separate SQLite and file lock reentrancy
* fix(imessage): bound pinned attachment reads
* fix(agents): narrow session-key lock options
* fix(fs): preserve fs-safe 0.5 compatibility contracts
* fix(windows): retain private SQLite directory owner
* refactor(sqlite): centralize exclusive coordinator
* refactor(snapshot): isolate Windows ACL policy
* fix(windows): retain snapshot ACL inspector
* chore(config): realign env budget after rebase
* test(agents): accept canonical sandbox escape error
* docs(changelog): defer fs-safe release note
2026-07-28 03:41:47 -04:00
Peter Steinberger
269bc5c89e
fix(cli): preserve machine-readable stdout ( #113654 )
...
Co-authored-by: 1052326311 <65798732+1052326311@users.noreply.github.com >
2026-07-27 05:44:16 -04:00
Peter Steinberger
a5d758e74b
refactor(plugin-sdk): share channel DM policy setup ( #113537 )
2026-07-25 01:00:53 -07:00
Peter Steinberger
781913025b
improve: stream native sessions as hosts finish ( #110211 )
...
* perf: stream native session catalogs by host
* fix: satisfy session catalog CI contracts
* fix: retain changed-session refresh timing
* fix: keep catalog refresh helpers private
2026-07-17 23:59:57 +01:00
Peter Steinberger
b319493a52
improve: let Code Mode use declared tool result shapes ( #109813 )
...
* feat(agents): add Code Mode output contracts
* perf(agents): defer untrusted tool schemas
* chore(plugin-sdk): refresh API baseline
* fix(agents): preserve deferred schema markers
* fix(agents): preserve policy-blocked tool results
* fix(agents): preserve nullable output contracts
* fix(agents): reject policy blocks from success contracts
* fix(agents): preserve output contracts through normalization
* test(agents): type normalized tool fixtures
* fix(agents): validate catalog results before projection
* fix(agents): keep result snapshots internal
* fix(agents): fail closed on unrenderable unions
* fix(agents): preserve empty result markers
* test(agents): keep result fixture discriminator literal
* test(agents): use native own-property check
2026-07-17 14:46:37 +01:00
Peter Steinberger
9d79d85f46
feat(workboard): refresh Control UI from live changes ( #99051 )
...
* feat(workboard): refresh control ui from live changes
* refactor(workboard): tighten live invalidation path
* chore(workboard): preserve locale catalog state
* refactor(gateway): keep broadcaster runtime object
* refactor(plugin-sdk): own gateway event types
* test(workboard): bind reconciliation mocks
* test(release): declare recovery helpers
* fix(workboard): cancel direct loads on teardown
2026-07-14 05:17:23 -07:00
Peter Steinberger
3255b3218a
feat: unify external sessions with native catalog pagination ( #104717 )
...
* feat(gateway): add generic sessions.catalog surface with plugin SDK registration seam
* feat(agents): support one-shot forked CLI session resume with successor rebinding
* feat(anthropic): adopt local Claude CLI sessions into native chats via catalog continue
* feat(codex): register the session catalog provider independently of supervision
* refactor(ui): delete the retired custom Claude/Codex session tab views
* feat(ui): render external session catalogs as native sidebar sessions and chat panes
* docs: describe the unified native session catalog
* fix: harden forked CLI resume and catalog transcript mapping after review
* fix: satisfy strict typecheck for catalog source guard and imported message cast
* chore(i18n): regenerate session catalog locales
* fix(codex): simplify session source guard type
* fix(ui): paginate sidebar session catalogs
* chore(i18n): refresh catalog metadata after main merge
* fix(ui): harden session catalog pagination refresh
* test(agents): use sqlite session accessor in fork tests
* fix(ci): refresh session catalog generated surfaces
* fix(ui): align session catalog locales
* fix: address session catalog review findings
* fix(sessions): roll back failed plugin catalog adoption
* test(sessions): preserve CLI binding literals
* fix(ui): restore native session pagination label
* docs: note external session catalogs
* Revert "docs: note external session catalogs"
This reverts commit cfb503f160 .
2026-07-11 17:26:26 -07:00
Peter Steinberger
7bf80dc2c6
chore(tooling): enforce formatting and refresh TypeScript checks ( #104239 )
...
* chore(tooling): enforce current formatter and refresh checks
* chore(tooling): keep release changelog formatter-owned
* chore(tooling): retain compatible Node type surface
* ci: enforce formatting for docs-only changes
* ci: isolate docs formatter check
* chore(tooling): apply updated lint and format rules
* chore(tooling): satisfy updated switch lint
* style(ui): apply Linux formatter layout
* test(doctor): match quiet local audio contribution
* test(doctor): assert quiet output only
* test(doctor): follow restored information contract
2026-07-11 01:09:51 -07:00
Peter Steinberger
e1934d968e
fix(nodes): stop advertising a disabled browser proxy ( #103894 )
...
* fix(nodes): hide disabled browser proxy capability
* chore: defer node fix changelog to release
* chore: ratchet plugin SDK surface budget
2026-07-10 20:06:53 +01:00
Peter Steinberger
f7d7148cf0
docs: rewrite published docs grounded in current source ( #100142 )
...
Source-grounded rewrite of 529 published docs pages with per-unit information-loss verification: 1,713 factual corrections cited to src/**, generated surfaces regenerated, frontmatter titles preserved for i18n, release notes pages untouched. All docs gates green.
Closes #100141
2026-07-05 00:32:47 -04:00
Dallin Romney
bfffa950d7
refactor(plugin-sdk): consolidate tool result helpers ( #99740 )
...
* refactor(plugin-sdk): consolidate tool result helpers
* docs(plugin-sdk): tighten tool result guidance
* refactor(feishu): use tool results directly
2026-07-04 16:50:44 -07:00
Peter Steinberger
8ed9330a30
perf: defer Slack full startup ( #87760 )
2026-05-28 20:37:09 +01:00
Peter Steinberger
b95c8a4d95
docs: add tool plugin authoring guide
2026-05-17 11:45:18 +01:00
Peter Steinberger
b17e4ed50c
feat: add simple tool plugin authoring
2026-05-17 11:45:18 +01:00
Peter Steinberger
40789da1ef
fix(wizard): narrow setup i18n SDK surface
2026-05-15 15:33:27 +01:00
Peter Steinberger
330ba1fa31
refactor: move canvas to plugin surfaces
2026-05-07 09:07:18 +01:00
Vincent Koc
fafd76c5e6
docs: typography hygiene across 5 pages
...
Replaced 80 typography characters (curly quotes, apostrophes, em/en
dashes, non-breaking hyphens) with ASCII equivalents per
docs/CLAUDE.md heading and content hygiene rules.
- docs/plugins/sdk-entrypoints.md: 17 chars
- docs/help/index.md: 17 chars
- docs/concepts/agent-workspace.md: 16 chars
- docs/tools/lobster.md: 15 chars
- docs/tools/exec-approvals.md: 15 chars
2026-05-05 20:04:12 -07:00
Peter Steinberger
d2ae2a3fb0
fix(plugins): require declared runtime setup entries
2026-05-01 22:36:18 +01:00
Gustavo Madeira Santana
53618cca0d
docs: clarify plugin discovery loading
2026-04-24 22:26:52 -04:00
Gustavo Madeira Santana
282c32db7c
fix(cli): sanitize plugin command descriptors
2026-04-24 22:23:28 -04:00
Gustavo Madeira Santana
a5db42862d
fix(plugins): expose channel CLI metadata in discovery ( #71309 )
...
Merged via squash.
Prepared head SHA: ce6bb35812
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-04-24 22:06:57 -04:00
Vincent Koc
c5c163d078
docs: standardize frontmatter field order (summary before title)
2026-04-23 13:18:17 -07:00
Vincent Koc
2777b089b5
docs: normalize frontmatter titles to sentence case
2026-04-23 13:15:17 -07:00
Vincent Koc
4a2cd533ac
docs: remove duplicate H1 where frontmatter title already sets it
2026-04-23 13:11:14 -07:00
Gustavo Madeira Santana
819d15481d
fix: validate plugin source entries before runtime inference ( #69868 )
...
Merged via squash.
Prepared head SHA: b67644cdda
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-04-21 20:12:19 -04:00
Gustavo Madeira Santana
66add9fcd9
perf(cli): lazy-load doctor plugin paths ( #69840 )
...
Merged via squash.
Prepared head SHA: ebf93ad913
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-04-21 18:17:19 -04:00
Gustavo Madeira Santana
78ac118427
fix(plugins): stabilize bundled setup runtimes ( #67200 )
...
Merged via squash.
Prepared head SHA: e8d6738fd0
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-04-15 12:35:18 -04:00
Peter Steinberger
131a78d3f3
docs: refresh setup runtime helper refs
2026-04-04 18:45:12 +01:00
Peter Steinberger
4c6b7a3a77
docs: refresh setup entrypoint import refs
2026-04-04 15:47:26 +01:00
Peter Steinberger
49bf527fd4
docs: clarify reserved gateway method namespaces
2026-04-04 12:08:41 +01:00
Peter Steinberger
359c6dedbe
docs: prefer channel-core in channel sdk docs
2026-04-04 07:46:15 +01:00
Peter Steinberger
c8be1ca6ae
docs: note sdk config schema memoization
2026-04-04 07:35:04 +01:00
Gustavo Madeira Santana
e5dac0c39e
CLI: keep root help plugin descriptors non-activating ( #57294 )
...
Merged via squash.
Prepared head SHA: c8da48f689
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-03-29 18:49:57 -04:00
Gustavo Madeira Santana
9b4f26e70a
Plugins/CLI: add descriptor-backed lazy root command registration ( #57165 )
...
Merged via squash.
Prepared head SHA: ad1dee32eb
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-03-29 16:02:59 -04:00
Vincent Koc
28f48a2dfd
style(docs): format sdk entrypoints doc
2026-03-22 20:03:17 -07:00
Vincent Koc
afb4b1173b
fix(docs): remove duplicate '### Options' headings (MD024)
2026-03-22 19:58:35 -07:00
Vincent Koc
a9f4cb7544
fix(docs): rename 'Channel Options' to 'Options' in sdk-entrypoints
...
This heading labels definePluginEntry options (generic, not channel-specific).
Another agent reverted the previous fix during a merge.
2026-03-22 19:44:07 -07:00
Peter Steinberger
462d7ad9c0
perf: default channel vitest lanes to threads
2026-03-22 19:10:43 -07:00
Vincent Koc
05055e200a
fix(docs): remaining code audit fixes
...
- sdk-entrypoints.md: fix mislabeled 'Channel entry options' heading
(should be 'Options' — these are definePluginEntry options, not
channel-specific)
- sdk-overview.md: add 4 missing API object fields (version, description,
source, rootDir) from OpenClawPluginApi type
2026-03-22 18:59:03 -07:00
Vincent Koc
6d9d9319b2
fix(docs): resolve markdownlint regressions
2026-03-22 11:56:06 -07:00
Vincent Koc
28838802d4
docs(plugins): add SDK reference and how-to guide pages ( #52366 )
...
* docs(plugins): add SDK reference and how-to guide pages
Create 7 new plugin SDK documentation pages:
- sdk-overview: import map, registration API reference
- sdk-entrypoints: definePluginEntry/defineChannelPluginEntry reference
- sdk-runtime: api.runtime namespace reference
- sdk-setup: packaging, manifests, config schemas reference
- sdk-channel-plugins: step-by-step channel plugin how-to
- sdk-provider-plugins: step-by-step provider plugin how-to
- sdk-testing: test utilities and patterns reference
Restructure plugin docs navigation with nested groups:
- Top-level: user-facing pages (Install, Community, Bundles)
- Building Plugins: Getting Started, Channel, Provider
- SDK Reference: Overview, Entry Points, Runtime, Setup, Testing, Migration, Manifest, Internals
Revise existing pages for new IA:
- building-plugins.md: tightened as quick-start, routes to detailed guides
- architecture.md: updated info box with links to new guides
- sdk-migration.md: expanded Related section
* docs(plugins): add Mintlify components (Steps, CodeGroup, Tabs, Accordion, CardGroup)
- Channel plugin guide: wrap walkthrough in Steps, use CodeGroup for
package.json/manifest, Accordion for createChatChannelPlugin details,
CardGroup for advanced topics
- Provider plugin guide: wrap walkthrough in Steps, use CodeGroup for
package files, Tabs for hook examples, Accordion for all-hooks reference
- Getting started: use CardGroup for plugin-type picker and next steps,
CodeGroup for package/manifest
- SDK Overview: wrap subpath tables in AccordionGroup for scannability
* fix(docs): address PR review feedback on plugin SDK pages
- Remove nonexistent api.runtime.channel.handleInboundMessage call,
replace with realistic webhook pattern and note about channel-specific
inbound handling (issue a)
- Fix registrationMode values: 'setup' -> 'setup-only' and 'setup-runtime'
matching actual PluginRegistrationMode type (issue b)
- Fix createOptionalChannelSetupSurface params: channelId -> channel,
add required label field (issue c)
- Fix broken anchor links: #multi-capability-providers ->
#step-5-add-extra-capabilities, #plugin-kinds -> #registration-api (issue d)
- Add missing acmeChatApi import in channel plugin example (issue e)
- Fix undefined provider variable in provider test example (issue f)
* fix(docs): use correct createProviderApiKeyAuthMethod options
Replace incorrect params (provider, validate) with actual required fields
(providerId, methodId, optionKey, flagName, promptMessage) matching
src/plugins/provider-api-key-auth.ts.
* fix(docs): address second round of PR review feedback
- Add required model fields (reasoning, input, cost, contextWindow,
maxTokens) to catalog example (issue b)
- Fix buildChannelConfigSchema to take a Zod schema argument (issue c)
- Replace fabricated setupWizard steps/run with real ChannelSetupWizard
contract (channel, status, credentials) (issue d)
- Add required sessionFile/workspaceDir to runEmbeddedPiAgent (issue e)
- Fix wrapStreamFn to return StreamFn from ctx.streamFn (issue f)
2026-03-22 11:35:53 -07:00
Peter Steinberger
05279539a8
docs(plugin-sdk): document public SDK surface
2026-03-22 08:50:48 -07:00