iCode-TUI 0.29.1__py3-none-any.whl
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.
- chrys/__init__.py +16 -0
- chrys/app/__init__.py +3 -0
- chrys/app/acp/__init__.py +3 -0
- chrys/app/acp/bridge.py +664 -0
- chrys/app/acp/content.py +132 -0
- chrys/app/acp/doc/frontend-api.md +425 -0
- chrys/app/acp/history.py +585 -0
- chrys/app/acp/server.py +1796 -0
- chrys/app/acp/session_manager.py +1815 -0
- chrys/app/acp/tool_status.py +45 -0
- chrys/app/cli/__init__.py +3 -0
- chrys/app/cli/acp.py +178 -0
- chrys/app/cli/app.py +165 -0
- chrys/app/cli/approvals.py +101 -0
- chrys/app/cli/headless.py +223 -0
- chrys/app/cli/launch_cwd.py +42 -0
- chrys/app/cli/profiles.py +298 -0
- chrys/app/cli/progress.py +857 -0
- chrys/app/cli/run.py +425 -0
- chrys/app/cli/serve.py +1593 -0
- chrys/app/cli/tool_summary.py +225 -0
- chrys/app/cli/trajectory.py +201 -0
- chrys/app/cli/workflow.py +601 -0
- chrys/app/features/__init__.py +3 -0
- chrys/app/features/buddy/__init__.py +3 -0
- chrys/app/features/buddy/actions.py +68 -0
- chrys/app/features/buddy/animation.py +76 -0
- chrys/app/features/buddy/commands.py +196 -0
- chrys/app/features/buddy/docs/design.md +187 -0
- chrys/app/features/buddy/hatchery.py +80 -0
- chrys/app/features/buddy/lifecycle.py +41 -0
- chrys/app/features/buddy/model.py +265 -0
- chrys/app/features/buddy/pixel_renderer.py +113 -0
- chrys/app/features/buddy/pixel_sprites.py +279 -0
- chrys/app/features/buddy/portrait.py +76 -0
- chrys/app/features/buddy/progression.py +58 -0
- chrys/app/features/buddy/replies.py +191 -0
- chrys/app/features/buddy/sprites/alien.toml +70 -0
- chrys/app/features/buddy/sprites/axolotl.toml +71 -0
- chrys/app/features/buddy/sprites/bat.toml +69 -0
- chrys/app/features/buddy/sprites/bee.toml +69 -0
- chrys/app/features/buddy/sprites/cactus.toml +73 -0
- chrys/app/features/buddy/sprites/capybara.toml +70 -0
- chrys/app/features/buddy/sprites/cat.toml +69 -0
- chrys/app/features/buddy/sprites/crab.toml +70 -0
- chrys/app/features/buddy/sprites/dragon.toml +71 -0
- chrys/app/features/buddy/sprites/duck.toml +69 -0
- chrys/app/features/buddy/sprites/fox.toml +69 -0
- chrys/app/features/buddy/sprites/frog.toml +70 -0
- chrys/app/features/buddy/sprites/ghost.toml +70 -0
- chrys/app/features/buddy/sprites/goose.toml +69 -0
- chrys/app/features/buddy/sprites/jelly.toml +70 -0
- chrys/app/features/buddy/sprites/llama.toml +70 -0
- chrys/app/features/buddy/sprites/mushroom.toml +69 -0
- chrys/app/features/buddy/sprites/octopus.toml +70 -0
- chrys/app/features/buddy/sprites/owl.toml +70 -0
- chrys/app/features/buddy/sprites/panda.toml +71 -0
- chrys/app/features/buddy/sprites/penguin.toml +69 -0
- chrys/app/features/buddy/sprites/rabbit.toml +70 -0
- chrys/app/features/buddy/sprites/robot.toml +72 -0
- chrys/app/features/buddy/sprites/shark.toml +70 -0
- chrys/app/features/buddy/sprites/snail.toml +69 -0
- chrys/app/features/buddy/sprites/snake.toml +69 -0
- chrys/app/features/buddy/sprites/tabby.toml +69 -0
- chrys/app/features/buddy/sprites/turtle.toml +69 -0
- chrys/app/features/buddy/store.py +143 -0
- chrys/app/features/session_title/__init__.py +7 -0
- chrys/app/features/session_title/updater.py +582 -0
- chrys/app/installer.py +651 -0
- chrys/app/parsing.py +17 -0
- chrys/app/tui/__init__.py +3 -0
- chrys/app/tui/app.py +1287 -0
- chrys/app/tui/behaviors/__init__.py +3 -0
- chrys/app/tui/behaviors/click_outside_dismiss.py +90 -0
- chrys/app/tui/behaviors/insert_clipboard.py +73 -0
- chrys/app/tui/behaviors/right_click_copy.py +146 -0
- chrys/app/tui/binding_display.py +139 -0
- chrys/app/tui/buddy_messages.py +17 -0
- chrys/app/tui/buddy_reply.py +86 -0
- chrys/app/tui/chrys.tcss +549 -0
- chrys/app/tui/clipboard.py +109 -0
- chrys/app/tui/copy_messages.py +10 -0
- chrys/app/tui/i18n.py +230 -0
- chrys/app/tui/language.py +58 -0
- chrys/app/tui/notifications/__init__.py +12 -0
- chrys/app/tui/notifications/drivers.py +180 -0
- chrys/app/tui/notifications/service.py +126 -0
- chrys/app/tui/notifications/settings.py +141 -0
- chrys/app/tui/screens/__init__.py +3 -0
- chrys/app/tui/screens/agents/__init__.py +8 -0
- chrys/app/tui/screens/agents/agent_draft_store.py +937 -0
- chrys/app/tui/screens/agents/config.py +2142 -0
- chrys/app/tui/screens/agents/config.tcss +169 -0
- chrys/app/tui/screens/agents/panels/__init__.py +3 -0
- chrys/app/tui/screens/agents/panels/acp.py +1176 -0
- chrys/app/tui/screens/agents/panels/basic.py +497 -0
- chrys/app/tui/screens/agents/panels/compaction.py +231 -0
- chrys/app/tui/screens/agents/panels/config_card.py +218 -0
- chrys/app/tui/screens/agents/panels/instructions.py +91 -0
- chrys/app/tui/screens/agents/panels/markdown_report.py +76 -0
- chrys/app/tui/screens/agents/panels/mcp.py +2262 -0
- chrys/app/tui/screens/agents/panels/memory.py +684 -0
- chrys/app/tui/screens/agents/panels/path_entry.py +227 -0
- chrys/app/tui/screens/agents/panels/skills.py +806 -0
- chrys/app/tui/screens/agents/panels/subagents.py +652 -0
- chrys/app/tui/screens/agents/panels/tools.py +205 -0
- chrys/app/tui/screens/agents/picker.py +103 -0
- chrys/app/tui/screens/agents/skill_paths.py +38 -0
- chrys/app/tui/screens/agents/validation_messages.py +452 -0
- chrys/app/tui/screens/dialogs/__init__.py +35 -0
- chrys/app/tui/screens/dialogs/agent_load.py +834 -0
- chrys/app/tui/screens/dialogs/agent_load.tcss +78 -0
- chrys/app/tui/screens/dialogs/app_mode.py +55 -0
- chrys/app/tui/screens/dialogs/approval/__init__.py +15 -0
- chrys/app/tui/screens/dialogs/approval/approval.tcss +311 -0
- chrys/app/tui/screens/dialogs/approval/bodies/__init__.py +3 -0
- chrys/app/tui/screens/dialogs/approval/bodies/file_edit.py +210 -0
- chrys/app/tui/screens/dialogs/approval/bodies/sub_agent.py +82 -0
- chrys/app/tui/screens/dialogs/approval/body.py +110 -0
- chrys/app/tui/screens/dialogs/approval/dialog.py +565 -0
- chrys/app/tui/screens/dialogs/approval/mode.py +105 -0
- chrys/app/tui/screens/dialogs/ask_user.py +148 -0
- chrys/app/tui/screens/dialogs/ask_user.tcss +62 -0
- chrys/app/tui/screens/dialogs/base.py +84 -0
- chrys/app/tui/screens/dialogs/confirm.py +184 -0
- chrys/app/tui/screens/dialogs/confirm.tcss +46 -0
- chrys/app/tui/screens/dialogs/connection_test.py +183 -0
- chrys/app/tui/screens/dialogs/connection_test.tcss +92 -0
- chrys/app/tui/screens/dialogs/diagram.py +102 -0
- chrys/app/tui/screens/dialogs/diagram.tcss +24 -0
- chrys/app/tui/screens/dialogs/editor.py +378 -0
- chrys/app/tui/screens/dialogs/editor.tcss +132 -0
- chrys/app/tui/screens/dialogs/file_picker.py +582 -0
- chrys/app/tui/screens/dialogs/file_picker.tcss +78 -0
- chrys/app/tui/screens/dialogs/fork_session.py +219 -0
- chrys/app/tui/screens/dialogs/fork_session.tcss +75 -0
- chrys/app/tui/screens/dialogs/image_compression.py +102 -0
- chrys/app/tui/screens/dialogs/image_compression.tcss +28 -0
- chrys/app/tui/screens/dialogs/man_page.py +172 -0
- chrys/app/tui/screens/dialogs/man_page.tcss +39 -0
- chrys/app/tui/screens/dialogs/new_folder.py +277 -0
- chrys/app/tui/screens/dialogs/new_folder.tcss +51 -0
- chrys/app/tui/screens/dialogs/notice.tcss +14 -0
- chrys/app/tui/screens/dialogs/prompt_cache.py +144 -0
- chrys/app/tui/screens/dialogs/prompt_cache.tcss +38 -0
- chrys/app/tui/screens/dialogs/runtime_details.py +371 -0
- chrys/app/tui/screens/dialogs/runtime_details.tcss +49 -0
- chrys/app/tui/screens/dialogs/session_title.py +110 -0
- chrys/app/tui/screens/dialogs/session_title.tcss +43 -0
- chrys/app/tui/screens/dialogs/tool_view.py +207 -0
- chrys/app/tui/screens/dialogs/tool_view.tcss +43 -0
- chrys/app/tui/screens/dialogs/vision_unsupported.py +122 -0
- chrys/app/tui/screens/dialogs/vision_unsupported.tcss +35 -0
- chrys/app/tui/screens/dialogs/workflow_confirm.py +91 -0
- chrys/app/tui/screens/dialogs/workflow_confirm.tcss +17 -0
- chrys/app/tui/screens/dialogs/workflow_input.py +258 -0
- chrys/app/tui/screens/dialogs/workflow_input.tcss +73 -0
- chrys/app/tui/screens/dialogs/workflow_node.py +462 -0
- chrys/app/tui/screens/dialogs/workflow_node.tcss +41 -0
- chrys/app/tui/screens/dialogs/workflow_picker.py +46 -0
- chrys/app/tui/screens/dialogs/workflow_result.py +136 -0
- chrys/app/tui/screens/dialogs/workflow_result.tcss +14 -0
- chrys/app/tui/screens/diff/__init__.py +22 -0
- chrys/app/tui/screens/diff/rollback_modal.py +1381 -0
- chrys/app/tui/screens/diff/rollback_modal.tcss +248 -0
- chrys/app/tui/screens/diff/screen.py +1532 -0
- chrys/app/tui/screens/diff/screen.tcss +104 -0
- chrys/app/tui/screens/guides/__init__.py +7 -0
- chrys/app/tui/screens/guides/_docs/en/guides/configuration/agents.md +178 -0
- chrys/app/tui/screens/guides/_docs/en/guides/configuration/approval.md +117 -0
- chrys/app/tui/screens/guides/_docs/en/guides/configuration/chat-options.md +276 -0
- chrys/app/tui/screens/guides/_docs/en/guides/configuration/compaction.md +42 -0
- chrys/app/tui/screens/guides/_docs/en/guides/configuration/memory.md +48 -0
- chrys/app/tui/screens/guides/_docs/en/guides/configuration/models.md +158 -0
- chrys/app/tui/screens/guides/_docs/en/guides/configuration/settings.md +210 -0
- chrys/app/tui/screens/guides/_docs/en/guides/configuration/themes.md +61 -0
- chrys/app/tui/screens/guides/_docs/en/guides/configuration/tools.md +60 -0
- chrys/app/tui/screens/guides/_docs/en/guides/configuration/web-tools.md +286 -0
- chrys/app/tui/screens/guides/_docs/en/guides/daily-use/sessions.md +77 -0
- chrys/app/tui/screens/guides/_docs/en/guides/daily-use/workspaces.md +51 -0
- chrys/app/tui/screens/guides/_docs/en/guides/extensions/external-acp-agents.md +126 -0
- chrys/app/tui/screens/guides/_docs/en/guides/extensions/hooks.md +167 -0
- chrys/app/tui/screens/guides/_docs/en/guides/extensions/mcp.md +95 -0
- chrys/app/tui/screens/guides/_docs/en/guides/extensions/skills.md +175 -0
- chrys/app/tui/screens/guides/_docs/en/guides/running/icode-acp.md +61 -0
- chrys/app/tui/screens/guides/_docs/en/guides/running/icode-run.md +190 -0
- chrys/app/tui/screens/guides/_docs/en/guides/running/icode-serve.md +239 -0
- chrys/app/tui/screens/guides/_docs/en/guides/running/workflows.md +664 -0
- chrys/app/tui/screens/guides/_docs/en/reference/agent-profile.md +548 -0
- chrys/app/tui/screens/guides/_docs/en/reference/hooks.md +602 -0
- chrys/app/tui/screens/guides/_docs/en/reference/opentelemetry.md +177 -0
- chrys/app/tui/screens/guides/_docs/en/reference/settings.md +245 -0
- chrys/app/tui/screens/guides/_docs/en/reference/themes.md +149 -0
- chrys/app/tui/screens/guides/_docs/en/reference/tool-kinds-and-names.md +58 -0
- chrys/app/tui/screens/guides/_docs/en/reference/tui-slash-commands.md +76 -0
- chrys/app/tui/screens/guides/_docs/en/reference/workflows.md +1006 -0
- chrys/app/tui/screens/guides/_docs/en/start/getting-started.md +170 -0
- chrys/app/tui/screens/guides/_docs/en/start/what-is-icode.md +34 -0
- chrys/app/tui/screens/guides/_docs/index.yaml +100 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/configuration/agents.md +178 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/configuration/approval.md +117 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/configuration/chat-options.md +276 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/configuration/compaction.md +42 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/configuration/memory.md +48 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/configuration/models.md +158 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/configuration/settings.md +210 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/configuration/themes.md +61 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/configuration/tools.md +60 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/configuration/web-tools.md +286 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/daily-use/sessions.md +77 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/daily-use/workspaces.md +51 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/extensions/external-acp-agents.md +126 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/extensions/hooks.md +167 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/extensions/mcp.md +95 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/extensions/skills.md +175 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/running/icode-acp.md +61 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/running/icode-run.md +190 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/running/icode-serve.md +239 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/guides/running/workflows.md +664 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/reference/agent-profile.md +548 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/reference/hooks.md +602 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/reference/opentelemetry.md +177 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/reference/settings.md +245 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/reference/themes.md +149 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/reference/tool-kinds-and-names.md +58 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/reference/tui-slash-commands.md +76 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/reference/workflows.md +1005 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/start/getting-started.md +170 -0
- chrys/app/tui/screens/guides/_docs/zh-Hans/start/what-is-icode.md +34 -0
- chrys/app/tui/screens/guides/index.py +215 -0
- chrys/app/tui/screens/guides/reader.py +173 -0
- chrys/app/tui/screens/guides/screen.py +442 -0
- chrys/app/tui/screens/guides/screen.tcss +52 -0
- chrys/app/tui/screens/logs/__init__.py +7 -0
- chrys/app/tui/screens/logs/screen.py +504 -0
- chrys/app/tui/screens/logs/screen.tcss +45 -0
- chrys/app/tui/screens/main/__init__.py +7 -0
- chrys/app/tui/screens/main/action_availability.py +30 -0
- chrys/app/tui/screens/main/buddy_command.py +143 -0
- chrys/app/tui/screens/main/commands.py +1073 -0
- chrys/app/tui/screens/main/config_actions.py +464 -0
- chrys/app/tui/screens/main/copy_actions.py +117 -0
- chrys/app/tui/screens/main/dialog_controllers.py +826 -0
- chrys/app/tui/screens/main/dialog_gateway.py +166 -0
- chrys/app/tui/screens/main/diff_controller.py +478 -0
- chrys/app/tui/screens/main/engine_read_model.py +184 -0
- chrys/app/tui/screens/main/event_handlers.py +2014 -0
- chrys/app/tui/screens/main/input_flow.py +241 -0
- chrys/app/tui/screens/main/live_diff.py +244 -0
- chrys/app/tui/screens/main/main_screen_presenter.py +295 -0
- chrys/app/tui/screens/main/model_indicator.py +217 -0
- chrys/app/tui/screens/main/navigation.py +343 -0
- chrys/app/tui/screens/main/ports.py +571 -0
- chrys/app/tui/screens/main/recent_dirs.py +123 -0
- chrys/app/tui/screens/main/rollback_controller.py +586 -0
- chrys/app/tui/screens/main/runtime_info.py +71 -0
- chrys/app/tui/screens/main/screen.py +2265 -0
- chrys/app/tui/screens/main/screen.tcss +21 -0
- chrys/app/tui/screens/main/session_handlers.py +1127 -0
- chrys/app/tui/screens/main/session_title.py +239 -0
- chrys/app/tui/screens/main/settings_coordinator.py +365 -0
- chrys/app/tui/screens/main/settings_persistence.py +184 -0
- chrys/app/tui/screens/main/shell_mode.py +112 -0
- chrys/app/tui/screens/main/state.py +289 -0
- chrys/app/tui/screens/main/submit_state.py +11 -0
- chrys/app/tui/screens/main/subscriptions.py +177 -0
- chrys/app/tui/screens/main/suggestions.py +982 -0
- chrys/app/tui/screens/main/tool_action_bridge.py +75 -0
- chrys/app/tui/screens/main/view_adapter.py +1567 -0
- chrys/app/tui/screens/main/workflow_browser.py +747 -0
- chrys/app/tui/screens/main/workflow_content.py +248 -0
- chrys/app/tui/screens/main/workflow_controller.py +240 -0
- chrys/app/tui/screens/main/workflow_feedback.py +137 -0
- chrys/app/tui/screens/main/workflow_flow.py +49 -0
- chrys/app/tui/screens/main/workflow_run_control.py +456 -0
- chrys/app/tui/screens/main/workflow_session_view.py +316 -0
- chrys/app/tui/screens/main/workspace_actions.py +272 -0
- chrys/app/tui/screens/main/workspace_branch.py +194 -0
- chrys/app/tui/screens/menus/__init__.py +8 -0
- chrys/app/tui/screens/menus/languages.py +114 -0
- chrys/app/tui/screens/models/__init__.py +7 -0
- chrys/app/tui/screens/models/picker.py +147 -0
- chrys/app/tui/screens/models/screen.py +2043 -0
- chrys/app/tui/screens/models/screen.tcss +255 -0
- chrys/app/tui/screens/sessions/__init__.py +8 -0
- chrys/app/tui/screens/sessions/presenter.py +586 -0
- chrys/app/tui/screens/sessions/screen.py +779 -0
- chrys/app/tui/screens/sessions/screen.tcss +127 -0
- chrys/app/tui/screens/settings/__init__.py +29 -0
- chrys/app/tui/screens/settings/danger.py +26 -0
- chrys/app/tui/screens/settings/dialog.py +281 -0
- chrys/app/tui/screens/settings/layout.py +519 -0
- chrys/app/tui/screens/settings/migrate_dialog.py +253 -0
- chrys/app/tui/screens/settings/panes/__init__.py +3 -0
- chrys/app/tui/screens/settings/panes/notifications.py +248 -0
- chrys/app/tui/screens/settings/panes/sessions.py +148 -0
- chrys/app/tui/screens/settings/ports.py +55 -0
- chrys/app/tui/screens/settings/provenance.py +102 -0
- chrys/app/tui/screens/settings/rows.py +546 -0
- chrys/app/tui/screens/settings/settings.tcss +406 -0
- chrys/app/tui/screens/themes/__init__.py +8 -0
- chrys/app/tui/screens/themes/dialogs.py +330 -0
- chrys/app/tui/screens/themes/editor.py +632 -0
- chrys/app/tui/screens/themes/editor.tcss +268 -0
- chrys/app/tui/screens/themes/messages.py +95 -0
- chrys/app/tui/screens/themes/palette.py +694 -0
- chrys/app/tui/screens/themes/panel.py +113 -0
- chrys/app/tui/screens/themes/picker.py +203 -0
- chrys/app/tui/screens/themes/save.py +191 -0
- chrys/app/tui/support/__init__.py +3 -0
- chrys/app/tui/support/file_manager.py +64 -0
- chrys/app/tui/support/gc_freeze.py +1114 -0
- chrys/app/tui/support/path_shortcuts.py +50 -0
- chrys/app/tui/support/prompt_history.py +298 -0
- chrys/app/tui/support/workspace_mru.py +476 -0
- chrys/app/tui/terminal/__init__.py +6 -0
- chrys/app/tui/terminal/_pty_backend.py +114 -0
- chrys/app/tui/terminal/emulator/__init__.py +24 -0
- chrys/app/tui/terminal/emulator/buffer.py +456 -0
- chrys/app/tui/terminal/emulator/charsets.py +113 -0
- chrys/app/tui/terminal/emulator/core.py +963 -0
- chrys/app/tui/terminal/emulator/input.py +342 -0
- chrys/app/tui/terminal/emulator/parser.py +227 -0
- chrys/app/tui/terminal/emulator/pen.py +158 -0
- chrys/app/tui/terminal/launcher.py +455 -0
- chrys/app/tui/terminal/leaked_reports.py +44 -0
- chrys/app/tui/terminal/panel.py +323 -0
- chrys/app/tui/terminal/pty_process.py +405 -0
- chrys/app/tui/terminal/rendering.py +151 -0
- chrys/app/tui/terminal/shell.py +273 -0
- chrys/app/tui/terminal/shell_integration.py +199 -0
- chrys/app/tui/terminal/title.py +224 -0
- chrys/app/tui/terminal/widget.py +654 -0
- chrys/app/tui/theme.py +422 -0
- chrys/app/tui/theme_loader.py +201 -0
- chrys/app/tui/theme_stylesheet.py +49 -0
- chrys/app/tui/themes/__init__.py +3 -0
- chrys/app/tui/themes/document.py +120 -0
- chrys/app/tui/themes/preview.py +170 -0
- chrys/app/tui/themes/store.py +176 -0
- chrys/app/tui/toasts.py +69 -0
- chrys/app/tui/util/__init__.py +3 -0
- chrys/app/tui/util/context_pressure.py +146 -0
- chrys/app/tui/util/debug_log.py +292 -0
- chrys/app/tui/util/diff_entries.py +64 -0
- chrys/app/tui/util/formatting.py +53 -0
- chrys/app/tui/util/git_branch.py +326 -0
- chrys/app/tui/util/invocation_progress.py +57 -0
- chrys/app/tui/util/logo.py +32 -0
- chrys/app/tui/util/message_gate.py +35 -0
- chrys/app/tui/util/mutation_sources.py +14 -0
- chrys/app/tui/util/picker_text.py +27 -0
- chrys/app/tui/util/removal.py +47 -0
- chrys/app/tui/util/rich_style.py +36 -0
- chrys/app/tui/util/source_text.py +12 -0
- chrys/app/tui/util/static_update.py +88 -0
- chrys/app/tui/util/todo_format.py +51 -0
- chrys/app/tui/util/visibility.py +214 -0
- chrys/app/tui/widgets/__init__.py +60 -0
- chrys/app/tui/widgets/ask_user_controls.py +652 -0
- chrys/app/tui/widgets/ask_user_markdown.py +17 -0
- chrys/app/tui/widgets/ask_user_prompt.py +606 -0
- chrys/app/tui/widgets/buttons.py +52 -0
- chrys/app/tui/widgets/chat/__init__.py +3 -0
- chrys/app/tui/widgets/chat/agent_transcript_surface.py +818 -0
- chrys/app/tui/widgets/chat/chrome.py +296 -0
- chrys/app/tui/widgets/chat/compaction_card.py +353 -0
- chrys/app/tui/widgets/chat/context_fold.py +77 -0
- chrys/app/tui/widgets/chat/file_snapshot.py +91 -0
- chrys/app/tui/widgets/chat/image_preview.py +214 -0
- chrys/app/tui/widgets/chat/live_renderer.py +383 -0
- chrys/app/tui/widgets/chat/messages.py +1039 -0
- chrys/app/tui/widgets/chat/panel.py +1769 -0
- chrys/app/tui/widgets/chat/ports.py +245 -0
- chrys/app/tui/widgets/chat/renderers/__init__.py +7 -0
- chrys/app/tui/widgets/chat/renderers/ask_user.py +747 -0
- chrys/app/tui/widgets/chat/renderers/execute.py +431 -0
- chrys/app/tui/widgets/chat/renderers/file_edit.py +925 -0
- chrys/app/tui/widgets/chat/renderers/hosted_code.py +83 -0
- chrys/app/tui/widgets/chat/renderers/hosted_generic.py +330 -0
- chrys/app/tui/widgets/chat/renderers/hosted_image.py +107 -0
- chrys/app/tui/widgets/chat/renderers/hosted_mcp.py +43 -0
- chrys/app/tui/widgets/chat/renderers/hosted_search.py +167 -0
- chrys/app/tui/widgets/chat/renderers/hosted_shell.py +132 -0
- chrys/app/tui/widgets/chat/renderers/read_file.py +399 -0
- chrys/app/tui/widgets/chat/renderers/search.py +348 -0
- chrys/app/tui/widgets/chat/renderers/skill.py +564 -0
- chrys/app/tui/widgets/chat/renderers/sleep.py +287 -0
- chrys/app/tui/widgets/chat/renderers/sub_agent.py +1385 -0
- chrys/app/tui/widgets/chat/renderers/todo.py +114 -0
- chrys/app/tui/widgets/chat/renderers/web.py +69 -0
- chrys/app/tui/widgets/chat/replay.py +1605 -0
- chrys/app/tui/widgets/chat/replay_mount.py +322 -0
- chrys/app/tui/widgets/chat/scroll_controller.py +579 -0
- chrys/app/tui/widgets/chat/selection_controller.py +435 -0
- chrys/app/tui/widgets/chat/session_json.py +508 -0
- chrys/app/tui/widgets/chat/toc_model.py +156 -0
- chrys/app/tui/widgets/chat/tool_call.py +2478 -0
- chrys/app/tui/widgets/chat/tool_registry.py +753 -0
- chrys/app/tui/widgets/chat/tool_renderers.py +247 -0
- chrys/app/tui/widgets/chat/tool_view_builders.py +260 -0
- chrys/app/tui/widgets/chat/transcript_reader.py +57 -0
- chrys/app/tui/widgets/checkbox.py +24 -0
- chrys/app/tui/widgets/chrome/__init__.py +3 -0
- chrys/app/tui/widgets/chrome/app_header.py +283 -0
- chrys/app/tui/widgets/chrome/commands.py +95 -0
- chrys/app/tui/widgets/chrome/file_index.py +68 -0
- chrys/app/tui/widgets/chrome/file_scanner.py +670 -0
- chrys/app/tui/widgets/chrome/footer.py +284 -0
- chrys/app/tui/widgets/chrome/image_paste.py +351 -0
- chrys/app/tui/widgets/chrome/input_bar.py +1299 -0
- chrys/app/tui/widgets/chrome/status_bar.py +911 -0
- chrys/app/tui/widgets/chrome/suggestion_list.py +652 -0
- chrys/app/tui/widgets/click_affordance.py +24 -0
- chrys/app/tui/widgets/color_picker/__init__.py +254 -0
- chrys/app/tui/widgets/color_picker/controls.py +171 -0
- chrys/app/tui/widgets/color_picker/model.py +89 -0
- chrys/app/tui/widgets/dialog_buttons.py +58 -0
- chrys/app/tui/widgets/dialog_scroll.py +24 -0
- chrys/app/tui/widgets/diff_view/__init__.py +20 -0
- chrys/app/tui/widgets/diff_view/cells.py +59 -0
- chrys/app/tui/widgets/diff_view/code.py +280 -0
- chrys/app/tui/widgets/diff_view/compute.py +286 -0
- chrys/app/tui/widgets/diff_view/gutter.py +161 -0
- chrys/app/tui/widgets/diff_view/inline.py +77 -0
- chrys/app/tui/widgets/diff_view/palette.py +87 -0
- chrys/app/tui/widgets/diff_view/protocols.py +24 -0
- chrys/app/tui/widgets/diff_view/rows.py +138 -0
- chrys/app/tui/widgets/diff_view/unified.py +267 -0
- chrys/app/tui/widgets/diff_view/widget.py +209 -0
- chrys/app/tui/widgets/editor/__init__.py +79 -0
- chrys/app/tui/widgets/editor/coordinates.py +30 -0
- chrys/app/tui/widgets/editor/highlighter.py +139 -0
- chrys/app/tui/widgets/editor/keymaps.py +357 -0
- chrys/app/tui/widgets/editor/types.py +216 -0
- chrys/app/tui/widgets/editor/vim.py +1195 -0
- chrys/app/tui/widgets/editor/widget.py +401 -0
- chrys/app/tui/widgets/file_preview.py +58 -0
- chrys/app/tui/widgets/hatch.py +138 -0
- chrys/app/tui/widgets/input.py +66 -0
- chrys/app/tui/widgets/loading.py +125 -0
- chrys/app/tui/widgets/markdown/__init__.py +25 -0
- chrys/app/tui/widgets/markdown/_utils.py +21 -0
- chrys/app/tui/widgets/markdown/anchors.py +71 -0
- chrys/app/tui/widgets/markdown/blocks.py +115 -0
- chrys/app/tui/widgets/markdown/copyable.py +163 -0
- chrys/app/tui/widgets/markdown/diagram/__init__.py +35 -0
- chrys/app/tui/widgets/markdown/diagram/canvas.py +409 -0
- chrys/app/tui/widgets/markdown/diagram/charts.py +52 -0
- chrys/app/tui/widgets/markdown/diagram/diagnostics.py +101 -0
- chrys/app/tui/widgets/markdown/diagram/geometry.py +46 -0
- chrys/app/tui/widgets/markdown/diagram/layout.py +494 -0
- chrys/app/tui/widgets/markdown/diagram/messages.py +18 -0
- chrys/app/tui/widgets/markdown/diagram/model.py +275 -0
- chrys/app/tui/widgets/markdown/diagram/parser.py +173 -0
- chrys/app/tui/widgets/markdown/diagram/parsers/__init__.py +3 -0
- chrys/app/tui/widgets/markdown/diagram/parsers/charts.py +349 -0
- chrys/app/tui/widgets/markdown/diagram/parsers/common.py +403 -0
- chrys/app/tui/widgets/markdown/diagram/parsers/graphs.py +1072 -0
- chrys/app/tui/widgets/markdown/diagram/parsers/planning.py +317 -0
- chrys/app/tui/widgets/markdown/diagram/parsers/schedule.py +298 -0
- chrys/app/tui/widgets/markdown/diagram/parsers/schemas.py +241 -0
- chrys/app/tui/widgets/markdown/diagram/parsers/structure.py +221 -0
- chrys/app/tui/widgets/markdown/diagram/presentation.py +32 -0
- chrys/app/tui/widgets/markdown/diagram/renderers/__init__.py +3 -0
- chrys/app/tui/widgets/markdown/diagram/renderers/charts.py +275 -0
- chrys/app/tui/widgets/markdown/diagram/renderers/common.py +73 -0
- chrys/app/tui/widgets/markdown/diagram/renderers/planning.py +157 -0
- chrys/app/tui/widgets/markdown/diagram/renderers/schedule.py +202 -0
- chrys/app/tui/widgets/markdown/diagram/renderers/structure.py +77 -0
- chrys/app/tui/widgets/markdown/diagram/renderers/xy.py +385 -0
- chrys/app/tui/widgets/markdown/diagram/router.py +651 -0
- chrys/app/tui/widgets/markdown/diagram/specs/__init__.py +3 -0
- chrys/app/tui/widgets/markdown/diagram/specs/charts.py +94 -0
- chrys/app/tui/widgets/markdown/diagram/specs/planning.py +68 -0
- chrys/app/tui/widgets/markdown/diagram/specs/schedule.py +65 -0
- chrys/app/tui/widgets/markdown/diagram/specs/structure.py +23 -0
- chrys/app/tui/widgets/markdown/diagram/viewer.py +92 -0
- chrys/app/tui/widgets/markdown/links.py +47 -0
- chrys/app/tui/widgets/markdown/math/__init__.py +36 -0
- chrys/app/tui/widgets/markdown/math/layout.py +739 -0
- chrys/app/tui/widgets/markdown/math/markdown.py +291 -0
- chrys/app/tui/widgets/markdown/math/parser.py +325 -0
- chrys/app/tui/widgets/markdown/math/symbols.py +325 -0
- chrys/app/tui/widgets/markdown/navigator.py +80 -0
- chrys/app/tui/widgets/markdown/parser.py +1057 -0
- chrys/app/tui/widgets/markdown/stream.py +73 -0
- chrys/app/tui/widgets/markdown/toc.py +98 -0
- chrys/app/tui/widgets/markdown/viewer.py +146 -0
- chrys/app/tui/widgets/markdown/widget.py +2046 -0
- chrys/app/tui/widgets/marquee.py +101 -0
- chrys/app/tui/widgets/option_menu.py +82 -0
- chrys/app/tui/widgets/page_navigator.py +118 -0
- chrys/app/tui/widgets/select.py +196 -0
- chrys/app/tui/widgets/selection.py +59 -0
- chrys/app/tui/widgets/sidebar/__init__.py +3 -0
- chrys/app/tui/widgets/sidebar/buddy.py +367 -0
- chrys/app/tui/widgets/sidebar/context.py +482 -0
- chrys/app/tui/widgets/sidebar/debug.py +195 -0
- chrys/app/tui/widgets/sidebar/empty_state.py +11 -0
- chrys/app/tui/widgets/sidebar/panel.py +198 -0
- chrys/app/tui/widgets/sidebar/tasks.py +198 -0
- chrys/app/tui/widgets/sidebar/toc.py +166 -0
- chrys/app/tui/widgets/sidebar/toc_types.py +30 -0
- chrys/app/tui/widgets/syntax_theme.py +85 -0
- chrys/app/tui/widgets/text_area.py +258 -0
- chrys/app/tui/widgets/trajectory/__init__.py +8 -0
- chrys/app/tui/widgets/trajectory/chartkit.py +264 -0
- chrys/app/tui/widgets/trajectory/insights.py +1266 -0
- chrys/app/tui/widgets/trajectory/overview.py +1101 -0
- chrys/app/tui/widgets/trajectory/panel.py +983 -0
- chrys/app/tui/widgets/trajectory/presentation.py +311 -0
- chrys/app/tui/widgets/trajectory/session_info.py +124 -0
- chrys/app/tui/widgets/trajectory/text_view.py +124 -0
- chrys/app/tui/widgets/trajectory/timeline.py +380 -0
- chrys/app/tui/widgets/welcome.py +126 -0
- chrys/app/tui/widgets/workflow/__init__.py +5 -0
- chrys/app/tui/widgets/workflow/edges.py +89 -0
- chrys/app/tui/widgets/workflow/graph.py +869 -0
- chrys/app/tui/widgets/workflow/info.py +310 -0
- chrys/app/tui/widgets/workflow/node_view.py +27 -0
- chrys/app/tui/widgets/workflow/output.py +225 -0
- chrys/app/tui/widgets/workflow/panel.py +658 -0
- chrys/app/tui/widgets/workflow/projector.py +324 -0
- chrys/app/tui/widgets/workflow/records.py +69 -0
- chrys/app/tui/widgets/workflow/scrollbar.py +82 -0
- chrys/app/tui/widgets/workflow/selection.py +151 -0
- chrys/app/tui/widgets/workflow/source.py +65 -0
- chrys/app/tui/widgets/workflow/text.py +257 -0
- chrys/app/tui/widgets/workflow/values.py +317 -0
- chrys/foundation/__init__.py +0 -0
- chrys/foundation/branding.py +15 -0
- chrys/foundation/config/__init__.py +7 -0
- chrys/foundation/config/coercion.py +374 -0
- chrys/foundation/config/context.py +34 -0
- chrys/foundation/config/env_file.py +141 -0
- chrys/foundation/config/env_layers.py +370 -0
- chrys/foundation/config/migrations.py +521 -0
- chrys/foundation/config/notification_events.py +22 -0
- chrys/foundation/config/process_settings.py +332 -0
- chrys/foundation/config/runtime_pointer.py +133 -0
- chrys/foundation/config/settings.py +1952 -0
- chrys/foundation/config/settings_store.py +996 -0
- chrys/foundation/config/spec.py +396 -0
- chrys/foundation/config/user_settings.py +140 -0
- chrys/foundation/config/warnings.py +262 -0
- chrys/foundation/config/web_values.py +135 -0
- chrys/foundation/config/yaml_store.py +487 -0
- chrys/foundation/errors/__init__.py +68 -0
- chrys/foundation/errors/_legacy.py +117 -0
- chrys/foundation/errors/_text.py +13 -0
- chrys/foundation/errors/_walk.py +85 -0
- chrys/foundation/errors/classify.py +278 -0
- chrys/foundation/errors/display.py +274 -0
- chrys/foundation/errors/formatting.py +283 -0
- chrys/foundation/errors/kinds.py +67 -0
- chrys/foundation/errors/network.py +497 -0
- chrys/foundation/errors/provider.py +445 -0
- chrys/foundation/errors/route.py +85 -0
- chrys/foundation/events/__init__.py +8 -0
- chrys/foundation/events/bus.py +143 -0
- chrys/foundation/events/types.py +1629 -0
- chrys/foundation/events/workflow.py +38 -0
- chrys/foundation/hosted_tools.py +142 -0
- chrys/foundation/i18n/__init__.py +32 -0
- chrys/foundation/i18n/_catalogs/zh-Hans/LC_MESSAGES/chrys.mo +0 -0
- chrys/foundation/i18n/catalogs.py +42 -0
- chrys/foundation/i18n/formatting.py +202 -0
- chrys/foundation/i18n/locale.py +92 -0
- chrys/foundation/i18n/localizer.py +187 -0
- chrys/foundation/i18n/messages.py +268 -0
- chrys/foundation/io/__init__.py +3 -0
- chrys/foundation/io/result_content.py +237 -0
- chrys/foundation/models/__init__.py +3 -0
- chrys/foundation/models/approval_reuse.py +23 -0
- chrys/foundation/models/ask_user.py +468 -0
- chrys/foundation/models/execution.py +18 -0
- chrys/foundation/models/history_markers.py +115 -0
- chrys/foundation/models/invocations.py +63 -0
- chrys/foundation/models/mutation_scope.py +28 -0
- chrys/foundation/models/session_env.py +87 -0
- chrys/foundation/models/session_surface.py +29 -0
- chrys/foundation/models/todos.py +74 -0
- chrys/foundation/models/turns.py +125 -0
- chrys/foundation/models/workflow_session.py +89 -0
- chrys/foundation/models/workspace.py +59 -0
- chrys/foundation/net/__init__.py +3 -0
- chrys/foundation/net/address_class.py +57 -0
- chrys/foundation/net/route_probe.py +94 -0
- chrys/foundation/net/url.py +107 -0
- chrys/foundation/observability/__init__.py +3 -0
- chrys/foundation/observability/exporters.py +174 -0
- chrys/foundation/observability/gate.py +31 -0
- chrys/foundation/observability/setup.py +497 -0
- chrys/foundation/observability/sink.py +228 -0
- chrys/foundation/patches/__init__.py +19 -0
- chrys/foundation/patches/mdurl_cache.py +59 -0
- chrys/foundation/patches/patcher.py +287 -0
- chrys/foundation/patches/staged_members.py +205 -0
- chrys/foundation/patches/textual_block_border.py +105 -0
- chrys/foundation/patches/textual_button_ansi.py +65 -0
- chrys/foundation/patches/textual_button_ansi_old.txt +68 -0
- chrys/foundation/patches/textual_callback_cache.py +248 -0
- chrys/foundation/patches/textual_callback_dispatch.py +109 -0
- chrys/foundation/patches/textual_compositor_cjk.py +566 -0
- chrys/foundation/patches/textual_dispatch_cache.py +150 -0
- chrys/foundation/patches/textual_ime_cursor_anchor.py +92 -0
- chrys/foundation/patches/textual_kitty_keyboard.py +268 -0
- chrys/foundation/patches/textual_lru_acyclic.py +241 -0
- chrys/foundation/patches/textual_message_pump.py +136 -0
- chrys/foundation/patches/textual_node_diet.py +875 -0
- chrys/foundation/patches/textual_one_shot_timer.py +48 -0
- chrys/foundation/patches/textual_option_list.py +90 -0
- chrys/foundation/patches/textual_precompose.py +89 -0
- chrys/foundation/patches/textual_pruned_tabs.py +69 -0
- chrys/foundation/patches/textual_reflow_reuse.py +1753 -0
- chrys/foundation/patches/textual_removed_node_caches.py +86 -0
- chrys/foundation/patches/textual_removed_screen_callbacks.py +55 -0
- chrys/foundation/patches/textual_selection_extract.py +48 -0
- chrys/foundation/patches/textual_strip_cycles.py +119 -0
- chrys/foundation/patches/textual_tab_selection.py +1611 -0
- chrys/foundation/patches/textual_timer_skip.py +70 -0
- chrys/foundation/patches/textual_utf8_decoder.py +106 -0
- chrys/foundation/patches/textual_win_sleep.py +167 -0
- chrys/foundation/patches/watchdog_fsevents.py +70 -0
- chrys/foundation/patches/watchdog_windows.py +52 -0
- chrys/foundation/platform/__init__.py +556 -0
- chrys/foundation/platform/c_api.py +32 -0
- chrys/foundation/platform/child_reap.py +107 -0
- chrys/foundation/platform/command_line.py +95 -0
- chrys/foundation/platform/files.py +1470 -0
- chrys/foundation/platform/output_capture.py +113 -0
- chrys/foundation/platform/paths.py +193 -0
- chrys/foundation/platform/process.py +1468 -0
- chrys/foundation/platform/pty_output.py +19 -0
- chrys/foundation/platform/runtime_paths.py +281 -0
- chrys/foundation/platform/win_console.py +129 -0
- chrys/foundation/reasoning_origin.py +67 -0
- chrys/foundation/recovery.py +16 -0
- chrys/foundation/retry.py +278 -0
- chrys/foundation/text/__init__.py +3 -0
- chrys/foundation/text/encoding.py +603 -0
- chrys/foundation/text/images.py +304 -0
- chrys/foundation/text/lines.py +24 -0
- chrys/foundation/text/mentions.py +90 -0
- chrys/foundation/text/model_json.py +25 -0
- chrys/foundation/text/reading_order.py +20 -0
- chrys/foundation/text/tokenizer.py +25 -0
- chrys/foundation/text/tool_output.py +287 -0
- chrys/foundation/text/yaml_io.py +62 -0
- chrys/foundation/tool_call_context.py +202 -0
- chrys/foundation/tool_execution_stamp.py +184 -0
- chrys/foundation/tool_invocation_order.py +48 -0
- chrys/foundation/tool_kinds.py +102 -0
- chrys/foundation/tool_result_metadata.py +287 -0
- chrys/foundation/trajectory/__init__.py +10 -0
- chrys/foundation/trajectory/context.py +481 -0
- chrys/foundation/trajectory/envelope.py +571 -0
- chrys/foundation/trajectory/event_types.py +294 -0
- chrys/foundation/trajectory/finalizers.py +46 -0
- chrys/foundation/trajectory/fingerprint.py +62 -0
- chrys/foundation/trajectory/ids.py +155 -0
- chrys/foundation/trajectory/keys.py +99 -0
- chrys/foundation/trajectory/lease.py +173 -0
- chrys/foundation/trajectory/metadata.py +72 -0
- chrys/foundation/trajectory/reader.py +271 -0
- chrys/foundation/trajectory/recovery.py +225 -0
- chrys/foundation/trajectory/revisions.py +152 -0
- chrys/foundation/trajectory/segments.py +225 -0
- chrys/foundation/trajectory/tools.py +117 -0
- chrys/foundation/trajectory/usage.py +151 -0
- chrys/foundation/trajectory/writer.py +972 -0
- chrys/foundation/trajectory_timing.py +97 -0
- chrys/foundation/util/__init__.py +3 -0
- chrys/foundation/util/async_tasks.py +29 -0
- chrys/foundation/util/chrys_headers.py +23 -0
- chrys/foundation/util/env_templates.py +104 -0
- chrys/foundation/util/filenames.py +96 -0
- chrys/foundation/util/header_charset.py +138 -0
- chrys/foundation/util/httpx_helpers.py +12 -0
- chrys/foundation/util/lock.py +236 -0
- chrys/foundation/util/once_close.py +46 -0
- chrys/foundation/util/session_ids.py +29 -0
- chrys/foundation/util/shell_tokens.py +88 -0
- chrys/foundation/util/sub_agent_context.py +38 -0
- chrys/foundation/util/time.py +35 -0
- chrys/foundation/util/unicode_scalars.py +36 -0
- chrys/foundation/vendor/__init__.py +43 -0
- chrys/foundation/vendor/ripgrep/rg-aarch64-apple-darwin +0 -0
- chrys/foundation/vendor/ripgrep/rg-aarch64-pc-windows-msvc.exe +0 -0
- chrys/foundation/vendor/ripgrep/rg-aarch64-unknown-linux-gnu +0 -0
- chrys/foundation/vendor/ripgrep/rg-x86_64-apple-darwin +0 -0
- chrys/foundation/vendor/ripgrep/rg-x86_64-pc-windows-msvc.exe +0 -0
- chrys/foundation/vendor/ripgrep/rg-x86_64-unknown-linux-musl +0 -0
- chrys/kernel/__init__.py +256 -0
- chrys/kernel/_content.py +1866 -0
- chrys/kernel/_loop_recorder.py +631 -0
- chrys/kernel/_null_overlay.py +1026 -0
- chrys/kernel/_result_ceiling.py +216 -0
- chrys/kernel/_serialization.py +431 -0
- chrys/kernel/_tool_arg_errors.py +1629 -0
- chrys/kernel/_tool_execution.py +1172 -0
- chrys/kernel/_tool_expansion.py +26 -0
- chrys/kernel/_types.py +2598 -0
- chrys/kernel/agent.py +994 -0
- chrys/kernel/client.py +1084 -0
- chrys/kernel/compaction.py +1315 -0
- chrys/kernel/exceptions.py +211 -0
- chrys/kernel/exchanges.py +683 -0
- chrys/kernel/identity.py +95 -0
- chrys/kernel/images.py +36 -0
- chrys/kernel/instrumentation.py +1618 -0
- chrys/kernel/loop.py +2308 -0
- chrys/kernel/middleware.py +616 -0
- chrys/kernel/sessions.py +604 -0
- chrys/kernel/tools.py +1061 -0
- chrys/kernel/types.py +126 -0
- chrys/orchestration/__init__.py +3 -0
- chrys/orchestration/engine/__init__.py +3 -0
- chrys/orchestration/engine/assembly.py +236 -0
- chrys/orchestration/engine/build/__init__.py +3 -0
- chrys/orchestration/engine/build/builder.py +1061 -0
- chrys/orchestration/engine/build/construction.py +408 -0
- chrys/orchestration/engine/build/loaded.py +139 -0
- chrys/orchestration/engine/engine.py +789 -0
- chrys/orchestration/engine/execution.py +771 -0
- chrys/orchestration/engine/loader.py +865 -0
- chrys/orchestration/engine/rollback.py +918 -0
- chrys/orchestration/engine/run/__init__.py +3 -0
- chrys/orchestration/engine/run/active_injection.py +419 -0
- chrys/orchestration/engine/run/attachments.py +519 -0
- chrys/orchestration/engine/run/bindings.py +1095 -0
- chrys/orchestration/engine/run/coordinator.py +1062 -0
- chrys/orchestration/engine/run/finalizer.py +417 -0
- chrys/orchestration/engine/run/input_refs.py +60 -0
- chrys/orchestration/engine/run/prompt_content.py +457 -0
- chrys/orchestration/engine/run/resume.py +299 -0
- chrys/orchestration/engine/run/retry.py +948 -0
- chrys/orchestration/engine/run/runner.py +625 -0
- chrys/orchestration/engine/run/runtime_skills.py +146 -0
- chrys/orchestration/engine/run/sub_agent_coordination.py +126 -0
- chrys/orchestration/engine/run/turn_hooks.py +258 -0
- chrys/orchestration/engine/run/turn_state.py +149 -0
- chrys/orchestration/engine/run/working_dir.py +50 -0
- chrys/orchestration/engine/session_lifecycle.py +2013 -0
- chrys/orchestration/engine/state/__init__.py +3 -0
- chrys/orchestration/engine/state/active_session.py +183 -0
- chrys/orchestration/engine/state/controls.py +639 -0
- chrys/orchestration/engine/state/current_agent.py +26 -0
- chrys/orchestration/engine/state/lifecycle_permits.py +395 -0
- chrys/orchestration/engine/state/machine.py +193 -0
- chrys/orchestration/engine/state/session_writer.py +434 -0
- chrys/orchestration/engine/trajectory.py +714 -0
- chrys/orchestration/engine/usage.py +118 -0
- chrys/orchestration/invoker/__init__.py +3 -0
- chrys/orchestration/invoker/acp.py +727 -0
- chrys/orchestration/invoker/acp_protocol.py +1115 -0
- chrys/orchestration/invoker/acp_spec.py +79 -0
- chrys/orchestration/invoker/attempts.py +994 -0
- chrys/orchestration/invoker/child_compaction.py +131 -0
- chrys/orchestration/invoker/child_history.py +99 -0
- chrys/orchestration/invoker/contracts.py +253 -0
- chrys/orchestration/invoker/evidence.py +94 -0
- chrys/orchestration/invoker/kernel.py +343 -0
- chrys/orchestration/invoker/origin.py +79 -0
- chrys/orchestration/invoker/resources.py +343 -0
- chrys/orchestration/invoker/runtime.py +299 -0
- chrys/orchestration/invoker/usage.py +80 -0
- chrys/orchestration/session_hooks.py +117 -0
- chrys/orchestration/session_host.py +1023 -0
- chrys/orchestration/session_resources.py +95 -0
- chrys/orchestration/session_usage.py +219 -0
- chrys/orchestration/startup.py +255 -0
- chrys/orchestration/sub_agents/__init__.py +3 -0
- chrys/orchestration/sub_agents/acp_policy.py +269 -0
- chrys/orchestration/sub_agents/kernel_policy.py +848 -0
- chrys/orchestration/sub_agents/registration.py +44 -0
- chrys/orchestration/sub_agents/shell.py +337 -0
- chrys/orchestration/sub_agents/tools.py +2228 -0
- chrys/orchestration/workflows/__init__.py +3 -0
- chrys/orchestration/workflows/agent_archive.py +156 -0
- chrys/orchestration/workflows/agent_node.py +894 -0
- chrys/orchestration/workflows/agent_node_build.py +687 -0
- chrys/orchestration/workflows/catalog.py +332 -0
- chrys/orchestration/workflows/coordinator.py +771 -0
- chrys/orchestration/workflows/hooks.py +176 -0
- chrys/orchestration/workflows/preview.py +322 -0
- chrys/orchestration/workflows/rollback.py +151 -0
- chrys/orchestration/workflows/runner.py +986 -0
- chrys/orchestration/workflows/session.py +390 -0
- chrys/orchestration/workflows/settings.py +97 -0
- chrys/orchestration/workflows/validation.py +674 -0
- chrys/orchestration/workflows/worker_client.py +1002 -0
- chrys/service/__init__.py +3 -0
- chrys/service/acp_client/__init__.py +65 -0
- chrys/service/acp_client/_transport.py +922 -0
- chrys/service/acp_client/client.py +1311 -0
- chrys/service/acp_client/errors.py +224 -0
- chrys/service/acp_client/protocol.py +220 -0
- chrys/service/acp_client/spawn.py +239 -0
- chrys/service/acp_client/spec.py +100 -0
- chrys/service/agent_middleware/__init__.py +60 -0
- chrys/service/agent_middleware/_metadata_keys.py +52 -0
- chrys/service/agent_middleware/control/__init__.py +3 -0
- chrys/service/agent_middleware/control/approval.py +769 -0
- chrys/service/agent_middleware/control/approval_hooks.py +62 -0
- chrys/service/agent_middleware/control/ask_user.py +207 -0
- chrys/service/agent_middleware/control/interrupt.py +50 -0
- chrys/service/agent_middleware/control/sleep.py +118 -0
- chrys/service/agent_middleware/control/todo.py +117 -0
- chrys/service/agent_middleware/events/__init__.py +3 -0
- chrys/service/agent_middleware/events/hook_dispatch.py +250 -0
- chrys/service/agent_middleware/events/hosted_tools.py +1762 -0
- chrys/service/agent_middleware/events/intermediate_text.py +128 -0
- chrys/service/agent_middleware/events/rejection_metadata.py +50 -0
- chrys/service/agent_middleware/events/result_persistence.py +98 -0
- chrys/service/agent_middleware/events/sub_agent_events.py +951 -0
- chrys/service/agent_middleware/events/tool_error_text.py +22 -0
- chrys/service/agent_middleware/events/tool_events.py +779 -0
- chrys/service/agent_middleware/injection.py +510 -0
- chrys/service/agent_middleware/reminders/__init__.py +91 -0
- chrys/service/agent_middleware/reminders/archive_pointer.py +154 -0
- chrys/service/agent_middleware/reminders/base.py +25 -0
- chrys/service/agent_middleware/reminders/context_usage.py +74 -0
- chrys/service/agent_middleware/reminders/file_change.py +63 -0
- chrys/service/agent_middleware/reminders/mcp.py +39 -0
- chrys/service/agent_middleware/reminders/profile_switch.py +106 -0
- chrys/service/agent_middleware/reminders/runtime_env.py +190 -0
- chrys/service/agent_middleware/reminders/skills.py +44 -0
- chrys/service/agent_middleware/reminders/sub_agents.py +35 -0
- chrys/service/agent_middleware/reminders/todo.py +35 -0
- chrys/service/agent_middleware/reminders/turn_line.py +48 -0
- chrys/service/agent_middleware/response_validation.py +1380 -0
- chrys/service/agent_middleware/system_reminder.py +1107 -0
- chrys/service/agent_middleware/validators.py +396 -0
- chrys/service/analytics/__init__.py +124 -0
- chrys/service/analytics/_actions.py +896 -0
- chrys/service/analytics/_context_evidence.py +357 -0
- chrys/service/analytics/_critical_path.py +179 -0
- chrys/service/analytics/_facts.py +919 -0
- chrys/service/analytics/_insights.py +769 -0
- chrys/service/analytics/_metric_ops.py +83 -0
- chrys/service/analytics/_session_projection.py +460 -0
- chrys/service/analytics/_timeline.py +434 -0
- chrys/service/analytics/_turn_graph.py +1237 -0
- chrys/service/analytics/_turns.py +1377 -0
- chrys/service/analytics/_workflows.py +171 -0
- chrys/service/analytics/aggregation.py +1474 -0
- chrys/service/analytics/classification.py +128 -0
- chrys/service/analytics/export.py +803 -0
- chrys/service/analytics/findings.py +282 -0
- chrys/service/analytics/math.py +79 -0
- chrys/service/analytics/model.py +886 -0
- chrys/service/analytics/reader.py +321 -0
- chrys/service/approval/__init__.py +3 -0
- chrys/service/approval/arbitration.py +102 -0
- chrys/service/approval/command_identity.py +109 -0
- chrys/service/approval/correlation.py +57 -0
- chrys/service/approval/grant_store.py +108 -0
- chrys/service/approval/judge.py +589 -0
- chrys/service/approval/level.py +15 -0
- chrys/service/approval/policy.py +209 -0
- chrys/service/approval/reuse.py +223 -0
- chrys/service/approval/reuse_binding.py +133 -0
- chrys/service/approval/safety_classifier.py +536 -0
- chrys/service/approval/turn_context.py +49 -0
- chrys/service/context/__init__.py +3 -0
- chrys/service/context/compaction/__init__.py +38 -0
- chrys/service/context/compaction/breaker.py +156 -0
- chrys/service/context/compaction/budgets.py +93 -0
- chrys/service/context/compaction/calibration.py +77 -0
- chrys/service/context/compaction/compression.py +690 -0
- chrys/service/context/compaction/current_turn_drop.py +458 -0
- chrys/service/context/compaction/events.py +201 -0
- chrys/service/context/compaction/exclusions.py +261 -0
- chrys/service/context/compaction/groups.py +361 -0
- chrys/service/context/compaction/last_words.py +1996 -0
- chrys/service/context/compaction/last_words_state.py +752 -0
- chrys/service/context/compaction/scoped.py +472 -0
- chrys/service/context/compaction/spill.py +1947 -0
- chrys/service/context/compaction/strategy.py +1116 -0
- chrys/service/context/compaction/summaries.py +319 -0
- chrys/service/context/compaction/turns.py +375 -0
- chrys/service/context/manager.py +174 -0
- chrys/service/context/memory_loader.py +792 -0
- chrys/service/context/middleware/__init__.py +3 -0
- chrys/service/context/middleware/usage.py +332 -0
- chrys/service/context/providers/__init__.py +3 -0
- chrys/service/context/providers/context_management.py +432 -0
- chrys/service/context/providers/history.py +647 -0
- chrys/service/context/providers/memory.py +50 -0
- chrys/service/context/tool_content.py +22 -0
- chrys/service/hooks/__init__.py +37 -0
- chrys/service/hooks/detached_worker.py +118 -0
- chrys/service/hooks/docs/README.md +14 -0
- chrys/service/hooks/docs/authoring.md +684 -0
- chrys/service/hooks/docs/configuration.md +499 -0
- chrys/service/hooks/docs/design.md +359 -0
- chrys/service/hooks/docs/project-hooks.md +348 -0
- chrys/service/hooks/events.py +157 -0
- chrys/service/hooks/loader.py +665 -0
- chrys/service/hooks/manager.py +807 -0
- chrys/service/hooks/matcher.py +111 -0
- chrys/service/hooks/outbox.py +294 -0
- chrys/service/hooks/runner.py +572 -0
- chrys/service/hooks/schema.py +407 -0
- chrys/service/llm/__init__.py +7 -0
- chrys/service/llm/_structured_outputs.py +192 -0
- chrys/service/llm/anthropic_messages/__init__.py +9 -0
- chrys/service/llm/anthropic_messages/client.py +254 -0
- chrys/service/llm/anthropic_messages/decode.py +331 -0
- chrys/service/llm/anthropic_messages/history.py +279 -0
- chrys/service/llm/anthropic_messages/request.py +323 -0
- chrys/service/llm/anthropic_messages/server_tools.py +319 -0
- chrys/service/llm/anthropic_messages/stream.py +297 -0
- chrys/service/llm/anthropic_messages/thinking_binding.py +156 -0
- chrys/service/llm/chat_completions/__init__.py +9 -0
- chrys/service/llm/chat_completions/client.py +369 -0
- chrys/service/llm/chat_completions/decode.py +338 -0
- chrys/service/llm/chat_completions/history.py +657 -0
- chrys/service/llm/chat_completions/reasoning.py +244 -0
- chrys/service/llm/chat_completions/request.py +192 -0
- chrys/service/llm/chat_completions/stream.py +546 -0
- chrys/service/llm/chat_completions/validation.py +308 -0
- chrys/service/llm/clients.py +613 -0
- chrys/service/llm/images.py +65 -0
- chrys/service/llm/mock.py +413 -0
- chrys/service/llm/observer.py +446 -0
- chrys/service/llm/one_shot.py +106 -0
- chrys/service/llm/openai_exceptions.py +93 -0
- chrys/service/llm/openai_responses/__init__.py +10 -0
- chrys/service/llm/openai_responses/client.py +323 -0
- chrys/service/llm/openai_responses/decode.py +432 -0
- chrys/service/llm/openai_responses/history.py +519 -0
- chrys/service/llm/openai_responses/hosted.py +625 -0
- chrys/service/llm/openai_responses/replay.py +629 -0
- chrys/service/llm/openai_responses/request.py +342 -0
- chrys/service/llm/openai_responses/stream.py +847 -0
- chrys/service/llm/openai_timestamps.py +57 -0
- chrys/service/llm/providers.py +107 -0
- chrys/service/llm/proxy_route.py +54 -0
- chrys/service/llm/raw_http_log.py +309 -0
- chrys/service/llm/route_facts.py +63 -0
- chrys/service/llm/route_sessions.py +49 -0
- chrys/service/llm/sdk_anthropic.py +18 -0
- chrys/service/llm/sdk_headers.py +47 -0
- chrys/service/llm/sdk_openai.py +18 -0
- chrys/service/llm/sdk_retry.py +59 -0
- chrys/service/llm/wire_client.py +246 -0
- chrys/service/mcp/__init__.py +3 -0
- chrys/service/mcp/_connection.py +235 -0
- chrys/service/mcp/_http_transport.py +350 -0
- chrys/service/mcp/_progressive.py +459 -0
- chrys/service/mcp/_stdio_transport.py +614 -0
- chrys/service/mcp/_tool_mixins.py +96 -0
- chrys/service/mcp/adapter.py +1031 -0
- chrys/service/mcp/cache.py +476 -0
- chrys/service/mcp/content.py +32 -0
- chrys/service/mcp/errors.py +169 -0
- chrys/service/mcp/owned.py +1330 -0
- chrys/service/mcp/result_limits.py +168 -0
- chrys/service/mcp/thinking_warning.py +95 -0
- chrys/service/mcp/validation.py +74 -0
- chrys/service/mutations/__init__.py +84 -0
- chrys/service/mutations/coordination.py +894 -0
- chrys/service/mutations/detector.py +458 -0
- chrys/service/mutations/git_calibrator.py +397 -0
- chrys/service/mutations/git_state.py +647 -0
- chrys/service/mutations/pipeline.py +779 -0
- chrys/service/mutations/scanner.py +466 -0
- chrys/service/mutations/snapshot_files.py +233 -0
- chrys/service/mutations/store.py +625 -0
- chrys/service/mutations/tool_names.py +15 -0
- chrys/service/mutations/trace.py +246 -0
- chrys/service/mutations/tracker.py +1289 -0
- chrys/service/mutations/types.py +559 -0
- chrys/service/mutations/workspace_changes.py +1583 -0
- chrys/service/profiles/__init__.py +2 -0
- chrys/service/profiles/agents/__init__.py +3 -0
- chrys/service/profiles/agents/builtins/Code.yaml +199 -0
- chrys/service/profiles/agents/builtins/Explore.yaml +62 -0
- chrys/service/profiles/agents/builtins/General.yaml +114 -0
- chrys/service/profiles/agents/builtins/QA.yaml +128 -0
- chrys/service/profiles/agents/loader.py +808 -0
- chrys/service/profiles/agents/registry.py +727 -0
- chrys/service/profiles/agents/schema.py +371 -0
- chrys/service/profiles/agents/serializer.py +196 -0
- chrys/service/profiles/coercion.py +22 -0
- chrys/service/profiles/models/__init__.py +3 -0
- chrys/service/profiles/models/env_bridge.py +157 -0
- chrys/service/profiles/models/loader.py +282 -0
- chrys/service/profiles/models/options.py +438 -0
- chrys/service/profiles/models/registry.py +104 -0
- chrys/service/profiles/models/resolver.py +286 -0
- chrys/service/profiles/models/schema.py +91 -0
- chrys/service/profiles/models/serializer.py +76 -0
- chrys/service/session/__init__.py +3 -0
- chrys/service/session/checkpoint.py +156 -0
- chrys/service/session/history.py +1616 -0
- chrys/service/session/message_metadata.py +151 -0
- chrys/service/session/persistence.py +435 -0
- chrys/service/session/runtime_metadata.py +210 -0
- chrys/service/session/sub_agent_logs.py +1069 -0
- chrys/service/session/sub_agent_transcript.py +654 -0
- chrys/service/skills/__init__.py +3 -0
- chrys/service/skills/adapter.py +408 -0
- chrys/service/skills/constants.py +8 -0
- chrys/service/skills/loader.py +575 -0
- chrys/service/skills/model.py +130 -0
- chrys/service/skills/provider.py +841 -0
- chrys/service/skills/runner.py +390 -0
- chrys/service/state/__init__.py +3 -0
- chrys/service/state/_fork.py +710 -0
- chrys/service/state/_session_files.py +175 -0
- chrys/service/state/_session_meta.py +552 -0
- chrys/service/state/locks.py +154 -0
- chrys/service/state/serializers.py +156 -0
- chrys/service/state/session_catalog.py +361 -0
- chrys/service/state/session_listing.py +84 -0
- chrys/service/state/session_migration.py +446 -0
- chrys/service/state/session_mru.py +315 -0
- chrys/service/state/store.py +2132 -0
- chrys/service/state/workflow.py +158 -0
- chrys/service/text_blocks.py +47 -0
- chrys/service/todos/__init__.py +3 -0
- chrys/service/todos/reminder.py +31 -0
- chrys/service/todos/tracker.py +58 -0
- chrys/service/tools/__init__.py +3 -0
- chrys/service/tools/approval_targets.py +92 -0
- chrys/service/tools/builtins/__init__.py +3 -0
- chrys/service/tools/builtins/ask_user.py +326 -0
- chrys/service/tools/builtins/doc_converter/__init__.py +494 -0
- chrys/service/tools/builtins/doc_converter/artifacts.py +392 -0
- chrys/service/tools/builtins/doc_converter/parsers/__init__.py +3 -0
- chrys/service/tools/builtins/doc_converter/parsers/_table.py +34 -0
- chrys/service/tools/builtins/doc_converter/parsers/base.py +101 -0
- chrys/service/tools/builtins/doc_converter/parsers/docx.py +88 -0
- chrys/service/tools/builtins/doc_converter/parsers/pdf.py +144 -0
- chrys/service/tools/builtins/doc_converter/parsers/pptx.py +103 -0
- chrys/service/tools/builtins/doc_converter/parsers/xls.py +32 -0
- chrys/service/tools/builtins/doc_converter/parsers/xlsx.py +51 -0
- chrys/service/tools/builtins/doc_converter/registry.py +55 -0
- chrys/service/tools/builtins/filesystem.py +1071 -0
- chrys/service/tools/builtins/search.py +1265 -0
- chrys/service/tools/builtins/shell.py +967 -0
- chrys/service/tools/builtins/shell_command_filtering/__init__.py +5 -0
- chrys/service/tools/builtins/shell_command_filtering/policy.py +60 -0
- chrys/service/tools/builtins/shell_command_filtering/presets.py +152 -0
- chrys/service/tools/builtins/shell_command_filtering/readonly/__init__.py +358 -0
- chrys/service/tools/builtins/shell_command_filtering/readonly/commands.py +416 -0
- chrys/service/tools/builtins/shell_command_filtering/readonly/git.py +408 -0
- chrys/service/tools/builtins/shell_command_filtering/readonly/syntax.py +87 -0
- chrys/service/tools/builtins/shell_command_filtering/tokenizer.py +214 -0
- chrys/service/tools/builtins/shell_filter.py +24 -0
- chrys/service/tools/builtins/sleep.py +91 -0
- chrys/service/tools/builtins/todo.py +64 -0
- chrys/service/tools/builtins/web/__init__.py +6 -0
- chrys/service/tools/builtins/web/build.py +268 -0
- chrys/service/tools/builtins/web/config.py +338 -0
- chrys/service/tools/builtins/web/credentials.py +37 -0
- chrys/service/tools/builtins/web/fetch/__init__.py +3 -0
- chrys/service/tools/builtins/web/fetch/cache.py +68 -0
- chrys/service/tools/builtins/web/fetch/convert.py +56 -0
- chrys/service/tools/builtins/web/fetch/tool.py +223 -0
- chrys/service/tools/builtins/web/hosted.py +61 -0
- chrys/service/tools/builtins/web/http.py +330 -0
- chrys/service/tools/builtins/web/progress.py +18 -0
- chrys/service/tools/builtins/web/search/__init__.py +3 -0
- chrys/service/tools/builtins/web/search/exa_mcp.py +146 -0
- chrys/service/tools/builtins/web/search/html.py +152 -0
- chrys/service/tools/builtins/web/search/json_api.py +227 -0
- chrys/service/tools/builtins/web/search/providers.py +77 -0
- chrys/service/tools/builtins/web/search/tool.py +218 -0
- chrys/service/tools/builtins/web/search/types.py +28 -0
- chrys/service/tools/builtins/web/tls_identity.py +66 -0
- chrys/service/tools/kinds.py +115 -0
- chrys/service/tools/names.py +47 -0
- chrys/service/tools/registry.py +242 -0
- chrys/service/tools/result_metadata.py +103 -0
- chrys/service/tools/session_artifacts.py +196 -0
- chrys/service/tools/spill.py +218 -0
- chrys/service/tools/workspace_paths.py +81 -0
- chrys/service/trajectory/__init__.py +11 -0
- chrys/service/trajectory/approvals.py +201 -0
- chrys/service/trajectory/compaction.py +420 -0
- chrys/service/trajectory/fork.py +75 -0
- chrys/service/trajectory/hooks.py +217 -0
- chrys/service/trajectory/items.py +41 -0
- chrys/service/trajectory/preparation.py +374 -0
- chrys/service/trajectory/retries.py +95 -0
- chrys/service/trajectory/revisions.py +129 -0
- chrys/service/trajectory/segmented.py +163 -0
- chrys/service/trajectory/session.py +762 -0
- chrys/service/trajectory/state.py +83 -0
- chrys/service/trajectory/sub_agents.py +169 -0
- chrys/service/trajectory/tombstone.py +262 -0
- chrys/service/trajectory/tools.py +323 -0
- chrys/service/trajectory/validation.py +130 -0
- chrys/service/trajectory/waits.py +161 -0
- chrys/service/trajectory/workflow.py +148 -0
- chrys/service/vision.py +128 -0
- chrys/service/workflows/__init__.py +3 -0
- chrys/service/workflows/admission.py +151 -0
- chrys/service/workflows/artifacts.py +109 -0
- chrys/service/workflows/asks.py +130 -0
- chrys/service/workflows/builtins/__init__.py +12 -0
- chrys/service/workflows/builtins/demo-workflow.manifest.json +635 -0
- chrys/service/workflows/builtins/demo-workflow.py +756 -0
- chrys/service/workflows/discovery.py +554 -0
- chrys/service/workflows/environment.py +284 -0
- chrys/service/workflows/graph.py +430 -0
- chrys/service/workflows/history.py +82 -0
- chrys/service/workflows/interpreter.py +107 -0
- chrys/service/workflows/journal.py +334 -0
- chrys/service/workflows/layout.py +56 -0
- chrys/service/workflows/ledger.py +149 -0
- chrys/service/workflows/model_selection.py +18 -0
- chrys/service/workflows/orphans.py +209 -0
- chrys/service/workflows/outcomes.py +46 -0
- chrys/service/workflows/protocol.py +210 -0
- chrys/service/workflows/records.py +142 -0
- chrys/service/workflows/scheduler.py +770 -0
- chrys/service/workflows/sdk/__init__.py +51 -0
- chrys/service/workflows/sdk/_ask.py +167 -0
- chrys/service/workflows/sdk/_builder.py +781 -0
- chrys/service/workflows/sdk/_values.py +92 -0
- chrys/service/workflows/sdk_artifact.py +74 -0
- chrys/service/workflows/store.py +494 -0
- chrys/service/workflows/transcript.py +102 -0
- chrys/service/workflows/values.py +73 -0
- chrys/service/workflows/worker_host.py +1820 -0
- chrys/workflows.py +38 -0
- icode_tui-0.29.1.dist-info/METADATA +104 -0
- icode_tui-0.29.1.dist-info/RECORD +1138 -0
- icode_tui-0.29.1.dist-info/WHEEL +4 -0
- icode_tui-0.29.1.dist-info/entry_points.txt +2 -0
- icode_tui-0.29.1.dist-info/licenses/LICENSE +202 -0
- icode_tui-0.29.1.dist-info/licenses/NOTICE +1955 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
# Chat Options
|
|
2
|
+
|
|
3
|
+
Chat Options add fields to every request a model profile sends. Use them to set reasoning effort, turn thinking on or off, turn on prompt caching, or pass settings that a gateway or self-hosted server needs. This guide explains how to fill them in, then lists settings for common model services, with links to each service's own documentation.
|
|
4
|
+
|
|
5
|
+
Provider documentation last checked: **2026-09-30**. Examples are alternatives, not a list to enable together. Support depends on the exact model, API endpoint, and server version; a compatible protocol does not guarantee identical options.
|
|
6
|
+
|
|
7
|
+
## Add a Chat Option
|
|
8
|
+
|
|
9
|
+
1. Open the "Model Configuration" window (see [Configure models](./models.md#open-the-model-configuration-window)) and select a model profile.
|
|
10
|
+
2. In the "Extra Options" section, find "Chat Options". Click "+ Add" for a new row.
|
|
11
|
+
3. Enter the field name in the left box and its value in the right box.
|
|
12
|
+
4. Click "Save".
|
|
13
|
+
|
|
14
|
+
Changes apply to later requests after you save and close the window. To remove an option, click ✕ at the end of its row, then save.
|
|
15
|
+
|
|
16
|
+
### How values are read
|
|
17
|
+
|
|
18
|
+
iCode reads each value as JSON when it can:
|
|
19
|
+
|
|
20
|
+
- `0.2` is sent as a number and `true` as a boolean.
|
|
21
|
+
- `{"type": "adaptive"}` is sent as an object and `["a", "b"]` as a list.
|
|
22
|
+
- Anything else is sent as text: `high` is sent as `"high"`. To send text that looks like a number or `true`, put it in quotes, for example `"1"`.
|
|
23
|
+
|
|
24
|
+
Keep the whole value on one line. Check braces, quotes, and commas carefully. An object with a typo, such as a trailing comma, is saved as plain text, and the model service then rejects the request. Fields that must hold an object, such as `extra_body`, are checked instead: iCode shows an error and does not save.
|
|
25
|
+
|
|
26
|
+
### Where service-specific fields go
|
|
27
|
+
|
|
28
|
+
The client library for the selected provider and API style accepts a fixed set of field names at the top level, such as `temperature`, `reasoning_effort` for Chat Completions, or `thinking` for Anthropic. An unknown keyword can fail before the request reaches the server, with `unexpected keyword argument`. Put service extensions, or new API fields that iCode's bundled client library does not yet accept, inside `extra_body`. Examples for OpenAI-compatible servers include `top_k`, `enable_thinking`, and `chat_template_kwargs`:
|
|
29
|
+
|
|
30
|
+
| Key | Value |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| `extra_body` | `{"chat_template_kwargs": {"enable_thinking": false}, "top_k": 20}` |
|
|
33
|
+
|
|
34
|
+
A profile can have only one `extra_body` row, so put every such field into the same JSON object, as in the example above. When a field appears both as its own row and inside `extra_body`, the value in `extra_body` is the one sent.
|
|
35
|
+
|
|
36
|
+
`extra_body` merges fields into the HTTP request body; it does not make an unsupported field work on the server. Likewise, `top_k` is an extension for OpenAI-compatible servers but a native field on Anthropic's API.
|
|
37
|
+
|
|
38
|
+
### Settings that have their own fields
|
|
39
|
+
|
|
40
|
+
Some settings don't belong in Chat Options:
|
|
41
|
+
|
|
42
|
+
- **Output length**: use the "Max Output Tokens" field. Rows such as `max_tokens` are refused at save.
|
|
43
|
+
- **Streaming**: use the "Streaming" checkbox, which is on by default; uncheck it to turn streaming off. Don't add a `stream` row.
|
|
44
|
+
- **Model**: use the "Model" field.
|
|
45
|
+
- **HTTP headers**: use the "HTTP Extra Headers" rows, or an `extra_headers` row whose value is a JSON object. For Anthropic's `anthropic-beta` header, "HTTP Extra Headers" add to iCode's beta flags, while an `extra_headers` row replaces them; see [Anthropic](#anthropic).
|
|
46
|
+
- **Claude thinking settings**: use the `thinking_block_binding` and `auto_interleaved_thinking` lines of the profile file; see [Claude thinking settings](./models.md#claude-thinking-settings).
|
|
47
|
+
|
|
48
|
+
iCode builds the messages, tools, and system prompt itself, so fields such as `messages` are refused at save.
|
|
49
|
+
|
|
50
|
+
### Keep secrets out of the profile
|
|
51
|
+
|
|
52
|
+
To read part of a value from an environment variable, write the variable name in double braces. For example, to send a gateway token as a header:
|
|
53
|
+
|
|
54
|
+
| Key | Value |
|
|
55
|
+
| --- | --- |
|
|
56
|
+
| `extra_headers` | `{"X-Api-Token": "{{MY_GATEWAY_TOKEN}}"}` |
|
|
57
|
+
|
|
58
|
+
The profile file keeps the placeholder, and iCode fills in the value when it sends a request. Set the variable before starting iCode. If it isn't set, iCode reports an error naming the variable.
|
|
59
|
+
|
|
60
|
+
### Which requests use Chat Options
|
|
61
|
+
|
|
62
|
+
Chat Options are shared by requests made with the profile, including the main agent, sub-agents, workflow agents, session titles, the automatic approval judge, and context compaction. Individual operations may override or filter options for their own request. Higher reasoning effort can also increase the latency and cost of these auxiliary requests.
|
|
63
|
+
|
|
64
|
+
## Prompt caching
|
|
65
|
+
|
|
66
|
+
In iCode's default local-history mode, requests resend the conversation currently in context. Prompt caching lets the service reuse an unchanged prefix, reducing repeated input processing and usually its price. It is separate from storing a conversation on the service. Cache writes may cost extra, so savings depend on how often the prefix is reused.
|
|
67
|
+
|
|
68
|
+
OpenAI, DeepSeek, GLM, Kimi's Chat Completions API, and Qwen offer automatic caching on supported models. vLLM and SGLang manage prefix caching on the server; their launch settings and model support determine whether it is active. See the provider sections below for sources and exceptions.
|
|
69
|
+
|
|
70
|
+
**Anthropic's Claude API requires a cache setting.** To enable automatic caching of the growing conversation prefix, add this row:
|
|
71
|
+
|
|
72
|
+
| Key | Value |
|
|
73
|
+
| --- | --- |
|
|
74
|
+
| `extra_body` | `{"cache_control": {"type": "ephemeral"}}` |
|
|
75
|
+
|
|
76
|
+
If the profile already has an `extra_body` row, add `"cache_control": {"type": "ephemeral"}` to its object instead. Anthropic's standard 5-minute writes cost 1.25× the base input rate; reads cost 0.1× or less, depending on the model. For a 1-hour entry, use `{"type": "ephemeral", "ttl": "1h"}`; writes cost 2×. The TTL runs from the start of a request that writes or reuses the entry, so generation time consumes part of it. A model-specific minimum prefix length also applies. See [Anthropic prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) for current limits and pricing rules.
|
|
77
|
+
|
|
78
|
+
### The "Prompt Caching Is Off" reminder
|
|
79
|
+
|
|
80
|
+
When you save a profile with the "Anthropic" provider, a model ID containing `claude`, and no `cache_control` setting, iCode shows the "Prompt Caching Is Off" window:
|
|
81
|
+
|
|
82
|
+
- **Add and Save** adds `"cache_control": {"type": "ephemeral"}` to the `extra_body` row, creating the row if needed, then saves.
|
|
83
|
+
- **Save as Is** saves the profile unchanged.
|
|
84
|
+
- Press **Esc** or click outside the window to return to the form without saving.
|
|
85
|
+
|
|
86
|
+
iCode shows the reminder on the save that makes the profile a complete Claude profile: a new profile, or one you changed to the Anthropic provider or to a Claude model. Saving a profile that is already a Claude profile doesn't show it again.
|
|
87
|
+
|
|
88
|
+
Anthropic-compatible services have their own cache behavior: they may honor, ignore, or reject `cache_control`. Check the endpoint's documentation. If it rejects the field, remove only `"cache_control": {...}` from `extra_body` and save. The reminder checks the profile's settings, not whether the server actually cached a request.
|
|
89
|
+
|
|
90
|
+
### Check that caching works
|
|
91
|
+
|
|
92
|
+
Open the sidebar (**Ctrl+G** shows or hides it) and select the "Context" tab. In the "Token Usage" section, the "Cached" row shows the session's accumulated reported cache reads. It grows when a request reports a hit, not necessarily on every call. `-` does not prove caching is disabled: the service may report no hits or omit cache usage.
|
|
93
|
+
|
|
94
|
+
If "Cached" stays at `-` or stops growing:
|
|
95
|
+
|
|
96
|
+
- Check that the profile has the setting the service needs (see [Settings for common model services](#settings-for-common-model-services)).
|
|
97
|
+
- Check the model's minimum cacheable prefix length, retention period, and cache-write requirements. Short prompts may not qualify, and expired or evicted entries cannot be reused.
|
|
98
|
+
- Keep reusable content stable. Changing the model, tools, reasoning settings, or compacting history can reduce cache reuse; a change need not invalidate every earlier matching prefix.
|
|
99
|
+
- A request routed to a different backend may miss even with identical input. Automatic caching does not guarantee a hit.
|
|
100
|
+
|
|
101
|
+
## Settings for common model services
|
|
102
|
+
|
|
103
|
+
Each section below lists the recommended provider, API style, and base URL, then some commonly used settings. Field names and allowed values change with each model, so check the linked documentation for the model you use.
|
|
104
|
+
|
|
105
|
+
### OpenAI
|
|
106
|
+
|
|
107
|
+
Provider "OpenAI", API style "Responses", with the default base URL. "Chat Completions" works too, but some newer models support tool calls only on Responses. Prompt caching is automatic.
|
|
108
|
+
|
|
109
|
+
| What you want | Key | Value |
|
|
110
|
+
| --- | --- | --- |
|
|
111
|
+
| Reasoning effort (Responses) | `reasoning` | `{"effort": "high"}` |
|
|
112
|
+
| Reasoning summaries (Responses) | `reasoning` | `{"effort": "high", "summary": "auto"}` |
|
|
113
|
+
| Reasoning effort (Chat Completions) | `reasoning_effort` | `high` |
|
|
114
|
+
| Shorter answers | `verbosity` | `low` |
|
|
115
|
+
| Cheaper, slower processing | `service_tier` | `flex` |
|
|
116
|
+
| Cache lifetime on GPT-5.6 and later (Responses) | `extra_body` | `{"prompt_cache_options": {"mode": "implicit", "ttl": "30m"}}` |
|
|
117
|
+
|
|
118
|
+
On Responses, use `reasoning` rather than `reasoning_effort`. iCode translates its `verbosity` option to the API's `text.verbosity`. Allowed effort levels, summaries, verbosity, and Flex availability vary by model. Flex can also return resource-unavailable errors; see [Flex processing](https://developers.openai.com/api/docs/guides/flex-processing).
|
|
119
|
+
|
|
120
|
+
GPT-5.6 and later use `prompt_cache_options` with a `30m` TTL; automatic cache writes are billable. Earlier models use `prompt_cache_retention`, with values such as `in_memory` or `24h` depending on the model. These settings are not interchangeable. Keep `mode` implicit: explicit mode requires content-block breakpoints, which the Chat Options form does not add.
|
|
121
|
+
|
|
122
|
+
On Responses with OpenAI's own address, iCode also sends the session ID as `prompt_cache_key`, so requests from one session share a cache key; sub-agents and workflow agents use their own. To use a key of your own, add a `prompt_cache_key` row. To send none, set its value to `null`.
|
|
123
|
+
|
|
124
|
+
Leave `store` unset unless you want service-side continuation: iCode sends `false` by default, which still allows prompt caching. Setting it to `true` disables iCode's context compaction.
|
|
125
|
+
|
|
126
|
+
Documentation: [Reasoning](https://developers.openai.com/api/docs/guides/reasoning), [Prompt caching](https://developers.openai.com/api/docs/guides/prompt-caching), [Responses API reference](https://developers.openai.com/api/reference/resources/responses/methods/create), [Chat Completions API reference](https://developers.openai.com/api/reference/resources/chat/subresources/completions/methods/create).
|
|
127
|
+
|
|
128
|
+
### Anthropic
|
|
129
|
+
|
|
130
|
+
Provider "Anthropic", base URL `https://api.anthropic.com`. Don't add `/v1` to the base URL. **Add prompt caching**, as described in [Prompt caching](#prompt-caching).
|
|
131
|
+
|
|
132
|
+
| What you want | Key | Value |
|
|
133
|
+
| --- | --- | --- |
|
|
134
|
+
| Prompt caching | `extra_body` | `{"cache_control": {"type": "ephemeral"}}` |
|
|
135
|
+
| Adaptive thinking | `thinking` | `{"type": "adaptive"}` |
|
|
136
|
+
| Thinking with a fixed budget (older models) | `thinking` | `{"type": "enabled", "budget_tokens": 8000}` |
|
|
137
|
+
| Effort | `output_config` | `{"effort": "medium"}` |
|
|
138
|
+
| Interleaved thinking on older models at another address | `additional_beta_flags` | `["interleaved-thinking-2025-05-14"]` |
|
|
139
|
+
|
|
140
|
+
- Use `adaptive` only on models that support it; recent models reject the older `enabled`/`budget_tokens` form. For ordinary fixed-budget thinking, set "Max Output Tokens" higher than `budget_tokens` (manual interleaved thinking has different budget rules).
|
|
141
|
+
- Newer Claude models reject non-default `temperature`, `top_p`, and `top_k` values, so leave them unset.
|
|
142
|
+
- `additional_beta_flags` and `betas` add beta flags to the request, as does an `anthropic-beta` header in "HTTP Extra Headers". iCode sends them all, after its own flags, in one `anthropic-beta` header. An `anthropic-beta` key in an `extra_headers` row replaces all of these flags, iCode's own included; iCode then adds only the flags the thinking settings need.
|
|
143
|
+
- With fixed-budget thinking at Anthropic's own address, iCode adds the interleaved-thinking flag itself; see [Claude thinking settings](./models.md#claude-thinking-settings). At another address, add it yourself as in the table above. Adaptive thinking already interleaves and needs no flag. Interleaving depends on the exact model, and accepting a beta flag does not mean it takes effect.
|
|
144
|
+
- With Claude Opus 5.5, Fable 5.1 or Sonnet 5.5 and adaptive thinking at Anthropic's own address, iCode asks the service to leave out earlier thinking that no longer matches the conversation; see [Claude thinking settings](./models.md#claude-thinking-settings). A `block_binding` you write into `thinking` yourself is sent as written, and iCode adds the beta flag it needs.
|
|
145
|
+
|
|
146
|
+
Documentation: [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching), [Adaptive thinking](https://platform.claude.com/docs/en/build-with-claude/thinking), [Extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking), [Effort](https://platform.claude.com/docs/en/build-with-claude/effort), [Beta headers](https://platform.claude.com/docs/en/api/beta-headers).
|
|
147
|
+
|
|
148
|
+
### DeepSeek
|
|
149
|
+
|
|
150
|
+
Provider "DeepSeek (OpenAI)", API style "Chat Completions", with the default base URL `https://api.deepseek.com`. Prompt caching is automatic.
|
|
151
|
+
|
|
152
|
+
| What you want | Key | Value |
|
|
153
|
+
| --- | --- | --- |
|
|
154
|
+
| Turn thinking off | `extra_body` | `{"thinking": {"type": "disabled"}}` |
|
|
155
|
+
| Reasoning effort | `reasoning_effort` | `high` |
|
|
156
|
+
|
|
157
|
+
The current API enables thinking by default and accepts `low`, `high`, or `max` effort. In thinking mode, `temperature`, `presence_penalty`, and `frequency_penalty` are ignored; `top_p` is effective only from 0.95 to 1.0. Older model IDs may have different capabilities.
|
|
158
|
+
|
|
159
|
+
Documentation: [Thinking mode](https://api-docs.deepseek.com/guides/thinking_mode), [Context caching](https://api-docs.deepseek.com/guides/kv_cache), [API reference](https://api-docs.deepseek.com/api/create-chat-completion).
|
|
160
|
+
|
|
161
|
+
### GLM (Zhipu / Z.ai)
|
|
162
|
+
|
|
163
|
+
Provider "GLM (OpenAI)". The default base URL is `https://open.bigmodel.cn/api/paas/v4`; outside mainland China use `https://api.z.ai/api/paas/v4`, and for the GLM Coding Plan use `https://open.bigmodel.cn/api/coding/paas/v4` or `https://api.z.ai/api/coding/paas/v4`. Prompt caching is automatic.
|
|
164
|
+
|
|
165
|
+
| What you want | Key | Value |
|
|
166
|
+
| --- | --- | --- |
|
|
167
|
+
| Turn thinking off | `extra_body` | `{"thinking": {"type": "disabled"}}` |
|
|
168
|
+
| Keep earlier reasoning in context | `extra_body` | `{"thinking": {"type": "enabled", "clear_thinking": false}}` |
|
|
169
|
+
| Reasoning effort (GLM-5.2 and later) | `reasoning_effort` | `high` |
|
|
170
|
+
|
|
171
|
+
GLM-5.3 always thinks and accepts `low`, `high`, or `max` effort; do not send `thinking.type: disabled` to it. GLM-5.2 has different effort mappings, and earlier models do not support this effort field. `clear_thinking: false` also requires intact historical reasoning, which iCode's GLM provider preserves. `temperature` ranges from 0 to 1.
|
|
172
|
+
|
|
173
|
+
Documentation: [Thinking mode](https://docs.z.ai/guides/capabilities/thinking-mode), [Context caching](https://docs.z.ai/guides/capabilities/cache), [API reference](https://docs.z.ai/api-reference/llm/chat-completion).
|
|
174
|
+
|
|
175
|
+
### Kimi (Moonshot AI)
|
|
176
|
+
|
|
177
|
+
Provider "OpenAI", API style "Chat Completions", base URL `https://api.moonshot.ai/v1` (in mainland China, `https://api.moonshot.cn/v1`). Prompt caching is automatic.
|
|
178
|
+
|
|
179
|
+
| What you want | Key | Value |
|
|
180
|
+
| --- | --- | --- |
|
|
181
|
+
| Reasoning effort (Kimi K3) | `reasoning_effort` | `high` |
|
|
182
|
+
| Turn thinking off (Kimi K2.6) | `extra_body` | `{"thinking": {"type": "disabled"}}` |
|
|
183
|
+
| Longer cache lifetime (Chat Completions) | `extra_body` | `{"prompt_cache_options": {"mode": "implicit", "ttl": "1h"}}` |
|
|
184
|
+
|
|
185
|
+
Kimi K3 always thinks, accepts `low`, `high`, or `max` effort, and does not accept a `thinking` field. K2.7 Code always thinks but does not support `reasoning_effort`; K2.6 can disable thinking but also does not support that effort field. Leave sampling options unset unless the exact model documents them; fixed-value restrictions on some Kimi models are not a universal sampling contract. iCode only accepts `n` omitted or set to `1`.
|
|
186
|
+
|
|
187
|
+
Chat Completions uses a 5-minute cache by default. The 1-hour option has a higher cache-write price; changing TTL does not change the lifetime of an existing entry before it expires.
|
|
188
|
+
|
|
189
|
+
Kimi also offers an Anthropic-protocol endpoint: provider "Anthropic", base URL `https://api.moonshot.ai/anthropic`. On it, requests write to the cache only when they ask for caching, so add the `cache_control` setting from [Prompt caching](#prompt-caching).
|
|
190
|
+
|
|
191
|
+
Documentation: [Chat API](https://platform.kimi.ai/docs/api/chat), [Thinking models](https://platform.kimi.ai/docs/guide/use-thinking-models), [Context caching](https://platform.kimi.ai/docs/guide/context-caching), [Anthropic-compatible API](https://platform.kimi.ai/docs/api/messages).
|
|
192
|
+
|
|
193
|
+
### Qwen (Alibaba Cloud Model Studio)
|
|
194
|
+
|
|
195
|
+
Provider "OpenAI", API style "Chat Completions", and the OpenAI-compatible base URL from your Model Studio console. The current recommendation is a workspace-specific endpoint, such as `https://<WorkspaceId>.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` (Beijing) or `https://<WorkspaceId>.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1` (Singapore); replace `<WorkspaceId>` with your workspace ID. The older `dashscope.aliyuncs.com` and `dashscope-intl.aliyuncs.com` endpoints remain available. API keys and endpoints must match the region; other regions and Coding Plan have their own endpoints. Implicit caching is automatic on supported models, with no guaranteed hit.
|
|
196
|
+
|
|
197
|
+
| What you want | Key | Value |
|
|
198
|
+
| --- | --- | --- |
|
|
199
|
+
| Turn thinking off | `extra_body` | `{"enable_thinking": false}` |
|
|
200
|
+
| Thinking with a budget | `extra_body` | `{"enable_thinking": true, "thinking_budget": 4096}` |
|
|
201
|
+
| Sampling | `extra_body` | `{"top_k": 20}` |
|
|
202
|
+
| Let the model search the web | `extra_body` | `{"enable_search": true}` |
|
|
203
|
+
|
|
204
|
+
`enable_thinking: false` applies to hybrid thinking models; thinking-only models cannot disable it. Budget limits, `top_k`, and `enable_search` support also vary by model. Some open-source Qwen models require "Streaming" for thinking, while commercial models can also support non-streaming requests. Model Studio also offers explicit caching via message-block markers; the Chat Options form does not add those markers.
|
|
205
|
+
|
|
206
|
+
Documentation: [OpenAI compatibility](https://www.alibabacloud.com/help/en/model-studio/compatibility-of-openai-with-dashscope), [Deep thinking](https://www.alibabacloud.com/help/en/model-studio/deep-thinking), [Context cache](https://www.alibabacloud.com/help/en/model-studio/context-cache).
|
|
207
|
+
|
|
208
|
+
### vLLM
|
|
209
|
+
|
|
210
|
+
Provider "OpenAI", API style "Chat Completions", base URL `http://<host>:<port>/v1`. For "API Key", enter the server's `--api-key` value, or leave it blank if the server doesn't use one. Prefix caching is a server setting: check `--enable-prefix-caching` / `--no-enable-prefix-caching` and support for the deployed model.
|
|
211
|
+
|
|
212
|
+
For iCode agents that use tools, start the server with `--enable-auto-tool-choice` and the `--tool-call-parser` that matches your model. Add the matching `--reasoning-parser` for reasoning models to separate reasoning from the answer.
|
|
213
|
+
|
|
214
|
+
| What you want | Key | Value |
|
|
215
|
+
| --- | --- | --- |
|
|
216
|
+
| Turn thinking off (Qwen3 and similar) | `extra_body` | `{"chat_template_kwargs": {"enable_thinking": false}}` |
|
|
217
|
+
| Reasoning effort | `reasoning_effort` | `low` |
|
|
218
|
+
| Sampling | `extra_body` | `{"top_k": 20, "min_p": 0.0, "repetition_penalty": 1.05}` |
|
|
219
|
+
|
|
220
|
+
These are model-template options, not universal switches. Some models always think; others use a different toggle. `reasoning_effort` does not provide the same effort levels on every model. Match the documentation to your installed vLLM version.
|
|
221
|
+
|
|
222
|
+
Documentation: [Tool calling](https://docs.vllm.ai/en/latest/features/tool_calling/), [Reasoning outputs](https://docs.vllm.ai/en/latest/features/reasoning_outputs/), [OpenAI-compatible server](https://docs.vllm.ai/en/latest/serving/openai_compatible_server/), [Server arguments](https://docs.vllm.ai/en/latest/cli/serve/).
|
|
223
|
+
|
|
224
|
+
### SGLang
|
|
225
|
+
|
|
226
|
+
Provider "OpenAI", API style "Chat Completions", base URL `http://<host>:<port>/v1`. Configure the tool parser for tool use and the reasoning parser for reasoning models. Prefix caching is enabled by default in ordinary server configurations, but `--disable-radix-cache` or model-specific constraints can disable it.
|
|
227
|
+
|
|
228
|
+
| What you want | Key | Value |
|
|
229
|
+
| --- | --- | --- |
|
|
230
|
+
| Turn thinking off (hybrid Qwen3 models) | `extra_body` | `{"chat_template_kwargs": {"enable_thinking": false}}` |
|
|
231
|
+
| Turn thinking on (DeepSeek-V3.1) | `extra_body` | `{"chat_template_kwargs": {"thinking": true}}` |
|
|
232
|
+
| Reasoning effort | `reasoning_effort` | `low` |
|
|
233
|
+
| Sampling | `extra_body` | `{"top_k": 20, "min_p": 0.0, "repetition_penalty": 1.05}` |
|
|
234
|
+
|
|
235
|
+
The template's accepted keys and effort levels depend on the model and SGLang version. A reasoning parser separates output; it does not itself enable thinking. Keep `separate_reasoning` enabled to display reasoning separately. Configure `reasoning_effort` in either the request or the server's template defaults, not both.
|
|
236
|
+
|
|
237
|
+
Documentation: [OpenAI-compatible API](https://docs.sglang.io/docs/basic_usage/openai_api_completions), [Server arguments](https://docs.sglang.io/docs/advanced_features/server_arguments), [Tool parser](https://docs.sglang.io/docs/advanced_features/tool_parser), [Reasoning parser](https://docs.sglang.io/docs/advanced_features/separate_reasoning).
|
|
238
|
+
|
|
239
|
+
### LiteLLM proxy
|
|
240
|
+
|
|
241
|
+
Provider "OpenAI", API style "Chat Completions", base URL `http://<host>:4000`, and a LiteLLM virtual key (`sk-...`) as the API key. For Claude models, you can also use provider "Anthropic" with the same base URL, which reaches LiteLLM's Anthropic-format endpoint.
|
|
242
|
+
|
|
243
|
+
| What you want | Key | Value |
|
|
244
|
+
| --- | --- | --- |
|
|
245
|
+
| Tag spend for cost tracking | `extra_body` | `{"metadata": {"tags": ["team-a"]}}` |
|
|
246
|
+
| Route by tag | `extra_body` | `{"tags": ["free"]}` |
|
|
247
|
+
|
|
248
|
+
Tag routing requires matching deployment tags and enabled tag filtering in the proxy; a request tag alone does not configure routing. Spend reporting also depends on the proxy's tracking setup and available features.
|
|
249
|
+
|
|
250
|
+
For unsupported OpenAI parameters, the proxy administrator can configure `drop_params`; those settings are then silently omitted. It is not a general fix for an invalid provider-specific field or value. Remove or correct those fields in the profile.
|
|
251
|
+
|
|
252
|
+
Documentation: [Virtual keys](https://docs.litellm.ai/docs/proxy/user_keys), [Cost tracking](https://docs.litellm.ai/docs/proxy/cost_tracking), [Tag routing](https://docs.litellm.ai/docs/proxy/tag_routing), [Dropping unsupported parameters](https://docs.litellm.ai/docs/completion/drop_params), [Anthropic `/v1/messages` endpoint](https://docs.litellm.ai/docs/anthropic_unified).
|
|
253
|
+
|
|
254
|
+
### OpenRouter
|
|
255
|
+
|
|
256
|
+
Provider "OpenAI", API style "Chat Completions", base URL `https://openrouter.ai/api/v1`.
|
|
257
|
+
|
|
258
|
+
| What you want | Key | Value |
|
|
259
|
+
| --- | --- | --- |
|
|
260
|
+
| Choose which providers serve the model | `extra_body` | `{"provider": {"order": ["anthropic"], "allow_fallbacks": false}}` |
|
|
261
|
+
| Reasoning effort | `extra_body` | `{"reasoning": {"effort": "high"}}` |
|
|
262
|
+
| Prompt caching for Claude models | `extra_body` | `{"cache_control": {"type": "ephemeral"}}` |
|
|
263
|
+
|
|
264
|
+
To combine these, put them in one object, for example `{"provider": {"order": ["anthropic"]}, "cache_control": {"type": "ephemeral"}}`.
|
|
265
|
+
|
|
266
|
+
`provider.order` sets preference; retain `allow_fallbacks: false` if only the listed providers should serve the request. Top-level `cache_control` is supported for Claude automatic caching, but model and provider support still matters. OpenRouter's documented behavior can differ from calling that provider directly.
|
|
267
|
+
|
|
268
|
+
Documentation: [Quickstart](https://openrouter.ai/docs/quickstart), [Provider selection](https://openrouter.ai/docs/guides/routing/provider-selection), [Reasoning tokens](https://openrouter.ai/docs/guides/best-practices/reasoning-tokens), [Prompt caching](https://openrouter.ai/docs/guides/best-practices/prompt-caching).
|
|
269
|
+
|
|
270
|
+
## If requests fail after you add an option
|
|
271
|
+
|
|
272
|
+
- **Saving shows `Chat Options row N: ...`**: fix the row the message names, then save again.
|
|
273
|
+
- **The error contains `unexpected keyword argument 'x'`**: move the field `x` into `extra_body`, as described in [Where service-specific fields go](#where-service-specific-fields-go).
|
|
274
|
+
- **The model service says it doesn't support a field**: remove only that field. If it is inside `extra_body`, delete just that member from the JSON object and keep the others. Then save.
|
|
275
|
+
- **The error names an environment variable**: set that variable and restart iCode, or remove the `{{...}}` placeholder.
|
|
276
|
+
- **Nothing obvious**: remove recently added rows one at a time until requests work again, and check the service's documentation for the model you use.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Configure context compaction
|
|
2
|
+
|
|
3
|
+
When a long conversation approaches the model's context window, iCode automatically compacts earlier content to make room for subsequent requests. This guide explains how to configure the Last Words supplement and output limit for agents of the "Built-in" type. External ACP agents manage their own context.
|
|
4
|
+
|
|
5
|
+
New agents use defaults suited to most tasks, so adjustments are usually unnecessary.
|
|
6
|
+
|
|
7
|
+
## Understand when compaction happens
|
|
8
|
+
|
|
9
|
+
iCode automatically calculates when to start compaction based on the maximum context window, maximum output tokens, and a safety margin for the current model profile. Set the maximum context window and maximum output tokens in the [model profile](./models.md) according to the model's capabilities and your task requirements. The "Compaction" tab does not provide a separate setting for when compaction starts.
|
|
10
|
+
|
|
11
|
+
When the context is nearly full, iCode also lowers the output limit of the next request so that its input and output fit in the context window, leaving a small margin for error in its token estimate.
|
|
12
|
+
|
|
13
|
+
The model service can still report that the context window is full, for example when the model's actual context window is smaller than the one set in the model profile. If the service's error names a limit smaller than the maximum context window in the model profile, the request fails at once and the error message names that limit: set the maximum context window in the model profile to that value or less. Otherwise, iCode compacts the context and sends the request once more by itself. If the service reports that the context window is full again, the request fails. When the model stops before writing anything because no room is left for its reply, the request can also fail. After such a failure, the next request first compacts the context to try to make room, for example when you click "Retry", send another message, or retry a workflow node. If it keeps happening, set the maximum context window in the model profile to the model's actual value.
|
|
14
|
+
|
|
15
|
+
During compaction, iCode first summarizes older tool results and, if needed, removes older tool calls together with their results. If it still needs to free up space, it replaces completed turns in the current context with a compaction summary. If these steps are still insufficient, iCode generates Last Words for the current task to preserve the information needed to continue, then removes the current turn's tool calls, tool results, and intermediate content from the context supplied to the model, keeping the user's messages.
|
|
16
|
+
|
|
17
|
+
These three steps serve different purposes: trimming older tool calls and results only reduces the space taken up by tool use; compaction summaries replace completed turns; Last Words help continue the current unfinished task.
|
|
18
|
+
|
|
19
|
+
In the TUI, you can observe the following changes:
|
|
20
|
+
|
|
21
|
+
- "Compacting conversation..." appears during compaction.
|
|
22
|
+
- After compaction, compacted turns appear in gray in the sidebar message list. The conversation area shows a gray "Compressed" marker and a compaction summary at the corresponding position.
|
|
23
|
+
- If Last Words were generated, you can expand the completed compaction card to view them.
|
|
24
|
+
|
|
25
|
+
Compacted historical turns remain in the session. The agent can look up specific information from them when needed, without adding the entire conversation back to the current context.
|
|
26
|
+
|
|
27
|
+
Compaction reduces context usage, but summaries cannot guarantee that every original detail is preserved. Put project rules that must be retained over time without omissions in [memory files](./memory.md), and write important work results to files in the working directory instead of leaving them only in the conversation.
|
|
28
|
+
|
|
29
|
+
## Adjust compaction settings
|
|
30
|
+
|
|
31
|
+
1. Enter `/agents compaction` in the input field to open the current agent's "Compaction" tab. To edit another agent, select it from the list on the left.
|
|
32
|
+
2. Adjust "Last Words Max Output Tokens" as needed, entering an integer within the range allowed by the interface. The actual generation limit will not exceed the current model profile's maximum output tokens.
|
|
33
|
+
3. To emphasize certain types of information in Last Words, fill in "Last Words Supplement (Optional emphasis)".
|
|
34
|
+
4. Click "Save". The new settings take effect the next time this agent needs compaction.
|
|
35
|
+
|
|
36
|
+
"Last Words Supplement (Optional emphasis)" specifies the information that Last Words should prioritize. For example, if you often use this agent to troubleshoot issues, you could enter:
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
Prioritize reproduction steps, causes already ruled out, key logs, and hypotheses that still need to be tested.
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Keep the supplement brief and focus on information needed to continue the task that could easily be lost during compaction.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Configure memory
|
|
2
|
+
|
|
3
|
+
This guide explains how to configure memory for the main agent.
|
|
4
|
+
|
|
5
|
+
## Prepare memory content
|
|
6
|
+
|
|
7
|
+
**Memory is added to the system prompt when the main agent loads.** iCode reads the memory files configured for the current main agent and provides their content to the agent as reference material. Memory content uses part of the model's context window and is sent to the model service with requests. Avoid including sensitive information such as secret keys or access tokens in memory.
|
|
8
|
+
|
|
9
|
+
**Sub-agents do not load memory.** Sub-agents neither inherit the main agent's loaded memory nor load memory from their own agent profiles. Agent nodes in [workflows](../running/workflows.md), however, load the memory configured in their agent profiles.
|
|
10
|
+
|
|
11
|
+
**Memory is suited to stable, reusable information.** iCode only loads memory files with the `.md` or `.txt` extension. Memory should contain information that can be reused across tasks, such as project conventions, background material, and frequently needed information. Keep it brief, clear, and up to date; instructions for a temporary task are better included directly in the current request.
|
|
12
|
+
|
|
13
|
+
**The default agents already use AGENTS.md as memory.** The main agents included with iCode, such as Code Agent, load `AGENTS.md` from the working directory. To add general project instructions, start by maintaining this file. If it is not needed, remove its entry from the "Memory" tab.
|
|
14
|
+
|
|
15
|
+
## Add a memory file
|
|
16
|
+
|
|
17
|
+
1. Enter `/agents memory` in the input field to open the current agent's "Memory" tab. To configure another main agent, select it from the list on the left.
|
|
18
|
+
2. Click "+ Add File" in the "Files" section.
|
|
19
|
+
3. Enter a path, or use "Browse" to select a `.md` or `.txt` file. With "Workspace relative" selected, enter a relative path, such as `AGENTS.md` or `docs/context.md`; otherwise, enter an absolute path.
|
|
20
|
+
|
|
21
|
+
> **Note:** Relative paths are resolved against the current working directory when memory loads, rather than the directory where the agent profile was created. This lets the same agent load each project's own `AGENTS.md`. Relative paths must stay inside the working directory; use an absolute path for files outside it.
|
|
22
|
+
4. Click "Save", then close the agent configuration window.
|
|
23
|
+
|
|
24
|
+
## Add a memory folder
|
|
25
|
+
|
|
26
|
+
To load a set of reference files, click "+ Add Folder" in the "Folders" section. With "Workspace relative" selected, enter a relative path; otherwise, enter an absolute path. When finished, click "Save", then close the agent configuration window.
|
|
27
|
+
|
|
28
|
+
iCode first loads the `.md` and `.txt` files directly in the folder, then scans subfolders one level at a time. For each configured folder, it scans at most two levels of subfolders and loads at most 100 files. If an important file may fall outside these limits, add it separately in the "Files" section.
|
|
29
|
+
|
|
30
|
+
## Load and reload memory
|
|
31
|
+
|
|
32
|
+
If the same file is both added individually and discovered in a folder, it is loaded only once. The combined content from all memory sources is limited to 35,000 tokens. Individually added files load first, then folders. Once a file would exceed the limit, that file and all remaining files are skipped, and iCode displays a warning.
|
|
33
|
+
|
|
34
|
+
After switching working directories or changing the current agent profile, iCode reloads memory using the new paths.
|
|
35
|
+
|
|
36
|
+
iCode does not monitor loaded memory files for changes. After editing a file directly on disk, reload the main agent for the changes to take effect. For example, restart iCode, switch working directories, modify and save the current agent profile, or switch to another main agent and then switch back.
|
|
37
|
+
|
|
38
|
+
## Verify that memory is loaded
|
|
39
|
+
|
|
40
|
+
Enter `/runtime` in the input field, or click the file count at the right end of the status bar above the input field, to open "Runtime Details". Switch to the "Files" tab. This page lists the files actually loaded, grouped by their configured source. If the expected files appear in the list, memory has loaded.
|
|
41
|
+
|
|
42
|
+
If an expected file is missing, check the following:
|
|
43
|
+
|
|
44
|
+
* Does the path exist, and does the file have the `.md` or `.txt` extension?
|
|
45
|
+
* For a relative path, is the file in the current working directory?
|
|
46
|
+
* Does the entry type match the actual path? A file entry must point to a file, and a folder entry to a folder.
|
|
47
|
+
* Is there a warning that the content exceeds 35,000 tokens or that some files were skipped?
|
|
48
|
+
* Did you click "Save" after changing the configuration?
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Configure models
|
|
2
|
+
|
|
3
|
+
A model profile contains the information needed to connect to a model service. This guide explains how to create, clone, edit, switch, and delete model profiles in the terminal user interface (TUI). Once saved, profiles let you switch between tasks without entering connection parameters again.
|
|
4
|
+
|
|
5
|
+
## Open the model configuration window
|
|
6
|
+
|
|
7
|
+
Open the "Model Configuration" window in any of these ways:
|
|
8
|
+
|
|
9
|
+
- Press **F4**.
|
|
10
|
+
- Click `f4 Models` at the bottom of the interface.
|
|
11
|
+
- Enter `/models` in the input field.
|
|
12
|
+
|
|
13
|
+
The list on the left shows existing model profiles. The form on the right shows the currently selected profile.
|
|
14
|
+
|
|
15
|
+
While a task is running, the "Model Configuration" window opens in read-only mode. You cannot create, edit, or delete profiles. Wait for the task to finish before changing the configuration.
|
|
16
|
+
|
|
17
|
+
## Manage model profiles
|
|
18
|
+
|
|
19
|
+
### Create a model profile
|
|
20
|
+
|
|
21
|
+
1. Click "New".
|
|
22
|
+
2. Enter a "Profile Name" of your choice, such as `My Model`.
|
|
23
|
+
3. In the "Model Options" section, select the "Provider" and "API Style". Only OpenAI and DeepSeek (OpenAI) provide an API Style option. Before configuring it, check the model service's documentation for supported APIs and follow its recommendation when choosing "Chat Completions" or "Responses". If the service supports only one API, select its corresponding style; if it supports both, choose according to the service's recommendation or your needs.
|
|
24
|
+
4. Enter the model ID in "Model" and, as required by the model service, fill in "Base URL" and "API Key".
|
|
25
|
+
5. Set "Max Context Window" and the "Max Output Tokens" field according to the provider's documentation.
|
|
26
|
+
6. Adjust "Streaming", "Vision Model", and "Connection Options" as needed. "Streaming" is on for a new profile.
|
|
27
|
+
7. Click "Save".
|
|
28
|
+
|
|
29
|
+
**Notes:**
|
|
30
|
+
|
|
31
|
+
- Clicking "New" immediately creates and saves a blank profile. You must click "Save" for any subsequent entries or changes to take effect. Closing the window does not delete the blank profile you created.
|
|
32
|
+
- The profile name identifies the model profile in the interface and is not sent to the model service. It cannot be empty or duplicate an existing name (case-insensitive). Names can contain Chinese characters, spaces, letters, numbers, and common symbols.
|
|
33
|
+
- A profile with missing required information, such as the model ID or token limits, does not appear in the model selection list.
|
|
34
|
+
- With "Streaming" on, the reply appears as the model writes it. A long reply can take longer than "HTTP Read Timeout (s)" as long as the model service keeps sending it; the timeout applies only when the service stops sending for that long. Profiles that an earlier iCode version saved with "Streaming" unchecked now stream too; to turn it off, uncheck "Streaming" and save again. If you go back to an earlier iCode version, it treats profiles that this version saved with "Streaming" on as not streaming.
|
|
35
|
+
- With "Vision Model" on, images are sent to the model in PNG, JPEG, GIF, or WebP format. An image a tool returns in another format is sent as a short note that the image was left out, and the conversation continues.
|
|
36
|
+
- If no usable model profile existed before, the new profile automatically becomes the current model profile after you save it and close the window. If another model profile is already in use, saving a new profile does not automatically switch models.
|
|
37
|
+
- To set reasoning effort, prompt caching, or other request fields, use "Chat Options" in the "Extra Options" section. See [Chat Options](./chat-options.md), which also lists settings for common model services. When a save makes a profile a Claude profile on the Anthropic protocol without a cache setting, iCode offers to add one.
|
|
38
|
+
|
|
39
|
+
### Provide an API key through an environment variable
|
|
40
|
+
|
|
41
|
+
An API key entered directly is saved locally in the model profile file.
|
|
42
|
+
|
|
43
|
+
To read the key from an environment variable, enter the following in the "API Key" field:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
{{PROVIDER_API_KEY}}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Replace `PROVIDER_API_KEY` with the name of the environment variable that holds the key. Make sure the variable is set before starting iCode. Environment variable names can contain only letters, numbers, and underscores, and cannot start with a number.
|
|
50
|
+
|
|
51
|
+
### Clone a model profile
|
|
52
|
+
|
|
53
|
+
Clone an existing profile when you need another profile with mostly the same parameters. For example, you might use a different model ID from the same provider, or set different context and output limits for the same model.
|
|
54
|
+
|
|
55
|
+
1. Select the model profile to copy in the list on the left.
|
|
56
|
+
2. Click "Clone".
|
|
57
|
+
3. iCode creates and selects a copy containing all fields from the original profile, and generates a unique name for it.
|
|
58
|
+
4. Edit the profile name and any fields you want to change.
|
|
59
|
+
5. Click "Save".
|
|
60
|
+
|
|
61
|
+
Clicking "Clone" saves the copy immediately, but does not switch the current model to the copy.
|
|
62
|
+
|
|
63
|
+
### Edit a model profile
|
|
64
|
+
|
|
65
|
+
1. Select a model profile in the list on the left.
|
|
66
|
+
2. Edit the fields you want to change.
|
|
67
|
+
3. Click "Save".
|
|
68
|
+
|
|
69
|
+
If you edit the model profile currently in use, the updated configuration applies to subsequent requests after you save it and close the configuration window.
|
|
70
|
+
|
|
71
|
+
### Claude thinking settings
|
|
72
|
+
|
|
73
|
+
Claude Opus 5.5, Fable 5.1 and Sonnet 5.5 tie the thinking they return to the conversation before it. When that earlier conversation changes, for example after iCode compacts the context, the model service may refuse to read that thinking back. When one of these models uses adaptive thinking (`"thinking": {"type": "adaptive"}` in ["Chat Options"](./chat-options.md#anthropic)) at Anthropic's own address, iCode asks the service to leave out thinking that no longer matches instead of refusing the request. The model then sees less of its earlier reasoning, but the request goes through. On accounts where the service would not otherwise check this, the request makes it check, so such thinking is left out there too.
|
|
74
|
+
|
|
75
|
+
To change this, open the profile's file in the `models` folder of the iCode configuration directory (`~/.chrys/models/` on macOS and Linux, `%APPDATA%\chrys\models\` on Windows; the file's `name:` line shows the profile name), add a `thinking_block_binding` line with one of these values, and restart iCode:
|
|
76
|
+
|
|
77
|
+
| Value | What iCode asks the service |
|
|
78
|
+
| --- | --- |
|
|
79
|
+
| `auto` (default) | As described above. |
|
|
80
|
+
| `drop_block` | To leave out thinking that no longer matches, at any address and with any model, when thinking is adaptive or has a fixed budget. |
|
|
81
|
+
| `error` | To refuse a request with thinking that no longer matches, at any address and with any model, when thinking is adaptive or has a fixed budget. |
|
|
82
|
+
| `off` | Nothing. A `block_binding` you write into `thinking` in "Chat Options" is still sent as written. |
|
|
83
|
+
|
|
84
|
+
If the service still refuses a request because of thinking that no longer matches, iCode sends the request once more without the earlier thinking it read back, and doesn't send that thinking again. This costs one extra request, and the model no longer sees that earlier reasoning. With `error`, iCode reports the refusal instead.
|
|
85
|
+
|
|
86
|
+
With fixed-budget thinking (`"type": "enabled"`) at Anthropic's own address, iCode also turns on thinking between tool calls, except on Claude Haiku 4.5 and Claude Opus 4.6, which don't support it in that mode. To turn this off, add the line `auto_interleaved_thinking: false`.
|
|
87
|
+
|
|
88
|
+
Saving the profile in the "Model Configuration" window keeps these lines.
|
|
89
|
+
|
|
90
|
+
### Delete a model profile
|
|
91
|
+
|
|
92
|
+
Deleting a profile removes its local model profile file and **cannot be undone in iCode**. Once you are sure you no longer need the profile:
|
|
93
|
+
|
|
94
|
+
1. Open the "Model Configuration" window.
|
|
95
|
+
2. Select the profile to delete in the list on the left.
|
|
96
|
+
3. Click "Delete".
|
|
97
|
+
4. In the confirmation window, check the profile name again, then click "Delete".
|
|
98
|
+
|
|
99
|
+
iCode keeps at least one model profile, so "Delete" is unavailable when only one remains. If you delete the profile currently in use, iCode automatically switches to another selectable profile after you close the configuration window.
|
|
100
|
+
|
|
101
|
+
## Switch and verify model profiles
|
|
102
|
+
|
|
103
|
+
### Switch the current model profile
|
|
104
|
+
|
|
105
|
+
You can switch model profiles by clicking the model profile name or using the input field.
|
|
106
|
+
|
|
107
|
+
To switch by clicking the model profile name:
|
|
108
|
+
|
|
109
|
+
1. Click the model profile name in the status bar above the input field to open the model selection window.
|
|
110
|
+
2. Click a model profile, or select one with the Up and Down arrow keys and press Enter to confirm.
|
|
111
|
+
|
|
112
|
+
To switch quickly from the input field:
|
|
113
|
+
|
|
114
|
+
1. Enter `$` in the input field. The model profile list appears above it.
|
|
115
|
+
2. Continue typing the profile name to filter the results.
|
|
116
|
+
3. Use the Up and Down arrow keys to select a model profile, then press Enter to confirm.
|
|
117
|
+
|
|
118
|
+
After switching, the status bar shows the new model profile name. The profile currently in use appears in gray in the list, with a hollow circle before its name. Profiles with missing required fields do not appear in the list.
|
|
119
|
+
|
|
120
|
+
The conversation continues with the new profile. Some model services return the model's reasoning in a form only that service can read back, such as Claude's thinking or OpenAI's encrypted reasoning. If the new profile sends requests to a different service address, iCode leaves that earlier reasoning out of its requests. Your messages, the model's replies and the results of tools iCode ran are still sent; results of tools the model service ran itself in the same step may be left out too. Switch back to a profile with the original address, and that reasoning is sent again. Reasoning saved by earlier iCode versions is still sent as before.
|
|
121
|
+
|
|
122
|
+
If the model profile name in the status bar is grayed out, the current agent is bound to a specific model profile, and clicking it only shows a notice about the binding. In this case, entering `$` does not display the model profile list either. You must first [change the agent's model settings](./agents.md#set-the-model-an-agent-uses) before you can switch model profiles. You also cannot switch while the agent is running.
|
|
123
|
+
|
|
124
|
+
### Verify a model profile
|
|
125
|
+
|
|
126
|
+
After switching models, submit the following in the input field:
|
|
127
|
+
|
|
128
|
+
```text
|
|
129
|
+
Hello
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
iCode should respond with a greeting. If the model service returns an error, first check the model ID, base URL, API key, and other model profile settings.
|
|
133
|
+
|
|
134
|
+
If the error persists, compare the symptoms against the following cases:
|
|
135
|
+
|
|
136
|
+
- **The error message contains `The Chat Completions client supports only n=1`**: With the Chat Completions style, iCode processes only one response per request and does not support multiple candidate responses, so the `n` parameter must be omitted or set to the integer `1`. Remove the value or set it to `1` in the profile's ["Chat Options"](./chat-options.md), including when it was set indirectly through `extra_body`.
|
|
137
|
+
- **The response has an `HTTP 200` status but is not a valid model reply**: for example a `text/html` Content-Type with an error page, an error JSON body, or an empty body. This means a gateway or proxy wrapped a backend error as a successful response; check that the selected API style matches the model service address, and review the proxy route.
|
|
138
|
+
- **The model service's content filter stopped the reply**: iCode does not retry the request, and it does not run any tools that a filtered or refused reply asked for. Rephrase the request.
|
|
139
|
+
- **With the Responses style, the model service reports that the reply failed**: iCode shows the service's error. It retries only errors that may pass on another attempt, such as a server error or a rate limit; it does not retry a request the service rejects, such as one with an image it can't read or one over the account's quota. A streamed reply that stops before it is finished is retried the same way. A request over the context window is the exception: see [If iCode can't reach the model service](#if-icode-cant-reach-the-model-service). iCode does not retry when the service already ran a tool that may have changed something for the failed reply, such as an MCP call, so that the tool does not run twice. If a service never says whether a streamed reply is finished, iCode keeps what it received and writes a warning to the log.
|
|
140
|
+
- **With the Anthropic protocol, a streamed reply stops before it is finished**: iCode retries the request and does not run the tools that the interrupted reply asked for. As with the Responses style, it does not retry when the service already ran a tool that may have changed something, such as an MCP call.
|
|
141
|
+
- **Streamed replies sometimes stop partway without an error**: some services using the Chat Completions style end a stream without saying that the reply is finished. iCode keeps such a reply. To have iCode treat it as an interrupted reply and retry, open the profile's file in the `models` folder of the iCode configuration directory (`~/.chrys/models/` on macOS and Linux, `%APPDATA%\chrys\models\` on Windows; the file's `name:` line shows the profile name), add the line `stream_requires_finish_reason: true`, and restart iCode. Saving the profile in the "Model Configuration" window keeps this line.
|
|
142
|
+
- **Requests fail with "Streaming" on, and the model service or gateway doesn't support streaming**: uncheck "Streaming" in the model profile and save. If you edit the profile's file instead, add the line `stream: false` and restart iCode. Turning streaming off helps only when the service can't stream.
|
|
143
|
+
|
|
144
|
+
### If iCode can't reach the model service
|
|
145
|
+
|
|
146
|
+
When iCode can tell why a model request failed, it says so in plain words, with the original error text below it; a paused sub-agent's card shows both as well. While iCode retries, the retry notice shows only the plain-words message. If the device running iCode doesn't seem to have a network connection, iCode says so as well; check that first.
|
|
147
|
+
|
|
148
|
+
| The message says | What to check |
|
|
149
|
+
| --- | --- |
|
|
150
|
+
| Can't resolve the address | Your network connection and DNS. If the address is wrong, fix the base URL in the model profile. |
|
|
151
|
+
| The host refused the connection | The address and port in the base URL, and that the model service is running. |
|
|
152
|
+
| Connecting or waiting for a response timed out | Your network, firewall, or VPN. |
|
|
153
|
+
| Can't connect to the proxy | That the proxy is running and set up correctly. To connect without the proxy, turn on **Bypass proxy** in the model profile. |
|
|
154
|
+
| The proxy requires authentication | The proxy's user name and password. |
|
|
155
|
+
| Couldn't establish a secure connection | On a corporate network, the proxy's certificate setup. |
|
|
156
|
+
| The API key is invalid or lacks access | The API key in the model profile. |
|
|
157
|
+
| The request exceeds the model's context window | That the context window in the model profile matches the model's real one. With context compaction on, iCode compacts the context and sends the request once more; this error appears only if that also fails. See [Configure context compaction](./compaction.md). |
|
|
158
|
+
| The model profile's maximum context window is larger than the server's limit | Set "Max Context Window" in the model profile to the server's limit that the message names, or less, and save. |
|