Skip to content

feat: plugin-owned product logic (hy-bv310)#38

Merged
philcunliffe merged 1 commit into
integration/hypaware-plugin-surfacesfrom
polecat/hy-bv310
May 26, 2026
Merged

feat: plugin-owned product logic (hy-bv310)#38
philcunliffe merged 1 commit into
integration/hypaware-plugin-surfacesfrom
polecat/hy-bv310

Conversation

@philcunliffe
Copy link
Copy Markdown
Contributor

Summary

  • Move client-specific and plugin-specific product behavior out of core and behind plugin-owned descriptors/contributions
  • Client descriptors in manifests, catalog-driven status probes, generalized skill install, hook command moved to Claude plugin, V1 diagnostics from catalog metadata
  • 434 tests pass, 0 fail

Merge target

Merges into integration/hypaware-plugin-surfaces (umbrella PR #35)

Test plan

  • npm test — 434 pass, 0 fail
  • Rebased cleanly onto integration branch

🤖 Generated with Claude Code

…ills, hook migration (hy-bv310)

Move client-specific and plugin-specific product behavior out of core
and behind plugin-owned manifest descriptors:

- Add `contributes.client` descriptor to plugin manifests with
  skill_dir, attach_probe, and required_upstreams fields
- Extend plugin catalog to extract client descriptors from manifests
- Replace hardcoded client loops in status.js with catalog-driven
  descriptor iteration for attach probing
- Generalize `hyp skills install` to resolve skill directories from
  catalog instead of hardcoding .claude/skills and .codex/skills
- Move `claude-hook session-context` command from core to the Claude
  plugin — registered during plugin activation
- Rewrite V1 advisory diagnostics to derive client/upstream checks
  and encoder/blob-store checks from catalog metadata instead of
  hardcoded plugin name sets

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@philcunliffe philcunliffe merged commit be35ca7 into integration/hypaware-plugin-surfaces May 26, 2026
6 checks passed
@philcunliffe philcunliffe deleted the polecat/hy-bv310 branch May 26, 2026 04:10
philcunliffe added a commit that referenced this pull request May 26, 2026
* chore: open plugin surface integration branch

* feat: config-backed sink materialization (hy-9d39h) (#37)

* feat: config-backed sink materialization (hy-9d39h)

Add production runtime materialization for configured sinks, so
daemon boot and CLI dispatch automatically instantiate sinks from
config.sinks entries without manual kernel.sinks.instantiate() calls.

- Add `fromProvider(provider, name, range)` to capability registry for
  provider-specific capability lookup
- New `src/core/sinks/materialize.js` resolves writer/destination/encoder
  capabilities and calls sinks.instantiate() for all three sink shapes
  (request, blob, table-format)
- Wire materializeSinks into daemon runtime (after plugin activation)
  and CLI dispatch (after boot)
- Update local_parquet_export smoke to use config-backed sinks instead
  of manual instantiation, proving the production path works
- 19 new tests covering all sink shapes, error modes, and fromProvider

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(types): resolve CI typecheck failures for sink materialization (hy-9d39h)

- Add tmpRoot to RunDaemonOptions interface
- Add fromProvider to CapabilityRegistry interface and activation facade
- Capture config.sinks before withSpan callback to preserve TS narrowing

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: plugin-owned product logic — client descriptors, generalized skills, hook migration (hy-bv310) (#38)

Move client-specific and plugin-specific product behavior out of core
and behind plugin-owned manifest descriptors:

- Add `contributes.client` descriptor to plugin manifests with
  skill_dir, attach_probe, and required_upstreams fields
- Extend plugin catalog to extract client descriptors from manifests
- Replace hardcoded client loops in status.js with catalog-driven
  descriptor iteration for attach probing
- Generalize `hyp skills install` to resolve skill directories from
  catalog instead of hardcoding .claude/skills and .codex/skills
- Move `claude-hook session-context` command from core to the Claude
  plugin — registered during plugin activation
- Rewrite V1 advisory diagnostics to derive client/upstream checks
  and encoder/blob-store checks from catalog metadata instead of
  hardcoded plugin name sets

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: gascity acceptance and plugin-surface cleanup (hy-sadjq) (#39)

Reframe gascity from "excluded and invisible" to "excluded from default
activation but discoverable through the plugin catalog." Update test
and smoke labels/comments to reflect that gascity absence in status is
about the config scenario, not a blanket prohibition. Add catalog test
for gascity contributions (source, commands, dataset, init preset,
skill). Add detach coverage to the gascity smoke test.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: replace inline import types with @import declarations and sanitize env var derivation (hy-hfne7) (#40)

Replace 20+ inline import('...') type annotations with @import JSDoc
declarations at file tops across validate.js, status.js, materialize.js,
and sink-materialize.test.js.

Fix resolveClientSettingsPath to sanitize non-alphanumeric characters
(hyphens, dots, etc.) in client names when deriving env var keys, so
that hyphenated clients like 'claude-desktop' produce valid POSIX env
var names (CLAUDE_DESKTOP_HOME instead of CLAUDE-DESKTOP_HOME).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: address PR 35 diagnostic review feedback

* fix: surface CLI sink materialization warnings

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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