tunacode-cli 0.0.1__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.

Potentially problematic release.


This version of tunacode-cli might be problematic. Click here for more details.

Files changed (65) hide show
  1. tunacode/__init__.py +0 -0
  2. tunacode/cli/__init__.py +4 -0
  3. tunacode/cli/commands.py +632 -0
  4. tunacode/cli/main.py +47 -0
  5. tunacode/cli/repl.py +251 -0
  6. tunacode/configuration/__init__.py +1 -0
  7. tunacode/configuration/defaults.py +26 -0
  8. tunacode/configuration/models.py +69 -0
  9. tunacode/configuration/settings.py +32 -0
  10. tunacode/constants.py +129 -0
  11. tunacode/context.py +83 -0
  12. tunacode/core/__init__.py +0 -0
  13. tunacode/core/agents/__init__.py +0 -0
  14. tunacode/core/agents/main.py +119 -0
  15. tunacode/core/setup/__init__.py +17 -0
  16. tunacode/core/setup/agent_setup.py +41 -0
  17. tunacode/core/setup/base.py +37 -0
  18. tunacode/core/setup/config_setup.py +179 -0
  19. tunacode/core/setup/coordinator.py +45 -0
  20. tunacode/core/setup/environment_setup.py +62 -0
  21. tunacode/core/setup/git_safety_setup.py +188 -0
  22. tunacode/core/setup/undo_setup.py +32 -0
  23. tunacode/core/state.py +43 -0
  24. tunacode/core/tool_handler.py +57 -0
  25. tunacode/exceptions.py +105 -0
  26. tunacode/prompts/system.txt +71 -0
  27. tunacode/py.typed +0 -0
  28. tunacode/services/__init__.py +1 -0
  29. tunacode/services/mcp.py +86 -0
  30. tunacode/services/undo_service.py +244 -0
  31. tunacode/setup.py +50 -0
  32. tunacode/tools/__init__.py +0 -0
  33. tunacode/tools/base.py +244 -0
  34. tunacode/tools/read_file.py +89 -0
  35. tunacode/tools/run_command.py +107 -0
  36. tunacode/tools/update_file.py +117 -0
  37. tunacode/tools/write_file.py +82 -0
  38. tunacode/types.py +259 -0
  39. tunacode/ui/__init__.py +1 -0
  40. tunacode/ui/completers.py +129 -0
  41. tunacode/ui/console.py +74 -0
  42. tunacode/ui/constants.py +16 -0
  43. tunacode/ui/decorators.py +59 -0
  44. tunacode/ui/input.py +95 -0
  45. tunacode/ui/keybindings.py +27 -0
  46. tunacode/ui/lexers.py +46 -0
  47. tunacode/ui/output.py +109 -0
  48. tunacode/ui/panels.py +156 -0
  49. tunacode/ui/prompt_manager.py +117 -0
  50. tunacode/ui/tool_ui.py +187 -0
  51. tunacode/ui/validators.py +23 -0
  52. tunacode/utils/__init__.py +0 -0
  53. tunacode/utils/bm25.py +55 -0
  54. tunacode/utils/diff_utils.py +69 -0
  55. tunacode/utils/file_utils.py +41 -0
  56. tunacode/utils/ripgrep.py +17 -0
  57. tunacode/utils/system.py +336 -0
  58. tunacode/utils/text_utils.py +87 -0
  59. tunacode/utils/user_configuration.py +54 -0
  60. tunacode_cli-0.0.1.dist-info/METADATA +242 -0
  61. tunacode_cli-0.0.1.dist-info/RECORD +65 -0
  62. tunacode_cli-0.0.1.dist-info/WHEEL +5 -0
  63. tunacode_cli-0.0.1.dist-info/entry_points.txt +2 -0
  64. tunacode_cli-0.0.1.dist-info/licenses/LICENSE +21 -0
  65. tunacode_cli-0.0.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,242 @@
