illusion-code 0.2.1__tar.gz → 0.2.3__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 (513) hide show
  1. {illusion_code-0.2.1 → illusion_code-0.2.3}/PKG-INFO +1 -1
  2. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/en/settings.md +26 -0
  3. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/zh-CN/extensions.md +208 -0
  4. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/zh-CN/project-files.md +44 -0
  5. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/zh-CN/settings.md +26 -0
  6. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/package-lock.json +2 -2
  7. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/package.json +1 -1
  8. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/App.tsx +6 -0
  9. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/version.ts +1 -1
  10. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/package-lock.json +2 -2
  11. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/package.json +1 -1
  12. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/App.tsx +14 -10
  13. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/components/MessageBubble.tsx +17 -7
  14. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/components/PromptInput.tsx +3 -3
  15. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/components/RightPanel.tsx +2 -2
  16. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/components/Sidebar.tsx +3 -3
  17. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/components/Toolbar.tsx +3 -3
  18. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/hooks/useWebSocketSession.ts +41 -6
  19. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/index.css +176 -71
  20. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/version.ts +1 -1
  21. illusion_code-0.2.3/frontend/web/tailwind.config.js +88 -0
  22. {illusion_code-0.2.1 → illusion_code-0.2.3}/pyproject.toml +1 -1
  23. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/__init__.py +1 -1
  24. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/cli.py +32 -2
  25. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/misc.py +47 -10
  26. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/rules.py +12 -1
  27. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/config/i18n.py +6 -0
  28. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/config/settings.py +1 -0
  29. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/hooks/loader.py +20 -1
  30. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/mcp/config.py +16 -0
  31. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/memory/manager.py +49 -6
  32. illusion_code-0.2.3/src/illusion/permissions/__init__.py +73 -0
  33. illusion_code-0.2.3/src/illusion/permissions/loader.py +85 -0
  34. illusion_code-0.2.3/src/illusion/permissions/schemas.py +40 -0
  35. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/plugins/loader.py +11 -0
  36. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/prompts/claudemd.py +15 -6
  37. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/prompts/context.py +43 -28
  38. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/loader.py +88 -8
  39. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/backend_host.py +65 -7
  40. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/web/ws_host.py +135 -6
  41. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/utils/ripgrep.py +12 -4
  42. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/feishu/test_adapter.py +1 -8
  43. illusion_code-0.2.3/tests/test_hooks/test_loader_permissions.py +84 -0
  44. illusion_code-0.2.3/tests/test_mcp/test_config_permissions.py +70 -0
  45. illusion_code-0.2.3/tests/test_memory/test_manager_permissions.py +131 -0
  46. illusion_code-0.2.3/tests/test_permissions/test_loader.py +119 -0
  47. illusion_code-0.2.3/tests/test_permissions/test_project_permissions.py +57 -0
  48. illusion_code-0.2.3/tests/test_plugins/test_loader_permissions.py +67 -0
  49. illusion_code-0.2.3/tests/test_prompts/test_claudemd_permissions.py +76 -0
  50. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_qq_channel.py +1 -1
  51. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_sandbox/test_adapter.py +2 -3
  52. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_sandbox/test_config_schema.py +0 -1
  53. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_sandbox/test_platform_linux.py +0 -1
  54. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_sandbox/test_platform_macos.py +0 -1
  55. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_sandbox/test_proxy_env_vars.py +0 -1
  56. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_sandbox/test_runtime.py +0 -2
  57. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_sandbox/test_symlink_protection.py +0 -1
  58. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_sandbox/test_utils.py +0 -1
  59. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_sandbox/test_violation_store.py +0 -1
  60. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_skills/test_loader.py +19 -0
  61. illusion_code-0.2.3/tests/test_skills/test_loader_permissions.py +60 -0
  62. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_ripgrep.py +3 -0
  63. illusion_code-0.2.1/frontend/web/tailwind.config.js +0 -76
  64. illusion_code-0.2.1/src/illusion/permissions/__init__.py +0 -39
  65. {illusion_code-0.2.1 → illusion_code-0.2.3}/.github/workflows/publish.yml +0 -0
  66. {illusion_code-0.2.1 → illusion_code-0.2.3}/.gitignore +0 -0
  67. {illusion_code-0.2.1 → illusion_code-0.2.3}/.python-version +0 -0
  68. {illusion_code-0.2.1 → illusion_code-0.2.3}/LICENSE +0 -0
  69. {illusion_code-0.2.1 → illusion_code-0.2.3}/README.md +0 -0
  70. {illusion_code-0.2.1 → illusion_code-0.2.3}/README.zh-CN.md +0 -0
  71. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/en/architecture.md +0 -0
  72. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/en/channels.md +0 -0
  73. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/en/commands.md +0 -0
  74. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/en/extensions.md +0 -0
  75. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/en/getting-started.md +0 -0
  76. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/en/introduction.md +0 -0
  77. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/en/project-files.md +0 -0
  78. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/images/IllusionCode.png +0 -0
  79. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/images/image1.png +0 -0
  80. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/images/image2.png +0 -0
  81. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/zh-CN/architecture.md +0 -0
  82. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/zh-CN/channels.md +0 -0
  83. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/zh-CN/commands.md +0 -0
  84. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/zh-CN/getting-started.md +0 -0
  85. {illusion_code-0.2.1 → illusion_code-0.2.3}/docs/zh-CN/introduction.md +0 -0
  86. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/build.mjs +0 -0
  87. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/CommandPicker.tsx +0 -0
  88. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/Composer.tsx +0 -0
  89. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/ComposerController.tsx +0 -0
  90. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/ConversationView.tsx +0 -0
  91. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/Footer.tsx +0 -0
  92. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/MarkdownContent.tsx +0 -0
  93. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/MarkdownTable.tsx +0 -0
  94. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/ModalHost.tsx +0 -0
  95. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/MultilineTextInput.tsx +0 -0
  96. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/PromptInput.tsx +0 -0
  97. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/SelectModal.tsx +0 -0
  98. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/SidePanel.tsx +0 -0
  99. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/Spinner.tsx +0 -0
  100. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/StatusBar.tsx +0 -0
  101. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/SwarmPanel.tsx +0 -0
  102. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/TodoPanel.tsx +0 -0
  103. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/ToolCallDisplay.tsx +0 -0
  104. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/TranscriptPane.tsx +0 -0
  105. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/components/WelcomeBanner.tsx +0 -0
  106. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/hooks/useAnimationFrame.ts +0 -0
  107. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/hooks/useBackendSession.ts +0 -0
  108. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/hooks/useBlink.ts +0 -0
  109. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/hooks/useTerminalSize.ts +0 -0
  110. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/i18n.ts +0 -0
  111. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/index.tsx +0 -0
  112. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/theme/ThemeContext.tsx +0 -0
  113. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/theme/builtinThemes.ts +0 -0
  114. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/ToolInterface.ts +0 -0
  115. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/AgentTool.ts +0 -0
  116. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/BashTool.ts +0 -0
  117. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/CronTool.ts +0 -0
  118. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/EditTool.ts +0 -0
  119. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/GenericTool.ts +0 -0
  120. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/LspTool.ts +0 -0
  121. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/McpTool.ts +0 -0
  122. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/NotebookTool.ts +0 -0
  123. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/PlanTool.ts +0 -0
  124. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/ReadTool.ts +0 -0
  125. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/SearchTool.ts +0 -0
  126. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/SkillTool.ts +0 -0
  127. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/TaskTool.ts +0 -0
  128. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/WebTool.ts +0 -0
  129. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/WorktreeTool.ts +0 -0
  130. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/implementations/WriteTool.ts +0 -0
  131. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/tools/registry.ts +0 -0
  132. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/types.ts +0 -0
  133. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/utils/markdown.ts +0 -0
  134. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/src/utils/thinking.ts +0 -0
  135. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/terminal/tsconfig.json +0 -0
  136. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/index.html +0 -0
  137. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/postcss.config.js +0 -0
  138. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/components/ChatArea.tsx +0 -0
  139. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/components/ModalCard.tsx +0 -0
  140. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/components/TodoPanel.tsx +0 -0
  141. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/components/WelcomeScreen.tsx +0 -0
  142. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/i18n.ts +0 -0
  143. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/main.tsx +0 -0
  144. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/remarkSuperscript.ts +0 -0
  145. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/types/protocol.ts +0 -0
  146. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/src/vite-env.d.ts +0 -0
  147. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/tsconfig.json +0 -0
  148. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/tsconfig.node.json +0 -0
  149. {illusion_code-0.2.1 → illusion_code-0.2.3}/frontend/web/vite.config.ts +0 -0
  150. {illusion_code-0.2.1 → illusion_code-0.2.3}/scripts/build_frontend.py +0 -0
  151. {illusion_code-0.2.1 → illusion_code-0.2.3}/scripts/hatch_build.py +0 -0
  152. {illusion_code-0.2.1 → illusion_code-0.2.3}/scripts/publish.py +0 -0
  153. {illusion_code-0.2.1 → illusion_code-0.2.3}/scripts/sync_version.py +0 -0
  154. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/__main__.py +0 -0
  155. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/api/__init__.py +0 -0
  156. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/api/client.py +0 -0
  157. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/api/codex_client.py +0 -0
  158. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/api/compat.py +0 -0
  159. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/api/effort.py +0 -0
  160. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/api/errors.py +0 -0
  161. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/api/openai_client.py +0 -0
  162. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/api/provider.py +0 -0
  163. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/api/registry.py +0 -0
  164. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/api/usage.py +0 -0
  165. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/auth/__init__.py +0 -0
  166. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/auth/codex_oauth.py +0 -0
  167. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/auth/copilot.py +0 -0
  168. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/auth/external.py +0 -0
  169. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/auth/flows.py +0 -0
  170. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/auth/manager.py +0 -0
  171. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/auth/storage.py +0 -0
  172. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/bridge/__init__.py +0 -0
  173. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/bridge/manager.py +0 -0
  174. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/bridge/session_runner.py +0 -0
  175. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/bridge/types.py +0 -0
  176. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/bridge/work_secret.py +0 -0
  177. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/__init__.py +0 -0
  178. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/base.py +0 -0
  179. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/base_commands.py +0 -0
  180. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/config.py +0 -0
  181. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/feishu/__init__.py +0 -0
  182. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/feishu/adapter.py +0 -0
  183. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/feishu/commands.py +0 -0
  184. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/feishu/messaging.py +0 -0
  185. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/feishu/session_map.py +0 -0
  186. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/feishu/ws_client.py +0 -0
  187. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/pid.py +0 -0
  188. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/qq/__init__.py +0 -0
  189. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/qq/adapter.py +0 -0
  190. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/qq/api.py +0 -0
  191. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/qq/commands.py +0 -0
  192. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/qq/session_map.py +0 -0
  193. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/qq/ws_client.py +0 -0
  194. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/serve.py +0 -0
  195. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/tools/__init__.py +0 -0
  196. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/tools/feishu_doc.py +0 -0
  197. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/tools/feishu_drive.py +0 -0
  198. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/weixin/__init__.py +0 -0
  199. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/weixin/adapter.py +0 -0
  200. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/weixin/commands.py +0 -0
  201. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/weixin/ilink_api.py +0 -0
  202. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/channels/weixin/session_map.py +0 -0
  203. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/__init__.py +0 -0
  204. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/auth.py +0 -0
  205. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/bridge.py +0 -0
  206. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/context.py +0 -0
  207. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/git.py +0 -0
  208. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/helpers.py +0 -0
  209. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/__init__.py +0 -0
  210. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/analysis/__init__.py +0 -0
  211. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/analysis/architecture.py +0 -0
  212. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/analysis/conventions.py +0 -0
  213. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/analysis/dependencies.py +0 -0
  214. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/analysis/key_modules.py +0 -0
  215. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/extraction/__init__.py +0 -0
  216. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/extraction/lsp_symbols.py +0 -0
  217. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/extraction/readme.py +0 -0
  218. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/extraction/scanner.py +0 -0
  219. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/generation/__init__.py +0 -0
  220. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/generation/claudemd.py +0 -0
  221. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/generation/illusionmd.py +0 -0
  222. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/generation/memory_template.py +0 -0
  223. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/generation/rules.py +0 -0
  224. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/generation/sections.py +0 -0
  225. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/orchestrator.py +0 -0
  226. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/init/types.py +0 -0
  227. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/mcp.py +0 -0
  228. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/memory.py +0 -0
  229. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/model.py +0 -0
  230. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/plugin.py +0 -0
  231. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/registry.py +0 -0
  232. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/sandbox.py +0 -0
  233. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/session.py +0 -0
  234. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/settings.py +0 -0
  235. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/commands/types.py +0 -0
  236. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/config/__init__.py +0 -0
  237. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/config/paths.py +0 -0
  238. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/config/plan_file.py +0 -0
  239. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/coordinator/__init__.py +0 -0
  240. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/coordinator/agent_definitions.py +0 -0
  241. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/coordinator/coordinator_mode.py +0 -0
  242. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/engine/__init__.py +0 -0
  243. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/engine/cost_tracker.py +0 -0
  244. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/engine/messages.py +0 -0
  245. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/engine/query.py +0 -0
  246. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/engine/query_engine.py +0 -0
  247. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/engine/stream_events.py +0 -0
  248. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/hooks/__init__.py +0 -0
  249. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/hooks/events.py +0 -0
  250. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/hooks/executor.py +0 -0
  251. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/hooks/hot_reload.py +0 -0
  252. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/hooks/register_hooks.py +0 -0
  253. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/hooks/schemas.py +0 -0
  254. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/hooks/session_hooks.py +0 -0
  255. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/hooks/types.py +0 -0
  256. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/hooks/utils.py +0 -0
  257. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/mcp/__init__.py +0 -0
  258. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/mcp/client.py +0 -0
  259. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/mcp/types.py +0 -0
  260. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/memory/__init__.py +0 -0
  261. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/memory/memdir.py +0 -0
  262. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/memory/paths.py +0 -0
  263. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/memory/scan.py +0 -0
  264. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/memory/search.py +0 -0
  265. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/memory/types.py +0 -0
  266. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/output_styles/__init__.py +0 -0
  267. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/output_styles/loader.py +0 -0
  268. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/permissions/checker.py +0 -0
  269. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/permissions/modes.py +0 -0
  270. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/platforms.py +0 -0
  271. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/plugins/__init__.py +0 -0
  272. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/plugins/installer.py +0 -0
  273. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/plugins/options.py +0 -0
  274. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/plugins/schemas.py +0 -0
  275. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/plugins/types.py +0 -0
  276. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/prompts/__init__.py +0 -0
  277. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/prompts/environment.py +0 -0
  278. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/prompts/system_prompt.py +0 -0
  279. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/__init__.py +0 -0
  280. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/adapter.py +0 -0
  281. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/platforms/__init__.py +0 -0
  282. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/platforms/base.py +0 -0
  283. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/platforms/linux.py +0 -0
  284. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/platforms/macos.py +0 -0
  285. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/platforms/windows.py +0 -0
  286. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/proxy/__init__.py +0 -0
  287. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/proxy/env_vars.py +0 -0
  288. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/runtime.py +0 -0
  289. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/symlink_protection.py +0 -0
  290. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/utils.py +0 -0
  291. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/sandbox/violation_store.py +0 -0
  292. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/__init__.py +0 -0
  293. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/compact/__init__.py +0 -0
  294. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/compact/auto_compact.py +0 -0
  295. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/compact/compact_core.py +0 -0
  296. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/compact/compact_prompt.py +0 -0
  297. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/compact/constants.py +0 -0
  298. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/compact/message_ops.py +0 -0
  299. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/compact/microcompact.py +0 -0
  300. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/compact/models.py +0 -0
  301. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/compact/token_utils.py +0 -0
  302. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/cron.py +0 -0
  303. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/cron_scheduler.py +0 -0
  304. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/file_history.py +0 -0
  305. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/lsp/__init__.py +0 -0
  306. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/lsp/client.py +0 -0
  307. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/lsp/config.py +0 -0
  308. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/lsp/manager.py +0 -0
  309. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/lsp/types.py +0 -0
  310. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/session_storage.py +0 -0
  311. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/services/token_estimation.py +0 -0
  312. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/__init__.py +0 -0
  313. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/bundled/__init__.py +0 -0
  314. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/bundled/content/batch.md +0 -0
  315. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/bundled/content/debug.md +0 -0
  316. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/bundled/content/loop.md +0 -0
  317. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/bundled/content/remember.md +0 -0
  318. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/bundled/content/simplify.md +0 -0
  319. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/bundled/content/skillify.md +0 -0
  320. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/bundled/content/stuck.md +0 -0
  321. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/bundled/content/update-config.md +0 -0
  322. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/bundled/content/verify.md +0 -0
  323. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/registry.py +0 -0
  324. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/skills/types.py +0 -0
  325. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/state/__init__.py +0 -0
  326. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/state/app_state.py +0 -0
  327. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/state/store.py +0 -0
  328. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/swarm/__init__.py +0 -0
  329. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/swarm/agent_executor.py +0 -0
  330. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/swarm/in_process.py +0 -0
  331. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/swarm/subprocess_backend.py +0 -0
  332. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/swarm/team_helpers.py +0 -0
  333. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/swarm/types.py +0 -0
  334. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/swarm/worktree.py +0 -0
  335. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tasks/__init__.py +0 -0
  336. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tasks/local_agent_task.py +0 -0
  337. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tasks/local_shell_task.py +0 -0
  338. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tasks/manager.py +0 -0
  339. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tasks/stop_task.py +0 -0
  340. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tasks/types.py +0 -0
  341. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/__init__.py +0 -0
  342. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/agent_tool.py +0 -0
  343. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/ask_user_question_tool.py +0 -0
  344. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/base.py +0 -0
  345. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/bash_tool.py +0 -0
  346. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/config_tool.py +0 -0
  347. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/cron_tool.py +0 -0
  348. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/enter_plan_mode_tool.py +0 -0
  349. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/enter_worktree_tool.py +0 -0
  350. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/exit_plan_mode_tool.py +0 -0
  351. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/exit_worktree_tool.py +0 -0
  352. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/file_edit_tool.py +0 -0
  353. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/file_read_tool.py +0 -0
  354. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/file_write_tool.py +0 -0
  355. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/glob_tool.py +0 -0
  356. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/grep_tool.py +0 -0
  357. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/list_mcp_resources_tool.py +0 -0
  358. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/lsp_formatters.py +0 -0
  359. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/lsp_schemas.py +0 -0
  360. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/lsp_tool.py +0 -0
  361. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/mcp_auth_tool.py +0 -0
  362. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/mcp_tool.py +0 -0
  363. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/notebook_edit_tool.py +0 -0
  364. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/powershell_tool.py +0 -0
  365. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/read_mcp_resource_tool.py +0 -0
  366. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/repl_tool.py +0 -0
  367. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/send_message_tool.py +0 -0
  368. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/shell_common.py +0 -0
  369. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/skill_tool.py +0 -0
  370. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/sleep_tool.py +0 -0
  371. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/structured_output_tool.py +0 -0
  372. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/task_create_tool.py +0 -0
  373. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/task_get_tool.py +0 -0
  374. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/task_list_tool.py +0 -0
  375. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/task_output_tool.py +0 -0
  376. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/task_stop_tool.py +0 -0
  377. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/task_update_tool.py +0 -0
  378. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/team_create_tool.py +0 -0
  379. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/team_delete_tool.py +0 -0
  380. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/todo_write_tool.py +0 -0
  381. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/tool_search_tool.py +0 -0
  382. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/web_fetch_tool.py +0 -0
  383. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/tools/web_search_tool.py +0 -0
  384. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/__init__.py +0 -0
  385. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/app.py +0 -0
  386. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/input.py +0 -0
  387. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/output.py +0 -0
  388. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/permission_dialog.py +0 -0
  389. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/permission_store.py +0 -0
  390. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/protocol.py +0 -0
  391. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/react_launcher.py +0 -0
  392. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/runtime.py +0 -0
  393. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/textual_app.py +0 -0
  394. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/web/__init__.py +0 -0
  395. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/ui/web/server.py +0 -0
  396. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/utils/__init__.py +0 -0
  397. {illusion_code-0.2.1 → illusion_code-0.2.3}/src/illusion/utils/shell.py +0 -0
  398. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/__init__.py +0 -0
  399. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/api/test_anthropic_client.py +0 -0
  400. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/api/test_client.py +0 -0
  401. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/api/test_codex_client.py +0 -0
  402. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/api/test_effort.py +0 -0
  403. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/api/test_fallback/346/217/220/347/244/272.py" +0 -0
  404. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/api/test_openai_client.py +0 -0
  405. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/__init__.py +0 -0
  406. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/feishu/__init__.py +0 -0
  407. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/feishu/test_commands.py +0 -0
  408. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/feishu/test_session_map.py +0 -0
  409. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/test_base.py +0 -0
  410. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/test_base_commands.py +0 -0
  411. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/test_config.py +0 -0
  412. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/test_pid.py +0 -0
  413. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/test_tool_registration.py +0 -0
  414. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/tools/__init__.py +0 -0
  415. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/tools/test_feishu_doc.py +0 -0
  416. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/tools/test_feishu_drive.py +0 -0
  417. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/weixin/__init__.py +0 -0
  418. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/weixin/test_adapter.py +0 -0
  419. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/weixin/test_config.py +0 -0
  420. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/weixin/test_ilink_api.py +0 -0
  421. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/channels/weixin/test_session_map.py +0 -0
  422. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/commands/init/__init__.py +0 -0
  423. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/commands/init/test_claudemd.py +0 -0
  424. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/commands/init/test_orchestrator.py +0 -0
  425. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/commands/init/test_scanner.py +0 -0
  426. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/commands/init/test_sections.py +0 -0
  427. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/commands/test_effort_command.py +0 -0
  428. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/config/test_i18n.py +0 -0
  429. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/config/test_settings.py +0 -0
  430. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/conftest.py +0 -0
  431. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/engine/test_query_engine.py +0 -0
  432. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/fixtures/fake_mcp_server.py +0 -0
  433. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/integration/test_effort_integration.py +0 -0
  434. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/services/lsp/test_lsp_client.py +0 -0
  435. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/services/lsp/test_lsp_config.py +0 -0
  436. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/services/lsp/test_lsp_manager.py +0 -0
  437. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/services/lsp/test_lsp_types.py +0 -0
  438. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_api/__init__.py +0 -0
  439. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_api/test_client.py +0 -0
  440. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_api/test_codex_client.py +0 -0
  441. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_api/test_compat.py +0 -0
  442. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_api/test_openai_client.py +0 -0
  443. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_auth/test_external.py +0 -0
  444. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_bridge/test_core.py +0 -0
  445. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_bridge/test_session_flow.py +0 -0
  446. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_commands/__init__.py +0 -0
  447. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_commands/test_cli.py +0 -0
  448. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_commands/test_command_flows.py +0 -0
  449. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_commands/test_registry.py +0 -0
  450. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_config/__init__.py +0 -0
  451. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_config/test_paths.py +0 -0
  452. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_config/test_settings.py +0 -0
  453. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_coordinator/test_agent_definitions.py +0 -0
  454. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_coordinator/test_coordinator_mode.py +0 -0
  455. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_engine/__init__.py +0 -0
  456. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_engine/test_media_block.py +0 -0
  457. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_engine/test_query_engine.py +0 -0
  458. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_engine/test_tool_result_media.py +0 -0
  459. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_hooks/__init__.py +0 -0
  460. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_hooks/test_executor.py +0 -0
  461. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_hooks_skills_plugins_real.py +0 -0
  462. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_mcp/__init__.py +0 -0
  463. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_mcp/test_integration.py +0 -0
  464. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_mcp/test_stdio_flow.py +0 -0
  465. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_memory/__init__.py +0 -0
  466. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_memory/test_memdir.py +0 -0
  467. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_merged_prs_on_autoagent.py +0 -0
  468. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_permissions/__init__.py +0 -0
  469. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_permissions/test_checker.py +0 -0
  470. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_platforms.py +0 -0
  471. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_plugins/__init__.py +0 -0
  472. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_plugins/test_lifecycle_flow.py +0 -0
  473. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_plugins/test_loader.py +0 -0
  474. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_prompts/__init__.py +0 -0
  475. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_prompts/test_claudemd.py +0 -0
  476. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_prompts/test_environment.py +0 -0
  477. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_prompts/test_system_prompt.py +0 -0
  478. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_real_large_tasks.py +0 -0
  479. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_sandbox/test_platform_windows.py +0 -0
  480. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_scripts/test_sync_version.py +0 -0
  481. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_services/test_compact.py +0 -0
  482. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_services/test_cron.py +0 -0
  483. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_services/test_cron_scheduler.py +0 -0
  484. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_services/test_session_storage.py +0 -0
  485. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_swarm/__init__.py +0 -0
  486. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_swarm/test_agent_executor.py +0 -0
  487. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_swarm/test_imports.py +0 -0
  488. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_swarm/test_in_process.py +0 -0
  489. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_swarm/test_types.py +0 -0
  490. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_swarm/test_worktree.py +0 -0
  491. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tasks/test_manager.py +0 -0
  492. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/__init__.py +0 -0
  493. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_agent_tool.py +0 -0
  494. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_core_tools.py +0 -0
  495. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_file_read_media.py +0 -0
  496. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_glob_tool.py +0 -0
  497. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_grep_tool.py +0 -0
  498. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_integration.py +0 -0
  499. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_integration_flows.py +0 -0
  500. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_mcp_auth_tool.py +0 -0
  501. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_shell_common.py +0 -0
  502. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_task_tools.py +0 -0
  503. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_team_tools.py +0 -0
  504. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_tools/test_web_fetch_tool.py +0 -0
  505. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_ui/__init__.py +0 -0
  506. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_ui/test_modes.py +0 -0
  507. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_ui/test_permission_store.py +0 -0
  508. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_ui/test_react_backend.py +0 -0
  509. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_ui/test_react_launcher.py +0 -0
  510. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_ui/test_textual_app.py +0 -0
  511. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_untested_features.py +0 -0
  512. {illusion_code-0.2.1 → illusion_code-0.2.3}/tests/test_utils/test_shell.py +0 -0
  513. {illusion_code-0.2.1 → illusion_code-0.2.3}/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.2.1
