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,177 @@
|
|
|
1
|
+
# OpenTelemetry reference
|
|
2
|
+
|
|
3
|
+
iCode can use OpenTelemetry to record the following telemetry data during agent runs:
|
|
4
|
+
|
|
5
|
+
- **Traces**: record the start and end times, parent-child relationships, and errors of operations such as agent runs, model requests, and tool calls, helping you inspect the call sequence and identify where time is spent.
|
|
6
|
+
- **Logs**: record the time, level, and details of individual events, such as successful tool calls, runtime warnings, or errors. When call context is available, logs can be correlated with the corresponding traces.
|
|
7
|
+
- **Metrics**: record numerical values such as model request duration, input and output token counts, and tool call duration, helping you summarize usage, duration distributions, and trends.
|
|
8
|
+
|
|
9
|
+
A collector is a service that receives telemetry data. iCode sends data to a collector using the OpenTelemetry Protocol (OTLP). On this page, an “endpoint” is the address where the collector receives telemetry data.
|
|
10
|
+
|
|
11
|
+
This page covers iCode OpenTelemetry configuration, local storage and export of telemetry data, and connections to OTLP collectors.
|
|
12
|
+
|
|
13
|
+
## Enabling telemetry and choosing a destination
|
|
14
|
+
|
|
15
|
+
### Enablement settings
|
|
16
|
+
|
|
17
|
+
OpenTelemetry is disabled by default. Enable it under [Settings → Security → Telemetry](../guides/configuration/settings.md#telemetry) in the terminal user interface (TUI), or use the following environment variables. **All settings on this page take effect after restarting iCode.**
|
|
18
|
+
|
|
19
|
+
| Environment variable | Default | Purpose |
|
|
20
|
+
| --- | --- | --- |
|
|
21
|
+
| `CHRYS_OTEL` | `false` | Enable OpenTelemetry export |
|
|
22
|
+
| `CHRYS_OTEL_ENDPOINT` | Empty | Set the collector endpoint; corresponds to “Telemetry endpoint” in the TUI |
|
|
23
|
+
| `CHRYS_OTEL_SENSITIVE_DATA` | `false` | Include sensitive content such as prompts, model responses, and tool arguments in telemetry |
|
|
24
|
+
|
|
25
|
+
Boolean values accept `1`, `true`, `yes`, and `on` (enabled), or `0`, `false`, `no`, and `off` (disabled), case-insensitively.
|
|
26
|
+
|
|
27
|
+
Settings changed in the TUI are saved in the user settings file, `settings.yaml`. When the environment variables above are set to valid values:
|
|
28
|
+
|
|
29
|
+
- Environment variables take precedence over the corresponding file settings without modifying the file.
|
|
30
|
+
- The TUI displays the values specified by the environment variables and disables editing of the corresponding settings.
|
|
31
|
+
|
|
32
|
+
When `CHRYS_OTEL` or “OpenTelemetry export” in the TUI is disabled, iCode neither saves nor sends telemetry data, even if an endpoint or sensitive data option is configured.
|
|
33
|
+
|
|
34
|
+
### Data destinations
|
|
35
|
+
|
|
36
|
+
When OpenTelemetry is enabled without any collector endpoint configured, traces and logs are saved locally. Configuring a collector endpoint switches to remote export.
|
|
37
|
+
|
|
38
|
+
Traces, logs, and metrics can share a receiving address or use separate addresses. [Endpoint precedence](#endpoint-precedence) determines which address each data type uses. Data destinations are as follows:
|
|
39
|
+
|
|
40
|
+
| Data type | Local storage | Remote export (a receiving address is configured for this data type) |
|
|
41
|
+
| --- | --- | --- |
|
|
42
|
+
| Traces | `otel/traces.jsonl` in the current session folder | Sent to the collector |
|
|
43
|
+
| Logs | `otel/logs.jsonl` in the current session folder | Sent to the collector |
|
|
44
|
+
| Metrics | Not saved | Sent to the collector |
|
|
45
|
+
|
|
46
|
+
Local files are created when the corresponding records are produced. For the session folder location, see [Find the session ID and storage location](../guides/daily-use/sessions.md#find-the-session-id-and-storage-location).
|
|
47
|
+
|
|
48
|
+
After you configure any collector endpoint and restart iCode, iCode stops saving telemetry data locally. Failed remote exports do not fall back to local storage, so the affected data may be lost.
|
|
49
|
+
|
|
50
|
+
Whether the receiving service saves data, and how long it retains it, depends on its configuration.
|
|
51
|
+
|
|
52
|
+
## Sensitive data
|
|
53
|
+
|
|
54
|
+
Enabling “Include sensitive data in telemetry” or setting `CHRYS_OTEL_SENSITIVE_DATA=true` may include prompts, model responses, tool arguments, and tool results in traces and logs. This content may contain file contents, credentials, or other private information. The setting affects both local storage and remote export.
|
|
55
|
+
|
|
56
|
+
**When sensitive data is enabled, tool call duration metrics also carry tool arguments.** These arguments may therefore be sent to the collector even if you export only metrics.
|
|
57
|
+
|
|
58
|
+
Before enabling this option, confirm the data storage location, access permissions, and retention policy. Disabling it does not delete records that have already been saved or sent.
|
|
59
|
+
|
|
60
|
+
## Connecting to a collector
|
|
61
|
+
|
|
62
|
+
Remote export requires a running OTLP collector that accepts OTLP/gRPC. Use the endpoint and authentication information provided by the collector when configuring the connection.
|
|
63
|
+
|
|
64
|
+
The standard `OTEL_*` variables below can also be set in a `.env` file in the working directory or in the user `.env` file (macOS / Linux: `~/.chrys/.env`; Windows: `%APPDATA%\chrys\.env`). At startup, values from these files replace variables of the same name exported in the shell.
|
|
65
|
+
|
|
66
|
+
### Endpoint precedence
|
|
67
|
+
|
|
68
|
+
The address shared by all three data types is called the **base endpoint**. Configure it through “Telemetry endpoint” in the TUI, `CHRYS_OTEL_ENDPOINT`, or the standard environment variable `OTEL_EXPORTER_OTLP_ENDPOINT`.
|
|
69
|
+
|
|
70
|
+
To specify separate receiving addresses, set the following **signal-specific endpoints**. A signal-specific endpoint overrides the base endpoint only for its corresponding data type:
|
|
71
|
+
|
|
72
|
+
| Data type | Signal-specific endpoint environment variable |
|
|
73
|
+
| --- | --- |
|
|
74
|
+
| Traces | `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` |
|
|
75
|
+
| Logs | `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` |
|
|
76
|
+
| Metrics | `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` |
|
|
77
|
+
|
|
78
|
+
When multiple settings are present, each data type uses the first nonempty endpoint in this order:
|
|
79
|
+
|
|
80
|
+
1. The signal-specific endpoint environment variable for that data type.
|
|
81
|
+
2. The general environment variable `OTEL_EXPORTER_OTLP_ENDPOINT`.
|
|
82
|
+
3. `CHRYS_OTEL_ENDPOINT`.
|
|
83
|
+
4. “Telemetry endpoint” saved in the TUI.
|
|
84
|
+
|
|
85
|
+
If no base endpoint is configured and only one signal-specific endpoint is set, only that data type is exported. For example, setting only `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` sends only traces; logs and metrics are neither sent nor saved locally.
|
|
86
|
+
|
|
87
|
+
Standard `OTEL_EXPORTER_OTLP_*` environment variables do not appear in “Telemetry endpoint” in the TUI. If data still goes to the old address after you change the endpoint in the TUI, check for standard environment variables with higher precedence.
|
|
88
|
+
|
|
89
|
+
### Protocol and address format
|
|
90
|
+
|
|
91
|
+
iCode sends data over OTLP/gRPC and uses the configured endpoint addresses directly. Leave `OTEL_EXPORTER_OTLP_PROTOCOL` unset or set it to `grpc`. iCode installations do not include the OTLP HTTP exporter: with `http/protobuf` (or `http`), OpenTelemetry setup fails and iCode records no telemetry at all, not even locally; any other value exports nothing.
|
|
92
|
+
|
|
93
|
+
Include the scheme in the endpoint address: `http://` uses an unencrypted connection, suitable for a local collector; `https://` uses TLS. When connecting to a remote collector, use `https://` and configure authentication as required by the service.
|
|
94
|
+
|
|
95
|
+
### Authentication headers
|
|
96
|
+
|
|
97
|
+
If the collector requires authentication through request headers, use the following environment variables:
|
|
98
|
+
|
|
99
|
+
| Environment variable | Scope |
|
|
100
|
+
| --- | --- |
|
|
101
|
+
| `OTEL_EXPORTER_OTLP_HEADERS` | All data types |
|
|
102
|
+
| `OTEL_EXPORTER_OTLP_TRACES_HEADERS` | Traces |
|
|
103
|
+
| `OTEL_EXPORTER_OTLP_LOGS_HEADERS` | Logs |
|
|
104
|
+
| `OTEL_EXPORTER_OTLP_METRICS_HEADERS` | Metrics |
|
|
105
|
+
|
|
106
|
+
Headers use comma-separated `name=value` pairs. Use lowercase header names, because gRPC rejects uppercase ones; values are sent as written, without URL decoding. For example:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
export OTEL_EXPORTER_OTLP_HEADERS="authorization=Bearer <token>"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Replace `<token>` with the token provided by the collector, and set it before starting iCode.
|
|
113
|
+
|
|
114
|
+
Signal-specific headers are merged with general headers. When both define a header with the same name, the signal-specific value takes precedence.
|
|
115
|
+
|
|
116
|
+
### Local connection example
|
|
117
|
+
|
|
118
|
+
Suppose a local collector accepts OTLP gRPC requests at `http://localhost:4317`, requires no authentication, and no other standard endpoint environment variables are set. Run the following in Bash or Zsh:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
export CHRYS_OTEL=true
|
|
122
|
+
export CHRYS_OTEL_ENDPOINT=http://localhost:4317
|
|
123
|
+
icode
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
This configuration sends traces, logs, and metrics to `http://localhost:4317` over an unencrypted gRPC connection.
|
|
127
|
+
|
|
128
|
+
## Viewing data at the receiving service
|
|
129
|
+
|
|
130
|
+
### Service identity
|
|
131
|
+
|
|
132
|
+
The default service name (`service.name`) is `chrys`, and the service version is the currently installed iCode version. Use the service name to find data in the collector or its connected observability platform.
|
|
133
|
+
|
|
134
|
+
If iCode instances running in multiple locations send data to the same collector, use service names and resource attributes to distinguish their sources. Resource attributes are labels attached to telemetry data, such as the runtime environment and instance name.
|
|
135
|
+
|
|
136
|
+
For example, when running an iCode instance in a test environment, set the following in Bash or Zsh:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
export OTEL_SERVICE_NAME=icode-test
|
|
140
|
+
export OTEL_RESOURCE_ATTRIBUTES="deployment.environment.name=staging,service.instance.id=test-01"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
After you start iCode in the same terminal, exported data carries the following identifiers, which you can use to filter it in the observability platform:
|
|
144
|
+
|
|
145
|
+
| Attribute | Example value | Meaning |
|
|
146
|
+
| --- | --- | --- |
|
|
147
|
+
| `service.name` | `icode-test` | Service name |
|
|
148
|
+
| `deployment.environment.name` | `staging` | Runtime environment; here, a test environment |
|
|
149
|
+
| `service.instance.id` | `test-01` | Instance name, used to distinguish multiple iCode instances in the same environment |
|
|
150
|
+
|
|
151
|
+
`OTEL_RESOURCE_ATTRIBUTES` accepts multiple comma-separated `name=value` pairs. These attributes override default attributes with the same names. A `service.name` attribute also overrides `OTEL_SERVICE_NAME`.
|
|
152
|
+
|
|
153
|
+
For example, setting `OTEL_SERVICE_NAME=icode-test` together with `OTEL_RESOURCE_ATTRIBUTES="service.name=icode-qa"` results in the service name `icode-qa`.
|
|
154
|
+
|
|
155
|
+
### Metrics and verification
|
|
156
|
+
|
|
157
|
+
When a metrics endpoint is configured (including one inherited from the base endpoint), iCode attempts to export the following metrics every 5 seconds:
|
|
158
|
+
|
|
159
|
+
| Metric | Unit | Measurement |
|
|
160
|
+
| --- | --- | --- |
|
|
161
|
+
| `gen_ai.client.operation.duration` | Seconds | Model request duration |
|
|
162
|
+
| `gen_ai.client.token.usage` | Tokens | Input and output token counts for model requests, recorded separately |
|
|
163
|
+
| `chrys.function.invocation.duration` | Seconds | Tool call duration |
|
|
164
|
+
|
|
165
|
+
iCode automatically adds the `gen_ai.token.type` label to token usage. When querying `gen_ai.client.token.usage` in the observability platform:
|
|
166
|
+
|
|
167
|
+
- Filter by `gen_ai.token.type=input` to view input token usage.
|
|
168
|
+
- Filter by `gen_ai.token.type=output` to view output token usage.
|
|
169
|
+
- Group by `gen_ai.token.type` to display both types of usage together.
|
|
170
|
+
|
|
171
|
+
With OpenTelemetry enabled and a receiving address configured for metrics, submit a request that triggers a model request or tool call. Then query the metrics above at the receiving service to confirm that data was exported successfully. Token usage is recorded only when the model response provides the corresponding statistics.
|
|
172
|
+
|
|
173
|
+
If no data arrives, check the following in order:
|
|
174
|
+
|
|
175
|
+
1. OpenTelemetry is enabled, and iCode was restarted after the configuration changed.
|
|
176
|
+
2. The collector accepts OTLP/gRPC at the endpoint, `OTEL_EXPORTER_OTLP_PROTOCOL` is unset or `grpc`, and no endpoint setting with higher precedence is present.
|
|
177
|
+
3. Whether the collector requires authentication, and whether the authentication headers are configured correctly.
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# iCode settings file reference
|
|
2
|
+
|
|
3
|
+
`settings.yaml` stores iCode interface preferences, the default agent, and session and tool settings. This page lists common settings by purpose and explains file locations and format, how to write values, precedence when multiple sources are present, and which settings project files can override.
|
|
4
|
+
|
|
5
|
+
For steps to change settings in the terminal user interface (TUI) and when those changes take effect, see [Configure iCode settings](../guides/configuration/settings.md).
|
|
6
|
+
|
|
7
|
+
## File locations and format
|
|
8
|
+
|
|
9
|
+
| Configuration source | macOS / Linux | Windows | Purpose |
|
|
10
|
+
| --- | --- | --- | --- |
|
|
11
|
+
| User settings | `~/.chrys/settings.yaml` | `%APPDATA%\chrys\settings.yaml` | Store personal settings; the TUI Settings dialog writes to this file |
|
|
12
|
+
| Project settings | `.chrys/settings.yaml` in the working directory | Same as macOS / Linux | Override some settings for that working directory; not loaded by default |
|
|
13
|
+
|
|
14
|
+
iCode looks for `.chrys/settings.yaml` only in the current session's working directory. It does not search parent directories or subdirectories.
|
|
15
|
+
|
|
16
|
+
The file uses YAML. Dots in key names represent nesting. For example, write `llm.retry.max_transient` as:
|
|
17
|
+
|
|
18
|
+
```yaml
|
|
19
|
+
llm:
|
|
20
|
+
retry:
|
|
21
|
+
max_transient: 3
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
After editing the settings file manually, save it and restart iCode for the changes to take effect.
|
|
25
|
+
|
|
26
|
+
## Settings keys
|
|
27
|
+
|
|
28
|
+
In the tables, “None” means there is no corresponding environment variable, and “Unset” means the key has no saved value (it is omitted or left empty). For general rules on writing values and handling invalid values, see [Value syntax and invalid values](#value-syntax-and-invalid-values).
|
|
29
|
+
|
|
30
|
+
### Interface and input
|
|
31
|
+
|
|
32
|
+
| YAML key | Environment variable | Default | Type, values, and effect |
|
|
33
|
+
| --- | --- | --- | --- |
|
|
34
|
+
| `ui.theme` | `CHRYS_THEME` | `chrys` | String; use a theme name from the TUI theme list (press **F9** to open it). The retired name `chrys-dark` is read as `chrys`; other unknown names fall back to the default theme |
|
|
35
|
+
| `ui.locale` | `CHRYS_LOCALE` | `system` | String; `system` follows the system language. You can also set `en` or `zh-Hans`. Unsupported languages fall back to English; this does not change the language of model responses |
|
|
36
|
+
| `ui.editor.keymap` | `CHRYS_EDITOR_KEYMAP` | `standard` | String; `standard`, `emacs`, or `vim` selects the input editor's key bindings |
|
|
37
|
+
| `ui.chat.tool_groups_expanded` | None | `false` | Boolean; whether newly displayed tool groups expand their details by default |
|
|
38
|
+
| `ui.chat.file_snapshot_inline_chars` | `CHRYS_TUI_FILE_SNAPSHOT_INLINE_CHARS` | `131072` | Integer; limits the before-and-after file content loaded directly with a file edit card, measured by their combined byte size. Within the limit, content loads with the card and the header shows the exact numbers of added and deleted lines. Above the limit, if snapshot references are available, content is read only when the diff is expanded, and the header does not show exact line counts. `0` or a negative value sets the limit to zero; inline content may still be retained when no snapshot references are available. This setting controls only how the card loads content; `mutations.snapshot.max_file_mb` and `mutations.snapshot.skip_binary` determine whether file content is backed up |
|
|
39
|
+
| `history.prompt.enabled` | `CHRYS_HISTORY_DISABLE` | `true` | Boolean; save and read input history across sessions. Disabling it does not delete existing records. The environment variable has the opposite meaning: only the exact value `1` disables history; other values do not |
|
|
40
|
+
| `workspace.mru_max_entries` | `CHRYS_WORKSPACE_MRU_MAX_ENTRIES` | `20` | Integer; maximum number of recently used working directories to retain, capped at `100`. `0` or a negative value disables recording |
|
|
41
|
+
|
|
42
|
+
### Agents, models, and requests
|
|
43
|
+
|
|
44
|
+
Model role keys take the ID or unique name of an existing model profile. Buddy does not select a model profile: its key takes the model name used by the model service (`model_id`).
|
|
45
|
+
|
|
46
|
+
| YAML key | Environment variable | Default | Type, values, and effect |
|
|
47
|
+
| --- | --- | --- | --- |
|
|
48
|
+
| `agent.default_profile` | `CHRYS_DEFAULT_AGENT` | `Code` | String; the default agent the next time the TUI starts. Does not switch the current session's agent; an explicit `--agent` takes precedence |
|
|
49
|
+
| `model.profile.active` | `CHRYS_MODEL_PROFILE` | Unset | String; select an existing model profile as the fallback when the agent has no valid `model.profile_id`. An explicit `--model` takes precedence over this key but still serves as a fallback; explicitly switching models in an ACP session takes precedence over the model specified by the agent |
|
|
50
|
+
| `model.role.approval_judge` | `CHRYS_MODEL_PROFILE_APPROVAL_JUDGE` | Unset | String; the model profile used for automatic approval. Uses the current model when unset |
|
|
51
|
+
| `model.role.session_title` | `CHRYS_MODEL_PROFILE_SESSION_TITLE` | Unset | String; the model profile used to generate session titles automatically. Uses the current model when unset |
|
|
52
|
+
| `model.role.buddy_model_id` | `CHRYS_PET_MODEL` | Unset | String; the model used by Buddy, using the current model profile's connection. Uses the current model when unset |
|
|
53
|
+
| `llm.retry.max_transient` | `CHRYS_MAX_TRANSIENT_RETRIES` | `null` | Integer or `null`; `null` uses the default retry count for the launch command: `10` for the TUI (including `icode serve`) and `icode acp`, or `18` for `icode run` and `icode workflow run`. The wait before each retry grows, up to 10 minutes. `0` disables automatic retries for transient errors; negative values are invalid; capped at `50` |
|
|
54
|
+
|
|
55
|
+
Transient error retries handle recoverable errors such as temporary network failures, request timeouts, and rate limits. Raising the count also increases the wait and number of requests before a final failure. This number is not the total number of model requests for the entire task.
|
|
56
|
+
|
|
57
|
+
### Approval and project trust
|
|
58
|
+
|
|
59
|
+
The `approval` keys control approval behavior when an agent requests an operation. For the differences between the three modes and configuration steps, see [Configure approval modes](../guides/configuration/approval.md).
|
|
60
|
+
|
|
61
|
+
| YAML key | Environment variable | Default | Type, values, and effect |
|
|
62
|
+
| --- | --- | --- | --- |
|
|
63
|
+
| `approval.default_mode` | `CHRYS_DEFAULT_APPROVAL_MODE` | `manual` | String; `manual` for manual approval, `auto` for automatic approval, or `bypass` to bypass approval. Setting the default mode does not switch the current session's mode |
|
|
64
|
+
| `ui.approval.defer_while_judging` | None | `true` | Boolean; in automatic mode, whether the TUI opens the approval dialog only when the approval judge model flags a call or evaluation fails. `false` opens it at once while the call is evaluated. The ACP server and `icode run` ignore it |
|
|
65
|
+
| `project.config_enabled` | None | `false` | Boolean; whether to load project settings for each working directory. Must be enabled in user settings |
|
|
66
|
+
| `project.hooks_enabled` | None | `false` | Boolean; whether to load project hooks from `.chrys/hooks` in the working directory. Must be enabled in user settings. Does not affect user-level hooks |
|
|
67
|
+
| `project.skills_enabled` | None | `false` | Boolean; whether to load project skills from `.agents/skills` in the working directory. Must be enabled in user settings. The agent's own “Load skills from working folder” option must also stay on |
|
|
68
|
+
|
|
69
|
+
If you manually set the default approval mode to `bypass` in YAML or an environment variable, approval is bypassed the next time iCode starts with that default. When you switch to `bypass` with `/approval` in the TUI, iCode saves `auto` as the default mode; the TUI Settings dialog does not offer `bypass`.
|
|
70
|
+
|
|
71
|
+
Project settings, project hooks, and project skills come from the repository you open, so all three are off by default and each is turned on separately: enabling one does not enable the others. When the working directory has any of them that are off, iCode shows a notice naming the setting to turn on. Hooks are external commands that iCode runs on specific events; for authoring and configuration, see [Configure and write hooks](../guides/extensions/hooks.md). For skills, see [Install and use skills](../guides/extensions/skills.md).
|
|
72
|
+
|
|
73
|
+
### Sessions and file recovery
|
|
74
|
+
|
|
75
|
+
| YAML key | Environment variable | Default | Type, values, and effect |
|
|
76
|
+
| --- | --- | --- | --- |
|
|
77
|
+
| `session.title.auto` | `CHRYS_SESSION_TITLE_AUTO` | `true` | Boolean; automatically generate session titles through additional model requests. Once you set a title manually, that session's title is no longer updated automatically |
|
|
78
|
+
| `storage.session_root_dir` | `CHRYS_SESSION_ROOT_DIR` | Unset | Path string; defaults to the user configuration directory. Sessions are stored in a `sessions` subdirectory under this root. Supports `~`; an absolute path is recommended |
|
|
79
|
+
| `rollback.snapshots_keep` | `CHRYS_ROLLBACK_SNAPSHOTS_KEEP` | `20` | Integer; number of rollback snapshots to retain per session, with a minimum of `1`. Older snapshots are deleted when the limit is exceeded |
|
|
80
|
+
| `mutations.snapshot.max_file_mb` | `CHRYS_MUTATION_SNAPSHOT_MAX_FILE_MB` | `50` | Integer; maximum size of an individual file backup, in MiB. `0` or a negative value removes the size limit. Files above the limit are still recorded as changed, but their content is not backed up, so that record cannot be used to display a diff or restore the file |
|
|
81
|
+
| `mutations.snapshot.skip_binary` | `CHRYS_MUTATION_SNAPSHOT_SKIP_BINARY` | `true` | Boolean; whether to skip backing up binary file content. When set to `false`, the per-file size limit still applies |
|
|
82
|
+
|
|
83
|
+
Changing the session storage root does not automatically move existing sessions. If the specified directory is unavailable, iCode reports it and falls back to the default location. For migration steps, see [Move session storage](../guides/daily-use/sessions.md#migrate-session-storage).
|
|
84
|
+
|
|
85
|
+
### Tools and working directory changes
|
|
86
|
+
|
|
87
|
+
| YAML key | Environment variable | Default | Type, values, and effect |
|
|
88
|
+
| --- | --- | --- | --- |
|
|
89
|
+
| `tools.search.respect_gitignore` | None | `true` | Boolean; apply `.gitignore` rules to grep and glob searches. When `false`, hidden paths are still skipped and other ignore files such as `.ignore` still apply |
|
|
90
|
+
| `tools.ask_user.inline` | `CHRYS_ASK_USER_INLINE` | `false` | Boolean; show agent questions in the TUI conversation instead of a dialog |
|
|
91
|
+
| `tools.ask_user.timeout_seconds` | `CHRYS_ASK_USER_TIMEOUT_SECONDS` | `900` | Integer or `null`; seconds to wait for an answer. On timeout, a timeout result is returned to the agent. `0`, a negative value, or `null` in user YAML means wait indefinitely |
|
|
92
|
+
| `tools.result.ceiling_tokens` | `CHRYS_TOOL_RESULT_CEILING_TOKENS` | `64000` | Integer; final length limit for a single tool result before it is passed to the model, in tokens. `0` disables this limit; positive values have a minimum of `2000`; negative values are invalid |
|
|
93
|
+
| `workspace.change_notice.enabled` | `CHRYS_WORKSPACE_CHANGE_NOTICE` | `true` | Boolean; when processing a new prompt, give the agent a summary of working directory file changes since the previous prompt was submitted, including changes made by the agent and external changes |
|
|
94
|
+
| `workspace.change_notice.max_entries` | `CHRYS_WORKSPACE_CHANGE_NOTICE_MAX_ENTRIES` | `50` | Integer; maximum number of entries in the change summary, from `1` to `100` |
|
|
95
|
+
| `mutations.parallel_implicit_tools` | `CHRYS_PARALLEL_IMPLICIT_TOOLS` | `true` | Boolean; allow tools that may modify files, such as shell commands and skill scripts, to run in parallel within the same session. Setting this to `false` makes it easier to identify which tool call caused a file change |
|
|
96
|
+
| `mutations.coordination.enabled` | `CHRYS_MUTATION_COORDINATION` | `true` | Boolean; help distinguish file changes made by different iCode sessions sharing a working directory |
|
|
97
|
+
|
|
98
|
+
Tools may also have their own output limits, such as limits on MCP results and skill resources. Setting `tools.result.ceiling_tokens` to `0` does not disable those limits or recover content that a tool has already truncated. Separately from these token limits, shell commands and skill scripts keep at most 32 MiB of each output stream.
|
|
99
|
+
|
|
100
|
+
### Web tools
|
|
101
|
+
|
|
102
|
+
These keys configure the `web_search` and `web_fetch` tools, which are off by default and must also be added to an agent. They have no corresponding environment variables and can be set only in user settings; project settings cannot set them. The TUI **Settings** dialog shows the common keys on the **Tools** tab; set the others in the user `settings.yaml`. For how the tools use these values, see [Configure web tools](../guides/configuration/web-tools.md).
|
|
103
|
+
|
|
104
|
+
Origin lists take exact origins (scheme, host, and optional port, such as `https://docs.example.com`) without paths, queries, credentials, or wildcards. Write a list as a YAML list or as a JSON array string; the TUI saves lists as JSON strings. An empty string is an empty list. In the two mode keys, `true` or an unquoted `on` means `auto` for search and `on` for fetch, and `false` or an unquoted `off` means `off`. Values are checked with the same rules the tools use, and an invalid value is reported, with what is wrong, and ignored.
|
|
105
|
+
|
|
106
|
+
| YAML key | Default | Type, values, and effect |
|
|
107
|
+
| --- | --- | --- |
|
|
108
|
+
| `tools.web_search.mode` | `auto` | String; `auto` or `off`. With `auto`, an agent that includes `web_search` and configures no search provider sends queries to Exa's public endpoint `https://mcp.exa.ai/mcp`. `off` turns web search off. The agent profile's `tools.web_search.mode` takes precedence |
|
|
109
|
+
| `tools.web_search.num_results` | `8` | Integer from `1` to `20`; number of results a search returns when the agent does not ask for a number. The agent profile's value takes precedence |
|
|
110
|
+
| `tools.web_search.timeout_seconds` | `30` | Integer from `1` to `120`; deadline in seconds for a whole search call, including time waiting for a free connection. The agent profile's value takes precedence |
|
|
111
|
+
| `tools.web_search.custom_endpoints` | `[]` | List of objects of the form `{"url": "...", "credential_env_names": ["..."]}`; authorizes a `custom_http` search endpoint and the environment variables it may read. Each URL may appear only once |
|
|
112
|
+
| `tools.web_search.private_origins` | `[]` | Origin list; search endpoints that may be reached even though they resolve to private or other non-public addresses |
|
|
113
|
+
| `tools.web_search.http_origins` | `[]` | Origin list; search endpoints that may be reached over plain `http://` |
|
|
114
|
+
| `tools.web_fetch.mode` | `on` | String; `on` or `off`. In `on` mode, `web_fetch` is available to agents that include it; in `off` mode it is not. The agent profile's `tools.web_fetch.mode` takes precedence |
|
|
115
|
+
| `tools.web_fetch.max_tokens` | `16000` | Integer from `1` to `64000`; most tokens a fetched page returns. The agent can ask for less, but not more. The agent profile's value takes precedence |
|
|
116
|
+
| `tools.web_fetch.timeout_seconds` | `60` | Integer from `1` to `120`; deadline in seconds for a whole fetch call. The agent profile's value takes precedence |
|
|
117
|
+
| `tools.web_fetch.private_origins` | `[]` | Origin list; origins `web_fetch` may read even though they resolve to private or other non-public addresses |
|
|
118
|
+
| `tools.web_fetch.http_origins` | `[]` | Origin list; origins `web_fetch` may read over plain `http://` |
|
|
119
|
+
| `tools.web_fetch.allowed_origins` | `[]` | Origin list; when not empty, `web_fetch` reads only from these origins |
|
|
120
|
+
| `tools.web_fetch.denied_origins` | `[]` | Origin list; origins `web_fetch` never reads. Takes precedence over every other list |
|
|
121
|
+
| `tools.web_egress.proxy_url` | Unset | String; an `http://` or `https://` proxy used only by web tools, written as an origin without credentials or a path, such as `http://proxy.example.com:8080`. Web tools ignore `HTTP_PROXY`, `HTTPS_PROXY`, and similar variables |
|
|
122
|
+
| `tools.web_egress.proxy_dns` | `local` | String; `local` or `remote`. With a proxy set, `local` resolves host names on this device and connects only to checked public addresses; `remote` sends the host name to the proxy, which then decides the final address. Has no effect without `proxy_url`. See [Use a fake-IP proxy](../guides/configuration/web-tools.md#use-a-fake-ip-proxy) |
|
|
123
|
+
|
|
124
|
+
Host names in these values may contain underscores.
|
|
125
|
+
|
|
126
|
+
### Context and trajectory analysis
|
|
127
|
+
|
|
128
|
+
The following settings have no corresponding environment variables.
|
|
129
|
+
|
|
130
|
+
| YAML key | Default | Type, values, and effect |
|
|
131
|
+
| --- | --- | --- |
|
|
132
|
+
| `context.warn_threshold_pct` | `0.5` | Number; from `0` to `1`, representing the fraction of the context window in use. When usage reaches the threshold, the agent is told once that context usage is high, and again only after usage has dropped below the threshold and reached it again. The default threshold is 50%; this does not change when automatic compaction is triggered |
|
|
133
|
+
| `trajectory.verify_commands` | Built-in list of common test and check commands | String; comma-separated command terms that trajectory analysis uses to identify verification operations, such as `"pytest,ruff,npm test"`. A custom value replaces the entire list. This affects only analysis categories; it does not run the commands |
|
|
134
|
+
|
|
135
|
+
### Notifications
|
|
136
|
+
|
|
137
|
+
The following keys are all booleans, default to `true`, and have no corresponding environment variables. They control TUI event notifications.
|
|
138
|
+
|
|
139
|
+
| YAML key | Effect |
|
|
140
|
+
| --- | --- |
|
|
141
|
+
| `notifications.enabled` | Master switch for event notifications |
|
|
142
|
+
| `notifications.delivery.desktop` | Show desktop notifications |
|
|
143
|
+
| `notifications.delivery.sound` | Play a sound |
|
|
144
|
+
| `notifications.suppress_when_focused` | Suppress notifications while iCode has focus |
|
|
145
|
+
| `notifications.events.approval_required` | Notify when approval is required |
|
|
146
|
+
| `notifications.events.ask_user` | Notify when the agent needs input |
|
|
147
|
+
| `notifications.events.turn_complete` | Notify when the agent completes a task |
|
|
148
|
+
| `notifications.events.turn_error` | Notify when the agent encounters an error |
|
|
149
|
+
|
|
150
|
+
To send a notification, the master switch, the corresponding event switch, and at least one delivery method must be enabled, and notifications must not be suppressed because iCode has focus. Turning off the master switch does not clear the other choices.
|
|
151
|
+
|
|
152
|
+
### Diagnostics and telemetry
|
|
153
|
+
|
|
154
|
+
**Raw HTTP logs may contain plaintext API keys, full prompts, and model responses.** Enable this only after confirming where the data will go and who can access it. After troubleshooting, turn off diagnostic options you no longer need and restart iCode.
|
|
155
|
+
|
|
156
|
+
| YAML key | Environment variable | Default | Type, values, and effect |
|
|
157
|
+
| --- | --- | --- | --- |
|
|
158
|
+
| `log.raw_http_capture` | `CHRYS_DEBUG_LLM_RAW_HTTP_LOG` | `false` | Boolean; write raw model HTTP requests and responses to `llm_raw_http.jsonl` in the current session directory |
|
|
159
|
+
| `otel.enabled` | `CHRYS_OTEL` | `false` | Boolean; enable OpenTelemetry export |
|
|
160
|
+
| `otel.endpoint` | `CHRYS_OTEL_ENDPOINT` | Unset | String; telemetry collector endpoint. With no endpoints configured, only traces and logs are saved locally. Standard OTLP endpoint environment variables take precedence over this setting. Configuring an endpoint stops local storage, with no local fallback if export fails |
|
|
161
|
+
| `otel.sensitive_data` | `CHRYS_OTEL_SENSITIVE_DATA` | `false` | Boolean; additionally record prompts, model responses, tool arguments, and tool results, which may contain private information. Enable this only after confirming where the data will go and who can access it |
|
|
162
|
+
|
|
163
|
+
For data storage locations, collector connections, authentication, and metric queries, see the [OpenTelemetry reference](./opentelemetry.md).
|
|
164
|
+
|
|
165
|
+
## Source precedence
|
|
166
|
+
|
|
167
|
+
Each key is resolved independently in the following order, using the first valid value. Project settings must also meet the restrictions under [Project-level settings](#project-level-settings).
|
|
168
|
+
|
|
169
|
+
| Priority | Source |
|
|
170
|
+
| --- | --- |
|
|
171
|
+
| 1 | Explicit choices in the current session, command-line arguments, or behavior fixed by the launch command |
|
|
172
|
+
| 2 | Environment variables already present when the process starts |
|
|
173
|
+
| 3 | Settings not yet migrated from the legacy user `.env` file (macOS / Linux: `~/.chrys/.env`; Windows: `%APPDATA%\chrys\.env`) |
|
|
174
|
+
| 4 | Project settings that are enabled and permitted to apply |
|
|
175
|
+
| 5 | User settings |
|
|
176
|
+
| 6 | Built-in defaults |
|
|
177
|
+
|
|
178
|
+
At startup, iCode attempts to migrate iCode settings from the legacy user `.env` file into the user `settings.yaml` and remove the migrated lines. During the merge, existing keys in `settings.yaml` take precedence and are not overwritten. Settings that have not yet been migrated continue to apply at priority 3 in the table. If migration fails, iCode reports it and retries on the next startup. Environment variables such as model service API keys remain in `.env`.
|
|
179
|
+
|
|
180
|
+
iCode settings in the working directory's `.env` file do not take effect. Write project settings in `.chrys/settings.yaml`.
|
|
181
|
+
|
|
182
|
+
## Value syntax and invalid values
|
|
183
|
+
|
|
184
|
+
These are the general rules for values in settings files and environment variables. For per-key constraints such as limits and the meaning of `null`, see the “Type, values, and effect” column under [Settings keys](#settings-keys).
|
|
185
|
+
|
|
186
|
+
- Write booleans as `true` or `false` in YAML. Corresponding environment variables accept `1`, `true`, `yes`, `on` and `0`, `false`, `no`, `off`, case-insensitively. Exceptions where an environment variable has the opposite meaning or accepts only a specific spelling are noted in the relevant row.
|
|
187
|
+
- Write integers as numbers. For keys with stated limits, out-of-range values are adjusted to the boundary; keys that explicitly prohibit negative values reject them. Special meanings of `0` or negative values, such as disabling a feature or removing a limit, follow the relevant row.
|
|
188
|
+
- Omitted keys and empty strings generally do not provide an override. To remove a setting from a file, delete the key. A value from another source may still apply afterward (see [Source precedence](#source-precedence)).
|
|
189
|
+
- Keys whose type is “Integer or `null`” accept `null`, with the meaning described in the relevant row. User settings and project files handle `null` differently; see [Project-level settings](#project-level-settings).
|
|
190
|
+
- Unknown keys are reported and do not take effect. Most invalid values are ignored and reported, and resolution continues with lower-priority sources. For example, if an environment variable is invalid but user settings contain a valid value, the user setting is used. Five keys behave differently: `approval.default_mode`, `tools.result.ceiling_tokens`, `log.raw_http_capture`, `otel.sensitive_data`, and `mutations.trace.fsatrace_path`. Once resolution encounters an invalid value for one of these keys, it immediately uses the built-in default and stops, without falling back to lower-priority sources. For example, an unrecognized approval mode uses the default `manual`.
|
|
191
|
+
|
|
192
|
+
## Project-level settings
|
|
193
|
+
|
|
194
|
+
Project settings are not loaded by default. First enable them in the user `settings.yaml`, or turn on “Load project settings” under “Settings → Security” in the TUI:
|
|
195
|
+
|
|
196
|
+
```yaml
|
|
197
|
+
project:
|
|
198
|
+
config_enabled: true
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Once enabled, project settings apply to the working directories you open. Project files can configure only the keys in the following table.
|
|
202
|
+
|
|
203
|
+
For keys with restrictions on the direction of an override, project values are accepted only in the direction listed in the table. The comparison uses the value in user YAML, or the built-in default if the user has not set one. For `llm.retry.max_transient`, an unset or `null` user value uses the default for the launch command as the comparison baseline. Keys without a direction restriction use the project value directly. Environment variables are not part of this comparison, but still take precedence over project settings. A `null` value in a project file does not provide an override.
|
|
204
|
+
|
|
205
|
+
| Key allowed in project settings | Allowed override direction |
|
|
206
|
+
| --- | --- |
|
|
207
|
+
| `llm.retry.max_transient` | Can only reduce or maintain the retry count |
|
|
208
|
+
| `tools.result.ceiling_tokens` | Can only lower or maintain the result length limit. `0` means unlimited and is the least restrictive value; a project can use `0` only when the user setting is already `0` |
|
|
209
|
+
| `session.title.auto` | Can disable automatic titles; cannot re-enable them if the user has disabled them |
|
|
210
|
+
| `mutations.parallel_implicit_tools` | Can disable parallel execution; cannot re-enable it if the user has disabled it |
|
|
211
|
+
| `mutations.coordination.enabled` | Can enable distinguishing changes across sessions; cannot disable it if the user has enabled it |
|
|
212
|
+
| `workspace.change_notice.enabled` | Can enable change notices; cannot disable them if the user has enabled them |
|
|
213
|
+
| `workspace.change_notice.max_entries` | Can override within the range `1`–`100` |
|
|
214
|
+
| `context.warn_threshold_pct` | Can override within the range `0`–`1` |
|
|
215
|
+
| `trajectory.verify_commands` | Can replace the verification command list |
|
|
216
|
+
|
|
217
|
+
Web tool keys (`tools.web_search.*`, `tools.web_fetch.*`, and `tools.web_egress.*`) are not in this table, so a project cannot turn on web search or widen where web tools may connect.
|
|
218
|
+
|
|
219
|
+
For example, write the following in `.chrys/settings.yaml` in the working directory:
|
|
220
|
+
|
|
221
|
+
```yaml
|
|
222
|
+
llm:
|
|
223
|
+
retry:
|
|
224
|
+
max_transient: 3
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
After enabling project settings and restarting, if the user has not set a retry count, the project's `3` retries apply. If user YAML already sets `1`, the project's `3` is rejected and `1` still applies. A valid value in the startup environment always takes precedence.
|
|
228
|
+
|
|
229
|
+
iCode reports and ignores disallowed project keys, values that exceed override restrictions, and unknown keys, while continuing to apply other valid settings.
|
|
230
|
+
|
|
231
|
+
## Differences between launch commands
|
|
232
|
+
|
|
233
|
+
| Launch command | Behavior related to settings files |
|
|
234
|
+
| --- | --- |
|
|
235
|
+
| `icode` (TUI) | Uses interface, input, and notification settings; the default agent comes from `agent.default_profile` |
|
|
236
|
+
| `icode run` | Always bypasses approval and does not wait for user answers; the default approval mode and question timeout settings do not change these behaviors |
|
|
237
|
+
| `icode acp` | Agent Client Protocol (ACP) server; the initial agent and approval mode are determined by `--agent` and `--approval`, defaulting to `Code` and `manual`, respectively. Questions wait indefinitely by default; set a timeout with `--ask-user-timeout` |
|
|
238
|
+
| `icode serve` | Hosts the TUI in a browser; configuration files and environment variables come from the machine running the iCode service |
|
|
239
|
+
|
|
240
|
+
## When a setting does not take effect
|
|
241
|
+
|
|
242
|
+
1. Confirm that the settings file is in the correct location and that you have saved it and restarted iCode.
|
|
243
|
+
2. Check for a higher-priority source. Deleting a key from YAML does not clear values from other sources.
|
|
244
|
+
3. For project settings, confirm that loading is enabled in user settings and that the key and override direction meet the restrictions.
|
|
245
|
+
4. Check the messages iCode reports at startup. For how invalid values and unknown keys are handled, see [Value syntax and invalid values](#value-syntax-and-invalid-values); for directory-related messages, check [File locations and format](#file-locations-and-format).
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Theme File Reference
|
|
2
|
+
|
|
3
|
+
iCode supports theme files for customizing the appearance of the terminal user interface (TUI). This page describes the file format, common color fields, and loading rules. To edit and save themes through the interface, see [Customize themes](../guides/configuration/themes.md).
|
|
4
|
+
|
|
5
|
+
## File Location and Naming
|
|
6
|
+
|
|
7
|
+
Store theme files in the following directory. Create it first if it does not exist.
|
|
8
|
+
|
|
9
|
+
| Platform | Directory |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| macOS / Linux | `~/.chrys/themes/` |
|
|
12
|
+
| Windows | `%APPDATA%\chrys\themes\` |
|
|
13
|
+
|
|
14
|
+
Theme files must use UTF-8 encoding and have a `.yaml` or `.yml` extension. Place them directly in this directory; iCode does not read theme files in subdirectories.
|
|
15
|
+
|
|
16
|
+
The filename with the `.yaml` or `.yml` extension removed becomes the theme name. Theme names must meet these requirements:
|
|
17
|
+
|
|
18
|
+
* Start with an English letter or digit and contain only English letters, digits, dots, underscores, and hyphens.
|
|
19
|
+
* Not match a built-in theme name, ignoring case. Built-in names include `chrys`, `chrys-legacy`, `chrys-ansi`, the Textual themes in the theme list (such as `nord` and `textual-dark`), and the retired name `chrys-dark`.
|
|
20
|
+
* Not end in `.yaml` or `.yml`, ignoring case. For example, `my-theme.yaml.yaml` is not a valid filename.
|
|
21
|
+
|
|
22
|
+
When a `.yaml` file and a `.yml` file have the same theme name, iCode prefers `.yaml`. If the `.yaml` file is invalid, iCode still tries the `.yml` file. Only one theme is kept per name.
|
|
23
|
+
|
|
24
|
+
After adding or editing a theme file, restart iCode to load it, then press **F9** and select the corresponding theme from the theme list to apply it.
|
|
25
|
+
|
|
26
|
+
## File Format
|
|
27
|
+
|
|
28
|
+
The following example defines a custom dark theme in `icode-ocean.yaml`:
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
# Overall palette
|
|
32
|
+
primary: "#5c9ded"
|
|
33
|
+
secondary: "#7aa2c7"
|
|
34
|
+
accent: "#70c1b3"
|
|
35
|
+
warning: "#e5b567"
|
|
36
|
+
error: "#e57373"
|
|
37
|
+
success: "#81c784"
|
|
38
|
+
dark: true
|
|
39
|
+
background: "#18212b"
|
|
40
|
+
foreground: "#e6edf3"
|
|
41
|
+
surface: "#202c38"
|
|
42
|
+
panel: "#263442"
|
|
43
|
+
|
|
44
|
+
# Colors for specific areas
|
|
45
|
+
variables:
|
|
46
|
+
footer-background: "#18212b"
|
|
47
|
+
footer-foreground: "#e6edf3"
|
|
48
|
+
input-selection-background: "#5c9ded 35%"
|
|
49
|
+
markdown-block-background: "#202c38"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`primary` is the only required field. All other fields are optional. iCode fills in omitted colors automatically; see [Default Color Rules](#default-color-rules).
|
|
53
|
+
|
|
54
|
+
## Configuration Fields
|
|
55
|
+
|
|
56
|
+
A theme file has two parts:
|
|
57
|
+
|
|
58
|
+
* **Top-level fields** set the overall palette.
|
|
59
|
+
* **`variables`** sets colors and styles for specific interface areas.
|
|
60
|
+
|
|
61
|
+
`variables` must be a mapping from strings to strings. Unknown top-level fields cause the theme to be skipped.
|
|
62
|
+
|
|
63
|
+
### Overall Palette
|
|
64
|
+
|
|
65
|
+
The following fields set the theme's base colors.
|
|
66
|
+
|
|
67
|
+
| Purpose | Field | Description |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| Primary color | `primary` | The theme's main identifying color, used for headings and emphasized backgrounds |
|
|
70
|
+
| Secondary emphasis color | `secondary` | Used for elements that should stand apart from the primary color |
|
|
71
|
+
| Accent color | `accent` | Used sparingly to draw attention, usually contrasting with `primary` and `secondary` |
|
|
72
|
+
| Status colors | `warning`, `error`, `success` | Background, border, and text colors for warning, error, and success states, respectively |
|
|
73
|
+
| Overall background | `background` | The default background for areas not covered by widgets |
|
|
74
|
+
| Default text color | `foreground` | Should remain readable against `background`, `surface`, and `panel` |
|
|
75
|
+
| Widget background | `surface` | The default widget background, typically used for widgets above the overall background |
|
|
76
|
+
| Panel color | `panel` | Visually separates an interface area from the main content |
|
|
77
|
+
| Dark or light mode | `dark` | `true` for dark mode, `false` for light mode; affects omitted background colors and automatically generated colors |
|
|
78
|
+
| ANSI color mode | `ansi` | Defaults to `false`. Set to `true` to enable terminal ANSI color mode, which supports values such as `ansi_red` and `ansi_default`. The terminal palette determines the actual ANSI colors. This mode ignores the top-level `surface` and `panel` settings and uses transparent colors for both |
|
|
79
|
+
|
|
80
|
+
Color fields must be strings. Quote hexadecimal values, such as `"#5c9ded"`. Other color formats, such as `"rgb(92, 157, 237)"` or `"red"`, are also supported.
|
|
81
|
+
|
|
82
|
+
Top-level color fields can use `"rgba(92, 157, 237, 0.35)"` for 35% opacity. Percentage suffixes such as `"#5c9ded 35%"` are not supported in these fields.
|
|
83
|
+
|
|
84
|
+
Do not leave fields empty or set them to `null`. Omit fields you do not need to configure.
|
|
85
|
+
|
|
86
|
+
### Buttons, Footer, Selection, and Cursor
|
|
87
|
+
|
|
88
|
+
Place the following fields under `variables`. Each affects only the corresponding interface element. Color values under `variables` support percentage suffixes. For example, `input-selection-background: "#5c9ded 35%"` blends the color at 35% opacity. Percentage blending applies to RGB colors; `ansi_*` colors ignore opacity.
|
|
89
|
+
|
|
90
|
+
| Purpose | Field |
|
|
91
|
+
| --- | --- |
|
|
92
|
+
| Button text | `button-flat-foreground` |
|
|
93
|
+
| Button text and background on hover | `button-hover-foreground`, `button-hover-background` |
|
|
94
|
+
| Disabled button text and background | `button-disabled-foreground`, `button-disabled-background` |
|
|
95
|
+
| Footer background and text | `footer-background`, `footer-foreground` |
|
|
96
|
+
| Footer shortcut key background and text | `footer-key-background`, `footer-key-foreground` |
|
|
97
|
+
| Input selection background | `input-selection-background` |
|
|
98
|
+
| Block cursor background and text | `block-cursor-background`, `block-cursor-foreground` |
|
|
99
|
+
| Block cursor text style | `block-cursor-text-style` |
|
|
100
|
+
|
|
101
|
+
Omitted button colors use the theme's default palette.
|
|
102
|
+
|
|
103
|
+
`block-cursor-text-style` accepts a Textual text style such as `"bold"` (the default), `"italic"`, `"underline"`, `"reverse"`, or `"none"` (no text styling).
|
|
104
|
+
|
|
105
|
+
### Borders, Widgets, and Content Areas
|
|
106
|
+
|
|
107
|
+
Place the following fields under `variables` as well. Omitted fields use the default colors listed below.
|
|
108
|
+
|
|
109
|
+
| Field | Color when omitted | Affected interface elements |
|
|
110
|
+
| --- | --- | --- |
|
|
111
|
+
| `border-color` | Each area's existing colors | Unifies ordinary interface borders; message, warning, and error borders retain their respective colors, and button borders still follow button backgrounds |
|
|
112
|
+
| `tool-group-title-color` | `warning` | Tool call group titles |
|
|
113
|
+
| `control-background`, `control-background-muted` | `surface` | Widget backgrounds and muted backgrounds |
|
|
114
|
+
| `control-disabled-background` | `background` | Disabled widget backgrounds |
|
|
115
|
+
| `control-foreground-muted` | `text-disabled` | Muted widget text |
|
|
116
|
+
| `overlay-background` | `panel` | Tooltip and notification backgrounds |
|
|
117
|
+
| `markdown-block-background` | `surface` | Markdown blockquote and fenced code block backgrounds |
|
|
118
|
+
| `hatch-color` | `foreground` blended at 15% opacity | Diagonal hatching in empty-state areas |
|
|
119
|
+
|
|
120
|
+
Use `scrollbar`, `scrollbar-hover`, and `scrollbar-active` to configure scrollbar colors in normal, hover, and drag states. `scrollbar-background` sets the track background for all three states; existing `scrollbar-background-hover` and `scrollbar-background-active` values can override the corresponding states individually.
|
|
121
|
+
|
|
122
|
+
## Default Color Rules
|
|
123
|
+
|
|
124
|
+
For non-ANSI themes, omitted fields use the following defaults or are calculated from other colors. ANSI mode uses terminal colors, so do not use this table to infer its final displayed colors.
|
|
125
|
+
|
|
126
|
+
| Omitted field | Value used |
|
|
127
|
+
| --- | --- |
|
|
128
|
+
| `dark` | `true` (dark mode) |
|
|
129
|
+
| `secondary`, `accent`, `warning` | Same as `primary` |
|
|
130
|
+
| `error`, `success` | Same as `secondary` |
|
|
131
|
+
| `background` | `#121212` in dark mode; `#efefef` in light mode |
|
|
132
|
+
| `foreground` | The inverse of the background color |
|
|
133
|
+
| `surface` | `#1e1e1e` in dark mode; `#f5f5f5` in light mode |
|
|
134
|
+
| `panel` | A blend based on `surface`, `primary`, and dark or light mode |
|
|
135
|
+
|
|
136
|
+
The following optional top-level fields adjust the automatically generated palette.
|
|
137
|
+
|
|
138
|
+
| Field | Default behavior | What it adjusts |
|
|
139
|
+
| --- | --- | --- |
|
|
140
|
+
| `luminosity_spread` | Defaults to `0.15` | Controls how much generated light and dark shades differ from the base colors; must be a finite number, not `.nan` or `.inf` |
|
|
141
|
+
| `boost` | In dark mode with `panel` omitted, overlays black or white at 4% opacity on the generated panel to contrast with the background | Accepts a color string. In dark mode with `panel` omitted, it replaces that overlay, adjusting the generated panel's brightness, and also sets the default `block-hover-background` (this color at 10% opacity). No effect in light mode or when `panel` is specified |
|
|
142
|
+
|
|
143
|
+
The top-level field `text_alpha` is also accepted and must be a finite number, but it currently does not change displayed colors.
|
|
144
|
+
|
|
145
|
+
## Loading Failures
|
|
146
|
+
|
|
147
|
+
If iCode finds malformed YAML, a missing `primary` field, unknown top-level fields, or invalid field values while loading, it displays a warning and skips the file. Use the warning to check the corresponding file, correct it, and restart iCode to load it again. Other valid themes remain available.
|
|
148
|
+
|
|
149
|
+
If a theme loads successfully but a `variables` value cannot be used in the corresponding interface style when applied, iCode displays a warning and falls back to the default `chrys` theme. This fallback does not overwrite the saved theme selection. Correct the file, then restart iCode to try again.
|