illusion-code 0.1.3__tar.gz → 0.1.5__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.3 → illusion_code-0.1.5}/PKG-INFO +400 -53
- {illusion_code-0.1.3 → illusion_code-0.1.5}/README.md +399 -52
- {illusion_code-0.1.3 → illusion_code-0.1.5}/README.zh-CN.md +397 -50
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/package-lock.json +3 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/package.json +2 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/App.tsx +6 -3
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/ConversationView.tsx +49 -139
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/ModalHost.tsx +5 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/TodoPanel.tsx +13 -1
- illusion_code-0.1.5/frontend/terminal/src/components/ToolCallDisplay.tsx +116 -0
- illusion_code-0.1.5/frontend/terminal/src/hooks/useAnimationFrame.ts +63 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/hooks/useBackendSession.ts +45 -0
- illusion_code-0.1.5/frontend/terminal/src/hooks/useBlink.ts +31 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/ToolInterface.ts +62 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/AgentTool.ts +63 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/BashTool.ts +88 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/CronTool.ts +23 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/EditTool.ts +64 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/GenericTool.ts +49 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/LspTool.ts +35 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/McpTool.ts +25 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/NotebookTool.ts +25 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/PlanTool.ts +21 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/ReadTool.ts +74 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/SearchTool.ts +97 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/SkillTool.ts +22 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/TaskTool.ts +35 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/WebTool.ts +51 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/WorktreeTool.ts +18 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/implementations/WriteTool.ts +51 -0
- illusion_code-0.1.5/frontend/terminal/src/tools/registry.ts +189 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/types.ts +20 -0
- illusion_code-0.1.5/frontend/terminal/src/version.ts +9 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/package-lock.json +20 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/package.json +2 -1
- illusion_code-0.1.5/frontend/web/src/version.ts +9 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/tsconfig.json +2 -1
- illusion_code-0.1.5/frontend/web/tsconfig.node.json +13 -0
- illusion_code-0.1.5/frontend/web/vite.config.ts +32 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/pyproject.toml +1 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/scripts/hatch_build.py +19 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/scripts/publish.py +0 -1
- illusion_code-0.1.5/scripts/sync_version.py +138 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/__init__.py +1 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/registry.py +4 -0
- illusion_code-0.1.5/src/illusion/commands/sandbox.py +126 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/session.py +73 -28
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/settings.py +9 -3
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/config/i18n.py +33 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/config/settings.py +54 -8
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/engine/query.py +123 -32
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/engine/query_engine.py +26 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/engine/stream_events.py +22 -0
- illusion_code-0.1.5/src/illusion/hooks/__init__.py +59 -0
- illusion_code-0.1.5/src/illusion/hooks/events.py +43 -0
- illusion_code-0.1.5/src/illusion/hooks/executor.py +463 -0
- illusion_code-0.1.5/src/illusion/hooks/loader.py +115 -0
- illusion_code-0.1.5/src/illusion/hooks/register_hooks.py +58 -0
- illusion_code-0.1.5/src/illusion/hooks/schemas.py +129 -0
- illusion_code-0.1.5/src/illusion/hooks/session_hooks.py +116 -0
- illusion_code-0.1.5/src/illusion/hooks/types.py +168 -0
- illusion_code-0.1.5/src/illusion/hooks/utils.py +13 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/permissions/checker.py +58 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/platforms.py +1 -1
- illusion_code-0.1.5/src/illusion/plugins/loader.py +278 -0
- illusion_code-0.1.5/src/illusion/plugins/options.py +45 -0
- illusion_code-0.1.5/src/illusion/plugins/schemas.py +31 -0
- illusion_code-0.1.5/src/illusion/sandbox/__init__.py +32 -0
- illusion_code-0.1.5/src/illusion/sandbox/adapter.py +286 -0
- illusion_code-0.1.5/src/illusion/sandbox/platforms/__init__.py +1 -0
- illusion_code-0.1.5/src/illusion/sandbox/platforms/base.py +68 -0
- illusion_code-0.1.5/src/illusion/sandbox/platforms/linux.py +68 -0
- illusion_code-0.1.5/src/illusion/sandbox/platforms/macos.py +128 -0
- illusion_code-0.1.5/src/illusion/sandbox/platforms/windows.py +182 -0
- illusion_code-0.1.5/src/illusion/sandbox/proxy/__init__.py +1 -0
- illusion_code-0.1.5/src/illusion/sandbox/proxy/env_vars.py +57 -0
- illusion_code-0.1.5/src/illusion/sandbox/runtime.py +211 -0
- illusion_code-0.1.5/src/illusion/sandbox/symlink_protection.py +75 -0
- illusion_code-0.1.5/src/illusion/sandbox/utils.py +90 -0
- illusion_code-0.1.5/src/illusion/sandbox/violation_store.py +88 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/file_history.py +28 -22
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/session_storage.py +40 -3
- illusion_code-0.1.5/src/illusion/skills/loader.py +270 -0
- illusion_code-0.1.5/src/illusion/skills/types.py +31 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/swarm/agent_executor.py +11 -2
- illusion_code-0.1.5/src/illusion/tools/skill_tool.py +116 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/backend_host.py +166 -54
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/protocol.py +16 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/runtime.py +47 -11
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/web/ws_host.py +62 -14
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/utils/shell.py +26 -18
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/api/test_anthropic_client.py +0 -5
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/api/test_client.py +0 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/api/test_codex_client.py +0 -6
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/api/test_fallback/346/217/220/347/244/272.py +1 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/api/test_openai_client.py +0 -6
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/commands/init/test_orchestrator.py +1 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/commands/init/test_sections.py +0 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/commands/test_effort_command.py +2 -3
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/config/test_i18n.py +1 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/config/test_settings.py +0 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/engine/test_query_engine.py +0 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/integration/test_effort_integration.py +0 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/services/lsp/test_lsp_config.py +0 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/services/lsp/test_lsp_manager.py +0 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_auth/test_external.py +2 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_commands/test_registry.py +1 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_engine/test_query_engine.py +3 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_hooks/test_executor.py +5 -4
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_platforms.py +1 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_plugins/test_lifecycle_flow.py +2 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_plugins/test_loader.py +6 -6
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_prompts/test_environment.py +0 -1
- illusion_code-0.1.5/tests/test_sandbox/test_adapter.py +118 -0
- illusion_code-0.1.5/tests/test_sandbox/test_config_schema.py +92 -0
- illusion_code-0.1.5/tests/test_sandbox/test_platform_linux.py +49 -0
- illusion_code-0.1.5/tests/test_sandbox/test_platform_macos.py +39 -0
- illusion_code-0.1.5/tests/test_sandbox/test_platform_windows.py +32 -0
- illusion_code-0.1.5/tests/test_sandbox/test_proxy_env_vars.py +30 -0
- illusion_code-0.1.5/tests/test_sandbox/test_runtime.py +49 -0
- illusion_code-0.1.5/tests/test_sandbox/test_symlink_protection.py +46 -0
- illusion_code-0.1.5/tests/test_sandbox/test_utils.py +60 -0
- illusion_code-0.1.5/tests/test_sandbox/test_violation_store.py +55 -0
- illusion_code-0.1.5/tests/test_scripts/test_sync_version.py +103 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_services/test_compact.py +1 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_services/test_cron_scheduler.py +0 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_services/test_session_storage.py +52 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_swarm/test_agent_executor.py +0 -5
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_swarm/test_imports.py +0 -15
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_swarm/test_in_process.py +0 -2
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_core_tools.py +0 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_integration.py +0 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_shell_common.py +0 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_ui/test_react_backend.py +1 -1
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_untested_features.py +6 -8
- illusion_code-0.1.3/frontend/terminal/src/components/ToolCallDisplay.tsx +0 -226
- illusion_code-0.1.3/frontend/web/vite.config.ts +0 -15
- illusion_code-0.1.3/src/illusion/hooks/__init__.py +0 -67
- illusion_code-0.1.3/src/illusion/hooks/events.py +0 -43
- illusion_code-0.1.3/src/illusion/hooks/executor.py +0 -397
- illusion_code-0.1.3/src/illusion/hooks/loader.py +0 -133
- illusion_code-0.1.3/src/illusion/hooks/schemas.py +0 -121
- illusion_code-0.1.3/src/illusion/hooks/types.py +0 -86
- illusion_code-0.1.3/src/illusion/plugins/loader.py +0 -301
- illusion_code-0.1.3/src/illusion/plugins/schemas.py +0 -51
- illusion_code-0.1.3/src/illusion/sandbox/__init__.py +0 -29
- illusion_code-0.1.3/src/illusion/sandbox/adapter.py +0 -174
- illusion_code-0.1.3/src/illusion/skills/loader.py +0 -219
- illusion_code-0.1.3/src/illusion/skills/types.py +0 -24
- illusion_code-0.1.3/src/illusion/tools/skill_tool.py +0 -86
- illusion_code-0.1.3/tests/test_sandbox/test_adapter.py +0 -115
- {illusion_code-0.1.3 → illusion_code-0.1.5}/.github/workflows/publish.yml +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/.gitignore +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/.python-version +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/LICENSE +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/docs/images/image1.png +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/docs/images/image2.png +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/build.mjs +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/CommandPicker.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/Composer.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/ComposerController.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/Footer.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/MarkdownContent.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/MarkdownTable.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/MultilineTextInput.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/PromptInput.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/SelectModal.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/SidePanel.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/Spinner.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/StatusBar.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/SwarmPanel.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/TranscriptPane.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/components/WelcomeBanner.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/hooks/useTerminalSize.ts +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/i18n.ts +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/index.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/theme/ThemeContext.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/theme/builtinThemes.ts +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/utils/markdown.ts +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/src/utils/thinking.ts +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/terminal/tsconfig.json +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/index.html +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/postcss.config.js +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/App.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/components/ChatArea.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/components/MessageBubble.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/components/ModalCard.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/components/PromptInput.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/components/RightPanel.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/components/Sidebar.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/components/TodoPanel.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/components/Toolbar.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/components/WelcomeScreen.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/hooks/useWebSocketSession.ts +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/i18n.ts +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/index.css +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/main.tsx +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/remarkSuperscript.ts +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/types/protocol.ts +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/src/vite-env.d.ts +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/frontend/web/tailwind.config.js +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/scripts/build_frontend.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/__main__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/api/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/api/client.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/api/codex_client.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/api/compat.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/api/effort.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/api/errors.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/api/openai_client.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/api/provider.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/api/registry.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/api/usage.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/auth/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/auth/codex_oauth.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/auth/copilot.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/auth/external.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/auth/flows.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/auth/manager.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/auth/storage.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/bridge/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/bridge/manager.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/bridge/session_runner.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/bridge/types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/bridge/work_secret.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/cli.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/auth.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/bridge.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/context.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/git.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/helpers.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/analysis/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/analysis/architecture.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/analysis/conventions.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/analysis/dependencies.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/analysis/key_modules.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/extraction/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/extraction/lsp_symbols.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/extraction/readme.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/extraction/scanner.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/generation/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/generation/claudemd.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/generation/illusionmd.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/generation/memory_template.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/generation/rules.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/generation/sections.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/orchestrator.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/init/types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/mcp.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/memory.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/misc.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/model.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/plugin.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/rules.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/commands/types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/config/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/config/paths.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/config/plan_file.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/coordinator/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/coordinator/agent_definitions.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/coordinator/coordinator_mode.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/engine/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/engine/cost_tracker.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/engine/messages.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/hooks/hot_reload.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/mcp/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/mcp/client.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/mcp/config.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/mcp/types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/memory/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/memory/manager.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/memory/memdir.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/memory/paths.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/memory/scan.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/memory/search.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/memory/types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/output_styles/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/output_styles/loader.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/permissions/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/permissions/modes.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/plugins/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/plugins/installer.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/plugins/types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/prompts/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/prompts/claudemd.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/prompts/context.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/prompts/environment.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/prompts/system_prompt.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/compact/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/compact/auto_compact.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/compact/compact_core.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/compact/compact_prompt.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/compact/constants.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/compact/message_ops.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/compact/microcompact.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/compact/models.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/compact/token_utils.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/cron.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/cron_scheduler.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/lsp/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/lsp/client.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/lsp/config.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/lsp/manager.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/lsp/types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/services/token_estimation.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/batch.md +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/coding-guidelines.md +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/debug.md +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/loop.md +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/remember.md +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/simplify.md +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/skillify.md +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/stuck.md +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/update-config.md +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/verify.md +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/skills/registry.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/state/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/state/app_state.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/state/store.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/swarm/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/swarm/in_process.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/swarm/subprocess_backend.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/swarm/team_helpers.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/swarm/types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/swarm/worktree.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tasks/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tasks/local_agent_task.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tasks/local_shell_task.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tasks/manager.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tasks/stop_task.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tasks/types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/agent_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/ask_user_question_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/base.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/bash_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/config_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/cron_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/enter_plan_mode_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/enter_worktree_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/exit_plan_mode_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/exit_worktree_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/file_edit_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/file_read_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/file_write_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/glob_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/grep_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/list_mcp_resources_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/lsp_formatters.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/lsp_schemas.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/lsp_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/mcp_auth_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/mcp_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/notebook_edit_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/powershell_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/read_mcp_resource_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/repl_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/send_message_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/shell_common.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/sleep_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/structured_output_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/task_create_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/task_get_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/task_list_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/task_output_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/task_stop_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/task_update_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/team_create_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/team_delete_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/todo_write_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/tool_search_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/web_fetch_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/tools/web_search_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/app.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/input.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/output.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/permission_dialog.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/permission_store.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/react_launcher.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/textual_app.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/web/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/ui/web/server.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/utils/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/src/illusion/utils/ripgrep.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/api/test_effort.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/commands/init/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/commands/init/test_claudemd.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/commands/init/test_scanner.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/conftest.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/fixtures/fake_mcp_server.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/services/lsp/test_lsp_client.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/services/lsp/test_lsp_types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_api/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_api/test_client.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_api/test_codex_client.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_api/test_compat.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_api/test_openai_client.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_bridge/test_core.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_bridge/test_session_flow.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_commands/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_commands/test_cli.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_commands/test_command_flows.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_config/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_config/test_paths.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_config/test_settings.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_coordinator/test_agent_definitions.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_coordinator/test_coordinator_mode.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_engine/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_engine/test_media_block.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_engine/test_tool_result_media.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_hooks/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_hooks_skills_plugins_real.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_mcp/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_mcp/test_integration.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_mcp/test_stdio_flow.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_memory/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_memory/test_memdir.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_merged_prs_on_autoagent.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_permissions/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_permissions/test_checker.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_plugins/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_prompts/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_prompts/test_claudemd.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_prompts/test_system_prompt.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_real_large_tasks.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_services/test_cron.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_skills/test_loader.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_swarm/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_swarm/test_types.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_swarm/test_worktree.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tasks/test_manager.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_agent_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_file_read_media.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_glob_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_grep_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_integration_flows.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_mcp_auth_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_ripgrep.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_task_tools.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_team_tools.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_tools/test_web_fetch_tool.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_ui/__init__.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_ui/test_modes.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_ui/test_permission_store.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_ui/test_react_launcher.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_ui/test_textual_app.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/tests/test_utils/test_shell.py +0 -0
- {illusion_code-0.1.3 → illusion_code-0.1.5}/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.5
|
|
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
|
|
@@ -483,6 +483,8 @@ Built-in 7 specialized Agents:
|
|
|
483
483
|
| `MEMORY.md` | Project root | Project-level | Memory entry file |
|
|
484
484
|
| `.illusion/mcp/*.json` | Project root | Project-level | MCP server configuration |
|
|
485
485
|
| `.illusion/rules/*.md` | Project root | Project-level | Project rule files |
|
|
486
|
+
| `.illusion/plugins/*/` | Global or project | Per-plugin | Plugin directories with skills, hooks, MCP |
|
|
487
|
+
| `.illusion/skills/*/` | Global or project | Per-skill | Skill directories with SKILL.md |
|
|
486
488
|
|
|
487
489
|
#### Credentials File (credentials.json)
|
|
488
490
|
|
|
@@ -591,17 +593,29 @@ settings.json uses the `env_N` grouped format to manage multiple environment/pro
|
|
|
591
593
|
"sandbox": {
|
|
592
594
|
"enabled": false,
|
|
593
595
|
"fail_if_unavailable": false,
|
|
596
|
+
"auto_allow_bash_if_sandboxed": true,
|
|
597
|
+
"allow_unsandboxed_commands": true,
|
|
594
598
|
"enabled_platforms": [],
|
|
599
|
+
"excluded_commands": [],
|
|
595
600
|
"network": {
|
|
596
601
|
"allowed_domains": [],
|
|
597
|
-
"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
|
|
598
608
|
},
|
|
599
609
|
"filesystem": {
|
|
600
610
|
"allow_read": [],
|
|
601
611
|
"deny_read": [],
|
|
602
612
|
"allow_write": ["."],
|
|
603
613
|
"deny_write": []
|
|
604
|
-
}
|
|
614
|
+
},
|
|
615
|
+
"ignore_violations": {},
|
|
616
|
+
"enable_weaker_nested_sandbox": false,
|
|
617
|
+
"mandatory_deny_search_depth": 3,
|
|
618
|
+
"allow_git_config": false
|
|
605
619
|
},
|
|
606
620
|
"enabled_plugins": {},
|
|
607
621
|
"mcp_servers": {},
|
|
@@ -1035,56 +1049,128 @@ MCP servers from plugins are registered with the format `plugin_name:server_name
|
|
|
1035
1049
|
|
|
1036
1050
|
### Hook Configuration
|
|
1037
1051
|
|
|
1038
|
-
Hooks allow executing custom operations when specific events occur.
|
|
1039
|
-
|
|
1040
|
-
#### Supported Hook
|
|
1041
|
-
|
|
1042
|
-
|
|
|
1043
|
-
|
|
1044
|
-
| `
|
|
1045
|
-
| `
|
|
1046
|
-
| `
|
|
1047
|
-
|
|
1048
|
-
|
|
1052
|
+
Hooks allow executing custom operations when specific events occur. The hook system is fully aligned with Claude Code.
|
|
1053
|
+
|
|
1054
|
+
#### Supported Hook Events (27 events)
|
|
1055
|
+
|
|
1056
|
+
| Event | Matcher Field | Description |
|
|
1057
|
+
|-------|---------------|-------------|
|
|
1058
|
+
| `PreToolUse` | tool_name | Before tool execution |
|
|
1059
|
+
| `PostToolUse` | tool_name | After tool execution |
|
|
1060
|
+
| `PostToolUseFailure` | tool_name | After tool execution fails |
|
|
1061
|
+
| `PermissionDenied` | tool_name | After auto mode classifier denies |
|
|
1062
|
+
| `Notification` | notification_type | When notifications are sent |
|
|
1063
|
+
| `UserPromptSubmit` | — | When user submits a prompt |
|
|
1064
|
+
| `SessionStart` | source | New session started (startup/resume/clear/compact) |
|
|
1065
|
+
| `SessionEnd` | reason | Session ending |
|
|
1066
|
+
| `Stop` | — | Before Claude concludes response |
|
|
1067
|
+
| `StopFailure` | error | Turn ends due to API error |
|
|
1068
|
+
| `SubagentStart` | agent_type | Subagent started |
|
|
1069
|
+
| `SubagentStop` | agent_type | Subagent concludes |
|
|
1070
|
+
| `PreCompact` | trigger | Before compaction (manual/auto) |
|
|
1071
|
+
| `PostCompact` | trigger | After compaction |
|
|
1072
|
+
| `PermissionRequest` | tool_name | Permission dialog displayed |
|
|
1073
|
+
| `Setup` | trigger | Repo setup (init/maintenance) |
|
|
1074
|
+
| `ConfigChange` | source | Configuration file changes |
|
|
1075
|
+
| `InstructionsLoaded` | load_reason | Instruction file loaded |
|
|
1076
|
+
| `WorktreeCreate` | — | Create worktree |
|
|
1077
|
+
| `WorktreeRemove` | — | Remove worktree |
|
|
1078
|
+
| `CwdChanged` | — | Working directory changes |
|
|
1079
|
+
| `FileChanged` | — | Watched file changes |
|
|
1080
|
+
| `TaskCreated` | — | Task being created |
|
|
1081
|
+
| `TaskCompleted` | — | Task being completed |
|
|
1082
|
+
| `TeammateIdle` | — | Teammate about to idle |
|
|
1083
|
+
| `Elicitation` | mcp_server_name | MCP elicitation request |
|
|
1084
|
+
| `ElicitationResult` | mcp_server_name | After user responds to elicitation |
|
|
1085
|
+
|
|
1086
|
+
#### Hook Configuration Format
|
|
1087
|
+
|
|
1088
|
+
Hooks use a matcher-based structure (aligned with Claude Code):
|
|
1049
1089
|
|
|
1050
1090
|
```json
|
|
1051
1091
|
{
|
|
1052
1092
|
"hooks": {
|
|
1053
|
-
"
|
|
1093
|
+
"PreToolUse": [
|
|
1054
1094
|
{
|
|
1055
|
-
"
|
|
1056
|
-
"
|
|
1057
|
-
|
|
1058
|
-
|
|
1095
|
+
"matcher": "Bash",
|
|
1096
|
+
"hooks": [
|
|
1097
|
+
{
|
|
1098
|
+
"type": "command",
|
|
1099
|
+
"command": "echo 'Tool: $ARGUMENTS' >> /tmp/tool.log",
|
|
1100
|
+
"timeout": 30
|
|
1101
|
+
}
|
|
1102
|
+
]
|
|
1059
1103
|
}
|
|
1060
1104
|
],
|
|
1061
|
-
"
|
|
1105
|
+
"PostToolUse": [
|
|
1062
1106
|
{
|
|
1063
|
-
"
|
|
1064
|
-
"
|
|
1065
|
-
|
|
1066
|
-
|
|
1107
|
+
"matcher": "Write|Edit",
|
|
1108
|
+
"hooks": [
|
|
1109
|
+
{
|
|
1110
|
+
"type": "http",
|
|
1111
|
+
"url": "https://hooks.example.com/tool-complete",
|
|
1112
|
+
"headers": {"Authorization": "Bearer token"}
|
|
1113
|
+
}
|
|
1114
|
+
]
|
|
1067
1115
|
}
|
|
1068
1116
|
],
|
|
1069
|
-
"
|
|
1117
|
+
"UserPromptSubmit": [
|
|
1070
1118
|
{
|
|
1071
|
-
"
|
|
1072
|
-
"
|
|
1073
|
-
|
|
1119
|
+
"matcher": "",
|
|
1120
|
+
"hooks": [
|
|
1121
|
+
{
|
|
1122
|
+
"type": "prompt",
|
|
1123
|
+
"prompt": "Check if user input contains sensitive information"
|
|
1124
|
+
}
|
|
1125
|
+
]
|
|
1074
1126
|
}
|
|
1075
1127
|
]
|
|
1076
1128
|
}
|
|
1077
1129
|
}
|
|
1078
1130
|
```
|
|
1079
1131
|
|
|
1080
|
-
####
|
|
1132
|
+
#### Matcher Patterns
|
|
1133
|
+
|
|
1134
|
+
The `matcher` field filters when hooks run:
|
|
1135
|
+
|
|
1136
|
+
| Pattern | Example | Behavior |
|
|
1137
|
+
|---------|---------|----------|
|
|
1138
|
+
| Empty / `*` | `""` | Matches everything |
|
|
1139
|
+
| Exact match | `"Bash"` | Matches exact tool name |
|
|
1140
|
+
| Pipe-separated | `"Write\|Edit"` | Matches any in list |
|
|
1141
|
+
| Regex | `"^git .*"` | Regex match against tool name |
|
|
1142
|
+
|
|
1143
|
+
#### Hook Types
|
|
1081
1144
|
|
|
1082
|
-
| Type | Required
|
|
1083
|
-
|
|
1084
|
-
| `command` | command |
|
|
1085
|
-
| `prompt` | prompt | model
|
|
1086
|
-
| `http` | url | headers
|
|
1087
|
-
| `agent` | prompt | model
|
|
1145
|
+
| Type | Required | Optional | Description |
|
|
1146
|
+
|------|----------|----------|-------------|
|
|
1147
|
+
| `command` | `command` | `if`, `shell`, `timeout`, `statusMessage`, `once`, `async`, `asyncRewake` | Execute Shell command |
|
|
1148
|
+
| `prompt` | `prompt` | `if`, `model`, `timeout`, `statusMessage`, `once` | Use LLM for verification |
|
|
1149
|
+
| `http` | `url` | `if`, `timeout`, `headers`, `allowedEnvVars`, `statusMessage`, `once` | Send HTTP POST request |
|
|
1150
|
+
| `agent` | `prompt` | `if`, `model`, `timeout`, `statusMessage`, `once` | Use Agent for verification |
|
|
1151
|
+
|
|
1152
|
+
#### Common Hook Options
|
|
1153
|
+
|
|
1154
|
+
| Option | Type | Description |
|
|
1155
|
+
|--------|------|-------------|
|
|
1156
|
+
| `if` | string | Permission rule syntax filter (e.g. `"Bash(git *)"`) |
|
|
1157
|
+
| `timeout` | int | Timeout in seconds |
|
|
1158
|
+
| `once` | bool | If true, hook runs once then auto-removes |
|
|
1159
|
+
| `statusMessage` | string | Custom spinner message while hook runs |
|
|
1160
|
+
|
|
1161
|
+
#### Command Hook Environment Variables
|
|
1162
|
+
|
|
1163
|
+
Command hooks receive these environment variables:
|
|
1164
|
+
|
|
1165
|
+
| Variable | Description |
|
|
1166
|
+
|----------|-------------|
|
|
1167
|
+
| `CLAUDE_PROJECT_DIR` | Current working directory |
|
|
1168
|
+
| `CLAUDE_SESSION_ID` | Current session ID |
|
|
1169
|
+
| `CLAUDE_PLUGIN_ROOT` | Plugin installation directory (if from plugin) |
|
|
1170
|
+
| `CLAUDE_PLUGIN_DATA` | Plugin data directory |
|
|
1171
|
+
| `CLAUDE_ENV_FILE` | Write bash exports here to apply env to subsequent commands |
|
|
1172
|
+
|
|
1173
|
+
Use `$ARGUMENTS` in the command string to inject the hook input JSON.
|
|
1088
1174
|
|
|
1089
1175
|
---
|
|
1090
1176
|
|
|
@@ -1129,46 +1215,307 @@ Supported environment variables:
|
|
|
1129
1215
|
|
|
1130
1216
|
### Sandbox Configuration
|
|
1131
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
|
+
|
|
1132
1228
|
```json
|
|
1133
1229
|
{
|
|
1134
1230
|
"sandbox": {
|
|
1135
1231
|
"enabled": true,
|
|
1136
1232
|
"fail_if_unavailable": false,
|
|
1137
|
-
"
|
|
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": {
|
|
1138
1261
|
"network": {
|
|
1139
|
-
"allowed_domains": ["api.anthropic.com"],
|
|
1140
|
-
"denied_domains": ["
|
|
1141
|
-
|
|
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": {
|
|
1142
1295
|
"filesystem": {
|
|
1143
|
-
"
|
|
1296
|
+
"allow_write": [".", "./output"],
|
|
1297
|
+
"deny_write": [".git/hooks", ".env"],
|
|
1144
1298
|
"deny_read": ["./secrets"],
|
|
1145
|
-
"
|
|
1146
|
-
|
|
1299
|
+
"allow_read": ["./secrets/public"]
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
```
|
|
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"]
|
|
1147
1388
|
}
|
|
1148
1389
|
}
|
|
1149
1390
|
}
|
|
1150
1391
|
```
|
|
1151
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
|
+
|
|
1152
1407
|
---
|
|
1153
1408
|
|
|
1154
1409
|
## 🔌 Extension Development
|
|
1155
1410
|
|
|
1156
|
-
###
|
|
1411
|
+
### Plugin System
|
|
1157
1412
|
|
|
1158
|
-
|
|
1413
|
+
Plugins extend IllusionCode with skills, hooks, commands, and MCP servers. Plugin format is fully aligned with Claude Code.
|
|
1159
1414
|
|
|
1160
|
-
|
|
1161
|
-
- `POST_TOOL_USE` - After tool execution
|
|
1162
|
-
- `USER_PROMPT_SUBMIT` - After user prompt submission
|
|
1415
|
+
#### Plugin Directory Structure
|
|
1163
1416
|
|
|
1164
|
-
|
|
1417
|
+
```
|
|
1418
|
+
my-plugin/
|
|
1419
|
+
├── .claude-plugin/
|
|
1420
|
+
│ └── plugin.json # Plugin manifest
|
|
1421
|
+
├── skills/ # Skills (subdirs with SKILL.md)
|
|
1422
|
+
│ ├── my-skill/
|
|
1423
|
+
│ │ └── SKILL.md
|
|
1424
|
+
│ └── another-skill.md
|
|
1425
|
+
├── commands/ # Slash commands (.md files)
|
|
1426
|
+
├── agents/ # Agent definitions (.md files)
|
|
1427
|
+
├── hooks/
|
|
1428
|
+
│ └── hooks.json # Hook definitions
|
|
1429
|
+
├── .mcp.json # MCP server configuration
|
|
1430
|
+
└── settings.json # Plugin default settings
|
|
1431
|
+
```
|
|
1432
|
+
|
|
1433
|
+
#### Plugin Manifest (plugin.json)
|
|
1434
|
+
|
|
1435
|
+
```json
|
|
1436
|
+
{
|
|
1437
|
+
"name": "my-plugin",
|
|
1438
|
+
"version": "1.0.0",
|
|
1439
|
+
"description": "My custom plugin",
|
|
1440
|
+
"enabled_by_default": true,
|
|
1441
|
+
"skills_dir": "skills",
|
|
1442
|
+
"hooks_file": "hooks.json"
|
|
1443
|
+
}
|
|
1444
|
+
```
|
|
1445
|
+
|
|
1446
|
+
#### Plugin Installation
|
|
1447
|
+
|
|
1448
|
+
```bash
|
|
1449
|
+
# Install from local path
|
|
1450
|
+
illusion plugin install /path/to/my-plugin
|
|
1451
|
+
|
|
1452
|
+
# List installed plugins
|
|
1453
|
+
illusion plugin list
|
|
1454
|
+
|
|
1455
|
+
# Enable/disable
|
|
1456
|
+
illusion plugin enable my-plugin
|
|
1457
|
+
illusion plugin disable my-plugin
|
|
1458
|
+
|
|
1459
|
+
# Uninstall
|
|
1460
|
+
illusion plugin uninstall my-plugin
|
|
1461
|
+
```
|
|
1462
|
+
|
|
1463
|
+
Plugins are installed to `~/.illusion/plugins/` (user-level) or `.illusion/plugins/` (project-level).
|
|
1464
|
+
|
|
1465
|
+
#### Plugin Hooks (hooks/hooks.json)
|
|
1466
|
+
|
|
1467
|
+
```json
|
|
1468
|
+
{
|
|
1469
|
+
"hooks": {
|
|
1470
|
+
"SessionStart": [
|
|
1471
|
+
{
|
|
1472
|
+
"matcher": "startup|clear",
|
|
1473
|
+
"hooks": [
|
|
1474
|
+
{
|
|
1475
|
+
"type": "command",
|
|
1476
|
+
"command": "\"${CLAUDE_PLUGIN_ROOT}/hooks/init.cmd\""
|
|
1477
|
+
}
|
|
1478
|
+
]
|
|
1479
|
+
}
|
|
1480
|
+
]
|
|
1481
|
+
}
|
|
1482
|
+
}
|
|
1483
|
+
```
|
|
1484
|
+
|
|
1485
|
+
Plugin hooks support `${CLAUDE_PLUGIN_ROOT}` and `${CLAUDE_PLUGIN_DATA}` variable substitution.
|
|
1486
|
+
|
|
1487
|
+
#### Skill Frontmatter
|
|
1165
1488
|
|
|
1166
|
-
|
|
1489
|
+
Skills defined in SKILL.md files support these frontmatter fields:
|
|
1490
|
+
|
|
1491
|
+
```yaml
|
|
1492
|
+
---
|
|
1493
|
+
description: What this skill does
|
|
1494
|
+
allowed-tools: Bash, Read, Write
|
|
1495
|
+
model: claude-sonnet-4-6
|
|
1496
|
+
context: fork
|
|
1497
|
+
effort: high
|
|
1498
|
+
hooks:
|
|
1499
|
+
PreToolUse:
|
|
1500
|
+
- matcher: Bash
|
|
1501
|
+
hooks:
|
|
1502
|
+
- type: command
|
|
1503
|
+
command: echo check
|
|
1504
|
+
---
|
|
1505
|
+
```
|
|
1506
|
+
|
|
1507
|
+
| Field | Type | Description |
|
|
1508
|
+
|-------|------|-------------|
|
|
1509
|
+
| `description` | string | Skill description (shown in skill list) |
|
|
1510
|
+
| `allowed-tools` | string | Comma-separated list of allowed tools |
|
|
1511
|
+
| `model` | string | Model override for this skill |
|
|
1512
|
+
| `context` | string | `inline` (expand into conversation) or `fork` (sub-agent) |
|
|
1513
|
+
| `effort` | string | Reasoning effort override |
|
|
1514
|
+
| `hooks` | object | Hooks to register when skill is invoked |
|
|
1515
|
+
|
|
1516
|
+
### Hook System
|
|
1167
1517
|
|
|
1168
|
-
-
|
|
1169
|
-
- Commands
|
|
1170
|
-
- Hooks
|
|
1171
|
-
- MCP Servers
|
|
1518
|
+
See [Hook Configuration](#hook-configuration) for the full hook documentation with 27 events and matcher-based format.
|
|
1172
1519
|
|
|
1173
1520
|
## 🧪 Development & Testing
|
|
1174
1521
|
|