illusion-code 0.1.0__py3-none-any.whl

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 (214) hide show
  1. illusion/__init__.py +24 -0
  2. illusion/__main__.py +15 -0
  3. illusion/_frontend/dist/index.mjs +39208 -0
  4. illusion/_frontend/package.json +27 -0
  5. illusion/_frontend/src/App.tsx +624 -0
  6. illusion/_frontend/src/components/CommandPicker.tsx +98 -0
  7. illusion/_frontend/src/components/Composer.tsx +55 -0
  8. illusion/_frontend/src/components/ComposerController.tsx +128 -0
  9. illusion/_frontend/src/components/ConversationView.tsx +750 -0
  10. illusion/_frontend/src/components/Footer.tsx +25 -0
  11. illusion/_frontend/src/components/MarkdownContent.tsx +537 -0
  12. illusion/_frontend/src/components/MarkdownTable.tsx +245 -0
  13. illusion/_frontend/src/components/ModalHost.tsx +425 -0
  14. illusion/_frontend/src/components/MultilineTextInput.tsx +250 -0
  15. illusion/_frontend/src/components/PromptInput.tsx +64 -0
  16. illusion/_frontend/src/components/SelectModal.tsx +78 -0
  17. illusion/_frontend/src/components/SidePanel.tsx +175 -0
  18. illusion/_frontend/src/components/Spinner.tsx +77 -0
  19. illusion/_frontend/src/components/StatusBar.tsx +142 -0
  20. illusion/_frontend/src/components/SwarmPanel.tsx +141 -0
  21. illusion/_frontend/src/components/TodoPanel.tsx +126 -0
  22. illusion/_frontend/src/components/ToolCallDisplay.tsx +202 -0
  23. illusion/_frontend/src/components/TranscriptPane.tsx +79 -0
  24. illusion/_frontend/src/components/WelcomeBanner.tsx +37 -0
  25. illusion/_frontend/src/hooks/useBackendSession.ts +468 -0
  26. illusion/_frontend/src/hooks/useTerminalSize.ts +9 -0
  27. illusion/_frontend/src/i18n.ts +78 -0
  28. illusion/_frontend/src/index.tsx +42 -0
  29. illusion/_frontend/src/theme/ThemeContext.tsx +19 -0
  30. illusion/_frontend/src/theme/builtinThemes.ts +89 -0
  31. illusion/_frontend/src/types.ts +110 -0
  32. illusion/_frontend/src/utils/markdown.ts +33 -0
  33. illusion/_frontend/src/utils/thinking.ts +191 -0
  34. illusion/_frontend/tsconfig.json +13 -0
  35. illusion/_web_dist/assets/index-BseIw-ik.css +10 -0
  36. illusion/_web_dist/assets/index-C_0ZWMuW.js +82 -0
  37. illusion/_web_dist/index.html +16 -0
  38. illusion/api/__init__.py +36 -0
  39. illusion/api/client.py +568 -0
  40. illusion/api/codex_client.py +563 -0
  41. illusion/api/compat.py +138 -0
  42. illusion/api/effort.py +128 -0
  43. illusion/api/errors.py +57 -0
  44. illusion/api/openai_client.py +819 -0
  45. illusion/api/provider.py +148 -0
  46. illusion/api/registry.py +479 -0
  47. illusion/api/usage.py +45 -0
  48. illusion/auth/__init__.py +50 -0
  49. illusion/auth/copilot.py +419 -0
  50. illusion/auth/external.py +612 -0
  51. illusion/auth/flows.py +58 -0
  52. illusion/auth/manager.py +214 -0
  53. illusion/auth/storage.py +372 -0
  54. illusion/bridge/__init__.py +38 -0
  55. illusion/bridge/manager.py +190 -0
  56. illusion/bridge/session_runner.py +84 -0
  57. illusion/bridge/types.py +113 -0
  58. illusion/bridge/work_secret.py +131 -0
  59. illusion/cli.py +1228 -0
  60. illusion/commands/__init__.py +32 -0
  61. illusion/commands/registry.py +1934 -0
  62. illusion/config/__init__.py +39 -0
  63. illusion/config/i18n.py +522 -0
  64. illusion/config/paths.py +259 -0
  65. illusion/config/settings.py +564 -0
  66. illusion/coordinator/__init__.py +41 -0
  67. illusion/coordinator/agent_definitions.py +1093 -0
  68. illusion/coordinator/coordinator_mode.py +127 -0
  69. illusion/engine/__init__.py +95 -0
  70. illusion/engine/cost_tracker.py +55 -0
  71. illusion/engine/messages.py +369 -0
  72. illusion/engine/query.py +632 -0
  73. illusion/engine/query_engine.py +343 -0
  74. illusion/engine/stream_events.py +169 -0
  75. illusion/hooks/__init__.py +67 -0
  76. illusion/hooks/events.py +43 -0
  77. illusion/hooks/executor.py +397 -0
  78. illusion/hooks/hot_reload.py +74 -0
  79. illusion/hooks/loader.py +133 -0
  80. illusion/hooks/schemas.py +121 -0
  81. illusion/hooks/types.py +86 -0
  82. illusion/mcp/__init__.py +104 -0
  83. illusion/mcp/client.py +377 -0
  84. illusion/mcp/config.py +140 -0
  85. illusion/mcp/types.py +175 -0
  86. illusion/memory/__init__.py +36 -0
  87. illusion/memory/manager.py +94 -0
  88. illusion/memory/memdir.py +58 -0
  89. illusion/memory/paths.py +57 -0
  90. illusion/memory/scan.py +120 -0
  91. illusion/memory/search.py +83 -0
  92. illusion/memory/types.py +43 -0
  93. illusion/output_styles/__init__.py +15 -0
  94. illusion/output_styles/loader.py +64 -0
  95. illusion/permissions/__init__.py +39 -0
  96. illusion/permissions/checker.py +174 -0
  97. illusion/permissions/modes.py +38 -0
  98. illusion/platforms.py +148 -0
  99. illusion/plugins/__init__.py +71 -0
  100. illusion/plugins/bundled/__init__.py +0 -0
  101. illusion/plugins/installer.py +59 -0
  102. illusion/plugins/loader.py +301 -0
  103. illusion/plugins/schemas.py +51 -0
  104. illusion/plugins/types.py +56 -0
  105. illusion/prompts/__init__.py +29 -0
  106. illusion/prompts/claudemd.py +74 -0
  107. illusion/prompts/context.py +187 -0
  108. illusion/prompts/environment.py +189 -0
  109. illusion/prompts/system_prompt.py +155 -0
  110. illusion/py.typed +0 -0
  111. illusion/sandbox/__init__.py +29 -0
  112. illusion/sandbox/adapter.py +174 -0
  113. illusion/services/__init__.py +59 -0
  114. illusion/services/compact/__init__.py +1015 -0
  115. illusion/services/cron.py +338 -0
  116. illusion/services/cron_scheduler.py +715 -0
  117. illusion/services/file_history.py +258 -0
  118. illusion/services/lsp/__init__.py +455 -0
  119. illusion/services/session_storage.py +237 -0
  120. illusion/services/token_estimation.py +72 -0
  121. illusion/skills/__init__.py +60 -0
  122. illusion/skills/bundled/__init__.py +110 -0
  123. illusion/skills/bundled/content/batch.md +86 -0
  124. illusion/skills/bundled/content/coding-guidelines.md +70 -0
  125. illusion/skills/bundled/content/debug.md +38 -0
  126. illusion/skills/bundled/content/loop.md +82 -0
  127. illusion/skills/bundled/content/remember.md +105 -0
  128. illusion/skills/bundled/content/simplify.md +53 -0
  129. illusion/skills/bundled/content/skillify.md +113 -0
  130. illusion/skills/bundled/content/stuck.md +54 -0
  131. illusion/skills/bundled/content/update-config.md +329 -0
  132. illusion/skills/bundled/content/verify.md +74 -0
  133. illusion/skills/loader.py +219 -0
  134. illusion/skills/registry.py +40 -0
  135. illusion/skills/types.py +24 -0
  136. illusion/state/__init__.py +18 -0
  137. illusion/state/app_state.py +67 -0
  138. illusion/state/store.py +93 -0
  139. illusion/swarm/__init__.py +71 -0
  140. illusion/swarm/agent_executor.py +857 -0
  141. illusion/swarm/in_process.py +259 -0
  142. illusion/swarm/subprocess_backend.py +136 -0
  143. illusion/swarm/team_helpers.py +123 -0
  144. illusion/swarm/types.py +159 -0
  145. illusion/swarm/worktree.py +347 -0
  146. illusion/tasks/__init__.py +33 -0
  147. illusion/tasks/local_agent_task.py +42 -0
  148. illusion/tasks/local_shell_task.py +27 -0
  149. illusion/tasks/manager.py +377 -0
  150. illusion/tasks/stop_task.py +21 -0
  151. illusion/tasks/types.py +88 -0
  152. illusion/tools/__init__.py +126 -0
  153. illusion/tools/agent_tool.py +388 -0
  154. illusion/tools/ask_user_question_tool.py +186 -0
  155. illusion/tools/base.py +149 -0
  156. illusion/tools/bash_tool.py +413 -0
  157. illusion/tools/config_tool.py +90 -0
  158. illusion/tools/cron_tool.py +473 -0
  159. illusion/tools/enter_plan_mode_tool.py +147 -0
  160. illusion/tools/enter_worktree_tool.py +188 -0
  161. illusion/tools/exit_plan_mode_tool.py +69 -0
  162. illusion/tools/exit_worktree_tool.py +225 -0
  163. illusion/tools/file_edit_tool.py +283 -0
  164. illusion/tools/file_read_tool.py +294 -0
  165. illusion/tools/file_write_tool.py +184 -0
  166. illusion/tools/glob_tool.py +165 -0
  167. illusion/tools/grep_tool.py +190 -0
  168. illusion/tools/list_mcp_resources_tool.py +80 -0
  169. illusion/tools/lsp_tool.py +333 -0
  170. illusion/tools/mcp_auth_tool.py +100 -0
  171. illusion/tools/mcp_tool.py +75 -0
  172. illusion/tools/notebook_edit_tool.py +242 -0
  173. illusion/tools/powershell_tool.py +334 -0
  174. illusion/tools/read_mcp_resource_tool.py +63 -0
  175. illusion/tools/repl_tool.py +100 -0
  176. illusion/tools/send_message_tool.py +112 -0
  177. illusion/tools/shell_common.py +187 -0
  178. illusion/tools/skill_tool.py +86 -0
  179. illusion/tools/sleep_tool.py +62 -0
  180. illusion/tools/structured_output_tool.py +58 -0
  181. illusion/tools/task_create_tool.py +98 -0
  182. illusion/tools/task_get_tool.py +94 -0
  183. illusion/tools/task_list_tool.py +94 -0
  184. illusion/tools/task_output_tool.py +55 -0
  185. illusion/tools/task_stop_tool.py +52 -0
  186. illusion/tools/task_update_tool.py +224 -0
  187. illusion/tools/team_create_tool.py +236 -0
  188. illusion/tools/team_delete_tool.py +104 -0
  189. illusion/tools/todo_write_tool.py +198 -0
  190. illusion/tools/tool_search_tool.py +156 -0
  191. illusion/tools/web_fetch_tool.py +264 -0
  192. illusion/tools/web_search_tool.py +186 -0
  193. illusion/ui/__init__.py +23 -0
  194. illusion/ui/app.py +258 -0
  195. illusion/ui/backend_host.py +1180 -0
  196. illusion/ui/input.py +86 -0
  197. illusion/ui/output.py +363 -0
  198. illusion/ui/permission_dialog.py +47 -0
  199. illusion/ui/permission_store.py +99 -0
  200. illusion/ui/protocol.py +384 -0
  201. illusion/ui/react_launcher.py +280 -0
  202. illusion/ui/runtime.py +787 -0
  203. illusion/ui/textual_app.py +603 -0
  204. illusion/ui/web/__init__.py +10 -0
  205. illusion/ui/web/server.py +87 -0
  206. illusion/ui/web/ws_host.py +1197 -0
  207. illusion/utils/__init__.py +0 -0
  208. illusion/utils/ripgrep.py +299 -0
  209. illusion/utils/shell.py +248 -0
  210. illusion_code-0.1.0.dist-info/METADATA +1159 -0
  211. illusion_code-0.1.0.dist-info/RECORD +214 -0
  212. illusion_code-0.1.0.dist-info/WHEEL +4 -0
  213. illusion_code-0.1.0.dist-info/entry_points.txt +2 -0
  214. illusion_code-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,259 @@
