Appearance
Actor ops
This page is the structured index of every op Chat sends to actors outside its own chat.* namespace.
To system.agents
The cognitive runtime. Both RemoteActorConversationAdapter (chat-app) and ConversationSurfaceActor (chat-component) target this.
$prompt
App-side (sendToInbox, fire-and-forget):
ts
RequestReply.sendToInbox(context, '<promptTarget>', '$prompt', {
prompt: text,
requestId: <uuid>,
traceId?: <uuid>,
activityTo?: string[],
callerSnapshot?: object,
callerRealm?: string,
callerMount?: string,
sessionId?: string,
principalId?: string,
});Surface-side (execute, with ACK):
ts
RequestReply.execute(context, 'system.agents', '$prompt', {
prompt, requestId, activityTo,
callerRoot, callerRealm, callerMount, callerRuntimeRoot, callerSurfaceMount,
snapshotTree, targetSnapshots,
sessionId?, principalId?,
}, { timeoutMs: 30_000, targetRoot: <serviceRoot> });$cancel
ts
RequestReply.sendToInbox(context, '<promptTarget>', '$cancel', { requestId });$sessionList
ts
RequestReply.execute(context, 'system.agents', '$sessionList', {
principalId?,
targetKey?, // surface variant filters by targetKey
}, { timeoutMs: 8_000-10_000 });$sessionDelete
ts
RequestReply.execute(context, '<conversation-target>', '$sessionDelete', {
sessionId,
}, { timeoutMs: 10_000 });session_state.read / session_state.upsert
ts
RequestReply.execute(context, '<backendTarget>', 'session_state.read', {
sessionId, key, // key: 'transcript' for full history
}, { timeoutMs: 10_000 });
RequestReply.execute(context, '<backendTarget>', 'session_state.upsert', {
sessionId, key, data,
}, { timeoutMs: 10_000 });To target actors (per prompt)
Before sending a prompt with a snapshotTree, the surface introspects the target:
ts
RequestReply.execute(context, '<targetMount>', '$introspect', {
depth: 'full',
}, { timeoutMs: 5_000, targetRoot: <targetRoot> });The result is normalized into the snapshotTree payload sent with $prompt.
To system.inference
Only the dependency probe (ChatApp.ts:3357-3375):
ts
RequestReply.execute(context, 'system.inference', 'status.get', {},
{ timeoutMs: PROMPT_DEPENDENCY_TIMEOUT_MS });
// Validate: response.effective.provider must be a non-empty string.To <conversation-target> itself (Component Library)
RemoteActorComponentLibraryAdapter makes calls like:
ts
'components.list' {} → { components: [...] }
'components.get' { id }
'components.scan-package' { packageMount }Exact ops depend on the bound componentLibraryRef target — typically chat.component-library proxying to system.agents or a dedicated component-library actor.
To <identity-target>, <preferences-target>, etc.
The other Remote* adapters follow the same pattern. Each implements an IChat*Service contract; each translates its method calls into RequestReply.execute against the configured target. See chat/src/app/services/adapters/:
RemoteActorIdentityAdapter→chat.identity(or anyIChatIdentityService-compliant target).RemoteActorPreferencesAdapter→chat.preferences.RemoteActorSessionStateAdapter→chat.session-state.RemoteActorMcpAdapter→chat.mcp.HttpIdentityAdapter→ HTTP-based identity (not actor-bus; for special bootstrap modes).
Subscriptions
Both MatrixChatApp and ConversationSurfaceActor use on$Activity to consume $activity frames. The frames arrive on the actor's own inbox (the page actor's inbox or the surface actor's), not as a request-reply.
The surface actor sends activityTo: [<my qualified mount>] in its prompts so frames are routed back to it.
Ops Chat does NOT send
For completeness:
inference.complete/inference.stream— never. Onlystatus.get.factotum.*— never.host.control.*— never.runtimes.start/stop/register— never.auth.*— never.
Inference, credentials, lifecycle, and auth are all out of Chat's scope.
See also
Source:
chat/src/app/services/adapters/*.ts,chat-component/src/surface/ConversationSurfaceActor.ts:339-435,chat/src/ChatApp.ts(probe code at 3336-3384).