zigmini 1.0.0-beta.3 → 1.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +27 -2
- package/README.md +27 -2
- package/assets/agent/gateway-request-rules.md +1 -1
- package/assets/agent/gateway-rules.md +6 -1
- package/assets/android/zigmini.apk +0 -0
- package/assets/android/zigmini.apk.json +3 -3
- package/assets/build.json +1 -1
- package/assets/document-reader/document-reader +0 -0
- package/assets/document-reader/host-selector +0 -0
- package/assets/document-reader/manifest.json +27 -0
- package/docs/manual.ko.md +114 -10
- package/docs/manual.md +117 -11
- package/host/document-reader/DocumentRead.swift +370 -0
- package/host/document-reader/HostSelector.swift +192 -0
- package/host/document-reader/Protocol.swift +647 -0
- package/host/document-reader/main.swift +22 -0
- package/host/omo-bridge/agent-aside-tool.ts +119 -0
- package/host/omo-bridge/agent-aside.ts +522 -0
- package/host/omo-bridge/agent-collaboration-files.ts +282 -0
- package/host/omo-bridge/agent-collaboration.ts +385 -0
- package/host/omo-bridge/agent-control.ts +400 -28
- package/host/omo-bridge/agent-execution.sb +42 -0
- package/host/omo-bridge/agent-execution.ts +158 -0
- package/host/omo-bridge/agent-tool-adapters.ts +388 -0
- package/host/omo-bridge/agent-tool-permissions.ts +96 -0
- package/host/omo-bridge/aside-tabs.ts +41 -0
- package/host/omo-bridge/attachment-read.ts +100 -0
- package/host/omo-bridge/bridge.ts +10 -0
- package/host/omo-bridge/managed-call.ts +46 -0
- package/host/omo-bridge/task-control.ts +39 -5
- package/host/omo-check/patches/attachments-293/README.md +138 -0
- package/host/omo-check/patches/attachments-293/document-content.js +234 -0
- package/host/omo-check/patches/attachments-293/document-content.types.txt +91 -0
- package/host/omo-check/patches/attachments-293/omo-5.1.51-documents.patch +831 -0
- package/host/omo-check/patches/attachments-293/omo-5.1.51-gateway-port.manifest.json +471 -0
- package/host/omo-check/patches/omo-5.1.51-agent-tool-authority.patch +471 -0
- package/host/omo-check/patches/omo-5.1.51-gateway-port.manifest.json +28 -6
- package/host/omo-check/patches/omo-5.1.51-memory-receipts.patch +5 -0
- package/package.json +5 -3
- package/src/agent/api.ts +345 -20
- package/src/agent/artifacts.ts +196 -0
- package/src/agent/aside-target-routes.ts +369 -0
- package/src/agent/aside-targets.ts +215 -0
- package/src/agent/collaboration-admission.ts +47 -0
- package/src/agent/collaboration-read.ts +117 -0
- package/src/agent/collaboration-session.ts +196 -0
- package/src/agent/collaboration-types.ts +258 -0
- package/src/agent/collaboration.ts +399 -0
- package/src/agent/definition.ts +65 -3
- package/src/agent/fields.ts +9 -3
- package/src/agent/file-core.ts +325 -0
- package/src/agent/files.ts +87 -8
- package/src/agent/list.ts +3 -3
- package/src/agent/managed-call.ts +144 -0
- package/src/agent/tool-catalog.ts +184 -0
- package/src/agent/tool-delivery.ts +359 -0
- package/src/agent/tool-permission-types.ts +81 -0
- package/src/agent/tool-permissions.ts +1366 -0
- package/src/attachments/api.ts +161 -0
- package/src/attachments/document-reader.ts +325 -0
- package/src/attachments/host-selector.ts +410 -0
- package/src/attachments/managed-binding.ts +83 -0
- package/src/attachments/prepare.ts +214 -0
- package/src/attachments/selector-port.ts +28 -0
- package/src/attachments/service.ts +729 -0
- package/src/attachments/store.ts +698 -0
- package/src/attachments/types.ts +123 -0
- package/src/cli/doctor.ts +30 -10
- package/src/decisions.ts +109 -10
- package/src/engine/apply-patch.ts +21 -0
- package/src/engine/compat.json +2 -1
- package/src/engine/install.ts +45 -4
- package/src/engine/sandbox-cell.ts +2 -0
- package/src/gc.ts +33 -225
- package/src/housekeeping/api.ts +163 -0
- package/src/housekeeping/audit.ts +61 -0
- package/src/housekeeping/collectors/agent-collaboration.ts +33 -0
- package/src/housekeeping/collectors/agent-drafts.ts +43 -0
- package/src/housekeeping/collectors/agent-file-trash.ts +36 -0
- package/src/housekeeping/collectors/agent-trash.ts +28 -0
- package/src/housekeeping/collectors/attachment-cleanup.ts +35 -0
- package/src/housekeeping/collectors/db-backup.ts +25 -0
- package/src/housekeeping/collectors/docker-build-cache.ts +29 -0
- package/src/housekeeping/collectors/docker-image.ts +135 -0
- package/src/housekeeping/collectors/omo-version.ts +32 -0
- package/src/housekeeping/collectors/orphan-test-process.ts +205 -0
- package/src/housekeeping/collectors/reconcile-work.ts +55 -0
- package/src/housekeeping/collectors/rpc-daemon.ts +39 -0
- package/src/housekeeping/collectors/shared.ts +149 -0
- package/src/housekeeping/collectors/temp-dir.ts +28 -0
- package/src/housekeeping/collectors/update-file.ts +25 -0
- package/src/housekeeping/collectors/worktree.ts +193 -0
- package/src/housekeeping/engine.ts +125 -0
- package/src/housekeeping/reconcile/work.ts +130 -0
- package/src/housekeeping/registry.ts +63 -0
- package/src/housekeeping/trash.ts +59 -0
- package/src/housekeeping/types.ts +31 -0
- package/src/hub.ts +1095 -41
- package/src/main.ts +228 -30
- package/src/message-references.ts +14 -5
- package/src/profile-prompt.ts +13 -1
- package/src/protocol.ts +41 -6
- package/src/security-allow.ts +79 -2
- package/src/security-check.ts +1 -1
- package/src/store.ts +1946 -23
- package/src/test-crash.ts +20 -0
- package/src/work-watch.ts +55 -7
- package/src/work.ts +192 -3
- package/web/DESIGN.md +33 -0
- package/web/agents.d.ts +189 -12
- package/web/agents.js +898 -39
- package/web/app.js +2634 -210
- package/web/attachments.d.ts +91 -0
- package/web/attachments.js +422 -0
- package/web/collaboration.d.ts +87 -0
- package/web/collaboration.js +290 -0
- package/web/decisions.d.ts +39 -2
- package/web/decisions.js +354 -2
- package/web/gc.d.ts +26 -5
- package/web/gc.js +113 -13
- package/web/i18n/agents.d.ts +4 -0
- package/web/i18n/agents.js +200 -8
- package/web/i18n/attachments.js +78 -0
- package/web/i18n/decisions.d.ts +4 -0
- package/web/i18n/decisions.js +68 -0
- package/web/i18n/gc.d.ts +4 -0
- package/web/i18n/gc.js +184 -2
- package/web/i18n/main.js +80 -8
- package/web/i18n/tour.d.ts +4 -0
- package/web/i18n/tour.js +37 -0
- package/web/index.html +20 -3
- package/web/profile.d.ts +2 -2
- package/web/profile.js +11 -6
- package/web/style.css +342 -21
- package/web/tooltip.d.ts +2 -0
- package/web/tooltip.js +12 -0
- package/web/tour.d.ts +57 -0
- package/web/tour.js +450 -0
package/web/i18n/gc.js
CHANGED
|
@@ -6,6 +6,83 @@ export default {
|
|
|
6
6
|
"gc.tempDir": "Temporary folder",
|
|
7
7
|
"gc.rpcDaemon": "Previous RPC daemon",
|
|
8
8
|
"gc.agentTrash": "Archived agent folder",
|
|
9
|
+
"gc.agentFileTrash": "Deleted agent knowledge file",
|
|
10
|
+
"gc.agentDrafts": "Agent draft",
|
|
11
|
+
"gc.orphanTestProcess": "Leftover test process",
|
|
12
|
+
"gc.worktree": "Git worktree",
|
|
13
|
+
"gc.dockerImage": "Gateway Docker image",
|
|
14
|
+
"gc.dockerBuildCache": "Docker build cache",
|
|
15
|
+
"gc.reconcileWork": "Work state",
|
|
16
|
+
"gc.attachmentCleanup": "Unused attachment",
|
|
17
|
+
"gc.role.reconcile": "Work state",
|
|
18
|
+
"gc.role.gc": "Reclaim",
|
|
19
|
+
"gc.reconcileNote": "Main will ask you to confirm",
|
|
20
|
+
"gc.reconcileClosed": "Closed from evidence",
|
|
21
|
+
"gc.irreversible": "Cannot be undone",
|
|
22
|
+
"gc.reason.old_tag": "Old tag, not dev or previous",
|
|
23
|
+
"gc.reason.shared_build_cache": "Build cache shared with other projects",
|
|
24
|
+
"gc.reason.shared_with_other_projects": "Shared with other projects, size only",
|
|
25
|
+
"gc.reason.in_use": "A container still uses it",
|
|
26
|
+
"gc.reason.protected_tag": "The dev and previous tags are kept",
|
|
27
|
+
"gc.reason.image_changed": "The image changed after the scan",
|
|
28
|
+
"gc.reason.docker_unavailable": "Docker is not available",
|
|
29
|
+
"gc.reason.younger_than_7_days": "Changed within the last 7 days",
|
|
30
|
+
"gc.reason.not_merged_into_dev": "Not merged into dev",
|
|
31
|
+
"gc.reason.uncommitted_changes": "Has uncommitted changes",
|
|
32
|
+
"gc.reason.evidence_or_secrets_present": "Has an evidence folder or secrets",
|
|
33
|
+
"gc.reason.in_use_by_process": "A process is using it",
|
|
34
|
+
"gc.reason.unfinished_work_inside": "An unfinished work runs inside it",
|
|
35
|
+
"gc.reason.locked": "The worktree is locked",
|
|
36
|
+
"gc.reason.git_failed": "A git command failed",
|
|
37
|
+
"gc.reason.not_a_worktree": "No longer a worktree of the repository",
|
|
38
|
+
"gc.reason.stat_failed": "Could not check the file",
|
|
39
|
+
"gc.reason.process_check_failed": "Could not check which processes use it",
|
|
40
|
+
"gc.reason.merged_clean_unused_old": "Merged into dev, clean, unused and older than 7 days",
|
|
41
|
+
"gc.reason.git_prune_failed": "Could not prune the worktree record",
|
|
42
|
+
"gc.reason.not_npm_install": "Test processes are cleaned up only on an npm install",
|
|
43
|
+
"gc.reason.ps_unreadable": "Could not read the process list",
|
|
44
|
+
"gc.reason.gone": "The process has already ended",
|
|
45
|
+
"gc.reason.pid_reused": "The process number now belongs to another process",
|
|
46
|
+
"gc.reason.other_user": "Another user runs this process",
|
|
47
|
+
"gc.reason.has_parent": "Its parent process is still running",
|
|
48
|
+
"gc.reason.no_temp_path": "Its command no longer uses a test folder",
|
|
49
|
+
"gc.reason.protected_unreadable": "Could not read which processes the gateway protects",
|
|
50
|
+
"gc.reason.protected": "This is a gateway process",
|
|
51
|
+
"gc.reason.temp_path_exists": "Its test folder still exists",
|
|
52
|
+
"gc.reason.orphaned_test_process": "A test process left behind after its test folder was removed",
|
|
53
|
+
"gc.reason.no_pids": "No process to stop was recorded",
|
|
54
|
+
"gc.reason.unreadable_candidate": "Could not read the candidate details",
|
|
55
|
+
"gc.reason.docker_images_failed": "Could not list the Docker images",
|
|
56
|
+
"gc.reason.docker_ps_failed": "Could not check which containers use the image",
|
|
57
|
+
"gc.reason.docker_missing": "The docker command did not run",
|
|
58
|
+
"gc.reason.unused_old_tag": "Old tag that no container uses",
|
|
59
|
+
"gc.reason.bad_tag": "This image tag cannot be removed",
|
|
60
|
+
"gc.reason.rule_holds": "The cleanup rule still applies",
|
|
61
|
+
"gc.reason.no_longer_a_candidate": "No longer matches the rule",
|
|
62
|
+
"gc.reason.no_longer_current": "No longer current",
|
|
63
|
+
"gc.reason.confirm_through_main": "Main has to confirm this work state",
|
|
64
|
+
"gc.reason.info_only": "Information only; nothing is removed",
|
|
65
|
+
"gc.reason.reconcile_session_closed": "The work session ended without a report",
|
|
66
|
+
"gc.reason.reconcile_cancel_unreachable": "The cancel command could not reach a work that was not running",
|
|
67
|
+
"gc.reason.reconcile_confirm_undelivered": "The last command was not confirmed as received by the work session",
|
|
68
|
+
"gc.reason.reconcile_confirm_no_report": "The work session stopped after receiving the command, but it sent no report",
|
|
69
|
+
"gc.reason.reconcile_confirm_unreachable": "The last command could not reach the work session",
|
|
70
|
+
"gc.reason.omo_not_ready": "OMO is not ready yet",
|
|
71
|
+
"gc.reason.dispatch_not_settled": "Not checked again since the last command was delivered",
|
|
72
|
+
"gc.reason.streaming": "The work session is still responding",
|
|
73
|
+
"gc.reason.children_active": "Child tasks are still running",
|
|
74
|
+
"gc.reason.children_unknown": "Could not check the child tasks",
|
|
75
|
+
"gc.reason.open_decisions": "There are open decisions",
|
|
76
|
+
"gc.reason.dispatch_in_flight": "A command is being delivered",
|
|
77
|
+
"gc.reason.status_settled": "The work has already finished",
|
|
78
|
+
"gc.reason.retryable_refusal": "The work session refused for now and will be checked again",
|
|
79
|
+
"gc.reason.no_command": "No command has been sent",
|
|
80
|
+
"gc.reason.no_row": "No cleanup rule applies",
|
|
81
|
+
"gc.reason.path_rejected": "The path is not allowed, so nothing was moved",
|
|
82
|
+
"gc.reason.no_macos_trash": "The macOS Trash is not available",
|
|
83
|
+
"gc.reason.trash_failed": "Could not move it to the Trash",
|
|
84
|
+
"gc.reason.act_failed": "Could not clean it up",
|
|
85
|
+
"gc.keptReason": "Kept by a rule: {why}",
|
|
9
86
|
"gc.empty": "There are no items to clean up",
|
|
10
87
|
"gc.failed": "Could not load cleanup candidates",
|
|
11
88
|
"gc.unknownSize": "Unknown size",
|
|
@@ -13,9 +90,23 @@ export default {
|
|
|
13
90
|
"gc.ageHours": "{count} hours",
|
|
14
91
|
"gc.ageMinutes": "{count} minutes",
|
|
15
92
|
"gc.summary": "{count} candidates · {bytes}",
|
|
16
|
-
"gc.cleanResult": "Cleaned {cleaned}{failed}{missing}",
|
|
93
|
+
"gc.cleanResult": "Cleaned {cleaned}{failed}{kept}{missing}",
|
|
17
94
|
"gc.failedCount": ", {count} failed",
|
|
95
|
+
"gc.keptCount": ", {count} kept by a rule",
|
|
18
96
|
"gc.missingCount": ", {count} are no longer candidates",
|
|
97
|
+
"gc.audit.empty": "No cleanup has been recorded yet",
|
|
98
|
+
"gc.audit.failed": "Could not load the cleanup log",
|
|
99
|
+
"gc.audit.error": "Check failed: {error}",
|
|
100
|
+
"gc.audit.failedLine": "Failed: {error}",
|
|
101
|
+
"gc.actor.auto": "Automatic",
|
|
102
|
+
"gc.actor.operator": "Operator",
|
|
103
|
+
"gc.actor.reconcile": "Reconcile",
|
|
104
|
+
"gc.method.trash": "Moved to the Trash",
|
|
105
|
+
"gc.method.deleted": "Deleted",
|
|
106
|
+
"gc.method.sigterm": "Process stopped",
|
|
107
|
+
"gc.method.state": "Work state updated",
|
|
108
|
+
"gc.method.docker_rmi": "Image removed",
|
|
109
|
+
"gc.method.git_prune": "Worktree pruned",
|
|
19
110
|
},
|
|
20
111
|
ko: {
|
|
21
112
|
"gc.dbBackup": "DB 백업",
|
|
@@ -24,6 +115,83 @@ export default {
|
|
|
24
115
|
"gc.tempDir": "임시 폴더",
|
|
25
116
|
"gc.rpcDaemon": "이전 RPC 데몬",
|
|
26
117
|
"gc.agentTrash": "에이전트 보관 폴더",
|
|
118
|
+
"gc.agentFileTrash": "삭제한 에이전트 지식 파일",
|
|
119
|
+
"gc.agentDrafts": "에이전트 임시 저장",
|
|
120
|
+
"gc.orphanTestProcess": "남은 시험 프로세스",
|
|
121
|
+
"gc.worktree": "Git worktree",
|
|
122
|
+
"gc.dockerImage": "게이트웨이 Docker 이미지",
|
|
123
|
+
"gc.dockerBuildCache": "Docker 빌드 캐시",
|
|
124
|
+
"gc.reconcileWork": "작업 상태",
|
|
125
|
+
"gc.attachmentCleanup": "쓰지 않는 첨부 파일",
|
|
126
|
+
"gc.role.reconcile": "상태 정리",
|
|
127
|
+
"gc.role.gc": "회수",
|
|
128
|
+
"gc.reconcileNote": "main이 확인을 요청합니다",
|
|
129
|
+
"gc.reconcileClosed": "근거를 확인하고 정리했습니다",
|
|
130
|
+
"gc.irreversible": "되돌릴 수 없음",
|
|
131
|
+
"gc.reason.old_tag": "dev도 previous도 아닌 옛 태그",
|
|
132
|
+
"gc.reason.shared_build_cache": "다른 프로젝트와 함께 쓰는 빌드 캐시",
|
|
133
|
+
"gc.reason.shared_with_other_projects": "다른 프로젝트와 함께 써서 크기만 보여 드립니다",
|
|
134
|
+
"gc.reason.in_use": "컨테이너가 아직 쓰고 있습니다",
|
|
135
|
+
"gc.reason.protected_tag": "dev와 previous 태그는 남겨 둡니다",
|
|
136
|
+
"gc.reason.image_changed": "검사한 뒤 이미지가 바뀌었습니다",
|
|
137
|
+
"gc.reason.docker_unavailable": "Docker를 쓸 수 없습니다",
|
|
138
|
+
"gc.reason.younger_than_7_days": "최근 7일 안에 바뀌었습니다",
|
|
139
|
+
"gc.reason.not_merged_into_dev": "dev에 머지되지 않았습니다",
|
|
140
|
+
"gc.reason.uncommitted_changes": "커밋하지 않은 변경이 있습니다",
|
|
141
|
+
"gc.reason.evidence_or_secrets_present": "증거 폴더나 secrets가 있습니다",
|
|
142
|
+
"gc.reason.in_use_by_process": "프로세스가 쓰고 있습니다",
|
|
143
|
+
"gc.reason.unfinished_work_inside": "끝나지 않은 작업이 안에서 돌고 있습니다",
|
|
144
|
+
"gc.reason.locked": "잠긴 worktree입니다",
|
|
145
|
+
"gc.reason.git_failed": "git 명령이 실패했습니다",
|
|
146
|
+
"gc.reason.not_a_worktree": "이제 저장소의 worktree가 아닙니다",
|
|
147
|
+
"gc.reason.stat_failed": "파일 상태를 확인하지 못했습니다",
|
|
148
|
+
"gc.reason.process_check_failed": "쓰고 있는 프로세스를 확인하지 못했습니다",
|
|
149
|
+
"gc.reason.merged_clean_unused_old": "dev에 머지되었고, 변경과 사용이 없고, 7일이 지났습니다",
|
|
150
|
+
"gc.reason.git_prune_failed": "worktree 기록을 정리하지 못했습니다",
|
|
151
|
+
"gc.reason.not_npm_install": "시험 프로세스는 npm 설치에서만 정리합니다",
|
|
152
|
+
"gc.reason.ps_unreadable": "프로세스 목록을 읽지 못했습니다",
|
|
153
|
+
"gc.reason.gone": "프로세스가 이미 끝났습니다",
|
|
154
|
+
"gc.reason.pid_reused": "다른 프로세스가 같은 프로세스 번호를 쓰고 있습니다",
|
|
155
|
+
"gc.reason.other_user": "다른 사용자의 프로세스입니다",
|
|
156
|
+
"gc.reason.has_parent": "부모 프로세스가 아직 실행 중입니다",
|
|
157
|
+
"gc.reason.no_temp_path": "명령이 이제 시험용 폴더를 쓰지 않습니다",
|
|
158
|
+
"gc.reason.protected_unreadable": "게이트웨이가 보호하는 프로세스를 확인하지 못했습니다",
|
|
159
|
+
"gc.reason.protected": "게이트웨이 프로세스입니다",
|
|
160
|
+
"gc.reason.temp_path_exists": "시험용 폴더가 아직 있습니다",
|
|
161
|
+
"gc.reason.orphaned_test_process": "시험용 폴더가 지워진 뒤에도 남은 시험 프로세스입니다",
|
|
162
|
+
"gc.reason.no_pids": "멈출 프로세스가 기록되지 않았습니다",
|
|
163
|
+
"gc.reason.unreadable_candidate": "후보 정보를 읽지 못했습니다",
|
|
164
|
+
"gc.reason.docker_images_failed": "Docker 이미지 목록을 읽지 못했습니다",
|
|
165
|
+
"gc.reason.docker_ps_failed": "이미지를 쓰는 컨테이너를 확인하지 못했습니다",
|
|
166
|
+
"gc.reason.docker_missing": "docker 명령을 실행하지 못했습니다",
|
|
167
|
+
"gc.reason.unused_old_tag": "컨테이너가 쓰지 않는 옛 태그입니다",
|
|
168
|
+
"gc.reason.bad_tag": "지울 수 없는 이미지 태그입니다",
|
|
169
|
+
"gc.reason.rule_holds": "정리 규칙에 아직 해당합니다",
|
|
170
|
+
"gc.reason.no_longer_a_candidate": "이제 규칙에 해당하지 않습니다",
|
|
171
|
+
"gc.reason.no_longer_current": "이제 해당하지 않습니다",
|
|
172
|
+
"gc.reason.confirm_through_main": "작업 상태는 main이 확인해야 합니다",
|
|
173
|
+
"gc.reason.info_only": "크기만 보여 드리는 항목이라 지우지 않습니다",
|
|
174
|
+
"gc.reason.reconcile_session_closed": "작업 세션이 보고 없이 닫혔습니다",
|
|
175
|
+
"gc.reason.reconcile_cancel_unreachable": "실행 중이 아닌 작업에 취소 명령이 닿지 못했습니다",
|
|
176
|
+
"gc.reason.reconcile_confirm_undelivered": "마지막 명령을 작업 세션이 받았는지 확인하지 못했습니다",
|
|
177
|
+
"gc.reason.reconcile_confirm_no_report": "작업 세션이 명령을 받은 뒤 보고 없이 멈췼습니다",
|
|
178
|
+
"gc.reason.reconcile_confirm_unreachable": "마지막 명령이 작업 세션에 닿지 못했습니다",
|
|
179
|
+
"gc.reason.omo_not_ready": "OMO가 아직 준비되지 않았습니다",
|
|
180
|
+
"gc.reason.dispatch_not_settled": "마지막 명령을 전달한 뒤 아직 다시 확인하지 않았습니다",
|
|
181
|
+
"gc.reason.streaming": "작업 세션이 아직 응답하고 있습니다",
|
|
182
|
+
"gc.reason.children_active": "하위 작업이 아직 돌고 있습니다",
|
|
183
|
+
"gc.reason.children_unknown": "하위 작업을 확인하지 못했습니다",
|
|
184
|
+
"gc.reason.open_decisions": "열린 결정이 있습니다",
|
|
185
|
+
"gc.reason.dispatch_in_flight": "명령을 전달하는 중입니다",
|
|
186
|
+
"gc.reason.status_settled": "작업이 이미 끝난 상태입니다",
|
|
187
|
+
"gc.reason.retryable_refusal": "작업 세션이 지금은 응답하지 않아 다시 확인합니다",
|
|
188
|
+
"gc.reason.no_command": "보낸 명령이 없습니다",
|
|
189
|
+
"gc.reason.no_row": "해당하는 정리 규칙이 없습니다",
|
|
190
|
+
"gc.reason.path_rejected": "허용되지 않는 경로라 옮기지 않았습니다",
|
|
191
|
+
"gc.reason.no_macos_trash": "macOS 휴지통을 쓸 수 없습니다",
|
|
192
|
+
"gc.reason.trash_failed": "휴지통으로 옮기지 못했습니다",
|
|
193
|
+
"gc.reason.act_failed": "정리하지 못했습니다",
|
|
194
|
+
"gc.keptReason": "규칙에 따라 남겼습니다: {why}",
|
|
27
195
|
"gc.empty": "정리할 항목이 없습니다",
|
|
28
196
|
"gc.failed": "정리 후보를 읽지 못했습니다",
|
|
29
197
|
"gc.unknownSize": "크기 알 수 없음",
|
|
@@ -31,8 +199,22 @@ export default {
|
|
|
31
199
|
"gc.ageHours": "{count}시간",
|
|
32
200
|
"gc.ageMinutes": "{count}분",
|
|
33
201
|
"gc.summary": "후보 {count}개 · {bytes}",
|
|
34
|
-
"gc.cleanResult": "정리함 {cleaned}개{failed}{missing}",
|
|
202
|
+
"gc.cleanResult": "정리함 {cleaned}개{failed}{kept}{missing}",
|
|
35
203
|
"gc.failedCount": ", 실패 {count}개",
|
|
204
|
+
"gc.keptCount": ", 규칙이 남긴 항목 {count}개",
|
|
36
205
|
"gc.missingCount": ", 이미 후보가 아닌 항목 {count}개",
|
|
206
|
+
"gc.audit.empty": "아직 정리 기록이 없습니다",
|
|
207
|
+
"gc.audit.failed": "정리 기록을 읽지 못했습니다",
|
|
208
|
+
"gc.audit.error": "검사 실패: {error}",
|
|
209
|
+
"gc.audit.failedLine": "실패: {error}",
|
|
210
|
+
"gc.actor.auto": "자동",
|
|
211
|
+
"gc.actor.operator": "운영자",
|
|
212
|
+
"gc.actor.reconcile": "상태 정리",
|
|
213
|
+
"gc.method.trash": "휴지통으로 옮김",
|
|
214
|
+
"gc.method.deleted": "삭제함",
|
|
215
|
+
"gc.method.sigterm": "프로세스 종료함",
|
|
216
|
+
"gc.method.state": "작업 상태 정리함",
|
|
217
|
+
"gc.method.docker_rmi": "이미지 삭제함",
|
|
218
|
+
"gc.method.git_prune": "worktree 정리함",
|
|
37
219
|
},
|
|
38
220
|
};
|
package/web/i18n/main.js
CHANGED
|
@@ -58,6 +58,8 @@ const STRINGS = [
|
|
|
58
58
|
["profile.editNickname.tip", "Double-click to change your nickname", "더블클릭해서 닉네임 바꾸기"],
|
|
59
59
|
["profile.editAgentName.tip", "Double-click to change the default agent's name", "더블클릭해서 기본 에이전트 이름 바꾸기"],
|
|
60
60
|
["profile.editAgentIcon.tip", "Double-click to change the default agent's icon", "더블클릭해서 기본 에이전트 아이콘 바꾸기"],
|
|
61
|
+
["profile.agentConversation", "Agent", "에이전트"],
|
|
62
|
+
["profile.editAgent.tip", "Double-click to open this agent's settings", "더블클릭해서 이 에이전트 설정 열기"],
|
|
61
63
|
["profile.agentName", "Default agent name", "기본 에이전트 이름"],
|
|
62
64
|
["profile.agentName.tooLong", "The default agent's name is too long: up to {hangul} Korean characters or {ascii} Latin letters. The name was not changed.",
|
|
63
65
|
"기본 에이전트 이름이 너무 깁니다. 한글은 {hangul}자, 영문은 {ascii}자까지 쓸 수 있습니다. 이름을 바꾸지 않았습니다."],
|
|
@@ -84,6 +86,9 @@ const STRINGS = [
|
|
|
84
86
|
["head.loginNotice", "Sign in to your model account", "모델 계정에 로그인하세요"],
|
|
85
87
|
["head.updateNotice.tip", "Open Update in Settings", "설정의 업데이트 열기"],
|
|
86
88
|
["head.newSession", "New session", "새 세션"],
|
|
89
|
+
// Bug 283: while the open agent's definition changed, the same button is the way to apply it and says so.
|
|
90
|
+
["head.newSession.apply", "Apply with new session", "새 세션으로 적용"],
|
|
91
|
+
["head.newSession.confirm.apply", "Open a new session to apply the changed definition? The transcript on screen stays.", "새 세션을 열어 바뀐 정의를 적용할까요? 화면 기록은 남습니다."],
|
|
87
92
|
["head.newSession.tip", "Starts a new engine session for this conversation. The transcript on screen stays.", "이 대화의 엔진 세션을 새로 시작합니다. 화면의 기록은 그대로 남습니다."],
|
|
88
93
|
["head.newSession.confirm", "Start a new engine session for this conversation?\nThe transcript on screen stays, and part of the recent conversation is handed to the new session.",
|
|
89
94
|
"이 대화의 엔진 세션을 새로 시작할까요?\n화면의 기록은 그대로 남고, 최근 대화 일부를 새 세션에 넘겨 줍니다."],
|
|
@@ -445,9 +450,17 @@ const STRINGS = [
|
|
|
445
450
|
["settings.gc.selectAll", "Select all", "전체 선택"],
|
|
446
451
|
["settings.gc.list.label", "Cleanup candidates", "정리 후보"],
|
|
447
452
|
["settings.gc.clean", "Clean the selected items", "선택한 항목 정리"],
|
|
453
|
+
["settings.gc.audit", "View log", "기록 보기"],
|
|
454
|
+
["settings.gc.auditHide", "Hide log", "기록 닫기"],
|
|
455
|
+
["settings.gc.audit.label", "Cleanup log", "정리 기록"],
|
|
448
456
|
["settings.gc.failedHttp", "Cleanup failed: HTTP {status}", "정리 실패: HTTP {status}"],
|
|
449
457
|
["settings.gc.failed", "Cleanup failed: {error}", "정리 실패: {error}"],
|
|
450
458
|
|
|
459
|
+
// Settings: the guided tour section (the tour's own texts are in web/i18n/tour.js)
|
|
460
|
+
["settings.tour.title", "Guided tour", "안내 투어"],
|
|
461
|
+
["settings.tour.note", "Walks through the main parts of the app again in seven steps.", "앱의 주요 기능을 7단계로 다시 안내합니다."],
|
|
462
|
+
["settings.tour.replay", "Show the tour again", "안내 투어 다시 보기"],
|
|
463
|
+
|
|
451
464
|
// Manual dialog (the texts of web/manual.js are in web/i18n/manual.js)
|
|
452
465
|
["manual.title", "Manual", "매뉴얼"],
|
|
453
466
|
["manual.open.tip", "User manual: screens, shortcuts, features", "사용자 매뉴얼: 화면, 단축키, 기능"],
|
|
@@ -455,7 +468,11 @@ const STRINGS = [
|
|
|
455
468
|
["manual.loading", "Loading the manual.", "매뉴얼을 불러오는 중입니다."],
|
|
456
469
|
|
|
457
470
|
// Agents (sidebar, header and dialog)
|
|
458
|
-
|
|
471
|
+
// Bug 283: the header's definition notice is a status text with a visible explanation (the short form on phones).
|
|
472
|
+
["agent.stale.changed", "The definition changed", "정의가 바뀌었습니다"],
|
|
473
|
+
["agent.stale.unknown", "Cannot confirm whether the definition was applied", "정의 적용 여부를 확인할 수 없습니다"],
|
|
474
|
+
["agent.stale.hint", "Press New session to apply the changed definition", "새 세션 버튼을 누르면 바뀐 정의가 적용됩니다"],
|
|
475
|
+
["agent.stale.hint.short", "Apply with New session", "새 세션 버튼으로 적용됩니다"],
|
|
459
476
|
["agent.stale", "Definition changed", "정의 바뀜"],
|
|
460
477
|
["agent.answering", "Answering", "답하는 중"],
|
|
461
478
|
["agent.definitionError", "Error: the agent definition could not be read, so no session was opened. Check the definition in Edit.",
|
|
@@ -479,10 +496,9 @@ const STRINGS = [
|
|
|
479
496
|
["agents.clearOverride", "Clear the override", "덮어쓰기 지우기"],
|
|
480
497
|
["agents.clearOverride.tip", "Clears this definition's value and uses the inherited one", "이 정의의 값을 지우고 상속값을 씁니다"],
|
|
481
498
|
["agents.files", "Knowledge files", "지식 파일"],
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
["agents.sourceFile.label", "
|
|
485
|
-
["agents.sourceUpload", "Upload into source/", "source/에 올리기"],
|
|
499
|
+
// agent-ux todo 15 (bug 285): uploads are saved at once and need no new session; the three blocks are named in web/i18n/agents.js.
|
|
500
|
+
["agents.files.note", "Uploads are saved at once and the agent uses them right away. No new session is needed.", "올리면 바로 저장되고 에이전트가 바로 씁니다. 새 세션은 필요 없습니다."],
|
|
501
|
+
["agents.sourceFile.label", "Files to upload into source/", "source/에 올릴 파일"],
|
|
486
502
|
["agents.defaultsSection", "Shared settings (defaults.md)", "공통 설정 (defaults.md)"],
|
|
487
503
|
["agents.new", "New agent", "새 에이전트"],
|
|
488
504
|
["agents.settingsFor", "Settings · {name}", "설정 · {name}"],
|
|
@@ -495,6 +511,42 @@ const STRINGS = [
|
|
|
495
511
|
["agents.roleInstructions", "Role instructions", "역할 지시문"],
|
|
496
512
|
["agents.roleInstructions.note", "Appended to the end of the system prompt. Describe the role, the tone, what to do and what not to do.",
|
|
497
513
|
"시스템 프롬프트 끝에 붙습니다. 역할, 말투, 해야 할 일과 하지 말아야 할 일을 적습니다."],
|
|
514
|
+
// agent-ux todo 9: the how-to-write guide above the body (its four items are in web/i18n/agents.js) and the example placeholder.
|
|
515
|
+
["agents.roleGuide.title", "How to write role instructions", "역할 지시문 쓰는 법"],
|
|
516
|
+
// agent-ux todo 12: the can/cannot box above the fields (its items are in web/i18n/agents.js).
|
|
517
|
+
["agents.cap.title", "What this agent can and cannot do", "할 수 있는 일과 없는 일"],
|
|
518
|
+
["agents.cap.can", "Can", "할 수 있는 일"],
|
|
519
|
+
["agents.cap.cannot", "Cannot", "할 수 없는 일"],
|
|
520
|
+
["agents.cap.loading", "Checking what this agent can do…", "할 수 있는 일을 확인하는 중입니다…"],
|
|
521
|
+
["agents.cap.unavailable", "The settings cannot be read, so there is no preview.", "설정을 읽을 수 없어 미리 볼 수 없습니다."],
|
|
522
|
+
["agents.cap.failed", "Could not reach the gateway, so the current settings have no preview. They are checked again on the next change.", "게이트웨이에 연결하지 못해 지금 설정을 미리 볼 수 없습니다. 다음 변경 때 다시 확인합니다."],
|
|
523
|
+
// agent-ux todo 11: the create screen's draft autosave and the list screen's drafts.
|
|
524
|
+
["agents.draft.note", "Saved on the gateway as a draft while you type. Reopen it from the list, also from another device.", "쓰는 동안 게이트웨이에 임시 저장됩니다. 목록에서 다시 불러올 수 있고, 다른 기기에서도 됩니다."],
|
|
525
|
+
["agents.draft.saving", "Saving the draft…", "임시 저장 중…"],
|
|
526
|
+
["agents.draft.saved", "Draft saved · {time}", "임시 저장됨 · {time}"],
|
|
527
|
+
["agents.draft.failed", "The draft could not be saved: {reason}. What you typed is still here.", "임시 저장하지 못했습니다: {reason}. 쓴 내용은 그대로 있습니다."],
|
|
528
|
+
["agents.draft.loaded", "Draft reopened. It keeps saving while you type.", "만들던 내용을 불러왔습니다. 쓰는 동안 계속 임시 저장됩니다."],
|
|
529
|
+
["agents.draft.files", "Files picked before: {names} — pick them again.", "이전에 고른 파일: {names} — 다시 골라 주세요."],
|
|
530
|
+
["agents.draft.open", "Reopen a draft ({count})", "만들던 내용 불러오기 ({count})"],
|
|
531
|
+
["agents.draft.unnamed", "Unnamed", "이름 없음"],
|
|
532
|
+
["agents.draft.savedAt", "Saved {time}", "저장 {time}"],
|
|
533
|
+
["agents.draft.load", "Reopen", "불러오기"],
|
|
534
|
+
["agents.draft.discard", "Discard", "버리기"],
|
|
535
|
+
["agents.draft.discard.confirm", "Discard this draft? It cannot be reopened afterwards.", "이 임시 저장을 버릴까요? 버린 뒤에는 다시 불러올 수 없습니다."],
|
|
536
|
+
["agents.draft.discarded", "The draft was discarded", "임시 저장을 버렸습니다"],
|
|
537
|
+
// agent-ux todo 10: the allowed-skills check list (its rows come from web/agents.js skillOptions).
|
|
538
|
+
["agents.skills.loading", "Loading the installed skills…", "설치된 스킬 목록을 불러오는 중입니다…"],
|
|
539
|
+
["agents.skills.loadFailed", "The skill list could not be loaded.", "스킬 목록을 불러오지 못했습니다."],
|
|
540
|
+
["agents.skills.retry", "Try again", "다시 시도"],
|
|
541
|
+
["agents.skills.keep", "The saved values below are kept as they are when you save.", "아래의 저장된 값은 저장할 때 그대로 유지됩니다."],
|
|
542
|
+
["agents.skills.notInstalled", "not installed", "설치되지 않음"],
|
|
543
|
+
["agents.skills.notInstalled.tip", "This skill is in the saved value but is not installed in the engine. Saving keeps it; uncheck it to remove it.", "저장된 값에는 있지만 엔진에 설치되지 않은 스킬입니다. 저장하면 그대로 남고, 체크를 풀면 빠집니다."],
|
|
544
|
+
["agents.skills.search", "Search skills", "스킬 검색"],
|
|
545
|
+
["agents.skills.none", "No skills are installed.", "설치된 스킬이 없습니다."],
|
|
546
|
+
["agents.skills.noMatch", "No skill matches.", "일치하는 스킬이 없습니다."],
|
|
547
|
+
["agents.roleInstructions.placeholder",
|
|
548
|
+
"Scope: act as the interviewer of the company the user applies to and run mock interviews.\nTasks: ask one question, rate the answer, then save the result to outputs/interview-result.md.\nNot to do: never invent facts that are not in the résumé.\nForm of address: call the user \"candidate\".",
|
|
549
|
+
"담당 범위: 지원 회사의 면접관 역할로 모의 면접을 진행합니다.\n할 일: 질문 하나 → 답변 평가 → 결과를 outputs/면접-결과.md에 저장합니다.\n하지 않을 일: 이력서에 없는 사실을 지어내지 않습니다.\n호칭: 사용자를 지원자님이라고 부르세요."],
|
|
498
550
|
["agents.rawSection", "Other settings (raw YAML)", "기타 설정 (원문 YAML)"],
|
|
499
551
|
["agents.raw.note", "Items not in the registry appear here as written and are saved as they are.", "등록표에 없는 항목은 여기에 원문 그대로 보이고, 저장할 때도 그대로 둡니다."],
|
|
500
552
|
["agents.raw.label", "Other settings, raw YAML", "기타 설정 원문 YAML"],
|
|
@@ -502,19 +554,39 @@ const STRINGS = [
|
|
|
502
554
|
["agents.deleteName.label", "Type the agent's name again to delete it", "삭제할 에이전트 이름 다시 입력"],
|
|
503
555
|
["agents.notSaved", "Not saved. Fix the marked items", "저장하지 않았습니다. 표시된 항목을 고치세요"],
|
|
504
556
|
["agents.defaultsSaved", "Shared defaults saved. Open sessions stay as they are; applies from the next session", "공통 기본값을 저장했습니다. 열린 세션은 그대로이고 새 세션부터 적용됩니다"],
|
|
505
|
-
|
|
557
|
+
// agent-ux todo 13 (bug 285): the save line says what really happened; an open session keeps the previous definition until a new one.
|
|
558
|
+
["agents.saved", "Saved. Open sessions use the previous definition.", "저장했습니다. 열린 세션은 이전 정의를 씁니다."],
|
|
559
|
+
["agents.saved.next", "Saved. It applies from the next session.", "저장했습니다. 다음 세션부터 적용됩니다."],
|
|
560
|
+
["agents.saved.unchanged", "Nothing changed in the definition.", "바뀐 정의가 없습니다."],
|
|
506
561
|
["agents.created", "\"{name}\" was created", "\"{name}\"을(를) 만들었습니다"],
|
|
507
562
|
["agents.created.line", "Agent \"{name}\" was created. Its session opens with the first message.", "에이전트 \"{name}\"을(를) 만들었습니다. 첫 메시지를 보내면 세션이 열립니다."],
|
|
508
563
|
["agents.archived", "\"{name}\" was moved to the archive. It can be restored within 30 days", "\"{name}\"을(를) 보관함으로 옮겼습니다. 30일 안에 되살릴 수 있습니다"],
|
|
509
564
|
["agents.restored", "\"{name}\" was restored", "\"{name}\"을(를) 되살렸습니다"],
|
|
510
565
|
["agents.restore", "Restore", "되살리기"],
|
|
566
|
+
// Archive restore conflict (agent-ux todo 22): the entry's id is live again, so the row offers a restore under a new id.
|
|
567
|
+
["agents.restore.conflict", "An agent with the same ID ({id}) already exists, so this entry cannot be restored as it is. This happens when the same agent was deleted twice and one copy was restored. Restoring under a new ID keeps both.", "같은 ID({id})의 에이전트가 이미 있어 그대로 되살릴 수 없습니다. 같은 에이전트를 두 번 지운 뒤 하나를 되살린 경우에 생깁니다. 새 ID로 되살리면 둘 다 남습니다."],
|
|
568
|
+
["agents.restore.newId", "Restore under a new ID", "새 ID로 되살리기"],
|
|
569
|
+
["agents.restored.newId", "Restored under a new ID: {name}", "새 ID로 되살렸습니다: {name}"],
|
|
570
|
+
["agents.restore.newId.failed", "Could not restore under a new ID: {reason}", "새 ID로 되살리지 못했습니다: {reason}"],
|
|
511
571
|
["agents.deletedAt", " · deleted {time}", " · 삭제 {time}"],
|
|
512
|
-
["agents.pickFile", "Choose a file to upload", "올릴 파일을 고르세요"],
|
|
513
|
-
["agents.uploaded", "source/{name} uploaded ({size})", "source/{name} 올림 ({size})"],
|
|
514
572
|
|
|
515
573
|
// Event panel
|
|
516
574
|
["dev.title", "Events", "이벤트"],
|
|
517
575
|
["dev.clear", "Clear", "지우기"],
|
|
576
|
+
// Agent tool permissions (294 item 9): the tab picker of the inbox card and the confirmation session notes.
|
|
577
|
+
["toolGrant.targets", "Choose the target tab", "대상 탭 선택"],
|
|
578
|
+
["toolGrant.pickTab", "Choose the tab to read", "읽을 탭을 골라 주세요"],
|
|
579
|
+
["toolGrant.loadTabs", "Load open tabs", "열린 탭 불러오기"],
|
|
580
|
+
["toolGrant.reloadTabs", "Reload", "다시 불러오기"],
|
|
581
|
+
["toolGrant.tabsEmpty", "No open tab can be chosen. Open the tab to read first.", "열린 탭 중 지정할 수 있는 탭이 없습니다. 읽을 탭을 먼저 열어 주세요."],
|
|
582
|
+
["toolGrant.suggested", "Suggested", "추천"],
|
|
583
|
+
["toolGrant.tabsUnsupported", "This gateway version cannot list open tabs yet.", "이 게이트웨이 버전은 아직 열린 탭 목록을 가져올 수 없습니다."],
|
|
584
|
+
["toolGrant.tabsFailed", "Could not load the open tabs. Try again.", "열린 탭을 불러오지 못했습니다. 다시 시도해 주세요."],
|
|
585
|
+
["toolGrant.tabChosen", "The tab was set. Now allow this scope.", "탭을 지정했습니다. 이제 이 범위를 허용해 주세요."],
|
|
586
|
+
["toolGrant.tabConflict", "The request changed while choosing. Check the latest content and choose again.", "선택하는 사이 요청이 바뀌었습니다. 최신 내용을 확인한 뒤 다시 골라 주세요."],
|
|
587
|
+
["toolGrant.pickTabFirst", "Choose the tab first.", "먼저 탭을 골라 주세요."],
|
|
588
|
+
["toolGrant.clientUnavailable", "Tool access cannot be confirmed from this screen. Use the web screen opened directly at the gateway address.", "이 화면에서는 도구 권한을 확인할 수 없습니다. 게이트웨이 주소로 직접 연 웹 화면에서 확인해 주세요."],
|
|
589
|
+
["toolGrant.clientOffline", "Could not reach the gateway for the confirmation session. The answer was not sent.", "확인 세션을 받기 위한 게이트웨이 연결에 실패했습니다. 답은 보내지 않았습니다."],
|
|
518
590
|
];
|
|
519
591
|
|
|
520
592
|
const en = {};
|
package/web/i18n/tour.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// The texts of web/tour.js (plan agent-ux todo 23, the first-run tour): one sentence per step, the bubble's hint line,
|
|
2
|
+
// its buttons and the dialog name. The settings section that replays the tour is static in index.html, so its keys live
|
|
3
|
+
// in web/i18n/main.js. `{name}` is the agent's (gateway main's) display name; `{n}` and `{total}` are the step numbers.
|
|
4
|
+
export default {
|
|
5
|
+
en: {
|
|
6
|
+
"tour.label": "App tour",
|
|
7
|
+
"tour.count": "{n}/{total}",
|
|
8
|
+
"tour.skip": "Skip",
|
|
9
|
+
"tour.next": "Next",
|
|
10
|
+
"tour.hint.input": "Type one character to go on; nothing is sent.",
|
|
11
|
+
"tour.hint.click": "Click the highlighted part to go on.",
|
|
12
|
+
"tour.hint.next": "Press Next; the real button is not pressed now.",
|
|
13
|
+
"tour.step.input": "Type here and {name} answers.",
|
|
14
|
+
"tour.step.sidebar": "The list on the left holds the main conversation and the agent conversations.",
|
|
15
|
+
"tour.step.newSession": "New session starts a fresh engine session for this conversation.",
|
|
16
|
+
"tour.step.inbox": "The inbox collects the questions and approval requests waiting for your answer.",
|
|
17
|
+
"tour.step.agents": "The Agents button creates and manages agents.",
|
|
18
|
+
"tour.step.agentCreate": "+ Agent makes a new agent from a name and knowledge files.",
|
|
19
|
+
"tour.step.settings": "Settings holds the language, updates and device enrollment, and shows this tour again.",
|
|
20
|
+
},
|
|
21
|
+
ko: {
|
|
22
|
+
"tour.label": "앱 안내 투어",
|
|
23
|
+
"tour.count": "{n}/{total}",
|
|
24
|
+
"tour.skip": "건너뛰기",
|
|
25
|
+
"tour.next": "다음",
|
|
26
|
+
"tour.hint.input": "글자를 하나 쓰면 다음으로 넘어갑니다. 보내지는 않습니다.",
|
|
27
|
+
"tour.hint.click": "강조된 곳을 누르면 다음으로 넘어갑니다.",
|
|
28
|
+
"tour.hint.next": "다음을 누르세요. 실제 버튼은 지금 눌리지 않습니다.",
|
|
29
|
+
"tour.step.input": "여기에 말을 쓰면 {name} 답합니다.",
|
|
30
|
+
"tour.step.sidebar": "왼쪽 목록에서 main 대화와 에이전트 대화를 고릅니다.",
|
|
31
|
+
"tour.step.newSession": "새 세션은 이 대화의 엔진 세션을 새로 시작합니다.",
|
|
32
|
+
"tour.step.inbox": "확인함에는 답을 기다리는 질문과 승인 요청이 모입니다.",
|
|
33
|
+
"tour.step.agents": "에이전트 버튼에서 에이전트를 만들고 관리합니다.",
|
|
34
|
+
"tour.step.agentCreate": "+ 에이전트를 누르면 이름과 지식 파일로 새 에이전트를 만듭니다.",
|
|
35
|
+
"tour.step.settings": "설정에서 언어·업데이트·기기 등록을 다루고, 이 투어도 다시 볼 수 있습니다.",
|
|
36
|
+
},
|
|
37
|
+
};
|
package/web/index.html
CHANGED
|
@@ -60,7 +60,11 @@
|
|
|
60
60
|
<div class="agent-head" id="agent-head" hidden>
|
|
61
61
|
<span class="agent-head-icon" id="agent-head-icon" aria-hidden="true"></span>
|
|
62
62
|
<span class="agent-head-name" id="agent-head-name"></span>
|
|
63
|
-
<
|
|
63
|
+
<span class="agent-stale-status" id="agent-stale" role="status" hidden>
|
|
64
|
+
<span class="agent-stale-line"><span class="agent-stale-icon" aria-hidden="true">⚠</span><span class="agent-stale-text" id="agent-stale-text" data-i18n="agent.stale.changed">The definition changed</span></span>
|
|
65
|
+
<span class="agent-stale-hint" data-i18n="agent.stale.hint">Press New session to apply the changed definition</span>
|
|
66
|
+
<span class="agent-stale-hint short" data-i18n="agent.stale.hint.short">Apply with New session</span>
|
|
67
|
+
</span>
|
|
64
68
|
</div>
|
|
65
69
|
<span class="chat-sub" id="conv-thread"></span>
|
|
66
70
|
<span class="transition-status" id="session-transition" role="status" aria-live="polite" data-i18n="head.sessionTransition" hidden>Switching session</span>
|
|
@@ -104,10 +108,14 @@
|
|
|
104
108
|
<span class="ref-note" id="ref-note" role="status" aria-live="polite"></span>
|
|
105
109
|
</div>
|
|
106
110
|
<div class="attach-tray" id="attach-tray" hidden></div>
|
|
111
|
+
<ul id="document-tray" class="document-list" aria-live="polite"></ul>
|
|
112
|
+
<div id="document-note" class="host-file-status" role="status" aria-live="polite"></div>
|
|
107
113
|
<form class="composer" id="composer">
|
|
114
|
+
<section id="host-file-menu" class="host-file-menu" hidden></section>
|
|
108
115
|
<div class="slash-menu" id="slash-menu" role="listbox" data-i18n-attr="aria-label:slash.label" hidden></div>
|
|
109
116
|
<button type="button" class="mic" id="toggle-memo" data-i18n="memo.title" data-i18n-attr="title:memo.toggle.tip" aria-pressed="false">Memo</button>
|
|
110
117
|
<button type="button" class="mic" id="attach" data-i18n="attach.button" data-i18n-attr="title:attach.tip">Image</button>
|
|
118
|
+
<button type="button" class="mic" id="host-files" disabled>Mac files</button>
|
|
111
119
|
<input type="file" id="attach-input" accept="image/png,image/jpeg,image/gif,image/webp" multiple hidden>
|
|
112
120
|
<button type="button" class="mic" id="mic" data-tip-keep data-i18n-tip="composer.mic.tip">Mic</button>
|
|
113
121
|
<textarea id="input" rows="1" data-i18n-attr="placeholder:composer.placeholder;title:composer.input.tip"></textarea>
|
|
@@ -142,6 +150,11 @@
|
|
|
142
150
|
</div>
|
|
143
151
|
<p class="update-note" id="language-description" data-i18n="settings.language.note">Applies to the web UI and the app of this gateway. The manual opens in this language too.</p>
|
|
144
152
|
</section>
|
|
153
|
+
<section class="settings-section tour-settings" id="tour-settings" aria-labelledby="tour-title">
|
|
154
|
+
<div class="section-label"><span id="tour-title" data-i18n="settings.tour.title">Guided tour</span></div>
|
|
155
|
+
<p class="update-note" data-i18n="settings.tour.note">Walks through the main parts of the app again in seven steps.</p>
|
|
156
|
+
<div class="update-buttons"><button type="button" class="text-btn" id="tour-replay" data-i18n="settings.tour.replay">Show the tour again</button></div>
|
|
157
|
+
</section>
|
|
145
158
|
<section class="settings-section update" id="update" aria-labelledby="update-title">
|
|
146
159
|
<div class="section-label"><span id="update-title" data-i18n="settings.update.title">Update</span></div>
|
|
147
160
|
<p class="update-line" id="update-current"></p>
|
|
@@ -255,7 +268,8 @@
|
|
|
255
268
|
<div class="section-label"><span id="gc-title" data-i18n="settings.gc.title">Cleanup</span><span class="gc-head"><span class="gc-summary" id="gc-summary" role="status" aria-live="polite"></span><label class="gc-all" id="gc-all-label" hidden><input type="checkbox" id="gc-all"><span data-i18n="settings.gc.selectAll">Select all</span></label></span></div>
|
|
256
269
|
<ul class="gc-list" id="gc-list" data-i18n-attr="aria-label:settings.gc.list.label"></ul>
|
|
257
270
|
<p class="gc-message" id="gc-message" role="status" aria-live="polite"></p>
|
|
258
|
-
<div class="gc-actions"><button type="button" class="text-btn" id="gc-clean" disabled data-i18n="settings.gc.clean">Clean the selected items</button></div>
|
|
271
|
+
<div class="gc-actions"><button type="button" class="text-btn" id="gc-audit" aria-expanded="false" aria-controls="gc-audit-list" data-i18n="settings.gc.audit">View log</button><button type="button" class="text-btn" id="gc-clean" disabled data-i18n="settings.gc.clean">Clean the selected items</button></div>
|
|
272
|
+
<ul class="gc-audit" id="gc-audit-list" data-i18n-attr="aria-label:settings.gc.audit.label" hidden></ul>
|
|
259
273
|
</section>
|
|
260
274
|
</div>
|
|
261
275
|
</div>
|
|
@@ -271,7 +285,10 @@
|
|
|
271
285
|
</nav>
|
|
272
286
|
<button type="button" class="icon-btn settings-close" id="agents-close" data-i18n-attr="aria-label:agents.close;title:common.closeEsc">×</button>
|
|
273
287
|
</header>
|
|
274
|
-
<
|
|
288
|
+
<div class="agents-status-row">
|
|
289
|
+
<p class="agents-status" id="agents-status" role="status" aria-live="polite"></p>
|
|
290
|
+
<button type="button" class="text-btn attention agents-apply-now" id="agents-apply-now" data-i18n="agents.apply.now" hidden>Apply now</button>
|
|
291
|
+
</div>
|
|
275
292
|
<div class="settings-body agents-body" id="agents-body"></div>
|
|
276
293
|
</div>
|
|
277
294
|
</aside>
|
package/web/profile.d.ts
CHANGED
|
@@ -28,9 +28,9 @@ export type AgentRow = {
|
|
|
28
28
|
querySelector(selectors: ".bot-avatar"): AvatarElement | null;
|
|
29
29
|
querySelector(selectors: string): unknown;
|
|
30
30
|
};
|
|
31
|
-
export function renderAgentAvatar(avatar: AvatarElement, iconUrl: string | null | undefined): void;
|
|
31
|
+
export function renderAgentAvatar(avatar: AvatarElement, iconUrl: string | null | undefined, iconText?: string | null): void;
|
|
32
32
|
export function nameAgentRows(rows: Iterable<AgentRow>, agentName: string): void;
|
|
33
|
-
export function iconAgentRows(rows: Iterable<AgentRow>, iconUrl: string | null | undefined): void;
|
|
33
|
+
export function iconAgentRows(rows: Iterable<AgentRow>, iconUrl: string | null | undefined, iconText?: string | null): void;
|
|
34
34
|
export function editNickname(
|
|
35
35
|
nameEl: HTMLElement,
|
|
36
36
|
current: string,
|
package/web/profile.js
CHANGED
|
@@ -83,10 +83,15 @@ export function writeAgentName(storage, value) {
|
|
|
83
83
|
export const DEFAULT_AGENT_AVATAR = "zigmini-profile.svg";
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
|
-
* Draws the agent's chat avatar into [avatar]:
|
|
87
|
-
*
|
|
86
|
+
* Draws the agent's chat avatar into [avatar]: a custom agent's text icon [iconText] (its emoji or first letter, bug 284)
|
|
87
|
+
* when there is one, else the gateway icon image at [iconUrl], else the default Zig picture. An image already showing
|
|
88
|
+
* that source is kept as it is (no reload); a different source replaces it; a text icon replaces the image and back.
|
|
88
89
|
*/
|
|
89
|
-
export function renderAgentAvatar(avatar, iconUrl) {
|
|
90
|
+
export function renderAgentAvatar(avatar, iconUrl, iconText = null) {
|
|
91
|
+
if (iconText) {
|
|
92
|
+
if (avatar.textContent !== iconText) avatar.textContent = iconText;
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
90
95
|
const src = iconUrl || DEFAULT_AGENT_AVATAR;
|
|
91
96
|
let img = avatar.querySelector("img");
|
|
92
97
|
if (!img) {
|
|
@@ -108,11 +113,11 @@ export function nameAgentRows(rows, agentName) {
|
|
|
108
113
|
}
|
|
109
114
|
}
|
|
110
115
|
|
|
111
|
-
/** Redraws the avatar of the agent's rows already drawn ([rows])
|
|
112
|
-
export function iconAgentRows(rows, iconUrl) {
|
|
116
|
+
/** Redraws the avatar of the agent's rows already drawn ([rows]): the text icon [iconText] when given, else the icon at [iconUrl] (null: the default picture). */
|
|
117
|
+
export function iconAgentRows(rows, iconUrl, iconText = null) {
|
|
113
118
|
for (const row of rows) {
|
|
114
119
|
const avatar = row.querySelector(".bot-avatar");
|
|
115
|
-
if (avatar) renderAgentAvatar(avatar, iconUrl);
|
|
120
|
+
if (avatar) renderAgentAvatar(avatar, iconUrl, iconText);
|
|
116
121
|
}
|
|
117
122
|
}
|
|
118
123
|
|