1
+ Metadata-Version: 2.4
2
+ Name: tunacode-cli
3
+ Version: 0.0.1
4
+ Summary: Your agentic CLI developer.
5
+ Author-email: Gavin Vickery <gavin@geekforbrains.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/larock22/tunacode
8
+ Project-URL: Repository, https://github.com/larock22/tunacode
9
+ Keywords: cli,agent,development,automation
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Software Development
18
+ Classifier: Topic :: Utilities
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: prompt_toolkit==3.0.51
23
+ Requires-Dist: pydantic-ai[logfire]==0.2.6
24
+ Requires-Dist: pygments==2.19.1
25
+ Requires-Dist: rich==14.0.0
26
+ Requires-Dist: typer==0.15.3
27
+ Provides-Extra: dev
28
+ Requires-Dist: build; extra == "dev"
29
+ Requires-Dist: black; extra == "dev"
30
+ Requires-Dist: flake8; extra == "dev"
31
+ Requires-Dist: isort; extra == "dev"
32
+ Requires-Dist: pytest; extra == "dev"
33
+ Requires-Dist: pytest-cov; extra == "dev"
34
+ Dynamic: license-file
35
+
36
+ # TunaCode (Beta)
37
+
38
+ [![PyPI version](https://badge.fury.io/py/tunacode-cli.svg)](https://badge.fury.io/py/tunacode-cli)
39
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
40
+
41
+ ![TunaCode Demo](screenshot.gif)
42
+
43
+ Your agentic CLI developer.
44
+
45
+ ## Overview
46
+
47
+ TunaCode is an agentic CLI-based AI tool inspired by Claude Code, Copilot, Windsurf and Cursor. It's meant
48
+ to be an open source alternative to these tools, providing a similar experience but with the flexibility of
49
+ using different LLM providers (Anthropic, OpenAI, Google Gemini, OpenRouter) while keeping the agentic workflow.
50
+
51
+ *TunaCode is currently in beta and under active development. Please [report issues](https://github.com/geekforbrains/tunacode-cli/issues) or share feedback!*
52
+
53
+ ## Features
54
+
55
+ - No vendor lock-in. Use whichever LLM provider you prefer.
56
+ - MCP support
57
+ - Use /undo when AI breaks things.
58
+ - Easily switch between models in the same session.
59
+ - JIT-style system prompt injection ensures TunaCode doesn't lose the plot.
60
+ - Per-project guide. Adjust TunaCode's behavior to suit your needs.
61
+ - CLI-first design. Ditch the clunky IDE.
62
+ - Cost and token tracking.
63
+ - Per command or per session confirmation skipping.
64
+
65
+ ## Roadmap
66
+
67
+ - Tests 😅
68
+ - More LLM providers, including OpenRouter and Ollama
69
+
70
+ ## Quick Start
71
+
72
+ Install TunaCode.
73
+
74
+ ```
75
+ pip install tunacode-cli
76
+ ```
77
+
78
+ On first run, you'll be asked to configure your LLM providers.
79
+
80
+ ```
81
+ tunacode
82
+ ```
83
+
84
+ ## Configuration
85
+
86
+ After initial setup, TunaCode saves a config file to `~/.config/tunacode.json`. You can open and
87
+ edit this file as needed. Future updates will make editing easier directly from within TunaCode.
88
+
89
+ ### OpenRouter Support
90
+
91
+ To use [OpenRouter](https://openrouter.ai) models, add an `OPENROUTER_API_KEY` to the
92
+ `env` section of your configuration file. TunaCode will set the environment variable so the
93
+ OpenAI client can communicate with OpenRouter:
94
+
95
+ ```json
96
+ {
97
+ "env": {
98
+ "OPENROUTER_API_KEY": "<YOUR_KEY>"
99
+ }
100
+ }
101
+ ```
102
+
103
+ Then run TunaCode with the OpenRouter base URL:
104
+
105
+ ```bash
106
+ OPENAI_BASE_URL="https://openrouter.ai/api/v1" tunacode
107
+ ```
108
+
109
+ You can now switch to OpenRouter models using:
110
+ ```
111
+ /model openrouter:mistralai/devstral-small
112
+ ```
113
+
114
+ ### MCP Support
115
+
116
+ TunaCode supports Model Context Protocol (MCP) servers. You can configure MCP servers in your `~/.config/tunacode.json` file:
117
+
118
+ ```json
119
+ {
120
+ "mcpServers": {
121
+ "fetch": {
122
+ "command": "uvx",
123
+ "args": ["mcp-server-fetch"]
124
+ },
125
+ "github": {
126
+ "command": "npx",
127
+ "args": ["-y", "@modelcontextprotocol/server-github"],
128
+ "env": {
129
+ "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
130
+ }
131
+ }
132
+ }
133
+ }
134
+ ```
135
+
136
+ MCP servers extend the capabilities of your AI assistant, allowing it to interact with additional tools and data sources. Learn more about MCP at [modelcontextprotocol.io](https://modelcontextprotocol.io/).
137
+
138
+ ### Available Commands
139
+
140
+ - `/help` - Show available commands
141
+ - `/yolo` - Toggle "yolo" mode (skip tool confirmations)
142
+ - `/clear` - Clear message history
143
+ - `/compact` - Summarize message history and clear old messages
144
+ - `/model` - List available models
145
+ - `/model <num>` - Switch to a specific model (by index)
146
+ - `/branch <name>` - Create and switch to a new Git branch
147
+ - `/undo` - Undo most recent changes
148
+ - `/dump` - Show current message history (for debugging)
149
+ - `exit` - Exit the application
150
+
151
+ ## Customization
152
+
153
+ TunaCode supports the use of a "guide". This is a `TUNACODE.md` file in the project root that contains
154
+ instructions for TunaCode. Helpful for specifying tech stack, project structure, development
155
+ preferences etc.
156
+
157
+ ## Requirements
158
+
159
+ - Python 3.10 or higher
160
+ - Git (for undo functionality)
161
+
162
+ ## Installation
163
+
164
+ ### Using pip
165
+
166
+ ```bash
167
+ pip install tunacode-cli
168
+ ```
169
+
170
+ ### From Source
171
+
172
+ 1. Clone the repository
173
+ 2. Install dependencies: `pip install .` (or `pip install -e .` for development)
174
+
175
+ ## Development
176
+
177
+ ```bash
178
+ # Install development dependencies
179
+ make install
180
+
181
+ # Run linting
182
+ make lint
183
+
184
+ # Run tests
185
+ make test
186
+ ```
187
+
188
+ ## Release Process
189
+
190
+ When preparing a new release:
191
+
192
+ 1. Update version numbers in:
193
+ - `pyproject.toml`
194
+ - `src/tunacode/constants.py` (APP_VERSION)
195
+
196
+ 2. Commit the version changes:
197
+ ```bash
198
+ git add pyproject.toml src/tunacode/constants.py
199
+ git commit -m "chore: bump version to X.Y.Z"
200
+ ```
201
+
202
+ 3. Create and push a tag:
203
+ ```bash
204
+ git tag vX.Y.Z
205
+ git push origin vX.Y.Z
206
+ ```
207
+
208
+ 4. Create a GitHub release:
209
+ ```bash
210
+ gh release create vX.Y.Z --title "vX.Y.Z" --notes "Release notes here"
211
+ ```
212
+
213
+ 5. Merge to main branch and push to trigger PyPI release (automated)
214
+
215
+ ### Commit Convention
216
+
217
+ This project follows the [Conventional Commits](https://www.conventionalcommits.org/) specification for commit messages:
218
+
219
+ - `feat:` - New features
220
+ - `fix:` - Bug fixes
221
+ - `docs:` - Documentation changes
222
+ - `style:` - Code style changes (formatting, etc.)
223
+ - `refactor:` - Code refactoring
224
+ - `perf:` - Performance improvements
225
+ - `test:` - Test additions or modifications
226
+ - `chore:` - Maintenance tasks (version bumps, etc.)
227
+ - `build:` - Build system changes
228
+ - `ci:` - CI configuration changes
229
+
230
+ ## Links
231
+
232
+ - [PyPI Package](https://pypi.org/project/tunacode-cli/)
233
+ - [GitHub Issues](https://github.com/geekforbrains/tunacode-cli/issues)
234
+ - [GitHub Repository](https://github.com/geekforbrains/tunacode-cli)
235
+
236
+ ## License
237
+
238
+ MIT
239
+
240
+ ## Acknowledgments
241
+
242
+ This project is a fork of [sidekick-cli](https://github.com/geekforbrains/sidekick-cli). Thank you to the sidekick-cli team for creating the foundation that made TunaCode possible! 🙏
@@ -0,0 +1,65 @@
1
+ tunacode/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ tunacode/constants.py,sha256=SOy0DyXaIHHReGbmkelLkXFxOp3vXtM8wQRTKUE8EKA,4249
3
+ tunacode/context.py,sha256=0ttsxxLAyD4pSoxw7S-pyzor0JUkhOFZh96aAf4Kqsg,2634
4
+ tunacode/exceptions.py,sha256=MtXigF5Y0n-C2iZAMJVHQU7DcJ4HQQzmxjsQyc4sCfE,2647
5
+ tunacode/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ tunacode/setup.py,sha256=KCNhnu8FY5bFRqR0JMIh22xVakCC97kchmyGsUGUaJ4,1811
7
+ tunacode/types.py,sha256=-qFH7U3eqYvXqpeTU_TAIGIlrOWYBfm-qeH4AeH3GHs,7146
8
+ tunacode/cli/__init__.py,sha256=zgs0UbAck8hfvhYsWhWOfBe5oK09ug2De1r4RuQZREA,55
9
+ tunacode/cli/commands.py,sha256=911tz2e13ljTVlY5DR44qt8aeyTQo4dF4H9BoziRMtA,20732
10
+ tunacode/cli/main.py,sha256=5_CXYtzN-Mc3nOv2Xpk6yfnV4d2SOgA9ENyTCe0cYYw,1226
11
+ tunacode/cli/repl.py,sha256=7g2c5M10bMsSmsomTIiR8bPlUAaqp83hybuVZdwT5kM,8789
12
+ tunacode/configuration/__init__.py,sha256=MbVXy8bGu0yKehzgdgZ_mfWlYGvIdb1dY2Ly75nfuPE,17
13
+ tunacode/configuration/defaults.py,sha256=9fR_Wydc85fU5LN5LlgRfW6geZNPNFMqKRVLN2v_TQ8,694
14
+ tunacode/configuration/models.py,sha256=sOW_pb3HeWdmoZ5SbHsogUDFhiIZZ1GstM18KTr_G8k,2883
15
+ tunacode/configuration/settings.py,sha256=0HqwEFkpGqPtF-h0sAIBHFXTlJQ_KtelD_s-z2XDSak,992
16
+ tunacode/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ tunacode/core/state.py,sha256=0U_WU92yn5EQ27BLlHIkNIJJqjLMNHKNYSoba1rQqbQ,1376
18
+ tunacode/core/tool_handler.py,sha256=OKx7jM8pml6pSEnoARu33_uBY8awJBqvhbVeBn6T4ow,1804
19
+ tunacode/core/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ tunacode/core/agents/main.py,sha256=ZGB-EUQ7ow-m3ohSAmfPZ5UN9XC2Gbz40rKjsZsWwrA,4669
21
+ tunacode/core/setup/__init__.py,sha256=jlveyriTXRcnoBLU6_TJ7Z-3E6EXjT9L5GD1vW4dei0,427
22
+ tunacode/core/setup/agent_setup.py,sha256=k1bmQ21ue17_zZsWlhIfc7ZWN6vZtmOgKMMzR4Xu9-k,1410
23
+ tunacode/core/setup/base.py,sha256=x9uYOITulrf4faP70NPTNBPb-wW1ZJGmcjAe0Sk5slk,961
24
+ tunacode/core/setup/config_setup.py,sha256=1eDS8iIG9z_BvrmeL8d9QUEBtPXSjOcrNu-2vHtvSFk,7474
25
+ tunacode/core/setup/coordinator.py,sha256=pT1mI24Kllo2H6Hjb-uULLsA1E3X3BqQB7nSGe70SRw,1598
26
+ tunacode/core/setup/environment_setup.py,sha256=u6Anb9uDicmdMA_9xLkP0j2uoiVY16ojsA7XnFz--yQ,2234
27
+ tunacode/core/setup/git_safety_setup.py,sha256=1NuzSASi0b69wQRpcOgINKklGnq34Xh3itm_PEpjDus,7238
28
+ tunacode/core/setup/undo_setup.py,sha256=BUVbEKFQ_Edgbyp5zJziWdaog4tXgl-S98n0mSOzumA,1119
29
+ tunacode/prompts/system.txt,sha256=kaXIoQQQmdau7j2cD4MbF47KhfJZhV6zrfi2boJ4b3s,3225
30
+ tunacode/services/__init__.py,sha256=w_E8QK6RnvKSvU866eDe8BCRV26rAm4d3R-Yg06OWCU,19
31
+ tunacode/services/mcp.py,sha256=R48X73KQjQ9vwhBrtbWHSBl-4K99QXmbIhh5J_1Gezo,3046
32
+ tunacode/services/undo_service.py,sha256=LWhcLY12FdKXI9jd85pizxDOuZ2AHVyA1BRx4UWiiOc,7748
33
+ tunacode/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ tunacode/tools/base.py,sha256=5IXKgiHVnV7pPgWTiT0mhFLy2dA2vuryy8Ri_CHsZBY,8936
35
+ tunacode/tools/read_file.py,sha256=QW97pPVcHvNJk48iPSwzOZ9Dbq_Ce8lQ7W0F82SXi7k,3051
36
+ tunacode/tools/run_command.py,sha256=dspFV71g98gbOQV6CT9LsEoytQ_4zyVqqZD99zf__OY,3796
37
+ tunacode/tools/update_file.py,sha256=oG7ELWX3uHboDs2BPy8hfZb6hh0bQOav-LlWIRynMO4,4145
38
+ tunacode/tools/write_file.py,sha256=bV-Xz_Wy_SaCqU78PcxP2ttScfH7F7GGnvs4P7EDuAM,2821
39
+ tunacode/ui/__init__.py,sha256=aRNE2pS50nFAX6y--rSGMNYwhz905g14gRd6g4BolYU,13
40
+ tunacode/ui/completers.py,sha256=A35gtImDcZt_kg7dIFsGL1CGnKmfEt9UJXYh4ZvQebg,5069
41
+ tunacode/ui/console.py,sha256=7ua1LaBP3ZCRHzV0SqVCkgNlgBuBcBTcvybRjWl5jew,1943
42
+ tunacode/ui/constants.py,sha256=NxegAWaoDaEa4gzNZ7p67M0ZsHJJxZMtf2bW8E5WeZE,421
43
+ tunacode/ui/decorators.py,sha256=I09tETtxPfcWdh1B3kEM0nJ8E6HvdBZAdYhRzYUa_p8,1901
44
+ tunacode/ui/input.py,sha256=SmgwwJ4Ge1QQWk9hyu3gG1qke_aLRtyodOQGk7EThQ0,2956
45
+ tunacode/ui/keybindings.py,sha256=uT23EYLLoso-b4ppN-RqbdYOYanGqMr5FKm8OphhhFs,701
46
+ tunacode/ui/lexers.py,sha256=3qFwogyS_3zlS0NDxbc4e_sPvNHylNdCVMjPIIp85go,1507
47
+ tunacode/ui/output.py,sha256=jBsVXLLdMeI1Cr8XxI5o-XdXUXMR17gZncl0Iq5T8Ug,3811
48
+ tunacode/ui/panels.py,sha256=gsTDPX68LRcSxAlzCB01R3dfLT5sNWgSeoB-nCxeSmM,5933
49
+ tunacode/ui/prompt_manager.py,sha256=i8LBDFalo72b9YP1-65X0v0DA62k-auSVEJMXXr31fs,4010
50
+ tunacode/ui/tool_ui.py,sha256=XqJhVm3NNGwvIbMYQ8JmmLwjGeIT3WHCf5INrgBfpY8,6530
51
+ tunacode/ui/validators.py,sha256=wkg-lQrP-Wjm5phUHKD3Mte8F1J3A2EjESQgPPtRcvQ,758
52
+ tunacode/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ tunacode/utils/bm25.py,sha256=yq7KFWP3g_zIsjUV7l2hFPXYCzXyNQUInLU7u4qsc_4,1909
54
+ tunacode/utils/diff_utils.py,sha256=V9PM1Of0wvWNTVyw7iZYrNowFuRiKSyWiw5F39yRRYA,2394
55
+ tunacode/utils/file_utils.py,sha256=AXiAJ_idtlmXEi9pMvwtfPy9Ys3yK-F4K7qb_NpwonU,923
56
+ tunacode/utils/ripgrep.py,sha256=AXUs2FFt0A7KBV996deS8wreIlUzKOlAHJmwrcAr4No,583
57
+ tunacode/utils/system.py,sha256=Do-YKMrpTcp49DtnacisOj-NqnM8clI1YJeD6ebRUpw,11381
58
+ tunacode/utils/text_utils.py,sha256=B9M1cuLTm_SSsr15WNHF6j7WdLWPvWzKZV0Lvfgdbjg,2458
59
+ tunacode/utils/user_configuration.py,sha256=uFrpSRTUf0CijZjw1rOp1sovqy1uyr0UNcn85S6jvdk,1790
60
+ tunacode_cli-0.0.1.dist-info/licenses/LICENSE,sha256=SgvEceNP-y3_WodntkMGAkZyl_hAUvzBw5T9W--7YpM,1070
61
+ tunacode_cli-0.0.1.dist-info/METADATA,sha256=S-RIcXtow9xKWGZEvRbsscv3qTxp0Gr7LdL40OlUrOs,6787
62
+ tunacode_cli-0.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
63
+ tunacode_cli-0.0.1.dist-info/entry_points.txt,sha256=hbkytikj4dGu6rizPuAd_DGUPBGF191RTnhr9wdhORY,51
64
+ tunacode_cli-0.0.1.dist-info/top_level.txt,sha256=lKy2P6BWNi5XSA4DHFvyjQ14V26lDZctwdmhEJrxQbU,9
65
+ tunacode_cli-0.0.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ tunacode = tunacode.cli.main:app
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Gavin Vickery
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 @@
1
+ tunacode