pcode 0.1.9__tar.gz → 0.1.10__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.
- {pcode-0.1.9 → pcode-0.1.10}/PKG-INFO +8 -5
- {pcode-0.1.9 → pcode-0.1.10}/pyproject.toml +14 -5
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/agent.py +13 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/app.py +195 -68
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/aside.py +8 -5
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/aside_guard.py +7 -3
- pcode-0.1.10/src/pcode/auth.py +34 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/background_delegation.py +136 -35
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/browser.py +74 -2
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/btw_view.py +9 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/model.py +34 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/session.py +4 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/commands.py +21 -2
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/compaction.py +41 -23
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/controller.py +146 -42
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/conversation_tree.py +11 -2
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/copy_ui.py +31 -2
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/delegation.py +34 -3
- pcode-0.1.10/src/pcode/drafts.py +202 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/edit_preview.py +2 -2
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/ext.py +5 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/extensions/browser.py +8 -1
- pcode-0.1.10/src/pcode/extensions/manager.py +406 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/extensions/session_history.py +23 -40
- pcode-0.1.10/src/pcode/extensions/workflows.py +189 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/file_refs.py +1 -1
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/filesystem.py +42 -54
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/host.py +8 -7
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/host_protocol.py +6 -2
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/host_ui.py +44 -12
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/isolated_delegation.py +218 -50
- pcode-0.1.10/src/pcode/library_log.py +57 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/live.py +74 -12
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/logins.py +21 -9
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/mcp_oauth.py +83 -1
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/models.py +5 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/native_results.py +59 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/planning.py +59 -23
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/popup_ui.py +49 -1
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/preferences.py +17 -3
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/prompt_images.py +1 -1
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/prompt_keys.py +12 -6
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/remote_print.py +2 -2
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/repo_context.py +7 -2
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/runtime.py +20 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/session_ui.py +4 -38
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/sessions.py +158 -141
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/shell_tools.py +10 -3
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/steering.py +17 -4
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/stream_display.py +12 -3
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/stream_events.py +19 -2
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/tool_display.py +15 -1
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/tree_ui.py +23 -9
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/ui.py +20 -6
- pcode-0.1.10/src/pcode/worker_channel.py +433 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/worker_ui.py +138 -18
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/workers.py +91 -3
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/worktree.py +1 -1
- pcode-0.1.9/src/pcode/auth.py +0 -17
- {pcode-0.1.9 → pcode-0.1.10}/.gitignore +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/LICENSE +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/README.md +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/__init__.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/_job_supervisor.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/appearance.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/aside_ui.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/block.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/cache_diagnostics.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/cache_settings.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/cache_warnings.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/__init__.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/cli.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/errors.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/login.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/messages.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/resume.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/session_pool.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/web.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/claude_sdk/workspace.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/cli.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/clipboard.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/code_mode.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/codex_login.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/command_transcript.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/completion.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/config.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/config_ui.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/context_breakdown.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/context_usage.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/conversation_ids.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/delta.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/diagnostics.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/edit_transcript.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/edit_ui.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/edits.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/email_remote/__init__.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/email_remote/cli.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/email_remote/listener.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/email_remote/mailbox.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/email_remote/outbound.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/email_remote/parsing.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/email_remote/render.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/email_remote/state.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/error_report.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/extension_guide.md +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/extensions/plan_mode.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/extensions/ponytail.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/extensions/reflect.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/extensions/sandbox.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/extensions/web_research.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/frame.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/gateway.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/git_diff.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/glyphs.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/history.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/history_embeddings.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/history_index.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/images.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/input_keys.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/inspection.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/inspector_ui.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/job_notices.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/jobs.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/jobs_ui.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/keyboard_protocol.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/keymap.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/layout_speed.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/links.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/links_ui.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/llm_proxy.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/mcp.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/mcp_notice.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/model_metadata.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/model_ui.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/obsidian_plans.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/output_limits.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/path_completion.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/plan_preview.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/plan_sizes.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/prefix_keys.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/proctitle.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/profile_benchmark.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/profiling.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/project_trust.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/reminders.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/remote.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/remote_profile.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/replay_benchmark.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/retries.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/rpc.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/sandbox.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/session_naming.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/shell.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/shell_mode.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/skills.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/stall_log.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/startup_input.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/strict_tools.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/syntax.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/syntax_colors.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/task_prompt.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/task_worktrees.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/terminal_color.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/terminal_notify.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/terminal_text.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/text_selection.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/theme.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/theme_gallery.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/thinking_markdown.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/token_accounting.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/tool_output_limits.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/tool_panel.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/transcript_log.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/transcript_notice.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/turn.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/update_check.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/usage.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/word_wrap.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/workspace.py +0 -0
- {pcode-0.1.9 → pcode-0.1.10}/src/pcode/workspace_filesystem.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: pcode
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.10
|
|
4
4
|
Summary: Terminal-native AI coding agent with background jobs, parallel worktrees, forkable sessions, and multi-model support
|
|
5
5
|
Project-URL: Homepage, https://github.com/cruxwell/pcode
|
|
6
6
|
Project-URL: Documentation, https://cruxwell.github.io/pcode/
|
|
@@ -20,18 +20,21 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.15
|
|
21
21
|
Classifier: Topic :: Software Development
|
|
22
22
|
Requires-Python: >=3.14
|
|
23
|
+
Requires-Dist: anthropic<3,>=2.7.0
|
|
23
24
|
Requires-Dist: filelock<5,>=4
|
|
24
|
-
Requires-Dist: genai-prices<0.
|
|
25
|
+
Requires-Dist: genai-prices<0.3,>=0.2.2
|
|
26
|
+
Requires-Dist: google-genai<3,>=2.34.0
|
|
25
27
|
Requires-Dist: httpx2<3,>=2.13.1
|
|
28
|
+
Requires-Dist: openai<4,>=3.48.0
|
|
26
29
|
Requires-Dist: prompt-toolkit==3.0.53
|
|
27
30
|
Requires-Dist: psutil<8,>=6
|
|
28
|
-
Requires-Dist: pydantic-ai-harness[codemode,coder,exa,playwright]<0.
|
|
29
|
-
Requires-Dist: pydantic-ai-slim[anthropic,bedrock,duckduckgo,google,groq,mcp,openai,web-fetch,xai]<3,>=2.
|
|
31
|
+
Requires-Dist: pydantic-ai-harness[codemode,coder,exa,playwright]<0.67,>=0.66.0
|
|
32
|
+
Requires-Dist: pydantic-ai-slim[anthropic,bedrock,duckduckgo,google,groq,mcp,openai,web-fetch,xai]<3,>=2.66.0
|
|
30
33
|
Requires-Dist: rich<16,>=15
|
|
31
34
|
Requires-Dist: websockets<17,>=15.0.1
|
|
32
35
|
Requires-Dist: yappi<2,>=1.7.6
|
|
33
36
|
Provides-Extra: claude
|
|
34
|
-
Requires-Dist: claude-agent-sdk<0.3,>=0.2.
|
|
37
|
+
Requires-Dist: claude-agent-sdk<0.3,>=0.2.180; extra == 'claude'
|
|
35
38
|
Description-Content-Type: text/markdown
|
|
36
39
|
|
|
37
40
|
<img width="1392" height="1522" alt="pcode in a dark terminal" src="docs/assets/screenshots/tabs-dark.png" />
|
|
@@ -21,7 +21,8 @@ classifiers = [
|
|
|
21
21
|
requires-python = ">=3.14"
|
|
22
22
|
dependencies = [
|
|
23
23
|
"filelock>=4,<5",
|
|
24
|
-
|
|
24
|
+
# 0.2.2 is the first to price claude-fable-5-2.
|
|
25
|
+
"genai-prices>=0.2.2,<0.3",
|
|
25
26
|
"httpx2>=2.13.1,<3",
|
|
26
27
|
# Exact: pcode relies on prompt_toolkit internals, and point releases
|
|
27
28
|
# change them. Bump on purpose after tests/test_prompt_toolkit_internals.py
|
|
@@ -33,14 +34,21 @@ dependencies = [
|
|
|
33
34
|
# itself is downloaded on first use, not at install.
|
|
34
35
|
# Harness ships from the pydantic-ai repo with every Pydantic AI release and
|
|
35
36
|
# pins pydantic-ai-slim to the same minor; bump both together.
|
|
36
|
-
"pydantic-ai-harness[exa,coder,codemode,playwright]>=0.
|
|
37
|
+
"pydantic-ai-harness[exa,coder,codemode,playwright]>=0.66.0,<0.67",
|
|
37
38
|
# duckduckgo and web-fetch back the bundled web_research extension when no
|
|
38
39
|
# provider-native search or Exa key is available.
|
|
39
40
|
# google covers both google and google-cloud providers; bedrock pulls boto3.
|
|
40
|
-
"pydantic-ai-slim[anthropic,bedrock,duckduckgo,google,groq,mcp,openai,web-fetch,xai]>=2.
|
|
41
|
+
"pydantic-ai-slim[anthropic,bedrock,duckduckgo,google,groq,mcp,openai,web-fetch,xai]>=2.66.0,<3",
|
|
42
|
+
# Floors for provider SDKs pydantic-ai-slim leaves loose. anthropic 2.7 is
|
|
43
|
+
# the first to list claude-fable-5-2. Pydantic AI's main branch caps
|
|
44
|
+
# google-genai below 3; follow it until a release says 3.x works.
|
|
45
|
+
"anthropic>=2.7.0,<3",
|
|
46
|
+
"openai>=3.48.0,<4",
|
|
47
|
+
"google-genai>=2.34.0,<3",
|
|
41
48
|
"rich>=15,<16",
|
|
42
49
|
# FastMCP 4.x OAuth callback server selects Uvicorn's websockets-sansio protocol.
|
|
43
|
-
#
|
|
50
|
+
# The <17 cap came from google-genai, which allows <18 since 2.34; raise it
|
|
51
|
+
# once the OAuth callback flow is checked on websockets 17.
|
|
44
52
|
"websockets>=15.0.1,<17",
|
|
45
53
|
]
|
|
46
54
|
|
|
@@ -49,7 +57,8 @@ dependencies = [
|
|
|
49
57
|
# (about 95 MB to download, 215 MB installed); the sdist would run whatever
|
|
50
58
|
# `claude` is on PATH instead of the CLI version pcode was verified against.
|
|
51
59
|
claude = [
|
|
52
|
-
|
|
60
|
+
# 0.2.180 bundles Claude Code 2.1.321, the first to serve claude-fable-5-2.
|
|
61
|
+
"claude-agent-sdk>=0.2.180,<0.3",
|
|
53
62
|
]
|
|
54
63
|
|
|
55
64
|
[project.urls]
|
|
@@ -52,6 +52,7 @@ from pcode.repo_context import create_repo_context
|
|
|
52
52
|
from pcode.shell_tools import JobShell
|
|
53
53
|
from pcode.strict_tools import create_strict_tools
|
|
54
54
|
from pcode.tool_output_limits import create_tool_output_limits
|
|
55
|
+
from pcode.worker_channel import ChildChannel
|
|
55
56
|
from pcode.workspace import WorkspaceGuard
|
|
56
57
|
|
|
57
58
|
if TYPE_CHECKING:
|
|
@@ -342,6 +343,8 @@ def _delegation(
|
|
|
342
343
|
replace(output_limits),
|
|
343
344
|
# A remote host's turn budget counts its sub-agents' work too.
|
|
344
345
|
*turn_limits(),
|
|
346
|
+
# ask_parent, parent messages and the report format, for every delegate.
|
|
347
|
+
ChildChannel(),
|
|
345
348
|
],
|
|
346
349
|
)
|
|
347
350
|
|
|
@@ -492,6 +495,16 @@ def resolve_model(model: str) -> Model | str:
|
|
|
492
495
|
return anthropic_model(model, key) if key else model
|
|
493
496
|
|
|
494
497
|
|
|
498
|
+
def is_unknown_model(error: BaseException) -> bool:
|
|
499
|
+
"""Whether Pydantic AI refused a model name it has no provider for.
|
|
500
|
+
|
|
501
|
+
Its message names only the model, so it is safe to show as is.
|
|
502
|
+
"""
|
|
503
|
+
from pydantic_ai.exceptions import UserError
|
|
504
|
+
|
|
505
|
+
return isinstance(error, UserError) and str(error).startswith("Unknown model:")
|
|
506
|
+
|
|
507
|
+
|
|
495
508
|
@dataclass(frozen=True)
|
|
496
509
|
class SideModel:
|
|
497
510
|
"""A model a single run uses instead of the agent's, with its own settings."""
|