seedcode-cli 6.2.0__tar.gz → 7.1.0__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 (152) hide show
  1. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/.gitignore +3 -1
  2. seedcode_cli-7.1.0/PKG-INFO +653 -0
  3. seedcode_cli-7.1.0/README.md +606 -0
  4. seedcode_cli-7.1.0/npm/README.md +33 -0
  5. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/scripts/windows/README.md +11 -8
  6. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/__init__.py +5 -2
  7. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/_default_key_template.py +5 -1
  8. seedcode_cli-7.1.0/seedcode/app.py +1094 -0
  9. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/branding.py +6 -1
  10. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/cli.py +11 -3
  11. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/codemode.py +48 -8
  12. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/__init__.py +22 -2
  13. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/about.py +10 -1
  14. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/agent.py +9 -3
  15. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/assist.py +4 -2
  16. seedcode_cli-7.1.0/seedcode/commands/chat.py +46 -0
  17. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/codemode.py +13 -3
  18. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/desktop.py +2 -1
  19. seedcode_cli-7.1.0/seedcode/commands/mode.py +52 -0
  20. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/provider.py +52 -16
  21. seedcode_cli-7.1.0/seedcode/commands/session.py +137 -0
  22. seedcode_cli-7.1.0/seedcode/commands/status.py +138 -0
  23. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/browser.py +15 -2
  24. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/browser_engine.py +23 -3
  25. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/controller.py +16 -3
  26. seedcode_cli-7.1.0/seedcode/computer/lifecycle_guard.py +173 -0
  27. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/windows.py +13 -1
  28. seedcode_cli-7.1.0/seedcode/config/__init__.py +26 -0
  29. seedcode_cli-7.1.0/seedcode/config/defaults.py +49 -0
  30. seedcode_cli-7.1.0/seedcode/config/manager.py +244 -0
  31. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/agent.py +269 -21
  32. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/chat.py +33 -3
  33. seedcode_cli-7.1.0/seedcode/core/http.py +171 -0
  34. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/models.py +83 -15
  35. seedcode_cli-7.1.0/seedcode/core/providers/__init__.py +85 -0
  36. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/providers/base.py +24 -2
  37. seedcode_cli-7.1.0/seedcode/core/providers/default.py +157 -0
  38. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/providers/ollama.py +9 -1
  39. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/providers/openrouter.py +80 -29
  40. seedcode_cli-7.1.0/seedcode/core/session.py +967 -0
  41. seedcode_cli-7.1.0/seedcode/core/tasks.py +902 -0
  42. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/default_api.py +54 -3
  43. seedcode_cli-7.1.0/seedcode/defaults.py +41 -0
  44. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/tools/base.py +11 -1
  45. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/tools/filesystem.py +13 -3
  46. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/tools/terminal.py +34 -6
  47. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/tools/textio.py +10 -2
  48. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/__init__.py +110 -15
  49. seedcode_cli-7.1.0/seedcode/ui/codemode_header.py +348 -0
  50. seedcode_cli-7.1.0/seedcode/ui/dashboard.py +423 -0
  51. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/layout.py +39 -0
  52. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/menu.py +4 -0
  53. seedcode_cli-7.1.0/seedcode/ui/reference.py +46 -0
  54. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/renderer.py +23 -4
  55. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/selector.py +24 -0
  56. seedcode_cli-7.1.0/seedcode/ui/session_view.py +280 -0
  57. seedcode_cli-7.1.0/seedcode/ui/tasks.py +698 -0
  58. seedcode_cli-7.1.0/seedcode/utils/terminal_env.py +225 -0
  59. seedcode_cli-7.1.0/seedcode/utils/text.py +107 -0
  60. seedcode_cli-6.2.0/PKG-INFO +0 -401
  61. seedcode_cli-6.2.0/README.md +0 -354
  62. seedcode_cli-6.2.0/npm/README.md +0 -22
  63. seedcode_cli-6.2.0/seedcode/app.py +0 -546
  64. seedcode_cli-6.2.0/seedcode/assets/logo.txt +0 -15
  65. seedcode_cli-6.2.0/seedcode/config/__init__.py +0 -8
  66. seedcode_cli-6.2.0/seedcode/config/defaults.py +0 -22
  67. seedcode_cli-6.2.0/seedcode/config/manager.py +0 -88
  68. seedcode_cli-6.2.0/seedcode/core/http.py +0 -62
  69. seedcode_cli-6.2.0/seedcode/core/providers/__init__.py +0 -58
  70. seedcode_cli-6.2.0/seedcode/ui/banner.py +0 -78
  71. seedcode_cli-6.2.0/seedcode/ui/dashboard.py +0 -358
  72. seedcode_cli-6.2.0/seedcode/ui/logo.py +0 -134
  73. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/LICENSE +0 -0
  74. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/npm/LICENSE +0 -0
  75. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/pyproject.toml +0 -0
  76. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/scripts/pyproject_build_hook.py +0 -0
  77. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/__main__.py +0 -0
  78. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/apps/__init__.py +0 -0
  79. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/apps/discovery.py +0 -0
  80. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/apps/installer.py +0 -0
  81. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/apps/launcher.py +0 -0
  82. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/apps/verifier.py +0 -0
  83. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/assets/logo.png +0 -0
  84. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/codemode_state.py +0 -0
  85. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/clear.py +0 -0
  86. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/doctor.py +0 -0
  87. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/help.py +0 -0
  88. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/history.py +0 -0
  89. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/palette.py +0 -0
  90. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/commands/theme.py +0 -0
  91. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/__init__.py +0 -0
  92. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/browser_cdp.py +0 -0
  93. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/browser_extract.py +0 -0
  94. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/browser_popups.py +0 -0
  95. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/browser_selenium.py +0 -0
  96. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/browser_skills.py +0 -0
  97. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/catalog.py +0 -0
  98. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/dispatcher.py +0 -0
  99. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/dpi.py +0 -0
  100. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/engine.py +0 -0
  101. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/keyboard.py +0 -0
  102. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/logbook.py +0 -0
  103. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/mouse.py +0 -0
  104. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/ocr.py +0 -0
  105. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/operator_skills.py +0 -0
  106. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/permissions.py +0 -0
  107. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/recovery.py +0 -0
  108. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/registry.py +0 -0
  109. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/resolver.py +0 -0
  110. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/screen.py +0 -0
  111. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/screen_state.py +0 -0
  112. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/selfguard.py +0 -0
  113. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/semantic.py +0 -0
  114. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/skills.py +0 -0
  115. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/state.py +0 -0
  116. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/verifier.py +0 -0
  117. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/computer/vision.py +0 -0
  118. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/__init__.py +0 -0
  119. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/client.py +0 -0
  120. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/errors.py +0 -0
  121. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/identity.py +0 -0
  122. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/identity_store.py +0 -0
  123. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/lifecycle.py +0 -0
  124. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/limits.py +0 -0
  125. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/project.py +0 -0
  126. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/providers/aerolink.py +0 -0
  127. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/providers/freemodel.py +0 -0
  128. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/core/streaming.py +0 -0
  129. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/memory/__init__.py +0 -0
  130. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/memory/manager.py +0 -0
  131. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/memory/storage.py +0 -0
  132. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/memory/store.py +0 -0
  133. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/tools/__init__.py +0 -0
  134. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/tools/desktop.py +0 -0
  135. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/tools/git.py +0 -0
  136. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/tools/patch.py +0 -0
  137. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/tools/permissions.py +0 -0
  138. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/tools/search.py +0 -0
  139. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/badges.py +0 -0
  140. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/dialog.py +0 -0
  141. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/fuzzy.py +0 -0
  142. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/palette.py +0 -0
  143. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/progress.py +0 -0
  144. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/prompts.py +0 -0
  145. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/searchbox.py +0 -0
  146. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/statusbar.py +0 -0
  147. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/textbox.py +0 -0
  148. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/theme.py +0 -0
  149. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/ui/tree.py +0 -0
  150. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/utils/__init__.py +0 -0
  151. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/utils/helpers.py +0 -0
  152. {seedcode_cli-6.2.0 → seedcode_cli-7.1.0}/seedcode/utils/logger.py +0 -0
