mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-10-11 03:13:24 +00:00
- docs: device.pair.update and the `permanent` option on approve in docs/04-gateway-protocol.md, docs/19-websocket-rpc.md and websocket-protocol.md; the paired-device TTL row in docs/09-security.md now mentions the admin opt-out. - store.ErrPairedDeviceNotFound: SetPairingPermanent wraps it in both stores. device.pair.update maps it to NOT_FOUND and any other store error to INTERNAL, so a DB failure no longer reads as "not found". - web UI: approve and make-permanent/set-expiry now toast the server error and reload the list in `finally`. A partially applied approve (paired, but the permanent write failed) shows up in the table instead of leaving the dialog dead-ended. - SQLite ListPaired: a stored expiry that fails to parse stays 0 (expires, date unknown) rather than being mistaken for permanent; the UI renders it as "--" instead of a 1970 date. Tests: gateway handler error mapping (NOT_FOUND / INTERNAL / OK), sentinel checks in the PG and SQLite store tests, SQLite unreadable-expiry case. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
55 lines
2.1 KiB
JSON
55 lines
2.1 KiB
JSON
{
|
|
"title": "노드",
|
|
"description": "페어링된 기기 및 대기 중인 페어링 요청 관리",
|
|
"emptyTitle": "기기 없음",
|
|
"emptyDescription": "페어링된 기기 또는 대기 중인 페어링 요청이 없습니다.",
|
|
"pendingRequests": "대기 중인 요청 ({{count}}개)",
|
|
"pairedDevices": "페어링된 기기 ({{count}}개)",
|
|
"sender": "발신자:",
|
|
"chat": "채팅:",
|
|
"columns": {
|
|
"channel": "채널",
|
|
"senderId": "발신자 ID",
|
|
"paired": "페어링됨",
|
|
"by": "처리자",
|
|
"expires": "만료",
|
|
"actions": "작업"
|
|
},
|
|
"approve": "승인",
|
|
"deny": "거부",
|
|
"revoke": "취소",
|
|
"never": "없음",
|
|
"makePermanent": "영구로 설정",
|
|
"makeExpiring": "만료 설정",
|
|
"confirmApprove": {
|
|
"title": "페어링 승인",
|
|
"description": "{{channel}}:{{senderId}}의 페어링 요청을 승인하시겠습니까 (코드: {{code}})? 이 기기가 에이전트와 상호작용할 수 있게 됩니다.",
|
|
"confirmLabel": "승인",
|
|
"permanent": "만료 없음 (기본값 30일)"
|
|
},
|
|
"confirmDeny": {
|
|
"title": "페어링 거부",
|
|
"description": "{{channel}}:{{senderId}}의 페어링 요청을 거부하시겠습니까 (코드: {{code}})? 요청이 제거됩니다.",
|
|
"confirmLabel": "거부"
|
|
},
|
|
"confirmRevoke": {
|
|
"title": "기기 취소",
|
|
"description": "{{channel}}:{{senderId}}의 페어링을 취소하시겠습니까? 기기는 다시 페어링해야 합니다.",
|
|
"confirmLabel": "취소"
|
|
},
|
|
"confirmPermanent": {
|
|
"title": "영구 페어링",
|
|
"description": "{{channel}}:{{senderId}} 페어링을 영구로 설정하시겠습니까? 수동으로 해제할 때까지 유지됩니다.",
|
|
"confirmLabel": "영구로 설정"
|
|
},
|
|
"confirmExpiring": {
|
|
"title": "페어링 만료 설정",
|
|
"description": "{{channel}}:{{senderId}} 페어링을 기본 기간으로 되돌리시겠습니까? 지금부터 30일 후 만료됩니다.",
|
|
"confirmLabel": "만료 설정"
|
|
},
|
|
"toast": {
|
|
"approveFailed": "페어링을 승인할 수 없습니다",
|
|
"updateFailed": "페어링 만료를 변경할 수 없습니다"
|
|
}
|
|
}
|