Skip to content

Commit d8deac3

Browse files
Merge remote-tracking branch 'origin/main' into tyler/analyze-platform-extension-pr
* origin/main: Update CODEOWNERS for team restructuring (#7574) Add snapshot test with platform extensions (#7573) Handle Bedrock 'prompt is too long' error (#7550) feat: make pctx/Code Mode an optional dependency via 'code-mode' feature (#7567) chore(release): release version 1.26.0 (minor) (#7512) feat: allow goose askai bot to search goose codebase (#7508) Revert "Reapply "fix: prevent crashes in long-running Electron sessions"" Reapply "fix: prevent crashes in long-running Electron sessions" Revert "fix: prevent crashes in long-running Electron sessions" fix: replace unwrap() with graceful error in scheduler execute_job (#7436) fix: Dictation API error message shows incorrect limit (#7423) fix(acp): Use ACP schema types for session/list (#7409) fix(desktop): make bundle and updater asset naming configurable (#7337) fix(openai): preserve order in Responses API history (#7500) Use the correct Goose emoji 🪿 instead of Swan in README.md (#7485) fix: prevent crashes in long-running Electron sessions
2 parents 5549241 + b43302a commit d8deac3

37 files changed

Lines changed: 3320 additions & 5781 deletions

.github/CODEOWNERS

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# CODEOWNERS file for block/goose repository
22
# See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
33

4-
# Documentation owned by DevRel team
5-
/documentation/ @block/goose-devrel
4+
# Documentation owned by DevRel
5+
/documentation/ @blackgirlbytes
66

CUSTOM_DISTROS.md

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ goose's architecture is designed for extensibility. Organizations can create "re
4646
|---------------|---------------|------------|
4747
| Preconfigure a model/provider | `config.yaml`, `init-config.yaml`, environment variables | Low |
4848
| Add custom AI providers | `crates/goose/src/providers/declarative/` | Low |
49-
| Bundle custom MCP extensions | `config.yaml` extensions section, `ui/desktop/src/built-in-extensions.json` | Medium |
49+
| Bundle custom MCP extensions | `config.yaml` extensions section, `ui/desktop/src/built-in-extensions.json`, `ui/desktop/src/components/settings/extensions/bundled-extensions.json` | Medium |
5050
| Modify system prompts | `crates/goose/src/prompts/` | Low |
5151
| Customize desktop branding | `ui/desktop/` (icons, names, colors) | Medium |
5252
| Build a new UI (web, mobile) | Integrate with `goose-server` REST API | High |
@@ -191,7 +191,11 @@ async def query_data_lake(query: str) -> str:
191191
return results
192192
```
193193

194-
2. **Bundle as a built-in extension** by adding to `ui/desktop/src/built-in-extensions.json`:
194+
2. **Bundle as a built-in extension** by adding to either:
195+
- `ui/desktop/src/built-in-extensions.json` (core built-ins surfaced in extension UI)
196+
- `ui/desktop/src/components/settings/extensions/bundled-extensions.json` (bundled extension catalog in Settings)
197+
198+
Example:
195199

196200
```json
197201
{
@@ -268,6 +272,26 @@ You are an AI assistant called [YourName], created by [YourCompany].
268272
- Component text and labels
269273
- Feature visibility
270274

275+
5. **Align packaging and updater names** when rebranding:
276+
- Update static branding metadata in `ui/desktop/package.json` (`productName`, description) and Linux desktop templates (`ui/desktop/forge.deb.desktop`, `ui/desktop/forge.rpm.desktop`)
277+
278+
- Set build/release environment variables consistently:
279+
- `GITHUB_OWNER` and `GITHUB_REPO` for publisher + updater repository lookup
280+
- `GOOSE_BUNDLE_NAME` for bundle/debug scripts and updater asset naming (defaults to `Goose`)
281+
282+
Example:
283+
284+
```bash
285+
export GITHUB_OWNER="your-org"
286+
export GITHUB_REPO="your-goose-fork"
287+
export GOOSE_BUNDLE_NAME="InsightStream-goose"
288+
```
289+
290+
6. **Use this branding consistency checklist** before release:
291+
- Application metadata (`forge.config.ts`, `package.json`, `index.html`) uses your distro name
292+
- Release artifact names and updater lookup names are consistent
293+
- Desktop launchers (Linux `.desktop` templates) point to the same executable name produced by packaging
294+
271295
### Technical Details
272296

273297
- Electron config: `ui/desktop/forge.config.ts`

Cargo.lock

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ resolver = "2"
44

55
[workspace.package]
66
edition = "2021"
7-
version = "1.25.0"
7+
version = "1.26.0"
88
authors = ["Block <ai-oss-tools@block.xyz>"]
99
license = "Apache-2.0"
1010
repository = "https://github.com/block/goose"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Designed for maximum flexibility, goose works with any LLM and supports multi-mo
3535
- [Diagnostics & Reporting](https://block.github.io/goose/docs/troubleshooting/diagnostics-and-reporting)
3636
- [Known Issues](https://block.github.io/goose/docs/troubleshooting/known-issues)
3737

38-
# a little goose humor 🦢
38+
# a little goose humor 🪿
3939

4040
> Why did the developer choose goose as their AI agent?
4141
>

crates/goose-acp/Cargo.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,19 @@ path = "src/bin/server.rs"
1515
name = "generate-acp-schema"
1616
path = "src/bin/generate_acp_schema.rs"
1717

18+
[features]
19+
default = ["code-mode"]
20+
code-mode = ["goose/code-mode"]
21+
1822
[lints]
1923
workspace = true
2024

2125
[dependencies]
22-
goose = { path = "../goose" }
26+
goose = { path = "../goose", default-features = false }
2327
goose-mcp = { path = "../goose-mcp" }
2428
rmcp = { workspace = true }
2529
sacp = "10.1.0"
26-
agent-client-protocol-schema = { version = "0.10", features = ["unstable_session_model"] }
30+
agent-client-protocol-schema = { version = "0.10", features = ["unstable_session_model", "unstable_session_list"] }
2731
anyhow = { workspace = true }
2832
tokio = { workspace = true }
2933
tokio-util = { workspace = true, features = ["compat", "rt"] }

crates/goose-acp/src/custom_requests.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,6 @@ pub struct GetSessionResponse {
8282
pub session: serde_json::Value,
8383
}
8484

85-
/// List all sessions.
86-
#[derive(Debug, Serialize, JsonSchema)]
87-
pub struct ListSessionsResponse {
88-
pub sessions: Vec<serde_json::Value>,
89-
}
90-
9185
/// Delete a session.
9286
#[derive(Debug, Deserialize, JsonSchema)]
9387
pub struct DeleteSessionRequest {

crates/goose-acp/src/server.rs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ use sacp::schema::{
2424
AgentCapabilities, AuthMethod, AuthenticateRequest, AuthenticateResponse, BlobResourceContents,
2525
CancelNotification, Content, ContentBlock, ContentChunk, EmbeddedResource,
2626
EmbeddedResourceResource, ImageContent, InitializeRequest, InitializeResponse,
27-
LoadSessionRequest, LoadSessionResponse, McpCapabilities, McpServer, ModelId, ModelInfo,
28-
NewSessionRequest, NewSessionResponse, PermissionOption, PermissionOptionKind,
29-
PromptCapabilities, PromptRequest, PromptResponse, RequestPermissionOutcome,
30-
RequestPermissionRequest, ResourceLink, SessionId, SessionModelState, SessionNotification,
27+
ListSessionsResponse, LoadSessionRequest, LoadSessionResponse, McpCapabilities, McpServer,
28+
ModelId, ModelInfo, NewSessionRequest, NewSessionResponse, PermissionOption,
29+
PermissionOptionKind, PromptCapabilities, PromptRequest, PromptResponse,
30+
RequestPermissionOutcome, RequestPermissionRequest, ResourceLink, SessionCapabilities,
31+
SessionId, SessionInfo, SessionListCapabilities, SessionModelState, SessionNotification,
3132
SessionUpdate, SetSessionModelRequest, SetSessionModelResponse, StopReason, TextContent,
3233
TextResourceContents, ToolCall, ToolCallContent, ToolCallId, ToolCallLocation, ToolCallStatus,
3334
ToolCallUpdate, ToolCallUpdateFields, ToolKind,
@@ -664,6 +665,7 @@ impl GooseAcpAgent {
664665

665666
let capabilities = AgentCapabilities::new()
666667
.load_session(true)
668+
.session_capabilities(SessionCapabilities::new().list(SessionListCapabilities::new()))
667669
.prompt_capabilities(
668670
PromptCapabilities::new()
669671
.image(true)
@@ -1097,14 +1099,15 @@ impl GooseAcpAgent {
10971099
.list_sessions()
10981100
.await
10991101
.map_err(|e| sacp::Error::internal_error().data(e.to_string()))?;
1100-
let sessions_json = sessions
1102+
let session_infos: Vec<SessionInfo> = sessions
11011103
.into_iter()
1102-
.map(|s| serde_json::to_value(&s))
1103-
.collect::<Result<Vec<_>, _>>()
1104-
.map_err(|e| sacp::Error::internal_error().data(e.to_string()))?;
1105-
Ok(ListSessionsResponse {
1106-
sessions: sessions_json,
1107-
})
1104+
.map(|s| {
1105+
SessionInfo::new(SessionId::new(s.id), s.working_dir)
1106+
.title(s.name)
1107+
.updated_at(s.updated_at.to_rfc3339())
1108+
})
1109+
.collect();
1110+
Ok(ListSessionsResponse::new(session_infos))
11081111
}
11091112

11101113
#[custom_method("session/get")]
@@ -1286,6 +1289,14 @@ impl JrMessageHandler for GooseAcpHandler {
12861289
request_cx.respond(json)?;
12871290
Ok(())
12881291
}
1292+
MessageCx::Request(req, request_cx) if req.method == "session/list" => {
1293+
let resp = agent.on_list_sessions().await?;
1294+
let json = serde_json::to_value(resp).map_err(|e| {
1295+
sacp::Error::internal_error().data(e.to_string())
1296+
})?;
1297+
request_cx.respond(json)?;
1298+
Ok(())
1299+
}
12891300
MessageCx::Request(req, request_cx) if req.method.starts_with('_') => {
12901301
match agent.handle_custom_request(&req.method, req.params).await {
12911302
Ok(json) => request_cx.respond(json)?,

crates/goose-cli/Cargo.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ path = "src/bin/generate_manpages.rs"
2020

2121
[dependencies]
2222
clap_mangen = "0.2.31"
23-
goose = { path = "../goose" }
24-
goose-acp = { path = "../goose-acp" }
23+
goose = { path = "../goose", default-features = false }
24+
goose-acp = { path = "../goose-acp", default-features = false }
2525
goose-mcp = { path = "../goose-mcp" }
2626
rmcp = { workspace = true }
2727
clap = { workspace = true }
@@ -70,6 +70,8 @@ comfy-table = "7.2.2"
7070
winapi = { version = "0.3", features = ["wincred"] }
7171

7272
[features]
73+
default = ["code-mode"]
74+
code-mode = ["goose/code-mode", "goose-acp/code-mode"]
7375
# disables the update command
7476
disable-update = []
7577

crates/goose-server/Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ description.workspace = true
1111
workspace = true
1212

1313
[features]
14-
default = []
14+
default = ["code-mode"]
15+
code-mode = ["goose/code-mode"]
1516
cuda = ["goose/cuda"]
1617

1718
[dependencies]
18-
goose = { path = "../goose" }
19+
goose = { path = "../goose", default-features = false }
1920
goose-mcp = { path = "../goose-mcp" }
2021
rmcp = { workspace = true }
2122
axum = { workspace = true, features = ["ws", "macros"] }

0 commit comments

Comments
 (0)