package theater:simple;
interface supervisor {
use types.{chain-event};
// # Spawn a new child actor
//
// Creates and starts a new actor from the specified manifest file.
//
// ## Parameters
//
// * `manifest` - Path or content of the manifest file describing the actor
// * `init-bytes` - Optional initial state for the actor (serialized bytes)
//
// ## Returns
//
// * `Ok(string)` - ID of the newly created actor
// * `Err(string)` - Error message if spawning fails
spawn: func(manifest: string, init-bytes: option<list<u8>>) -> result<string, string>;
// # Resume a previously stopped child actor
//
// Restarts a previously created actor using an existing manifest but with a potentially
// new initial state.
//
// ## Parameters
//
// * `manifest` - Path or content of the manifest file describing the actor
// * `init-state` - Optional new initial state for the actor (serialized bytes)
//
// ## Returns
//
// * `Ok(string)` - ID of the resumed actor
// * `Err(string)` - Error message if resuming fails
resume: func(manifest: string, init-state: option<list<u8>>) -> result<string, string>;
// # List all child actors
//
// Retrieves a list of all children directly managed by this actor.
//
// ## Returns
//
// * `list<string>` - IDs of all child actors
list-children: func() -> list<string>;
// # Stop a specific child actor
//
// Gracefully stops a child actor identified by its ID.
//
// ## Parameters
//
// * `child-id` - ID of the child actor to stop
//
// ## Returns
//
// * `Ok(_)` - Child was successfully stopped
// * `Err(string)` - Error message if stopping fails
stop-child: func(child-id: string) -> result<_, string>;
// # Restart a specific child actor
//
// Stops and then starts a child actor, maintaining its ID but resetting its state.
//
// ## Parameters
//
// * `child-id` - ID of the child actor to restart
//
// ## Returns
//
// * `Ok(_)` - Child was successfully restarted
// * `Err(string)` - Error message if restarting fails
restart-child: func(child-id: string) -> result<_, string>;
// # Get the latest state of a child actor
//
// Retrieves the current serialized state of a specified child actor.
//
// ## Parameters
//
// * `child-id` - ID of the child actor
//
// ## Returns
//
// * `Ok(option<list<u8>>)` - Current state of the child (None if no state)
// * `Err(string)` - Error message if retrieving state fails
get-child-state: func(child-id: string) -> result<option<list<u8>>, string>;
// # Get event history of a child actor
//
// Retrieves the chain of events that have occurred in a child actor,
// providing visibility into its execution history.
//
// ## Parameters
//
// * `child-id` - ID of the child actor
//
// ## Returns
//
// * `Ok(list<chain-event>)` - List of events in the child's chain
// * `Err(string)` - Error message if retrieving events fails
get-child-events: func(child-id: string) -> result<list<chain-event>, string>;
}
interface supervisor-handlers {
use types.{wit-actor-error};
// # Handle a child actor error
//
// Processes an error from a child actor, allowing the parent to react or log the error.
//
// ## Parameters
//
// * `state` - Optional state of the parent actor (for context)
// * `params` - Tuple containing the child ID and error data
//
// ## Returns
//
// * `Ok(tuple<option<list<u8>>, string>)` - Updated state and result message
// * `Err(string)` - Error message if handling fails
handle-child-error: func(state: option<list<u8>>, params: tuple<string, wit-actor-error>) -> result<tuple<option<list<u8>>>, string>;
handle-child-exit: func(state: option<list<u8>>, params: tuple<string, option<list<u8>>>) -> result<tuple<option<list<u8>>>, string>;
handle-child-external-stop: func(state: option<list<u8>>, params: tuple<string>) -> result<tuple<option<list<u8>>>, string>;
}