Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ resolver = "2"

[workspace.package]
edition = "2021"
version = "1.16.0"
version = "1.17.0"
authors = ["Block <[email protected]>"]
license = "Apache-2.0"
repository = "https://github.com/block/goose"
Expand Down
2 changes: 2 additions & 0 deletions crates/goose-server/src/openapi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,7 @@ derive_utoipa!(Icon as IconSchema);
super::routes::tunnel::start_tunnel,
super::routes::tunnel::stop_tunnel,
super::routes::tunnel::get_tunnel_status,
super::routes::telemetry::send_telemetry_event,
),
components(schemas(
super::routes::config_management::UpsertConfigQuery,
Expand Down Expand Up @@ -529,6 +530,7 @@ derive_utoipa!(Icon as IconSchema);
super::routes::setup::SetupResponse,
super::tunnel::TunnelInfo,
super::tunnel::TunnelState,
super::routes::telemetry::TelemetryEventRequest,
))
)]
pub struct ApiDoc;
Expand Down
2 changes: 2 additions & 0 deletions crates/goose-server/src/routes/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ pub mod schedule;
pub mod session;
pub mod setup;
pub mod status;
pub mod telemetry;
pub mod tunnel;
pub mod utils;

Expand All @@ -31,6 +32,7 @@ pub fn configure(state: Arc<crate::state::AppState>, secret_key: String) -> Rout
.merge(session::routes(state.clone()))
.merge(schedule::routes(state.clone()))
.merge(setup::routes(state.clone()))
.merge(telemetry::routes(state.clone()))
.merge(tunnel::routes(state.clone()))
.merge(mcp_ui_proxy::routes(secret_key))
}
45 changes: 45 additions & 0 deletions crates/goose-server/src/routes/telemetry.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
use axum::{extract::State, http::StatusCode, routing::post, Json, Router};
use goose::posthog::emit_event;
use serde::Deserialize;
use std::collections::HashMap;
use std::sync::Arc;
use utoipa::ToSchema;

use crate::state::AppState;

#[derive(Debug, Deserialize, ToSchema)]
pub struct TelemetryEventRequest {
pub event_name: String,
#[serde(default)]
pub properties: HashMap<String, serde_json::Value>,
}

#[utoipa::path(
post,
path = "/telemetry/event",
request_body = TelemetryEventRequest,
responses(
(status = 202, description = "Event accepted for processing")
)
)]
async fn send_telemetry_event(
State(_state): State<Arc<AppState>>,
Json(request): Json<TelemetryEventRequest>,
) -> StatusCode {
let event_name = request.event_name;
let properties = request.properties;

tokio::spawn(async move {
if let Err(e) = emit_event(&event_name, properties).await {
tracing::debug!("Failed to send telemetry event: {}", e);
}
});

StatusCode::ACCEPTED
}

pub fn routes(state: Arc<AppState>) -> Router {
Router::new()
.route("/telemetry/event", post(send_telemetry_event))
.with_state(state)
}
20 changes: 19 additions & 1 deletion crates/goose/src/agents/agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -772,7 +772,25 @@ impl Agent {

let slash_command_recipe = if message_text.trim().starts_with('/') {
let command = message_text.split_whitespace().next();
command.and_then(crate::slash_commands::resolve_slash_command)

// Check if it's a builtin command first
let is_builtin = command
.map(|cmd| MANUAL_COMPACT_TRIGGERS.contains(&cmd))
.unwrap_or(false);

if is_builtin {
None
} else {
// Try to resolve as recipe command
let recipe = command.and_then(crate::slash_commands::resolve_slash_command);

// Track non-builtin slash command usage (don't track command name for privacy)
if recipe.is_some() {
crate::posthog::emit_custom_slash_command_used();
}

recipe
}
} else {
None
};
Expand Down
2 changes: 1 addition & 1 deletion crates/goose/src/config/extensions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ fn get_extensions_map() -> IndexMap<String, ExtensionEntry> {
bundled: Some(true),
available_tools: Vec::new(),
},
enabled: true,
enabled: def.default_enabled,
},
);
}
Expand Down
Loading
Loading