Minga.Extension.CodeLease (Minga v0.1.0)

Copy Markdown View Source

Tracks short-lived leases for extension callback modules.

Extension reload and disable may purge path, git, and generated plugin modules. Agent-facing callbacks can outlive the extension process that registered them, so callers lease the callback module while a provider, tool worker, hook, MCP config builder, or UI action may still call it. Purge paths consult this service and reject unsafe unloads with a clear error instead of racing :code.purge/1 against active work.

Summary

Types

Why the module is still callable.

Public lease summary safe to include in errors and logs.

t()

A process-owned extension code lease.

Functions

Returns active leases matching a module, source, or both.

Returns a specification to start this module under a supervisor.

Returns :ok when a module can be purged safely.

Leases an extension callback module for the owner process.

Purges and deletes a module atomically with the lease check.

Releases a previously acquired lease.

Starts the code lease service.

Types

reason()

@type reason() :: :provider | :tool | :hook | :mcp | :ui_action | atom()

Why the module is still callable.

summary()

@type summary() :: %{
  source: Minga.Extension.ContributionCleanup.contribution_source(),
  module: module(),
  owner: pid(),
  reason: reason()
}

Public lease summary safe to include in errors and logs.

t()

@type t() :: %Minga.Extension.CodeLease{
  id: reference(),
  module: module(),
  owner: pid(),
  reason: reason(),
  server: GenServer.server(),
  source: Minga.Extension.ContributionCleanup.contribution_source(),
  started_at: integer()
}

A process-owned extension code lease.

Functions

active_leases(opts \\ [])

@spec active_leases(keyword()) :: [summary()]

Returns active leases matching a module, source, or both.

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

ensure_purge_allowed(source, module, opts \\ [])

@spec ensure_purge_allowed(
  Minga.Extension.ContributionCleanup.contribution_source() | nil,
  module(),
  keyword()
) :: :ok | {:error, term()}

Returns :ok when a module can be purged safely.

lease(source, module, reason, opts \\ [])

@spec lease(
  Minga.Extension.ContributionCleanup.contribution_source(),
  module(),
  reason(),
  keyword()
) ::
  {:ok, t()} | {:error, term()}

Leases an extension callback module for the owner process.

purge_module(source, module, opts \\ [])

@spec purge_module(
  Minga.Extension.ContributionCleanup.contribution_source() | nil,
  module(),
  keyword()
) ::
  :ok | {:error, term()}

Purges and deletes a module atomically with the lease check.

release(lease_or_ref, opts \\ [])

@spec release(
  t() | reference(),
  keyword()
) :: :ok

Releases a previously acquired lease.

start_link(opts \\ [])

@spec start_link(keyword()) :: GenServer.on_start()

Starts the code lease service.