Commit Graph
1 Commits
Author SHA1 Message Date
KRATOS 6beb0b0908 wedge stage 09: finish plugin wiring (tools/hooks/skills) (#185)
* stage 09: finish plugin wiring (tools/hooks/skills)

Activate resolved plugin manifests so their declared tools, hooks, and
skills take effect at runtime instead of being parsed-but-unconsumed.

- internal/plugins/activate.go: Activate() registers each plugin tool into
  the tools.Registry via a command-runner adapter (JSON args on stdin,
  stdout/exit -> tools.Result, ${AGENT_PLUGIN_ROOT} expansion + env),
  builds hooks.Definition values for plugin hooks, and exposes plugin
  skill search roots. Permission maps allow/prompt/deny -> tools.Safety;
  allow only survives load-time clamping when manifest auto-approval is
  enabled, so mutating plugin tools are not auto-approved by default. A
  plugin-aware skill tool merges the default skills dir with plugin roots
  (recording duplicate names, never crashing). Malformed plugins/extensions
  are skipped with a warning; activation order is deterministic.
- internal/cli: activatePlugins() invokes activation in both bootstrap
  paths (interactive TUI in app.go and one-shot exec in exec.go), after
  core/specialist/MCP registration. newHookDispatcherWithExtra folds plugin
  hooks into the dispatcher's hook set. Fails open: a bad plugin warns and
  is skipped, never wedging startup.
- internal/plugins/plugins.go: update the stale 'not yet registered' note.

* stage 09: normalize plugin command path separators for Windows

expandPluginRoot kept the manifest's forward slashes, so a ${AGENT_PLUGIN_ROOT}/bin/x command became a mixed-separator path on Windows (C:\...\001/bin/x), failing the path tests. Added expandPluginRootPath (filepath.FromSlash on the placeholder-expanded executable path only; args keep their slashes since they may be URLs/flags) and used it for the tool and hook command paths.

* stage 09: address plugin wiring review

- surface per-plugin load diagnostics on stderr (not just top-level errors)
- skip plugin tools whose name collides with an already-registered tool
- resolve manifest-relative plugin skill paths against the plugin dir

* stage 09: fall back to plugin path/id when manifest path unknown in load diagnostic
2026-06-13 10:21:14 +05:30