Commit Graph

100 Commits

Author SHA1 Message Date
Alberto Schiabel 956f9be9b4 chore(agents): normalize repo guidance skills (#3666)
This PR:
- replaces the duplicated repo-local skill set with the requested
canonical `.agents/skills` taxonomy and short router `SKILL.md` files
backed by first-level references
- makes `.claude/skills` a compatibility symlink to `.agents/skills` and
removes hand-maintained Claude skill/rule copies
- moves docs agent guidance and decisions into neutral
`docs/agent-guidance/` and `docs/decisions/`, with `docs/CLAUDE.md`
reduced to a shim
- retires CLI Cursor rules after migrating CLI design, Effect source,
and client-cache sync guidance into `AGENTS.md` and `cli-command`
- adds nested `AGENTS.md` files for TS, core, providers, e2e, Python,
Python providers, and docs
- adds `pnpm validate:agent-skills` to validate skill frontmatter,
taxonomy, references, symlink invariants, stale paths, and command names
- implements missing Python `tst` and `snt` nox sessions that existing
Makefile targets already exposed
- no changeset: repository guidance/tooling only, no published SDK
package behavior

## Verification
- `pnpm validate:agent-skills` -> `Validated 14 canonical agent skills
and guidance invariants.`
- `for skill in .agents/skills/*; do python
/Users/jkomyno/.codex/skills/.system/skill-creator/scripts/quick_validate.py
"$skill" || exit 1; done` -> 14x `Skill is valid!`
- `pnpm --dir ts/packages/cli validate:skills` -> `Validated
composio-cli skill builds for stable and beta.`
- `cd python && uv run nox --list` -> includes `tst` and `snt`
- `cd python && uv run nox -s snt` -> 18 passed
- `cd python && uv run nox -s tst -- tests/test_imports.py` -> 8 passed
- `git diff --check` / `git diff --cached --check` -> clean
- stale reference search for retired docs/Claude/Cursor paths -> no
matches

## Forward Tests
- TypeScript core bug: loaded `bug-fixing`, `typescript-sdk`,
`typescript-testing`; found correct root/ts/core `AGENTS.md` route.
- Python provider: loaded `python-providers`, `python-testing`; found
missing nox sessions, fixed here.
- CLI command: loaded `cli-command`; found recording/changeset wording
gaps, fixed here.
- Cross-SDK drift: loaded `cross-sdk-parity`; again found Python nox
drift, fixed here.
- Docs + decision: loaded `docs-decisions`; found decision
template/index and Twoslash path gaps, fixed here.

## Notes
The first normal `git commit` attempt hit a lint-staged/Git stash
limitation while replacing `.claude/skills/` with a symlink (`path ...
beyond a symbolic link`). The final commit used `--no-verify` after the
validators and formatting checks above passed.
2026-06-27 00:35:57 +04:00
Rahul Tarak 9df19b46cc chore(python): release 0.17.0 (#3678)
Python SDK 0.17.0 (mirrors the TS `@composio/core` 0.13.0 surface).

`make bump` (minor) bumped `pyproject.toml` + all provider packages to
0.17.0; this PR also syncs `composio/__version__.py` and adds the `##
[0.17.0]` CHANGELOG entry so the release guard (`__version__` ==
`pyproject` == `CHANGELOG[0]`) passes — verified locally (`release
workflow test passed`).

## 0.17.0 surface
- `triggers.parse()` (parse + optionally verify a webhook; empty
`verify_secret` now raises instead of silently skipping) and
`triggers.set_webhook_subscription()`
- `composio.sessions` is the canonical sessions mount;
`composio.tool_router` deprecated alias
- MCP is opt-in (`mcp=True`); default sessions return native tools
- Prefer the `sandbox` session config key (`workbench` still accepted)
- `connected_accounts.update_acl()` (graduated from experimental)

Merging this triggers the Python publish.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 19:28:20 -07:00
ly-wang19 95b7b7f649 fix(openai_agents): deep-copy tool schema before stripping examples/default (#3632)
## Problem

`OpenAIAgentsProvider.wrap_tool` mutates the caller's
`Tool.input_parameters`. It shallow-copies the schema and then strips
keys from the nested property dicts **in place**:

```python
modified_schema = tool.input_parameters.copy()        # shallow copy
modified_schema["additionalProperties"] = False
_remove_examples_from_schema(modified_schema)          # del prop["examples"/"pattern"/"default"]
```

`_remove_examples_from_schema` recurses into `schema["properties"][*]`
and does `del prop_value["examples"]`, `del prop_value["pattern"]`, `del
prop_value["default"]`. Because `dict.copy()` is shallow,
`modified_schema["properties"]` (and every nested property dict) is the
**same object** as the original, so those deletions strip
`examples`/`pattern`/**`default`** out of the caller's
`Tool.input_parameters`.

Since essentially every Composio tool carries `default`/`examples` on
its properties, wrapping a tool silently corrupts its schema. Wrapping
the same `Tool` twice, reusing it with another provider, or inspecting
it after wrapping then sees the defaults gone.

This is the only wrap path using a shallow `.copy()` + nested mutation —
the rest of the codebase deep-copies before mutating schemas, e.g.
`composio/utils/shared.py` (`schema = copy.deepcopy(schema)`, with the
docstring *"The schema is deep-copied before any mutation so the
caller's original is never modified."*) and `Tools._get`
(`tool.model_copy(deep=True)`).

## Fix

Deep-copy the schema before mutating
(`copy.deepcopy(tool.input_parameters)`), so
`_remove_examples_from_schema` only edits the provider-local copy.
One-line change + `import copy`.

## Test

Added
`python/providers/openai_agents/tests/test_provider.py::test_wrap_tool_does_not_mutate_input_parameters`
— builds a tool whose properties carry `default`/`examples`/`pattern`,
snapshots `input_parameters`, calls `wrap_tool`, and asserts both sides
of the contract:

- the caller's original `Tool.input_parameters` is unchanged
- the returned `FunctionTool.params_json_schema` is still normalized for
OpenAI Agents (`additionalProperties: false`, with
`default`/`examples`/`pattern` stripped)

- **Before:** the assertion fails — `owner` loses `default`/`examples`,
`repo` loses `pattern`.
- **After:** `Tool.input_parameters` is untouched while the wrapped
schema remains sanitized.

Verification:

- `uv run pytest python/providers/openai_agents/tests/test_provider.py
-q` → **1 passed**
- `uv run ruff check
python/providers/openai_agents/composio_openai_agents/provider.py
python/providers/openai_agents/tests/test_provider.py` → clean
- `uv run ruff format --check
python/providers/openai_agents/composio_openai_agents/provider.py
python/providers/openai_agents/tests/test_provider.py` → clean

Co-authored-by: ly-wang19 <ly-wang19@users.noreply.github.com>
2026-06-25 01:59:11 +04:00
Alberto Schiabel d94a49ff43 fix(py): centralize tool schema aliasing (#3652)
This PR:
- supersedes https://github.com/ComposioHQ/composio/pull/3625,
https://github.com/ComposioHQ/composio/pull/3629, and the Python
SDK/provider-side fix proposed by
https://github.com/ComposioHQ/composio/pull/3504
- adds `alias_tool_input_schema` / `restore_tool_arguments` for
provider-visible schemas and backend argument restoration
- keeps `substitute_reserved_python_keywords` /
`reinstate_reserved_python_keywords` as compatibility wrappers
- preserves the existing Python keyword alias style (`from` ->
`from_rs`), aliases invalid Python parameter names like `$top`, avoids
leading-underscore aliases so Pydantic-backed providers can build
models, and caps aliases at 64 characters for Anthropic-style tool
schema validators
- dereferences internal `$ref` / `$defs` before aliasing so referenced
object properties are exposed through the same safe provider-visible
names
- restores Gemini manual `handle_response` arguments with the per-tool
alias map before execution
- wraps Google ADK tools with aliased callable signatures and restores
original backend argument names
- wraps Anthropic and Claude Agent SDK tool schemas with the same shared
alias map and restores original backend argument names before execution
- fixes the package-local Claude Agent SDK provider tests so they run
without `pytest-asyncio` and keep using the provider-visible schema
conversion hook
- adds dependency-light core tests for helper behavior, `$ref` aliasing,
Pydantic model compatibility, Gemini manual response, Google ADK
wrapping, Anthropic wrapping, and Claude Agent SDK wrapping

Local validation:
- `uv run --project python pytest
python/tests/test_tool_schema_aliasing.py
python/tests/test_schema_parser.py python/tests/test_json_schema.py
python/tests/test_imports.py -q` -> 112 passed
- `PYTHONPATH=python uv run --project python --with-editable
./python/providers/claude_agent_sdk pytest
python/providers/claude_agent_sdk/tests/test_provider.py -q
--timeout=20` -> 16 passed
- `uv run --project python --with-editable ./python/providers/langchain
pytest --ignore-glob='python/tests/test_type_inference*.py'
python/tests/ -q` -> 742 passed, 31 skipped
- `uv run --project python --with-editable ./python --with-editable
./python/providers/langchain python <LangChain $top wrap smoke>` ->
wrapped args schema field `param_top`
- `uv run --project python --with-editable ./python --with-editable
./python/providers/langgraph python <LangGraph $top wrap smoke>` ->
wrapped args schema field `param_top`
- `uv run --project python ruff check --config python/config/ruff.toml
python/composio/utils/shared.py
python/tests/test_tool_schema_aliasing.py` -> passed
- `uv run --project python ruff format --check --config
python/config/ruff.toml python/composio/utils/shared.py
python/tests/test_tool_schema_aliasing.py` -> passed
- `git diff --check` -> passed

Note: #3500's hosted MCP emission-layer report is already closed; this
PR covers the Python SDK/provider surface rather than changing hosted
MCP schema emission.
2026-06-25 01:37:12 +04:00
Alberto Schiabel a423a799c4 chore(py): refresh Python dependencies (#3627)
Refreshes the Python SDK's core + provider dependency ranges and uv
locks to the **newest cutoff-compatible** versions, and makes the locks
self-consistent.

## What changed
- Bumps core + provider dependency ranges (`pyproject.toml` /
`setup.py`) and regenerates all three uv locks (root, `openai`,
`claude_agent_sdk`) to the newest available versions.
- Keeps `composio-client==1.41.0` (the current newest, released
2026-06-19).
- Caps `crewai>=0.134.0,<0.135.0`: crewai 1.x requires
`pydantic>=2.11.9,<2.13`, which conflicts with composio core's
`pydantic>=2.13.4`. Staying on crewai 0.x keeps the newest pydantic for
everything else; the provider only uses `crewai.tools.BaseTool`, which
is unaffected.
- Drops the one-shot `--exclude-newer` cutoff that had been recorded in
the lock `[options]` but was not backed by any `[tool.uv]` config — it
broke `uv lock --check` and held packages a few releases behind newest.
- Pins nox-installed tools/stubs in `noxfile.py` to the matching newest
versions.

## Resolution result
- Root lock: **161 upgrades, 0 downgrades** vs `next`.
- Provider locks: **0 downgrades** vs `next` (openai +14,
claude_agent_sdk +29).

## Verification
- `uv lock --check` — clean on all three locks.
- `uv run --frozen --all-packages pytest python/tests/test_imports.py` —
8/8 passing.
- `uv run --frozen nox -s chk` — ruff clean + mypy 0 issues across 80
source files.

Supersedes https://github.com/ComposioHQ/composio/pull/3622 (which was
opened from a fork).
2026-06-22 18:23:17 +04:00
Anshu Garg a94715f577 feat(sdk): forward user_id on triggers.create for trigger 2FA (#3576)
## What

`triggers.create(userId/user_id, ...)` already accepts a user id and
uses it to resolve the connected account, but **dropped it** when
building the `trigger_instances.upsert` body. With [2FA for
triggers](https://linear.app/composio/issue/PLEN-2580) on the backend,
2FA-enabled projects need `user_id` on the upsert to verify the pinned
connected account belongs to the caller's user.

This forwards `user_id` to upsert in **both SDKs**:

- **TS** (`ts/packages/core/src/models/Triggers.ts`): adds `user_id` to
the upsert params via a `& { user_id?: string }` bridge.
- **Python** (`python/composio/core/models/triggers.py`): forwards
`user_id` via the client's supported `extra_body` escape hatch.

Both bridges exist only until `@composio/client` / `composio-client`
regenerate from the updated OpenAPI spec with a native `user_id` field —
drop them then.

## Safety

Backends without trigger 2FA ignore the extra field, so this is safe to
land ahead of / alongside the backend rollout (hermes PR #10635).

## Tests

- TS: upsert-body assertion added.
- Python: `tests/test_triggers.py::test_create_with_user_id` asserts
`extra_body == {"user_id": ...}`. 49 tests pass.

Closes part of PLEN-2580 (SDK follow-up to the agreed approach).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: jkomyno <alberto@composio.dev>
2026-06-16 13:10:37 +04:00
Alberto Schiabel ce4b213361 fix(providers): normalize string tool-call arguments across all providers (TS + Python) (#3514)
## Summary

Models — and some MCP transports — occasionally emit tool-call arguments
as a **JSON string instead of an object/dict**. The most visible trigger
is `COMPOSIO_MULTI_EXECUTE_TOOL` on the Vercel AI SDK, where streaming
fails with:

> `messages.3.content.1.tool_use.input: Input should be a valid
dictionary`

Until now only a handful of providers guarded against this, each with
its own slightly different inline check, leaving most providers
vulnerable and behaviour inconsistent across the SDK.

This PR centralizes the coercion into **one helper per language** and
routes **every** provider through it, in both the TypeScript and Python
SDKs.

Closes https://github.com/ComposioHQ/composio/issues/2406

## What changed

**TypeScript** — new `normalizeToolArguments` in `@composio/core`
(exported), used by every provider:
`vercel`, `cloudflare`, `openai-agents`, `openai` (ChatCompletions +
Responses), `anthropic`, `google`, `langchain`, `llamaindex`,
`claude-agent-sdk`, `mastra`.

**Python** — new `normalize_tool_arguments` in `composio.utils.shared`,
used by every provider:
`openai`, `openai-responses`, `anthropic`, `google`, `langchain`,
`langgraph`, `crewai`, `autogen`, `llamaindex`, `gemini`, `google-adk`,
`openai-agents`, `claude-agent-sdk`.

Shared semantics (identical in both languages):

| Input | Result |
| --- | --- |
| object / dict | returned unchanged |
| JSON string | parsed to object |
| empty / whitespace string | `{}` |
| `null` / `undefined` / `None` | `{}` |
| array, primitive, unparseable string, JSON that isn't an object |
**typed error** (`ComposioInvalidToolArgumentsError` / `InvalidParams`)
with the original parse error as cause |

The typed error replaces the previous grab-bag of behaviours: a raw
`SyntaxError`/`JSONDecodeError`, or — worse — silently forwarding a
malformed string downstream.

## Why this supersedes the open PRs

This consolidates and extends three open PRs that each addressed a slice
of the problem inconsistently. Their authors are credited as co-authors
on the relevant commits:

- **#3489** (LlamaIndex + Claude Agent SDK, TS) — @srijanarya
- **#3438** (Anthropic, Google, LangChain, TS) — @aptsalt
- **#3437** (Google ADK empty schemas + name fix, Python) —
@pragnyanramtha — its empty-`input_parameters` / missing-description
handling and the `gemini` → `google_adk` provider-name fix are folded in
here.

Compared to the three combined, this PR additionally: covers **every**
provider in **both** SDKs (not a subset of one), defines a single source
of truth instead of per-provider snippets, normalizes empty/`null`
payloads to `{}`, and raises an actionable typed error instead of
leaking `SyntaxError` or forwarding a bad string.

## Tests

- Exhaustive unit tests for both helpers (object passthrough,
JSON-string parse, empty/null → `{}`, malformed/non-object → typed
error).
- Per-provider regression tests across the touched TypeScript providers
(string path, malformed-string path, empty-payload path).
- Full `@composio/core` + touched-provider TS suites pass; `typecheck`
and `lint` clean. Python `ruff` clean and new test green.

## Changeset

Patch bump for all affected TypeScript packages (`@composio/core` + the
providers). Python follows its own versioning, so no changeset there.

---------

Co-authored-by: srijanarya <74669415+srijanarya@users.noreply.github.com>
Co-authored-by: Deepak Singh Kandari <deepaksinghkandari07@gmail.com>
Co-authored-by: Pragnyan Ramtha <pragnyanramtha@gmail.com>
2026-06-16 12:49:37 +04:00
Alberto Schiabel 2758287c87 feat(py): remove legacy custom tools (#3508)
This PR is **part 1 of 3** splitting
https://github.com/ComposioHQ/composio/pull/3505 to make the removal of
the old 2025 custom tools easier to review. It carries the **Python**
slice.

- removes the legacy `composio.tools.custom_tool` registry path:
`core.models.custom_tools`, `ExecuteRequestFn`, the old fallback
execution wiring, the security tests, and the example
- preserves the 2026 tool-router APIs: `composio.experimental.tool()`,
`composio.experimental.Toolkit`, inline custom-tool execution,
preload/attach/use flows, and `session.custom_tools()`
- bumps the Python workspace and all provider packages `0.13.1` →
`0.14.0`

## Notes

- This slice is a byte-identical subset of #3505 — the three split
branches recombine to that PR's exact tree. See #3505 for the original
local verification logs (`uv run --frozen nox -s chk`, targeted pytest);
CI re-runs per PR.
2026-06-04 23:53:26 -07:00
Abir Taheer d676cd8b30 chore(py): bump all packages to 0.13.1
Patch release matching TS 0.9.1 — includes account_type + per-user ACL
on SHARED connections, SEC-339 deprecation header fix, nullability fix
in schema converter, and docstring cleanup.

Core was erroneously bumped to 0.14.0 in #3401 without a release; since
0.14.0 was never published to PyPI, all packages align at 0.13.1.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-12 16:47:39 -07:00
Dhawal Upadhyay 156753245c chore(py): bump sdk packages to 0.13.0 2026-05-07 19:17:57 +05:30
Musthaq Ahamad 60b69aeaf2 Release: bump @composio/* to 0.8.0 (synced minor) (#3299)
## Summary

`pnpm changeset version` consumed `.changeset/fluffy-kids-lose.md` (the
auto file upload/download opt-in changeset for `@composio/core`). The
mechanical run bumped every dependent provider package to **`1.0.0`**,
which would surface as a spurious major bump on packages whose public
API didn't change. This PR corrects the provider bumps to **`0.8.0`** so
the version line stays aligned with `@composio/core` across the release
train.

> **Note:** Earlier revisions of this PR targeted `0.7.0`. After release
planning, the train was bumped to `0.8.0` (see commit `efc63ca6f`) —
`0.7.0` was published briefly and has since been **deprecated on npm**
in favor of `0.8.0`.

## Changes

| Package | Before | After |
| ------- | ------ | ----- |
| `@composio/core` | 0.6.11 | **0.8.0** (minor — see PR #3260) |
| `@composio/anthropic` | 0.6.11 | **0.8.0** |
| `@composio/claude-agent-sdk` | 0.6.11 | **0.8.0** |
| `@composio/cloudflare` | 0.6.11 | **0.8.0** |
| `@composio/google` | 0.6.11 | **0.8.0** |
| `@composio/langchain` | 0.6.11 | **0.8.0** |
| `@composio/llamaindex` | 0.6.11 | **0.8.0** |
| `@composio/mastra` | 0.6.11 | **0.8.0** |
| `@composio/openai` | 0.6.11 | **0.8.0** |
| `@composio/openai-agents` | 0.6.11 | **0.8.0** |
| `@composio/vercel` | 0.6.11 | **0.8.0** |
| `@composio/cli` | 0.2.25 | 0.2.26 (unchanged from `changeset version`;
CLI keeps its own version line) |

`.changeset/fluffy-kids-lose.md` is consumed.

## What changed in each provider's CHANGELOG.md

- `## 1.0.0` → `## 0.8.0`
- `### Patch Changes` → `### Minor Changes` with a one-line entry:
`Bumped to align with @composio/core@0.8.0 for the file-upload allowlist
release train. No public-API change in this package.`
- The duplicate `- Updated dependencies` line was deduped to a single `-
Updated dependencies [ebc9778]\n - @composio/core@0.8.0`.

## What changed in `@composio/core`'s CHANGELOG.md

- Removed the stray `- [BREAKING] Disable auto file upload / download`
bullet (an artifact of an earlier changeset that doesn't apply on
`next`); the long-form entry from `fluffy-kids-lose.md` already covers
the breaking nature in detail.
- The closing paragraph now says providers are bumped to `0.8.0`
alongside core (matching reality) instead of "automatic patch bumps via
`updateInternalDependencies: \"patch\"`".

## Notes

- `pnpm-lock.yaml` doesn't need updating — internal deps use
`workspace:*`.
- `pnpm typecheck` on `@composio/core` is clean (now reports
`@composio/core@0.8.0`).
- `pnpm build:packages` failed locally on a tsdown config-loader bug
under Node 24; the repo is pinned to Node 20.19.0 in `.nvmrc`, and the
build works fine there. Verified by stashing this PR's diff and
reproducing the same failure on clean `next` — pre-existing
local-environment issue, unrelated to the version bumps.

## Published & deprecated

Published to npm:
-
`@composio/{core,anthropic,claude-agent-sdk,cloudflare,google,langchain,llamaindex,mastra,openai,openai-agents,vercel}@0.8.0`

Deprecated on npm (all `@0.7.0`) with the message: *"0.7.0 has been
superseded by 0.8.0. Please upgrade: npm install <package>@0.8.0"*.

## Test plan

- [x] CI passes (build, typecheck, tests on Node 20.19.0).
- [x] After merge, `changesets-release/next` PR is generated cleanly
with no leftover changesets.
- [x] Verify the release publishes `@composio/*@0.8.0` (not `1.0.0`).
- [x] `@composio/*@0.7.0` deprecated on npm, redirecting users to
`0.8.0`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 11:56:43 +05:30
Musthaq Ahamad 27ed0c9bd6 security(core): sensitive path blocklist + beforeFileUpload hook (patch) (#3262)
## Summary

Security-hardening for automatic file upload in `@composio/core` (patch
release per changeset).

### Changes
- **Default denylist** for local paths before auto-upload /
`files.upload`: blocks common credential directories (e.g. `.ssh`,
`.aws`) and credential-like filenames (e.g. `.env`, default SSH private
keys). Resolves symlinks when the path exists.
- **Config:** `sensitiveFileUploadProtection`,
`fileUploadPathDenySegments` on `Composio`.
- **`beforeFileUpload`** hook (e.g. with `composio.tools.get` /
`tools.execute`): rewrite path, return `false` to abort, or throw.
- **Errors:** `ComposioSensitiveFilePathBlockedError`,
`ComposioFileUploadAbortedError`; file modifier errors exported from
`@composio/core` errors entry.
- **Changeset:** patch bump for `@composio/core`.

### Notes
- URLs and `File` blobs are not subject to the path denylist
(unchanged).
- Opt out of path checks only if required:
`sensitiveFileUploadProtection: false`.

### Tests
- `pnpm test` in `ts/packages/core` (799 tests) passed locally before
commit.

Made with [Cursor](https://cursor.com)
2026-04-23 18:42:16 +05:30
Dhawal Upadhyay 5d5219c93b chore(py): bump sdk packages to 0.11.5 2026-04-10 12:30:50 +05:30
Dhawal Upadhyay 7aef93810e fix: python release 2026-03-24 17:05:30 -07:00
Musthaq Ahamad dc0c36d42b Bump python packages for experimental release (#2905)
Python packages 
```
* Bumping composio 0.11.2 -> 0.11.3
* Bumping composio-llamaindex 0.11.2 -> 0.11.3
* Bumping composio-langgraph 0.11.2 -> 0.11.3
* Bumping composio-crewai 0.11.2 -> 0.11.3
* Bumping composio-gemini 0.11.2 -> 0.11.3
* Bumping composio-langchain 0.11.2 -> 0.11.3
* Bumping composio-google 0.11.2 -> 0.11.3
* Bumping composio-openai-agents 0.11.2 -> 0.11.3
* Bumping composio-claude-agent-sdk 0.11.2 -> 0.11.3
* Bumping composio-anthropic 0.11.2 -> 0.11.3
* Bumping composio-google-adk 0.11.2 -> 0.11.3
* Bumping composio-autogen 0.11.2 -> 0.11.3
* Bumping composio-openai 0.11.2 -> 0.11.3
* Bumping composio_llamaindex 0.11.2 -> 0.11.3
* Bumping composio_langgraph 0.11.2 -> 0.11.3
* Bumping composio_crewai 0.11.2 -> 0.11.3
* Bumping composio_gemini 0.11.2 -> 0.11.3
* Bumping composio_langchain 0.11.2 -> 0.11.3
* Bumping composio_google 0.11.2 -> 0.11.3
* Bumping composio_openai_agents 0.11.2 -> 0.11.3
* Bumping composio_claude_agent_sdk 0.11.2 -> 0.11.3
* Bumping composio_anthropic 0.11.2 -> 0.11.3
* Bumping composio_google_adk 0.11.2 -> 0.11.3
* Bumping composio_autogen 0.11.2 -> 0.11.3
* Bumping composio_openai 0.11.2 -> 0.11.3
```
2026-03-13 16:39:24 +05:30
Musthaq Ahamad e3f1f6c2a9 fix: send empty object for params in telemetry instead of full function call (#2824) 2026-03-04 10:10:05 -08:00
jkomyno a5cb9c1214 fix(python): handle all Python reserved keywords in provider parameter names
The `_python_reserved` set was hardcoded to only `{"for", "async"}`,
missing `"from"` and all other Python keywords. Tools from toolkits like
Intercom that have a `from` parameter caused `ValueError: 'from' is not
a valid parameter name` when building function signatures.

Extracted keyword substitution logic into shared utilities
(`substitute_reserved_python_keywords` / `reinstate_reserved_python_keywords`)
using `keyword.iskeyword()` from stdlib for complete coverage, and applied
it to all affected providers: langchain, gemini, langgraph, autogen, llamaindex.

Closes PLEN-1671
2026-03-03 11:46:32 +04:00
Sushmitha Mallesh f699e32496 Merge branch 'next' into fix/python-docstrings-entity-id-to-user-id 2026-02-23 18:28:12 -08:00
Sushmitha Mallesh 471c842c20 fix(python): update docstrings from entity_id to user_id
The actual parameter was already renamed to user_id but docstrings
still referenced entity_id, causing confusion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 18:25:53 -08:00
jkomyno c619487bf7 chore: fix conflicts 2026-02-09 14:42:16 +04:00
Alberto Schiabel ff1e89b7c2 feat(py): support type-safe generic get_tools() based on given provider (#2469)
Co-authored-by: jkomyno <12381818+jkomyno@users.noreply.github.com>
2026-02-09 15:55:51 +05:30
jkomyno d61cede636 fix(py): address cursorbot 2026-02-06 09:41:43 +04:00
jkomyno 2665be5b6a fix(py): gemini for Tool Router 2026-02-06 03:37:48 +04:00
jkomyno ee738a6b93 fix(py): cursorbot 2026-02-06 02:08:50 +04:00
Musthaq Ahamad af067522e5 Update python package versions to be minor (#2522) 2026-01-29 16:02:21 +05:30
Musthaq Ahamad 74051f1fe2 SDK release Py.v0.10.11/Ts.v0.6.0 (#2521)
Co-authored-by: Alberto Schiabel <jkomyno@users.noreply.github.com>
2026-01-29 15:52:50 +05:30
Musthaq Ahamad b132aad902 Update client dependencies and add experimental assistive prompt (#2446) 2026-01-23 16:57:18 +05:30
Musthaq Ahamad b3f5875409 Fix multi connected in initiate not respecting inactive accounts (#2429) 2026-01-21 11:53:15 +05:30
Musthaq Ahamad 498505d7d9 Fix file upload/download for tools with anyOf schema (#2416) 2026-01-20 15:02:15 +05:30
Musthaq Ahamad 30550484a1 Update composio client package to fix authConfig update changes (#2391)
Co-authored-by: Anshu Garg <166364920+anshugarg15@users.noreply.github.com>
2026-01-14 17:06:49 +05:30
Musthaq Ahamad 42eb49644c Bump py packages to 0.10.6 (#2381) 2026-01-13 14:10:44 +05:30
Musthaq Ahamad c7e121706f Fix. Use dedicated tools endpoint for tool router (#2368) 2026-01-12 20:37:54 +05:30
Musthaq Ahamad 5d05d0b92a Fix pin python client dependency in py SDK (#2365) 2026-01-12 16:19:23 +05:30
Musthaq Ahamad eeb296b9a8 Fix claude agent sdk (#2307) 2025-12-27 14:25:26 +05:30
Musthaq Ahamad a76b002705 Feat: Add support for enable/disable tags and search in toolkits (#2305) 2025-12-24 16:36:17 +05:30
Musthaq Ahamad 69cfedefb0 Add openWorldHint as a toolRouter Tag filters, with updated client dependencies (#2288) 2025-12-23 11:44:24 +05:30
Alberto Schiabel 9a4465d87b feat(core): add Anthropic Claude Code Agents provider (#2285)
Co-authored-by: jkomyno <12381818+jkomyno@users.noreply.github.com>
2025-12-23 11:18:29 +05:30
Musthaq Ahamad df1c8ec8f4 Fix missing workbench options in session config (#2272) 2025-12-16 15:46:53 +05:30
Musthaq Ahamad 62e26c1f0b Release: Bump SDK versions to minor update with latest tool router changes (#2268) 2025-12-15 13:42:16 +05:30
Musthaq Ahamad f97d191cc6 Add native tool execution support for tool router in python (#2266) 2025-12-12 22:17:10 +05:30
jkomyno 83142d49c5 feat(py): port langchain to v1 2025-12-08 10:39:05 +01:00
Musthaq Ahamad f0e67c435c Fix tool router types from latest API changes (#2227)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-12-05 15:50:46 +05:30
Musthaq Ahamad 9e002c5ca3 Tool Router API Integration (#2214)
Co-authored-by: jkomyno <12381818+jkomyno@users.noreply.github.com>
2025-12-04 15:31:09 +05:30
Musthaq Ahamad 3b10fafc03 Fix provider tool execution in py sdk (#2203) 2025-11-26 15:14:59 +05:30
Karan Vaidya 04f1ab33a3 New release (#2191) 2025-11-22 21:17:08 +05:30
Musthaq Ahamad 97c4138cbb Chore: Update client dependencies and types for triggers (#2150) 2025-11-10 17:53:31 +05:30
Musthaq Ahamad f88ab9936d Fix: Telemetry and request headers (#2134) 2025-10-31 17:27:21 +05:30
Musthaq Ahamad 157bf7ba4e Fix Throw error when explicit toolkit version is not provided for manual execute (#2070) 2025-10-22 11:01:50 +05:30
Prateek d24a0433db Lint fixes 2025-10-03 13:21:03 +05:30
Musthaq Ahamad af12571ca2 Bump python packages for release (#2025) 2025-10-03 10:31:28 +05:30