Skip to content

0.2.21

Latest

Choose a tag to compare

@DEENUU1 DEENUU1 released this 06 Oct 15:21
475f799

Fixed

  • alembic upgrade head failed in every PostgreSQL project without
    --mcp-client
    — since 0.2.19, migration 0027 named
    0026_create_mcp_connections as its parent, and that migration is generated
    only with the MCP client, so Alembic stopped with
    KeyError: '0026_create_mcp_connections'. 0027 now follows 0025 when 0026 is
    absent. Nobody noticed because tests/test_migrations.py took any alembic current failure for "no database" and skipped itself; it now checks the
    connection directly, so a broken chain fails it. A new matrix check,
    test_alembic_chain_is_unbroken, verifies every generated configuration has
    one head and no missing parent
  • Migrations could not start in projects without an AI framework —
    alembic/env.py imported the conversation models, which are generated only
    with one
  • The test suite of a project without an AI framework failed at collection
    — tests/test_services_conversation.py stayed behind after its module was
    removed
  • Resetting all non-admin users left their agent memory behind — with
    --memory, UserService.delete_non_admins (used by the seed command's reset)
    bulk-deleted the rows but not the notebooks, which have no foreign key to
    users; single deletion already cleared them. It now forgets each deleted
    user's memory, and a store failure rolls the deletion back
  • Deep research could drop an answer given alongside a planning step — text
    sent with a planning or delegation tool call is held back as narration; if a
    run nevertheless ended on that step, the text never streamed although it was
    the final result. It is now sent before final_result. Current Pydantic AI
    continues a run after such a step, so this guards a path rather than fixing
    one seen in practice (#176)
  • A conversation resumed on a new connection lost its context — the chat
    session held the conversation in memory only while the WebSocket lasted, so
    after a reconnect the model started from nothing, and switching to another
    conversation in the same session carried the previous one's context over.
    The Pydantic AI and PydanticDeep sessions now load the conversation's most
    recent stored messages (up to 100) whenever they switch to a conversation
    they do not hold