tavus-cli 0.10.0__tar.gz → 0.10.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/.github/workflows/deploy-cloudflare-worker.yml +28 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/.github/workflows/pr-reviews.yml +4 -1
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/.github/workflows/pypi-cli.yml +27 -0
- tavus_cli-0.10.2/.release-please-manifest.json +3 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/CHANGELOG.md +15 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/PKG-INFO +1 -1
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/packages/tavus/pyproject.toml +2 -2
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/packages/tavus-mcp/pyproject.toml +2 -2
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/pyproject.toml +1 -1
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/__init__.py +1 -1
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/builder_guidance.json +2 -2
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/carrier_builder.py +2 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/server.py +20 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_build_and_verify.py +59 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/uv.lock +1 -1
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/package-lock.json +2 -2
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/package.json +1 -1
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/src/tavus.ts +23 -0
- tavus_cli-0.10.2/workers/tavus-mcp/src/version.ts +1 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/test/parity.test.ts +0 -1
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/test/tavus.test.ts +32 -0
- tavus_cli-0.10.0/.release-please-manifest.json +0 -3
- tavus_cli-0.10.0/workers/tavus-mcp/src/version.ts +0 -1
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/.agents/plugins/marketplace.json +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/.env.example +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/.github/workflows/ci.yml +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/.github/workflows/tail-cloudflare-worker.yml +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/.github/workflows/validate-staging-deployment.yml +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/.gitignore +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/AGENTS.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/PROMPT.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/README.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/docs/builder-guidance.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/docs/chatgpt-plugin.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/docs/gemini-enterprise/README.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/docs/gemini-enterprise/listing.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/docs/gemini-enterprise/test-queries.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/docs/usage-observability.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/packages/tavus/README.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/packages/tavus-mcp/README.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/plugins/tavus-pal/assets/icon-dark.svg +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/plugins/tavus-pal/assets/icon.svg +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/plugins/tavus-pal/mcp.json +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/plugins/tavus-pal/plugin.json +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/release-please-config.json +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/scripts/__init__.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/scripts/build_chatgpt_plugin.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/scripts/check_release_versions.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/skills/tavus-agentic-pals/SKILL.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/skills/tavus-agentic-pals/agents/openai.yaml +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/skills/tavus-agentic-pals/references/build-and-verify.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/skills/tavus-agentic-pals/references/builder-workflow.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/skills/tavus-agentic-pals/references/chat-mode.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/skills/tavus-agentic-pals/references/examples.md +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/builder_guidance.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/cli/__init__.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/cli/main.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/__init__.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/auth/__init__.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/auth/keyring_store.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/auth/oauth.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/auth/session.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/client/__init__.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/client/http.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/daily_transport.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/env.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/errors.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/pal_urls.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/patch.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/__init__.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/build_and_verify.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/capabilities.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/deployments.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/knowledge.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/options.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/quickstart.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/scaffold_embed.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/templates.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/recipes/tool_reuse.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/schemas/__init__.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/schemas/deployment.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/schemas/file_manifest.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/schemas/guardrail.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/schemas/objective.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/schemas/pal.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/schemas/pronunciation.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/src/tavus_mcp/sdk/schemas/tool.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/conftest.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/integration/test_cli.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/integration/test_client.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/integration/test_mcp_server.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/integration/test_oauth.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_auth.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_builder.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_capabilities.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_daily_transport.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_deployments.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_env.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_guardrail_schema.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_objective_schema.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_pal_schema.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_patch.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_pronunciation_schema.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_release_versions.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_scaffold_embed.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_tool_reuse.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/tests/unit/test_tool_schema.py +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/.dev.vars.example +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/src/index.ts +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/src/oauth-grant.ts +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/src/oauth-session.ts +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/src/oauth.ts +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/test/builder-guidance.test.ts +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/test/oauth-session.test.ts +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/test/worker-runtime.ts +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/tsconfig.json +0 -0
- {tavus_cli-0.10.0 → tavus_cli-0.10.2}/workers/tavus-mcp/wrangler.jsonc +0 -0
|
@@ -100,3 +100,31 @@ jobs:
|
|
|
100
100
|
with:
|
|
101
101
|
slack-bot-token: ${{ secrets.CVI_BOT_SLACK_TOKEN }}
|
|
102
102
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
103
|
+
|
|
104
|
+
notify-pr-environment:
|
|
105
|
+
name: Update PR Slack deployment reactions
|
|
106
|
+
needs: [deploy]
|
|
107
|
+
runs-on: ubuntu-latest
|
|
108
|
+
timeout-minutes: 10
|
|
109
|
+
continue-on-error: true
|
|
110
|
+
concurrency:
|
|
111
|
+
group: mango-${{ github.repository }}-${{ github.sha }}
|
|
112
|
+
queue: max
|
|
113
|
+
cancel-in-progress: false
|
|
114
|
+
permissions:
|
|
115
|
+
contents: read
|
|
116
|
+
pull-requests: read
|
|
117
|
+
deployments: read
|
|
118
|
+
steps:
|
|
119
|
+
- name: Update PR Slack messages
|
|
120
|
+
uses: Tavus-Engineering/pr-changelog-action/deploy@main
|
|
121
|
+
with:
|
|
122
|
+
slack-bot-token: ${{ secrets.CVI_BOT_SLACK_TOKEN }}
|
|
123
|
+
slack-channel-id: C0AGPSMKQ3Z
|
|
124
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
125
|
+
repo: ${{ github.repository }}
|
|
126
|
+
environment: ${{ github.event_name == 'workflow_dispatch' && inputs.environment == 'test' && 'dev' || 'stg' }}
|
|
127
|
+
deploy-sha: ${{ github.sha }}
|
|
128
|
+
run-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
|
129
|
+
deployment-environment: ${{ github.event_name == 'workflow_dispatch' && inputs.environment || 'stg' }}
|
|
130
|
+
resolve-mode: range
|
|
@@ -2,7 +2,10 @@ name: PR Review Notifications
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
pull_request:
|
|
5
|
-
types: [opened, ready_for_review
|
|
5
|
+
types: [opened, ready_for_review]
|
|
6
|
+
# Closed PRs may still have conflicts; execute only this trusted action, never PR code.
|
|
7
|
+
pull_request_target:
|
|
8
|
+
types: [closed]
|
|
6
9
|
|
|
7
10
|
permissions:
|
|
8
11
|
pull-requests: write
|
|
@@ -380,3 +380,30 @@ jobs:
|
|
|
380
380
|
with:
|
|
381
381
|
slack-bot-token: ${{ secrets.CVI_BOT_SLACK_TOKEN }}
|
|
382
382
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
383
|
+
|
|
384
|
+
notify-pr-prod:
|
|
385
|
+
name: Update PR Slack deployment reactions
|
|
386
|
+
needs: [preflight, production]
|
|
387
|
+
runs-on: ubuntu-latest
|
|
388
|
+
timeout-minutes: 10
|
|
389
|
+
continue-on-error: true
|
|
390
|
+
concurrency:
|
|
391
|
+
group: mango-${{ github.repository }}-${{ github.sha }}
|
|
392
|
+
queue: max
|
|
393
|
+
cancel-in-progress: false
|
|
394
|
+
permissions:
|
|
395
|
+
contents: read
|
|
396
|
+
pull-requests: read
|
|
397
|
+
deployments: read
|
|
398
|
+
steps:
|
|
399
|
+
- name: Update PR Slack messages
|
|
400
|
+
uses: Tavus-Engineering/pr-changelog-action/deploy@main
|
|
401
|
+
with:
|
|
402
|
+
slack-bot-token: ${{ secrets.CVI_BOT_SLACK_TOKEN }}
|
|
403
|
+
slack-channel-id: C0AGPSMKQ3Z
|
|
404
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
405
|
+
repo: ${{ github.repository }}
|
|
406
|
+
environment: prod
|
|
407
|
+
deploy-sha: ${{ needs.preflight.outputs.release_sha }}
|
|
408
|
+
run-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
|
409
|
+
resolve-mode: range
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.10.2](https://github.com/Tavus-Engineering/tavus-mcp/compare/v0.10.1...v0.10.2) (2026-10-16)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* resume PAL Builder history across MCP sessions ([#76](https://github.com/Tavus-Engineering/tavus-mcp/issues/76)) ([b8e0263](https://github.com/Tavus-Engineering/tavus-mcp/commit/b8e0263caecf4d4c33957bdbe9019234a668f1a9))
|
|
9
|
+
|
|
10
|
+
## [0.10.1](https://github.com/Tavus-Engineering/tavus-mcp/compare/v0.10.0...v0.10.1) (2026-10-15)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **ci:** keep PR Slack reactions aligned with deployments ([3f353af](https://github.com/Tavus-Engineering/tavus-mcp/commit/3f353af2b1816e0df41ca4126da92ff03b469d83))
|
|
16
|
+
* **ci:** retain every queued PR Slack notification ([a6cfa0c](https://github.com/Tavus-Engineering/tavus-mcp/commit/a6cfa0cbf68664c203507373ea59e915c26a777e))
|
|
17
|
+
|
|
3
18
|
## [0.10.0](https://github.com/Tavus-Engineering/tavus-mcp/compare/v0.9.3...v0.10.0) (2026-10-14)
|
|
4
19
|
|
|
5
20
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tavus"
|
|
3
|
-
version = "0.10.
|
|
3
|
+
version = "0.10.2" # x-release-please-version
|
|
4
4
|
description = "Official alias for tavus-cli, the Tavus CLI and MCP server."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
7
7
|
dependencies = [
|
|
8
|
-
"tavus-cli==0.10.
|
|
8
|
+
"tavus-cli==0.10.2", # x-release-please-version
|
|
9
9
|
]
|
|
10
10
|
|
|
11
11
|
[project.urls]
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tavus-mcp"
|
|
3
|
-
version = "0.10.
|
|
3
|
+
version = "0.10.2" # x-release-please-version
|
|
4
4
|
description = "Official alias for tavus-cli, which provides the tavus-mcp MCP server."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
7
7
|
dependencies = [
|
|
8
|
-
"tavus-cli==0.10.
|
|
8
|
+
"tavus-cli==0.10.2", # x-release-please-version
|
|
9
9
|
]
|
|
10
10
|
|
|
11
11
|
[project.urls]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"instructions": [
|
|
3
|
-
"Build
|
|
4
|
-
"For
|
|
3
|
+
"Build new PALs with tavus_pal_build_and_verify, which runs Charlie’s PAL Maker pipeline, publishes, and tests. Use tavus_pal_create or tavus_quickstart only for a finished system prompt when the creator asks to skip the build.",
|
|
4
|
+
"For existing PALs, read tavus_pal_builder_history and tavus_pal_capabilities_list first; preserve prior decisions and unrelated settings. Use tavus_pal_capability_attach, tavus_pal_capability_patch, and tavus_pal_capability_detach for built-ins.",
|
|
5
5
|
"Magic Canvas (magic_canvas) shows scorecards, running scores, charts, quizzes, forms, contact capture, text, and links during a call. A request to show a training scorecard means enabling Magic Canvas, not creating a tool such as record_training_scorecard. The PAL's own model drives the canvas; a saved tool or API response cannot draw on it. Model-generated quiz questions, scores, dice rolls, and random picks need no custom tool. Saving results to a backend is a separate step; recording data does not display it.",
|
|
6
6
|
"When the creator asks for on-screen interaction, attach magic_canvas with the needed magic_canvas_components and magic_canvas_usage_guidance in the same call: text and/or chart for a scorecard, input for forms, question for quizzes. Put one or two lines of when-to-show choreography in magic_canvas_usage_guidance, not in the system prompt. On attach, omitted components are disabled. If the use case only suggests a canvas, offer it once; a decline stays declined. Without a backend, say collection works on screen and delivery can be connected later; do not create a placeholder delivery tool.",
|
|
7
7
|
"Magic Canvas calendar collects date and time preferences and books nothing. Scheduling needs the creator's real HTTPS calendly.com booking link in scheduling_url, not a placeholder or scheduling_embed. Image and map output are not available.",
|
|
@@ -125,6 +125,7 @@ async def run_carrier_build(
|
|
|
125
125
|
if not conversation_id:
|
|
126
126
|
raise TavusError("RQH did not return a headless Charlie conversation_id.")
|
|
127
127
|
runtime["conversation_id"] = conversation_id
|
|
128
|
+
runtime["builder_history_context"] = str((created or {}).get("builder_history_context") or "")
|
|
128
129
|
conversation_url = str((created or {}).get("conversation_url") or "")
|
|
129
130
|
if not conversation_url:
|
|
130
131
|
details = await client.conversations.get(conversation_id)
|
|
@@ -763,6 +764,7 @@ async def build_carrier_context(
|
|
|
763
764
|
return "\n\n".join(
|
|
764
765
|
part
|
|
765
766
|
for part in (
|
|
767
|
+
str(runtime.get("builder_history_context") or ""),
|
|
766
768
|
"## Live builder resources\n\nThese are the creator's current libraries.",
|
|
767
769
|
_format_faces(faces),
|
|
768
770
|
_format_tools(tools),
|
|
@@ -80,6 +80,7 @@ _READ_ONLY_TOOL_NAMES = {
|
|
|
80
80
|
"tavus_builder_list",
|
|
81
81
|
"tavus_builder_get",
|
|
82
82
|
"tavus_builder_chat_history",
|
|
83
|
+
"tavus_pal_builder_history",
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
_DESTRUCTIVE_TOOL_NAMES = {
|
|
@@ -1535,6 +1536,21 @@ async def tavus_builder_delete(builder_id: str) -> Any:
|
|
|
1535
1536
|
return await client.builders.delete(builder_id)
|
|
1536
1537
|
|
|
1537
1538
|
|
|
1539
|
+
@mcp.tool()
|
|
1540
|
+
async def tavus_pal_builder_history(pal_id: str, limit: int = 40) -> Any:
|
|
1541
|
+
"""Read the saved creator/Charlie conversation shown in PAL Maker's Text tab.
|
|
1542
|
+
Read this before resuming work on an existing PAL. Resolves its live or draft
|
|
1543
|
+
ID to the same builder session; a directly created PAL may have no history.
|
|
1544
|
+
This is build history, not conversations people have with the finished PAL.
|
|
1545
|
+
Save new build exchanges with tavus_builder_append_messages using the returned
|
|
1546
|
+
builder_id, unless tavus_pal_build_and_verify already saved those messages.
|
|
1547
|
+
"""
|
|
1548
|
+
async with TavusClient.from_env(surface="mcp") as client:
|
|
1549
|
+
return await client.request(
|
|
1550
|
+
"GET", "/builder/history", params={"persona_id": pal_id, "limit": limit}
|
|
1551
|
+
)
|
|
1552
|
+
|
|
1553
|
+
|
|
1538
1554
|
@mcp.tool()
|
|
1539
1555
|
async def tavus_builder_chat_history(builder_id: str, limit: int = 50) -> Any:
|
|
1540
1556
|
async with TavusClient.from_env(surface="mcp") as client:
|
|
@@ -1545,6 +1561,10 @@ async def tavus_builder_chat_history(builder_id: str, limit: int = 50) -> Any:
|
|
|
1545
1561
|
async def tavus_builder_append_messages(
|
|
1546
1562
|
builder_id: str, messages: list[dict[str, str]]
|
|
1547
1563
|
) -> Any:
|
|
1564
|
+
"""Save actual new creator/assistant build dialogue to PAL Maker's Text tab.
|
|
1565
|
+
Do not resend history, invent dialogue, or include the finished PAL's replies.
|
|
1566
|
+
tavus_pal_build_and_verify already saves the exchanges it receives.
|
|
1567
|
+
"""
|
|
1548
1568
|
async with TavusClient.from_env(surface="mcp") as client:
|
|
1549
1569
|
return await client.builders.append_messages(builder_id, messages)
|
|
1550
1570
|
|
|
@@ -418,6 +418,65 @@ async def test_build_uses_headless_carrier_and_pal_maker_model(
|
|
|
418
418
|
assert smoke_create_body == {"persona_id": "p1", "chat": True}
|
|
419
419
|
|
|
420
420
|
|
|
421
|
+
@pytest.mark.asyncio
|
|
422
|
+
@respx.mock
|
|
423
|
+
async def test_resumed_carrier_keeps_saved_history_after_tool_context_update(
|
|
424
|
+
clean_env: Path,
|
|
425
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
426
|
+
) -> None:
|
|
427
|
+
"""A context refresh must not erase decisions restored by RQH at call start."""
|
|
428
|
+
_write_env(clean_env)
|
|
429
|
+
routes = _register_build_routes()
|
|
430
|
+
prior = "<prior_build_conversation>CREATOR: No Memory.</prior_build_conversation>"
|
|
431
|
+
routes["headless_create"].mock(
|
|
432
|
+
return_value=Response(
|
|
433
|
+
200,
|
|
434
|
+
json={
|
|
435
|
+
"conversation_id": "c_builder",
|
|
436
|
+
"conversation_url": "https://tavus.daily.co/c_builder",
|
|
437
|
+
"builder_history_context": prior,
|
|
438
|
+
},
|
|
439
|
+
)
|
|
440
|
+
)
|
|
441
|
+
session = FakeSession(
|
|
442
|
+
"c_builder",
|
|
443
|
+
turns=[
|
|
444
|
+
{
|
|
445
|
+
"text": "Updating the greeting.",
|
|
446
|
+
"tool_calls": [
|
|
447
|
+
{
|
|
448
|
+
"name": "draft_pal",
|
|
449
|
+
"tool_call_id": "call_greeting",
|
|
450
|
+
"arguments": json.dumps({"greeting_brief": "Ask about deliveries."}),
|
|
451
|
+
}
|
|
452
|
+
],
|
|
453
|
+
},
|
|
454
|
+
{"text": "The greeting is updated.", "tool_calls": []},
|
|
455
|
+
],
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
async def open_session(*_args: Any, **_kwargs: Any) -> FakeSession:
|
|
459
|
+
return session
|
|
460
|
+
|
|
461
|
+
monkeypatch.setattr(daily_transport, "open_conversation_session", open_session)
|
|
462
|
+
async with await _make_client() as client:
|
|
463
|
+
await carrier_builder.run_carrier_build(
|
|
464
|
+
client,
|
|
465
|
+
builder_id="b1",
|
|
466
|
+
pal_id="p1",
|
|
467
|
+
prompt="Change the greeting.",
|
|
468
|
+
max_rounds=1,
|
|
469
|
+
answers=None,
|
|
470
|
+
answer_provider=None,
|
|
471
|
+
on_builder_reply=None,
|
|
472
|
+
transcript=[],
|
|
473
|
+
)
|
|
474
|
+
assert session.contexts
|
|
475
|
+
assert all(context.count(prior) == 1 for context in session.contexts)
|
|
476
|
+
assert "<current_persona_state>" in session.contexts[-1]
|
|
477
|
+
assert session.closed
|
|
478
|
+
|
|
479
|
+
|
|
421
480
|
def test_map_draft_briefs_merges_facts_into_personality() -> None:
|
|
422
481
|
assert map_draft_briefs(
|
|
423
482
|
{
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tavus/tavus-mcp-worker",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@tavus/tavus-mcp-worker",
|
|
9
|
-
"version": "0.10.
|
|
9
|
+
"version": "0.10.2",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
12
12
|
"agents": "^0.12.2",
|
|
@@ -613,6 +613,29 @@ export function createTavusMcpServer(
|
|
|
613
613
|
),
|
|
614
614
|
);
|
|
615
615
|
|
|
616
|
+
server.tool(
|
|
617
|
+
"tavus_pal_builder_history",
|
|
618
|
+
"Read the saved creator/Charlie conversation shown in PAL Maker's Text tab before resuming work on an existing PAL. Resolves a live or draft PAL ID to its builder session. A directly created PAL may have no builder history. This is build history, not conversations people have with the finished PAL. Save new build exchanges with tavus_builder_append_messages using the returned builder_id, unless tavus_pal_build_and_verify already saved them.",
|
|
619
|
+
{ pal_id: z.string().min(1), limit: z.number().int().min(1).max(100).default(40) },
|
|
620
|
+
{ title: "Read PAL build history", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
621
|
+
async ({ pal_id, limit }) => toolResult(
|
|
622
|
+
await client.getPath("builder/history", { persona_id: pal_id, limit: String(limit) }),
|
|
623
|
+
),
|
|
624
|
+
);
|
|
625
|
+
|
|
626
|
+
server.tool(
|
|
627
|
+
"tavus_builder_append_messages",
|
|
628
|
+
"Save new creator and assistant messages to the builder conversation shown in PAL Maker's Text tab. Use the builder_id returned by tavus_pal_builder_history or tavus_pal_build_and_verify. Save only the actual build conversation, not PAL test replies or invented dialogue; do not resend history or exchanges already saved by tavus_pal_build_and_verify.",
|
|
629
|
+
{
|
|
630
|
+
builder_id: z.string().min(1),
|
|
631
|
+
messages: z.array(z.object({ role: z.enum(["user", "assistant"]), content: z.string().min(1) })).min(1),
|
|
632
|
+
},
|
|
633
|
+
writeAnnotations("Save build conversation", { destructiveHint: false, openWorldHint: false }),
|
|
634
|
+
async ({ builder_id, messages }) => toolResult(
|
|
635
|
+
await client.post(`builder/${builder_id}/append-messages`, { messages }),
|
|
636
|
+
),
|
|
637
|
+
);
|
|
638
|
+
|
|
616
639
|
server.tool(
|
|
617
640
|
"tavus_pal_create",
|
|
618
641
|
"Create a PAL directly from supplied configuration and return its PAL Maker editor URL. This low-level operation does not draft or verify the PAL through the guided PAL Maker pipeline; for a new PAL, use tavus_pal_build_and_verify unless the creator hands over a finished system prompt and asks to skip the build. Full-pipeline PALs default to tavus-gemma-4 unless layers.llm.model is supplied. Tools are first-class records referenced by top-level tool_ids; inline layers.llm.tools configuration is unsupported.",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const VERSION = "0.10.2"; // x-release-please-version
|
|
@@ -11,7 +11,6 @@ const LOCAL_ONLY_TOOLS = [
|
|
|
11
11
|
"tavus_pal_knowledge_upload",
|
|
12
12
|
// Low-level legacy Builder routes remain local-only. Both surfaces expose
|
|
13
13
|
// tavus_pal_build_and_verify through the supported headless Charlie contract.
|
|
14
|
-
"tavus_builder_append_messages",
|
|
15
14
|
"tavus_builder_chat_history",
|
|
16
15
|
"tavus_builder_create",
|
|
17
16
|
"tavus_builder_delete",
|
|
@@ -72,6 +72,38 @@ function registeredTools(
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
describe("Cloudflare Tavus MCP helpers", () => {
|
|
75
|
+
it("reads RQH builder history across MCP sessions and saves creator turns there", async () => {
|
|
76
|
+
const history = [{ role: "assistant", content: "Would you like Memory?" }];
|
|
77
|
+
vi.stubGlobal("fetch", vi.fn(async (input: string | URL | Request, init?: RequestInit) => {
|
|
78
|
+
const url = new URL(String(input));
|
|
79
|
+
if (url.pathname === "/v2/builder/history") {
|
|
80
|
+
expect(url.searchParams.get("persona_id")).toBe("p_live");
|
|
81
|
+
return Response.json({ builder_id: "b1", persona_id: "p_draft", messages: history });
|
|
82
|
+
}
|
|
83
|
+
if (url.pathname === "/v2/builder/b1/append-messages" && init?.method === "POST") {
|
|
84
|
+
history.push(...JSON.parse(String(init.body)).messages);
|
|
85
|
+
return Response.json(history);
|
|
86
|
+
}
|
|
87
|
+
throw new Error(`Unexpected request ${url.pathname}`);
|
|
88
|
+
}));
|
|
89
|
+
try {
|
|
90
|
+
const first = registeredTools(createTavusMcpServer({ TAVUS_API_KEY: "secret" }));
|
|
91
|
+
const before = await first.tavus_pal_builder_history.handler({ pal_id: "p_live", limit: 40 });
|
|
92
|
+
expect(JSON.parse(before.content[0].text).messages).toEqual(history);
|
|
93
|
+
await first.tavus_builder_append_messages.handler({
|
|
94
|
+
builder_id: "b1", messages: [{ role: "user", content: "No, keep it stateless." }],
|
|
95
|
+
});
|
|
96
|
+
const reopened = registeredTools(createTavusMcpServer({ TAVUS_API_KEY: "secret" }));
|
|
97
|
+
const after = await reopened.tavus_pal_builder_history.handler({ pal_id: "p_live", limit: 40 });
|
|
98
|
+
expect(JSON.parse(after.content[0].text).messages).toEqual([
|
|
99
|
+
{ role: "assistant", content: "Would you like Memory?" },
|
|
100
|
+
{ role: "user", content: "No, keep it stateless." },
|
|
101
|
+
]);
|
|
102
|
+
} finally {
|
|
103
|
+
vi.unstubAllGlobals();
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
75
107
|
it("publishes annotations for every hosted tool", () => {
|
|
76
108
|
const server = createTavusMcpServer({ TAVUS_API_KEY: "secret" });
|
|
77
109
|
const tools = registeredTools(server);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const VERSION = "0.10.0"; // x-release-please-version
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tavus_cli-0.10.0 → tavus_cli-0.10.2}/skills/tavus-agentic-pals/references/build-and-verify.md
RENAMED
|
File without changes
|
{tavus_cli-0.10.0 → tavus_cli-0.10.2}/skills/tavus-agentic-pals/references/builder-workflow.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|