mirror of
https://github.com/aljazceru/goose.git
synced 2025-12-19 07:04:21 +01:00
feat: add global optional user goosehints file (#73)
This commit is contained in:
@@ -101,6 +101,7 @@ To install Goose, use `pipx`. First ensure [pipx][pipx] is installed:
|
|||||||
brew install pipx
|
brew install pipx
|
||||||
pipx ensurepath
|
pipx ensurepath
|
||||||
```
|
```
|
||||||
|
You can also place `.goosehints` in `~/.config/goose/.goosehints` if you like for always loaded hints personal to you.
|
||||||
|
|
||||||
Then install Goose:
|
Then install Goose:
|
||||||
|
|
||||||
|
|||||||
@@ -41,9 +41,15 @@ class Developer(Toolkit):
|
|||||||
"""Retrieve system configuration details for developer"""
|
"""Retrieve system configuration details for developer"""
|
||||||
hints_path = Path(".goosehints")
|
hints_path = Path(".goosehints")
|
||||||
system_prompt = Message.load("prompts/developer.jinja").text
|
system_prompt = Message.load("prompts/developer.jinja").text
|
||||||
|
home_hints_path = Path.home() / ".config/goose/.goosehints"
|
||||||
|
hints = []
|
||||||
if hints_path.is_file():
|
if hints_path.is_file():
|
||||||
goosehints = render_template(hints_path)
|
hints.append(render_template(hints_path))
|
||||||
system_prompt = f"{system_prompt}\n\nHints:\n{goosehints}"
|
if home_hints_path.is_file():
|
||||||
|
hints.append(render_template(home_hints_path))
|
||||||
|
if hints:
|
||||||
|
hints_text = "\n".join(hints)
|
||||||
|
system_prompt = f"{system_prompt}\n\nHints:\n{hints_text}"
|
||||||
return system_prompt
|
return system_prompt
|
||||||
|
|
||||||
@tool
|
@tool
|
||||||
|
|||||||
@@ -55,7 +55,50 @@ def test_system_prompt_with_goosehints(temp_dir, developer_toolkit):
|
|||||||
assert system_prompt.endswith(expected_end)
|
assert system_prompt.endswith(expected_end)
|
||||||
|
|
||||||
|
|
||||||
def test_update_plan(developer_toolkit):
|
def test_system_prompt_with_goosehints_only_from_home_dir(temp_dir, developer_toolkit):
|
||||||
|
readme_file_home = Path.home() / ".config/goose/README.md"
|
||||||
|
readme_file_home.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
readme_file_home.write_text("This is from the README.md file in home.")
|
||||||
|
|
||||||
|
home_hints_file = Path.home() / ".config/goose/.goosehints"
|
||||||
|
home_jinja_template_content = "Hints from home:\n\n{% include 'README.md' %}\nEnd."
|
||||||
|
home_hints_file.write_text(home_jinja_template_content)
|
||||||
|
|
||||||
|
try:
|
||||||
|
with change_dir(temp_dir):
|
||||||
|
system_prompt = developer_toolkit.system()
|
||||||
|
expected_content_home = "Hints from home:\n\nThis is from the README.md file in home.\nEnd."
|
||||||
|
expected_end = f"Hints:\n{expected_content_home}"
|
||||||
|
assert system_prompt.endswith(expected_end)
|
||||||
|
finally:
|
||||||
|
home_hints_file.unlink()
|
||||||
|
readme_file_home.unlink()
|
||||||
|
|
||||||
|
readme_file = temp_dir / "README.md"
|
||||||
|
readme_file.write_text("This is from the README.md file.")
|
||||||
|
|
||||||
|
hints_file = temp_dir / ".goosehints"
|
||||||
|
jinja_template_content = "Hints from local:\n\n{% include 'README.md' %}\nEnd."
|
||||||
|
hints_file.write_text(jinja_template_content)
|
||||||
|
|
||||||
|
home_hints_file = Path.home() / ".config/goose/.goosehints"
|
||||||
|
home_jinja_template_content = "Hints from home:\n\n{% include 'README.md' %}\nEnd."
|
||||||
|
home_hints_file.write_text(home_jinja_template_content)
|
||||||
|
|
||||||
|
home_readme_file = Path.home() / ".config/goose/README.md"
|
||||||
|
home_readme_file.write_text("This is from the README.md file in home.")
|
||||||
|
|
||||||
|
try:
|
||||||
|
with change_dir(temp_dir):
|
||||||
|
system_prompt = developer_toolkit.system()
|
||||||
|
expected_content_local = "Hints from local:\n\nThis is from the README.md file.\nEnd."
|
||||||
|
expected_content_home = "Hints from home:\n\nThis is from the README.md file in home.\nEnd."
|
||||||
|
expected_end = f"Hints:\n{expected_content_local}\n{expected_content_home}"
|
||||||
|
assert system_prompt.endswith(expected_end)
|
||||||
|
finally:
|
||||||
|
home_hints_file.unlink()
|
||||||
|
home_readme_file.unlink()
|
||||||
|
|
||||||
tasks = [
|
tasks = [
|
||||||
{"description": "Task 1", "status": "planned"},
|
{"description": "Task 1", "status": "planned"},
|
||||||
{"description": "Task 2", "status": "complete"},
|
{"description": "Task 2", "status": "complete"},
|
||||||
|
|||||||
Reference in New Issue
Block a user