3
+ Version: 0.2.3
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
@@ -5,6 +5,7 @@
5
5
  - [Configuration Overview](#configuration-overview)
6
6
  - [Credentials File (credentials.json)](#credentials-file-credentialsjson)
7
7
  - [Global Configuration (settings.json)](#global-configuration-settingsjson)
8
+ - [working_directory](#working_directory)
8
9
  - [Environment Configuration (EnvConfig)](#environment-configuration-envconfig)
9
10
  - [Provider Configuration Examples](#provider-configuration-examples)
10
11
  - [Permission Configuration](#permission-configuration)
@@ -142,6 +143,7 @@ Uses `env_N` grouped format. Each `env_N` is an independent environment config (
142
143
  },
143
144
  "enabled_plugins": {},
144
145
  "mcp_servers": {},
146
+ "working_directory": null,
145
147
  "ui_language": "en-US",
146
148
  "output_style": "default",
147
149
  "fast_mode": false,
@@ -166,6 +168,30 @@ Uses `env_N` grouped format. Each `env_N` is an independent environment config (
166
168
  | `effort` | string | "medium" | Reasoning effort: low/medium/high/xhigh/max |
167
169
  | `passes` | int | 1 | Reasoning passes (1-8) |
168
170
  | `verbose` | bool | false | Verbose output |
171
+ | `working_directory` | string | - | Fixed working directory (optional) |
172
+
173
+ ---
174
+
175
+ ## working_directory
176
+
177
+ Fixed working directory. If set, illusion-code will automatically switch to this directory on startup.
178
+
179
+ **Type:** String (optional)
180
+
181
+ **Default:** Not set or empty
182
+
183
+ **Example:**
184
+
185
+ ```json
186
+ {
187
+ "working_directory": "E:\\Projects\\my-project"
188
+ }
189
+ ```
190
+
191
+ **Behavior:**
192
+ - If the field exists and is not empty, automatically switches to the specified directory on startup
193
+ - If the field does not exist or is empty, uses the current directory at startup
194
+ - If the specified directory does not exist or lacks permissions, logs a warning and uses the current directory
169
195
 
170
196
  ---
171
197
 
@@ -433,3 +433,211 @@ hooks:
433
433
  - 钩子事件:`src/illusion/hooks/events.py`
434
434
  - 钩子 schema:`src/illusion/hooks/schemas.py`
435
435
  - 钩子类型:`src/illusion/hooks/types.py`
436
+
437
+ ---
438
+
439
+ ## 插件配置
440
+
441
+ ### 全局启用/禁用
442
+
443
+ 在 `~/.illusion/settings.json` 的 `enabled_plugins` 字段中控制:
444
+
445
+ ```json
446
+ {
447
+ "enabled_plugins": {
448
+ "plugin-name": true, // 启用
449
+ "plugin-name": false // 禁用
450
+ }
451
+ }
452
+ ```
453
+
454
+ ### 项目级禁用
455
+
456
+ 在 `<project>/.illusion/permissions.json` 的 `denied_plugins` 字段中控制:
457
+
458
+ ```json
459
+ {
460
+ "denied_plugins": ["plugin-name"] // 禁用特定插件
461
+ "denied_plugins": ["*"] // 禁用所有插件
462
+ }
463
+ ```
464
+
465
+ ### 优先级
466
+
467
+ 项目级 `denied_plugins` > 全局 `enabled_plugins` > 默认值
468
+
469
+ ### 源码参考
470
+
471
+ - 插件加载器:`src/illusion/plugins/loader.py`
472
+
473
+ ---
474
+
475
+ ## MCP 服务器配置
476
+
477
+ ### 全局启用/禁用
478
+
479
+ 在 MCP 服务器配置中添加 `enabled` 字段:
480
+
481
+ ```json
482
+ {
483
+ "mcp_servers": {
484
+ "server-name": {
485
+ "type": "stdio",
486
+ "command": "python",
487
+ "args": ["server.py"],
488
+ "enabled": false // 禁用此服务器
489
+ }
490
+ }
491
+ }
492
+ ```
493
+
494
+ ### 项目级禁用
495
+
496
+ 在 `<project>/.illusion/permissions.json` 的 `denied_mcp_servers` 字段中控制:
497
+
498
+ ```json
499
+ {
500
+ "denied_mcp_servers": ["server-name"] // 禁用特定服务器
501
+ "denied_mcp_servers": ["*"] // 禁用所有服务器
502
+ }
503
+ ```
504
+
505
+ ### 优先级
506
+
507
+ 项目级 `denied_mcp_servers` > 全局 `enabled` 字段 > 默认值
508
+
509
+ ### 源码参考
510
+
511
+ - MCP 配置加载器:`src/illusion/mcp/config.py`
512
+
513
+ ---
514
+
515
+ ## 记忆系统配置
516
+
517
+ ### 全局启用/禁用
518
+
519
+ 在 `~/.illusion/settings.json` 的 `memory.enabled` 字段中控制:
520
+
521
+ ```json
522
+ {
523
+ "memory": {
524
+ "enabled": false // 禁用记忆功能
525
+ }
526
+ }
527
+ ```
528
+
529
+ ### 项目级禁用
530
+
531
+ 在 `<project>/.illusion/permissions.json` 的 `denied_memory` 字段中控制:
532
+
533
+ ```json
534
+ {
535
+ "denied_memory": true // 禁用记忆功能
536
+ }
537
+ ```
538
+
539
+ ### 优先级
540
+
541
+ 项目级 `denied_memory` > 全局 `memory.enabled` > 默认值
542
+
543
+ ### 源码参考
544
+
545
+ - 记忆管理器:`src/illusion/memory/manager.py`
546
+
547
+ ---
548
+
549
+ ## Skills 配置
550
+
551
+ ### 加载来源
552
+
553
+ Skills 可以从以下位置加载:
554
+ - 内置 skills(`src/illusion/skills/bundled/`)
555
+ - 用户 skills(`~/.illusion/skills/`)
556
+ - 项目级 skills(`<project>/.illusion/skills/`)
557
+ - 插件 skills(插件的 `skills/` 目录)
558
+
559
+ ### 项目级禁用
560
+
561
+ 在 `<project>/.illusion/permissions.json` 的 `denied_skills` 字段中控制:
562
+
563
+ ```json
564
+ {
565
+ "denied_skills": ["skill-name"] // 禁用特定 skill
566
+ "denied_skills": ["*"] // 禁用所有 skills
567
+ }
568
+ ```
569
+
570
+ ### 源码参考
571
+
572
+ - Skills 加载器:`src/illusion/skills/loader.py`
573
+
574
+ ---
575
+
576
+ ## Hooks 配置
577
+
578
+ ### 加载来源
579
+
580
+ Hooks 可以从以下位置加载:
581
+ - 全局 `settings.json` 的 `hooks` 字段
582
+ - 插件的 `hooks.json` 文件
583
+
584
+ ### 项目级禁用
585
+
586
+ 在 `<project>/.illusion/permissions.json` 的 `denied_hooks` 字段中控制:
587
+
588
+ ```json
589
+ {
590
+ "denied_hooks": ["PreToolUse"] // 禁用特定事件的 hooks
591
+ "denied_hooks": ["*"] // 禁用所有 hooks
592
+ }
593
+ ```
594
+
595
+ ### 源码参考
596
+
597
+ - Hooks 加载器:`src/illusion/hooks/loader.py`
598
+
599
+ ---
600
+
601
+ ## Commands 配置
602
+
603
+ ### 命令类型
604
+
605
+ IllusionCode 的斜杠命令分为两类:
606
+
607
+ 1. **内置命令**:如 `/help`、`/model`、`/skills` 等,硬编码注册,不可禁用
608
+ 2. **插件命令**:通过插件的 `commands/` 或 `skills/` 目录提供,遵循插件的启用/禁用规则
609
+
610
+ ### 插件命令的启用/禁用
611
+
612
+ - 通过 `enabled_plugins` 控制插件整体启用/禁用
613
+ - 通过 `denied_plugins` 项目级禁用插件
614
+ - 插件禁用后,其提供的所有命令都会被禁用
615
+
616
+ ### 源码参考
617
+
618
+ - 命令注册表:`src/illusion/commands/registry.py`
619
+
620
+ ---
621
+
622
+ ## Rules 配置
623
+
624
+ ### 加载来源
625
+
626
+ Rules 从以下位置加载:
627
+ - `.claude/rules/*.md`
628
+ - `.illusion/rules/*.md`
629
+
630
+ ### 项目级禁用
631
+
632
+ 在 `<project>/.illusion/permissions.json` 的 `denied_rules` 字段中控制:
633
+
634
+ ```json
635
+ {
636
+ "denied_rules": ["rule-name"] // 禁用特定 rule
637
+ "denied_rules": ["*"] // 禁用所有 rules
638
+ }
639
+ ```
640
+
641
+ ### 源码参考
642
+
643
+ - Rules 发现逻辑:`src/illusion/prompts/claudemd.py`
@@ -119,3 +119,47 @@ metadata:
119
119
  - 路径解析:`src/illusion/memory/paths.py`
120
120
  - 加载逻辑:`src/illusion/memory/memdir.py`
121
121
  - 管理功能:`src/illusion/memory/manager.py`
122
+
123
+ ---
124
+
125
+ ## 项目级权限配置 (permissions.json)
126
+
127
+ 项目级 `permissions.json` 文件位于 `<project>/.illusion/permissions.json`,用于控制该项目的权限和禁用开关。
128
+
129
+ ### 配置示例
130
+
131
+ ```json
132
+ {
133
+ "always_allow_tools": ["read_file", "grep"],
134
+ "denied_tools": ["bash"],
135
+ "denied_skills": ["dangerous-skill"],
136
+ "denied_hooks": ["PreToolUse"],
137
+ "denied_plugins": ["unwanted-plugin"],
138
+ "denied_mcp_servers": ["external-server"],
139
+ "denied_memory": false
140
+ }
141
+ ```
142
+
143
+ ### 配置字段说明
144
+
145
+ | 字段 | 类型 | 默认值 | 说明 |
146
+ |------|------|--------|------|
147
+ | `always_allow_tools` | list | `[]` | 始终允许的工具列表 |
148
+ | `denied_tools` | list | `[]` | 始终拒绝的工具列表 |
149
+ | `denied_skills` | list | `[]` | 禁用的 skill 名称列表,`["*"]` 表示全部禁用 |
150
+ | `denied_hooks` | list | `[]` | 禁用的 hook 事件列表,`["*"]` 表示全部禁用 |
151
+ | `denied_plugins` | list | `[]` | 禁用的插件名称列表,`["*"]` 表示全部禁用 |
152
+ | `denied_mcp_servers` | list | `[]` | 禁用的 MCP 服务器名称列表,`["*"]` 表示全部禁用 |
153
+ | `denied_memory` | bool | `false` | 是否禁用 memory 功能 |
154
+ | `denied_rules` | list | `[]` | 禁用的规则名称列表,`["*"]` 表示全部禁用 |
155
+
156
+ ### 优先级规则
157
+
158
+ 1. 项目级 `permissions.json` — 最高优先级
159
+ 2. 全局 `settings.json` — 次优先级
160
+ 3. 默认值 — 最低优先级
161
+
162
+ ### 源码参考
163
+
164
+ - 权限加载器:`src/illusion/permissions/loader.py`
165
+ - 权限数据类:`src/illusion/permissions/schemas.py`
@@ -5,6 +5,7 @@
5
5
  - [配置概览](#配置概览)
6
6
  - [凭据文件 (credentials.json)](#凭据文件-credentialsjson)
7
7
  - [全局配置 (settings.json)](#全局配置-settingsjson)
8
+ - [working_directory](#working_directory)
8
9
  - [环境配置 (EnvConfig)](#环境配置-envconfig)
9
10
  - [各提供商配置示例](#各提供商配置示例)
10
11
  - [权限配置](#权限配置)
@@ -142,6 +143,7 @@
142
143
  },
143
144
  "enabled_plugins": {},
144
145
  "mcp_servers": {},
146
+ "working_directory": null,
145
147
  "ui_language": "zh-CN",
146
148
  "output_style": "default",
147
149
  "fast_mode": false,
@@ -166,6 +168,30 @@
166
168
  | `effort` | string | "medium" | 推理强度:low/medium/high/xhigh/max |
167
169
  | `passes` | int | 1 | 推理轮数(1-8) |
168
170
  | `verbose` | bool | false | 详细输出 |
171
+ | `working_directory` | string | - | 固定工作目录(可选) |
172
+
173
+ ---
174
+
175
+ ## working_directory
176
+
177
+ 固定工作目录。如果设置此字段,illusion-code启动时会自动切换到该目录。
178
+
179
+ **类型:** 字符串(可选)
180
+
181
+ **默认值:** 不设置或为空
182
+
183
+ **示例:**
184
+
185
+ ```json
186
+ {
187
+ "working_directory": "E:\\Projects\\my-project"
188
+ }
189
+ ```
190
+
191
+ **行为:**
192
+ - 如果字段存在且不为空,启动时自动切换到指定目录
193
+ - 如果字段不存在或为空,使用启动时的当前目录
194
+ - 如果指定的目录不存在或无权限,记录警告日志,使用当前目录
169
195
 
170
196
  ---
171
197
 
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@illusion/terminal",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@illusion/terminal",
9
- "version": "0.2.1",
9
+ "version": "0.2.3",
10
10
  "dependencies": {
11
11
  "chalk": "^5.6.2",
12
12
  "ink": "^5.1.0",
@@ -24,5 +24,5 @@
24
24
  "tsx": "^4.19.2",
25
25
  "typescript": "^5.7.3"
26
26
  },
27
- "version": "0.2.1"
27
+ "version": "0.2.3"
28
28
  }
@@ -340,6 +340,12 @@ function AppInner({config}: {config: FrontendConfig}): React.JSX.Element {
340
340
  return true;
341
341
  }
342
342
 
343
+ // /skills → 显示技能选择器
344
+ if (trimmed === '/skills') {
345
+ session.sendRequest({type: 'select_command', command: 'skills'});
346
+ return true;
347
+ }
348
+
343
349
  // /context → 显示上下文管理选择器
344
350
  if (trimmed === '/context') {
345
351
  session.sendRequest({type: 'select_command', command: 'context'});
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  /** 当前版本号 */
9
- export const VERSION = '0.2.1';
9
+ export const VERSION = '0.2.3';
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@illusion/web",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@illusion/web",
9
- "version": "0.2.1",
9
+ "version": "0.2.3",
10
10
  "dependencies": {
11
11
  "highlight.js": "^11.11.0",
12
12
  "react": "^18.3.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@illusion/web",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -149,7 +149,7 @@ export default function App() {
149
149
  }
150
150
 
151
151
  // 通过 select_command 获取内联选项的命令
152
- const selectCommands = ['context', 'rewind', 'model', 'delete'];
152
+ const selectCommands = ['context', 'rewind', 'model', 'delete', 'rules', 'skills'];
153
153
  const cmdName = trimmed.startsWith('/') ? (trimmed.slice(1).split(/\s+/)[0] ?? '') : '';
154
154
  if (cmdName && selectCommands.includes(cmdName)) {
155
155
  session.setBusyTrue();
@@ -198,34 +198,38 @@ export default function App() {
198
198
  *
199
199
  * @param id - 会话 ID
200
200
  */
201
- const handleSelectSession = (id: string) => {
201
+ const handleSelectSession = useCallback((id: string) => {
202
202
  session.suppressInlineOptions();
203
+ session.suppressCommandResult(1); // 抑制 apply_select_command 的命令结果
204
+ session.suppressTranscript(); // 抑制转录事件,直到收到 replace_transcript
203
205
  session.sendRequest({ type: 'apply_select_command', command: 'resume', value: id });
204
- setTimeout(() => { session.suppressInlineOptions(); session.sendRequest({ type: 'list_sessions' }); }, 500);
205
- };
206
+ }, [session.suppressInlineOptions, session.suppressCommandResult, session.suppressTranscript, session.sendRequest]);
206
207
 
207
208
  /** 处理列出会话 */
208
209
  const handleListSessions = useCallback(() => {
209
210
  session.suppressInlineOptions();
211
+ session.suppressCommandResult();
210
212
  session.sendRequest({ type: 'list_sessions' });
211
- }, [session.suppressInlineOptions, session.sendRequest]);
213
+ }, [session.suppressInlineOptions, session.suppressCommandResult, session.sendRequest]);
212
214
 
213
215
  /** 处理删除会话 */
214
216
  const handleDeleteSessions = useCallback(() => {
215
217
  session.suppressInlineOptions();
218
+ session.suppressCommandResult();
216
219
  session.requestSelectCommand('delete');
217
- }, [session.suppressInlineOptions, session.requestSelectCommand]);
220
+ }, [session.suppressInlineOptions, session.suppressCommandResult, session.requestSelectCommand]);
218
221
  /**
219
222
  * 处理确认删除
220
223
  *
221
224
  * 删除所有选中的会话。
222
225
  */
223
226
  const handleConfirmDelete = useCallback(() => {
227
+ session.suppressCommandResult();
224
228
  for (const id of deleteSelected) session.sendRequest({ type: 'apply_select_command', command: 'delete', value: id });
225
229
  session.clearDeleteSessions();
226
230
  setDeleteSelected(new Set());
227
- setTimeout(() => { session.suppressInlineOptions(); session.sendRequest({ type: 'list_sessions' }); }, 500);
228
- }, [deleteSelected, session.sendRequest, session.clearDeleteSessions, session.suppressInlineOptions]);
231
+ setTimeout(() => { session.suppressInlineOptions(); session.suppressCommandResult(); session.sendRequest({ type: 'list_sessions' }); }, 500);
232
+ }, [deleteSelected, session.sendRequest, session.clearDeleteSessions, session.suppressInlineOptions, session.suppressCommandResult]);
229
233
 
230
234
  /**
231
235
  * 处理关闭删除模态框
@@ -323,7 +327,7 @@ export default function App() {
323
327
  {showDeleteModal && (
324
328
  <div className="fixed inset-0 z-50 flex items-center justify-center">
325
329
  <div className="absolute inset-0 bg-black/30 backdrop-blur-sm" onClick={handleCloseDeleteModal} />
326
- <div className="relative bg-white rounded-2xl shadow-2xl border border-border-light w-[420px] max-h-[70vh] flex flex-col">
330
+ <div className="relative bg-white rounded-xl shadow-2xl border border-border-light w-[420px] max-h-[70vh] flex flex-col">
327
331
  <div className="px-6 py-4 border-b border-border-light">
328
332
  <h3 className="text-lg font-semibold text-content-primary">{t(lang, 'delete_session')}</h3>
329
333
  </div>
@@ -361,7 +365,7 @@ export default function App() {
361
365
  {toastMessage && (
362
366
  <div className="fixed bottom-20 right-6 z-50 animate-fade-in"
363
367
  onMouseEnter={handleToastMouseEnter} onMouseLeave={handleToastMouseLeave}>
364
- <div className="bg-white rounded-xl shadow-lg px-4 py-3 max-w-sm">
368
+ <div className="bg-white rounded-lg shadow-lg px-4 py-3 max-w-sm">
365
369
  <div className="flex items-start gap-3">
366
370
  <pre className="text-sm text-content-primary whitespace-pre-wrap font-mono leading-relaxed flex-1 max-h-40 overflow-y-auto">{toastMessage.text}</pre>
367
371
  <button onClick={() => setToastMessage(null)}
@@ -42,7 +42,7 @@ export default function MessageBubble({ item, toolInputMap }: MessageBubbleProps
42
42
  if (item.role === 'user') {
43
43
  return (
44
44
  <div className="flex justify-end py-1.5">
45
- <div className="max-w-[min(82%,64ch)] bg-[rgba(0,0,0,0.031)] border border-[#e5e5e5] rounded-[6px] px-3 py-2 text-sm text-content-primary whitespace-pre-wrap break-words select-text">
45
+ <div className="max-w-[min(82%,64ch)] bg-surface-card-alt border border-border-light rounded-lg px-3 py-2 text-sm text-content-primary whitespace-pre-wrap break-words select-text">
46
46
  {item.text}
47
47
  </div>
48
48
  </div>
@@ -107,7 +107,7 @@ function ToolResultBubble({ name, text, isError, toolInput }: { name: string; te
107
107
  </span>
108
108
  </button>
109
109
  {open && text && (
110
- <div className={`mt-1 ml-3.5 p-2.5 whitespace-pre-wrap font-mono text-xs leading-relaxed max-h-60 overflow-y-auto rounded-[6px] select-text ${isError ? 'text-danger bg-red-50 border border-red-200' : 'text-content-primary bg-[rgba(0,0,0,0.031)] border border-[#e5e5e5]'}`}>
110
+ <div className={`mt-1 ml-3.5 p-2.5 whitespace-pre-wrap font-mono text-xs leading-relaxed max-h-60 overflow-y-auto rounded-lg select-text ${isError ? 'text-danger bg-danger/5 border border-danger/20' : 'text-content-primary bg-surface-card-alt border border-border-light'}`}>
111
111
  {text}
112
112
  </div>
113
113
  )}
@@ -118,7 +118,9 @@ function ToolResultBubble({ name, text, isError, toolInput }: { name: string; te
118
118
  /**
119
119
  * 思考过程块组件
120
120
  *
121
- * 显示助手的思考/推理过程。
121
+ * 显示助手的思考/推理过程,支持 Markdown 渲染。
122
+ * 使用与主消息相同的渲染链(ReactMarkdown + remark-gfm + rehype-highlight),
123
+ * 但以更柔和的样式呈现,与正文形成视觉层次区分。
122
124
  *
123
125
  * @param props - 组件属性
124
126
  * @param props.text - 思考过程文本
@@ -126,8 +128,12 @@ function ToolResultBubble({ name, text, isError, toolInput }: { name: string; te
126
128
  function ThinkingBlock({ text }: { text: string }) {
127
129
  if (!text?.trim()) return null;
128
130
  return (
129
- <div className="text-sm text-content-secondary whitespace-pre-wrap leading-relaxed select-text mb-3 opacity-75">
130
- {text}
131
+ <div className="text-sm text-content-secondary leading-relaxed select-text mb-3 opacity-80 py-1">
132
+ <div className="prose prose-sm max-w-full">
133
+ <ReactMarkdown remarkPlugins={[remarkGfm, remarkSuperscript]} rehypePlugins={[rehypeHighlight, rehypeRaw]}>
134
+ {text}
135
+ </ReactMarkdown>
136
+ </div>
131
137
  </div>
132
138
  );
133
139
  }
@@ -249,8 +255,12 @@ export function StreamingBuffer({ text, reasoning }: { text: string; reasoning?:
249
255
  return (
250
256
  <div className="py-1.5">
251
257
  {hasReasoning && (
252
- <div className="text-sm text-content-secondary whitespace-pre-wrap leading-relaxed select-text mb-3 opacity-75">
253
- {reasoning}
258
+ <div className="text-sm text-content-secondary leading-relaxed select-text mb-3 opacity-80 py-1">
259
+ <div className="prose prose-sm max-w-full">
260
+ <ReactMarkdown remarkPlugins={[remarkGfm, remarkSuperscript]} rehypePlugins={[rehypeHighlight, rehypeRaw]}>
261
+ {reasoning}
262
+ </ReactMarkdown>
263
+ </div>
254
264
  {!hasText && <span className="inline-block w-0.5 h-4 bg-content-secondary animate-blink ml-0.5 align-middle" />}
255
265
  </div>
256
266
  )}
@@ -246,7 +246,7 @@ export default function PromptInput({ lang, busy, connected, commands, onSubmit,
246
246
  </div>
247
247
  )}
248
248
 
249
- <div className="flex items-end bg-white rounded-[12px] border border-border-light shadow-soft">
249
+ <div className="flex items-end bg-surface-card rounded-md border border-border-light shadow-soft focus-within:border-primary focus-within:ring-1 focus-within:ring-primary">
250
250
  <textarea
251
251
  value={value}
252
252
  onChange={handleChange}
@@ -254,7 +254,7 @@ export default function PromptInput({ lang, busy, connected, commands, onSubmit,
254
254
  placeholder={connected ? t(lang, 'input_placeholder') : t(lang, 'disconnected')}
255
255
  rows={1}
256
256
  disabled={!connected}
257
- className="flex-1 resize-none bg-transparent outline-none text-sm text-content-primary placeholder-content-disabled min-h-[36px] max-h-[140px] disabled:opacity-50 leading-normal py-2.5 pl-3 pr-2"
257
+ className="flex-1 resize-none bg-transparent text-sm text-content-primary placeholder-content-disabled min-h-[36px] max-h-[140px] focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed leading-normal py-2.5 pl-3 pr-2"
258
258
  style={{ height: 'auto', overflow: 'hidden' }}
259
259
  onInput={(e) => {
260
260
  const el = e.currentTarget;
@@ -267,7 +267,7 @@ export default function PromptInput({ lang, busy, connected, commands, onSubmit,
267
267
  disabled={!connected && !busy}
268
268
  className={`shrink-0 m-1.5 w-8 h-8 flex items-center justify-center rounded-full transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed ${
269
269
  busy
270
- ? 'bg-red-100 text-danger hover:bg-red-200 animate-pulse'
270
+ ? 'bg-danger/10 text-danger hover:bg-danger/20 animate-pulse'
271
271
  : 'bg-primary text-white hover:bg-primary-hover'
272
272
  }`}
273
273
  title={busy ? t(lang, 'task_stopped') : t(lang, 'send')}
@@ -67,7 +67,7 @@ export default function RightPanel({
67
67
  // 折叠态
68
68
  if (collapsed) {
69
69
  return (
70
- <aside className="w-12 bg-surface-card border-l border-border-light flex flex-col items-center py-4 shrink-0 select-none">
70
+ <aside className="w-12 bg-surface-main border-l border-border-light flex flex-col items-center py-4 shrink-0 select-none">
71
71
  <button onClick={onToggle} title={t(lang, 'expand_panel')}
72
72
  className="w-8 h-8 flex items-center justify-center rounded-lg text-content-secondary hover:bg-surface-hover hover:text-content-primary transition-colors cursor-pointer">
73
73
  <svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
@@ -87,7 +87,7 @@ export default function RightPanel({
87
87
  const projectRules = rules.filter((r) => r.source === 'project');
88
88
 
89
89
  return (
90
- <aside className="bg-surface-card border-l border-border-light flex flex-col h-full shrink-0 overflow-y-auto select-none" style={{ width: `${width}px` }}>
90
+ <aside className="bg-surface-main border-l border-border-light flex flex-col h-full shrink-0 overflow-y-auto select-none" style={{ width: `${width}px` }}>
91
91
  {/* 折叠按钮 */}
92
92
  <div className="px-5 pt-3 pb-1 flex justify-end">
93
93
  <button onClick={onToggle} title={t(lang, 'collapse_panel')}
@@ -55,7 +55,7 @@ export default function Sidebar({
55
55
 
56
56
  if (collapsed) {
57
57
  return (
58
- <div className="w-14 bg-surface-card border-r border-border-light flex flex-col items-center py-4 shrink-0 select-none">
58
+ <div className="w-14 bg-surface-main border-r border-border-light flex flex-col items-center py-4 shrink-0 select-none">
59
59
  <button
60
60
  onClick={onToggle}
61
61
  className="w-9 h-9 flex items-center justify-center rounded-lg text-content-secondary hover:bg-surface-hover hover:text-content-primary transition-colors cursor-pointer"
@@ -70,7 +70,7 @@ export default function Sidebar({
70
70
  }
71
71
 
72
72
  return (
73
- <aside className="bg-surface-card border-r border-border-light flex flex-col h-full shrink-0 select-none" style={{ width: `${width}px` }}>
73
+ <aside className="bg-surface-main border-r border-border-light flex flex-col h-full shrink-0 select-none" style={{ width: `${width}px` }}>
74
74
  <div className="flex items-center justify-between px-5 py-4 border-b border-border-light">
75
75
  <button
76
76
  onClick={onToggle}
@@ -128,7 +128,7 @@ export default function Sidebar({
128
128
  <button
129
129
  key={s.value}
130
130
  onClick={() => onSelectSession(s.value)}
131
- className="w-full text-left px-3 py-2 rounded-lg text-sm text-content-secondary hover:bg-surface-hover hover:text-content-primary transition-colors cursor-pointer"
131
+ className="w-full text-left px-3 py-2 rounded-lg text-sm text-content-secondary hover:bg-surface-card-alt hover:text-content-primary transition-colors cursor-pointer"
132
132
  title={s.label}
133
133
  >
134
134
  <span className="line-clamp-2 leading-relaxed">{s.label}</span>
@@ -61,17 +61,17 @@ function Dropdown({ value, placeholder, options, onChange, onOpen }: {
61
61
  return (
62
62
  <div className="relative">
63
63
  <button onClick={() => { if (!open && onOpen) onOpen(); setOpen(!open); }}
64
- className="flex items-center gap-1.5 px-3 py-1.5 text-sm text-content-secondary hover:bg-surface-hover hover:text-content-primary rounded-lg transition-colors cursor-pointer border border-border-light bg-white">
64
+ className="flex items-center gap-1.5 px-3 py-1.5 text-sm text-content-secondary hover:bg-surface-card-alt hover:text-content-primary rounded-lg transition-colors cursor-pointer border border-border-light bg-surface-main">
65
65
  <span className={!value ? 'text-content-disabled' : ''}>{displayValue}</span>
66
66
  <span className="text-content-disabled text-[10px]">▾</span>
67
67
  </button>
68
68
  {open && (
69
69
  <>
70
70
  <div className="fixed inset-0 z-10" onClick={() => setOpen(false)} />
71
- <div className="absolute bottom-full left-0 mb-1 bg-white border border-border-light rounded-xl shadow-lg z-20 min-w-[160px] py-1 max-h-[40vh] overflow-y-auto">
71
+ <div className="absolute bottom-full left-0 mb-1 bg-surface-main border border-border-light rounded-xl shadow-lg z-20 min-w-[160px] py-1 max-h-[40vh] overflow-y-auto">
72
72
  {options.map((opt) => (
73
73
  <button key={opt.value} onClick={() => { onChange(opt.value); setOpen(false); }}
74
- className={`w-full text-left px-3 py-2 text-sm hover:bg-surface-hover transition-colors cursor-pointer ${opt.active ? 'text-primary font-medium bg-primary-light' : 'text-content-secondary'}`}>
74
+ className={`w-full text-left px-3 py-2 text-sm hover:bg-surface-card-alt transition-colors cursor-pointer ${opt.active ? 'text-primary font-medium bg-primary-light' : 'text-content-secondary'}`}>
75
75
  {opt.label}
76
76
  </button>
77
77
  ))}