Node: Add post user prompt hook#1774
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This comment has been minimized.
This comment has been minimized.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Cross-SDK Consistency Review 🔍This PR adds the SDKs that already have
Suggested additions per SDK (to match the Node.js contract):
Rough equivalents for each SDKPython ( class PostUserPromptSubmittedHookInput(TypedDict):
sessionId: str
timestamp: datetime
workingDirectory: str
prompt: str
transformedPrompt: str
class PostUserPromptSubmittedHookOutput(TypedDict, total=False):
modifiedTransformedPrompt: str
suppressOutput: bool
PostUserPromptSubmittedHandler = Callable[
[PostUserPromptSubmittedHookInput, dict[str, str]],
PostUserPromptSubmittedHookOutput | None | Awaitable[...],
]Wire into the hook dispatch map at Go ( type PostUserPromptSubmittedHookInput struct {
SessionID string `json:"sessionId"`
Timestamp time.Time `json:"-"`
WorkingDirectory string `json:"cwd"`
Prompt string `json:"prompt"`
TransformedPrompt string `json:"transformedPrompt"`
}
type PostUserPromptSubmittedHookOutput struct {
ModifiedTransformedPrompt string `json:"modifiedTransformedPrompt,omitempty"`
SuppressOutput bool `json:"suppressOutput,omitempty"`
}
type PostUserPromptSubmittedHandler func(
input PostUserPromptSubmittedHookInput,
invocation HookInvocation,
) (*PostUserPromptSubmittedHookOutput, error)Add .NET ( public sealed class PostUserPromptSubmittedHookInput
{
[JsonPropertyName("sessionId")] public string SessionId { get; set; } = string.Empty;
[JsonPropertyName("timestamp")] public long Timestamp { get; set; }
[JsonPropertyName("cwd")] public string WorkingDirectory { get; set; } = string.Empty;
[JsonPropertyName("prompt")] public string Prompt { get; set; } = string.Empty;
[JsonPropertyName("transformedPrompt")] public string TransformedPrompt { get; set; } = string.Empty;
}
public sealed class PostUserPromptSubmittedHookOutput
{
[JsonPropertyName("modifiedTransformedPrompt")] public string? ModifiedTransformedPrompt { get; set; }
[JsonPropertyName("suppressOutput")] public bool? SuppressOutput { get; set; }
}Add Java ( `@JsonIgnoreProperties`(ignoreUnknown = true)
public record PostUserPromptSubmittedHookInput(
`@JsonProperty`("sessionId") String sessionId,
`@JsonProperty`("timestamp") long timestamp,
`@JsonProperty`("cwd") String cwd,
`@JsonProperty`("prompt") String prompt,
`@JsonProperty`("transformedPrompt") String transformedPrompt) {}
public record PostUserPromptSubmittedHookOutput(
`@JsonProperty`("modifiedTransformedPrompt") String modifiedTransformedPrompt,
`@JsonProperty`("suppressOutput") Boolean suppressOutput) {}Add Rust ( pub struct PostUserPromptSubmittedInput {
pub session_id: String,
pub timestamp: i64,
#[serde(rename = "cwd")]
pub working_directory: PathBuf,
pub prompt: String,
pub transformed_prompt: String,
}
pub struct PostUserPromptSubmittedOutput {
#[serde(skip_serializing_if = "Option::is_none")]
pub modified_transformed_prompt: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub suppress_output: Option<bool>,
}Add a This is a suggestion for follow-up work rather than a blocker for this PR. The Node.js implementation establishes the contract cleanly; the other SDKs can follow the same pattern.
|
Summary