illusion-code 0.1.4__tar.gz → 0.1.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {illusion_code-0.1.4 → illusion_code-0.1.6}/PKG-INFO +193 -12
- {illusion_code-0.1.4 → illusion_code-0.1.6}/README.md +192 -11
- {illusion_code-0.1.4 → illusion_code-0.1.6}/README.zh-CN.md +192 -11
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/package-lock.json +2 -2
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/package.json +1 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/App.tsx +7 -147
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/ModalHost.tsx +177 -59
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/version.ts +1 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/package-lock.json +2 -2
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/package.json +1 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/components/ModalCard.tsx +135 -27
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/version.ts +1 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/pyproject.toml +1 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/__init__.py +1 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/auth/codex_oauth.py +4 -4
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/helpers.py +12 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/registry.py +4 -0
- illusion_code-0.1.6/src/illusion/commands/sandbox.py +126 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/session.py +46 -19
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/settings.py +9 -3
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/config/i18n.py +40 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/config/settings.py +53 -6
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/engine/query.py +59 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/permissions/checker.py +61 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/platforms.py +1 -1
- illusion_code-0.1.6/src/illusion/sandbox/__init__.py +32 -0
- illusion_code-0.1.6/src/illusion/sandbox/adapter.py +286 -0
- illusion_code-0.1.6/src/illusion/sandbox/platforms/__init__.py +1 -0
- illusion_code-0.1.6/src/illusion/sandbox/platforms/base.py +68 -0
- illusion_code-0.1.6/src/illusion/sandbox/platforms/linux.py +68 -0
- illusion_code-0.1.6/src/illusion/sandbox/platforms/macos.py +128 -0
- illusion_code-0.1.6/src/illusion/sandbox/platforms/windows.py +182 -0
- illusion_code-0.1.6/src/illusion/sandbox/proxy/__init__.py +1 -0
- illusion_code-0.1.6/src/illusion/sandbox/proxy/env_vars.py +57 -0
- illusion_code-0.1.6/src/illusion/sandbox/runtime.py +211 -0
- illusion_code-0.1.6/src/illusion/sandbox/symlink_protection.py +75 -0
- illusion_code-0.1.6/src/illusion/sandbox/utils.py +90 -0
- illusion_code-0.1.6/src/illusion/sandbox/violation_store.py +88 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/file_history.py +28 -22
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/swarm/agent_executor.py +3 -12
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/backend_host.py +100 -50
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/protocol.py +0 -1
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/runtime.py +43 -9
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/web/ws_host.py +99 -47
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/utils/ripgrep.py +10 -2
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/utils/shell.py +26 -18
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_platforms.py +1 -1
- illusion_code-0.1.6/tests/test_sandbox/test_adapter.py +118 -0
- illusion_code-0.1.6/tests/test_sandbox/test_config_schema.py +92 -0
- illusion_code-0.1.6/tests/test_sandbox/test_platform_linux.py +49 -0
- illusion_code-0.1.6/tests/test_sandbox/test_platform_macos.py +39 -0
- illusion_code-0.1.6/tests/test_sandbox/test_platform_windows.py +32 -0
- illusion_code-0.1.6/tests/test_sandbox/test_proxy_env_vars.py +30 -0
- illusion_code-0.1.6/tests/test_sandbox/test_runtime.py +49 -0
- illusion_code-0.1.6/tests/test_sandbox/test_symlink_protection.py +46 -0
- illusion_code-0.1.6/tests/test_sandbox/test_utils.py +60 -0
- illusion_code-0.1.6/tests/test_sandbox/test_violation_store.py +55 -0
- illusion_code-0.1.4/src/illusion/sandbox/__init__.py +0 -29
- illusion_code-0.1.4/src/illusion/sandbox/adapter.py +0 -174
- illusion_code-0.1.4/tests/test_sandbox/test_adapter.py +0 -115
- {illusion_code-0.1.4 → illusion_code-0.1.6}/.github/workflows/publish.yml +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/.gitignore +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/.python-version +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/LICENSE +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/docs/images/image1.png +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/docs/images/image2.png +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/build.mjs +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/CommandPicker.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/Composer.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/ComposerController.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/ConversationView.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/Footer.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/MarkdownContent.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/MarkdownTable.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/MultilineTextInput.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/PromptInput.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/SelectModal.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/SidePanel.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/Spinner.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/StatusBar.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/SwarmPanel.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/TodoPanel.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/ToolCallDisplay.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/TranscriptPane.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/components/WelcomeBanner.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/hooks/useAnimationFrame.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/hooks/useBackendSession.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/hooks/useBlink.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/hooks/useTerminalSize.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/i18n.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/index.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/theme/ThemeContext.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/theme/builtinThemes.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/ToolInterface.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/AgentTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/BashTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/CronTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/EditTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/GenericTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/LspTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/McpTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/NotebookTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/PlanTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/ReadTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/SearchTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/SkillTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/TaskTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/WebTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/WorktreeTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/implementations/WriteTool.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/tools/registry.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/types.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/utils/markdown.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/src/utils/thinking.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/terminal/tsconfig.json +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/index.html +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/postcss.config.js +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/App.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/components/ChatArea.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/components/MessageBubble.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/components/PromptInput.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/components/RightPanel.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/components/Sidebar.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/components/TodoPanel.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/components/Toolbar.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/components/WelcomeScreen.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/hooks/useWebSocketSession.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/i18n.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/index.css +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/main.tsx +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/remarkSuperscript.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/types/protocol.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/src/vite-env.d.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/tailwind.config.js +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/tsconfig.json +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/tsconfig.node.json +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/frontend/web/vite.config.ts +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/scripts/build_frontend.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/scripts/hatch_build.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/scripts/publish.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/scripts/sync_version.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/__main__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/api/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/api/client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/api/codex_client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/api/compat.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/api/effort.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/api/errors.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/api/openai_client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/api/provider.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/api/registry.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/api/usage.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/auth/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/auth/copilot.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/auth/external.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/auth/flows.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/auth/manager.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/auth/storage.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/bridge/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/bridge/manager.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/bridge/session_runner.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/bridge/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/bridge/work_secret.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/cli.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/auth.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/bridge.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/context.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/git.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/analysis/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/analysis/architecture.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/analysis/conventions.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/analysis/dependencies.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/analysis/key_modules.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/extraction/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/extraction/lsp_symbols.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/extraction/readme.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/extraction/scanner.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/generation/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/generation/claudemd.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/generation/illusionmd.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/generation/memory_template.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/generation/rules.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/generation/sections.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/orchestrator.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/init/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/mcp.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/memory.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/misc.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/model.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/plugin.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/rules.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/commands/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/config/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/config/paths.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/config/plan_file.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/coordinator/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/coordinator/agent_definitions.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/coordinator/coordinator_mode.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/engine/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/engine/cost_tracker.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/engine/messages.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/engine/query_engine.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/engine/stream_events.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/hooks/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/hooks/events.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/hooks/executor.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/hooks/hot_reload.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/hooks/loader.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/hooks/register_hooks.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/hooks/schemas.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/hooks/session_hooks.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/hooks/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/hooks/utils.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/mcp/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/mcp/client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/mcp/config.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/mcp/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/memory/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/memory/manager.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/memory/memdir.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/memory/paths.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/memory/scan.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/memory/search.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/memory/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/output_styles/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/output_styles/loader.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/permissions/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/permissions/modes.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/plugins/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/plugins/installer.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/plugins/loader.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/plugins/options.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/plugins/schemas.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/plugins/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/prompts/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/prompts/claudemd.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/prompts/context.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/prompts/environment.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/prompts/system_prompt.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/compact/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/compact/auto_compact.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/compact/compact_core.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/compact/compact_prompt.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/compact/constants.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/compact/message_ops.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/compact/microcompact.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/compact/models.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/compact/token_utils.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/cron.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/cron_scheduler.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/lsp/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/lsp/client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/lsp/config.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/lsp/manager.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/lsp/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/session_storage.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/services/token_estimation.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/content/batch.md +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/content/coding-guidelines.md +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/content/debug.md +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/content/loop.md +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/content/remember.md +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/content/simplify.md +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/content/skillify.md +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/content/stuck.md +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/content/update-config.md +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/bundled/content/verify.md +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/loader.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/registry.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/skills/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/state/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/state/app_state.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/state/store.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/swarm/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/swarm/in_process.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/swarm/subprocess_backend.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/swarm/team_helpers.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/swarm/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/swarm/worktree.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tasks/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tasks/local_agent_task.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tasks/local_shell_task.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tasks/manager.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tasks/stop_task.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tasks/types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/agent_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/ask_user_question_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/base.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/bash_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/config_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/cron_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/enter_plan_mode_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/enter_worktree_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/exit_plan_mode_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/exit_worktree_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/file_edit_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/file_read_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/file_write_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/glob_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/grep_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/list_mcp_resources_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/lsp_formatters.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/lsp_schemas.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/lsp_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/mcp_auth_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/mcp_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/notebook_edit_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/powershell_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/read_mcp_resource_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/repl_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/send_message_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/shell_common.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/skill_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/sleep_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/structured_output_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/task_create_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/task_get_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/task_list_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/task_output_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/task_stop_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/task_update_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/team_create_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/team_delete_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/todo_write_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/tool_search_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/web_fetch_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/tools/web_search_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/app.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/input.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/output.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/permission_dialog.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/permission_store.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/react_launcher.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/textual_app.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/web/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/ui/web/server.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/src/illusion/utils/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/api/test_anthropic_client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/api/test_client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/api/test_codex_client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/api/test_effort.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/api/test_fallback/346/217/220/347/244/272.py" +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/api/test_openai_client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/commands/init/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/commands/init/test_claudemd.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/commands/init/test_orchestrator.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/commands/init/test_scanner.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/commands/init/test_sections.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/commands/test_effort_command.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/config/test_i18n.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/config/test_settings.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/conftest.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/engine/test_query_engine.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/fixtures/fake_mcp_server.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/integration/test_effort_integration.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/services/lsp/test_lsp_client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/services/lsp/test_lsp_config.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/services/lsp/test_lsp_manager.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/services/lsp/test_lsp_types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_api/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_api/test_client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_api/test_codex_client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_api/test_compat.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_api/test_openai_client.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_auth/test_external.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_bridge/test_core.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_bridge/test_session_flow.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_commands/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_commands/test_cli.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_commands/test_command_flows.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_commands/test_registry.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_config/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_config/test_paths.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_config/test_settings.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_coordinator/test_agent_definitions.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_coordinator/test_coordinator_mode.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_engine/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_engine/test_media_block.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_engine/test_query_engine.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_engine/test_tool_result_media.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_hooks/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_hooks/test_executor.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_hooks_skills_plugins_real.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_mcp/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_mcp/test_integration.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_mcp/test_stdio_flow.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_memory/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_memory/test_memdir.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_merged_prs_on_autoagent.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_permissions/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_permissions/test_checker.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_plugins/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_plugins/test_lifecycle_flow.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_plugins/test_loader.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_prompts/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_prompts/test_claudemd.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_prompts/test_environment.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_prompts/test_system_prompt.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_real_large_tasks.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_scripts/test_sync_version.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_services/test_compact.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_services/test_cron.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_services/test_cron_scheduler.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_services/test_session_storage.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_skills/test_loader.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_swarm/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_swarm/test_agent_executor.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_swarm/test_imports.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_swarm/test_in_process.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_swarm/test_types.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_swarm/test_worktree.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tasks/test_manager.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_agent_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_core_tools.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_file_read_media.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_glob_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_grep_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_integration.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_integration_flows.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_mcp_auth_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_ripgrep.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_shell_common.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_task_tools.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_team_tools.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_tools/test_web_fetch_tool.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_ui/__init__.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_ui/test_modes.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_ui/test_permission_store.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_ui/test_react_backend.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_ui/test_react_launcher.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_ui/test_textual_app.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_untested_features.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/test_utils/test_shell.py +0 -0
- {illusion_code-0.1.4 → illusion_code-0.1.6}/tests/ui/test_backend_host.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: illusion-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: Open-source Python port of Claude Code - an AI-powered CLI coding assistant
|
|
5
5
|
Project-URL: Homepage, https://github.com/YunTaiHua/illusion-code
|
|
6
6
|
Project-URL: Repository, https://github.com/YunTaiHua/illusion-code
|
|
@@ -127,7 +127,7 @@ IllusionCode is an open-source AI-powered command-line programming assistant tha
|
|
|
127
127
|
### Requirements
|
|
128
128
|
|
|
129
129
|
- Python >= 3.10
|
|
130
|
-
- Node.js
|
|
130
|
+
- Node.js 18+
|
|
131
131
|
- Supports Windows, macOS, Linux
|
|
132
132
|
- Windows users: Auto-detect Git, no manual PATH configuration needed
|
|
133
133
|
|
|
@@ -141,7 +141,7 @@ The simplest way to install IllusionCode. Automatically installs both frontends
|
|
|
141
141
|
pip install illusion-code
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
No git clone
|
|
144
|
+
No git clone required — everything is included in the package.
|
|
145
145
|
|
|
146
146
|
#### Alternative: pip install from source
|
|
147
147
|
|
|
@@ -593,17 +593,29 @@ settings.json uses the `env_N` grouped format to manage multiple environment/pro
|
|
|
593
593
|
"sandbox": {
|
|
594
594
|
"enabled": false,
|
|
595
595
|
"fail_if_unavailable": false,
|
|
596
|
+
"auto_allow_bash_if_sandboxed": true,
|
|
597
|
+
"allow_unsandboxed_commands": true,
|
|
596
598
|
"enabled_platforms": [],
|
|
599
|
+
"excluded_commands": [],
|
|
597
600
|
"network": {
|
|
598
601
|
"allowed_domains": [],
|
|
599
|
-
"denied_domains": []
|
|
602
|
+
"denied_domains": [],
|
|
603
|
+
"allow_unix_sockets": [],
|
|
604
|
+
"allow_all_unix_sockets": false,
|
|
605
|
+
"allow_local_binding": false,
|
|
606
|
+
"http_proxy_port": null,
|
|
607
|
+
"socks_proxy_port": null
|
|
600
608
|
},
|
|
601
609
|
"filesystem": {
|
|
602
610
|
"allow_read": [],
|
|
603
611
|
"deny_read": [],
|
|
604
612
|
"allow_write": ["."],
|
|
605
613
|
"deny_write": []
|
|
606
|
-
}
|
|
614
|
+
},
|
|
615
|
+
"ignore_violations": {},
|
|
616
|
+
"enable_weaker_nested_sandbox": false,
|
|
617
|
+
"mandatory_deny_search_depth": 3,
|
|
618
|
+
"allow_git_config": false
|
|
607
619
|
},
|
|
608
620
|
"enabled_plugins": {},
|
|
609
621
|
"mcp_servers": {},
|
|
@@ -1203,26 +1215,195 @@ Supported environment variables:
|
|
|
1203
1215
|
|
|
1204
1216
|
### Sandbox Configuration
|
|
1205
1217
|
|
|
1218
|
+
The sandbox system provides OS-level isolation for shell commands, restricting filesystem and network access. Built with a Python-native runtime, it supports three platforms:
|
|
1219
|
+
|
|
1220
|
+
| Platform | Isolation Mechanism | Dependencies |
|
|
1221
|
+
|----------|-------------------|--------------|
|
|
1222
|
+
| Linux / WSL | bubblewrap (bwrap) + optional seccomp | `bwrap`, `socat` (for network isolation) |
|
|
1223
|
+
| macOS | Apple Seatbelt (sandbox-exec) | Built-in |
|
|
1224
|
+
| Windows | Job Objects + Restricted Tokens + Low Integrity | `pywin32` |
|
|
1225
|
+
|
|
1226
|
+
#### Basic Configuration
|
|
1227
|
+
|
|
1206
1228
|
```json
|
|
1207
1229
|
{
|
|
1208
1230
|
"sandbox": {
|
|
1209
1231
|
"enabled": true,
|
|
1210
1232
|
"fail_if_unavailable": false,
|
|
1211
|
-
"
|
|
1233
|
+
"auto_allow_bash_if_sandboxed": true,
|
|
1234
|
+
"allow_unsandboxed_commands": true,
|
|
1235
|
+
"enabled_platforms": [],
|
|
1236
|
+
"excluded_commands": []
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
```
|
|
1240
|
+
|
|
1241
|
+
#### Main Settings Fields
|
|
1242
|
+
|
|
1243
|
+
| Field | Type | Default | Description |
|
|
1244
|
+
|-------|------|---------|-------------|
|
|
1245
|
+
| `enabled` | `bool` | `false` | Enable sandbox. When enabled, shell commands run in an isolated environment with filesystem and network access constrained by `filesystem` and `network` settings |
|
|
1246
|
+
| `fail_if_unavailable` | `bool` | `false` | Exit with error if sandbox cannot start. When `true`, the program exits if dependencies like `bwrap`/`sandbox-exec`/`pywin32` are missing, instead of running without sandbox |
|
|
1247
|
+
| `auto_allow_bash_if_sandboxed` | `bool` | `true` | Auto-allow bash commands when sandboxed. When `false`, each bash command requires manual user confirmation |
|
|
1248
|
+
| `allow_unsandboxed_commands` | `bool` | `true` | Allow LLM to use `dangerouslyDisableSandbox: true` to bypass sandbox. When `false`, the LLM cannot bypass sandbox restrictions |
|
|
1249
|
+
| `enabled_platforms` | `list[str]` | `[]` | Restrict sandbox to specific platforms (empty list = all platforms). Options: `linux`, `macos`, `windows`, `wsl`. Example: `["linux", "wsl"]` enables sandbox only on Linux and WSL |
|
|
1250
|
+
| `excluded_commands` | `list[str]` | `[]` | Command patterns to exclude from sandboxing. Matched commands skip sandbox wrapping and execute directly (see excluded commands section below) |
|
|
1251
|
+
| `ignore_violations` | `dict` | `{}` | Violation ignore rules. Format: `{"command_pattern": ["path1", "path2"]}`. Matching violations are not recorded or reported |
|
|
1252
|
+
| `enable_weaker_nested_sandbox` | `bool` | `false` | Set to `true` when running inside Docker containers to skip `--proc /proc` mount and avoid nested sandbox conflicts |
|
|
1253
|
+
| `mandatory_deny_search_depth` | `int` | `3` | Max directory depth for searching dangerous files (e.g., `.bashrc`, `.gitconfig`) in project subdirectories. Range 1-10, only effective when `deny_write`/`deny_read` are configured |
|
|
1254
|
+
| `allow_git_config` | `bool` | `false` | Allow writes to `.git/config` files. By default, `.git/config` is protected to prevent malicious git configuration changes |
|
|
1255
|
+
|
|
1256
|
+
#### Network Configuration
|
|
1257
|
+
|
|
1258
|
+
```json
|
|
1259
|
+
{
|
|
1260
|
+
"sandbox": {
|
|
1212
1261
|
"network": {
|
|
1213
|
-
"allowed_domains": ["api.anthropic.com"],
|
|
1214
|
-
"denied_domains": ["
|
|
1215
|
-
|
|
1262
|
+
"allowed_domains": ["api.anthropic.com", "*.github.com"],
|
|
1263
|
+
"denied_domains": ["malicious.example.com"],
|
|
1264
|
+
"allow_unix_sockets": [],
|
|
1265
|
+
"allow_all_unix_sockets": false,
|
|
1266
|
+
"allow_local_binding": false,
|
|
1267
|
+
"http_proxy_port": null,
|
|
1268
|
+
"socks_proxy_port": null
|
|
1269
|
+
}
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
```
|
|
1273
|
+
|
|
1274
|
+
| Field | Type | Default | Description |
|
|
1275
|
+
|-------|------|---------|-------------|
|
|
1276
|
+
| `allowed_domains` | `list[str]` | `[]` | Allowed domains for network access (supports `*.example.com` wildcards). Unmatched domains trigger a confirmation prompt. On Linux, enforced via HTTP/SOCKS5 proxy + `--unshare-net`; on macOS via Seatbelt `allow network*` |
|
|
1277
|
+
| `denied_domains` | `list[str]` | `[]` | Denied domains for network access. Matched domains are blocked immediately without confirmation. Takes priority over `allowed_domains` |
|
|
1278
|
+
| `allow_unix_sockets` | `list[str]` | `[]` | macOS only: list of allowed Unix socket paths. Used to allow specific inter-process communication |
|
|
1279
|
+
| `allow_all_unix_sockets` | `bool` | `false` | Allow all Unix socket connections. Setting to `true` disables seccomp AF_UNIX blocking on Linux, allowing processes inside the sandbox to create Unix sockets freely |
|
|
1280
|
+
| `allow_local_binding` | `bool` | `false` | Allow processes inside the sandbox to bind to local ports. By default, sandbox blocks all port binding to prevent port conflicts and security risks |
|
|
1281
|
+
| `http_proxy_port` | `int?` | `null` | Use an external HTTP proxy port instead of starting a local proxy. Useful in environments with existing proxy infrastructure |
|
|
1282
|
+
| `socks_proxy_port` | `int?` | `null` | Use an external SOCKS5 proxy port instead of starting a local proxy |
|
|
1283
|
+
|
|
1284
|
+
> **Domain validation rules**:
|
|
1285
|
+
> - Rejects overly broad patterns like `*` or `*.com`
|
|
1286
|
+
> - `*.example.com` requires at least 2 dot-separated parts after `*.`
|
|
1287
|
+
> - Rejects patterns containing `://`, `/`, or `:`
|
|
1288
|
+
> - `localhost` is always allowed
|
|
1289
|
+
|
|
1290
|
+
#### Filesystem Configuration
|
|
1291
|
+
|
|
1292
|
+
```json
|
|
1293
|
+
{
|
|
1294
|
+
"sandbox": {
|
|
1216
1295
|
"filesystem": {
|
|
1217
|
-
"
|
|
1296
|
+
"allow_write": [".", "./output"],
|
|
1297
|
+
"deny_write": [".git/hooks", ".env"],
|
|
1218
1298
|
"deny_read": ["./secrets"],
|
|
1219
|
-
"
|
|
1220
|
-
"deny_write": ["./.git"]
|
|
1299
|
+
"allow_read": ["./secrets/public"]
|
|
1221
1300
|
}
|
|
1222
1301
|
}
|
|
1223
1302
|
}
|
|
1224
1303
|
```
|
|
1225
1304
|
|
|
1305
|
+
| Field | Type | Default | Description |
|
|
1306
|
+
|-------|------|---------|-------------|
|
|
1307
|
+
| `allow_write` | `list[str]` | `["."]` | Paths allowed for writing. On Linux/macOS, enforced at OS level via bwrap `--bind`/Seatbelt `allow file-write*`; on Windows, only checked at application layer |
|
|
1308
|
+
| `deny_write` | `list[str]` | `[]` | Paths denied for writing, takes priority over `allow_write`. Shows three-option confirmation dialog on match. On Linux, blocked via `--ro-bind /dev/null` mount; on macOS, blocked via Seatbelt `deny file-write*` |
|
|
1309
|
+
| `deny_read` | `list[str]` | `[]` | Paths denied for reading. Shows three-option confirmation dialog (Allow / Allow for session / Deny) on match. Affects `read_file`, `grep`, `glob`, `lsp` and other tools |
|
|
1310
|
+
| `allow_read` | `list[str]` | `[]` | Paths re-allowed for reading within denied regions. Example: `deny_read: ["~/.ssh"]` + `allow_read: ["~/.ssh/known_hosts"]` allows reading the known_hosts file |
|
|
1311
|
+
|
|
1312
|
+
#### Excluded Commands
|
|
1313
|
+
|
|
1314
|
+
`excluded_commands` supports three matching patterns:
|
|
1315
|
+
|
|
1316
|
+
```json
|
|
1317
|
+
{
|
|
1318
|
+
"sandbox": {
|
|
1319
|
+
"excluded_commands": [
|
|
1320
|
+
"npm test",
|
|
1321
|
+
"make:*",
|
|
1322
|
+
"git status"
|
|
1323
|
+
]
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
```
|
|
1327
|
+
|
|
1328
|
+
| Pattern | Example | Matches |
|
|
1329
|
+
|---------|---------|---------|
|
|
1330
|
+
| Exact match | `"npm test"` | `npm test` |
|
|
1331
|
+
| Wildcard | `"make:*"` | `make:build`, `make:clean` |
|
|
1332
|
+
| Prefix match | `"git push"` | `git push origin main` |
|
|
1333
|
+
|
|
1334
|
+
The system automatically splits compound commands (`&&`, `||`, `;`, `|`) and strips environment variable prefixes (`FOO=bar cmd` → `cmd`) and safe wrappers (`sudo`, `env`, `time`) to prevent bypass via `safe_cmd && evil_cmd`.
|
|
1335
|
+
|
|
1336
|
+
#### Sandbox Blocking Behavior
|
|
1337
|
+
|
|
1338
|
+
When an LLM operation triggers a sandbox restriction (e.g., reading a file in `deny_read`), the system shows a three-option confirmation dialog:
|
|
1339
|
+
|
|
1340
|
+
```
|
|
1341
|
+
┌─────────────────────────────────────────────┐
|
|
1342
|
+
│ Allow access to 'E:\PyCode\API.txt'? │
|
|
1343
|
+
│ │
|
|
1344
|
+
│ 1. Allow (single operation) │
|
|
1345
|
+
│ 2. Allow for session (resets on restart) │
|
|
1346
|
+
│ 3. Deny (block operation) │
|
|
1347
|
+
└─────────────────────────────────────────────┘
|
|
1348
|
+
```
|
|
1349
|
+
|
|
1350
|
+
| Option | Effect | Persistence |
|
|
1351
|
+
|--------|--------|-------------|
|
|
1352
|
+
| Allow | Allow this single operation | One-time only |
|
|
1353
|
+
| Allow for session | Allow this path for the current session | Resets on restart |
|
|
1354
|
+
| Deny | Block the operation, return error to LLM | None |
|
|
1355
|
+
|
|
1356
|
+
> **Difference from `permission.denied_tools`**:
|
|
1357
|
+
> - `sandbox.filesystem.deny_read` → Shows three-option confirmation dialog, user can choose to allow
|
|
1358
|
+
> - `permission.denied_tools` → Hard deny, terminates operation immediately with no confirmation
|
|
1359
|
+
|
|
1360
|
+
#### Filesystem Restriction Effects
|
|
1361
|
+
|
|
1362
|
+
| Field | Affected Tools | Enforcement Level |
|
|
1363
|
+
|-------|---------------|-------------------|
|
|
1364
|
+
| `deny_read` | `read_file`, `grep`, `glob`, `lsp` | Permission checker (application layer) |
|
|
1365
|
+
| `deny_write` | `edit`, `write`, `bash` (write ops) | Permission checker + OS-level sandbox |
|
|
1366
|
+
| `allow_write` | `bash` (write ops) | OS-level sandbox (bwrap/Seatbelt) |
|
|
1367
|
+
|
|
1368
|
+
- **Linux/macOS**: `deny_write` is enforced at both application layer and OS level (bwrap `--ro-bind`, Seatbelt `deny file-write*`)
|
|
1369
|
+
- **Windows**: Only enforced at application layer (Job Objects don't provide filesystem isolation)
|
|
1370
|
+
|
|
1371
|
+
#### Full Example
|
|
1372
|
+
|
|
1373
|
+
```json
|
|
1374
|
+
{
|
|
1375
|
+
"sandbox": {
|
|
1376
|
+
"enabled": true,
|
|
1377
|
+
"fail_if_unavailable": true,
|
|
1378
|
+
"auto_allow_bash_if_sandboxed": true,
|
|
1379
|
+
"allow_unsandboxed_commands": true,
|
|
1380
|
+
"excluded_commands": ["git status", "git log", "git diff"],
|
|
1381
|
+
"network": {
|
|
1382
|
+
"allowed_domains": ["*.github.com", "*.npmjs.org", "pypi.org", "*.pypi.org"]
|
|
1383
|
+
},
|
|
1384
|
+
"filesystem": {
|
|
1385
|
+
"allow_write": ["."],
|
|
1386
|
+
"deny_write": [".git/hooks", ".env", ".env.*"],
|
|
1387
|
+
"deny_read": ["~/.ssh", "~/.gnupg"]
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1391
|
+
```
|
|
1392
|
+
|
|
1393
|
+
#### Environment Variable Overrides
|
|
1394
|
+
|
|
1395
|
+
| Environment Variable | Overrides |
|
|
1396
|
+
|---------------------|-----------|
|
|
1397
|
+
| `ILLUSION_SANDBOX_ENABLED` | `sandbox.enabled` (`1`/`true`/`yes`/`on` = true) |
|
|
1398
|
+
| `ILLUSION_SANDBOX_FAIL_IF_UNAVAILABLE` | `sandbox.fail_if_unavailable` |
|
|
1399
|
+
|
|
1400
|
+
#### /sandbox Command
|
|
1401
|
+
|
|
1402
|
+
| Command | Description |
|
|
1403
|
+
|---------|-------------|
|
|
1404
|
+
| `/sandbox` or `/sandbox status` | Show current sandbox status |
|
|
1405
|
+
| `/sandbox exclude <pattern>` | Add an excluded command pattern |
|
|
1406
|
+
|
|
1226
1407
|
---
|
|
1227
1408
|
|
|
1228
1409
|
## 🔌 Extension Development
|
|
@@ -79,7 +79,7 @@ IllusionCode is an open-source AI-powered command-line programming assistant tha
|
|
|
79
79
|
### Requirements
|
|
80
80
|
|
|
81
81
|
- Python >= 3.10
|
|
82
|
-
- Node.js
|
|
82
|
+
- Node.js 18+
|
|
83
83
|
- Supports Windows, macOS, Linux
|
|
84
84
|
- Windows users: Auto-detect Git, no manual PATH configuration needed
|
|
85
85
|
|
|
@@ -93,7 +93,7 @@ The simplest way to install IllusionCode. Automatically installs both frontends
|
|
|
93
93
|
pip install illusion-code
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
No git clone
|
|
96
|
+
No git clone required — everything is included in the package.
|
|
97
97
|
|
|
98
98
|
#### Alternative: pip install from source
|
|
99
99
|
|
|
@@ -545,17 +545,29 @@ settings.json uses the `env_N` grouped format to manage multiple environment/pro
|
|
|
545
545
|
"sandbox": {
|
|
546
546
|
"enabled": false,
|
|
547
547
|
"fail_if_unavailable": false,
|
|
548
|
+
"auto_allow_bash_if_sandboxed": true,
|
|
549
|
+
"allow_unsandboxed_commands": true,
|
|
548
550
|
"enabled_platforms": [],
|
|
551
|
+
"excluded_commands": [],
|
|
549
552
|
"network": {
|
|
550
553
|
"allowed_domains": [],
|
|
551
|
-
"denied_domains": []
|
|
554
|
+
"denied_domains": [],
|
|
555
|
+
"allow_unix_sockets": [],
|
|
556
|
+
"allow_all_unix_sockets": false,
|
|
557
|
+
"allow_local_binding": false,
|
|
558
|
+
"http_proxy_port": null,
|
|
559
|
+
"socks_proxy_port": null
|
|
552
560
|
},
|
|
553
561
|
"filesystem": {
|
|
554
562
|
"allow_read": [],
|
|
555
563
|
"deny_read": [],
|
|
556
564
|
"allow_write": ["."],
|
|
557
565
|
"deny_write": []
|
|
558
|
-
}
|
|
566
|
+
},
|
|
567
|
+
"ignore_violations": {},
|
|
568
|
+
"enable_weaker_nested_sandbox": false,
|
|
569
|
+
"mandatory_deny_search_depth": 3,
|
|
570
|
+
"allow_git_config": false
|
|
559
571
|
},
|
|
560
572
|
"enabled_plugins": {},
|
|
561
573
|
"mcp_servers": {},
|
|
@@ -1155,26 +1167,195 @@ Supported environment variables:
|
|
|
1155
1167
|
|
|
1156
1168
|
### Sandbox Configuration
|
|
1157
1169
|
|
|
1170
|
+
The sandbox system provides OS-level isolation for shell commands, restricting filesystem and network access. Built with a Python-native runtime, it supports three platforms:
|
|
1171
|
+
|
|
1172
|
+
| Platform | Isolation Mechanism | Dependencies |
|
|
1173
|
+
|----------|-------------------|--------------|
|
|
1174
|
+
| Linux / WSL | bubblewrap (bwrap) + optional seccomp | `bwrap`, `socat` (for network isolation) |
|
|
1175
|
+
| macOS | Apple Seatbelt (sandbox-exec) | Built-in |
|
|
1176
|
+
| Windows | Job Objects + Restricted Tokens + Low Integrity | `pywin32` |
|
|
1177
|
+
|
|
1178
|
+
#### Basic Configuration
|
|
1179
|
+
|
|
1158
1180
|
```json
|
|
1159
1181
|
{
|
|
1160
1182
|
"sandbox": {
|
|
1161
1183
|
"enabled": true,
|
|
1162
1184
|
"fail_if_unavailable": false,
|
|
1163
|
-
"
|
|
1185
|
+
"auto_allow_bash_if_sandboxed": true,
|
|
1186
|
+
"allow_unsandboxed_commands": true,
|
|
1187
|
+
"enabled_platforms": [],
|
|
1188
|
+
"excluded_commands": []
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
```
|
|
1192
|
+
|
|
1193
|
+
#### Main Settings Fields
|
|
1194
|
+
|
|
1195
|
+
| Field | Type | Default | Description |
|
|
1196
|
+
|-------|------|---------|-------------|
|
|
1197
|
+
| `enabled` | `bool` | `false` | Enable sandbox. When enabled, shell commands run in an isolated environment with filesystem and network access constrained by `filesystem` and `network` settings |
|
|
1198
|
+
| `fail_if_unavailable` | `bool` | `false` | Exit with error if sandbox cannot start. When `true`, the program exits if dependencies like `bwrap`/`sandbox-exec`/`pywin32` are missing, instead of running without sandbox |
|
|
1199
|
+
| `auto_allow_bash_if_sandboxed` | `bool` | `true` | Auto-allow bash commands when sandboxed. When `false`, each bash command requires manual user confirmation |
|
|
1200
|
+
| `allow_unsandboxed_commands` | `bool` | `true` | Allow LLM to use `dangerouslyDisableSandbox: true` to bypass sandbox. When `false`, the LLM cannot bypass sandbox restrictions |
|
|
1201
|
+
| `enabled_platforms` | `list[str]` | `[]` | Restrict sandbox to specific platforms (empty list = all platforms). Options: `linux`, `macos`, `windows`, `wsl`. Example: `["linux", "wsl"]` enables sandbox only on Linux and WSL |
|
|
1202
|
+
| `excluded_commands` | `list[str]` | `[]` | Command patterns to exclude from sandboxing. Matched commands skip sandbox wrapping and execute directly (see excluded commands section below) |
|
|
1203
|
+
| `ignore_violations` | `dict` | `{}` | Violation ignore rules. Format: `{"command_pattern": ["path1", "path2"]}`. Matching violations are not recorded or reported |
|
|
1204
|
+
| `enable_weaker_nested_sandbox` | `bool` | `false` | Set to `true` when running inside Docker containers to skip `--proc /proc` mount and avoid nested sandbox conflicts |
|
|
1205
|
+
| `mandatory_deny_search_depth` | `int` | `3` | Max directory depth for searching dangerous files (e.g., `.bashrc`, `.gitconfig`) in project subdirectories. Range 1-10, only effective when `deny_write`/`deny_read` are configured |
|
|
1206
|
+
| `allow_git_config` | `bool` | `false` | Allow writes to `.git/config` files. By default, `.git/config` is protected to prevent malicious git configuration changes |
|
|
1207
|
+
|
|
1208
|
+
#### Network Configuration
|
|
1209
|
+
|
|
1210
|
+
```json
|
|
1211
|
+
{
|
|
1212
|
+
"sandbox": {
|
|
1164
1213
|
"network": {
|
|
1165
|
-
"allowed_domains": ["api.anthropic.com"],
|
|
1166
|
-
"denied_domains": ["
|
|
1167
|
-
|
|
1214
|
+
"allowed_domains": ["api.anthropic.com", "*.github.com"],
|
|
1215
|
+
"denied_domains": ["malicious.example.com"],
|
|
1216
|
+
"allow_unix_sockets": [],
|
|
1217
|
+
"allow_all_unix_sockets": false,
|
|
1218
|
+
"allow_local_binding": false,
|
|
1219
|
+
"http_proxy_port": null,
|
|
1220
|
+
"socks_proxy_port": null
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
}
|
|
1224
|
+
```
|
|
1225
|
+
|
|
1226
|
+
| Field | Type | Default | Description |
|
|
1227
|
+
|-------|------|---------|-------------|
|
|
1228
|
+
| `allowed_domains` | `list[str]` | `[]` | Allowed domains for network access (supports `*.example.com` wildcards). Unmatched domains trigger a confirmation prompt. On Linux, enforced via HTTP/SOCKS5 proxy + `--unshare-net`; on macOS via Seatbelt `allow network*` |
|
|
1229
|
+
| `denied_domains` | `list[str]` | `[]` | Denied domains for network access. Matched domains are blocked immediately without confirmation. Takes priority over `allowed_domains` |
|
|
1230
|
+
| `allow_unix_sockets` | `list[str]` | `[]` | macOS only: list of allowed Unix socket paths. Used to allow specific inter-process communication |
|
|
1231
|
+
| `allow_all_unix_sockets` | `bool` | `false` | Allow all Unix socket connections. Setting to `true` disables seccomp AF_UNIX blocking on Linux, allowing processes inside the sandbox to create Unix sockets freely |
|
|
1232
|
+
| `allow_local_binding` | `bool` | `false` | Allow processes inside the sandbox to bind to local ports. By default, sandbox blocks all port binding to prevent port conflicts and security risks |
|
|
1233
|
+
| `http_proxy_port` | `int?` | `null` | Use an external HTTP proxy port instead of starting a local proxy. Useful in environments with existing proxy infrastructure |
|
|
1234
|
+
| `socks_proxy_port` | `int?` | `null` | Use an external SOCKS5 proxy port instead of starting a local proxy |
|
|
1235
|
+
|
|
1236
|
+
> **Domain validation rules**:
|
|
1237
|
+
> - Rejects overly broad patterns like `*` or `*.com`
|
|
1238
|
+
> - `*.example.com` requires at least 2 dot-separated parts after `*.`
|
|
1239
|
+
> - Rejects patterns containing `://`, `/`, or `:`
|
|
1240
|
+
> - `localhost` is always allowed
|
|
1241
|
+
|
|
1242
|
+
#### Filesystem Configuration
|
|
1243
|
+
|
|
1244
|
+
```json
|
|
1245
|
+
{
|
|
1246
|
+
"sandbox": {
|
|
1168
1247
|
"filesystem": {
|
|
1169
|
-
"
|
|
1248
|
+
"allow_write": [".", "./output"],
|
|
1249
|
+
"deny_write": [".git/hooks", ".env"],
|
|
1170
1250
|
"deny_read": ["./secrets"],
|
|
1171
|
-
"
|
|
1172
|
-
"deny_write": ["./.git"]
|
|
1251
|
+
"allow_read": ["./secrets/public"]
|
|
1173
1252
|
}
|
|
1174
1253
|
}
|
|
1175
1254
|
}
|
|
1176
1255
|
```
|
|
1177
1256
|
|
|
1257
|
+
| Field | Type | Default | Description |
|
|
1258
|
+
|-------|------|---------|-------------|
|
|
1259
|
+
| `allow_write` | `list[str]` | `["."]` | Paths allowed for writing. On Linux/macOS, enforced at OS level via bwrap `--bind`/Seatbelt `allow file-write*`; on Windows, only checked at application layer |
|
|
1260
|
+
| `deny_write` | `list[str]` | `[]` | Paths denied for writing, takes priority over `allow_write`. Shows three-option confirmation dialog on match. On Linux, blocked via `--ro-bind /dev/null` mount; on macOS, blocked via Seatbelt `deny file-write*` |
|
|
1261
|
+
| `deny_read` | `list[str]` | `[]` | Paths denied for reading. Shows three-option confirmation dialog (Allow / Allow for session / Deny) on match. Affects `read_file`, `grep`, `glob`, `lsp` and other tools |
|
|
1262
|
+
| `allow_read` | `list[str]` | `[]` | Paths re-allowed for reading within denied regions. Example: `deny_read: ["~/.ssh"]` + `allow_read: ["~/.ssh/known_hosts"]` allows reading the known_hosts file |
|
|
1263
|
+
|
|
1264
|
+
#### Excluded Commands
|
|
1265
|
+
|
|
1266
|
+
`excluded_commands` supports three matching patterns:
|
|
1267
|
+
|
|
1268
|
+
```json
|
|
1269
|
+
{
|
|
1270
|
+
"sandbox": {
|
|
1271
|
+
"excluded_commands": [
|
|
1272
|
+
"npm test",
|
|
1273
|
+
"make:*",
|
|
1274
|
+
"git status"
|
|
1275
|
+
]
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
```
|
|
1279
|
+
|
|
1280
|
+
| Pattern | Example | Matches |
|
|
1281
|
+
|---------|---------|---------|
|
|
1282
|
+
| Exact match | `"npm test"` | `npm test` |
|
|
1283
|
+
| Wildcard | `"make:*"` | `make:build`, `make:clean` |
|
|
1284
|
+
| Prefix match | `"git push"` | `git push origin main` |
|
|
1285
|
+
|
|
1286
|
+
The system automatically splits compound commands (`&&`, `||`, `;`, `|`) and strips environment variable prefixes (`FOO=bar cmd` → `cmd`) and safe wrappers (`sudo`, `env`, `time`) to prevent bypass via `safe_cmd && evil_cmd`.
|
|
1287
|
+
|
|
1288
|
+
#### Sandbox Blocking Behavior
|
|
1289
|
+
|
|
1290
|
+
When an LLM operation triggers a sandbox restriction (e.g., reading a file in `deny_read`), the system shows a three-option confirmation dialog:
|
|
1291
|
+
|
|
1292
|
+
```
|
|
1293
|
+
┌─────────────────────────────────────────────┐
|
|
1294
|
+
│ Allow access to 'E:\PyCode\API.txt'? │
|
|
1295
|
+
│ │
|
|
1296
|
+
│ 1. Allow (single operation) │
|
|
1297
|
+
│ 2. Allow for session (resets on restart) │
|
|
1298
|
+
│ 3. Deny (block operation) │
|
|
1299
|
+
└─────────────────────────────────────────────┘
|
|
1300
|
+
```
|
|
1301
|
+
|
|
1302
|
+
| Option | Effect | Persistence |
|
|
1303
|
+
|--------|--------|-------------|
|
|
1304
|
+
| Allow | Allow this single operation | One-time only |
|
|
1305
|
+
| Allow for session | Allow this path for the current session | Resets on restart |
|
|
1306
|
+
| Deny | Block the operation, return error to LLM | None |
|
|
1307
|
+
|
|
1308
|
+
> **Difference from `permission.denied_tools`**:
|
|
1309
|
+
> - `sandbox.filesystem.deny_read` → Shows three-option confirmation dialog, user can choose to allow
|
|
1310
|
+
> - `permission.denied_tools` → Hard deny, terminates operation immediately with no confirmation
|
|
1311
|
+
|
|
1312
|
+
#### Filesystem Restriction Effects
|
|
1313
|
+
|
|
1314
|
+
| Field | Affected Tools | Enforcement Level |
|
|
1315
|
+
|-------|---------------|-------------------|
|
|
1316
|
+
| `deny_read` | `read_file`, `grep`, `glob`, `lsp` | Permission checker (application layer) |
|
|
1317
|
+
| `deny_write` | `edit`, `write`, `bash` (write ops) | Permission checker + OS-level sandbox |
|
|
1318
|
+
| `allow_write` | `bash` (write ops) | OS-level sandbox (bwrap/Seatbelt) |
|
|
1319
|
+
|
|
1320
|
+
- **Linux/macOS**: `deny_write` is enforced at both application layer and OS level (bwrap `--ro-bind`, Seatbelt `deny file-write*`)
|
|
1321
|
+
- **Windows**: Only enforced at application layer (Job Objects don't provide filesystem isolation)
|
|
1322
|
+
|
|
1323
|
+
#### Full Example
|
|
1324
|
+
|
|
1325
|
+
```json
|
|
1326
|
+
{
|
|
1327
|
+
"sandbox": {
|
|
1328
|
+
"enabled": true,
|
|
1329
|
+
"fail_if_unavailable": true,
|
|
1330
|
+
"auto_allow_bash_if_sandboxed": true,
|
|
1331
|
+
"allow_unsandboxed_commands": true,
|
|
1332
|
+
"excluded_commands": ["git status", "git log", "git diff"],
|
|
1333
|
+
"network": {
|
|
1334
|
+
"allowed_domains": ["*.github.com", "*.npmjs.org", "pypi.org", "*.pypi.org"]
|
|
1335
|
+
},
|
|
1336
|
+
"filesystem": {
|
|
1337
|
+
"allow_write": ["."],
|
|
1338
|
+
"deny_write": [".git/hooks", ".env", ".env.*"],
|
|
1339
|
+
"deny_read": ["~/.ssh", "~/.gnupg"]
|
|
1340
|
+
}
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
```
|
|
1344
|
+
|
|
1345
|
+
#### Environment Variable Overrides
|
|
1346
|
+
|
|
1347
|
+
| Environment Variable | Overrides |
|
|
1348
|
+
|---------------------|-----------|
|
|
1349
|
+
| `ILLUSION_SANDBOX_ENABLED` | `sandbox.enabled` (`1`/`true`/`yes`/`on` = true) |
|
|
1350
|
+
| `ILLUSION_SANDBOX_FAIL_IF_UNAVAILABLE` | `sandbox.fail_if_unavailable` |
|
|
1351
|
+
|
|
1352
|
+
#### /sandbox Command
|
|
1353
|
+
|
|
1354
|
+
| Command | Description |
|
|
1355
|
+
|---------|-------------|
|
|
1356
|
+
| `/sandbox` or `/sandbox status` | Show current sandbox status |
|
|
1357
|
+
| `/sandbox exclude <pattern>` | Add an excluded command pattern |
|
|
1358
|
+
|
|
1178
1359
|
---
|
|
1179
1360
|
|
|
1180
1361
|
## 🔌 Extension Development
|