illusion-code 0.1.4__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.
Files changed (443) hide show
  1. {illusion_code-0.1.4 → illusion_code-0.1.5}/PKG-INFO +191 -10
  2. {illusion_code-0.1.4 → illusion_code-0.1.5}/README.md +190 -9
  3. {illusion_code-0.1.4 → illusion_code-0.1.5}/README.zh-CN.md +190 -9
  4. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/package-lock.json +2 -2
  5. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/package.json +1 -1
  6. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/ModalHost.tsx +5 -1
  7. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/version.ts +1 -1
  8. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/package-lock.json +2 -2
  9. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/package.json +1 -1
  10. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/version.ts +1 -1
  11. {illusion_code-0.1.4 → illusion_code-0.1.5}/pyproject.toml +1 -1
  12. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/__init__.py +1 -1
  13. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/registry.py +4 -0
  14. illusion_code-0.1.5/src/illusion/commands/sandbox.py +126 -0
  15. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/session.py +46 -19
  16. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/settings.py +9 -3
  17. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/config/i18n.py +33 -1
  18. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/config/settings.py +53 -6
  19. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/engine/query.py +59 -1
  20. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/permissions/checker.py +58 -0
  21. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/platforms.py +1 -1
  22. illusion_code-0.1.5/src/illusion/sandbox/__init__.py +32 -0
  23. illusion_code-0.1.5/src/illusion/sandbox/adapter.py +286 -0
  24. illusion_code-0.1.5/src/illusion/sandbox/platforms/__init__.py +1 -0
  25. illusion_code-0.1.5/src/illusion/sandbox/platforms/base.py +68 -0
  26. illusion_code-0.1.5/src/illusion/sandbox/platforms/linux.py +68 -0
  27. illusion_code-0.1.5/src/illusion/sandbox/platforms/macos.py +128 -0
  28. illusion_code-0.1.5/src/illusion/sandbox/platforms/windows.py +182 -0
  29. illusion_code-0.1.5/src/illusion/sandbox/proxy/__init__.py +1 -0
  30. illusion_code-0.1.5/src/illusion/sandbox/proxy/env_vars.py +57 -0
  31. illusion_code-0.1.5/src/illusion/sandbox/runtime.py +211 -0
  32. illusion_code-0.1.5/src/illusion/sandbox/symlink_protection.py +75 -0
  33. illusion_code-0.1.5/src/illusion/sandbox/utils.py +90 -0
  34. illusion_code-0.1.5/src/illusion/sandbox/violation_store.py +88 -0
  35. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/file_history.py +28 -22
  36. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/backend_host.py +62 -14
  37. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/runtime.py +5 -1
  38. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/web/ws_host.py +62 -14
  39. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/utils/shell.py +26 -18
  40. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_platforms.py +1 -1
  41. illusion_code-0.1.5/tests/test_sandbox/test_adapter.py +118 -0
  42. illusion_code-0.1.5/tests/test_sandbox/test_config_schema.py +92 -0
  43. illusion_code-0.1.5/tests/test_sandbox/test_platform_linux.py +49 -0
  44. illusion_code-0.1.5/tests/test_sandbox/test_platform_macos.py +39 -0
  45. illusion_code-0.1.5/tests/test_sandbox/test_platform_windows.py +32 -0
  46. illusion_code-0.1.5/tests/test_sandbox/test_proxy_env_vars.py +30 -0
  47. illusion_code-0.1.5/tests/test_sandbox/test_runtime.py +49 -0
  48. illusion_code-0.1.5/tests/test_sandbox/test_symlink_protection.py +46 -0
  49. illusion_code-0.1.5/tests/test_sandbox/test_utils.py +60 -0
  50. illusion_code-0.1.5/tests/test_sandbox/test_violation_store.py +55 -0
  51. illusion_code-0.1.4/src/illusion/sandbox/__init__.py +0 -29
  52. illusion_code-0.1.4/src/illusion/sandbox/adapter.py +0 -174
  53. illusion_code-0.1.4/tests/test_sandbox/test_adapter.py +0 -115
  54. {illusion_code-0.1.4 → illusion_code-0.1.5}/.github/workflows/publish.yml +0 -0
  55. {illusion_code-0.1.4 → illusion_code-0.1.5}/.gitignore +0 -0
  56. {illusion_code-0.1.4 → illusion_code-0.1.5}/.python-version +0 -0
  57. {illusion_code-0.1.4 → illusion_code-0.1.5}/LICENSE +0 -0
  58. {illusion_code-0.1.4 → illusion_code-0.1.5}/docs/images/image1.png +0 -0
  59. {illusion_code-0.1.4 → illusion_code-0.1.5}/docs/images/image2.png +0 -0
  60. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/build.mjs +0 -0
  61. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/App.tsx +0 -0
  62. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/CommandPicker.tsx +0 -0
  63. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/Composer.tsx +0 -0
  64. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/ComposerController.tsx +0 -0
  65. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/ConversationView.tsx +0 -0
  66. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/Footer.tsx +0 -0
  67. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/MarkdownContent.tsx +0 -0
  68. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/MarkdownTable.tsx +0 -0
  69. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/MultilineTextInput.tsx +0 -0
  70. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/PromptInput.tsx +0 -0
  71. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/SelectModal.tsx +0 -0
  72. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/SidePanel.tsx +0 -0
  73. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/Spinner.tsx +0 -0
  74. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/StatusBar.tsx +0 -0
  75. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/SwarmPanel.tsx +0 -0
  76. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/TodoPanel.tsx +0 -0
  77. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/ToolCallDisplay.tsx +0 -0
  78. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/TranscriptPane.tsx +0 -0
  79. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/components/WelcomeBanner.tsx +0 -0
  80. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/hooks/useAnimationFrame.ts +0 -0
  81. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/hooks/useBackendSession.ts +0 -0
  82. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/hooks/useBlink.ts +0 -0
  83. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/hooks/useTerminalSize.ts +0 -0
  84. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/i18n.ts +0 -0
  85. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/index.tsx +0 -0
  86. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/theme/ThemeContext.tsx +0 -0
  87. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/theme/builtinThemes.ts +0 -0
  88. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/ToolInterface.ts +0 -0
  89. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/AgentTool.ts +0 -0
  90. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/BashTool.ts +0 -0
  91. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/CronTool.ts +0 -0
  92. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/EditTool.ts +0 -0
  93. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/GenericTool.ts +0 -0
  94. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/LspTool.ts +0 -0
  95. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/McpTool.ts +0 -0
  96. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/NotebookTool.ts +0 -0
  97. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/PlanTool.ts +0 -0
  98. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/ReadTool.ts +0 -0
  99. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/SearchTool.ts +0 -0
  100. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/SkillTool.ts +0 -0
  101. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/TaskTool.ts +0 -0
  102. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/WebTool.ts +0 -0
  103. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/WorktreeTool.ts +0 -0
  104. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/implementations/WriteTool.ts +0 -0
  105. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/tools/registry.ts +0 -0
  106. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/types.ts +0 -0
  107. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/utils/markdown.ts +0 -0
  108. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/src/utils/thinking.ts +0 -0
  109. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/terminal/tsconfig.json +0 -0
  110. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/index.html +0 -0
  111. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/postcss.config.js +0 -0
  112. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/App.tsx +0 -0
  113. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/components/ChatArea.tsx +0 -0
  114. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/components/MessageBubble.tsx +0 -0
  115. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/components/ModalCard.tsx +0 -0
  116. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/components/PromptInput.tsx +0 -0
  117. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/components/RightPanel.tsx +0 -0
  118. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/components/Sidebar.tsx +0 -0
  119. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/components/TodoPanel.tsx +0 -0
  120. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/components/Toolbar.tsx +0 -0
  121. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/components/WelcomeScreen.tsx +0 -0
  122. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/hooks/useWebSocketSession.ts +0 -0
  123. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/i18n.ts +0 -0
  124. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/index.css +0 -0
  125. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/main.tsx +0 -0
  126. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/remarkSuperscript.ts +0 -0
  127. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/types/protocol.ts +0 -0
  128. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/src/vite-env.d.ts +0 -0
  129. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/tailwind.config.js +0 -0
  130. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/tsconfig.json +0 -0
  131. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/tsconfig.node.json +0 -0
  132. {illusion_code-0.1.4 → illusion_code-0.1.5}/frontend/web/vite.config.ts +0 -0
  133. {illusion_code-0.1.4 → illusion_code-0.1.5}/scripts/build_frontend.py +0 -0
  134. {illusion_code-0.1.4 → illusion_code-0.1.5}/scripts/hatch_build.py +0 -0
  135. {illusion_code-0.1.4 → illusion_code-0.1.5}/scripts/publish.py +0 -0
  136. {illusion_code-0.1.4 → illusion_code-0.1.5}/scripts/sync_version.py +0 -0
  137. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/__main__.py +0 -0
  138. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/api/__init__.py +0 -0
  139. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/api/client.py +0 -0
  140. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/api/codex_client.py +0 -0
  141. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/api/compat.py +0 -0
  142. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/api/effort.py +0 -0
  143. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/api/errors.py +0 -0
  144. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/api/openai_client.py +0 -0
  145. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/api/provider.py +0 -0
  146. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/api/registry.py +0 -0
  147. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/api/usage.py +0 -0
  148. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/auth/__init__.py +0 -0
  149. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/auth/codex_oauth.py +0 -0
  150. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/auth/copilot.py +0 -0
  151. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/auth/external.py +0 -0
  152. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/auth/flows.py +0 -0
  153. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/auth/manager.py +0 -0
  154. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/auth/storage.py +0 -0
  155. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/bridge/__init__.py +0 -0
  156. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/bridge/manager.py +0 -0
  157. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/bridge/session_runner.py +0 -0
  158. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/bridge/types.py +0 -0
  159. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/bridge/work_secret.py +0 -0
  160. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/cli.py +0 -0
  161. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/__init__.py +0 -0
  162. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/auth.py +0 -0
  163. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/bridge.py +0 -0
  164. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/context.py +0 -0
  165. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/git.py +0 -0
  166. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/helpers.py +0 -0
  167. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/__init__.py +0 -0
  168. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/analysis/__init__.py +0 -0
  169. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/analysis/architecture.py +0 -0
  170. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/analysis/conventions.py +0 -0
  171. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/analysis/dependencies.py +0 -0
  172. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/analysis/key_modules.py +0 -0
  173. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/extraction/__init__.py +0 -0
  174. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/extraction/lsp_symbols.py +0 -0
  175. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/extraction/readme.py +0 -0
  176. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/extraction/scanner.py +0 -0
  177. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/generation/__init__.py +0 -0
  178. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/generation/claudemd.py +0 -0
  179. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/generation/illusionmd.py +0 -0
  180. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/generation/memory_template.py +0 -0
  181. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/generation/rules.py +0 -0
  182. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/generation/sections.py +0 -0
  183. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/orchestrator.py +0 -0
  184. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/init/types.py +0 -0
  185. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/mcp.py +0 -0
  186. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/memory.py +0 -0
  187. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/misc.py +0 -0
  188. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/model.py +0 -0
  189. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/plugin.py +0 -0
  190. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/rules.py +0 -0
  191. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/commands/types.py +0 -0
  192. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/config/__init__.py +0 -0
  193. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/config/paths.py +0 -0
  194. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/config/plan_file.py +0 -0
  195. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/coordinator/__init__.py +0 -0
  196. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/coordinator/agent_definitions.py +0 -0
  197. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/coordinator/coordinator_mode.py +0 -0
  198. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/engine/__init__.py +0 -0
  199. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/engine/cost_tracker.py +0 -0
  200. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/engine/messages.py +0 -0
  201. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/engine/query_engine.py +0 -0
  202. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/engine/stream_events.py +0 -0
  203. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/hooks/__init__.py +0 -0
  204. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/hooks/events.py +0 -0
  205. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/hooks/executor.py +0 -0
  206. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/hooks/hot_reload.py +0 -0
  207. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/hooks/loader.py +0 -0
  208. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/hooks/register_hooks.py +0 -0
  209. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/hooks/schemas.py +0 -0
  210. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/hooks/session_hooks.py +0 -0
  211. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/hooks/types.py +0 -0
  212. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/hooks/utils.py +0 -0
  213. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/mcp/__init__.py +0 -0
  214. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/mcp/client.py +0 -0
  215. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/mcp/config.py +0 -0
  216. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/mcp/types.py +0 -0
  217. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/memory/__init__.py +0 -0
  218. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/memory/manager.py +0 -0
  219. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/memory/memdir.py +0 -0
  220. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/memory/paths.py +0 -0
  221. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/memory/scan.py +0 -0
  222. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/memory/search.py +0 -0
  223. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/memory/types.py +0 -0
  224. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/output_styles/__init__.py +0 -0
  225. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/output_styles/loader.py +0 -0
  226. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/permissions/__init__.py +0 -0
  227. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/permissions/modes.py +0 -0
  228. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/plugins/__init__.py +0 -0
  229. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/plugins/installer.py +0 -0
  230. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/plugins/loader.py +0 -0
  231. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/plugins/options.py +0 -0
  232. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/plugins/schemas.py +0 -0
  233. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/plugins/types.py +0 -0
  234. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/prompts/__init__.py +0 -0
  235. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/prompts/claudemd.py +0 -0
  236. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/prompts/context.py +0 -0
  237. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/prompts/environment.py +0 -0
  238. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/prompts/system_prompt.py +0 -0
  239. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/__init__.py +0 -0
  240. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/compact/__init__.py +0 -0
  241. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/compact/auto_compact.py +0 -0
  242. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/compact/compact_core.py +0 -0
  243. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/compact/compact_prompt.py +0 -0
  244. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/compact/constants.py +0 -0
  245. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/compact/message_ops.py +0 -0
  246. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/compact/microcompact.py +0 -0
  247. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/compact/models.py +0 -0
  248. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/compact/token_utils.py +0 -0
  249. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/cron.py +0 -0
  250. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/cron_scheduler.py +0 -0
  251. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/lsp/__init__.py +0 -0
  252. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/lsp/client.py +0 -0
  253. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/lsp/config.py +0 -0
  254. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/lsp/manager.py +0 -0
  255. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/lsp/types.py +0 -0
  256. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/session_storage.py +0 -0
  257. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/services/token_estimation.py +0 -0
  258. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/__init__.py +0 -0
  259. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/__init__.py +0 -0
  260. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/batch.md +0 -0
  261. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/coding-guidelines.md +0 -0
  262. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/debug.md +0 -0
  263. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/loop.md +0 -0
  264. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/remember.md +0 -0
  265. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/simplify.md +0 -0
  266. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/skillify.md +0 -0
  267. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/stuck.md +0 -0
  268. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/update-config.md +0 -0
  269. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/bundled/content/verify.md +0 -0
  270. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/loader.py +0 -0
  271. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/registry.py +0 -0
  272. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/skills/types.py +0 -0
  273. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/state/__init__.py +0 -0
  274. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/state/app_state.py +0 -0
  275. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/state/store.py +0 -0
  276. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/swarm/__init__.py +0 -0
  277. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/swarm/agent_executor.py +0 -0
  278. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/swarm/in_process.py +0 -0
  279. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/swarm/subprocess_backend.py +0 -0
  280. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/swarm/team_helpers.py +0 -0
  281. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/swarm/types.py +0 -0
  282. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/swarm/worktree.py +0 -0
  283. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tasks/__init__.py +0 -0
  284. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tasks/local_agent_task.py +0 -0
  285. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tasks/local_shell_task.py +0 -0
  286. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tasks/manager.py +0 -0
  287. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tasks/stop_task.py +0 -0
  288. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tasks/types.py +0 -0
  289. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/__init__.py +0 -0
  290. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/agent_tool.py +0 -0
  291. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/ask_user_question_tool.py +0 -0
  292. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/base.py +0 -0
  293. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/bash_tool.py +0 -0
  294. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/config_tool.py +0 -0
  295. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/cron_tool.py +0 -0
  296. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/enter_plan_mode_tool.py +0 -0
  297. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/enter_worktree_tool.py +0 -0
  298. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/exit_plan_mode_tool.py +0 -0
  299. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/exit_worktree_tool.py +0 -0
  300. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/file_edit_tool.py +0 -0
  301. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/file_read_tool.py +0 -0
  302. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/file_write_tool.py +0 -0
  303. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/glob_tool.py +0 -0
  304. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/grep_tool.py +0 -0
  305. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/list_mcp_resources_tool.py +0 -0
  306. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/lsp_formatters.py +0 -0
  307. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/lsp_schemas.py +0 -0
  308. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/lsp_tool.py +0 -0
  309. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/mcp_auth_tool.py +0 -0
  310. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/mcp_tool.py +0 -0
  311. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/notebook_edit_tool.py +0 -0
  312. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/powershell_tool.py +0 -0
  313. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/read_mcp_resource_tool.py +0 -0
  314. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/repl_tool.py +0 -0
  315. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/send_message_tool.py +0 -0
  316. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/shell_common.py +0 -0
  317. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/skill_tool.py +0 -0
  318. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/sleep_tool.py +0 -0
  319. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/structured_output_tool.py +0 -0
  320. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/task_create_tool.py +0 -0
  321. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/task_get_tool.py +0 -0
  322. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/task_list_tool.py +0 -0
  323. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/task_output_tool.py +0 -0
  324. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/task_stop_tool.py +0 -0
  325. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/task_update_tool.py +0 -0
  326. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/team_create_tool.py +0 -0
  327. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/team_delete_tool.py +0 -0
  328. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/todo_write_tool.py +0 -0
  329. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/tool_search_tool.py +0 -0
  330. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/web_fetch_tool.py +0 -0
  331. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/tools/web_search_tool.py +0 -0
  332. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/__init__.py +0 -0
  333. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/app.py +0 -0
  334. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/input.py +0 -0
  335. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/output.py +0 -0
  336. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/permission_dialog.py +0 -0
  337. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/permission_store.py +0 -0
  338. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/protocol.py +0 -0
  339. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/react_launcher.py +0 -0
  340. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/textual_app.py +0 -0
  341. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/web/__init__.py +0 -0
  342. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/ui/web/server.py +0 -0
  343. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/utils/__init__.py +0 -0
  344. {illusion_code-0.1.4 → illusion_code-0.1.5}/src/illusion/utils/ripgrep.py +0 -0
  345. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/__init__.py +0 -0
  346. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/api/test_anthropic_client.py +0 -0
  347. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/api/test_client.py +0 -0
  348. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/api/test_codex_client.py +0 -0
  349. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/api/test_effort.py +0 -0
  350. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/api/test_fallback/346/217/220/347/244/272.py" +0 -0
  351. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/api/test_openai_client.py +0 -0
  352. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/commands/init/__init__.py +0 -0
  353. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/commands/init/test_claudemd.py +0 -0
  354. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/commands/init/test_orchestrator.py +0 -0
  355. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/commands/init/test_scanner.py +0 -0
  356. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/commands/init/test_sections.py +0 -0
  357. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/commands/test_effort_command.py +0 -0
  358. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/config/test_i18n.py +0 -0
  359. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/config/test_settings.py +0 -0
  360. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/conftest.py +0 -0
  361. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/engine/test_query_engine.py +0 -0
  362. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/fixtures/fake_mcp_server.py +0 -0
  363. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/integration/test_effort_integration.py +0 -0
  364. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/services/lsp/test_lsp_client.py +0 -0
  365. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/services/lsp/test_lsp_config.py +0 -0
  366. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/services/lsp/test_lsp_manager.py +0 -0
  367. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/services/lsp/test_lsp_types.py +0 -0
  368. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_api/__init__.py +0 -0
  369. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_api/test_client.py +0 -0
  370. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_api/test_codex_client.py +0 -0
  371. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_api/test_compat.py +0 -0
  372. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_api/test_openai_client.py +0 -0
  373. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_auth/test_external.py +0 -0
  374. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_bridge/test_core.py +0 -0
  375. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_bridge/test_session_flow.py +0 -0
  376. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_commands/__init__.py +0 -0
  377. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_commands/test_cli.py +0 -0
  378. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_commands/test_command_flows.py +0 -0
  379. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_commands/test_registry.py +0 -0
  380. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_config/__init__.py +0 -0
  381. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_config/test_paths.py +0 -0
  382. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_config/test_settings.py +0 -0
  383. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_coordinator/test_agent_definitions.py +0 -0
  384. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_coordinator/test_coordinator_mode.py +0 -0
  385. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_engine/__init__.py +0 -0
  386. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_engine/test_media_block.py +0 -0
  387. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_engine/test_query_engine.py +0 -0
  388. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_engine/test_tool_result_media.py +0 -0
  389. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_hooks/__init__.py +0 -0
  390. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_hooks/test_executor.py +0 -0
  391. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_hooks_skills_plugins_real.py +0 -0
  392. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_mcp/__init__.py +0 -0
  393. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_mcp/test_integration.py +0 -0
  394. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_mcp/test_stdio_flow.py +0 -0
  395. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_memory/__init__.py +0 -0
  396. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_memory/test_memdir.py +0 -0
  397. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_merged_prs_on_autoagent.py +0 -0
  398. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_permissions/__init__.py +0 -0
  399. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_permissions/test_checker.py +0 -0
  400. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_plugins/__init__.py +0 -0
  401. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_plugins/test_lifecycle_flow.py +0 -0
  402. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_plugins/test_loader.py +0 -0
  403. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_prompts/__init__.py +0 -0
  404. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_prompts/test_claudemd.py +0 -0
  405. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_prompts/test_environment.py +0 -0
  406. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_prompts/test_system_prompt.py +0 -0
  407. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_real_large_tasks.py +0 -0
  408. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_scripts/test_sync_version.py +0 -0
  409. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_services/test_compact.py +0 -0
  410. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_services/test_cron.py +0 -0
  411. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_services/test_cron_scheduler.py +0 -0
  412. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_services/test_session_storage.py +0 -0
  413. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_skills/test_loader.py +0 -0
  414. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_swarm/__init__.py +0 -0
  415. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_swarm/test_agent_executor.py +0 -0
  416. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_swarm/test_imports.py +0 -0
  417. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_swarm/test_in_process.py +0 -0
  418. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_swarm/test_types.py +0 -0
  419. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_swarm/test_worktree.py +0 -0
  420. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tasks/test_manager.py +0 -0
  421. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/__init__.py +0 -0
  422. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_agent_tool.py +0 -0
  423. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_core_tools.py +0 -0
  424. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_file_read_media.py +0 -0
  425. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_glob_tool.py +0 -0
  426. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_grep_tool.py +0 -0
  427. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_integration.py +0 -0
  428. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_integration_flows.py +0 -0
  429. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_mcp_auth_tool.py +0 -0
  430. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_ripgrep.py +0 -0
  431. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_shell_common.py +0 -0
  432. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_task_tools.py +0 -0
  433. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_team_tools.py +0 -0
  434. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_tools/test_web_fetch_tool.py +0 -0
  435. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_ui/__init__.py +0 -0
  436. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_ui/test_modes.py +0 -0
  437. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_ui/test_permission_store.py +0 -0
  438. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_ui/test_react_backend.py +0 -0
  439. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_ui/test_react_launcher.py +0 -0
  440. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_ui/test_textual_app.py +0 -0
  441. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_untested_features.py +0 -0
  442. {illusion_code-0.1.4 → illusion_code-0.1.5}/tests/test_utils/test_shell.py +0 -0
  443. {illusion_code-0.1.4 → 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.4
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
@@ -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
- "enabled_platforms": ["linux", "darwin"],
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": ["internal.company.com"]
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
- "allow_read": ["./src", "./docs"],
1296
+ "allow_write": [".", "./output"],
1297
+ "deny_write": [".git/hooks", ".env"],
1218
1298
  "deny_read": ["./secrets"],
1219
- "allow_write": ["./output"],
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
@@ -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
- "enabled_platforms": ["linux", "darwin"],
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": ["internal.company.com"]
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
- "allow_read": ["./src", "./docs"],
1248
+ "allow_write": [".", "./output"],
1249
+ "deny_write": [".git/hooks", ".env"],
1170
1250
  "deny_read": ["./secrets"],
1171
- "allow_write": ["./output"],
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