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