Releases: hide-org/hide
v0.5.0
Release v0.5.0
We're excited to announce the latest release of our project. This update brings several significant improvements and bug fixes.
✨ What's New
📂 Local Project Support
Hide now supports working with codebases directly from your filesystem. This is particularly useful for local development, private codebases, and huge repositories, allowing you to use Hide without requiring to pull a remote repository.
cURL
curl --location 'http://localhost:8080/projects' \
--header 'Content-Type: application/json' \
--data '{
"repository": {
"url": "file:///Code/django"
},
"languages": [
"Python"
]
}'Python
import hide
from hide import model
hc = hide.Client()
# Create project with specific language support
project = hc.create_project(
repository=model.Repository(url="file:///Code/django"),
languages=[model.Language.PYTHON]
)📑 Document Outline
The new document outline feature provides a structured view of your code, making it easier for agents to navigate through large files and understand code structure at a glance.
cURL
curl --location 'http://localhost:8080/projects/{project_id}/outline/path/to/file.py'Python
import hide
from hide import model
hc = hide.Client()
project = hc.create_project(
repository=model.Repository(url="file:///Code/django")
)
outline = hc.document_outline(
project_id=project.id,
file="path/to/file.py"
)⏱️ Task Management
We've implemented client-side timeouts for running tasks to prevent indefinitely hanging operations and provide better control over long-running processes.
Thank you @wistuba for proposing this feature 🙏
cURL
curl --location 'http://localhost:8080/projects/{project_id}/tasks' \
--header 'X-Timeout-Seconds: 10' \
--data ' {
"command": "sleep 50"
}'Python
import hide
from hide import model
hc = hide.Client()
project = hc.create_project(
repository=model.Repository(url="file:///Code/django")
)
result = hc.run_task(
project_id=project.id,
command="sleep 50",
timeout=10, #time out and release resources after 10 second.
)🛠️ Developer Experience
This release includes several improvements to make Hide more developer-friendly.
- Added OpenAPI specification for better API documentation
- Introduced Bruno API collection for easier API testing
- Improved LSP server management with separate process groups and concurrent diagnostics handling
- Fixed issues with diagnostics on closed channels
🔮 What's Next?
We're actively working on expanding Hide's capabilities in several exciting directions:
- Adding support for Java and Scala development environments
- Exploring new options for hosting devcontainers
- Evaluating Hide's performance on swe-bench – if you're interested in driving this benchmarking effort, please reach out to us by [email protected] or join our discord channel https://discord.gg/8aemdtxNF8
👏 Changelog
- pkg/lsp: fixes issue where diagnostics are recieved on a closed channel by @aleh-null in #136
- pkg/handlers: use equals for assertion by @aleh-null in #133
- cmd: remove timeouts by @artmoskvin in #137
- bruno: add hide collection by @artmoskvin in #142
- pkg/lsp: concurent diagnostics handling by @aleh-null in #140
- pkg/lsp: run in separate process group for graceful shutdown by @aleh-null in #143
- pkg/project: support local projects by @artmoskvin in #144
- pkg/handlers: use methods consts from http pkg by @aleh-null in #145
- implement document outline by @aleh-null in #146
- add openapi spec by @artmoskvin in #152
- pkg/handlers: implement client side timeouts for running tasks by @aleh-null in #155
Full Changelog: v0.4.1...v0.5.0
v0.4.1
Release v0.4.1
We're excited to announce the latest release of our project. This update brings several improvements and bug fixes to enhance your development experience.
✨ What's New
📁 File Handling and Project Management
- Improved file listing with relative paths (thanks @prabhuteja12 for reporting)
- Added support for
.gitignorewhen listing files - Implemented a tree-like formatter for listed files (details below)
- New
languagesparameter for project creation (details below)
🐳 Devcontainer and LSP Enhancements
- Added support for local images (thanks @prabhuteja12 for reporting)
- Improved language detection using go-enry
- Implemented graceful shutdown of LSP servers
🚀 Performance and Bug Fixes
- Fixed an issue where LSP wasn't stopping when deleting a project (thanks @wistuba for reporting)
- Fixed a bug related to missing
Close()call in the gitignore reader (thanks @wistuba for reporting)
We hope you enjoy this new release! As always, we welcome your feedback and contributions.
🔦 New languages parameter
We've introduced a new languages parameter to give you more control over LSP server initialization when creating a project. Here's what you need to know:
🧠 Background
When hide receives a request to create a new project, it attempts to detect the main programming language(s) to launch relevant LSP servers. While we've significantly improved the accuracy of language detection using go-enry, we understand that sometimes you may want more explicit control.
⚙️ How It Works
The new languages parameter allows you to specify which LSP servers to start when creating a project. This ensures that you have the exact language support you need, regardless of automatic detection results.
🗣️ Supported Languages
The languages parameter currently supports the following values:
- Go
- JavaScript
- Python
- TypeScript
💡 Usage Examples
cURL
curl --location 'http://localhost:8080/projects' \
--header 'Content-Type: application/json' \
--data '{
"repository": {
"url": "https://github.com/sphinx-doc/sphinx.git"
},
"devcontainer": {
"image": "mcr.microsoft.com/devcontainers/python:3.12",
"onCreateCommand": "pip install -e ."
},
"languages": [
"Python"
]
}'Python
import hide
from hide import model
hc = hide.Client()
# Create project with specific language support
project = hc.create_project(
repository=model.Repository(url="https://github.com/your-username/your-repo"),
languages=[model.Language.PYTHON]
)📝 Note
If the languages parameter is not provided, hide will fall back to its automatic language detection using go-enry.
🌳 Tree-like formatter
We've introduced a new tree-like format for listing files in your projects. This feature aims to provide a more intuitive and familiar representation of your project structure.
🧠 Background
JSON has been our foundation for representing file structures due to its flexibility and widespread use in data transport. It's an excellent base format that allows building various representations on top of it using SDK. However, we recognized the value in providing some common, ready-to-use formats directly from the API. This approach saves development time and offers immediate utility for many use cases, including AI agents that benefit from familiar, hierarchical representations.
⚙️ How It Works
The new tree-like formatter presents your project's file structure in a format similar to what you'd see when using the tree utility in a shell. This hierarchical representation makes it easier to visualize the structure of your project at a glance.
💡 Usage Example
To use the new tree-like format, you can specify in your API request. Here's an example using cURL:
curl --location 'http://localhost:8080/projects/{project_id}/files' \
--header 'Accept: text/plain'The response will look something like this:
.
├── src/
│ ├── main.py
│ └── utils/
│ ├── helper.py
│ └── config.py
├── tests/
│ ├── test_main.py
│ └── test_utils.py
├── README.md
└── requirements.txt
Here's an example in Python:
import hide
from hide import model
hc = hide.Client()
# Create project with specific language support
project = hc.create_project(
repository=model.Repository(url="https://github.com/your-username/your-repo")
)
files = hc.list_files(
project_id=project.id,
format=model.ListFilesFormat.TREE
)👏 Changelog
- pkg/files: use relative paths in listed files by @artmoskvin in #113
- pkg/devcontainer: support local images by @aleh-null in #119
- pkg/gitignore: read gitignore file and extract patterns by @aleh-null in #117
- pkg/lsp: use go-enry for language detection by @artmoskvin in #121
- pkg/files: wire in gitignore by @aleh-null in #122
- rename hide org by @artmoskvin in #124
- pkg/project: add languages parameter by @artmoskvin in #125
- pkg/project: stop lsp when deleting project by @artmoskvin in #128
- pkg/gitignore: bugfix missing Close() by @aleh-null in #130
- pkg/frmtr: implement a tree like formater for path by @aleh-null in #126
- pkg/lsp: shutdown lsp servers gracefully by @artmoskvin in #131
- pkg/handlers: enable "text/plain" return from ListFiles by @aleh-null in #132
Full Changelog: v0.4.0...v0.4.1
Hide v0.4.0
Search API
Hide now provides search API to help agents navigate and explore projects efficiently. There are three main types of search available:
- Content Search
- File Search
- Symbol Search.
To start using search:
- (if you use
brew) Update Hide Runtime- uninstall hide
brew uninstall hide - remove the old tap
brew untap artmoskvin/hide - add the new tap
brew tap hide-org/formulae - install hide
brew install hide
- uninstall hide
- (if you build from sources) pull the latest
git pulland installgo install . - Update Hide SDK for Python by running
pip install -U hide-py. - Check out the documentation: https://hide.sh/usage/search/.
- (Optionally) Join our new Discord community to chat about agents, tools, and dev environments https://discord.gg/8aemdtxNF8
Examples
cURL
# Exclude 'node_modules'
curl -X GET "http://localhost:8080/projects/{projectId}/search?type=content&query=your_search_query&exclude=**/node_modules"
# Search for files containing the word "test" in their path
curl -X GET "http://localhost:8080/projects/{projectId}/files?include=test"
# Search for symbol
curl -X GET "http://localhost:8080/projects/{projectId}/symbols?type=symbol&query=your_symbol_name"python
import hide
from hide import model
hc = hide.Client()
project = hc.create_project(
repository=model.Repository(url="https://github.com/your-username/your-repo")
)
# Exclude 'node_modules'
files = hc.search_files(
project_id=project.id,
query="your_query",
exclude=["/node_modules"]
)
# Search for files containing the word "test" in their path
files = hc.list_files(
project_id=project.id,
include=["test"]
)
# Search for symbol
symbols = hc.search_symbols(
project_id=project.id,
query="your_symbol_name"
)What's Changed
- Refactor DockerClient and ImageManager from DevcontainerRunner by @artmoskvin in #86
- Add container manager by @artmoskvin in #92
- pkg/handlers: implement search by @aleh-null in #91
- pkg/handlers: improve test coverage by @artmoskvin in #94
- pkg/devcontainer: test runner by @artmoskvin in #93
- Add symbol search by @artmoskvin in #97
- pkg/handlers: nit showHidden flag by @aleh-null in #98
- pkg/model: check if file contains new line before spliting by @aleh-null in #103
- pkg/model: remove bufio from NewLines() by @aleh-null in #106
- pkg/files: implement file name filtering using glob patterns for ListFile and SearchFiles endpoints by @aleh-null in #99
- docs: add steps for installing lsp servers by @artmoskvin in #104
- pkg/files: make read file optional in ListFiles by @aleh-null in #107
- docs: update links and logo by @artmoskvin in #108
- vendor: vendor dependencies by @aleh-null in #109
- pkg/middleware: move middleware into a separate pkg by @aleh-null in #111
- docs: search by @artmoskvin in #110
- pkg/handlers: remove showHidden option from listFiles() by @aleh-null in #112
Full Changelog: v0.3.0...v0.4.0
Welcome to our Discord community
Hide v0.3.0
What's Changed
- Sets up zero log for structuring logging and nicer prompts (Issue 48) by @aleh-null in #60
- Create model by @artmoskvin in #61
- Refactoring/file manager by @artmoskvin in #62
- Use file manager from project manager by @artmoskvin in #63
- Create lsp service by @artmoskvin in #64
- cmd/main: gracefull shutdown + gorilla/mux by @aleh-null in #65
- Add middleware for path validation by @artmoskvin in #68
- Use lines instead of content in File by @artmoskvin in #70
- Change field names in TaskResult by @artmoskvin in #72
- cmd/hide/main: use cobra to run hide by @aleh-null in #71
- fix makefile to reflect updated file structure by @aleh-null in #73
- Update documentation by @artmoskvin in #74
- Create ClientPool and DiagnosticsStore by @artmoskvin in #76
- Change Hide projects path by @artmoskvin in #77
- pkg/config: hardcode next release version by @aleh-null in #78
New Contributors
- @aleh-null made their first contribution in #60
Full Changelog: v0.2.0...v0.3.0
Hide v0.2.0
What's Changed
- Use mkdocs for docs by @artmoskvin in #39
- Add tons of docs by @artmoskvin in #40
- Add quickstart by @artmoskvin in #44
- Show line numbers when reading files by @artmoskvin in #49
- Update files with diffs by @artmoskvin in #50
Full Changelog: v0.1.0...v0.2.0
Hide v0.1.0
What's Changed
- Creates basic project structure by @EvandroLG in #4
- Create go.yml by @artmoskvin in #6
- Prototype dev container launcher by @artmoskvin in #5
- Refactor project manager by @artmoskvin in #7
- Add API for file manipulation by @artmoskvin in #16
- Add API for submitting tasks by @artmoskvin in #19
- Add DevContainer config parser by @artmoskvin in #20
- Add Runner interface by @artmoskvin in #21
- Improve container logging by @artmoskvin in #26
- Update README.md by @artmoskvin in #27
- Add devcontainer config in CreateProjectRequest by @artmoskvin in #29
- Create project async by @artmoskvin in #30
- Add delete project endpoint by @artmoskvin in #31
- Use dotenv for configuration by @artmoskvin in #35
- Create LICENSE by @artmoskvin in #36
- Reorg main files by @artmoskvin in #37
- Pass env file as command line arg by @artmoskvin in #38
New Contributors
- @EvandroLG made their first contribution in #4
- @artmoskvin made their first contribution in #6
Full Changelog: https://github.com/artmoskvin/hide/commits/v0.1.0