1
This commit is contained in:
@@ -508,6 +508,35 @@ pub struct CustomWorldAgentMessageSubmitInput {
|
||||
pub submitted_at_micros: i64,
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct CustomWorldAgentMessageFinalizeInput {
|
||||
pub session_id: String,
|
||||
pub owner_user_id: String,
|
||||
pub operation_id: String,
|
||||
pub assistant_message_id: String,
|
||||
pub assistant_reply_text: String,
|
||||
pub phase_label: String,
|
||||
pub phase_detail: String,
|
||||
pub operation_status: RpgAgentOperationStatus,
|
||||
pub operation_progress: u32,
|
||||
pub stage: RpgAgentStage,
|
||||
pub progress_percent: u32,
|
||||
pub focus_card_id: Option<String>,
|
||||
pub anchor_content_json: String,
|
||||
pub creator_intent_json: Option<String>,
|
||||
pub creator_intent_readiness_json: String,
|
||||
pub anchor_pack_json: Option<String>,
|
||||
pub draft_profile_json: Option<String>,
|
||||
pub pending_clarifications_json: String,
|
||||
pub suggested_actions_json: String,
|
||||
pub recommended_replies_json: String,
|
||||
pub quality_findings_json: String,
|
||||
pub asset_coverage_json: String,
|
||||
pub error_message: Option<String>,
|
||||
pub updated_at_micros: i64,
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct CustomWorldAgentOperationGetInput {
|
||||
@@ -1070,6 +1099,47 @@ pub fn validate_custom_world_agent_message_submit_input(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn validate_custom_world_agent_message_finalize_input(
|
||||
input: &CustomWorldAgentMessageFinalizeInput,
|
||||
) -> Result<(), CustomWorldFieldError> {
|
||||
if input.owner_user_id.trim().is_empty() {
|
||||
return Err(CustomWorldFieldError::MissingOwnerUserId);
|
||||
}
|
||||
|
||||
validate_custom_world_agent_message_fields(
|
||||
&input.assistant_message_id,
|
||||
&input.session_id,
|
||||
&input.assistant_reply_text,
|
||||
)?;
|
||||
validate_custom_world_agent_operation_fields(
|
||||
&input.operation_id,
|
||||
&input.session_id,
|
||||
&input.phase_label,
|
||||
input.operation_progress,
|
||||
)?;
|
||||
validate_custom_world_agent_session_fields(
|
||||
&input.session_id,
|
||||
&input.owner_user_id,
|
||||
&input.anchor_content_json,
|
||||
&input.creator_intent_readiness_json,
|
||||
&input.pending_clarifications_json,
|
||||
&input.asset_coverage_json,
|
||||
input.progress_percent,
|
||||
)?;
|
||||
ensure_json_object(&input.anchor_content_json)?;
|
||||
ensure_optional_json_object(input.creator_intent_json.as_deref())?;
|
||||
ensure_json_object(&input.creator_intent_readiness_json)?;
|
||||
ensure_optional_json_object(input.anchor_pack_json.as_deref())?;
|
||||
ensure_optional_json_object(input.draft_profile_json.as_deref())?;
|
||||
ensure_json_array(&input.pending_clarifications_json)?;
|
||||
ensure_json_array(&input.suggested_actions_json)?;
|
||||
ensure_json_array(&input.recommended_replies_json)?;
|
||||
ensure_json_array(&input.quality_findings_json)?;
|
||||
ensure_json_object(&input.asset_coverage_json)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn validate_custom_world_agent_operation_get_input(
|
||||
input: &CustomWorldAgentOperationGetInput,
|
||||
) -> Result<(), CustomWorldFieldError> {
|
||||
@@ -1656,6 +1726,41 @@ mod tests {
|
||||
assert_eq!(error, CustomWorldFieldError::MissingProfileId);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn agent_message_finalize_requires_valid_json_payloads() {
|
||||
let error = validate_custom_world_agent_message_finalize_input(
|
||||
&CustomWorldAgentMessageFinalizeInput {
|
||||
session_id: "session_001".to_string(),
|
||||
owner_user_id: "user_001".to_string(),
|
||||
operation_id: "operation_001".to_string(),
|
||||
assistant_message_id: "message_001".to_string(),
|
||||
assistant_reply_text: "已生成回复".to_string(),
|
||||
phase_label: "消息已处理".to_string(),
|
||||
phase_detail: "这一轮已完成推理并写回".to_string(),
|
||||
operation_status: RpgAgentOperationStatus::Completed,
|
||||
operation_progress: 100,
|
||||
stage: RpgAgentStage::FoundationReview,
|
||||
progress_percent: 100,
|
||||
focus_card_id: None,
|
||||
anchor_content_json: "[]".to_string(),
|
||||
creator_intent_json: Some("{}".to_string()),
|
||||
creator_intent_readiness_json: "{}".to_string(),
|
||||
anchor_pack_json: Some("{}".to_string()),
|
||||
draft_profile_json: Some("{}".to_string()),
|
||||
pending_clarifications_json: "[]".to_string(),
|
||||
suggested_actions_json: "[]".to_string(),
|
||||
recommended_replies_json: "[]".to_string(),
|
||||
quality_findings_json: "[]".to_string(),
|
||||
asset_coverage_json: "{}".to_string(),
|
||||
error_message: None,
|
||||
updated_at_micros: 1,
|
||||
},
|
||||
)
|
||||
.expect_err("invalid anchor content should fail");
|
||||
|
||||
assert_eq!(error, CustomWorldFieldError::InvalidJsonPayload);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn published_profile_compile_merges_legacy_theme_and_latest_assets() {
|
||||
let snapshot = build_custom_world_published_profile_compile_snapshot(
|
||||
|
||||
Reference in New Issue
Block a user