nosis-agent 0.1.1__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 (272) hide show
  1. nosis_agent-0.1.1/LICENSE +21 -0
  2. nosis_agent-0.1.1/PKG-INFO +209 -0
  3. nosis_agent-0.1.1/README.md +174 -0
  4. nosis_agent-0.1.1/agent_core/__init__.py +411 -0
  5. nosis_agent-0.1.1/agent_core/_posix_files.py +84 -0
  6. nosis_agent-0.1.1/agent_core/_windows_files.py +241 -0
  7. nosis_agent-0.1.1/agent_core/agent.py +566 -0
  8. nosis_agent-0.1.1/agent_core/approval.py +77 -0
  9. nosis_agent-0.1.1/agent_core/atomic.py +25 -0
  10. nosis_agent-0.1.1/agent_core/auxiliary.py +45 -0
  11. nosis_agent-0.1.1/agent_core/config.py +371 -0
  12. nosis_agent-0.1.1/agent_core/content.py +79 -0
  13. nosis_agent-0.1.1/agent_core/context_manager.py +515 -0
  14. nosis_agent-0.1.1/agent_core/errors.py +52 -0
  15. nosis_agent-0.1.1/agent_core/execution/__init__.py +62 -0
  16. nosis_agent-0.1.1/agent_core/execution/authority.py +94 -0
  17. nosis_agent-0.1.1/agent_core/execution/executor.py +117 -0
  18. nosis_agent-0.1.1/agent_core/execution/process.py +437 -0
  19. nosis_agent-0.1.1/agent_core/execution/router.py +102 -0
  20. nosis_agent-0.1.1/agent_core/execution/sandbox/__init__.py +38 -0
  21. nosis_agent-0.1.1/agent_core/execution/sandbox/base.py +117 -0
  22. nosis_agent-0.1.1/agent_core/execution/sandbox/linux.py +101 -0
  23. nosis_agent-0.1.1/agent_core/execution/sandbox/macos.py +112 -0
  24. nosis_agent-0.1.1/agent_core/execution/sandbox/windows.py +121 -0
  25. nosis_agent-0.1.1/agent_core/file_lock.py +43 -0
  26. nosis_agent-0.1.1/agent_core/files.py +147 -0
  27. nosis_agent-0.1.1/agent_core/hooks.py +262 -0
  28. nosis_agent-0.1.1/agent_core/image_generation.py +28 -0
  29. nosis_agent-0.1.1/agent_core/jobs.py +451 -0
  30. nosis_agent-0.1.1/agent_core/llm.py +121 -0
  31. nosis_agent-0.1.1/agent_core/loop_policy.py +107 -0
  32. nosis_agent-0.1.1/agent_core/mcp/__init__.py +22 -0
  33. nosis_agent-0.1.1/agent_core/mcp/config.py +403 -0
  34. nosis_agent-0.1.1/agent_core/mcp/connection.py +96 -0
  35. nosis_agent-0.1.1/agent_core/mcp/manager.py +413 -0
  36. nosis_agent-0.1.1/agent_core/mcp/tool.py +128 -0
  37. nosis_agent-0.1.1/agent_core/media.py +337 -0
  38. nosis_agent-0.1.1/agent_core/memory.py +407 -0
  39. nosis_agent-0.1.1/agent_core/path_utils.py +25 -0
  40. nosis_agent-0.1.1/agent_core/permissions.py +99 -0
  41. nosis_agent-0.1.1/agent_core/plan.py +158 -0
  42. nosis_agent-0.1.1/agent_core/projection.py +80 -0
  43. nosis_agent-0.1.1/agent_core/prompting.py +97 -0
  44. nosis_agent-0.1.1/agent_core/providers/__init__.py +37 -0
  45. nosis_agent-0.1.1/agent_core/providers/_utils.py +8 -0
  46. nosis_agent-0.1.1/agent_core/providers/base.py +573 -0
  47. nosis_agent-0.1.1/agent_core/providers/data/tokenizers/LICENSE.tiktoken +21 -0
  48. nosis_agent-0.1.1/agent_core/providers/data/tokenizers/README.md +18 -0
  49. nosis_agent-0.1.1/agent_core/providers/data/tokenizers/cl100k_base.tiktoken.gz +0 -0
  50. nosis_agent-0.1.1/agent_core/providers/data/tokenizers/encodings.json +21 -0
  51. nosis_agent-0.1.1/agent_core/providers/data/tokenizers/o200k_base.tiktoken.gz +0 -0
  52. nosis_agent-0.1.1/agent_core/providers/deepseek_models.py +17 -0
  53. nosis_agent-0.1.1/agent_core/providers/http.py +29 -0
  54. nosis_agent-0.1.1/agent_core/providers/image_generation.py +145 -0
  55. nosis_agent-0.1.1/agent_core/providers/image_limits.py +31 -0
  56. nosis_agent-0.1.1/agent_core/providers/litellm_provider.py +166 -0
  57. nosis_agent-0.1.1/agent_core/providers/openai_models.py +45 -0
  58. nosis_agent-0.1.1/agent_core/providers/openai_provider.py +371 -0
  59. nosis_agent-0.1.1/agent_core/providers/openai_tokens.py +58 -0
  60. nosis_agent-0.1.1/agent_core/providers/reasoning.py +139 -0
  61. nosis_agent-0.1.1/agent_core/providers/tool_call_stream.py +239 -0
  62. nosis_agent-0.1.1/agent_core/public_url.py +106 -0
  63. nosis_agent-0.1.1/agent_core/scheduler.py +619 -0
  64. nosis_agent-0.1.1/agent_core/session.py +772 -0
  65. nosis_agent-0.1.1/agent_core/session_paths.py +50 -0
  66. nosis_agent-0.1.1/agent_core/session_store.py +762 -0
  67. nosis_agent-0.1.1/agent_core/session_title.py +67 -0
  68. nosis_agent-0.1.1/agent_core/skills.py +226 -0
  69. nosis_agent-0.1.1/agent_core/subagent.py +326 -0
  70. nosis_agent-0.1.1/agent_core/time_utils.py +13 -0
  71. nosis_agent-0.1.1/agent_core/tool_batch.py +304 -0
  72. nosis_agent-0.1.1/agent_core/tool_result.py +185 -0
  73. nosis_agent-0.1.1/agent_core/tools/__init__.py +94 -0
  74. nosis_agent-0.1.1/agent_core/tools/base.py +227 -0
  75. nosis_agent-0.1.1/agent_core/tools/budget.py +41 -0
  76. nosis_agent-0.1.1/agent_core/tools/builtin/__init__.py +86 -0
  77. nosis_agent-0.1.1/agent_core/tools/builtin/_desktop.py +66 -0
  78. nosis_agent-0.1.1/agent_core/tools/builtin/analyze_image.py +79 -0
  79. nosis_agent-0.1.1/agent_core/tools/builtin/apply_patch.py +440 -0
  80. nosis_agent-0.1.1/agent_core/tools/builtin/ask_user.py +148 -0
  81. nosis_agent-0.1.1/agent_core/tools/builtin/computer_action.py +169 -0
  82. nosis_agent-0.1.1/agent_core/tools/builtin/computer_screenshot.py +64 -0
  83. nosis_agent-0.1.1/agent_core/tools/builtin/edit_file.py +78 -0
  84. nosis_agent-0.1.1/agent_core/tools/builtin/generate_image.py +203 -0
  85. nosis_agent-0.1.1/agent_core/tools/builtin/job_control.py +59 -0
  86. nosis_agent-0.1.1/agent_core/tools/builtin/list_directory.py +237 -0
  87. nosis_agent-0.1.1/agent_core/tools/builtin/present_file.py +63 -0
  88. nosis_agent-0.1.1/agent_core/tools/builtin/read_file.py +95 -0
  89. nosis_agent-0.1.1/agent_core/tools/builtin/read_image.py +127 -0
  90. nosis_agent-0.1.1/agent_core/tools/builtin/read_skill.py +125 -0
  91. nosis_agent-0.1.1/agent_core/tools/builtin/remember.py +72 -0
  92. nosis_agent-0.1.1/agent_core/tools/builtin/schedule.py +306 -0
  93. nosis_agent-0.1.1/agent_core/tools/builtin/search_files.py +551 -0
  94. nosis_agent-0.1.1/agent_core/tools/builtin/shell.py +407 -0
  95. nosis_agent-0.1.1/agent_core/tools/builtin/subagent.py +101 -0
  96. nosis_agent-0.1.1/agent_core/tools/builtin/update_plan.py +124 -0
  97. nosis_agent-0.1.1/agent_core/tools/builtin/web_fetch.py +261 -0
  98. nosis_agent-0.1.1/agent_core/tools/builtin/web_search.py +286 -0
  99. nosis_agent-0.1.1/agent_core/tools/builtin/write_file.py +74 -0
  100. nosis_agent-0.1.1/agent_core/tools/catalog.py +189 -0
  101. nosis_agent-0.1.1/agent_core/tools/config.py +109 -0
  102. nosis_agent-0.1.1/agent_core/tools/context.py +107 -0
  103. nosis_agent-0.1.1/agent_core/tools/globs.py +43 -0
  104. nosis_agent-0.1.1/agent_core/tools/paths.py +89 -0
  105. nosis_agent-0.1.1/agent_core/tools/policy.py +92 -0
  106. nosis_agent-0.1.1/agent_core/tools/text.py +241 -0
  107. nosis_agent-0.1.1/agent_core/turn_control.py +114 -0
  108. nosis_agent-0.1.1/agent_core/usage.py +59 -0
  109. nosis_agent-0.1.1/agent_core/windows_sandbox.py +1371 -0
  110. nosis_agent-0.1.1/agent_core/workspace.py +33 -0
  111. nosis_agent-0.1.1/agent_core/workspace_instructions.py +19 -0
  112. nosis_agent-0.1.1/agent_runtime/__init__.py +20 -0
  113. nosis_agent-0.1.1/agent_runtime/attachments.py +98 -0
  114. nosis_agent-0.1.1/agent_runtime/callbacks.py +19 -0
  115. nosis_agent-0.1.1/agent_runtime/config.py +627 -0
  116. nosis_agent-0.1.1/agent_runtime/defaults/__init__.py +0 -0
  117. nosis_agent-0.1.1/agent_runtime/defaults/agent_config.json +73 -0
  118. nosis_agent-0.1.1/agent_runtime/defaults/im_channels.json +12 -0
  119. nosis_agent-0.1.1/agent_runtime/defaults/plugins/playwright/.mcp.json +8 -0
  120. nosis_agent-0.1.1/agent_runtime/defaults/plugins/playwright/plugin.json +9 -0
  121. nosis_agent-0.1.1/agent_runtime/defaults/prompts_template/Consolidator.md +60 -0
  122. nosis_agent-0.1.1/agent_runtime/defaults/prompts_template/GlobalMemory.md +15 -0
  123. nosis_agent-0.1.1/agent_runtime/defaults/prompts_template/SessionTitle.md +8 -0
  124. nosis_agent-0.1.1/agent_runtime/defaults/prompts_template/Soul.md +21 -0
  125. nosis_agent-0.1.1/agent_runtime/defaults/prompts_template/SubAgent.md +11 -0
  126. nosis_agent-0.1.1/agent_runtime/defaults/prompts_template/WorkspaceMemory.md +16 -0
  127. nosis_agent-0.1.1/agent_runtime/defaults/provider_config.json +50 -0
  128. nosis_agent-0.1.1/agent_runtime/defaults/skills/plugin-creator/SKILL.md +64 -0
  129. nosis_agent-0.1.1/agent_runtime/defaults/skills/plugin-creator/references/hooks.md +68 -0
  130. nosis_agent-0.1.1/agent_runtime/defaults/skills/plugin-creator/references/installing-and-updating.md +62 -0
  131. nosis_agent-0.1.1/agent_runtime/defaults/skills/plugin-creator/references/plugin-json-spec.md +148 -0
  132. nosis_agent-0.1.1/agent_runtime/defaults/skills/plugin-creator/scripts/create_basic_plugin.py +166 -0
  133. nosis_agent-0.1.1/agent_runtime/defaults/skills/plugin-creator/scripts/plugin_names.py +28 -0
  134. nosis_agent-0.1.1/agent_runtime/defaults/skills/plugin-creator/scripts/validate_plugin.py +516 -0
  135. nosis_agent-0.1.1/agent_runtime/defaults/skills/skill-creator/SKILL.md +205 -0
  136. nosis_agent-0.1.1/agent_runtime/defaults/skills/skill-creator/license.txt +202 -0
  137. nosis_agent-0.1.1/agent_runtime/defaults/skills/skill-creator/scripts/init_skill.py +291 -0
  138. nosis_agent-0.1.1/agent_runtime/defaults/skills/skill-creator/scripts/quick_validate.py +127 -0
  139. nosis_agent-0.1.1/agent_runtime/defaults/tool_config.json +21 -0
  140. nosis_agent-0.1.1/agent_runtime/desktop/__init__.py +5 -0
  141. nosis_agent-0.1.1/agent_runtime/desktop/computer.py +641 -0
  142. nosis_agent-0.1.1/agent_runtime/desktop/pyautogui_input.py +124 -0
  143. nosis_agent-0.1.1/agent_runtime/desktop/windows.py +363 -0
  144. nosis_agent-0.1.1/agent_runtime/execution_plane.py +110 -0
  145. nosis_agent-0.1.1/agent_runtime/host.py +153 -0
  146. nosis_agent-0.1.1/agent_runtime/instructions.py +51 -0
  147. nosis_agent-0.1.1/agent_runtime/plane_manager.py +588 -0
  148. nosis_agent-0.1.1/agent_runtime/plugins.py +469 -0
  149. nosis_agent-0.1.1/agent_runtime/role_tools.py +58 -0
  150. nosis_agent-0.1.1/agent_runtime/scheduled_runner.py +52 -0
  151. nosis_agent-0.1.1/agent_runtime/services.py +46 -0
  152. nosis_agent-0.1.1/agent_runtime/session_controller.py +138 -0
  153. nosis_agent-0.1.1/agent_runtime/session_title.py +63 -0
  154. nosis_agent-0.1.1/agent_runtime/settings.py +676 -0
  155. nosis_agent-0.1.1/agent_runtime/turn_runner.py +126 -0
  156. nosis_agent-0.1.1/interfaces/__init__.py +0 -0
  157. nosis_agent-0.1.1/interfaces/application_host.py +140 -0
  158. nosis_agent-0.1.1/interfaces/bridge/__init__.py +0 -0
  159. nosis_agent-0.1.1/interfaces/bridge/__main__.py +75 -0
  160. nosis_agent-0.1.1/interfaces/bridge/bridge.py +616 -0
  161. nosis_agent-0.1.1/interfaces/bridge/event_stream.py +35 -0
  162. nosis_agent-0.1.1/interfaces/bridge/managed_workspaces.py +51 -0
  163. nosis_agent-0.1.1/interfaces/bridge/protocol.py +425 -0
  164. nosis_agent-0.1.1/interfaces/bridge/server.py +91 -0
  165. nosis_agent-0.1.1/interfaces/bridge_process.py +201 -0
  166. nosis_agent-0.1.1/interfaces/gui/__init__.py +0 -0
  167. nosis_agent-0.1.1/interfaces/gui/routes/__init__.py +1 -0
  168. nosis_agent-0.1.1/interfaces/gui/routes/media.py +226 -0
  169. nosis_agent-0.1.1/interfaces/gui/routes/schedules.py +92 -0
  170. nosis_agent-0.1.1/interfaces/gui/routes/sessions.py +522 -0
  171. nosis_agent-0.1.1/interfaces/gui/routes/settings.py +99 -0
  172. nosis_agent-0.1.1/interfaces/gui/routes/workspace.py +136 -0
  173. nosis_agent-0.1.1/interfaces/gui/server.py +115 -0
  174. nosis_agent-0.1.1/interfaces/gui/static/assets/index-D76InFO1.css +1 -0
  175. nosis_agent-0.1.1/interfaces/gui/static/assets/index-D7__YYLa.js +47 -0
  176. nosis_agent-0.1.1/interfaces/gui/static/index.html +15 -0
  177. nosis_agent-0.1.1/interfaces/gui/static/nosis-avatar-128.png +0 -0
  178. nosis_agent-0.1.1/interfaces/gui/static/nosis-avatar.png +0 -0
  179. nosis_agent-0.1.1/interfaces/gui/windows_folders.py +41 -0
  180. nosis_agent-0.1.1/interfaces/launch.py +69 -0
  181. nosis_agent-0.1.1/interfaces/mobile/__init__.py +1 -0
  182. nosis_agent-0.1.1/interfaces/mobile/bindings.py +72 -0
  183. nosis_agent-0.1.1/interfaces/mobile/config.py +53 -0
  184. nosis_agent-0.1.1/interfaces/mobile/controller.py +753 -0
  185. nosis_agent-0.1.1/interfaces/mobile/dist/feishu.cjs +126926 -0
  186. nosis_agent-0.1.1/interfaces/mobile/feishu.py +256 -0
  187. nosis_agent-0.1.1/interfaces/mobile/service.py +41 -0
  188. nosis_agent-0.1.1/interfaces/mobile/streaming.py +113 -0
  189. nosis_agent-0.1.1/interfaces/mobile/views.py +30 -0
  190. nosis_agent-0.1.1/interfaces/session_host.py +340 -0
  191. nosis_agent-0.1.1/interfaces/tui/dist/app.js +26255 -0
  192. nosis_agent-0.1.1/nosis_agent.egg-info/PKG-INFO +209 -0
  193. nosis_agent-0.1.1/nosis_agent.egg-info/SOURCES.txt +270 -0
  194. nosis_agent-0.1.1/nosis_agent.egg-info/dependency_links.txt +1 -0
  195. nosis_agent-0.1.1/nosis_agent.egg-info/entry_points.txt +4 -0
  196. nosis_agent-0.1.1/nosis_agent.egg-info/requires.txt +32 -0
  197. nosis_agent-0.1.1/nosis_agent.egg-info/top_level.txt +3 -0
  198. nosis_agent-0.1.1/pyproject.toml +77 -0
  199. nosis_agent-0.1.1/setup.cfg +4 -0
  200. nosis_agent-0.1.1/tests/test_agent.py +2460 -0
  201. nosis_agent-0.1.1/tests/test_agent_config.py +588 -0
  202. nosis_agent-0.1.1/tests/test_application_host.py +436 -0
  203. nosis_agent-0.1.1/tests/test_attachments.py +34 -0
  204. nosis_agent-0.1.1/tests/test_bridge.py +4047 -0
  205. nosis_agent-0.1.1/tests/test_bridge_client.py +387 -0
  206. nosis_agent-0.1.1/tests/test_bridge_main.py +57 -0
  207. nosis_agent-0.1.1/tests/test_bridge_multiplex.py +238 -0
  208. nosis_agent-0.1.1/tests/test_computer.py +531 -0
  209. nosis_agent-0.1.1/tests/test_computer_action.py +99 -0
  210. nosis_agent-0.1.1/tests/test_computer_screenshot.py +177 -0
  211. nosis_agent-0.1.1/tests/test_config.py +1059 -0
  212. nosis_agent-0.1.1/tests/test_execution.py +740 -0
  213. nosis_agent-0.1.1/tests/test_feishu.py +128 -0
  214. nosis_agent-0.1.1/tests/test_file_boundary.py +268 -0
  215. nosis_agent-0.1.1/tests/test_file_lock.py +58 -0
  216. nosis_agent-0.1.1/tests/test_file_writes.py +533 -0
  217. nosis_agent-0.1.1/tests/test_generate_image.py +147 -0
  218. nosis_agent-0.1.1/tests/test_gui.py +2723 -0
  219. nosis_agent-0.1.1/tests/test_gui_windows_folders.py +73 -0
  220. nosis_agent-0.1.1/tests/test_hook_interop.py +168 -0
  221. nosis_agent-0.1.1/tests/test_hooks.py +328 -0
  222. nosis_agent-0.1.1/tests/test_image_cost.py +184 -0
  223. nosis_agent-0.1.1/tests/test_image_generation_provider.py +163 -0
  224. nosis_agent-0.1.1/tests/test_job_control.py +357 -0
  225. nosis_agent-0.1.1/tests/test_jobs.py +475 -0
  226. nosis_agent-0.1.1/tests/test_launch.py +66 -0
  227. nosis_agent-0.1.1/tests/test_linux_sandbox.py +418 -0
  228. nosis_agent-0.1.1/tests/test_litellm_provider.py +1514 -0
  229. nosis_agent-0.1.1/tests/test_loop_policy.py +85 -0
  230. nosis_agent-0.1.1/tests/test_managed_workspaces.py +67 -0
  231. nosis_agent-0.1.1/tests/test_mcp.py +708 -0
  232. nosis_agent-0.1.1/tests/test_media.py +343 -0
  233. nosis_agent-0.1.1/tests/test_memory.py +431 -0
  234. nosis_agent-0.1.1/tests/test_mobile.py +900 -0
  235. nosis_agent-0.1.1/tests/test_mobile_streaming.py +142 -0
  236. nosis_agent-0.1.1/tests/test_openai_provider.py +456 -0
  237. nosis_agent-0.1.1/tests/test_openai_startup.py +134 -0
  238. nosis_agent-0.1.1/tests/test_permissions.py +279 -0
  239. nosis_agent-0.1.1/tests/test_plan.py +269 -0
  240. nosis_agent-0.1.1/tests/test_plugin_contract.py +180 -0
  241. nosis_agent-0.1.1/tests/test_plugin_interop.py +319 -0
  242. nosis_agent-0.1.1/tests/test_plugins.py +269 -0
  243. nosis_agent-0.1.1/tests/test_present_file.py +185 -0
  244. nosis_agent-0.1.1/tests/test_prompts.py +177 -0
  245. nosis_agent-0.1.1/tests/test_provider_image_limits.py +221 -0
  246. nosis_agent-0.1.1/tests/test_provider_selection.py +70 -0
  247. nosis_agent-0.1.1/tests/test_read_image.py +363 -0
  248. nosis_agent-0.1.1/tests/test_reasoning.py +80 -0
  249. nosis_agent-0.1.1/tests/test_registration_order.py +238 -0
  250. nosis_agent-0.1.1/tests/test_role_tools.py +74 -0
  251. nosis_agent-0.1.1/tests/test_scheduler.py +335 -0
  252. nosis_agent-0.1.1/tests/test_session.py +29 -0
  253. nosis_agent-0.1.1/tests/test_session_journal.py +562 -0
  254. nosis_agent-0.1.1/tests/test_session_migration.py +244 -0
  255. nosis_agent-0.1.1/tests/test_session_store.py +910 -0
  256. nosis_agent-0.1.1/tests/test_session_title.py +237 -0
  257. nosis_agent-0.1.1/tests/test_settings.py +387 -0
  258. nosis_agent-0.1.1/tests/test_skills.py +317 -0
  259. nosis_agent-0.1.1/tests/test_subagent.py +812 -0
  260. nosis_agent-0.1.1/tests/test_subagent_mcp.py +123 -0
  261. nosis_agent-0.1.1/tests/test_text.py +53 -0
  262. nosis_agent-0.1.1/tests/test_token_estimation.py +226 -0
  263. nosis_agent-0.1.1/tests/test_tool_batch.py +205 -0
  264. nosis_agent-0.1.1/tests/test_tool_media.py +166 -0
  265. nosis_agent-0.1.1/tests/test_tool_result.py +666 -0
  266. nosis_agent-0.1.1/tests/test_tools.py +3484 -0
  267. nosis_agent-0.1.1/tests/test_user_anchor_window.py +233 -0
  268. nosis_agent-0.1.1/tests/test_web_fetch.py +180 -0
  269. nosis_agent-0.1.1/tests/test_windows_desktop.py +79 -0
  270. nosis_agent-0.1.1/tests/test_windows_sandbox.py +669 -0
  271. nosis_agent-0.1.1/tests/test_workspace.py +59 -0
  272. nosis_agent-0.1.1/tests/test_workspace_instructions.py +96 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 EvannZhongg
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,209 @@
1
+ Metadata-Version: 2.4
2
+ Name: nosis-agent
3
+ Version: 0.1.1
4
+ Summary: An open-source, lightweight personal agent runtime with a complete toolset and plugin system, shared by its GUI and TUI.
5
+ Requires-Python: >=3.11
6
+ Description-Content-Type: text/markdown
7
+ License-File: LICENSE
8
+ Requires-Dist: ddgs<10.0.0,>=9.5.5
9
+ Requires-Dist: httpx>=0.27
10
+ Requires-Dist: httpx2>=2.5
11
+ Requires-Dist: litellm>=1.105
12
+ Requires-Dist: openai>=2.0
13
+ Requires-Dist: tiktoken>=0.14.0
14
+ Requires-Dist: python-dotenv>=1.0
15
+ Requires-Dist: pyyaml>=6.0
16
+ Requires-Dist: tzdata>=2022.1
17
+ Requires-Dist: mcp<3,>=2.0
18
+ Requires-Dist: mss>=10.2
19
+ Requires-Dist: pillow>=11.0
20
+ Requires-Dist: pyautogui>=0.9.54
21
+ Requires-Dist: pyobjc-framework-cocoa; sys_platform == "darwin"
22
+ Requires-Dist: pyperclip>=1.11.0
23
+ Provides-Extra: server
24
+ Requires-Dist: fastapi>=0.115; extra == "server"
25
+ Requires-Dist: uvicorn>=0.30; extra == "server"
26
+ Requires-Dist: websockets>=13; extra == "server"
27
+ Requires-Dist: python-multipart>=0.0.9; extra == "server"
28
+ Requires-Dist: pywin32>=306; sys_platform == "win32" and extra == "server"
29
+ Provides-Extra: test
30
+ Requires-Dist: pytest>=8; extra == "test"
31
+ Requires-Dist: pytest-xdist>=3; extra == "test"
32
+ Requires-Dist: pip>=24; extra == "test"
33
+ Requires-Dist: setuptools>=68; extra == "test"
34
+ Dynamic: license-file
35
+
36
+ <div align="center">
37
+ <img src="docs/nosis-banner.png" alt="Nosis" width="560">
38
+ <br><br>
39
+ <b>English</b> &middot; <a href="README.zh-CN.md">简体中文</a>
40
+ </div>
41
+
42
+ Nosis is an open-source, lightweight personal agent application. It provides local workspace operations, human approval, session persistence, context management, long-term memory, plans, subagents, scheduled tasks, and Skill / Plugin / MCP extensibility — with a TUI, a GUI, and Feishu messaging access.
43
+
44
+ ```text
45
+ TUI ───────────────────────── Bridge ── agent_runtime ── agent_core
46
+ nosis-server
47
+ ├─ HTTP / WebSocket (optional) ── GUI
48
+ ├─ IM (Feishu)
49
+ └─ Session Host ── Bridge ── agent_runtime ── agent_core
50
+ ```
51
+
52
+ - `agent_core` provides frontend-agnostic agent mechanisms.
53
+ - `agent_runtime` reads application configuration and assembles the Core into a runnable instance.
54
+ - Bridge runs as a standalone process and is the only channel through which a frontend drives the Runtime.
55
+ - The TUI, GUI, and messaging hosts share execution state and interaction semantics through the Bridge protocol; the Bridge subprocess channel uses newline-delimited JSON.
56
+
57
+ ## Key capabilities
58
+
59
+ - **Controlled local execution**: A session supports three permission presets — `Ask for approval`, `Workspace Access`, and `Full Access`. Shell enters the workspace sandbox or the host environment according to scope, while file tools are always confined to the current workspace.
60
+ - **Desktop automation**: The main agent can observe and operate the visible desktop through `computer_screenshot` and `computer_action`, covering screenshots, clicks, drags, scrolling, key presses, and text input. Both tools are on by default and visible only to the main agent, and each call is confirmed according to the current permission preset. Actions return a screenshot by default and can skip it with `screenshot: false`. On Windows the tools also support visible-window crops and window-relative input. Pass the latest screenshot path as `observation` and use its `hwnd:<decimal>` for a window-scoped action.
61
+ - **Web research**: `web_fetch` reads public pages directly or via DeepSeek; `web_search`, when enabled, queries DuckDuckGo by default and can switch to Exa or DeepSeek.
62
+ - **A complete agent loop**: streaming responses, tool batches, context compaction, steer, cancel, plans, and background jobs.
63
+ - **Resumable sessions**: conversation and execution events are written to an append-only JSONL journal, and the TUI and GUI can read the same kind of session.
64
+ - **Memory and scheduled tasks**: global and workspace-scoped long-term memory, plus one-shot, interval, and cron tasks.
65
+ - **Models and media**: OpenAI-compatible endpoints use the native OpenAI SDK; other routes and image generation use LiteLLM. Providers can be routed independently for the main agent, vision, image generation, auxiliary model calls, and each subagent role.
66
+ - **Extension system**: standalone skills, skills / agents / MCP / [command hooks](docs/plugin-hooks.md) provided by plugins, and standalone MCP servers.
67
+ - **Multiple frontends**: the TUI suits terminal workflows; the GUI offers multi-session management, attachments, a file tree, settings, memory, and scheduled tasks; Feishu supports workspace and session selection, streaming text, questions, and approval cards.
68
+
69
+ ## Quick start
70
+
71
+ Requirements: Python >= 3.11, Node.js >= 22, and [uv](https://docs.astral.sh/uv/).
72
+
73
+ ```bash
74
+ git clone https://github.com/EvannZhongg/Nosis.git
75
+ cd Nosis
76
+ npm install
77
+ npm run build
78
+ uv tool install --editable ".[server]"
79
+ ```
80
+
81
+ To enable HTTP / WebSocket access in the project environment, install the server extra:
82
+
83
+ ```bash
84
+ uv sync --extra server
85
+ ```
86
+
87
+ Start the TUI once in the current directory:
88
+
89
+ ```bash
90
+ nosis
91
+ ```
92
+
93
+ The first launch initializes `~/.nosis/`. After quitting the TUI, create `~/.nosis/.env` and fill in the environment variables required by the default provider, for example:
94
+
95
+ ```dotenv
96
+ OPENAI_KEY=your-api-key
97
+ ```
98
+
99
+ Then restart the TUI:
100
+
101
+ ```bash
102
+ nosis
103
+ ```
104
+
105
+ Or start the shared GUI / IM server:
106
+
107
+ ```bash
108
+ nosis-server
109
+ ```
110
+
111
+ The GUI listens on <http://127.0.0.1:8737> by default.
112
+
113
+ Feishu messaging access is configured in `~/.nosis/im_channels.json`; see [Mobile / IM setup](interfaces/mobile/README.md). `nosis-server` runs HTTP and IM adapters alongside a shared Session Host and Bridge. Use `nosis-server --no-http` to run without HTTP dependencies or a local listening port. A configuration-directory process lock prevents duplicate servers; a second launch reports that the server is already running.
114
+
115
+ ## Module documentation
116
+
117
+ Third-party frontends can launch the installed `nosis-bridge` command and use the
118
+ [public stdio protocol](docs/bridge-protocol.md) or the lightweight
119
+ [`@nosis/client` TypeScript SDK](interfaces/client/README.md).
120
+
121
+ Public contracts:
122
+
123
+ | Document | Scope |
124
+ | --- | --- |
125
+ | [`docs/bridge-protocol`](docs/bridge-protocol.md) | Stdio transport, commands, events, runtime phases, transcript checkpoints, and error rules for third-party clients |
126
+ | [`docs/bridge-api-design`](docs/bridge-api-design.md) | Which messages are public or internal, who owns them, and the versioning decisions |
127
+ | [`docs/plugin-hooks`](docs/plugin-hooks.md) | Command hook declarations, checkpoints, invocation payloads, and decisions |
128
+ | [`docs/plugin-interop`](docs/plugin-interop.md) | Assembly, static validation, error isolation, and re-assembly of plugin components |
129
+
130
+ Runtime layers:
131
+
132
+ | Document | Scope |
133
+ | --- | --- |
134
+ | [`agent_core`](agent_core/README.md) | Agent loop, context, session, tools, execution, permissions, memory, plans, jobs, scheduler, providers, skills, and MCP mechanisms |
135
+ | [`agent_runtime`](agent_runtime/README.md) | Configuration, prompts, plugin discovery, runtime assembly, execution plane, session binding, and turn entry |
136
+
137
+ Frontends and SDK:
138
+
139
+ | Document | Scope |
140
+ | --- | --- |
141
+ | [`interfaces`](interfaces/README.md) | Shared host modules, launch entries, Bridge process and channel attachment, and the allowed Core reuse boundary |
142
+ | [`interfaces/bridge`](interfaces/bridge/README.md) | The standalone Bridge process, protocol routing, event translation, and frontend interaction forwarding |
143
+ | [`interfaces/protocol`](interfaces/protocol/README.md) | The TypeScript protocol package: exports, build, and change checklist |
144
+ | [`interfaces/client`](interfaces/client/README.md) | Public Node/TypeScript stdio client, process lifecycle and integration example |
145
+ | [`interfaces/tui`](interfaces/tui/README.md) | The Ink terminal interface, commands, input state, and Bridge subprocess attachment |
146
+ | [`interfaces/gui`](interfaces/gui/README.md) | The FastAPI service, React interface, multi-session connections, HTTP / WebSocket API, and media access |
147
+ | [`interfaces/mobile`](interfaces/mobile/README.md) | Feishu transport, workspace and session selection, streaming text, questions, approvals, and shared-host setup |
148
+
149
+ ## Configuration and data
150
+
151
+ `agent_runtime` creates the configuration directory on first launch and is responsible for reading and updating the application configuration inside it:
152
+
153
+ | Path | Contents |
154
+ | --- | --- |
155
+ | `~/.nosis/provider_config.json` | Providers, models, and role routing, including the optional `fast_model` |
156
+ | `~/.nosis/agent_config.json` | Tools, context, memory, skill paths, subagents, MCP, workspace instructions, and scratch workspace settings |
157
+ | `~/.nosis/im_channels.json` | Messaging channels, credentials, and authorized Feishu users |
158
+ | `~/.nosis/tool_config.json` | Web Search and Web Fetch provider selection and API keys |
159
+ | `~/.nosis/.env` | The secrets and environment variables referenced by the configuration |
160
+ | `~/.nosis/prompts/` | Main agent, subagent, compaction, and memory prompts |
161
+ | `~/.nosis/skills/` | Standalone skills |
162
+ | `~/.nosis/plugins/` | Plugin capability packages |
163
+ | `~/.nosis/AGENTS.md` | User-level global workspace instruction |
164
+ | `~/.nosis/MEMORY.md` | Global long-term memory |
165
+ | `~/.nosis/sessions/` | Session journals, workspace memory, artifacts, subagent records, and per-session auxiliary usage logs |
166
+ | `~/.nosis/schedule.jsonl` | Scheduled tasks and run records |
167
+ | `<workspace>/.nosis/attachments/` | Uploaded attachments and agent-generated images |
168
+
169
+ The default configuration and built-in resources live in [`agent_runtime/defaults/`](agent_runtime/defaults). See [`agent_runtime/README.md`](agent_runtime/README.md) for how assembly works.
170
+
171
+ ## Development and testing
172
+
173
+ Python tests use a mock provider and need no real API key:
174
+
175
+ ```bash
176
+ python -m venv .venv
177
+ source .venv/bin/activate
178
+ python -m pip install -e ".[gui,test]"
179
+ python -m pytest --durations=20
180
+ ```
181
+
182
+ On Windows, activate the environment with `.venv\Scripts\Activate.ps1`.
183
+
184
+ Pytest distributes test classes across four isolated worker processes. Use `-n 0` for a serial run or `-n 2` on smaller machines. The full suite includes package installation and real local MCP/sandbox processes; `--ignore=tests/test_bridge_client.py` omits the package installation check during iteration. The standalone plugin testkit has its own command in [docs/plugin-interop.md](docs/plugin-interop.md).
185
+
186
+ The server extra includes FastAPI, Uvicorn, the WebSocket backend, and multipart support; Windows, macOS, and Linux use the same installation. The TUI and `nosis-server --no-http` do not require this extra.
187
+
188
+ Frontend build, type checking, and tests:
189
+
190
+ ```bash
191
+ npm run build
192
+ npm run typecheck
193
+ npm test
194
+ ```
195
+
196
+ The Linux sandbox integration tests require a working bubblewrap and user namespaces; when the runtime conditions are not met, the tests explicitly skip.
197
+
198
+ On Windows the shell tool uses PowerShell 7, so PowerShell 7 has to be installed separately.
199
+
200
+ ## Contributors
201
+
202
+ - [AKArrok](https://github.com/AKArrok): reported and verified the append-only journal tail-append issue ([#2](https://github.com/EvannZhongg/Nosis/pull/2)).
203
+ - [George Pickett](https://github.com/georgeatparallel): contributed the Parallel Search MCP integration ([#4](https://github.com/EvannZhongg/Nosis/pull/4)).
204
+ - [Pocket99](https://github.com/Pocket99): contributed the initial GUI, with sessions, workspace browsing, and model switching ([#1](https://github.com/EvannZhongg/Nosis/pull/1)).
205
+ - [Guillermo Prieto Rodriguez](https://github.com/guillermop2002): reported the file-tool path race that let a sandboxed shell redirect workspace reads and writes outside the workspace.
206
+
207
+ ## License
208
+
209
+ [MIT](LICENSE)
@@ -0,0 +1,174 @@
1
+ <div align="center">
2
+ <img src="docs/nosis-banner.png" alt="Nosis" width="560">
3
+ <br><br>
4
+ <b>English</b> &middot; <a href="README.zh-CN.md">简体中文</a>
5
+ </div>
6
+
7
+ Nosis is an open-source, lightweight personal agent application. It provides local workspace operations, human approval, session persistence, context management, long-term memory, plans, subagents, scheduled tasks, and Skill / Plugin / MCP extensibility — with a TUI, a GUI, and Feishu messaging access.
8
+
9
+ ```text
10
+ TUI ───────────────────────── Bridge ── agent_runtime ── agent_core
11
+ nosis-server
12
+ ├─ HTTP / WebSocket (optional) ── GUI
13
+ ├─ IM (Feishu)
14
+ └─ Session Host ── Bridge ── agent_runtime ── agent_core
15
+ ```
16
+
17
+ - `agent_core` provides frontend-agnostic agent mechanisms.
18
+ - `agent_runtime` reads application configuration and assembles the Core into a runnable instance.
19
+ - Bridge runs as a standalone process and is the only channel through which a frontend drives the Runtime.
20
+ - The TUI, GUI, and messaging hosts share execution state and interaction semantics through the Bridge protocol; the Bridge subprocess channel uses newline-delimited JSON.
21
+
22
+ ## Key capabilities
23
+
24
+ - **Controlled local execution**: A session supports three permission presets — `Ask for approval`, `Workspace Access`, and `Full Access`. Shell enters the workspace sandbox or the host environment according to scope, while file tools are always confined to the current workspace.
25
+ - **Desktop automation**: The main agent can observe and operate the visible desktop through `computer_screenshot` and `computer_action`, covering screenshots, clicks, drags, scrolling, key presses, and text input. Both tools are on by default and visible only to the main agent, and each call is confirmed according to the current permission preset. Actions return a screenshot by default and can skip it with `screenshot: false`. On Windows the tools also support visible-window crops and window-relative input. Pass the latest screenshot path as `observation` and use its `hwnd:<decimal>` for a window-scoped action.
26
+ - **Web research**: `web_fetch` reads public pages directly or via DeepSeek; `web_search`, when enabled, queries DuckDuckGo by default and can switch to Exa or DeepSeek.
27
+ - **A complete agent loop**: streaming responses, tool batches, context compaction, steer, cancel, plans, and background jobs.
28
+ - **Resumable sessions**: conversation and execution events are written to an append-only JSONL journal, and the TUI and GUI can read the same kind of session.
29
+ - **Memory and scheduled tasks**: global and workspace-scoped long-term memory, plus one-shot, interval, and cron tasks.
30
+ - **Models and media**: OpenAI-compatible endpoints use the native OpenAI SDK; other routes and image generation use LiteLLM. Providers can be routed independently for the main agent, vision, image generation, auxiliary model calls, and each subagent role.
31
+ - **Extension system**: standalone skills, skills / agents / MCP / [command hooks](docs/plugin-hooks.md) provided by plugins, and standalone MCP servers.
32
+ - **Multiple frontends**: the TUI suits terminal workflows; the GUI offers multi-session management, attachments, a file tree, settings, memory, and scheduled tasks; Feishu supports workspace and session selection, streaming text, questions, and approval cards.
33
+
34
+ ## Quick start
35
+
36
+ Requirements: Python >= 3.11, Node.js >= 22, and [uv](https://docs.astral.sh/uv/).
37
+
38
+ ```bash
39
+ git clone https://github.com/EvannZhongg/Nosis.git
40
+ cd Nosis
41
+ npm install
42
+ npm run build
43
+ uv tool install --editable ".[server]"
44
+ ```
45
+
46
+ To enable HTTP / WebSocket access in the project environment, install the server extra:
47
+
48
+ ```bash
49
+ uv sync --extra server
50
+ ```
51
+
52
+ Start the TUI once in the current directory:
53
+
54
+ ```bash
55
+ nosis
56
+ ```
57
+
58
+ The first launch initializes `~/.nosis/`. After quitting the TUI, create `~/.nosis/.env` and fill in the environment variables required by the default provider, for example:
59
+
60
+ ```dotenv
61
+ OPENAI_KEY=your-api-key
62
+ ```
63
+
64
+ Then restart the TUI:
65
+
66
+ ```bash
67
+ nosis
68
+ ```
69
+
70
+ Or start the shared GUI / IM server:
71
+
72
+ ```bash
73
+ nosis-server
74
+ ```
75
+
76
+ The GUI listens on <http://127.0.0.1:8737> by default.
77
+
78
+ Feishu messaging access is configured in `~/.nosis/im_channels.json`; see [Mobile / IM setup](interfaces/mobile/README.md). `nosis-server` runs HTTP and IM adapters alongside a shared Session Host and Bridge. Use `nosis-server --no-http` to run without HTTP dependencies or a local listening port. A configuration-directory process lock prevents duplicate servers; a second launch reports that the server is already running.
79
+
80
+ ## Module documentation
81
+
82
+ Third-party frontends can launch the installed `nosis-bridge` command and use the
83
+ [public stdio protocol](docs/bridge-protocol.md) or the lightweight
84
+ [`@nosis/client` TypeScript SDK](interfaces/client/README.md).
85
+
86
+ Public contracts:
87
+
88
+ | Document | Scope |
89
+ | --- | --- |
90
+ | [`docs/bridge-protocol`](docs/bridge-protocol.md) | Stdio transport, commands, events, runtime phases, transcript checkpoints, and error rules for third-party clients |
91
+ | [`docs/bridge-api-design`](docs/bridge-api-design.md) | Which messages are public or internal, who owns them, and the versioning decisions |
92
+ | [`docs/plugin-hooks`](docs/plugin-hooks.md) | Command hook declarations, checkpoints, invocation payloads, and decisions |
93
+ | [`docs/plugin-interop`](docs/plugin-interop.md) | Assembly, static validation, error isolation, and re-assembly of plugin components |
94
+
95
+ Runtime layers:
96
+
97
+ | Document | Scope |
98
+ | --- | --- |
99
+ | [`agent_core`](agent_core/README.md) | Agent loop, context, session, tools, execution, permissions, memory, plans, jobs, scheduler, providers, skills, and MCP mechanisms |
100
+ | [`agent_runtime`](agent_runtime/README.md) | Configuration, prompts, plugin discovery, runtime assembly, execution plane, session binding, and turn entry |
101
+
102
+ Frontends and SDK:
103
+
104
+ | Document | Scope |
105
+ | --- | --- |
106
+ | [`interfaces`](interfaces/README.md) | Shared host modules, launch entries, Bridge process and channel attachment, and the allowed Core reuse boundary |
107
+ | [`interfaces/bridge`](interfaces/bridge/README.md) | The standalone Bridge process, protocol routing, event translation, and frontend interaction forwarding |
108
+ | [`interfaces/protocol`](interfaces/protocol/README.md) | The TypeScript protocol package: exports, build, and change checklist |
109
+ | [`interfaces/client`](interfaces/client/README.md) | Public Node/TypeScript stdio client, process lifecycle and integration example |
110
+ | [`interfaces/tui`](interfaces/tui/README.md) | The Ink terminal interface, commands, input state, and Bridge subprocess attachment |
111
+ | [`interfaces/gui`](interfaces/gui/README.md) | The FastAPI service, React interface, multi-session connections, HTTP / WebSocket API, and media access |
112
+ | [`interfaces/mobile`](interfaces/mobile/README.md) | Feishu transport, workspace and session selection, streaming text, questions, approvals, and shared-host setup |
113
+
114
+ ## Configuration and data
115
+
116
+ `agent_runtime` creates the configuration directory on first launch and is responsible for reading and updating the application configuration inside it:
117
+
118
+ | Path | Contents |
119
+ | --- | --- |
120
+ | `~/.nosis/provider_config.json` | Providers, models, and role routing, including the optional `fast_model` |
121
+ | `~/.nosis/agent_config.json` | Tools, context, memory, skill paths, subagents, MCP, workspace instructions, and scratch workspace settings |
122
+ | `~/.nosis/im_channels.json` | Messaging channels, credentials, and authorized Feishu users |
123
+ | `~/.nosis/tool_config.json` | Web Search and Web Fetch provider selection and API keys |
124
+ | `~/.nosis/.env` | The secrets and environment variables referenced by the configuration |
125
+ | `~/.nosis/prompts/` | Main agent, subagent, compaction, and memory prompts |
126
+ | `~/.nosis/skills/` | Standalone skills |
127
+ | `~/.nosis/plugins/` | Plugin capability packages |
128
+ | `~/.nosis/AGENTS.md` | User-level global workspace instruction |
129
+ | `~/.nosis/MEMORY.md` | Global long-term memory |
130
+ | `~/.nosis/sessions/` | Session journals, workspace memory, artifacts, subagent records, and per-session auxiliary usage logs |
131
+ | `~/.nosis/schedule.jsonl` | Scheduled tasks and run records |
132
+ | `<workspace>/.nosis/attachments/` | Uploaded attachments and agent-generated images |
133
+
134
+ The default configuration and built-in resources live in [`agent_runtime/defaults/`](agent_runtime/defaults). See [`agent_runtime/README.md`](agent_runtime/README.md) for how assembly works.
135
+
136
+ ## Development and testing
137
+
138
+ Python tests use a mock provider and need no real API key:
139
+
140
+ ```bash
141
+ python -m venv .venv
142
+ source .venv/bin/activate
143
+ python -m pip install -e ".[gui,test]"
144
+ python -m pytest --durations=20
145
+ ```
146
+
147
+ On Windows, activate the environment with `.venv\Scripts\Activate.ps1`.
148
+
149
+ Pytest distributes test classes across four isolated worker processes. Use `-n 0` for a serial run or `-n 2` on smaller machines. The full suite includes package installation and real local MCP/sandbox processes; `--ignore=tests/test_bridge_client.py` omits the package installation check during iteration. The standalone plugin testkit has its own command in [docs/plugin-interop.md](docs/plugin-interop.md).
150
+
151
+ The server extra includes FastAPI, Uvicorn, the WebSocket backend, and multipart support; Windows, macOS, and Linux use the same installation. The TUI and `nosis-server --no-http` do not require this extra.
152
+
153
+ Frontend build, type checking, and tests:
154
+
155
+ ```bash
156
+ npm run build
157
+ npm run typecheck
158
+ npm test
159
+ ```
160
+
161
+ The Linux sandbox integration tests require a working bubblewrap and user namespaces; when the runtime conditions are not met, the tests explicitly skip.
162
+
163
+ On Windows the shell tool uses PowerShell 7, so PowerShell 7 has to be installed separately.
164
+
165
+ ## Contributors
166
+
167
+ - [AKArrok](https://github.com/AKArrok): reported and verified the append-only journal tail-append issue ([#2](https://github.com/EvannZhongg/Nosis/pull/2)).
168
+ - [George Pickett](https://github.com/georgeatparallel): contributed the Parallel Search MCP integration ([#4](https://github.com/EvannZhongg/Nosis/pull/4)).
169
+ - [Pocket99](https://github.com/Pocket99): contributed the initial GUI, with sessions, workspace browsing, and model switching ([#1](https://github.com/EvannZhongg/Nosis/pull/1)).
170
+ - [Guillermo Prieto Rodriguez](https://github.com/guillermop2002): reported the file-tool path race that let a sandboxed shell redirect workspace reads and writes outside the workspace.
171
+
172
+ ## License
173
+
174
+ [MIT](LICENSE)