Skip to content

Commit bb7048e

Browse files
committed
Merge branch 'main' into micn/release-doc-tweak
* main: increase worker threads for ci (#6614) docs: todo tutorial update (#6613) Added goose doc map md file for goose agent to find relevant doc easily. (#6598) add back goose branding to home (#6617) fix: actually set the working dir for extensions from session (#6612) Multi chat (#6428) Lifei/fixed accumulated token count (#6587) Dont show MCP UI/Apps until tool is approved (#6492) docs: max tokens config (#6596) User configurable templates (#6420) docs: http proxy environment variables (#6594) feat: exclude subagent tool from code_execution filtering (#6531) Fix path for global agent skills (#6591) recipes: add mcp server (#6552) feat(gcp-vertex): add model list with org policy filtering (#6393) chore: encourage extension searching (#6582) blog: mobile apps consolidation and roadmap (#6580) chore: remove unused dependencies in cargo.toml (#6561) resolved all the extensions to load in cli (#6464)
2 parents 5039748 + f3bae7e commit bb7048e

102 files changed

Lines changed: 4291 additions & 1752 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/deploy-docs-and-extensions.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,13 @@ jobs:
4646
INKEEP_ORG_ID: ${{ secrets.INKEEP_ORG_ID }}
4747
run: |
4848
npm install
49+
npm test
4950
npm run build
5051
52+
- name: Verify docs map was generated
53+
working-directory: ./documentation
54+
run: ./scripts/verify-build.sh
55+
5156
- name: Checkout gh-pages branch
5257
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
5358
continue-on-error: true # Branch may not exist on first deploy or in forks

Cargo.lock

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

crates/goose-acp/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ workspace = true
1212

1313
[dependencies]
1414
goose = { path = "../goose" }
15-
goose-mcp = { path = "../goose-mcp" }
1615
rmcp = { workspace = true }
1716
sacp = "10.1.0"
1817
anyhow = { workspace = true }

crates/goose-acp/tests/server_test.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use test_case::test_case;
2222
use tokio_util::compat::{TokioAsyncReadCompatExt, TokioAsyncWriteCompatExt};
2323
use wiremock::MockServer;
2424

25-
#[tokio::test]
25+
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
2626
async fn test_acp_basic_completion() {
2727
let temp_dir = tempfile::tempdir().unwrap();
2828
let prompt = "what is 1+1";
@@ -62,7 +62,7 @@ async fn test_acp_basic_completion() {
6262
.await;
6363
}
6464

65-
#[tokio::test]
65+
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
6666
async fn test_acp_with_mcp_http_server() {
6767
let temp_dir = tempfile::tempdir().unwrap();
6868
let prompt = "Use the get_code tool and output only its result.";
@@ -344,7 +344,7 @@ async fn run_acp_session<F, Fut>(
344344
#[test_case(Some(PermissionOptionKind::RejectAlways), ToolCallStatus::Failed, "user:\n always_allow: []\n ask_before: []\n never_allow:\n - lookup__get_code\n"; "reject_always")]
345345
#[test_case(Some(PermissionOptionKind::RejectOnce), ToolCallStatus::Failed, ""; "reject_once")]
346346
#[test_case(None, ToolCallStatus::Failed, ""; "cancelled")]
347-
#[tokio::test]
347+
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
348348
async fn test_permission_persistence(
349349
kind: Option<PermissionOptionKind>,
350350
expected_status: ToolCallStatus,

crates/goose-cli/src/cli.rs

Lines changed: 11 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use anyhow::Result;
22
use clap::{Args, CommandFactory, Parser, Subcommand};
33
use clap_complete::{generate, Shell as ClapShell};
4-
use goose::config::{Config, ExtensionConfig};
4+
use goose::config::Config;
55
use goose::posthog::get_telemetry_choice;
6+
use goose::recipe::Recipe;
67
use goose_mcp::mcp_server_runner::{serve, McpCommand};
78
use goose_mcp::{
89
AutoVisualiserRouter, ComputerControllerServer, DeveloperServer, MemoryServer, TutorialServer,
@@ -25,7 +26,7 @@ use crate::commands::schedule::{
2526
use crate::commands::session::{handle_session_list, handle_session_remove};
2627
use crate::recipes::extract_from_cli::extract_recipe_info_from_cli;
2728
use crate::recipes::recipe::{explain_recipe, render_recipe_as_yaml};
28-
use crate::session::{build_session, SessionBuilderConfig, SessionSettings};
29+
use crate::session::{build_session, SessionBuilderConfig};
2930
use goose::session::session_manager::SessionType;
3031
use goose::session::SessionManager;
3132
use goose_bench::bench_config::BenchRunConfig;
@@ -941,18 +942,9 @@ enum CliProviderVariant {
941942
#[derive(Debug)]
942943
pub struct InputConfig {
943944
pub contents: Option<String>,
944-
pub extensions_override: Option<Vec<ExtensionConfig>>,
945945
pub additional_system_prompt: Option<String>,
946946
}
947947

948-
#[derive(Debug)]
949-
pub struct RecipeInfo {
950-
pub session_settings: Option<SessionSettings>,
951-
pub sub_recipes: Option<Vec<goose::recipe::SubRecipe>>,
952-
pub final_output_response: Option<goose::recipe::Response>,
953-
pub retry_config: Option<goose::agents::types::RetryConfig>,
954-
}
955-
956948
fn get_command_name(command: &Option<Command>) -> &'static str {
957949
match command {
958950
Some(Command::Configure {}) => "configure",
@@ -1093,9 +1085,8 @@ async fn handle_interactive_session(
10931085
extensions: extension_opts.extensions,
10941086
streamable_http_extensions: extension_opts.streamable_http_extensions,
10951087
builtins: extension_opts.builtins,
1096-
extensions_override: None,
1088+
recipe: None,
10971089
additional_system_prompt: None,
1098-
settings: None,
10991090
provider: None,
11001091
model: None,
11011092
debug: session_opts.debug,
@@ -1104,9 +1095,6 @@ async fn handle_interactive_session(
11041095
scheduled_job_id: None,
11051096
interactive: true,
11061097
quiet: false,
1107-
sub_recipes: None,
1108-
final_output_response: None,
1109-
retry_config: None,
11101098
output_format: "text".to_string(),
11111099
})
11121100
.await;
@@ -1163,7 +1151,7 @@ async fn log_session_completion(
11631151
fn parse_run_input(
11641152
input_opts: &InputOptions,
11651153
quiet: bool,
1166-
) -> Result<Option<(InputConfig, Option<RecipeInfo>)>> {
1154+
) -> Result<Option<(InputConfig, Option<Recipe>)>> {
11671155
match (
11681156
&input_opts.instructions,
11691157
&input_opts.input_text,
@@ -1177,7 +1165,6 @@ fn parse_run_input(
11771165
Ok(Some((
11781166
InputConfig {
11791167
contents: Some(contents),
1180-
extensions_override: None,
11811168
additional_system_prompt: input_opts.system.clone(),
11821169
},
11831170
None,
@@ -1194,7 +1181,6 @@ fn parse_run_input(
11941181
Ok(Some((
11951182
InputConfig {
11961183
contents: Some(contents),
1197-
extensions_override: None,
11981184
additional_system_prompt: None,
11991185
},
12001186
None,
@@ -1203,7 +1189,6 @@ fn parse_run_input(
12031189
(_, Some(text), _) => Ok(Some((
12041190
InputConfig {
12051191
contents: Some(text.clone()),
1206-
extensions_override: None,
12071192
additional_system_prompt: input_opts.system.clone(),
12081193
},
12091194
None,
@@ -1247,13 +1232,13 @@ fn parse_run_input(
12471232
"Recipe execution started"
12481233
);
12491234

1250-
let (input_config, recipe_info) = extract_recipe_info_from_cli(
1235+
let (input_config, recipe) = extract_recipe_info_from_cli(
12511236
recipe_name.clone(),
12521237
input_opts.params.clone(),
12531238
input_opts.additional_sub_recipes.clone(),
12541239
quiet,
12551240
)?;
1256-
Ok(Some((input_config, Some(recipe_info))))
1241+
Ok(Some((input_config, Some(recipe))))
12571242
}
12581243
(None, None, None) => {
12591244
eprintln!("Error: Must provide either --instructions (-i), --text (-t), or --recipe. Use -i - for stdin.");
@@ -1277,7 +1262,7 @@ async fn handle_run_command(
12771262

12781263
let parsed = parse_run_input(&input_opts, output_opts.quiet)?;
12791264

1280-
let Some((input_config, recipe_info)) = parsed else {
1265+
let Some((input_config, recipe)) = parsed else {
12811266
return Ok(());
12821267
};
12831268

@@ -1302,11 +1287,8 @@ async fn handle_run_command(
13021287
extensions: extension_opts.extensions,
13031288
streamable_http_extensions: extension_opts.streamable_http_extensions,
13041289
builtins: extension_opts.builtins,
1305-
extensions_override: input_config.extensions_override,
1290+
recipe: recipe.clone(),
13061291
additional_system_prompt: input_config.additional_system_prompt,
1307-
settings: recipe_info
1308-
.as_ref()
1309-
.and_then(|r| r.session_settings.clone()),
13101292
provider: model_opts.provider,
13111293
model: model_opts.model,
13121294
debug: session_opts.debug,
@@ -1315,11 +1297,6 @@ async fn handle_run_command(
13151297
scheduled_job_id: run_behavior.scheduled_job_id,
13161298
interactive: run_behavior.interactive,
13171299
quiet: output_opts.quiet,
1318-
sub_recipes: recipe_info.as_ref().and_then(|r| r.sub_recipes.clone()),
1319-
final_output_response: recipe_info
1320-
.as_ref()
1321-
.and_then(|r| r.final_output_response.clone()),
1322-
retry_config: recipe_info.as_ref().and_then(|r| r.retry_config.clone()),
13231300
output_format: output_opts.output_format,
13241301
})
13251302
.await;
@@ -1328,11 +1305,7 @@ async fn handle_run_command(
13281305
session.interactive(input_config.contents).await
13291306
} else if let Some(contents) = input_config.contents {
13301307
let session_start = std::time::Instant::now();
1331-
let session_type = if recipe_info.is_some() {
1332-
"recipe"
1333-
} else {
1334-
"run"
1335-
};
1308+
let session_type = if recipe.is_some() { "recipe" } else { "run" };
13361309

13371310
tracing::info!(
13381311
counter.goose.session_starts = 1,
@@ -1438,9 +1411,8 @@ async fn handle_default_session() -> Result<()> {
14381411
extensions: Vec::new(),
14391412
streamable_http_extensions: Vec::new(),
14401413
builtins: Vec::new(),
1441-
extensions_override: None,
1414+
recipe: None,
14421415
additional_system_prompt: None,
1443-
settings: None::<SessionSettings>,
14441416
provider: None,
14451417
model: None,
14461418
debug: false,
@@ -1449,9 +1421,6 @@ async fn handle_default_session() -> Result<()> {
14491421
scheduled_job_id: None,
14501422
interactive: true,
14511423
quiet: false,
1452-
sub_recipes: None,
1453-
final_output_response: None,
1454-
retry_config: None,
14551424
output_format: "text".to_string(),
14561425
})
14571426
.await;

crates/goose-cli/src/commands/bench.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,8 @@ pub async fn agent_generator(
4141
extensions: requirements.external,
4242
streamable_http_extensions: requirements.streamable_http,
4343
builtins: requirements.builtin,
44-
extensions_override: None,
44+
recipe: None,
4545
additional_system_prompt: None,
46-
settings: None,
4746
provider: None,
4847
model: None,
4948
debug: false,
@@ -52,9 +51,6 @@ pub async fn agent_generator(
5251
scheduled_job_id: None,
5352
max_turns: None,
5453
quiet: false,
55-
sub_recipes: None,
56-
final_output_response: None,
57-
retry_config: None,
5854
output_format: "text".to_string(),
5955
})
6056
.await;

0 commit comments

Comments
 (0)