Skip to content

0.23.0

Choose a tag to compare

@cliftonc cliftonc released this 24 Oct 13:33
· 3 commits to main since this release
0.23.0
a37fb65

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 } on JobCtx, CronCtx, EmailCtx and PublicCtx (BackgroundMethods, apps/web/src/plugins/api/agent-runs.ts), through the route's own enqueueRun (CONCEPTS §16).
  • enqueueRun({ idempotencyKey }): the run id is derived from (tenant, agent, key) by idempotentRunId, so a repeat answers the first run, settled or not; no migration (CONCEPTS §9).
  • @testkit/unit: makeJobCtx, makeCronCtx and makeEmailCtx return Fake{Job,Cron,Email}Ctx with startedRuns ({ input, result?, error? }[]) and accept a startAgentRun replacement.
  • AgentCtx and ToolCtx gain storage(), the same FILES service as every other context (filesStorage in apps/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 before documents.content, chunks.text and every ai_spans string are written — Postgres refused them (22021 / 22P05).
  • composeNav folds 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.md no longer declares requires_surfaces: [feature-agents], which wrongly skipped the email slot for apps without the agent runtime; docs/plugin-api.md now expands BackgroundMethods.

See the porting note.