Inspect and manage extensions

While you build or debug an extension for DataMind Oda, Oda can look inside the extension runtime without changing anything. Two read-only calls do the looking, and the plugins Oda builds in Creator mode are installed as persistent bundles.

List, then query

Inspection happens in two calls:

The list step is titled List Inspect Providers. A query step is titled Query followed by the platform, provider and method it asks about, as in Query host Service.listService.

Use the exact names the list result returns; do not guess them. A query sent to the client side waits for the first valid page: it stays pending until a page answers or the call is cancelled.

What you can inspect

Four providers come with the extension runtime:

ProviderMethodWhat it answers
ServicelistServiceThe runtime's services: first a compact directory of keys and signatures, then one service's full contract.
EventlistEventsThe events a plugin can listen to, directory first. Events the runtime forwards internally are left out.
ConfiglistConfigsThe live plugin entries with their configuration status, paged as below.
ToollistToolsThe tools the asking agent can call, including scoped and dynamic registrations.

None of these calls can change anything. A query cannot invoke a service's methods or modify the running system, a Config query never runs a configuration's validators or transforms, and an inspection method is not a service that plugin code can call.

The catalogue behind the answers

The Service and Event answers come from a catalogue generated from the runtime itself, so it describes what this build actually exposes:

How a host half declares the services it uses is on The host half of a dynamic package.

Config queries and paging

A Config query accepts four fields:

A directory page reports the total and where the next page starts; the last page has no next page. Ask for one entry and you get that entry: its status, and, when it has one, its exact JSON schema.

What an entry's status means

StatusMeaning
schemaThe entry has a configuration schema; query the entry to read it.
absentNo configuration is present for the entry.
unsupportedThe configuration is not a form the inspector can show.
treeThe entry carries other entries instead of being one plugin, so it has no schema of its own.
inactiveThe entry is not active: it is disabled, was never loaded, or has stopped.

Disabling a plugin after it has run flips its status to inactive.

Installed plugin bundles

When you work in Creator mode, Oda can build a plugin and install it as a persistent bundle rather than as a package that lives only in its chat. Installing is a managed operation:

The other way round, a dynamic package is defined and run inside a single chat; Dynamic packages covers running, approving and removing one.

When a call is refused

A refused call changes nothing. The message tells you what was wrong:

Questions, answered

Can inspection change anything, or run a plugin's code?

No. Both calls are read-only: they cannot invoke a service's methods or change the running system, and a Config query never runs a configuration's validators or transforms.

Which providers can I inspect?

Service, Event, Config and Tool. Run the list call first: it returns them, and a query uses their exact names.

Why is an event missing from the Event list?

The Event provider leaves out the events the runtime forwards internally. Everything it lists is an event a plugin can listen to.

How many config entries does one query return?

25 by default, up to 100 per page. Page with offset; the directory page tells you where the next page starts, and the last page has no next page.

What does the tree status mean?

The entry carries other entries instead of being one plugin, so it has no schema of its own. The entries it holds are listed in the directory themselves.

What makes a config entry inactive?

It is not active: it is disabled, was never loaded, or has stopped. Disabling a plugin after it has run flips its entry to inactive.

Why was my query refused with unknown entry id?

The id is not in the directory. Run the list call and query with an exact id from its result.

Why did a query refuse my offset or limit?

One of the values is out of range: offset must be 0 or more, and limit must be 1 to 100. Correct the value and run the query again.

A client query seems to wait a long time. When does it finish?

It settles when the first valid page arrives, or when the call is cancelled. While it waits, it is not an error.

Why can this installation not run Config queries?

A Config query needs the live plugin directory of the running installation; an installation built without it refuses Config queries.

What happens to a plugin install that is cancelled or fails?

A cancelled install reports cancelled, too-late or not-running. If an install fails, is cancelled, or adds a package without a bundle change of its own, the package manifest and lockfile are restored as they were; files already downloaded can stay.