Repository navigation
0.23.0
Plugins can start agent runs from jobs, crons and inbound email with an idempotency key, agents and tools get storage(), converted text with NUL bytes now indexes, and unlabelled plugin nav groups share one block.
ctx.startAgentRun({ agentKey, tenantId, input, idempotencyKey?, concurrencyKey?, triggeredBy? })→{ runId, status, deduplicated }onJobCtx,CronCtx,EmailCtxandPublicCtx(BackgroundMethods,apps/web/src/plugins/api/agent-runs.ts), through the route's ownenqueueRun(CONCEPTS §16).enqueueRun({ idempotencyKey }): the run id is derived from (tenant, agent, key) byidempotentRunId, so a repeat answers the first run, settled or not; no migration (CONCEPTS §9).@testkit/unit:makeJobCtx,makeCronCtxandmakeEmailCtxreturnFake{Job,Cron,Email}CtxwithstartedRuns({ input, result?, error? }[]) and accept astartAgentRunreplacement.AgentCtxandToolCtxgainstorage(), the sameFILESservice as every other context (filesStorageinapps/web/src/plugins/api/storage.ts).stripControlChars/stripControlCharsDeep(apps/web/src/api/utils/core/text.ts) remove NUL and C0 controls except tab, LF and CR beforedocuments.content,chunks.textand everyai_spansstring are written — Postgres refused them (22021 / 22P05).composeNavfolds an unlabelled plugin nav group into an unlabelled group right before it, so several one-page plugins read as one list.docs/upgrades/0.22.0.mdno longer declaresrequires_surfaces: [feature-agents], which wrongly skipped the email slot for apps without the agent runtime;docs/plugin-api.mdnow expandsBackgroundMethods.
See the porting note.