Generator (all four structural gaps):
- harness service pages now render public properties/accessors, not just
methods (ctx.codeRuntime.language/isolation were missing);
- the class page merges the same-named interface half, so ctx.root/baseUrl/
events/logger/reflect/registry appear on Context (vendor root JSDoc gains
prose alongside @experimental);
- Pick<…> heritage on a Context merge resolves to the picked class members,
giving ctx.effect a documented signature on the Fiber page;
- {@link} tags normalize to code spans; merge sections get their own h2 so
reflect members no longer nest under 'Static members'.
verify-website-yaml: reject the unloadable 'group:' pseudo-name (tree.import
only special-cases 'cordis:'; no builtin is registered here) and recurse into
@cordisjs/plugin-group nested entry lists instead.
Prose corrected against loader/cordis source: service.md isolation example
uses the real group plugin + group: true + the required isolate map;
config.md documents concurrent entry startup (Promise.all; order via inject)
and the real hmr defaults (root ['.'], base/ignored/debounce); events.md
fixes emit (synchronous, not parallel), bail (null/false also delegate), and
serial (stops at the first bail value).
3.4 KiB
ctx.agents
AgentRegistry — provided by @deepseek-ai/dsh-agent.
Agent registry (ctx.agents): tracks live agents so UI, hook, and orchestrator plugins can find them without depending on the concrete loop package. Agent creation is provided by whichever plugin implements the AgentFactory (phase 1: @deepseek-ai/dsh-agent-loop), registered via setFactory.
ctx.agents.setFactory(factory)
setFactory(factory: AgentFactory): () => void
Register the agent-creation factory (the loop calls this on construction, effect-scoped). Throws if a factory is already registered. Returns the disposer; on dispose the factory slot is cleared.
factory— the loop-owned factorycreate/resumedelegate to.
Returns the disposer that clears the factory slot.
ctx.agents.create(options)
create(options: CreateAgentOptions): AgentHandle
Create, start, and register a new agent through the registered factory. Distinct from register (which records an already-constructed agent): this constructs the agent and its session. Throws if no factory is registered. Returns an AgentHandle — the owner disposes it to tear down exactly this agent.
options— agent id, session id/seed/metadata, and agent options.
Returns the handle whose dispose tears down exactly this agent.
ctx.agents.resume(options)
async resume(options: ResumeAgentOptions): Promise<AgentHandle>
Load a persisted session and resume an agent on it through the registered factory. Rejects if no factory is registered; the factory rejects if session persistence is not configured. Returns an AgentHandle.
options— the persisted session id plus agent id and options.
Returns the handle for the resumed agent.
ctx.agents.register(agent)
register(agent: Agent): () => void
Register a live agent. Throws if an agent with the same id is already registered. Emits agent/created on registration and agent/disposed when the calling fiber is disposed. Returns the disposer.
agent— the already-constructed agent to record in the store.
Returns the disposer that removes the agent and emits agent/disposed.
ctx.agents.get(id)
get(id: AgentId): Agent | undefined
Look up a live agent.
id— the agent id to look up.
Returns the agent, or undefined when no live agent has that id.
ctx.agents.list()
list(): Agent[]
All live agents, in registration order.
Returns a fresh array; mutating it does not affect the registry.