Parity Notices

Which TypeScript SDK options are accepted for Python parity but not yet acted on

Some TypeScript SDK options are accepted for Python-SDK parity but are not yet acted on; when you pass one, the SDK tells you so it’s never silently dropped.

Diagram

Parity Notice

Yes

No

📝 new Agent option

🔍 In ledger?

⚠️ notYetHonoured notice

✅ Acted on

Quick Start

  1. See the notice fire
    typescript
    import { Task } from 'praisonai';
    
    const task = new Task({
      name: 'Research',
      description: 'Research a topic',
      memory: true,   // accepted for parity, not yet honoured on Task
    });
    // console: [praisonai] Task: option "memory" is accepted for parity
    // with the Python SDK but is not yet honoured in TypeScript.

    As of PR #4841 every Agent constructor and Agent.chat option is honoured — see the Agent page — and PR #4836 honoured all eight Handoff options. The notice above now fires only for the surfaces still in the queue below.

  2. Silence the notices

    Set PRAISONAI_PARITY_SILENT=1 for the process (useful in tests) to mute every parity notice.

    bash
    PRAISONAI_PARITY_SILENT=1 node app.js

How It Works

Each surface consults the UNHONOURED_OPTIONS ledger when it is constructed, and warns once per (surface, option) pair if you pass a listed option with a non-default value.

Diagram
UNHONOURED_OPTIONSAgent / Task / HandoffUserUNHONOURED_OPTIONSAgent / Task / HandoffUsernew Agent({ reflection: true })unhonouredFor(‘Agent.__init__’)[…, ‘reflection’, …][praisonai] … not yet honoured (once per pair)
ConceptMeaning
AcceptedThe option is typed and takes a value, so Python examples copy-paste.
Not yet honouredThe TypeScript behaviour behind the option isn’t ported yet.
NoticeA one-time console.warn per (surface, option) so nothing is dropped silently.

The Remaining Surfaces

These options are accepted for Python-SDK parity but not yet acted on. Pass any with a non-default value and the SDK emits a notice.

SurfaceCountOptions
AgentTeam.__init__8autonomy, knowledge, guardrails, web, reflection, caching, learn, toolsRunOn
Task.__init__4autonomy, web, reflection, planning
Total12

AgentTeam.toolsRunOn stays on the list on purpose: team-level placement needs one shared instance across members, and that is not wired.

Plus partial options that work for some inputs and announce themselves for the rest:

SurfaceOptionHonoured when
Agentcontextsome inputs
Agentguardrailssome inputs
Agentknowledgesome inputs
Agentmemorysome inputs
AgentreasoningEffortsome inputs
Agentwebsome inputs
AgenttoolConfig.parallelforwarded as parallel_tool_calls on the OpenAI-compatible backend; the AI SDK backend still emits a notice
Agent.chatattachmentshonoured on the OpenAI-compatible backend; the AI SDK backend emits a “not yet honoured” notice for multimodal
Agent.chatoutputPydanticsome inputs
Agent.chatseedsome inputs
AgentTeamcontextsome inputs
AgentTeamexecutionsome inputs
AgentTeamhookssome inputs
AgentTeammemorysome inputs
AgentTeamplanningsome inputs
ChromaMemoryragDbPathsome inputs
Taskguardrailssome inputs

Different defaults, same option

The same Agent(output=…) code is silent in Python and verbose in TypeScript because the two SDKs resolve different defaults for an option that both honour.

Diagram

Python

TypeScript

📝 Agent output=…

⚙️ Which SDK resolves it?

🟢 verbose: false
markdown: false
stream: false

🔵 markdown: true
stream: true
verbose: PRAISON_VERBOSE

The option is honoured on both sides, so this is not a “not yet honoured” surface — only the default differs when you leave it unset.

OptionPython defaultTypeScript defaultEffect if unset
verboseFalsePRAISON_VERBOSE env var (verbose unless set to "false")Python quiet; TS verbose unless the env var is "false"
markdownFalsetruePython returns plain text; TS renders markdown
streamFalsetruePython returns the full string; TS streams tokens

Python

python
from praisonaiagents import Agent

agent = Agent(instructions="You are helpful")
print(agent.start("Say hi"))
# Silent: no verbose logs, plain text returned, full string at once

TypeScript

typescript
import { Agent } from 'praisonai';

const agent = new Agent({ instructions: 'You are helpful' });
await agent.start('Say hi');
// Verbose logs, markdown-formatted, tokens streamed as they arrive

To make TypeScript behave like Python’s silent default, set the three fields explicitly:

typescript
import { Agent } from 'praisonai';

const agent = new Agent({
  instructions: 'You are helpful',
  output: { verbose: false, markdown: false, stream: false },
});

Best Practices

An option in this list didn't do anything — why?

It’s accepted for API compatibility with the Python SDK, but the TypeScript behaviour behind it hasn’t been implemented yet. Watch the console for a [praisonai] … not yet honoured notice at startup.

How do I silence the notices?

Set the environment variable PRAISONAI_PARITY_SILENT=1 (or PRAISONAI_PARITY_SILENT=true) for the process. This is what test suites use to keep output clean.

How do I know if a specific option works?

Pass it. If you see no notice at startup, it’s honoured. Otherwise check BEHAVIOUR_PARITY.md on main for the current list.

How can I help close a row?

Implement the behaviour, delete the option’s entry from the ledger, add a test that proves the option changes what the code does, and regenerate. See _dev/parity/README.md in the SDK repo.

If you add a waiver in signatures/waivers.yaml, scope it with a kinds: list (e.g. kinds: [default]). A waiver is keyed by parameter, so an unscoped one waiving a default difference also silenced a required-ness change on the same parameter — waivers now take an optional kinds, and required-ness is never covered implicitly.

A green checker report is no longer proof on its own. The checkers previously had eleven blind spots — flattened parameters that were matched but not checked, unrecognised TypeScript default forms silently matching Python’s None, and ts_only required members that were rendered but not evaluated — and PR #4880 closed them, so a clean run now genuinely means the row was inspected. Do not treat pre-#4880 green results as evidence.


Related