@@ -70,4 +70,6 @@ Desktop.ini
70
70
  *.rej
71
71
  *.crdownload
72
72
  opencode.txt
73
- V6.2.0/
73
+ V6.2.0/
74
+ newupdatec6.2.5/
75
+ WEBSITE/
@@ -0,0 +1,653 @@
1
+ Metadata-Version: 2.5
2
+ Name: seedcode-cli
3
+ Version: 7.1.0
4
+ Summary: Seed Code — a premium terminal-based AI coding assistant. Plant ideas. Grow code.
5
+ Project-URL: Homepage, https://github.com/Alshahriar-07/seedcode-cli
6
+ Project-URL: Repository, https://github.com/Alshahriar-07/seedcode-cli
7
+ Project-URL: Documentation, https://github.com/Alshahriar-07/seedcode-cli#readme
8
+ Project-URL: Issues, https://github.com/Alshahriar-07/seedcode-cli/issues
9
+ Project-URL: Changelog, https://github.com/Alshahriar-07/seedcode-cli/releases
10
+ Author-email: Al Shahriar Sowan <github@eagox.studio>
11
+ License-Expression: MIT
12
+ License-File: LICENSE
13
+ Keywords: agent,ai,chat,cli,coding-assistant,ollama,seedcode,terminal
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development
21
+ Classifier: Topic :: Terminals
22
+ Requires-Python: >=3.12
23
+ Requires-Dist: httpx>=0.27.0
24
+ Requires-Dist: openai>=1.40.0
25
+ Requires-Dist: prompt-toolkit>=3.0.43
26
+ Requires-Dist: pydantic>=2.6.0
27
+ Requires-Dist: rich>=13.7.0
28
+ Provides-Extra: browser
29
+ Requires-Dist: selenium>=4.18.0; extra == 'browser'
30
+ Requires-Dist: webdriver-manager>=4.0.1; extra == 'browser'
31
+ Provides-Extra: desktop
32
+ Requires-Dist: mss>=9.0.1; extra == 'desktop'
33
+ Requires-Dist: opencv-python>=4.9.0; extra == 'desktop'
34
+ Requires-Dist: pillow>=10.0.0; extra == 'desktop'
35
+ Requires-Dist: psutil>=5.9.0; extra == 'desktop'
36
+ Requires-Dist: pyautogui>=0.9.54; extra == 'desktop'
37
+ Requires-Dist: pygetwindow>=0.0.9; extra == 'desktop'
38
+ Requires-Dist: pytesseract>=0.3.10; extra == 'desktop'
39
+ Requires-Dist: uiautomation>=2.0.18; (sys_platform == 'win32') and extra == 'desktop'
40
+ Provides-Extra: dev
41
+ Requires-Dist: pytest-mock>=3.12.0; extra == 'dev'
42
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
43
+ Provides-Extra: vision
44
+ Requires-Dist: opencv-python>=4.9.0; extra == 'vision'
45
+ Requires-Dist: pytesseract>=0.3.10; extra == 'vision'
46
+ Description-Content-Type: text/markdown
47
+
48
+ # Seed Code CLI
49
+
50
+ **Seed Code — Eagox Studio**
51
+
52
+ > ### Faster. Smaller. Smarter. Workspace-aware.
53
+ > *Plant ideas. Grow code.*
54
+
55
+ Seed Code is a premium terminal-based AI coding assistant. v7.1.0 pairs
56
+ streaming chat and permission-gated desktop control with **Code Mode** — a
57
+ workspace-aware coding agent backed by persistent `.seedcode` project memory
58
+ — behind a structured startup dashboard that carries the brand, the live
59
+ session state and the task flow, with no ASCII logo.
60
+
61
+ - **Works out of the box:** the shipped provider is **Default** — Seed Code's
62
+ own built-in connection. It needs **no API key** and ships pointed at
63
+ `cohere/north-mini-code:free`, so a fresh installation can work
64
+ immediately. Bring your own key at any time with `/provider` → OpenRouter,
65
+ FreeModel or AeroLink.
66
+ - **Structured dashboard:** the brand on the left, identity (`Seed Code |
67
+ Eagox Studio`), the tagline and the live provider, model, mode and status on
68
+ the right, behind a responsive bordered panel — and no ASCII logo anywhere.
69
+ - **Step-by-step tasks:** Code, Assist and Agent Mode show a live task flow
70
+ (analyze → inspect → plan → implement → test → verify) that reflects what
71
+ the agent really did, and hands the prompt back when the task ends.
72
+ - **Version:** 7.1.0 (`seedcode --version`)
73
+
74
+ ## Installation
75
+
76
+ Seed Code CLI is distributed through the official IRM installer system and
77
+ [GitHub Releases](https://github.com/Alshahriar-07/seedcode-cli/releases).
78
+ The installers download the official release artifact for your platform,
79
+ verify its SHA256 against the release's `SHA256SUMS.txt`, and then verify the
80
+ installed command.
81
+
82
+ ### Windows
83
+
84
+ PowerShell 5.1 or newer:
85
+
86
+ ```powershell
87
+ irm https://seedcode-cli.vercel.app/install.ps1 | iex
88
+ ```
89
+
90
+ Installs for the current user (no administrator rights, no Python) into
91
+ `%LOCALAPPDATA%\Programs\SeedCode`, adds `seedcode` to your user `PATH`, and
92
+ prints the verified version when it finishes.
93
+
94
+ ### Linux
95
+
96
+ ```bash
97
+ curl -fsSL https://seedcode-cli.vercel.app/install.sh | bash
98
+ ```
99
+
100
+ Installs for the current user. No prebuilt Linux/macOS binary is published in
101
+ this release: `install.sh` installs the official Python wheel from the same
102
+ release with `pip install --user`, so it needs **Python 3.12 or newer (with
103
+ pip)** on the machine. If a prebuilt binary for your platform is ever
104
+ published, it is used directly instead. Either way `install.sh` installs only
105
+ what it can verify against the release's `SHA256SUMS.txt` — a missing
106
+ checksum entry, a mismatching digest, or a host with no SHA256 tool makes it
107
+ stop instead of installing unverified code.
108
+
109
+ ### Windows installer (GUI alternative)
110
+
111
+ The release publishes two Windows binaries; both are fully self-contained (no
112
+ Python required) and both run the same CLI:
113
+
114
+ | Download | What it is |
115
+ | --- | --- |
116
+ | `SeedCode-CLI-Setup-7.1.0.exe` | **Setup installer (recommended).** A wizard that installs to Program Files, adds Seed Code to the system `PATH`, creates a Start Menu shortcut with an optional desktop shortcut, verifies the installation before reporting success, and ships a clean uninstaller that never deletes your project data silently. |
117
+ | `SeedCode-CLI-7.1.0-windows-x64.exe` | **Standalone executable.** A single portable `seedcode.exe` — no installation and no admin rights. The Windows IRM installer above downloads exactly this file. Run it directly from wherever you put it. |
118
+
119
+ Both are published on the
120
+ [Releases page](https://github.com/Alshahriar-07/seedcode-cli/releases) with
121
+ their SHA256 in `SHA256SUMS.txt`.
122
+
123
+ After installing by any route:
124
+
125
+ ```bash
126
+ seedcode --version # -> Seed Code CLI 7.1.0
127
+ ```
128
+
129
+ > **`seedcode` not recognized?** Open a *new* terminal. `PATH` changes only
130
+ > apply to fresh sessions; the installers verify this before they finish.
131
+
132
+ ### From source (development)
133
+
134
+ Requires **Python 3.12 or newer**:
135
+
136
+ ```bash
137
+ git clone https://github.com/Alshahriar-07/seedcode-cli.git
138
+ cd seedcode-cli
139
+ python -m pip install -e ".[dev]"
140
+ seedcode
141
+ ```
142
+
143
+ ## First run
144
+
145
+ ```bash
146
+ seedcode
147
+ ```
148
+
149
+ You land on the Seed Code dashboard — the structured startup panel: branding
150
+ on the left, a divider, and the live session state on the right. The ASCII
151
+ logo is permanently gone (the brand is plain text); the layout, sections and
152
+ status indicators stay:
153
+
154
+ ```text
155
+ ╭─ Seed Code CLI v7.1.0 ───────────────────────────────────────────────────────────────────────╮
156
+ │ │
157
+ │ Seed Code │ Seed Code | Eagox Studio │
158
+ │ AI CODING AGENT │ Plant ideas. Grow code. │
159
+ │ │ Provider Default │
160
+ │ │ Model cohere/north-mini-code:free │
161
+ │ │ Mode Chat • ● Ready │
162
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
163
+ Commands /help /status /codemode /assist /provider /model
164
+ You >
165
+ ```
166
+
167
+ The panel is 96 columns wide on a wide terminal — wide enough that the whole
168
+ `cohere/north-mini-code:free` model name fits without clipping — and kept
169
+ deliberately short (one blank row under the title, then the live rows; no
170
+ padding rows to scroll past). Narrower terminals slide the info section left
171
+ so the whole model name still fits (80 columns shows it in full), then fall
172
+ back to a compact one-row panel, then to plain lines. Consoles that cannot
173
+ draw (or encode) the glyphs get the same layout in ASCII.
174
+
175
+ The `API Key` row appears **only** for providers that actually require a key,
176
+ so Default and Ollama never show one. `cohere/north-mini-code:free` is the
177
+ ships-with default for **Default only**; every other provider keeps its own
178
+ model, and switching providers never copies one model onto another.
179
+
180
+ ### Default provider (no API key)
181
+
182
+ **Default** is Seed Code's built-in API connection and the provider the app
183
+ ships with. It is a first-class provider of its own — separate from
184
+ OpenRouter everywhere: its own entry in `/provider`, its own saved model, its
185
+ own status, and its own credential slot. It resolves its credential itself,
186
+ in this order:
187
+
188
+ 1. a key stored in Default's own slot (advanced/manual use);
189
+ 2. the embedded Seed Code release credential (release artifacts only);
190
+ 3. `OPENROUTER_API_KEY` / `SEEDCODE_DEFAULT_API_KEY` in the environment.
191
+
192
+ It never reads or writes another provider's configuration, and no other
193
+ provider inherits Default's credential. If a build carries no built-in
194
+ credential (a source checkout, for example), Default says so plainly instead
195
+ of failing with an authentication error — pick OpenRouter and add your own
196
+ key.
197
+
198
+ ### Your own API key
199
+
200
+ Use `/apikey` (view / replace / remove / validate) or set an environment
201
+ variable:
202
+
203
+ ```bash
204
+ export OPENROUTER_API_KEY="sk-or-..." # PowerShell: $env:OPENROUTER_API_KEY = "..."
205
+ export FREEMODEL_API_KEY="fe_oa_..."
206
+ export AEROLINK_API_KEY="..."
207
+ ```
208
+
209
+ Keys are validated with a real authenticated request before they are saved.
210
+ They are stored per provider in `~/.seedcode/config.json`, never in any
211
+ project directory, and never printed, logged, or included in an error
212
+ message.
213
+
214
+ ### Providers
215
+
216
+ Every provider is fully independent: its own API key, model, settings, and
217
+ connection status. Switching providers never touches another one's
218
+ configuration.
219
+
220
+ | Provider | API key | Best for |
221
+ | --- | --- | --- |
222
+ | **Default** | not required | Working immediately on a release install (`cohere/north-mini-code:free`) |
223
+ | [OpenRouter](https://openrouter.ai) | required | A broad catalogue of free and paid models |
224
+ | FreeModel Claude | required | Claude-family models through FreeModel |
225
+ | FreeModel Codex | required | GPT/Codex models through FreeModel |
226
+ | [AeroLink](https://aerolink.lat) | required | Anthropic-compatible gateway access |
227
+ | [Ollama](https://ollama.com) | not required | Local, key-free models |
228
+
229
+ Switch with `/provider` — the picker groups choices by what they need
230
+ (*Built-in · no API key*, *Your own API key*, *Local*) and shows each
231
+ provider's backend, current model, and key state. Pick models with `/model`
232
+ (OpenRouter filters `free` vs `pro` models; FreeModel offers Auto mode).
233
+
234
+ ## Assist Mode and permissions
235
+
236
+ Assist Mode lets the model act on your project through the tool engine:
237
+
238
+ ```text
239
+ /assist on
240
+ ```
241
+
242
+ Permission modes (view/set with `/permission`):
243
+
244
+ | Mode | Behavior |
245
+ | --- | --- |
246
+ | `read_only` | Inspect files, screens, windows, and state without mutations |
247
+ | `workspace` | Allow approved changes inside the active workspace |
248
+ | `desktop` | Add desktop automation capability after confirmation |
249
+ | `full_system` | Allow broader computer and filesystem actions after confirmation |
250
+
251
+ ## Code Mode
252
+
253
+ Code Mode is Assist Mode sharpened into a real coding agent for the current
254
+ project. Your working directory becomes the **workspace**:
255
+
256
+ ```text
257
+ /codemode on # treat the CWD as the workspace, enable .seedcode memory
258
+ /codemode off # back to the previous mode (memory stays on disk)
259
+ /codemode status # workspace, memory, and index state
260
+ ```
261
+
262
+ In Code Mode the agent consults the project index, finds relevant files with
263
+ targeted searches, reads only what it needs, plans, edits, runs a relevant
264
+ command or test, and reports what changed. File operations stay inside the
265
+ workspace root.
266
+
267
+ ### Persistent task execution (v7.1.0)
268
+
269
+ Code Mode is a **long-running agent**, not one model call. A request becomes a
270
+ plan (a task graph with dependencies and acceptance criteria), and the session
271
+ runs task after task until each one is *verified*:
272
+
273
+ ```text
274
+ Plan (3 tasks) → Task 1 → verify → Task 2 → verify → Task 3 → verify
275
+ → final verification → project complete
276
+ ```
277
+
278
+ - **A response is not completion.** A task is only `COMPLETED` when its
279
+ acceptance criteria are satisfied by real evidence — files that exist, a
280
+ command that ran and exited 0, tests that passed, no unresolved error. A
281
+ model that says “done” while the tests fail is sent back to fix them.
282
+ - **A task is a unit of work, not a model call.** Each task may take many
283
+ model/tool cycles: analyse → inspect → implement → run → fail → fix → re-run
284
+ → verify.
285
+ - **Limits do not end a task.** An output/context limit continues the task with
286
+ another call; a temporary provider error retries with backoff; a repeated
287
+ identical failure stops with an explicit blocker instead of looping.
288
+ - **State survives.** Every transition is checkpointed to
289
+ `.seedcode/checkpoints/`, so a pause, a crash or an API failure resumes from
290
+ the current task.
291
+
292
+ ```text
293
+ /session # the detailed view: session state + one row per task record
294
+ /pause # stop at the next safe boundary, keeping plan + files
295
+ /resume # continue from the checkpoint (current task, not from zero)
296
+ /stop # safely end the autonomous session
297
+ ```
298
+
299
+ Ctrl+C stops the session the same way; nothing here closes an application or
300
+ rolls back your files. A stopped session is **not** lost: the CLI says so and
301
+ `/resume` continues from the checkpoint.
302
+
303
+ Every task also keeps its own execution record — files inspected and affected,
304
+ commands run with their outcome, tool calls, test results, errors, retries,
305
+ timestamps and the verification result — and it is stored per task in
306
+ `.seedcode/plan.json`, so a resume continues with the full per-task history.
307
+ `/session` renders that record:
308
+
309
+ ```text
310
+ State RUNNING
311
+ Progress 1/3 tasks verified
312
+ Current task 2. Create database
313
+ Action Running pytest tests/db
314
+ Model calls 12
315
+ Tool calls 31
316
+ Tests passed (pytest -q)
317
+ Commands 1/1 ok
318
+ Files changed 1
319
+ Files inspected 2
320
+ Checkpoint saved on pause/stop (see /resume)
321
+
322
+ ✓ 1 Setup project verified 2 criteria 1 inspected; 1 file(s); 1/1 cmd ok; tests passed
323
+ ● 2 Create database — no tool activity recorded
324
+ ○ 3 Add tests — not started
325
+ ```
326
+
327
+ `/status` carries the same state in one line
328
+ (`Session RUNNING (1/3 verified) — Task 2`), and a stopped one reports that it
329
+ is resumable. A task row only ever shows what was observed — a task that did
330
+ nothing reads `no tool activity recorded`, never a success.
331
+
332
+ ### `.seedcode` project memory
333
+
334
+ Enabling Code Mode creates a `.seedcode/` directory in the project root:
335
+
336
+ ```text
337
+ my-project/
338
+ ├── .seedcode/
339
+ │ ├── memory/ durable project knowledge (architecture, decisions…)
340
+ │ ├── index/ per-file summaries + a file map (incremental, hashed)
341
+ │ ├── context/ reusable project context (conventions, snippets)
342
+ │ ├── sessions/ compact per-session summaries (never raw transcripts)
343
+ │ ├── checkpoints/ resumable Code Mode session state
344
+ │ ├── plan.json the current task graph
345
+ │ └── config.json safe project configuration
346
+ ├── src/
347
+ └── ...
348
+ ```
349
+
350
+ - **Incremental indexing** — every indexed file is hashed; only changed files
351
+ are re-summarized on the next run.
352
+ - **Secrets never land here** — writes pass a secret-key filter; API keys,
353
+ tokens, and passwords are rejected at write time.
354
+ - **Not source code** — `.seedcode/` is excluded from workspace search,
355
+ indexing, and the agent's project view.
356
+
357
+ ## Task flow (Code / Assist / Agent Mode)
358
+
359
+ Every task in Code Mode, Assist Mode or Agent Mode is shown as a compact live
360
+ flow, and each step changes state only when the work behind it really
361
+ happened. Code Mode shows the protocol header, the plan as a checklist, and a
362
+ single live action line:
363
+
364
+ ```text
365
+ ╭─ SEEDCODE 7.1.0 • CODE MODE ────────────────╮
366
+ │ ● RUNNING Task 3/8 Build authentication │
367
+ │ ████████████░░░░ 72% • 4m 32s • 18 calls │
368
+ │ → Running: pytest tests/auth │
369
+ ╰─────────────────────────────────────────────╯
370
+ ✓ Setup project
371
+ ✓ Create database
372
+ ● Implement authentication
373
+ ○ Build dashboard
374
+ ○ Add tests
375
+ ```
376
+
377
+ The action line is a real phase, not decoration: it shows the tool actually
378
+ running (reading a file, editing one, running a command), and it switches to
379
+ `Verifying acceptance criteria` / `Verifying the project (tests / build)` when
380
+ the session moves into those phases. The panel re-fits itself on every refresh,
381
+ so resizing the terminal mid-session cannot leave a panel wider than the
382
+ screen — it degrades to a single status line when the space runs out.
383
+
384
+ Assist Mode and Agent Mode keep the step-by-step flow:
385
+
386
+ ```text
387
+ Task · Code Mode
388
+ Fix authentication persistence
389
+ ✓ Analyze project request understood
390
+ ✓ Inspect files read_file seedcode/config.py
391
+ ✓ Plan implementation I'll patch the persistence layer…
392
+ ● Implement changes edit_file seedcode/config.py
393
+ ○ Run tests
394
+ ○ Verify result
395
+ Working…
396
+ ```
397
+
398
+ The five states are `pending`, `running`, `completed`, `failed` and
399
+ `skipped`. A step the task never needed is reported as **skipped** — “Run
400
+ tests” is never marked done unless a recognised test command actually ran, and
401
+ a failing run is shown as failed, showing what failed instead of a passing
402
+ count:
403
+
404
+ ```text
405
+ ✓ Task completed
406
+ 2 file(s) changed: seedcode/config.py, seedcode/providers.py
407
+ Tests: 898 passed — pytest tests -q
408
+ Ready for next task.
409
+ ```
410
+
411
+ A whole Code Mode project closes with the evidence that verified it, not a
412
+ restatement of the model's replies:
413
+
414
+ ```text
415
+ ✓ Project completed — 3/3 tasks verified
416
+ ✓ Verification: accepted
417
+ ✓ Tests: passed
418
+ ✓ Files: 4 affected
419
+ ✓ Commands: 7/7 ok
420
+ • Inspected: 12 item(s)
421
+ Ready for next task.
422
+ ```
423
+
424
+ ```text
425
+ ✗ Task failed — tests failed
426
+ 1 step(s) failed: Run tests
427
+ Ready for another task.
428
+ ```
429
+
430
+ A task never closes the CLI: success, failure and `Ctrl+C` all return to the
431
+ prompt (or the menu) so you can inspect the result, run another task, switch
432
+ mode or provider, or `/exit` yourself. Plain Chat Mode is unaffected — it
433
+ answers with the ordinary spinner.
434
+
435
+ ## Terminal execution
436
+
437
+ The agent runs commands through the tool engine's `run_command` tool:
438
+
439
+ - output streams line-by-line **while the command is still running**, so long
440
+ builds and test runs stay visible instead of blocking. The live view is
441
+ compact: the first few lines of each command are echoed, then one summary
442
+ line. The agent and `~/.seedcode/logs/seedcode.log` still receive the full
443
+ output, and failures are never hidden;
444
+ - `stderr` is captured along with `stdout`, in order;
445
+ - the exit code is reported, and a non-zero exit is an explicit failure the
446
+ model can react to;
447
+ - commands have a bounded timeout (default 60s, up to 300s) and a timeout
448
+ kills the whole process tree;
449
+ - `Ctrl+C` cancels the running command — its process tree is terminated — and
450
+ the agent turn continues with the cancellation reported as a failed result;
451
+ - shells: `cmd`, `powershell`, `pwsh`, `bash`, or `auto` (the shell you are
452
+ actually in), on Windows and Linux.
453
+
454
+ ## Command reference
455
+
456
+ | Command | Purpose |
457
+ | --- | --- |
458
+ | `/help` | Search available commands |
459
+ | `/provider` | Switch the active AI provider |
460
+ | `/apikey` | Add, replace, remove, or validate a provider key |
461
+ | `/model` | Browse and select the provider's model catalogue |
462
+ | `/mode` | Show or switch the mode: `chat` / `assist` / `code` / `agent` |
463
+ | `/chat` | Switch to plain Chat Mode (`/chat on`) |
464
+ | `/agent` | Enable or disable Assist Mode (alias `/assist`) |
465
+ | `/codemode` | Workspace-aware Code Mode (`on` / `off` / `status`) |
466
+ | `/workspace` | Show the active Code Mode workspace |
467
+ | `/session` | Inspect the Code Mode session: state, evidence, per-task records |
468
+ | `/pause` | Pause the running Code Mode session (state is kept) |
469
+ | `/resume` | Resume a paused session from its checkpoint |
470
+ | `/stop` | Safely stop the running Code Mode session |
471
+ | `/permission` | View or set the Assist permission mode (alias `/permissions`) |
472
+ | `/computer` | Show Computer Engine status and permissions |
473
+ | `/screenshot` | Capture a screenshot |
474
+ | `/windows` | List open windows |
475
+ | `/tools` | List tools available in Assist Mode |
476
+ | `/index` | Show a compact project tree |
477
+ | `/files` | Search project files |
478
+ | `/history` | Browse saved sessions |
479
+ | `/doctor` | Diagnose configuration, network, and provider health |
480
+ | `/theme` | Change the terminal theme |
481
+ | `/shortcuts` | Show keyboard shortcuts |
482
+ | `/reset` | Forget the current conversation context |
483
+ | `/clear` | Clear the screen |
484
+ | `/version` | Show the Seed Code version |
485
+ | `/exit` | Leave the current chat (opens the main menu) |
486
+
487
+ Keyboard shortcuts: `Ctrl+K` command palette, `Ctrl+P` project file search,
488
+ `Ctrl+R` history, `Ctrl+,` settings, `Ctrl+/` shortcut reference,
489
+ `Ctrl+L` clear.
490
+
491
+ All exit paths are clean: `/exit` → menu, menu → Exit, `Ctrl+C` (cancels a
492
+ response or the current line), and `Ctrl+D`/EOF. No traceback appears on
493
+ normal exit.
494
+
495
+ ## Desktop control
496
+
497
+ With the `desktop`/`full_system` permission level, Seed Code can inspect
498
+ windows, resolve UI elements semantically (accessibility tree, OCR, and image
499
+ refinement — no brittle coordinates), launch and focus applications, and
500
+ drive keyboard/mouse with per-action verification. Waits are state-based:
501
+ `open_app` polls for real window evidence instead of sleeping, verification
502
+ pauses are short because state is re-read live, and screenshots are taken
503
+ only when information is genuinely needed.
504
+
505
+ **Applications stay open.** When Seed Code opens an application or a browser
506
+ to do something for you ("play *this* song"), the app remains open when the
507
+ task finishes. Closing is only ever done on an explicit request
508
+ (`close_app` / `browser_close`); no teardown, retry, or cleanup path may close
509
+ a window, a browser, or a tab behind your back. Internal cleanup (releasing
510
+ mouse/keyboard control, closing DevTools sockets, dropping cached drivers) is
511
+ unchanged, and Seed Code never closes its own terminal — `/exit` does that.
512
+
513
+ ## Configuration and local data
514
+
515
+ ```text
516
+ ~/.seedcode/
517
+ ├── config.json provider and application settings
518
+ ├── history/ saved conversation sessions (per provider)
519
+ ├── memory/ persistent local memory
520
+ └── logs/ rotating diagnostic logs
521
+ ```
522
+
523
+ `config.json` keeps **one isolated entry per provider**:
524
+
525
+ ```text
526
+ config.json
527
+ ├── active_provider
528
+ ├── providers
529
+ │ ├── default { api_key(unused), model }
530
+ │ ├── openrouter { api_key, model }
531
+ │ ├── freemodel_claude { api_key, model }
532
+ │ ├── freemodel_codex { api_key, model }
533
+ │ ├── aerolink { api_key, model }
534
+ │ └── ollama { api_key(unused), model }
535
+ ```
536
+
537
+ Switching providers loads that provider's own key and model, and saving one
538
+ provider never overwrites another's. Credentials stay local; environment
539
+ variables take precedence over stored keys. Logs never record API keys or
540
+ message content. `/doctor` checks configuration, connectivity, and provider
541
+ health.
542
+
543
+ ## Platform support
544
+
545
+ - **Windows:** full experience — desktop control, one-click installer,
546
+ standalone EXE. Primary platform.
547
+ - **Linux / macOS:** terminal chat, providers, project tools, Code Mode.
548
+ Install with the `install.sh` command above — it installs the official
549
+ Python wheel, so **Python 3.12+ (with pip)** is required. No prebuilt
550
+ Linux/macOS binary is published in this release.
551
+
552
+ ## Building from source
553
+
554
+ ### Python distributions
555
+
556
+ ```bash
557
+ python -m pip install build twine
558
+ python -m build # wheel + sdist, version read from seedcode/__init__.py
559
+ python -m twine check dist/*
560
+ ```
561
+
562
+ ### Windows EXE + installer
563
+
564
+ ```bat
565
+ scripts\windows\build.bat
566
+ ```
567
+
568
+ Stage 0 generates the branding assets (icon, wizard art, exe version
569
+ resource). Stage 0b embeds the default API configuration from a local `.env`
570
+ (git-ignored; skipped when absent — never printed or committed). Stage 1
571
+ builds the self-contained `dist\seedcode.exe` with PyInstaller (icon +
572
+ version resource embedded) and verifies it. Stage 2 compiles the Inno Setup
573
+ installer and verifies it. Stage 3 stages everything into
574
+ `dist\release\<version>\` and writes `SHA256SUMS.txt` with real hashes. Every
575
+ stage fails loudly on a version mismatch, so a stale binary can never ship.
576
+
577
+ Details: [`scripts/windows/README.md`](scripts/windows/README.md).
578
+
579
+ ### Release artifacts (v7.1.0)
580
+
581
+ Release: [v7.1.0](https://github.com/Alshahriar-07/seedcode-cli/releases/tag/v7.1.0)
582
+
583
+ | Artifact | Purpose |
584
+ | --- | --- |
585
+ | `SeedCode-CLI-Setup-7.1.0.exe` | Windows installer (Inno Setup) |
586
+ | `SeedCode-CLI-7.1.0-windows-x64.exe` | Standalone Windows EXE — downloaded by the Windows IRM installer |
587
+ | `seedcode_cli-7.1.0-py3-none-any.whl` | Python wheel — downloaded by the Linux IRM installer |
588
+ | `seedcode_cli-7.1.0.tar.gz` | Python source distribution |
589
+ | `SHA256SUMS.txt` | SHA256 checksums; verified by both installers |
590
+
591
+ Built artifacts are collected in `dist/release/7.1.0/` during a release
592
+ build. Publishing (GitHub Release) is a separate step; the remote installers
593
+ read the release named `v7.1.0`.
594
+
595
+ ### The remote installers
596
+
597
+ [`IRM_INSTALL/`](IRM_INSTALL/) is the source of the scripts served at
598
+ `https://seedcode-cli.vercel.app`:
599
+
600
+ | File | Served at |
601
+ | --- | --- |
602
+ | `install.ps1` | `/install.ps1` (Windows) |
603
+ | `install.sh` | `/install.sh` (Linux) |
604
+ | `RELEASE_INFO.txt` | Official installation summary |
605
+
606
+ ## Troubleshooting
607
+
608
+ - **`seedcode` is not recognized** — open a *new* terminal after installing;
609
+ `PATH` changes only apply to fresh sessions. The installer verifies this
610
+ before it finishes.
611
+ - **"Setup needed" on the header** — the active provider is not usable yet.
612
+ Run `/provider`. Default needs a built-in credential (release builds have
613
+ one); OpenRouter/FreeModel/AeroLink need your own key.
614
+ - **Default says the built-in connection is unavailable** — this build has no
615
+ embedded credential. Run `/provider` and choose OpenRouter, or set
616
+ `OPENROUTER_API_KEY`.
617
+ - **401/403 errors** — your key is invalid or lacks access; `/apikey` to
618
+ replace it, `/doctor` for diagnostics.
619
+ - **402 errors** — the model needs credits; `/model` and pick a free model
620
+ (Default ships with `cohere/north-mini-code:free`).
621
+ - **Rate limits (429)** — wait and retry; Seed Code honors the provider's
622
+ `Retry-After` hint. Consider a different provider.
623
+ - **Desktop actions fail** — check `/permission` (desktop requires the
624
+ `desktop` level) and `/computer` for engine status.
625
+ - **Reset everything** — delete `~/.seedcode/` (settings, keys, history);
626
+ `.seedcode/` project memory lives in each project and is separate.
627
+
628
+ ## Security model
629
+
630
+ - Credentials stay local and **provider-scoped**. Saving or switching one
631
+ provider never reads or writes another provider's key slot, so a key cannot
632
+ leak between Default, OpenRouter, FreeModel, AeroLink and Ollama.
633
+ - The built-in Default credential is resolved per request and is never copied
634
+ into another provider's stored configuration.
635
+ - Keys are shown masked (`sk-or-••••••••`) or not at all — never in full,
636
+ never in logs, never in error messages, never in a release artifact.
637
+ - Computer actions pass permission checks, verification, and retry limits.
638
+ - `.seedcode/` memory refuses secret-looking fields at write time.
639
+ - The release build consumes the local `.env` only during packaging; the
640
+ secret never enters source control, logs, manifests, or package metadata.
641
+
642
+ Review permissions before enabling Assist Mode — especially in unfamiliar
643
+ projects or with sensitive applications.
644
+
645
+ ## Credits
646
+
647
+ - **Created by:** Al Shahriar Sowan — <https://alshahriarsayon.vercel.app/>
648
+ - **Studio:** Eagox Studio — <https://eagoxstudio.vercel.app/>
649
+ - **Contact:** github@eagox.studio
650
+
651
+ ## License
652
+
653
+ MIT — see [`LICENSE`](LICENSE).