Skip to content
Merged
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
64 changes: 64 additions & 0 deletions crates/goose-sdk-types/src/custom_requests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,70 @@ pub struct DiagnosticsGetResponse {
pub report: serde_json::Value,
}

/// Information about a prompt template, including its default content and customization status.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct PromptTemplateEntry {
pub name: String,
pub description: String,
pub default_content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_content: Option<String>,
pub is_customized: bool,
}

/// List all available Goose prompt templates.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(method = "_goose/unstable/config/prompts/list", response = ListPromptsResponse)]
#[serde(rename_all = "camelCase")]
pub struct ListPromptsRequest {}

#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)]
#[serde(rename_all = "camelCase")]
pub struct ListPromptsResponse {
pub prompts: Vec<PromptTemplateEntry>,
}

/// Read a Goose prompt template.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(method = "_goose/unstable/config/prompts/get", response = GetPromptResponse)]
#[serde(rename_all = "camelCase")]
pub struct GetPromptRequest {
pub name: String,
}

#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)]
#[serde(rename_all = "camelCase")]
pub struct GetPromptResponse {
pub name: String,
pub content: String,
pub default_content: String,
pub is_customized: bool,
}

/// Save a custom Goose prompt template.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(method = "_goose/unstable/config/prompts/save", response = PromptOperationResponse)]
#[serde(rename_all = "camelCase")]
pub struct SavePromptRequest {
pub name: String,
pub content: String,
}

/// Reset a Goose prompt template to its default content.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(method = "_goose/unstable/config/prompts/reset", response = PromptOperationResponse)]
#[serde(rename_all = "camelCase")]
pub struct ResetPromptRequest {
pub name: String,
}

#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)]
#[serde(rename_all = "camelCase")]
pub struct PromptOperationResponse {
pub message: String,
}

