Skip to main content

Conversations coverage

Messages, events, streaming, handoff, Direct Conversations, and closing (§7). Upstream: personalagentprotocol.org/docs/spec.

18 entries: 16 implemented, 2 not-applicable. Each row is one atomic statement of the upstream text, with the SDK symbols that implement it (Python; TypeScript mirrors them), the tests and shared conformance cases that show it, and its status.

IDSectionLevelRoleRequirementSDK symbolTestsStatus
PAP-7.2-01§7.2MUSTcompanyThe Company MUST reject requests from any other client_id, User, or account.CompanyService._ownedtest_company_end_to_end.py::test_the_conversation_streams_and_a_stranger_cannot_read_it
test_conformance.py::test_python_agent_python_company_over_tls
conversations.not-found-indistinguishable
conversations.signed-out-token-on-account-conversation
implemented
PAP-7.2-02§7.2SHOULDbothThey SHOULD start with a short prefix for their kind, such as cnv_, msg_, or evt_.generate_message_id
CompanyService._id
test_conversations.py::test_start_and_continue_preserve_message_ids_and_parse_waited_eventsimplemented
PAP-7.2-03§7.2MUST NOTbothBeyond these rules, the side that chooses an ID decides its format, and the other side MUST NOT depend on it.Message.validate_id
ConversationEventPage.validate_ids
test_models.py::test_shared_client_conversation_and_operation_fixturesimplemented
PAP-7.3-01§7.3MUSTpersonal-agentThe Personal Agent chooses each message's id, and MUST make it unique for the User.generate_message_idtest_conversations.py::test_start_and_continue_preserve_message_ids_and_parse_waited_events
test_conformance.py::test_python_agent_python_company_over_tls
conversations.retry-replays
conversations.message-id-conflict
implemented
PAP-7.4-01§7.4MUSTbothA message MUST have at least one of text, data, or context.Message.validate_contenttest_models.py::test_message_requires_content
test_fixtures.py::test_local_fixture_case
protocol.message-context-fields
implemented
PAP-7.4-02§7.4SHOULD NOTbothPersonal Agents and Company Agents SHOULD NOT put JSON or other markup in text.——not-applicable: Message text is written by the host's agent and the company agent; the SDK carries it unchanged.
PAP-7.4-03§7.4MUSTpersonal-agentWhen a Personal Agent shares one of these facts, it MUST use the field and format defined here: locale, time_zone, user_available.Message.validate_contexttest_fixtures.py::test_local_fixture_case
protocol.message-context-fields
implemented
PAP-7.4-04§7.4SHOULDpersonal-agentPersonal Agents SHOULD share only what the task needs.——not-applicable: What a message shares is the host's decision; the SDK adds nothing to it.
PAP-7.5-01§7.5MUSTpersonal-agentPersonal Agents MUST skip event types they don't recognize, so later versions and extensions can add types.ConversationEvent.known
ConversationClient.events
test_fixtures.py::test_local_fixture_case
protocol.unknown-event-type
implemented
PAP-7.5-02§7.5MUST NOTpersonal-agentCursors are opaque, so the Personal Agent MUST NOT compare or sort them.ConversationClient.eventstest_conversations.py::test_events_recover_cursor_drain_backlog_and_suppress_duplicates
test_conformance.py::test_python_agent_python_company_over_tls
conversations.invalid-cursor
implemented
PAP-7.5-03§7.5MUSTcompanyEvery successful read MUST include cursor, has_more, status, and responder, even with no events.CompanyService._page_responsetest_company_store.py::test_a_company_restarted_over_its_store_continues_every_flow
test_conformance.py::test_python_agent_python_company_over_tls
conversations.start-and-reply
conversations.has-more-drained
conversations.empty-read
implemented
PAP-7.5-04§7.5SHOULDpersonal-agentThe Personal Agent then reads from the beginning and SHOULD tell the User that part of the conversation is missing.ConversationClient.eventstest_conversations.py::test_events_recover_cursor_drain_backlog_and_suppress_duplicates
test_conformance.py::test_python_agent_python_company_over_tls
conversations.cursor-expired-recovery
implemented
PAP-7.6-01§7.6MUST NOTpersonal-agentIt MUST NOT act on text from a text-delta event.TextDelta
ConversationClient.stream
test_conversation_control.py::test_stream_yields_events_and_deltas_and_stops_at_closed
test_conversation_control.py::test_a_closed_stream_reopens_from_last_event_id_and_drops_partial_text
test_conformance.py::test_python_agent_python_company_over_tls
conversations.sse-reconnect
conversations.text-delta-not-actionable
implemented
PAP-7.7-01§7.7MUSTcompanyEvery successful response to a POST or a read MUST include status and responder.CompanyService._receipt
CompanyService._page_response
test_conformance.py::test_python_agent_python_company_over_tls
conversations.start-and-reply
conversations.handoff
conversations.closed
implemented
PAP-7.7-02§7.7MUSTcompanyEach Company message MUST also include sender, with agent or human, to identify who wrote it.CompanyService._replytest_conformance.py::test_python_agent_python_company_over_tls
conversations.start-and-reply
conversations.attribution
implemented
PAP-7.8-01§7.8MUSTpersonal-agentOn the Personal Agent's side, the Personal Agent MUST set each message's sender: agent when the Personal Agent wrote it, and human only when it carries the User's own words.Message.sendertest_conversation_control.py::test_a_direct_conversation_names_its_parent_and_the_parent_points_to_it
test_conformance.py::test_python_agent_python_company_over_tls
conversations.attribution
implemented
PAP-7.10-01§7.10MUSTcompanyThe parent conversation MUST be open, belong to the same owner (7.2), and not be a Direct Conversation itself.CompanyService._start_conversationtest_company_refusals.py::test_a_direct_conversation_locks_its_parent_until_it_closes
test_conformance.py::test_python_agent_python_company_over_tls
conversations.direct-conversation
conversations.direct-of-direct-refused
implemented
PAP-7.11-01§7.11SHOULDcompanyWhen the Company Agent needs the User's account, the Company adds an authorization event. It SHOULD also ask in a message, so a User in a Direct Conversation sees the request.Reply.authorization
ManzanitaAgent.respond
test_conformance.py::test_python_agent_python_company_over_tls
conversations.authorization-then-same-conversation
implemented

Conformance case IDs name protocol/fixtures/conformance cases; see the conformance report for their outcome in every language pairing.