mirror of
https://github.com/elastic/kibana.git
synced 2025-06-28 11:05:39 -04:00
## Summary Implements the onechat tool registry RFC. Fix https://github.com/elastic/search-team/issues/9938 Fix https://github.com/elastic/search-team/issues/10019 This PR introduces the following artifacts: **plugins:** - `onechat` **packages:** - `@kbn/onechat-common` - `@kbn/onechat-server` - `@kbn/onechat-browser` ## Tool APIs overview ### Registering a tool ```ts class MyPlugin { setup(core: CoreSetup, { onechat }: { onechat: OnechatPluginSetup }) { onechat.tools.register({ id: 'my_tool', name: 'My Tool', description: 'My very first tool', meta: { tags: ['foo', 'bar'], }, schema: z.object({ someNumber: z.number().describe('Some random number'), }), handler: ({ someNumber }, context) => { return 42 + someNumber; }, }); } } ``` ### Executing a tool Using the `execute` API: ```ts const { result } = await onechat.tools.execute({ toolId: 'my_tool', toolParams: { someNumber: 9000 }, request, }); ``` Using a tool descriptor: ```ts const tool = await onechat.tools.registry.get({ toolId: 'my_tool', request }); const { result } = await tool.execute({ toolParams: { someNumber: 9000 } }); ``` With error handling: ```ts import { isToolNotFoundError } from '@kbn/onechat-common'; try { const { result } = await onechat.tools.execute({ toolId: 'my_tool', toolParams: { someNumber: 9000 }, request, }); } catch (e) { if (isToolNotFoundError(e)) { throw new Error(`run ${e.meta.runId} failed because tool was not found`); } } ``` ### Listing tools ```ts const tools = await onechat.tools.registry.list({ request }); ``` *More details and example in the plugin's readme.* ### What is **not** included in this PR: - tool access control / authorization - we have a dedicated RFC - dynamic tool registration / permissions checks part/of depends on the authorization RFC - feature / capabilities - will come with browser-side and HTTP APIs - fully defining tool meta - hard to do now - filter parameters for the tool list API - depends on the meta being defined *Those will be follow-ups*. Everything else from the RFC should be there. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> |
||
---|---|---|
.. | ||
images | ||
add-data-tutorials.md | ||
advanced.md | ||
application-service.md | ||
building-kibana.md | ||
ci-metrics.md | ||
configuration-service.md | ||
contributing.md | ||
core-packages.md | ||
dashboard-enhanced-plugin.md | ||
dependencies-versions.md | ||
development-basepath.md | ||
development-best-practices.md | ||
development-documentation.md | ||
development-getting-started.md | ||
development-github.md | ||
development-plugin-resources.md | ||
development-pull-request.md | ||
development-security.md | ||
development-telemetry.md | ||
development-tests.md | ||
development-visualize-index.md | ||
elasticsearch-service.md | ||
enhanced-embeddables-plugin.md | ||
external-plugin-development.md | ||
external-plugin-functional-tests.md | ||
external-plugin-localization.md | ||
http-service.md | ||
index.md | ||
interpreting-ci-failures.md | ||
kibana-architecture.md | ||
kibana-dashboard-plugin.md | ||
kibana-debugging.md | ||
kibana-expressions-plugin.md | ||
kibana-issue-reporting.md | ||
kibana-linting.md | ||
kibana-navigation.md | ||
kibana-platform-api.md | ||
kibana-platform-plugin-api.md | ||
legacy-url-aliases.md | ||
logging-config-changes.md | ||
logging-service.md | ||
monorepo-packages.md | ||
patterns.md | ||
plugin-list.md | ||
plugin-performance.md | ||
plugin-tooling.md | ||
pr-review.md | ||
reporting-integration.md | ||
running-elasticsearch.md | ||
running-kibana-advanced.md | ||
sample-data.md | ||
saved-objects-service.md | ||
security-best-practices.md | ||
sharing-saved-objects.md | ||
stability.md | ||
testing-kibana-plugin.md | ||
toc.yml | ||
translations-plugin.md | ||
typescript.md | ||
ui-settings-service.md | ||
uiactions-plugin.md | ||
upgrading-nodejs.md |