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,210 @@
|
|
|
1
|
+
# 配置 iCode 设置
|
|
2
|
+
|
|
3
|
+
iCode 设置控制界面外观、默认智能体、会话、工具、通知和部分安全选项。本指南介绍如何在终端用户界面(Terminal User Interface,TUI)中完成这些基础配置,并确认修改何时生效。
|
|
4
|
+
|
|
5
|
+
如需直接编辑 `settings.yaml` 或通过环境变量配置,请参阅[iCode 设置文件参考](../../reference/settings.md),了解文件位置、设置键和来源优先级。
|
|
6
|
+
|
|
7
|
+
## 设置窗口
|
|
8
|
+
|
|
9
|
+
### 打开设置窗口
|
|
10
|
+
|
|
11
|
+
设置窗口只能在智能体空闲时打开。
|
|
12
|
+
|
|
13
|
+
使用以下任一方式打开“设置”窗口:
|
|
14
|
+
|
|
15
|
+
- 按 **F10**。
|
|
16
|
+
- 点击界面底部的 `f10 设置`。
|
|
17
|
+
- 在输入栏中输入 `/settings`,按空格键或 **Enter** 显示标签页列表,然后选择要打开的标签页。
|
|
18
|
+
|
|
19
|
+
也可以用 `/settings <tab>` 直接打开标签页:
|
|
20
|
+
|
|
21
|
+
| 标签页 | `<tab>` | 主要设置 |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| 通用 | `general` | 外观与输入 |
|
|
24
|
+
| 模型与智能体 | `models` | 默认智能体、模型用途与请求重试 |
|
|
25
|
+
| 安全 | `security` | 审批、项目信任、诊断与遥测 |
|
|
26
|
+
| 会话 | `sessions` | 会话标题、存储与回滚 |
|
|
27
|
+
| 工具 | `tools` | 文件搜索、网络工具、智能体提问、工具详情显示与工作区通知 |
|
|
28
|
+
| 通知 | `notifications` | 通知开关、方式与事件 |
|
|
29
|
+
|
|
30
|
+
例如,输入 `/settings security` 可直接打开“安全”标签页。
|
|
31
|
+
|
|
32
|
+
### 修改与生效时间
|
|
33
|
+
|
|
34
|
+
修改会随操作自动保存。输入框中的修改可按回车提交,也会在切换到其他设置或关闭窗口时提交。按 **Esc** 关闭窗口不会撤销已经提交的修改。
|
|
35
|
+
|
|
36
|
+
设置窗口右下角的状态提示说明修改何时生效;有多类待生效修改时,会同时显示相应提示。
|
|
37
|
+
|
|
38
|
+
| 状态提示 | 生效时机 |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| “修改即时保存” | 修改已保存,且没有需要在关闭窗口或重启后才生效的修改 |
|
|
41
|
+
| “修改将在关闭时生效(重载)” | 按 **Esc** 关闭“设置”窗口后生效 |
|
|
42
|
+
| “修改将在当前轮次结束后生效” | 有轮次或工作流正在运行时替代“修改将在关闭时生效(重载)”;关闭“设置”窗口且运行结束后生效 |
|
|
43
|
+
| 提示有多少项修改需重启后生效 | 修改已经保存,但必须退出并重新启动 iCode 后才会生效 |
|
|
44
|
+
|
|
45
|
+
下文各表的“生效时间”列列出每项设置的通常行为。
|
|
46
|
+
|
|
47
|
+
## 设置项
|
|
48
|
+
|
|
49
|
+
### 通用
|
|
50
|
+
|
|
51
|
+
#### 外观
|
|
52
|
+
|
|
53
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| 主题 | 切换 TUI 使用的主题。需要调整配色或创建自定义主题时,请参阅[自定义主题](themes.md)。 | 立即 |
|
|
56
|
+
| 界面显示语言 | 只改变 iCode 界面文案,不改变会话内容、模型输出语言或已有记录。也可输入 `/language` 切换界面显示语言。| 立即 |
|
|
57
|
+
|
|
58
|
+
#### 输入
|
|
59
|
+
|
|
60
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
61
|
+
| --- | --- | --- |
|
|
62
|
+
| 保存提示词历史 | 跨会话保存提交过的输入,供后续复用。主界面未被其他窗口覆盖时,按 **Ctrl+R** 会在输入栏上方打开历史提示词列表;鼠标单击记录,或用上下键选中记录后按回车,会将该提示词复制到输入栏。提示词历史记录文件 `prompt_history.jsonl` 保存在:macOS 和 Linux 的 `~/.chrys/`,或 Windows 的 `%APPDATA%\chrys\`。关闭此设置不会删除该历史记录文件,只是不再读取,按 **Ctrl+R** 将显示“无结果”;重新启用并重启 iCode 后,仍可读取该历史记录文件中的记录。若要清理历史,请删除该历史记录文件;删除后无法恢复。 | 重启后 |
|
|
63
|
+
|
|
64
|
+
### 模型与智能体
|
|
65
|
+
|
|
66
|
+
此标签页只选择已有的智能体或模型配置,不编辑其配置。相关操作请参阅[配置智能体](./agents.md)和[配置模型](./models.md)。
|
|
67
|
+
|
|
68
|
+
#### 智能体
|
|
69
|
+
|
|
70
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
71
|
+
| --- | --- | --- |
|
|
72
|
+
| 默认智能体 | 只决定下次启动 TUI 时默认使用的智能体,不影响当前会话。 | 设置立即保存,下次启动生效 |
|
|
73
|
+
|
|
74
|
+
#### 模型角色
|
|
75
|
+
|
|
76
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
77
|
+
| --- | --- | --- |
|
|
78
|
+
| 会话标题模型 | 默认“使用当前所选模型”。仅在启用[自动生成会话标题](#会话)时使用。 | 关闭窗口后 |
|
|
79
|
+
| 审批裁判模型 | 默认“使用当前所选模型”。仅在[自动审批模式](./approval.md#了解三种审批模式)下使用。 | 关闭窗口后 |
|
|
80
|
+
| Buddy 模型 | 默认“使用当前所选模型”,用于 Buddy 伙伴功能。 | 关闭窗口后 |
|
|
81
|
+
|
|
82
|
+
#### LLM
|
|
83
|
+
|
|
84
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
85
|
+
| --- | --- | --- |
|
|
86
|
+
| 瞬时错误最大重试次数 | 控制网络暂时中断、请求超时、模型服务临时不可用或服务端限流等可短暂恢复错误的最大自动重试次数;不会重试模型配置或请求参数等无法等待恢复的问题。次数越高,临时故障恢复的机会越大;若多次重试仍失败,最终失败前的等待时间和模型请求次数也会增加。留空使用 TUI 默认值;设为 `0` 时不自动重试。上下文窗口已满时,iCode 压缩上下文后重新发送的那一次不受此设置影响。 | 关闭窗口后 |
|
|
87
|
+
|
|
88
|
+
### 安全
|
|
89
|
+
|
|
90
|
+
#### 审批
|
|
91
|
+
|
|
92
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
93
|
+
| --- | --- | --- |
|
|
94
|
+
| 默认审批模式 | 设置下次启动 iCode 时默认使用的审批模式,不影响当前会话。窗口中只提供 `manual` 和 `auto`;如需在当前会话中绕过审批,请使用 `/approval bypass`。当前会话的模式切换及各模式区别请参阅[配置审批模式](./approval.md)。 | 设置立即保存,下次启动生效 |
|
|
95
|
+
| 仅在自动审查标记后弹出审批对话框 | 默认开启。自动模式下,审批裁判模型评估调用期间不弹出对话框,判定安全的调用直接执行;只有调用被标记或评估失败时才弹出。关闭后,对话框会立即弹出并显示“正在评估”,可以在评估完成前自行决定。已在等待的请求保持其开始时的行为。参阅[在 TUI 中处理审批请求](./approval.md#在-tui-中处理审批请求)。 | 立即 |
|
|
96
|
+
|
|
97
|
+
#### 项目信任
|
|
98
|
+
|
|
99
|
+
项目设置、项目钩子和项目 Skills 都随你打开的仓库而来,因此默认都不加载。工作目录中有未加载的项目设置、钩子或 Skills 时,iCode 会弹出提示,说明需要勾选哪一项。
|
|
100
|
+
|
|
101
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
102
|
+
| --- | --- | --- |
|
|
103
|
+
| 加载项目设置 | 读取当前工作目录的 `.chrys/settings.yaml`,应用其中的项目级设置,例如请求重试、自动生成会话标题和工作目录通知。可配置的键及覆盖限制见[项目级设置](../../reference/settings.md#项目级设置)。 | 关闭窗口后 |
|
|
104
|
+
| 加载项目钩子 | 决定是否加载当前工作目录 `.chrys/hooks` 中的 Hooks,不影响用户级 Hooks。创建和验证钩子请参阅[配置和编写 Hooks](../extensions/hooks.md),完整配置字段见 [Hooks 配置参考](../../reference/hooks.md)。 | 关闭窗口后 |
|
|
105
|
+
| 加载项目 Skills | 决定是否加载当前工作目录 `.agents/skills` 中的 Skills,不影响你自己的 Skill 目录。详见[安装和使用 Skills](../extensions/skills.md)。 | 关闭窗口后 |
|
|
106
|
+
|
|
107
|
+
#### 诊断
|
|
108
|
+
|
|
109
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
110
|
+
| --- | --- | --- |
|
|
111
|
+
| 捕获原始 HTTP 流量 | 记录模型请求和响应,以便排查问题。**日志可能以明文包含 API 密钥、完整提示词和模型回复**,因此建议仅在排查时开启,并妥善保管日志文件;排查完成后,应及时关闭该设置并重启 iCode。日志文件 `llm_raw_http.jsonl` 保存在当前会话文件夹中;查找该文件夹的方法请参阅[查找会话 ID 和会话保存位置](../daily-use/sessions.md#查找会话-id-和会话保存位置)。 | 重启后 |
|
|
112
|
+
|
|
113
|
+
#### 遥测
|
|
114
|
+
|
|
115
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
116
|
+
| --- | --- | --- |
|
|
117
|
+
| OpenTelemetry 导出 | 启用遥测,记录追踪、日志和指标。关闭时,另外两项不会使 iCode 保存或发送遥测数据。 | 重启后 |
|
|
118
|
+
| 遥测端点 | 设置接收遥测数据的收集器地址。未通过设置或环境变量配置任何端点时,仅在本地保存追踪和日志;配置任一端点后停止本地保存,发送失败时也不会回退到本地。 | 重启后 |
|
|
119
|
+
| 遥测中包含敏感数据 | 额外记录提示词、模型回复、工具参数和工具结果,影响本地保存和远端导出;工具耗时指标也可能包含工具参数。启用前请确认数据去向和访问权限。 | 重启后 |
|
|
120
|
+
|
|
121
|
+
遥测数据的含义、保存位置、端点优先级和收集器连接方法见 [OpenTelemetry 参考](../../reference/opentelemetry.md)。
|
|
122
|
+
|
|
123
|
+
### 会话
|
|
124
|
+
|
|
125
|
+
#### 标题
|
|
126
|
+
|
|
127
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
128
|
+
| --- | --- | --- |
|
|
129
|
+
| 自动生成会话标题 | 开启后,iCode 会发起额外的模型请求以根据对话内容智能生成标题。**手动设置会话标题后,iCode 不再自动更新该会话的标题。** 有关设置或清除手动标题,请参阅[修改会话标题](../daily-use/sessions.md#修改会话标题)。 | 关闭窗口后 |
|
|
130
|
+
|
|
131
|
+
#### 位置
|
|
132
|
+
|
|
133
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
134
|
+
| --- | --- | --- |
|
|
135
|
+
| 会话存储根目录 | 决定 iCode 保存会话的位置,留空时使用默认位置;会话实际保存在该目录的 `sessions` 子目录。“使用中”显示本次启动正在使用的 `sessions` 目录。修改根目录后,需要重启 iCode 才会使用新位置;重启前,会话仍保存在“使用中”所示目录。**重启后,新会话会保存到新目录,但旧会话文件不会自动迁移。** 若要在新位置继续使用已有会话,请参阅[迁移会话存储位置](../daily-use/sessions.md#迁移会话存储位置)。 | 重启后 |
|
|
136
|
+
|
|
137
|
+
#### 回滚
|
|
138
|
+
|
|
139
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
140
|
+
| --- | --- | --- |
|
|
141
|
+
| 保留的回滚快照数 | 决定每个会话最多保留多少份回滚快照。iCode 每次开始处理一条新提交的提示词前,都会创建一份快照;超过保留数量后,较早的快照会被自动删除。快照保存在对应会话文件夹的 `snapshots` 子目录中。保留的快照越多,使用 `/rollback` 时可返回的较早会话状态越多,但占用的磁盘空间也越多。 | 关闭窗口后 |
|
|
142
|
+
|
|
143
|
+
### 工具
|
|
144
|
+
|
|
145
|
+
#### 文件搜索
|
|
146
|
+
|
|
147
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
148
|
+
| --- | --- | --- |
|
|
149
|
+
| 遵循 .gitignore | 在 grep 和 glob 搜索中应用 Git 忽略规则;关闭后仍会跳过隐藏路径,`.ignore` 等其他忽略文件也仍然生效。 | 关闭窗口后 |
|
|
150
|
+
|
|
151
|
+
#### 网络搜索
|
|
152
|
+
|
|
153
|
+
以下设置作用于包含网络工具的智能体;网络工具默认关闭,参阅[配置网络工具](./web-tools.md)。智能体配置文件自行设置的模式、结果数或超时,会覆盖该智能体的对应设置。项目设置不能修改这些设置。
|
|
154
|
+
|
|
155
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
156
|
+
| --- | --- | --- |
|
|
157
|
+
| 网络搜索模式 | `auto`(默认)允许包含网络搜索的智能体使用该工具。未配置搜索提供方的智能体会把搜索请求发送到第三方服务 Exa 的公开搜索端点,参阅[网络请求的去向](./web-tools.md#网络请求的去向)。`off` 关闭网络搜索。智能体配置文件指定了模式时,以配置文件为准。 | 关闭窗口后 |
|
|
158
|
+
| 每次网络搜索的结果数 | 智能体未指定数量时,每次搜索返回的结果数,范围 1~20,默认 8。 | 关闭窗口后 |
|
|
159
|
+
| 网页读取模式 | `on`(默认)允许包含网页读取的智能体按 URL 读取页面。`off` 关闭网页读取。智能体配置文件指定了模式时,以配置文件为准。 | 关闭窗口后 |
|
|
160
|
+
| 网络代理地址 | 仅供网络工具使用的 `http://` 或 `https://` 代理,不含凭据和路径。留空表示直接连接。网络工具忽略 `HTTP_PROXY` 等代理环境变量。 | 关闭窗口后 |
|
|
161
|
+
| 网络代理 DNS | 设置代理后由谁解析主机名。`local`(默认)在本机解析,并在连接前检查每个地址。`remote` 把主机名交给代理解析(fake-IP 代理需要这样做),拦截私有地址的工作也随之交给代理;参阅[使用 fake-IP 代理](./web-tools.md#使用-fake-ip-代理)。未设置网络代理地址时不起作用。 | 关闭窗口后 |
|
|
162
|
+
| 自定义搜索端点 | 智能体配置文件中自定义搜索端点的授权项,写成 JSON 数组,每项形如 `{"url": "...", "credential_env_names": ["..."]}`。 | 关闭窗口后 |
|
|
163
|
+
| 网络搜索私有网络来源 | 即使解析到私有地址,网络搜索也可以访问的来源,写成 JSON 数组,例如本机 SearXNG 可写 `["http://127.0.0.1:8080"]`。 | 关闭窗口后 |
|
|
164
|
+
| 网络搜索明文 HTTP 来源 | 网络搜索可以通过明文 `http://` 访问的来源,写成 JSON 数组。 | 关闭窗口后 |
|
|
165
|
+
|
|
166
|
+
这些值在保存前按网络工具使用的同一套规则检查,被拒绝的值会说明错在哪里。清空列表字段即表示空列表。网络搜索超时、网页读取超时与词元预算,以及网页读取的来源列表不在窗口中显示,需在 `settings.yaml` 中设置(参阅[网络工具](../../reference/settings.md#网络工具))。
|
|
167
|
+
|
|
168
|
+
#### 询问用户
|
|
169
|
+
|
|
170
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
171
|
+
| --- | --- | --- |
|
|
172
|
+
| 在对话中显示提问 | 开启后,智能体的提问直接显示在对话中;关闭后,提问显示在弹出窗口中。 | 关闭窗口后 |
|
|
173
|
+
| 询问用户超时(秒) | 决定 iCode 等待回答的时间。留空时使用 TUI 界面显示的默认值。超过设定时间仍未收到回答时,iCode 会把超时结果返回给智能体;设为 `0` 时会一直等待,直到收到回答或任务中断。通过 IDE 插件等 ACP 客户端使用时,`ask_user` 默认不设置服务端等待时限;如需限制等待时间,请在启动 ACP 服务时使用 `--ask-user-timeout`。 | 关闭窗口后 |
|
|
174
|
+
|
|
175
|
+
#### 外观
|
|
176
|
+
|
|
177
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
178
|
+
| --- | --- | --- |
|
|
179
|
+
| 默认展开工具详情 | 开启后,新出现的工具组默认展开;关闭后默认折叠,只显示摘要和正在执行的操作。可以随时点击工具组展开详情。 | 立即 |
|
|
180
|
+
|
|
181
|
+
#### 工作区通知
|
|
182
|
+
|
|
183
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
184
|
+
| --- | --- | --- |
|
|
185
|
+
| 工作区变更通知 | 开始处理一条新提交的提示词时,iCode 会向智能体提供自上一次提交提示词以来的工作目录文件变更摘要。其中既包括当前会话中智能体及其子智能体的改动,也包括由人工、其他程序或其他 iCode 会话造成的改动。 | 关闭窗口后 |
|
|
186
|
+
|
|
187
|
+
### 通知
|
|
188
|
+
|
|
189
|
+
#### 常规
|
|
190
|
+
|
|
191
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
192
|
+
| --- | --- | --- |
|
|
193
|
+
| 启用通知 | 事件通知的总开关。关闭后不发送桌面弹窗或声音,但会保留发送方式和事件开关的选择;重新启用后,原来的选择仍有效。 | 立即 |
|
|
194
|
+
|
|
195
|
+
#### 发送方式
|
|
196
|
+
|
|
197
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
198
|
+
| --- | --- | --- |
|
|
199
|
+
| 桌面弹窗、声音 | 可分别启用;两项都关闭时,即使总开关和事件开关已开启,也不会收到通知。 | 立即 |
|
|
200
|
+
| iCode 获得焦点时暂停通知 | iCode 位于前台时不发送桌面弹窗或声音。 | 立即 |
|
|
201
|
+
| 测试 | 按当前发送方式发送测试通知,不受总开关、事件开关或是否获得焦点影响;仅用于确认桌面弹窗和声音是否可用,测试前至少开启“桌面弹窗”或“声音”之一。 | 立即 |
|
|
202
|
+
|
|
203
|
+
#### 事件
|
|
204
|
+
|
|
205
|
+
| 设置项 | 效果与必要说明 | 生效时间 |
|
|
206
|
+
| --- | --- | --- |
|
|
207
|
+
| 需要审批 | 决定是否在需要审批时触发通知。 | 立即 |
|
|
208
|
+
| 智能体需要输入 | 决定是否在智能体需要输入时触发通知。 | 立即 |
|
|
209
|
+
| 智能体已完成 | 决定是否在智能体完成任务时触发通知。 | 立即 |
|
|
210
|
+
| 智能体错误 | 决定是否在智能体出错时触发通知。 | 立即 |
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# 自定义主题
|
|
2
|
+
|
|
3
|
+
主题编辑器用于在终端用户界面(Terminal User Interface,TUI)中调整配色,并直接预览效果。本指南介绍如何从已有主题开始修改,保存为自己的主题,以及撤销修改或删除主题。
|
|
4
|
+
|
|
5
|
+
编辑过程中的配色会实时预览,但不会自动保存。只有点击主题编辑器中的“保存”,修改才会写入主题文件,并在下次启动时继续生效。若希望直接编写 YAML 文件或查询配色字段,请参阅[主题文件参考](../../reference/themes.md)。
|
|
6
|
+
|
|
7
|
+
## 打开编辑器
|
|
8
|
+
|
|
9
|
+
1. 按 **F9**,或点击底栏的 `f9 主题`,打开主题列表。
|
|
10
|
+
2. 选择列表底部的“修改主题…”,打开停靠在主界面旁的主题编辑器。
|
|
11
|
+
3. 在编辑器顶部的下拉列表中选择要修改的主题。此操作只切换编辑对象,不会更改当前应用的主题。
|
|
12
|
+
|
|
13
|
+
编辑器旁保留当前对话,可以观察配色对文字、工具卡片和其他界面元素的影响。
|
|
14
|
+
|
|
15
|
+
编辑器打开期间,通过 F9、`/theme` 或设置窗口切换应用主题会受到限制。要更换编辑对象,使用编辑器顶部的下拉列表;要切换日常使用的主题,先关闭编辑器。
|
|
16
|
+
|
|
17
|
+
## 调整并预览颜色
|
|
18
|
+
|
|
19
|
+
编辑器按 `Colors`、`Buttons`、`Borders` 等分组列出颜色。编辑器使用字段名标识配色项,例如 `primary`(主色)、`background`(整体背景)。
|
|
20
|
+
|
|
21
|
+
1. 点击要修改的颜色块,打开颜色选择器。
|
|
22
|
+
2. 对于普通主题,在 `RGB / HSV` 中选择或输入颜色,也可以切换到“256 色”选取颜色。ANSI 主题提供 `ANSI` 和“256 色”两种选择方式,ANSI 颜色的实际显示由终端配色决定。
|
|
23
|
+
3. 调整时,主界面会实时预览。确认效果后点击“确认”,把这项修改保留在编辑器中;点击“取消”或按 **Esc**,放弃本次颜色选择器中的修改。
|
|
24
|
+
|
|
25
|
+
背景色和面板配色(`background`、`surface`、`panel` 和 `boost`)必须保持不透明,因此颜色选择器不提供这些字段的透明度调整。
|
|
26
|
+
|
|
27
|
+
## 撤销与重置
|
|
28
|
+
|
|
29
|
+
根据要撤销的范围,选择对应操作:
|
|
30
|
+
|
|
31
|
+
| 操作 | 结果 |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| 颜色选择器中的“恢复” | 恢复到打开这次颜色选择器时的值 |
|
|
34
|
+
| 编辑器中的“撤销”/“重做” | 撤销或重做已经确认的编辑操作 |
|
|
35
|
+
| 已修改字段旁的“↺”重置按钮 | 将这一项恢复为本次载入该主题时的值 |
|
|
36
|
+
| “全部重置” | 将所有字段恢复为本次载入该主题时的值 |
|
|
37
|
+
|
|
38
|
+
## 保存主题
|
|
39
|
+
|
|
40
|
+
1. 在编辑器中点击“保存”。
|
|
41
|
+
2. 在“保存主题”窗口中填写主题名称。
|
|
42
|
+
3. 点击“保存”。出现保存成功通知后,主题会立即应用,并记住本次选择。
|
|
43
|
+
|
|
44
|
+
主题名称须满足以下要求:
|
|
45
|
+
|
|
46
|
+
* 不超过 100 个字符,以英文字母或数字开头,只使用英文字母、数字、点、下划线和连字符,不能以点结尾。
|
|
47
|
+
* 不填写 `.yaml` 或 `.yml` 扩展名。
|
|
48
|
+
* 基于内置主题修改时,须使用新名称另存;基于用户主题修改时,名称与原名称完全一致(含大小写)时会覆盖原文件,使用新名称则另存。重名检查不区分大小写。
|
|
49
|
+
* 不能使用 Windows 设备名,如 `CON`、`NUL`、`COM1`~`COM9` 或 `LPT1`~`LPT9`,也不能使用这些名称后接点和后缀的形式,如 `CON.dark`。
|
|
50
|
+
|
|
51
|
+
## 关闭或更换编辑对象
|
|
52
|
+
|
|
53
|
+
切换编辑对象或点击“关闭”时,如有未保存的修改,会询问是否放弃。选择“放弃修改”将丢弃修改并继续操作,选择“取消”则继续编辑。
|
|
54
|
+
|
|
55
|
+
关闭编辑器后,界面恢复为当前应用的主题。
|
|
56
|
+
|
|
57
|
+
## 删除用户主题
|
|
58
|
+
|
|
59
|
+
“删除”会移除该主题文件和当前未保存的修改。内置主题不支持删除。
|
|
60
|
+
|
|
61
|
+
在编辑器顶部选择用户主题,点击“删除”,核对确认窗口中的主题名称后再次点击“删除”。删除当前已应用的主题后,iCode 会切换到默认主题 `chrys`。
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 配置工具
|
|
2
|
+
|
|
3
|
+
内置工具为智能体提供访问文件、搜索内容、执行 Shell 命令以及使用其他 iCode 功能的能力。本指南介绍如何在终端用户界面(Terminal User Interface,TUI)中为智能体启用或停用内置工具类别。
|
|
4
|
+
|
|
5
|
+
MCP 服务器提供的工具不属于内置工具,需要在 [MCP 配置](../extensions/mcp.md)中单独管理。
|
|
6
|
+
|
|
7
|
+
需要查询智能体配置和 Hooks 中使用的工具类别值及具体工具名称时,参阅[工具类别和名称](../../reference/tool-kinds-and-names.md)。
|
|
8
|
+
|
|
9
|
+
## 打开工具配置
|
|
10
|
+
|
|
11
|
+
在输入栏中输入 `/agents tools`,打开当前智能体的“工具”标签页。如需修改其他智能体,可在左侧列表中选择。
|
|
12
|
+
|
|
13
|
+
## 选择内置工具
|
|
14
|
+
|
|
15
|
+
每个选项对应一类内置工具,根据智能体需要完成的任务启用相应类别:
|
|
16
|
+
|
|
17
|
+
| 工具类别 | 可完成的操作 | 配置建议 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| 读取文件系统 | 读取文件和查看图像(PNG、JPEG 或 WebP) | 需要分析项目文件时启用;只有所选模型支持视觉输入时,智能体才能使用查看图像工具 |
|
|
20
|
+
| 写入文件系统 | 创建、覆写和精确编辑文件 | 仅在智能体需要修改文件时启用 |
|
|
21
|
+
| 文件搜索 | 搜索文件内容,或按名称模式查找文件 | 需要在项目中定位代码和文件时启用 |
|
|
22
|
+
| 网络搜索 | 查找网页链接和摘要;除非智能体配置文件指定了其他提供方,否则使用 Exa(exa.ai) | 需要查询最新文档、发布信息等外部资料时启用。搜索词会发往该外部服务,并可能带有对话中的内容,请注意数据与隐私安全 |
|
|
23
|
+
| 网页读取 | 按 URL 读取页面文本 | 需要阅读搜索到的页面或你指定的页面时启用 |
|
|
24
|
+
| Shell | 在子进程中执行终端命令 | 需要运行构建、测试或其他命令时启用 |
|
|
25
|
+
| 询问用户 | 在任务进行中请求补充信息或让用户作出选择 | 适合 TUI 和 ACP 会话;无界面命令行模式(`icode run`)不会向智能体提供此工具 |
|
|
26
|
+
| 等待 | 暂停任务,最长 3600 秒;TUI 中会显示可提前跳过的倒计时 | 需要等待一段时间后继续任务时启用 |
|
|
27
|
+
| 文档转换器(PDF、Office) | 将 PDF、DOCX、PPTX、XLSX 和 XLS 转换为 Markdown;当前使用的模型支持图片输入、智能体已启用“读取文件系统”工具类别时,还可提取 PDF、DOCX 和 PPTX 中的图片供智能体查看;XLSX 和 XLS 只转换文本与表格 | 需要读取这些文档格式时启用 |
|
|
28
|
+
| 待办事项 | 用实时清单跟踪多步骤任务 | 适合步骤较多、需要显示进度的任务 |
|
|
29
|
+
|
|
30
|
+
勾选需要启用的类别,取消勾选不需要的类别,然后点击“保存”。
|
|
31
|
+
|
|
32
|
+
如果修改的是当前会话正在使用的智能体,新工具配置会从后续请求开始生效。
|
|
33
|
+
|
|
34
|
+
iCode 自带的智能体都没有启用网络搜索;它与只搜索本地文件的“文件搜索”不同。“网页读取”是单独的开关。未配置搜索提供方时,搜索请求会发往 Exa 的公开搜索服务。启用前,请参阅[配置网络工具](./web-tools.md),了解请求的去向、审批和网络限制。
|
|
35
|
+
|
|
36
|
+
## 使用“询问用户”工具
|
|
37
|
+
|
|
38
|
+
“询问用户”工具用于在任务进行中请求补充信息或让用户作出选择。一次提问可以包含 1~5 个问题,支持单选、多选和自由文本。
|
|
39
|
+
|
|
40
|
+
默认情况下,问题显示在弹出窗口中。如果弹窗遮挡了需要查看的会话内容,可以点击“在对话中回答”,将当前提问切换为在对话中显示;此操作仅对当前提问生效。如果希望后续提问默认在对话中显示,请在[配置 iCode 设置](./settings.md)中开启“在对话中显示提问”。
|
|
41
|
+
|
|
42
|
+
在 TUI 中,多个问题会显示在同一个提问窗口中。可以切换问题标签,填写各个问题后,在汇总页检查回答并统一提交。
|
|
43
|
+
|
|
44
|
+
等待回答的时间由[配置 iCode 设置](./settings.md)中的“询问用户超时(秒)”设置控制。
|
|
45
|
+
|
|
46
|
+
## 按需配置工具
|
|
47
|
+
|
|
48
|
+
工具配置决定智能体可以使用哪些能力。配置专用智能体时,建议仅启用完成任务所需的工具类别。
|
|
49
|
+
|
|
50
|
+
例如:
|
|
51
|
+
|
|
52
|
+
- 只分析代码的智能体可以启用“读取文件系统”和“文件搜索”,不启用“写入文件系统”和 Shell。
|
|
53
|
+
- 修改代码并运行测试的智能体通常需要启用“读取文件系统”“写入文件系统”“文件搜索”和 Shell。
|
|
54
|
+
- 处理不受信任的项目时,应谨慎启用 Shell 和“写入文件系统”。
|
|
55
|
+
|
|
56
|
+
启用工具只表示智能体可以调用该能力;需要审批的操作仍按当前审批模式处理。有关审批请求和确认方式的详细说明,请参阅[配置审批模式](./approval.md)。
|
|
57
|
+
|
|
58
|
+
对于文件系统、搜索和 Shell 工具,相对路径会以当前[工作目录](../daily-use/workspaces.md)为基准,Shell 命令也默认在当前工作目录中运行。切换工作目录后,这些相对路径和命令的默认工作目录会随之改变。工作目录是默认操作位置,并不表示工具只能访问工作目录内的路径;操作能否执行还取决于工具参数、需要审批时是否获得批准,以及运行 iCode 的系统用户权限。
|
|
59
|
+
|
|
60
|
+
命令输出很多时,智能体会看到输出的开头和结尾;条件允许时,iCode 会把输出保存到会话目录。命令输出超过 32 MiB 时,iCode 只保留开头和结尾部分,中间部分不会保存在任何地方,结果中会告诉智能体有多少内容没有保留。
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
# 配置网络工具
|
|
2
|
+
|
|
3
|
+
网络工具让智能体可以在互联网上查找资料:`web_search` 搜索网页,返回链接和摘要;`web_fetch` 按已知 URL 读取页面文本。本指南介绍如何为智能体启用这两个工具、它们的请求发往何处,以及如何选择搜索提供方和限制网络访问。
|
|
4
|
+
|
|
5
|
+
**网络工具默认关闭。** iCode 自带的智能体(Code、QA、Explore 和 General)都不包含网络工具;在你为某个智能体启用之前,iCode 不会发送任何搜索请求,也不会读取任何网页。
|
|
6
|
+
|
|
7
|
+
`web_search` 与“文件搜索”工具(`grep` 和 `glob`)不同,后者只搜索本机文件。
|
|
8
|
+
|
|
9
|
+
## 启用网络工具
|
|
10
|
+
|
|
11
|
+
### 为智能体添加工具
|
|
12
|
+
|
|
13
|
+
在输入栏中输入 `/agents tools`,选择智能体,勾选“网络搜索”“网页读取”或两者,然后点击“保存”。两者都立即可用。除非你选择了其他提供方,网络搜索会把搜索词发送给 Exa(exa.ai),启用前请先阅读[网络请求的去向](#网络请求的去向)。
|
|
14
|
+
|
|
15
|
+
在智能体配置文件中,也可以把这两个工具类别加入 `tools.builtins`:
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
tools:
|
|
19
|
+
builtins: [filesystem.read, search, web_search, web_fetch]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
网络工具按智能体分别配置。子智能体(例如 General)只有在自己的配置中包含网络工具时才能使用。如需为内置智能体添加网络工具,在 TUI 中编辑并保存该智能体,iCode 会为其保存一份你自己的配置(参阅[覆盖内置智能体](../../reference/agent-profile.md#覆盖内置智能体))。
|
|
23
|
+
|
|
24
|
+
### 关闭网络工具
|
|
25
|
+
|
|
26
|
+
如需在不从智能体中移除工具的情况下关闭某个工具,按 **F10** 打开“设置”窗口,选择“工具”标签页,在“网络搜索”区域将“网络搜索模式”或“网页读取模式”设为 `off`。“网络搜索模式”默认为 `auto`,“网页读取模式”默认为 `on`,因此包含该工具的智能体可以直接使用。
|
|
27
|
+
|
|
28
|
+
这两项设置只作用于配置文件未指定模式的智能体。智能体配置文件中的模式优先,因此可以只为某个智能体关闭工具;配置文件设为 `on` 时,即使上述设置为 `off`,该智能体仍保留该工具:
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
tools:
|
|
32
|
+
web_fetch:
|
|
33
|
+
mode: off
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
“设置”中的修改在关闭窗口后生效;智能体工具配置的修改从后续请求开始生效。
|
|
37
|
+
|
|
38
|
+
## 网络请求的去向
|
|
39
|
+
|
|
40
|
+
启用 `web_search` 且未配置搜索提供方时,默认的 `auto` 模式会将搜索请求发送到 **Exa 的公开匿名搜索端点 `https://mcp.exa.ai/mcp`**。Exa 是第三方搜索服务,无需 API 密钥或账号。iCode 只发送智能体要搜索的内容和所需结果数量,不会发送你的文件或对话本身;但搜索词由智能体撰写,可能包含任务中的细节。该服务有免费额度的速率限制,也可能无法访问。如需将搜索请求发往其他服务,参阅[选择搜索提供方](#选择搜索提供方);如需停止搜索,将模式设为 `off`。
|
|
41
|
+
|
|
42
|
+
`web_fetch` 直接向托管该 URL 的网站发起请求;如果设置了[网络代理](#控制网络访问),则经由该代理。请求使用 `Chrys-Web/1.0` 作为 User-Agent,不会发送 Cookie 或已保存的凭据。
|
|
43
|
+
|
|
44
|
+
搜索结果和读取的页面会作为工具结果返回给智能体,因此也会随对话的其余内容一起发送给模型提供方。只有智能体调用工具时才会发出网络请求,启动时不会发送。
|
|
45
|
+
|
|
46
|
+
## 审批网络工具调用
|
|
47
|
+
|
|
48
|
+
`web_search` 和 `web_fetch` 两个类别默认需要审批。这条默认规则在所有显式的 `approval.overrides` 规则之后、配置文件的 `approval.default` 之前生效,因此智能体设置 `default: auto` 并不会取消它。与其他工具一样,当前审批模式决定如何处理请求:
|
|
49
|
+
|
|
50
|
+
- “手动”模式下,每次网络工具调用都会弹出“工具审批”对话框。
|
|
51
|
+
- “自动”模式下,审批裁判模型可以批准调用。
|
|
52
|
+
- “绕过”模式下(包括无界面命令行 `icode run`),网络工具调用不经询问直接执行。
|
|
53
|
+
|
|
54
|
+
如果不希望每次搜索都询问,可以在智能体配置文件中设置覆盖项,例如 `approval.overrides: {web_search: auto}`。参阅[配置审批模式](./approval.md)。
|
|
55
|
+
|
|
56
|
+
## 选择搜索提供方
|
|
57
|
+
|
|
58
|
+
在智能体配置文件的 `tools.web_search` 下配置搜索提供方,字段说明见[智能体配置文件参考](../../reference/agent-profile.md#toolsweb_search)。在 `providers` 中为每个提供方取一个 ID,模式决定如何使用这些提供方:
|
|
59
|
+
|
|
60
|
+
| 模式 | 行为 |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `auto` | 未配置 `provider`、`fallback_chain` 和 `providers` 时,使用匿名 Exa。配置了 `providers` 时,必须同时用 `fallback_chain` 按顺序列出要尝试的提供方 ID。 |
|
|
63
|
+
| `provider` | 只使用 `provider` 指定的一个提供方,不能设置 `fallback_chain`。 |
|
|
64
|
+
| `off` | 为该智能体关闭网络搜索。 |
|
|
65
|
+
|
|
66
|
+
也可以写 `true` 或 `false`:`true` 表示 `auto`(对 `web_fetch` 表示 `on`),`false` 表示 `off`。
|
|
67
|
+
|
|
68
|
+
如果组合无效,例如 `auto` 模式配置了 `providers` 却没有 `fallback_chain`,智能体仍会启动,但不包含网络工具,iCode 会显示一条写明原因的警告(参阅[网络工具没有出现时](#网络工具没有出现时))。未知的模式或格式错误的提供方条目则会使整个配置文件无效。
|
|
69
|
+
|
|
70
|
+
### 无需密钥的搜索服务
|
|
71
|
+
|
|
72
|
+
| 类型 | 服务 |
|
|
73
|
+
| --- | --- |
|
|
74
|
+
| `exa_mcp` | Exa 公开端点,即 `auto` 默认使用的服务 |
|
|
75
|
+
| `bing_html` | Bing 搜索结果页 |
|
|
76
|
+
| `duckduckgo_html` | DuckDuckGo 的 HTML 搜索结果页 |
|
|
77
|
+
|
|
78
|
+
这些类型只接受 `type` 字段:端点固定,不接受凭据。例如,改用 DuckDuckGo 代替 Exa:
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
tools:
|
|
82
|
+
builtins: [filesystem.read, search, web_search, web_fetch]
|
|
83
|
+
web_search:
|
|
84
|
+
mode: provider
|
|
85
|
+
provider: ddg
|
|
86
|
+
providers:
|
|
87
|
+
ddg:
|
|
88
|
+
type: duckduckgo_html
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`bing_html` 和 `duckduckgo_html` 读取的是普通搜索结果页,而不是官方 API,可用性和结果质量取决于该服务和本地网络。结果不包含广告和生成式回答。遇到验证码、同意页面或无法识别的页面布局时,会报告错误,而不会当作空结果返回。
|
|
92
|
+
|
|
93
|
+
### 需要密钥的搜索 API
|
|
94
|
+
|
|
95
|
+
| 类型 | 服务 | 常用密钥变量 |
|
|
96
|
+
| --- | --- | --- |
|
|
97
|
+
| `tavily` | Tavily Search API | `TAVILY_API_KEY` |
|
|
98
|
+
| `brave` | Brave Search API | `BRAVE_SEARCH_API_KEY` |
|
|
99
|
+
| `exa` | Exa Search API(需认证) | `EXA_API_KEY` |
|
|
100
|
+
|
|
101
|
+
将 `api_key_env` 设为保存密钥的环境变量名:
|
|
102
|
+
|
|
103
|
+
```yaml
|
|
104
|
+
tools:
|
|
105
|
+
web_search:
|
|
106
|
+
mode: auto
|
|
107
|
+
fallback_chain: [primary, backup]
|
|
108
|
+
providers:
|
|
109
|
+
primary:
|
|
110
|
+
type: tavily
|
|
111
|
+
api_key_env: TAVILY_API_KEY
|
|
112
|
+
backup:
|
|
113
|
+
type: exa
|
|
114
|
+
api_key_env: EXA_API_KEY
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
iCode 从启动 iCode 时的环境变量或用户 `.env` 文件(macOS / Linux:`~/.chrys/.env`;Windows:`%APPDATA%\chrys\.env`)读取密钥。启动环境中已设置的变量优先,即使其值为空。工作目录中的 `.env` 文件不能提供网络工具凭据。用户 `.env` 文件在每次构建智能体时读取,修改后需重新保存智能体或重启 iCode。iCode 只读取智能体实际使用的提供方所需的密钥。
|
|
118
|
+
|
|
119
|
+
### 回退到其他提供方
|
|
120
|
+
|
|
121
|
+
`auto` 模式下,iCode 按 `fallback_chain` 的顺序尝试各提供方,并返回第一个得到的结果,空结果也算。出现以下情况时,iCode 会改用下一个提供方:
|
|
122
|
+
|
|
123
|
+
- 该提供方用完了分给它的时间(参阅[时间限制与重试](#时间限制与重试))。
|
|
124
|
+
- 连接错误、HTTP 5xx、408 或 429 在重试一次后仍然出现。
|
|
125
|
+
- 无法连接提供方:其域名无法解析、解析到私有地址,或者连接因重试也无法解决的原因被拒绝(例如证书被代理拒绝)。
|
|
126
|
+
- 请求对该提供方来说过大,例如搜索词过长,放进 URL 后超出长度限制。
|
|
127
|
+
- 提供方返回重定向、验证码或同意页面,或者其响应过大、使用不支持的压缩方式或无法读取。
|
|
128
|
+
- `exa_mcp`、`bing_html` 或 `duckduckgo_html` 返回任意 HTTP 4xx 错误,或 `exa_mcp` 报告搜索失败(例如触发了免费版的频率限制)。`exa_mcp` 返回空结果属于正常回答,回退链会就此停止。
|
|
129
|
+
|
|
130
|
+
对于需要密钥的提供方和自定义提供方,HTTP 4xx 错误通常说明配置有误(例如密钥错误),因此回退链会停止,智能体收到带状态码的错误,例如 `Error: http_4xx (HTTP 403)`。由请求本身引起的错误(例如搜索词为空)也会停止回退链。iCode 不会暗中回退:只尝试你列出的提供方。
|
|
131
|
+
|
|
132
|
+
### 使用自己的搜索端点
|
|
133
|
+
|
|
134
|
+
`custom_http` 类型可以连接任何返回 JSON 的 HTTP 搜索服务。在配置文件中映射请求和响应:
|
|
135
|
+
|
|
136
|
+
```yaml
|
|
137
|
+
tools:
|
|
138
|
+
builtins: [web_search]
|
|
139
|
+
web_search:
|
|
140
|
+
mode: provider
|
|
141
|
+
provider: corporate
|
|
142
|
+
providers:
|
|
143
|
+
corporate:
|
|
144
|
+
type: custom_http
|
|
145
|
+
endpoint: https://search.example.com/v1/search
|
|
146
|
+
method: POST
|
|
147
|
+
auth:
|
|
148
|
+
location: header
|
|
149
|
+
name: Authorization
|
|
150
|
+
prefix: "Bearer "
|
|
151
|
+
key_env: CORP_SEARCH_API_KEY
|
|
152
|
+
request:
|
|
153
|
+
json:
|
|
154
|
+
query: {$input: query}
|
|
155
|
+
limit: {$input: limit}
|
|
156
|
+
response:
|
|
157
|
+
results_pointer: /data/items
|
|
158
|
+
url_pointer: /link
|
|
159
|
+
title_pointer: /title
|
|
160
|
+
snippet_pointer: /summary
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
自定义端点还需要在用户设置中授权。授权项写明确切的端点 URL,以及该提供方可以读取的每个环境变量。可以在“设置”的“自定义搜索端点”中添加,也可以写在用户 `settings.yaml` 中:
|
|
164
|
+
|
|
165
|
+
```yaml
|
|
166
|
+
tools:
|
|
167
|
+
web_search:
|
|
168
|
+
custom_endpoints:
|
|
169
|
+
- url: https://search.example.com/v1/search
|
|
170
|
+
credential_env_names: [CORP_SEARCH_API_KEY]
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
映射规则:
|
|
174
|
+
|
|
175
|
+
- `{$input: NAME}` 插入搜索参数:`query`、`limit`、`allowed_domains` 或 `blocked_domains`。`{$env: NAME}` 插入环境变量,该变量也必须列在授权项中。每个标记替换一个完整的值,并保留其类型。
|
|
176
|
+
- `method` 为 `GET` 或 `POST`。`GET` 发送 `request.query_params`,列表会展开为重复的参数;`POST` 还可以发送 `request.json` 请求体。
|
|
177
|
+
- `auth.location` 为 `header`、`query` 或 `none`。密钥只能放在 `auth` 或 `$env` 标记中,不能直接写在请求头里。
|
|
178
|
+
- `*_pointer` 字段是 JSON Pointer,例如 `/data/items`。`results_pointer` 和 `url_pointer` 必填。找不到结果容器时,搜索会失败,而不是返回空结果。
|
|
179
|
+
|
|
180
|
+
以下两个预设可以为常见服务自动填写映射:
|
|
181
|
+
|
|
182
|
+
- SearXNG:`type: custom_http`、`preset: searxng`,并将 `endpoint` 设为你的实例地址,例如 `https://search.example.com/search`。SearXNG 服务器需要启用 JSON 输出。
|
|
183
|
+
- SerpAPI:`type: custom_http` 和 `preset: serpapi`。授权 `https://serpapi.com/search`,并设置 `credential_env_names: [SERPAPI_API_KEY]`。
|
|
184
|
+
|
|
185
|
+
## 控制网络访问
|
|
186
|
+
|
|
187
|
+
网络工具的网络访问只能在用户设置中配置。项目设置和智能体配置文件都不能修改它,因此打开的代码仓库无法扩大工具可访问的范围。常用的搜索选项位于“设置”的“工具”标签页;网页读取相关的列表需在用户 `settings.yaml` 中设置。各设置项的说明参阅[设置文件参考](../../reference/settings.md#网络工具)。
|
|
188
|
+
|
|
189
|
+
```yaml
|
|
190
|
+
tools:
|
|
191
|
+
web_egress:
|
|
192
|
+
proxy_url: "" # 仅供网络工具使用的 HTTP(S) 代理
|
|
193
|
+
proxy_dns: local # remote:由代理解析主机名
|
|
194
|
+
web_search:
|
|
195
|
+
private_origins: []
|
|
196
|
+
http_origins: []
|
|
197
|
+
custom_endpoints: []
|
|
198
|
+
web_fetch:
|
|
199
|
+
denied_origins: [] # 从不读取这些来源,始终优先
|
|
200
|
+
allowed_origins: [] # 非空时,只读取这些来源
|
|
201
|
+
private_origins: [] # 即使解析到私有地址也允许
|
|
202
|
+
http_origins: [] # 允许对这些来源使用明文 http://
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
列表条目是来源(origin),即协议、主机和可选端口,例如 `https://docs.example.com` 或 `http://127.0.0.1:8080`。条目不能包含路径、查询参数、凭据或通配符。默认端口和主机名大小写会被规范化。在“设置”窗口中,列表以 JSON 数组形式输入,例如 `["https://docs.example.com"]`,保存前会按工具使用的同一套规则检查。
|
|
206
|
+
|
|
207
|
+
规则如下:
|
|
208
|
+
|
|
209
|
+
- **仅限 HTTPS**:除非来源列在 `http_origins` 中,否则拒绝明文 `http://`。
|
|
210
|
+
- **仅限公网地址**:连接前,iCode 解析主机名,并拒绝私有、回环、链路本地等非公网地址,除非来源列在 `private_origins` 中。随后 iCode 连接已检查过的地址,同时在请求和 TLS 证书校验中保留原始主机名。“网络代理 DNS”设为 `remote` 时改由代理解析主机名,参阅[使用 fake-IP 代理](#使用-fake-ip-代理)。
|
|
211
|
+
- **网页读取列表**:`denied_origins` 始终优先。`allowed_origins` 非空时,`web_fetch` 只从这些来源读取。
|
|
212
|
+
- **搜索和读取分开授权**:为搜索设置的例外不会让 `web_fetch` 访问该来源,反之亦然。
|
|
213
|
+
- **代理**:网络工具忽略 `HTTP_PROXY`、`HTTPS_PROXY` 等代理变量。如需使用代理,将“网络代理地址”(`tools.web_egress.proxy_url`)设为 `http://` 或 `https://` 代理地址,不含凭据和路径。该代理只用于网络工具。“网络代理 DNS”为默认的 `local` 时,iCode 经代理只连接网站的 IPv4 地址,因此只有 IPv6 地址的网站会返回 `proxy_ipv6_unsupported` 错误。设为 `remote` 时由代理解析主机名,代理可以通过 IPv6 访问这类网站。无论哪种模式,直接写出 IPv6 地址的 URL(例如 `https://[2001:db8::1]/`)都无法通过代理访问。环境中的证书设置(例如 `SSL_CERT_FILE`)仍然有效。
|
|
214
|
+
- 工具 URL、来源列表和代理地址中的主机名都可以包含下划线,例如 `http://search_box:8080`。
|
|
215
|
+
|
|
216
|
+
例如,要使用位于 `http://127.0.0.1:8080/search` 的 SearXNG 实例,需要在 `custom_endpoints` 中授权该端点,并将 `http://127.0.0.1:8080` 同时加入 `tools.web_search.private_origins` 和 `tools.web_search.http_origins`。
|
|
217
|
+
|
|
218
|
+
### 使用 fake-IP 代理
|
|
219
|
+
|
|
220
|
+
部分代理(例如处于 TUN 或 fake-IP 模式的 Clash、Surge)会用 `198.18.0.0/15` 中的占位地址回答 DNS 查询,再由代理自己连接真实网站。这些地址不是公网地址,因此所有网络请求都会返回 `private_address_blocked` 错误,错误中附带指向本设置的提示。要使用这类代理:
|
|
221
|
+
|
|
222
|
+
1. 将“网络代理地址”(`tools.web_egress.proxy_url`)设为代理的 HTTP 端口,例如 `http://127.0.0.1:7890`。
|
|
223
|
+
2. 将“网络代理 DNS”(`tools.web_egress.proxy_dns`)设为 `remote`。
|
|
224
|
+
|
|
225
|
+
```yaml
|
|
226
|
+
tools:
|
|
227
|
+
web_egress:
|
|
228
|
+
proxy_url: http://127.0.0.1:7890
|
|
229
|
+
proxy_dns: remote
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
设为 `remote` 后,iCode 把主机名交给代理,最终连接哪个地址由代理决定。对主机名拦截私有地址和其他非公网目标因此成为代理的职责,而不再由 iCode 负责。其他规则仍然有效:仅限 HTTPS、来源列表、重定向检查,以及按主机名进行的 TLS 证书校验。直接写成非公网地址的 URL(例如 `https://127.0.0.1` 或 `https://localhost`)仍会被拒绝,除非来源列在 `private_origins` 中。URL 中直接写出的 IPv6 地址仍然无法通过代理访问,会返回 `proxy_ipv6_unsupported` 错误。
|
|
233
|
+
|
|
234
|
+
iCode 不会自行切换到 `remote`。把 fake-IP 地址段加入 `private_origins` 也不能替代这一设置:列表只接受单个来源,而放行整个地址段还会让解析到你自己网络的主机名一并通过。
|
|
235
|
+
|
|
236
|
+
## 按域名筛选搜索结果
|
|
237
|
+
|
|
238
|
+
智能体可以用 `allowed_domains` 限定搜索范围,或用 `blocked_domains` 排除域名,但两者不能同时使用。域名同时涵盖其子域名。iCode 始终自行检查结果,提供方能提供多少帮助则因提供方而异:
|
|
239
|
+
|
|
240
|
+
- Tavily 和 Exa API 自行按域名筛选。
|
|
241
|
+
- Exa 公开端点不支持筛选,因此 iCode 向其请求更多结果,只保留匹配的结果。
|
|
242
|
+
- 其他提供方会在搜索词中收到 `site:` 和 `-site:` 条件。
|
|
243
|
+
|
|
244
|
+
筛选移除了结果时,搜索输出会报告移除的数量。
|
|
245
|
+
|
|
246
|
+
## 时间限制与重试
|
|
247
|
+
|
|
248
|
+
| 设置 | 默认值 | 含义 |
|
|
249
|
+
| --- | --- | --- |
|
|
250
|
+
| 搜索 `timeout_seconds` | 30 秒 | 整个搜索调用的截止时间,包括等待空闲连接名额的时间 |
|
|
251
|
+
| 读取 `timeout_seconds` | 60 秒 | 整个网页读取调用的截止时间 |
|
|
252
|
+
|
|
253
|
+
在一次搜索中,剩余的每个提供方平分剩下的时间。临时故障(连接错误,或 HTTP 5xx、408、429)会在该份时间内重试一次。用完时间的提供方会把搜索交给 `fallback_chain` 中的下一个提供方。
|
|
254
|
+
|
|
255
|
+
可以在用户 `settings.yaml` 中设置这些限制(`tools.web_search.timeout_seconds` 和 `tools.web_fetch.timeout_seconds`,1~120 秒),也可以在配置文件的 `tools.web_search` 和 `tools.web_fetch` 下为单个智能体设置。
|
|
256
|
+
|
|
257
|
+
## 网页读取与搜索结果的限制
|
|
258
|
+
|
|
259
|
+
- `web_fetch` 用 GET 读取一个 URL,接受文本、HTML、JSON 和 XML。HTML 在移除脚本、样式、表单和隐藏模板后转换为 Markdown。PDF、图片及其他二进制文件会被拒绝,错误响应的正文不会返回。
|
|
260
|
+
- 智能体传给 `web_fetch` 的 `prompt` 会显示给你,并作为关注重点与页面一起提供给智能体。不会有第二个模型读取页面。
|
|
261
|
+
- 同站重定向(协议和端口相同,仅多或少 `www.` 前缀)最多跟随 2 次,每次都按网络规则检查。重定向到其他网站时,iCode 会把新 URL 报告给智能体,由智能体显式读取。
|
|
262
|
+
- 响应大小限制为 2 MiB,传输大小和解压后大小都受此限制。网页读取以及 Bing 和 DuckDuckGo 适配器只接受 gzip 压缩或未压缩的响应。
|
|
263
|
+
- 读取的页面默认最多返回 16,000 个词元(`tools.web_fetch.max_tokens`,最多 64,000)。智能体可以要求更少,但不能更多。搜索输出限制在约 8,000 个词元。
|
|
264
|
+
- 读取过的页面在 15 分钟内会被复用(最多 64 个页面、16 MiB);仅 `#fragment` 不同的 URL 共用一份。
|
|
265
|
+
- 网络搜索和网页读取在每个智能体中共享 3 个并发连接;一轮对话中,智能体最多搜索 20 次。
|
|
266
|
+
- iCode 不执行 JavaScript,不读取 `robots.txt`,也不对页面做摘要。可以用 `denied_origins` 阻止 `web_fetch` 访问特定来源。每个条目只精确匹配一个来源,不包括子域名或 `www.` 变体,需要的每一个都要单独列出。
|
|
267
|
+
|
|
268
|
+
搜索结果和页面文本来自外部来源,iCode 会向智能体标明它们是不可信的数据;使用重要信息前,应核对来源链接。
|
|
269
|
+
|
|
270
|
+
## 由提供方运行的搜索
|
|
271
|
+
|
|
272
|
+
部分模型服务可以自行运行网络搜索。模型配置在 `chat_options` 中声明此类工具时(例如 `{"tools": [{"type": "web_search"}]}`),提供方的工具会占用该名称。如果智能体也包含对应的 iCode 工具,本地工具会在该次运行中停用,iCode 会显示一次提示。该规则按名称生效:由提供方运行的 `web_search` 不影响本地的 `web_fetch`。
|
|
273
|
+
|
|
274
|
+
由提供方运行的搜索在模型提供方一侧执行,因此不受 iCode 审批规则和网络设置约束。如需改用 iCode 自己的工具,请从模型的 `chat_options` 中删除该声明。
|
|
275
|
+
|
|
276
|
+
## 网络工具没有出现时
|
|
277
|
+
|
|
278
|
+
如果 iCode 无法为某个智能体准备网络工具(例如缺少密钥变量,或自定义端点未授权),该智能体仍会启动,只是不包含网络工具,iCode 会显示一条警告,写明智能体名称和原因。修正配置后,重新保存智能体或重启 iCode。
|
|
279
|
+
|
|
280
|
+
另外请检查:
|
|
281
|
+
|
|
282
|
+
- 智能体的 `tools.builtins` 包含 `web_search` 或 `web_fetch`。
|
|
283
|
+
- 工具的模式不是 `off`:即配置文件中的 `tools.web_search.mode` 或 `tools.web_fetch.mode`;配置文件未设置时,为“设置”中的“网络搜索模式”或“网页读取模式”。
|
|
284
|
+
- 模型配置没有声明同名的、由提供方运行的网络工具。
|
|
285
|
+
|
|
286
|
+
如需查看已加载的工具,在输入栏中输入 `/runtime`;参阅[工具类别和名称](../../reference/tool-kinds-and-names.md)。
|