/// Delete a session.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(method = "session/delete", response = EmptyResponse)]
Expand Down
20 changes: 20 additions & 0 deletions crates/goose/acp-meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,26 @@
"requestType": "DiagnosticsGetRequest_unstable",
"responseType": "DiagnosticsGetResponse_unstable"
},
{
"method": "_goose/unstable/config/prompts/list",
"requestType": "ListPromptsRequest_unstable",
"responseType": "ListPromptsResponse_unstable"
},
{
"method": "_goose/unstable/config/prompts/get",
"requestType": "GetPromptRequest_unstable",
"responseType": "GetPromptResponse_unstable"
},
{
"method": "_goose/unstable/config/prompts/save",
"requestType": "SavePromptRequest_unstable",
"responseType": "PromptOperationResponse_unstable"
},
{
"method": "_goose/unstable/config/prompts/reset",
"requestType": "ResetPromptRequest_unstable",
"responseType": "PromptOperationResponse_unstable"
},
{
"method": "session/delete",
"requestType": "DeleteSessionRequest",
Expand Down
195 changes: 195 additions & 0 deletions crates/goose/acp-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -1180,6 +1180,141 @@
"x-side": "agent",
"x-method": "_goose/unstable/diagnostics/get"
},
"ListPromptsRequest_unstable": {
"type": "object",
"description": "List all available Goose prompt templates.",
"x-side": "agent",
"x-method": "_goose/unstable/config/prompts/list"
},
"ListPromptsResponse_unstable": {
"type": "object",
"properties": {
"prompts": {
"type": "array",
"items": {
"$ref": "#/$defs/PromptTemplateEntry"
}
}
},
"required": [
"prompts"
],
"x-side": "agent",
"x-method": "_goose/unstable/config/prompts/list"
},
"PromptTemplateEntry": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"defaultContent": {
"type": "string"
},
"userContent": {
"type": [
"string",
"null"
]
},
"isCustomized": {
"type": "boolean"
}
},
"required": [
"name",
"description",
"defaultContent",
"isCustomized"
],
"description": "Information about a prompt template, including its default content and customization status."
},
"GetPromptRequest_unstable": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"description": "Read a Goose prompt template.",
"x-side": "agent",
"x-method": "_goose/unstable/config/prompts/get"
},
"GetPromptResponse_unstable": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"content": {
"type": "string"
},
"defaultContent": {
"type": "string"
},
"isCustomized": {
"type": "boolean"
}
},
"required": [
"name",
"content",
"defaultContent",
"isCustomized"
],
"x-side": "agent",
"x-method": "_goose/unstable/config/prompts/get"
},
"SavePromptRequest_unstable": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"content": {
"type": "string"
}
},
"required": [
"name",
"content"
],
"description": "Save a custom Goose prompt template.",
"x-side": "agent",
"x-method": "_goose/unstable/config/prompts/save"
},
"PromptOperationResponse_unstable": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
],
"x-side": "agent"
},
"ResetPromptRequest_unstable": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
],
"description": "Reset a Goose prompt template to its default content.",
"x-side": "agent",
"x-method": "_goose/unstable/config/prompts/reset"
},
"DeleteSessionRequest": {
"type": "object",
"properties": {
Expand Down Expand Up @@ -5406,6 +5541,42 @@
"description": "Params for _goose/unstable/diagnostics/get",
"title": "DiagnosticsGetRequest_unstable"
},
{
"allOf": [
{
"$ref": "#/$defs/ListPromptsRequest_unstable"
}
],
"description": "Params for _goose/unstable/config/prompts/list",
"title": "ListPromptsRequest_unstable"
},
{
"allOf": [
{
"$ref": "#/$defs/GetPromptRequest_unstable"
}
],
"description": "Params for _goose/unstable/config/prompts/get",
"title": "GetPromptRequest_unstable"
},
{
"allOf": [
{
"$ref": "#/$defs/SavePromptRequest_unstable"
}
],
"description": "Params for _goose/unstable/config/prompts/save",
"title": "SavePromptRequest_unstable"
},
{
"allOf": [
{
"$ref": "#/$defs/ResetPromptRequest_unstable"
}
],
"description": "Params for _goose/unstable/config/prompts/reset",
"title": "ResetPromptRequest_unstable"
},
{
"allOf": [
{
Expand Down Expand Up @@ -6200,6 +6371,30 @@
],
"title": "DiagnosticsGetResponse_unstable"
},
{
"allOf": [
{
"$ref": "#/$defs/ListPromptsResponse_unstable"
}
],
"title": "ListPromptsResponse_unstable"
},
{
"allOf": [
{
"$ref": "#/$defs/GetPromptResponse_unstable"
}
],
"title": "GetPromptResponse_unstable"
},
{
"allOf": [
{
"$ref": "#/$defs/PromptOperationResponse_unstable"
}
],
"title": "PromptOperationResponse_unstable"
},
{
"allOf": [
{
Expand Down
1 change: 1 addition & 0 deletions crates/goose/src/acp/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ mod load_session;
mod manage_sessions;
mod new_session;
mod onboarding;
mod prompts;
mod providers;
mod recipe;
mod resources;
Expand Down
32 changes: 32 additions & 0 deletions crates/goose/src/acp/server/custom_dispatch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,38 @@ impl GooseAcpAgent {
self.on_get_diagnostics(req).await
}

#[custom_method(ListPromptsRequest)]
async fn dispatch_list_prompts(
&self,
req: ListPromptsRequest,
) -> Result<ListPromptsResponse, agent_client_protocol::Error> {
self.on_list_prompts(req).await
}

#[custom_method(GetPromptRequest)]
async fn dispatch_get_prompt(
&self,
req: GetPromptRequest,
) -> Result<GetPromptResponse, agent_client_protocol::Error> {
self.on_get_prompt(req).await
}

#[custom_method(SavePromptRequest)]
async fn dispatch_save_prompt(
&self,
req: SavePromptRequest,
) -> Result<PromptOperationResponse, agent_client_protocol::Error> {
self.on_save_prompt(req).await
}

#[custom_method(ResetPromptRequest)]
async fn dispatch_reset_prompt(
&self,
req: ResetPromptRequest,
) -> Result<PromptOperationResponse, agent_client_protocol::Error> {
self.on_reset_prompt(req).await
}

#[custom_method(DeleteSessionRequest)]
async fn dispatch_delete_session(
&self,
Expand Down
Loading
Loading