1
+ """
2
+ IllusionCode 配置和数据目录路径解析模块
3
+ =======================================
4
+
5
+ 遵循 XDG 类似约定,默认使用 ~/.illusion/ 作为基础目录。
6
+
7
+ 本模块提供各种目录路径的获取函数,支持环境变量覆盖,
8
+ 确保配置、数据、日志等文件存储在正确的位置。
9
+
10
+ 函数说明:
11
+ - get_config_dir: 获取配置目录
12
+ - get_config_file_path: 获取配置文件路径
13
+ - get_data_dir: 获取数据目录
14
+ - get_logs_dir: 获取日志目录
15
+ - get_sessions_dir: 获取会话存储目录
16
+ - get_tasks_dir: 获取后台任务输出目录
17
+ - get_feedback_dir: 获取反馈存储目录
18
+ - get_project_config_dir: 获取项目级配置目录
19
+ - get_project_issue_file: 获取项目级问题上下文文件
20
+ - get_project_pr_comments_file: 获取项目级 PR 评论上下文文件
21
+ - get_cron_dir: 获取 cron 数据目录
22
+ - get_cron_registry_path: 获取 cron 注册表文件路径
23
+ - get_feedback_log_path: 获取反馈日志文件路径
24
+
25
+ 使用示例:
26
+ >>> from illusion.config.paths import get_config_dir, get_data_dir
27
+ >>> config = get_config_dir()
28
+ >>> data = get_data_dir()
29
+ """
30
+
31
+ from __future__ import annotations
32
+
33
+ import os # 导入 os 模块用于环境变量和路径操作
34
+ from pathlib import Path # 导入 Path 类用于路径处理
35
+
36
+ # 常量定义
37
+ _DEFAULT_BASE_DIR = ".illusion" # 默认基础目录名称
38
+ _CONFIG_FILE_NAME = "settings.json" # 配置文件名称
39
+
40
+
41
+ def _sanitize_path_component(value: str) -> str:
42
+ """将路径组件规范化为安全形式。"""
43
+ sanitized = "".join(ch if (ch.isalnum() or ch in {"-", "_"}) else "-" for ch in value)
44
+ sanitized = sanitized.strip("-_")
45
+ return sanitized or "default"
46
+
47
+
48
+ def get_config_dir() -> Path:
49
+ """返回配置目录,必要时创建
50
+
51
+ 解析顺序:
52
+ 1. ILLUSION_CONFIG_DIR 环境变量(优先)
53
+ 2. ~/.illusion/(默认)
54
+
55
+ Returns:
56
+ Path: 配置目录路径
57
+ """
58
+ # 检查环境变量 ILLUSION_CONFIG_DIR 是否设置
59
+ env_dir = os.environ.get("ILLUSION_CONFIG_DIR")
60
+ if env_dir:
61
+ # 使用环境变量指定的目录
62
+ config_dir = Path(env_dir)
63
+ else:
64
+ # 使用默认目录 ~/.illusion/
65
+ config_dir = Path.home() / _DEFAULT_BASE_DIR
66
+
67
+ # 确保目录存在,不存在则创建
68
+ config_dir.mkdir(parents=True, exist_ok=True)
69
+ return config_dir
70
+
71
+
72
+ def get_config_file_path() -> Path:
73
+ """返回主设置文件路径(~/.illusion/settings.json)
74
+
75
+ Returns:
76
+ Path: 配置文件路径
77
+ """
78
+ return get_config_dir() / _CONFIG_FILE_NAME
79
+
80
+
81
+ def get_data_dir() -> Path:
82
+ """返回数据目录(用于缓存、历史等)
83
+
84
+ 解析顺序:
85
+ 1. ILLUSION_DATA_DIR 环境变量(优先)
86
+ 2. ~/.illusion/data/(默认)
87
+
88
+ Returns:
89
+ Path: 数据目录路径
90
+ """
91
+ # 检查环境变量 ILLUSION_DATA_DIR 是否设置
92
+ env_dir = os.environ.get("ILLUSION_DATA_DIR")
93
+ if env_dir:
94
+ data_dir = Path(env_dir)
95
+ else:
96
+ # 默认使用配置目录下的 data 子目录
97
+ data_dir = get_config_dir() / "data"
98
+
99
+ data_dir.mkdir(parents=True, exist_ok=True)
100
+ return data_dir
101
+
102
+
103
+ def get_logs_dir() -> Path:
104
+ """返回日志目录
105
+
106
+ 解析顺序:
107
+ 1. ILLUSION_LOGS_DIR 环境变量(优先)
108
+ 2. ~/.illusion/logs/(默认)
109
+
110
+ Returns:
111
+ Path: 日志目录路径
112
+ """
113
+ # 检查环境变量 ILLUSION_LOGS_DIR 是否设置
114
+ env_dir = os.environ.get("ILLUSION_LOGS_DIR")
115
+ if env_dir:
116
+ logs_dir = Path(env_dir)
117
+ else:
118
+ # 默认使用配置目录下的 logs 子目录
119
+ logs_dir = get_config_dir() / "logs"
120
+
121
+ logs_dir.mkdir(parents=True, exist_ok=True)
122
+ return logs_dir
123
+
124
+
125
+ def get_sessions_dir() -> Path:
126
+ """返回会话存储目录
127
+
128
+ 用于存储对话会话相关的数据文件。
129
+
130
+ Returns:
131
+ Path: 会话目录路径
132
+ """
133
+ sessions_dir = get_data_dir() / "sessions"
134
+ sessions_dir.mkdir(parents=True, exist_ok=True)
135
+ return sessions_dir
136
+
137
+
138
+ def get_tasks_dir() -> Path:
139
+ """返回后台任务输出目录
140
+
141
+ 用于存储后台任务执行结果和输出文件。
142
+ 当设置 ``ILLUSION_TASK_LIST_ID`` 环境变量时,任务会隔离到对应子目录。
143
+
144
+ Returns:
145
+ Path: 任务目录路径
146
+ """
147
+ tasks_root = get_data_dir() / "tasks"
148
+ task_list_id = os.environ.get("ILLUSION_TASK_LIST_ID", "").strip()
149
+ if task_list_id:
150
+ tasks_dir = tasks_root / _sanitize_path_component(task_list_id)
151
+ else:
152
+ tasks_dir = tasks_root
153
+ tasks_dir.mkdir(parents=True, exist_ok=True)
154
+ return tasks_dir
155
+
156
+
157
+ def get_feedback_dir() -> Path:
158
+ """返回反馈存储目录
159
+
160
+ 用于存储用户反馈相关的数据文件。
161
+
162
+ Returns:
163
+ Path: 反馈目录路径
164
+ """
165
+ feedback_dir = get_data_dir() / "feedback"
166
+ feedback_dir.mkdir(parents=True, exist_ok=True)
167
+ return feedback_dir
168
+
169
+
170
+ def get_feedback_log_path() -> Path:
171
+ """返回反馈日志文件路径
172
+
173
+ Returns:
174
+ Path: 反馈日志文件路径
175
+ """
176
+ return get_feedback_dir() / "feedback.log"
177
+
178
+
179
+ def get_cron_dir() -> Path:
180
+ """返回 cron 数据目录
181
+
182
+ 用于存储定时任务相关的所有文件(注册表、历史、PID 等)。
183
+
184
+ Returns:
185
+ Path: cron 数据目录路径
186
+ """
187
+ cron_dir = get_data_dir() / "cron"
188
+ cron_dir.mkdir(parents=True, exist_ok=True)
189
+ return cron_dir
190
+
191
+
192
+ def get_cron_registry_path() -> Path:
193
+ """返回 cron 注册表文件路径
194
+
195
+ 用于存储定时任务配置信息。
196
+
197
+ Returns:
198
+ Path: cron 注册表文件路径
199
+ """
200
+ return get_cron_dir() / "jobs.json"
201
+
202
+
203
+ def get_project_config_dir(cwd: str | Path) -> Path:
204
+ """返回项目级 .illusion 目录
205
+
206
+ 在当前工作目录下创建 .illusion 子目录,用于存储项目级配置。
207
+
208
+ Args:
209
+ cwd: 当前工作目录
210
+
211
+ Returns:
212
+ Path: 项目配置目录路径
213
+ """
214
+ # 解析为绝对路径并在末尾添加 .illusion 子目录
215
+ project_dir = Path(cwd).resolve() / ".illusion"
216
+ project_dir.mkdir(parents=True, exist_ok=True)
217
+ return project_dir
218
+
219
+
220
+ def get_project_issue_file(cwd: str | Path) -> Path:
221
+ """返回项目级问题上下文文件
222
+
223
+ 用于存储当前项目的问题上下文信息。
224
+
225
+ Args:
226
+ cwd: 当前工作目录
227
+
228
+ Returns:
229
+ Path: 问题文件路径
230
+ """
231
+ return get_project_config_dir(cwd) / "issue.md"
232
+
233
+
234
+ def get_project_pr_comments_file(cwd: str | Path) -> Path:
235
+ """返回项目级 PR 评论上下文文件
236
+
237
+ 用于存储 Pull Request 的评论上下文信息。
238
+
239
+ Args:
240
+ cwd: 当前工作目录
241
+
242
+ Returns:
243
+ Path: PR 评论文件路径
244
+ """
245
+ return get_project_config_dir(cwd) / "pr_comments.md"
246
+
247
+
248
+ def get_project_mcp_dir(cwd: str | Path) -> Path:
249
+ """返回项目级 MCP 配置目录(.illusion/mcp/)
250
+
251
+ Args:
252
+ cwd: 当前工作目录
253
+
254
+ Returns:
255
+ Path: 项目 MCP 配置目录路径
256
+ """
257
+ path = get_project_config_dir(cwd) / "mcp"
258
+ path.mkdir(parents=True, exist_ok=True)
259
+ return path