新增: 挂机模式 P1 总装: 设置面板+顶栏徽章+边界卡精简+监控告警推送

- 新增 UnattendedPanel.vue 挂机配置面板(引擎自动认领看板任务,Settings KV 热读即改即生效)
- Settings.vue 接入挂机面板;searchIndex.ts 补挂机搜索词条
- TopBar.vue 新增挂机进行中徽章(脉冲动效+透明度过渡)
- TaskBoundaryCard.vue 精简边界状态判定(wallState 合并比对,删冗余 watch)
- i18n zh-CN/en: settings/ai/aiChat 六文件补挂机词条双语
- unattended.rs 新增 push_monitor_alert 监控告警推送(异常快照+告警头直发 monitor_chat)
- feishu_notify.rs push/push_card 出口重构收敛
- lib.rs 注册 unattended_status/unattended_set_enabled 两 IPC
- aiShared.ts/useAiStreamingEvents.ts 挂机状态流接入
This commit is contained in:
lxy
2026-10-07 22:03:41 +08:00
parent e60bd38444
commit 2441101978
16 changed files with 525 additions and 264 deletions
+9 -19
View File
@@ -133,7 +133,7 @@ export default {
circuit_breaker: 'Circuit breaker',
stall_breaker: 'Stall breaker',
max_rounds: 'Max rounds reached',
fatal: 'Repeated failures (retry budget exhausted)',
fatal: 'Repeated failures; paused automatically',
midstream: 'Stream interrupted',
},
unknownKind: 'Parked',
@@ -148,25 +148,17 @@ export default {
unlimited: 'Running · round {round} · {tokens} tokens',
barHint: 'Round {round}/{max}',
},
// Unattended boundary config card (authorized once at kickoff, effective for the task
// lifetime, dies with the conversation)
// Unattended boundary config card (P1 simplified: single authorization tier,
// only the two budget fields remain user-tunable)
taskBoundary: {
toggle: 'Unattended',
badge: 'Unattended boundary authorized',
riskCeiling: 'Risk ceiling',
riskLow: 'Low',
riskMedium: 'Medium',
dirs: 'Directory allowlist',
dirPlaceholder: 'Enter absolute directory path',
dirAdd: 'Add',
dirEmpty: 'No directories added',
forbidDestructive: 'Destructive commands always blocked',
budgetToggle: 'Budget (advanced)',
budgetRounds: 'Max rounds',
budgetTokens: 'Max tokens',
budgetWallSecs: 'Wall-clock seconds',
budgetHint: 'Leave empty for unlimited',
budgetInvalid: 'Budget values must be positive integers',
budgetWallSecs: 'Max run duration',
budgetUnlimited: 'Unlimited',
budgetHint: 'Check "Unlimited" to lift a limit',
confirmSet: 'Authorize once, no interruptions for the whole task',
clearBoundary: 'Clear boundary',
setOk: 'Unattended boundary authorized',
@@ -175,12 +167,10 @@ export default {
lockedGenerating: 'Task is running: only clearing (revoke) is allowed, fields are locked',
loadFailed: 'Failed to load boundary; the form below is not trustworthy',
retryLoad: 'Retry',
dirErrIllegal: 'Path contains illegal characters < > : " | ? *',
dirErrRelative: 'Enter an absolute path (e.g. D:\\projects or /home/user)',
clearConfirm: 'Clearing the boundary revokes unattended authorization immediately; tool calls in the running task will fall back to per-action approval. Clear?',
echoRisk: 'risk ceiling {risk}',
echoDirs: '{n} dirs',
echoBudget: 'budget {rounds} rounds / {tokens} tokens / {secs}s',
echoRounds: 'up to {n} rounds',
echoSecs: 'up to {n}s',
echoBudget: 'budget {rounds} / {secs}',
echoNoBudget: 'no budget limit',
// A12: budget validation field locator; A11: dirty-edit kept notice
budgetInvalidField: '{field} must be a positive integer',
+7 -1
View File
@@ -22,7 +22,13 @@ export default {
archived: 'Archived',
archivedCount: 'Archived ({n})',
recoverableCount: 'Recoverable ({n})',
recoverableHint: 'Task parked by restart interruption; click to resume',
recoverableHint: 'Task parked safely; click to resume',
// ── Unattended engine badge (TopBar; shown while on, red badge resets the breaker) ──
unattendedOn: 'Unattended',
unattendedExecuting: 'working',
unattendedTripped: 'Unattended halted',
unattendedBadgeHint: 'Unattended mode is on. Click to open settings',
unattendedResetHint: 'Auto-halted after repeated start failures. Click to reset and resume',
recoverableDone: 'Task resumed, running in background',
recoverableFail: 'Recover failed: {msg}',
emptyConversation: 'No conversations',
+18
View File
@@ -272,6 +272,24 @@ export default {
// Submit guard: when enabled=true, either of id/secret empty blocks the write
feishuValidateIncomplete: 'Fill in App ID and App Secret to enable the Feishu integration',
// ===== Integrations: Unattended mode (engine auto-claims board tasks; TopBar badge jump target) =====
panelUnattended: 'Unattended Mode',
labelUnattendedEnabled: 'Enable unattended mode',
descUnattendedEnabled: 'Automatically claims open board tasks and keeps working; turning it off stops claiming (running tasks are not interrupted)',
labelUnattendedScope: 'Claim scope',
descUnattendedScope: 'Which tasks are handled automatically while unattended',
unattendedScopeRed: 'High-priority tasks only (recommended)',
unattendedScopeAll: 'All open tasks',
labelUnattendedMonitorChat: 'Notification target',
descUnattendedMonitorChat: 'Mode switches and runtime alerts are pushed to this Feishu group (enable the Feishu integration below first)',
phUnattendedMonitorChat: 'Feishu group chat_id; leave empty to log only',
labelUnattendedPollSecs: 'Check interval (seconds)',
descUnattendedPollSecs: 'How often to look for new board tasks, minimum 30 seconds',
unattendedAdvanced: 'Advanced',
toastUnattendedOn: 'Unattended mode on; board tasks will be claimed automatically',
toastUnattendedOff: 'Unattended mode off',
toastUnattendedFail: 'Failed to switch unattended mode: {msg}',
// ===== Integrations: u-claw (ask_uclaw tool, u-relay commander protocol) =====
panelUclaw: 'u-claw Integration',
labelUclawRelayUrl: 'Relay URL',