Compare commits
5 Commits
3927c92fa8
...
2843bd204f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2843bd204f | ||
|
|
05374f99b0 | ||
|
|
c88e3ac630 | ||
|
|
dc94a5323a | ||
|
|
69d3feb865 |
@@ -322,10 +322,10 @@ pub fn analyze_for_pain_signals(messages: &[zclaw_types::Message]) -> Option<Pai
|
|||||||
let combined = user_frustrations.join(" ");
|
let combined = user_frustrations.join(" ");
|
||||||
let severity = if combined.contains("烦死了")
|
let severity = if combined.contains("烦死了")
|
||||||
|| combined.contains("受不了")
|
|| combined.contains("受不了")
|
||||||
|| user_frustrations.len() >= 3
|
|| user_frustrations.len() >= 2
|
||||||
{
|
{
|
||||||
PainSeverity::High
|
PainSeverity::High
|
||||||
} else if user_frustrations.len() >= 2 {
|
} else if user_frustrations.len() >= 1 {
|
||||||
PainSeverity::Medium
|
PainSeverity::Medium
|
||||||
} else {
|
} else {
|
||||||
PainSeverity::Low
|
PainSeverity::Low
|
||||||
|
|||||||
@@ -893,7 +893,7 @@ mod tests {
|
|||||||
];
|
];
|
||||||
|
|
||||||
let patterns = engine.analyze_patterns(&memories);
|
let patterns = engine.analyze_patterns(&memories);
|
||||||
// Should not trigger (only 2 tasks, threshold is 5)
|
// Should not trigger (only 2 tasks, threshold is 3)
|
||||||
assert!(!patterns.iter().any(|p| p.observation.contains("待办任务")));
|
assert!(!patterns.iter().any(|p| p.observation.contains("待办任务")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -187,7 +187,10 @@ pub async fn agent_get(
|
|||||||
if let Ok(storage) = crate::viking_commands::get_storage().await {
|
if let Ok(storage) = crate::viking_commands::get_storage().await {
|
||||||
let profile_store = zclaw_memory::UserProfileStore::new(storage.pool().clone());
|
let profile_store = zclaw_memory::UserProfileStore::new(storage.pool().clone());
|
||||||
if let Ok(Some(profile)) = profile_store.get(&agent_id).await {
|
if let Ok(Some(profile)) = profile_store.get(&agent_id).await {
|
||||||
agent_info.user_profile = Some(serde_json::to_value(profile).unwrap_or_default());
|
match serde_json::to_value(&profile) {
|
||||||
|
Ok(val) => agent_info.user_profile = Some(val),
|
||||||
|
Err(e) => tracing::warn!("[agent_get] Failed to serialize UserProfile: {}", e),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
|
|
||||||
import { useState, useEffect, useMemo } from 'react';
|
import { useState, useEffect, useMemo } from 'react';
|
||||||
import { motion, AnimatePresence } from 'framer-motion';
|
import { motion, AnimatePresence } from 'framer-motion';
|
||||||
|
import { createLogger } from '../lib/logger';
|
||||||
|
|
||||||
|
const log = createLogger('IdentityChangeProposal');
|
||||||
import {
|
import {
|
||||||
Check,
|
Check,
|
||||||
X,
|
X,
|
||||||
@@ -381,7 +384,7 @@ export function IdentityChangeProposalPanel() {
|
|||||||
setProposals(pendingProposals);
|
setProposals(pendingProposals);
|
||||||
setSnapshots(agentSnapshots);
|
setSnapshots(agentSnapshots);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('[IdentityChangeProposal] Failed to load data:', err);
|
log.error('[IdentityChangeProposal] Failed to load data:', err);
|
||||||
setError('加载失败');
|
setError('加载失败');
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
@@ -405,7 +408,7 @@ export function IdentityChangeProposalPanel() {
|
|||||||
setProposals(pendingProposals);
|
setProposals(pendingProposals);
|
||||||
setSnapshots(agentSnapshots);
|
setSnapshots(agentSnapshots);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('[IdentityChangeProposal] Failed to approve:', err);
|
log.error('[IdentityChangeProposal] Failed to approve:', err);
|
||||||
setError(parseProposalError(err, 'approval'));
|
setError(parseProposalError(err, 'approval'));
|
||||||
} finally {
|
} finally {
|
||||||
setProcessingId(null);
|
setProcessingId(null);
|
||||||
@@ -422,7 +425,7 @@ export function IdentityChangeProposalPanel() {
|
|||||||
const pendingProposals = await intelligenceClient.identity.getPendingProposals(agentId);
|
const pendingProposals = await intelligenceClient.identity.getPendingProposals(agentId);
|
||||||
setProposals(pendingProposals);
|
setProposals(pendingProposals);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('[IdentityChangeProposal] Failed to reject:', err);
|
log.error('[IdentityChangeProposal] Failed to reject:', err);
|
||||||
setError(parseProposalError(err, 'rejection'));
|
setError(parseProposalError(err, 'rejection'));
|
||||||
} finally {
|
} finally {
|
||||||
setProcessingId(null);
|
setProcessingId(null);
|
||||||
@@ -439,7 +442,7 @@ export function IdentityChangeProposalPanel() {
|
|||||||
const agentSnapshots = await intelligenceClient.identity.getSnapshots(agentId, 10);
|
const agentSnapshots = await intelligenceClient.identity.getSnapshots(agentId, 10);
|
||||||
setSnapshots(agentSnapshots);
|
setSnapshots(agentSnapshots);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('[IdentityChangeProposal] Failed to restore:', err);
|
log.error('[IdentityChangeProposal] Failed to restore:', err);
|
||||||
setError(parseProposalError(err, 'restore'));
|
setError(parseProposalError(err, 'restore'));
|
||||||
} finally {
|
} finally {
|
||||||
setProcessingId(null);
|
setProcessingId(null);
|
||||||
|
|||||||
@@ -181,17 +181,3 @@ export function loadConnectionMode(): string | null {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Load the timestamp of the persisted connection mode.
|
|
||||||
* Returns null if not set or format is legacy.
|
|
||||||
*/
|
|
||||||
export function loadConnectionModeTimestamp(): number | null {
|
|
||||||
const raw = localStorage.getItem(SAASMODE_KEY);
|
|
||||||
if (!raw) return null;
|
|
||||||
try {
|
|
||||||
const parsed = JSON.parse(raw);
|
|
||||||
return parsed.timestamp ?? null;
|
|
||||||
} catch {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user