From 2eecaaad14b7584d3267d4dd9e2ec79a569ddabe Mon Sep 17 00:00:00 2001
From: Mic Neale
Date: Fri, 15 Nov 2024 10:36:26 +1100
Subject: [PATCH] correct binary for electron app and notes on building
---
CHANGELOG.md | 144 --------------------------------------
CONTRIBUTING.md | 108 ----------------------------
README.md | 7 ++
ui/desktop/src/bin/goosed | Bin 11136168 -> 11246424 bytes
4 files changed, 7 insertions(+), 252 deletions(-)
delete mode 100644 CHANGELOG.md
delete mode 100644 CONTRIBUTING.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index d153aa3266..0000000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
-and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-## [0.9.11] - 2024-11-05
-- fix: removed the unexpected tracing message (#219)
-
-## [0.9.10] - 2024-11-05
-- fix: bump version of exchange to 0.9.9
-
-## [0.9.9] - 2024-11-04
-- fix: only run summarize when there is something to summarize vs up front (#195)
-- feat: add browser toolkit (#179)
-- docs: reworks README to be outcome based (#151)
-- chore: license-checker improvements (#212)
-- fix: prompt rendering (#208)
-- fix: Cost calculation enhancement (#207)
-- refactor: used recommended_models function as default model (#209)
-- feat: default to synopsis (#206)
-- chore: housekeeping (#202)
-- feat: reduce tool entrypoints in synopsis for text editor, bash, process manager (#191)
-- feat: list moderators (#204)
-- chore: Minor changes in providers envs logic (#161)
-- chore: add `.vscode` workspace settings and suggested extensions (#200)
-- feat: license checker (#201)
-- feat: include new anthropic model in docs and recommended config (#198)
-- feat: tiny change so you know what processing is doing (#196)
-- docs: correct intellij link (#197)
-- docs: remove small duplication (#194)
-- chore: add tracing option to run and group traces under session name (#187)
-- docs: fix mkdocs, update to new references (#193)
-- feat: support optional params jsonschema conversion in exchange (#188)
-- fix: correct context loading from session new/overwrite and resume (#180)
-- feat: trying a license checker (#184)
-- docs: getting index.md in sync with readme (#183)
-- chore: Update block-open-source ref to block (#181)
-- fix: just adding stuff from developer.py to synopsis developer (#182)
-- fix: Simplifed langfuse auth check (#177)
-- test: add vision tests for google (#160)
-- fix: adding a release checker (#176)
-
-## [0.9.8] - 2024-10-20
-- fix: added specific ai-exchange version and check path is None to avoid error after starting goose (#174)
-
-## [0.9.7] - 2024-10-18
-- chore: update tiktoken to support python 3.13
-
-## [0.9.6] - 2024-10-18
-- fix: update summarizer_exchange model to use default model from input exchange (#139)
-- feat: Add synopisis approach for the core goose loop (#166)
-- feat: web browsing (#154)
-- chore: restrict python version (#162)
-- feat: Run with resume session (#153)
-- refactor: move langfuse wrapper to a module in exchange instead of a package (#138)
-- docs: add subheaders to the 'Other ways to run Goose' section (#155)
-- fix: Remove tools from exchange when summarizing files (#157)
-- chore: use primitives instead of typing imports and fixes completion … (#149)
-- chore: make vcr tests pretty-print JSON (#146)
-
-## [0.9.5] - 2024-10-15
-- chore: updates ollama default model from mistral-nemo to qwen2.5 (#150)
-- feat: add vision support for Google (#141)
-- fix: session resume with arg handled incorrectly (#145)
-- docs: add release instructions to CONTRIBUTING.md (#143)
-- docs: add link to action, IDE words (#140)
-- docs: goosehints doc fix only (#142)
-
-## [0.9.4] - 2024-10-10
-
-- revert: "feat: add local langfuse tracing option (#106)"
-- feat: add local langfuse tracing option (#106)
-- feat: add groq provider (#134)
-- feat: add a deep thinking reasoner model (o1-preview/mini) (#68)
-- fix: use concrete SessionNotifier (#135)
-- feat: add guards to session management (#101)
-- fix: Set default model configuration for the Google provider. (#131)
-- test: convert Google Gemini tests to VCR (#118)
-- chore: Add goose providers list command (#116)
-- docs: working ollama for desktop (#125)
-- docs: format and clean up warnings/errors (#120)
-- docs: update deploy workflow (#124)
-- feat: Implement a goose run command (#121)
-- feat: saved api_key to keychain for user (#104)
-- docs: add callout plugin (#119)
-- chore: add a page to docs for Goose application examples (#117)
-- fix: exit the goose and show the error message when provider environment variable is not set (#103)
-- fix: Update OpenAI pricing per https://openai.com/api/pricing/ (#110)
-- fix: update developer tool prompts to use plan task status to match allowable statuses update_plan tool call (#107)
-- fix: removed the panel in the output so that the user won't have unnecessary pane borders in the copied content (#109)
-- docs: update links to exchange to the new location (#108)
-- chore: setup workspace for exchange (#105)
-- fix: resolve uvx when using a git client or IDE (#98)
-- ci: add include-markdown for mkdocs (#100)
-- chore: fix broken badge on readme (#102)
-- feat: add global optional user goosehints file (#73)
-- docs: update docs (#99)
-
-## [0.9.3] - 2024-09-25
-
-- feat: auto save sessions before next user input (#94)
-- fix: removed the diff when default profile changes (#92)
-- feat: add shell-completions subcommand (#76)
-- chore: update readme! (#96)
-- chore: update docs again (#77)
-- fix: remove overly general match for long running commands (#87)
-- fix: default ollama to tested model (#88)
-- fix: Resize file in screen toolkit (#81)
-- fix: enhance shell() to know when it is interactive (#66)
-- docs: document how to run goose fully from source from any dir (#83)
-- feat: track cost and token usage in log file (#80)
-- chore: add link to docs in read me (#85)
-- docs: add in ollama (#82)
-- chore: add just command for releasing goose (#55)
-- feat: support markdown plans (#79)
-- feat: add version options (#74)
-- docs: fixing exchange url to public version (#67)
-- docs: Update CONTRIBUTING.md (#69)
-- chore: create mkdocs for goose (#70)
-- docs: fix broken link (#71)
-- feat: give commands the ability to execute logic (#63)
-- feat: jira toolkit (#59)
-- feat: run goose in a docker-style sandbox (#44)
-
-## [0.9.0] - 2024-09-10
-
-This also updates the minimum version of exchange to 0.9.0.
-
-- fix: goose should track files it reads and not overwrite changes (#46)
-- docs: Small dev notes for using exchange from source (#50)
-- fix: typo in exchange method rewind (#54)
-- fix: remove unsafe pop of messages (#47)
-- chore: Update LICENSE (#53)
-- chore(docs): update is_dangerous_command method description (#48)
-- refactor: improve safety rails speed and prompt (#45)
-- feat: make goosehints jinja templated (#43)
-- ci: enforce PR title follows conventional commit (#14)
-- feat: show available toolkits (#37)
-- feat: adding in ability to provide per repo hints (#32)
-- chore: apply ruff and add to CI (#40)
-- feat: added some regex based checks for dangerous commands (#38)
-- chore: Update publish github workflow to check package versions before publishing (#19)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index ff5f841dbe..0000000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,108 +0,0 @@
-# Contributing
-
-We welcome Pull Requests for general contributions. If you have a larger new feature or any questions on how to develop a fix, we recommend you open an [issue][issues] before starting.
-
-## Prerequisites
-
-Goose uses [uv][uv] for dependency management, and formats with [ruff][ruff].
-Clone goose and make sure you have installed `uv` to get started. When you use
-`uv` below in your local goose directly, it will automatically setup the virtualenv
-and install dependencies.
-
-We provide a shortcut to standard commands using [just][just] in our `justfile`.
-
-## Development
-
-Now that you have a local environment, you can make edits and run our tests!
-
-### Run Goose
-
-If you've made edits and want to try them out, use
-
-```
-uv run goose session start
-```
-
-or other `goose` commands.
-
-If you want to run your local changes but in another directory, you can use the path in
-the virtualenv created by uv:
-
-```
-alias goosedev=`uv run which goose`
-```
-
-You can then run `goosedev` from another dir and it will use your current changes.
-
-### Run Tests
-
-To run the test suite against your edges, use `pytest`:
-
-```sh
-uv run pytest tests -m "not integration"
-```
-
-or, as a shortcut,
-
-```sh
-just test
-```
-
-### Enable traces in Goose with [locally hosted Langfuse](https://langfuse.com/docs/deployment/self-host)
-> [!NOTE]
-> This integration is experimental and we don't currently have integration tests for it.
-
-Developers can use locally hosted Langfuse tracing by applying the custom `observe_wrapper` decorator defined in `packages/exchange/src/langfuse_wrapper.py` to functions for automatic integration with Langfuse.
-
-- Run `just langfuse-server` to start your local Langfuse server. It requires Docker.
-- Go to http://localhost:3000 and log in with the default email/password output by the shell script (values can also be found in the `.env.langfuse.local` file).
-- Run Goose with the --tracing flag enabled i.e., `goose session start --tracing`
-- View your traces at http://localhost:3000
-
-To extend tracing to additional functions, import `from exchange.langfuse_wrapper import observe_wrapper` and use the `observe_wrapper()` decorator on functions you wish to enable tracing for. `observe_wrapper` functions the same way as Langfuse's observe decorator.
-
-Read more about Langfuse's decorator-based tracing [here](https://langfuse.com/docs/sdk/python/decorators).
-
-## Exchange
-
-The lower level generation behind goose is powered by the [`exchange`][ai-exchange] package, also in this repo.
-
-Thanks to `uv` workspaces, any changes you make to `exchange` will be reflected in using your local goose. To run tests
-for exchange, head to `packages/exchange` and run tests just like above
-
-```sh
-uv run pytest tests -m "not integration"
-```
-
-## Evaluations
-
-Given that so much of Goose involves interactions with LLMs, our unit tests only go so far to confirming things work as intended.
-
-We're currently developing a suite of evaluations, to make it easier to make improvements to Goose more confidently.
-
-In the meantime, we typically incubate any new additions that change the behavior of the Goose through **opt-in** plugins - `Toolkit`s, `Moderator`s, and `Provider`s. We welcome contributions of plugins that add new capabilities to *goose*. We recommend sending in several examples of the new capabilities in action with your pull request.
-
-Additions to the [developer toolkit][developer] change the core performance, and so will need to be measured carefully.
-
-## Conventional Commits
-
-This project follows the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification for PR titles. Conventional Commits make it easier to understand the history of a project and facilitate automation around versioning and changelog generation.
-
-## Release
-
-In order to release a new version of goose, you need to do the following:
-1. Update CHANGELOG.md. To get the commit messages since last release, run: `just release-notes`
-2. Update version in `pyproject.toml` for `goose` and package dependencies such as `exchange`
-3. Create a PR and merge it into main branch
-4. Tag the HEAD commit in main branch. To do this, switch to main branch and run: `just tag-push`
-5. Publish a new release from the [Github Release UI](https://github.com/block/goose/releases)
-
-
-[issues]: https://github.com/block/goose/issues
-[goose-plugins]: https://github.com/block-open-source/goose-plugins
-[ai-exchange]: https://github.com/block/goose/tree/main/packages/exchange
-[developer]: https://github.com/block/goose/blob/dfecf829a83021b697bf2ecc1dbdd57d31727ddd/src/goose/toolkit/developer.py
-[uv]: https://docs.astral.sh/uv/
-[ruff]: https://docs.astral.sh/ruff/
-[just]: https://github.com/casey/just
-[adding-toolkit]: https://block.github.io/goose/configuration.html#adding-a-toolkit
diff --git a/README.md b/README.md
index 993c5c68e4..3a431f3d8a 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,13 @@ Goose is your on-machine developer agent, working for you, on your terms
+## Building
+
+```sh
+uv run download_tokenizer_files.py
+cargo build
+```
+
## Running the CLI
#### OpenAI provider (default):
diff --git a/ui/desktop/src/bin/goosed b/ui/desktop/src/bin/goosed
index 8d0139631e5f6c44a4b66beb123f333acfebcd17..5df274087ae613a56d9045987d108b7b94abd67e 100755
GIT binary patch
literal 11246424
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