新增: 挂机模式 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:
+9
-19
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user