@yoooclaw/phone-notifications 1.12.4 → 1.12.5
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.md +3 -0
- package/dist/apns/sender.d.ts.map +1 -1
- package/dist/auth/credentials.d.ts.map +1 -1
- package/dist/bin/ntf.cjs +2572 -785
- package/dist/bin/ntf.cjs.map +56 -48
- package/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/doctor/check-credentials.d.ts.map +1 -1
- package/dist/cli/doctor/check-dangerous-flags.d.ts.map +1 -1
- package/dist/cli/doctor/check-local-gateway.d.ts.map +1 -1
- package/dist/cli/doctor/check-node-version.d.ts.map +1 -1
- package/dist/cli/doctor/check-plugin-version.d.ts.map +1 -1
- package/dist/cli/doctor/check-state-dir-perms.d.ts.map +1 -1
- package/dist/cli/doctor/check-tool-policy.d.ts.map +1 -1
- package/dist/cli/doctor/check-trusted-proxy.d.ts.map +1 -1
- package/dist/cli/doctor/check-tunnel.d.ts.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/env.d.ts.map +1 -1
- package/dist/cli/helpers.d.ts +7 -2
- package/dist/cli/helpers.d.ts.map +1 -1
- package/dist/cli/image-list.d.ts.map +1 -1
- package/dist/cli/image-path.d.ts.map +1 -1
- package/dist/cli/image-status.d.ts.map +1 -1
- package/dist/cli/image-storage-path.d.ts.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/light-send.d.ts.map +1 -1
- package/dist/cli/light-setup-tools.d.ts.map +1 -1
- package/dist/cli/log-search.d.ts.map +1 -1
- package/dist/cli/ntf-monitor.d.ts.map +1 -1
- package/dist/cli/ntf-query.d.ts.map +1 -1
- package/dist/cli/ntf-search.d.ts.map +1 -1
- package/dist/cli/ntf-stats.d.ts.map +1 -1
- package/dist/cli/ntf-storage-path.d.ts.map +1 -1
- package/dist/cli/ntf-summary-job.d.ts.map +1 -1
- package/dist/cli/ntf-summary.d.ts.map +1 -1
- package/dist/cli/ntf-sync.d.ts.map +1 -1
- package/dist/cli/rec-list.d.ts.map +1 -1
- package/dist/cli/rec-setup.d.ts.map +1 -1
- package/dist/cli/rec-status.d.ts.map +1 -1
- package/dist/cli/rec-storage-path.d.ts.map +1 -1
- package/dist/cli/tunnel-status.d.ts.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/env.d.ts +2 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/i18n/index.d.ts +8 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/locale.d.ts +39 -0
- package/dist/i18n/locale.d.ts.map +1 -0
- package/dist/i18n/manifest-locale.d.ts +12 -0
- package/dist/i18n/manifest-locale.d.ts.map +1 -0
- package/dist/i18n/messages/en-US.d.ts +666 -0
- package/dist/i18n/messages/en-US.d.ts.map +1 -0
- package/dist/i18n/messages/index.d.ts +5 -0
- package/dist/i18n/messages/index.d.ts.map +1 -0
- package/dist/i18n/messages/zh-CN.d.ts +666 -0
- package/dist/i18n/messages/zh-CN.d.ts.map +1 -0
- package/dist/i18n/messages/zh-TW.d.ts +3 -0
- package/dist/i18n/messages/zh-TW.d.ts.map +1 -0
- package/dist/i18n/response-locale.d.ts +33 -0
- package/dist/i18n/response-locale.d.ts.map +1 -0
- package/dist/i18n/skills-path.d.ts +16 -0
- package/dist/i18n/skills-path.d.ts.map +1 -0
- package/dist/i18n/translate.d.ts +10 -0
- package/dist/i18n/translate.d.ts.map +1 -0
- package/dist/image/handler.d.ts.map +1 -1
- package/dist/image/store.d.ts.map +1 -1
- package/dist/index.cjs +5634 -3455
- package/dist/index.cjs.map +90 -81
- package/dist/index.d.ts.map +1 -1
- package/dist/light/protocol.d.ts.map +1 -1
- package/dist/light/repeat.d.ts.map +1 -1
- package/dist/light/sender.d.ts.map +1 -1
- package/dist/light/validators.d.ts +1 -1
- package/dist/light/validators.d.ts.map +1 -1
- package/dist/light-rules/client.d.ts.map +1 -1
- package/dist/light-rules/inline-evaluator.d.ts.map +1 -1
- package/dist/light-rules/pi-invoker.d.ts.map +1 -1
- package/dist/light-rules/registry.d.ts.map +1 -1
- package/dist/light-rules/storage.d.ts.map +1 -1
- package/dist/notification/app-name-map.d.ts +12 -0
- package/dist/notification/app-name-map.d.ts.map +1 -1
- package/dist/notification/storage.d.ts.map +1 -1
- package/dist/notification/summary.d.ts.map +1 -1
- package/dist/plugin/auto-update.d.ts.map +1 -1
- package/dist/plugin/cli.d.ts.map +1 -1
- package/dist/plugin/images.d.ts.map +1 -1
- package/dist/plugin/lifecycle.d.ts.map +1 -1
- package/dist/plugin/light-control.d.ts.map +1 -1
- package/dist/plugin/light-rules-tools.d.ts.map +1 -1
- package/dist/plugin/locale.d.ts +30 -0
- package/dist/plugin/locale.d.ts.map +1 -0
- package/dist/plugin/notifications.d.ts.map +1 -1
- package/dist/plugin/ntf-bin.d.ts.map +1 -1
- package/dist/plugin/recordings.d.ts.map +1 -1
- package/dist/plugin/system.d.ts.map +1 -1
- package/dist/profile/auth/base-apikey.d.ts.map +1 -1
- package/dist/profile/auth/jvsclaw.d.ts.map +1 -1
- package/dist/recording/downloader.d.ts.map +1 -1
- package/dist/recording/result-writer.d.ts.map +1 -1
- package/dist/recording/state-machine.d.ts.map +1 -1
- package/dist/recording/storage.d.ts.map +1 -1
- package/dist/tunnel/frame-slimmer.d.ts.map +1 -1
- package/dist/tunnel/gateway-target.d.ts.map +1 -1
- package/dist/tunnel/messages.d.ts +11 -0
- package/dist/tunnel/messages.d.ts.map +1 -0
- package/dist/tunnel/relay-client.d.ts +1 -0
- package/dist/tunnel/relay-client.d.ts.map +1 -1
- package/dist/tunnel/service.d.ts +2 -0
- package/dist/tunnel/service.d.ts.map +1 -1
- package/dist/tunnel/status.d.ts.map +1 -1
- package/dist/tunnel/types.d.ts +2 -0
- package/dist/tunnel/types.d.ts.map +1 -1
- package/dist/types.d.ts +26 -15
- package/dist/types.d.ts.map +1 -1
- package/dist/update/executor.d.ts.map +1 -1
- package/dist/update/index.d.ts.map +1 -1
- package/dist/update/restart.d.ts.map +1 -1
- package/dist/update/stale-runtime.d.ts.map +1 -1
- package/openclaw.plugin.json +9 -0
- package/package.json +1 -1
- package/skills/notification-monitor/SKILL.md +115 -84
- package/skills/notification-monitor/references/README.md +15 -19
- package/skills/notification-query/SKILL.md +125 -97
- package/skills/notification-query/references/statistics.md +74 -78
- package/skills/notification-to-memory/SKILL.md +78 -47
- package/skills/notification-to-memory/references/write-memory-lancedb-plugin.md +34 -32
- package/skills/notification-to-memory/references/write-memory-openclaw-native.md +29 -27
- package/skills/recording-entity-extraction/SKILL.md +102 -65
- package/skills/recording-interview/SKILL.md +105 -69
- package/skills/recording-meeting-minutes/SKILL.md +88 -51
- package/skills/recording-mindmap/SKILL.md +125 -91
- package/skills/recording-query/SKILL.md +98 -64
- package/skills/recording-translation/SKILL.md +108 -71
- package/skills/yoooclaw-faq/SKILL.md +105 -73
|
@@ -0,0 +1,666 @@
|
|
|
1
|
+
export declare const enUS: {
|
|
2
|
+
readonly "cli.ntf.description": "Phone notification data management";
|
|
3
|
+
readonly "cli.ntf.version": "Show plugin version";
|
|
4
|
+
readonly "plugin.registration.call": "register() called: registrationMode={registrationMode} cliInvocation={cliInvocation}";
|
|
5
|
+
readonly "plugin.registration.cli_registered": "CLI commands registered: ntf, phone-notifications";
|
|
6
|
+
readonly "plugin.registration.cli_only": "Plugin CLI invocation detected; registered CLI commands only and skipped background services to avoid disrupting the persistent Relay tunnel connection";
|
|
7
|
+
readonly "plugin.ntf_bin.target_missing": "ntf wrapper target does not exist: {path}; skipped";
|
|
8
|
+
readonly "plugin.ntf_bin.visibility.immediate": "available immediately";
|
|
9
|
+
readonly "plugin.ntf_bin.visibility.needs_path": "PATH update required";
|
|
10
|
+
readonly "plugin.ntf_bin.registered": "Standalone ntf command registered: {path} -> {target} ({label}, {visibility})";
|
|
11
|
+
readonly "plugin.ntf_bin.path_hint": "If the ntf command is not available yet, add its directory to PATH: export PATH=\"{dir}:$PATH\"";
|
|
12
|
+
readonly "plugin.ntf_bin.register_failed": "Failed to register standalone ntf command: {failures}";
|
|
13
|
+
readonly "plugin.ntf_bin.no_install_dir": "no usable installation directory";
|
|
14
|
+
readonly "plugin.ntf_bin.candidate.node": "next to node";
|
|
15
|
+
readonly "plugin.ntf_bin.candidate.host": "next to host CLI ({name})";
|
|
16
|
+
readonly "plugin.ntf_bin.candidate.path": "PATH directory";
|
|
17
|
+
readonly "plugin.ntf_bin.candidate.fallback": "stateDir/bin fallback";
|
|
18
|
+
readonly "plugin.ntf_bin.mkdir_failed": "Failed to create {dir}: {error}";
|
|
19
|
+
readonly "plugin.ntf_bin.target_occupied": "{path} already exists; refusing to overwrite it";
|
|
20
|
+
readonly "plugin.ntf_bin.write_failed": "Failed to write {path}: {error}";
|
|
21
|
+
readonly "plugin.tunnel.auth_not_ready": "Relay tunnel authentication is not ready ({reason}, credentials={path}); skipping connection. Run ntf auth set-api-key <apiKey>";
|
|
22
|
+
readonly "plugin.tunnel.invalid_gateway_env": "Ignoring invalid {key}={value}";
|
|
23
|
+
readonly "auth.jvsclaw.skip_missing_secret": "jvsclaw auth: apiKey already exists and link_secret was not found; skipping exchange";
|
|
24
|
+
readonly "auth.jvsclaw.skip_unchanged_secret": "jvsclaw auth: apiKey already exists and link_secret is unchanged; skipping exchange";
|
|
25
|
+
readonly "auth.jvsclaw.exchange_succeeded": "jvsclaw auth: instance/ready API key exchange succeeded (attempt {attempt})";
|
|
26
|
+
readonly "auth.jvsclaw.exchange_fatal": "jvsclaw auth: exchange failed with an unrecoverable error (code={code}): {message}; stopping retries";
|
|
27
|
+
readonly "auth.jvsclaw.exchange_retry": "jvsclaw auth: exchange failed (attempt {attempt}): {message}; retrying in {delayMs}ms";
|
|
28
|
+
readonly "auth.jvsclaw.retry_aborted": "jvsclaw auth: exchange retries aborted because the plugin is stopping";
|
|
29
|
+
readonly "auth.jvsclaw.link_secret_missing": "link_secret was not found in {path} (path: plugins.entries.phone-notifications.config.link_secret)";
|
|
30
|
+
readonly "auth.jvsclaw.ready_url_missing": "The instance/ready endpoint URL is empty; check the host configuration";
|
|
31
|
+
readonly "auth.jvsclaw.ready_response_error": "instance/ready returned code={code} msg={message}";
|
|
32
|
+
readonly "auth.jvsclaw.api_key_missing": "The instance/ready response did not include an apiKey";
|
|
33
|
+
readonly "update.stale.log.detected": "Plugin update is not active: {diskVersion} is installed on disk, but the process is still running {runningVersion}. In-process host restarts do not reload plugin code; fully restart the openclaw process.";
|
|
34
|
+
readonly "update.stale.log.config_failed": "Failed to read configuration during stale-runtime check: {error}";
|
|
35
|
+
readonly "update.stale.log.restart_triggered": "Triggered a full gateway restart to load plugin {diskVersion}: {command}";
|
|
36
|
+
readonly "update.stale.log.restart_failed": "Automatic full restart failed ({error}); fully restart the openclaw process manually to load {diskVersion}";
|
|
37
|
+
readonly "update.stale.log.restart_scheduled": "A full gateway restart (openclaw gateway restart) will be attempted in {seconds}s to load {diskVersion}";
|
|
38
|
+
readonly "storage.notifications.state_path": "Notifications will be stored under stateDir: {path}";
|
|
39
|
+
readonly "storage.notifications.fallback": "stateDir is unavailable; notifications will use the workspace path: {path}";
|
|
40
|
+
readonly "storage.notifications.corrupt_quarantined": "The notifications file was corrupted and moved to {path}; notifications for the day will restart from an empty file";
|
|
41
|
+
readonly "storage.notifications.corrupt_failed": "The notifications file is corrupted and could not be quarantined; later writes may overwrite it: {path}";
|
|
42
|
+
readonly "storage.recordings.state_path": "Recordings will be stored under stateDir: {path}";
|
|
43
|
+
readonly "storage.recordings.fallback": "stateDir is unavailable; recordings will use the workspace path: {path}";
|
|
44
|
+
readonly "storage.recordings.corrupt_quarantined": "The recordings index was corrupted and moved to {path}; an empty index was rebuilt";
|
|
45
|
+
readonly "storage.recordings.corrupt_failed": "The recordings index is corrupted and could not be quarantined; an empty index was rebuilt: {path}";
|
|
46
|
+
readonly "storage.images.state_path": "Images will be stored under stateDir: {path}";
|
|
47
|
+
readonly "storage.images.fallback": "stateDir is unavailable; images will use the workspace path: {path}";
|
|
48
|
+
readonly "storage.images.corrupt_quarantined": "The image index was corrupted and moved to {path}; an empty index was rebuilt";
|
|
49
|
+
readonly "storage.images.corrupt_failed": "The image index is corrupted and could not be quarantined; an empty index was rebuilt: {path}";
|
|
50
|
+
readonly "plugin.registration.wire_once": "register(): background services are already wired for this process (openclawDir={openclawDir}); registered tools for the current Agent collector and skipped duplicate background wiring";
|
|
51
|
+
readonly "plugin.registration.light_rules": "Light-rule methods registered: gateway={gateway}; tools={tools}";
|
|
52
|
+
readonly "plugin.interfaces.notifications.tools": "Agent notification tool registered: notifications_summary";
|
|
53
|
+
readonly "plugin.interfaces.notifications.gateway": "Gateway notification methods registered: notifications.push / notifications.summary.start / notifications.summary.status / notifications.summary.result";
|
|
54
|
+
readonly "plugin.interfaces.notifications.http": "HTTP notifications endpoint registered: POST /notifications";
|
|
55
|
+
readonly "plugin.interfaces.recordings.gateway": "Gateway recording methods registered: recordings.result.write / recordings.list / recordings.status / recordings.rename / recordings.delete";
|
|
56
|
+
readonly "plugin.interfaces.recordings.http": "HTTP recordings endpoint registered: POST /recordings (disabled; returns 410)";
|
|
57
|
+
readonly "plugin.interfaces.images.gateway": "Gateway image method registered: images.sync";
|
|
58
|
+
readonly "plugin.interfaces.images.http": "HTTP images endpoint registered: POST /images";
|
|
59
|
+
readonly "plugin.interfaces.system.gateway": "Gateway system method registered: system.os";
|
|
60
|
+
readonly "plugin.interfaces.system.http": "HTTP system endpoint registered: GET /system/os";
|
|
61
|
+
readonly "plugin.interfaces.locale.gateway": "Gateway locale methods registered: plugin.locale.get / plugin.locale.set (event: {event})";
|
|
62
|
+
readonly "plugin.interfaces.locale.http": "HTTP locale endpoint registered: GET|POST /plugin/locale";
|
|
63
|
+
readonly "plugin.interfaces.auto_update": "Automatic update-check service registered";
|
|
64
|
+
readonly "plugin.lifecycle.storage.notifications_started": "Notification storage service started: {path}";
|
|
65
|
+
readonly "plugin.lifecycle.storage.recordings_started": "Recording storage service started: {path}";
|
|
66
|
+
readonly "plugin.lifecycle.storage.images_started": "Image storage service started: {path}";
|
|
67
|
+
readonly "plugin.lifecycle.storage.stopped": "Notification, recording, and image storage services stopped";
|
|
68
|
+
readonly "plugin.lifecycle.tunnel.registered": "Relay tunnel service registered";
|
|
69
|
+
readonly "cli.light.description": "Light effect management";
|
|
70
|
+
readonly "cli.light.send.description": "Send a light effect command to the hardware device";
|
|
71
|
+
readonly "cli.light.setup_tools.description": "Allow one-shot light control and cloud light-rule tools (tools.allow / tools.alsoAllow)";
|
|
72
|
+
readonly "cli.rec.description": "Recording management";
|
|
73
|
+
readonly "cli.rec.list.description": "List all recordings (optional status filter)";
|
|
74
|
+
readonly "cli.rec.status.description": "Show details for one recording";
|
|
75
|
+
readonly "cli.rec.storage_path.description": "Show recordings storage path";
|
|
76
|
+
readonly "cli.rec.setup.description": "Interactively configure ASR settings and save locally";
|
|
77
|
+
readonly "cli.image.description": "Image management";
|
|
78
|
+
readonly "cli.image.list.description": "List all images (optional status / source-app filter)";
|
|
79
|
+
readonly "cli.image.status.description": "Show details for one image";
|
|
80
|
+
readonly "cli.image.path.description": "Print the absolute local path of an image file";
|
|
81
|
+
readonly "cli.image.storage_path.description": "Show images storage path";
|
|
82
|
+
readonly "cli.auth.description": "User authentication management";
|
|
83
|
+
readonly "cli.auth.set_api_key.description": "Set user API key (persisted locally)";
|
|
84
|
+
readonly "cli.auth.set_token.description": "(compat) Set user API key (legacy command name)";
|
|
85
|
+
readonly "cli.auth.status.description": "Show current auth status";
|
|
86
|
+
readonly "cli.auth.clear.description": "Clear saved auth credentials";
|
|
87
|
+
readonly "cli.env.description": "Environment management (switch test / production)";
|
|
88
|
+
readonly "cli.env.show.description": "Show current environment and API endpoints";
|
|
89
|
+
readonly "cli.env.set.description": "Switch environment (test / production)";
|
|
90
|
+
readonly "cli.doctor.description": "Self-check environment for security risks and common issues";
|
|
91
|
+
readonly "cli.update.description": "Check and update the plugin to the latest version, then restart";
|
|
92
|
+
readonly "cli.log.description": "View / search plugin logs";
|
|
93
|
+
readonly "cli.tunnel.status.description": "Check Relay Tunnel status (read running service status file without affecting the connection)";
|
|
94
|
+
readonly "tunnel.status.connected": "Tunnel connected (since {since})";
|
|
95
|
+
readonly "tunnel.status.connecting": "Tunnel connecting (since {since}, reconnect attempt #{attempt})";
|
|
96
|
+
readonly "tunnel.status.disconnected": "Tunnel disconnected (since {since}){reasonSuffix}; waiting to reconnect (attempt #{attempt})";
|
|
97
|
+
readonly "tunnel.status.disconnected.reason": ", reason: {reason}";
|
|
98
|
+
readonly "tunnel.status.stopped": "Tunnel service stopped (since {since})";
|
|
99
|
+
readonly "tunnel.status.unknown": "Unknown state: {state}";
|
|
100
|
+
readonly "tunnel.issue.not_found": "Tunnel status file not found. The tunnel service may not have started yet. Confirm the openclaw main process is running.";
|
|
101
|
+
readonly "tunnel.issue.invalid.parse": "Failed to parse the tunnel status file; contents are corrupted or incorrectly formatted. Restart the openclaw main process.";
|
|
102
|
+
readonly "tunnel.issue.invalid.fields": "The tunnel status file is missing required fields or has invalid field types. Restart the openclaw main process.";
|
|
103
|
+
readonly "tunnel.issue.stale.connected_prefix": "Status file shows connected (since {since})";
|
|
104
|
+
readonly "tunnel.issue.stale.no_lock": ", but no local runtime lock was found; the status may be stale. Restart the openclaw main process.";
|
|
105
|
+
readonly "tunnel.issue.stale.incomplete_lock": ", but the local runtime lock is incomplete, so the current connection cannot be verified. Restart the openclaw main process.";
|
|
106
|
+
readonly "tunnel.issue.stale.dead_pid": ", but the local runtime lock still points to exited process pid={pid}; the status may be stale. Restart the openclaw main process.";
|
|
107
|
+
readonly "tunnel.issue.stale.lock_newer": ", but the current runtime lock started at {lockStartedAt}, which is later than the status timestamp, so the status was not refreshed for the new process. Restart the openclaw main process.";
|
|
108
|
+
readonly "cli.monitor.description": "Notification monitor task management";
|
|
109
|
+
readonly "cli.monitor.list.description": "List all monitor tasks";
|
|
110
|
+
readonly "cli.monitor.show.description": "Show monitor task details";
|
|
111
|
+
readonly "cli.monitor.create.description": "Create a monitor task";
|
|
112
|
+
readonly "cli.monitor.delete.description": "Delete a monitor task";
|
|
113
|
+
readonly "cli.monitor.enable.description": "Enable a monitor task";
|
|
114
|
+
readonly "cli.monitor.disable.description": "Pause a monitor task";
|
|
115
|
+
readonly "cli.sync.description": "Sync notifications into the memory system";
|
|
116
|
+
readonly "cli.sync.next.description": "Return the next sync batch (≤100) with memory prompt path; done=true when finished";
|
|
117
|
+
readonly "cli.sync.pending.description": "Scan unprocessed notifications; by default returns today's pending summary only";
|
|
118
|
+
readonly "cli.sync.fetch.description": "Fetch unprocessed notification details for a date";
|
|
119
|
+
readonly "cli.sync.commit.description": "Mark the current batch for a date as processed and update the checkpoint";
|
|
120
|
+
readonly "cli.search.description": "Search notifications (time / app / sender / keyword)";
|
|
121
|
+
readonly "cli.stats.description": "Notification statistics (aggregate by date / app / sender / hour)";
|
|
122
|
+
readonly "cli.summary.description": "Build notification summary input (aggregates + samples for Agent)";
|
|
123
|
+
readonly "cli.summary_job.description": "Chunked notification summary job management";
|
|
124
|
+
readonly "cli.summary_job.create.description": "Create a chunked notification summary job";
|
|
125
|
+
readonly "cli.summary_job.status.description": "Show chunked summary job status";
|
|
126
|
+
readonly "cli.summary_job.next.description": "Claim or retry the next chunk to summarize";
|
|
127
|
+
readonly "cli.summary_job.commit.description": "Submit a chunk summary and mark the chunk complete";
|
|
128
|
+
readonly "cli.summary_job.run.description": "Process pending chunks and generate the final result when done";
|
|
129
|
+
readonly "cli.summary_job.result.description": "Merge committed chunk summaries and return the result";
|
|
130
|
+
readonly "cli.summary_job.cancel.description": "Cancel a chunked notification summary job";
|
|
131
|
+
readonly "cli.storage_path.description": "Show notifications storage path";
|
|
132
|
+
readonly "cli.opt.from_time": "Start time ISO 8601, e.g. 2026-03-01T09:00:00+08:00";
|
|
133
|
+
readonly "cli.opt.to_time": "End time ISO 8601, e.g. 2026-03-01T18:00:00+08:00";
|
|
134
|
+
readonly "cli.opt.from_time_short": "Start time ISO 8601";
|
|
135
|
+
readonly "cli.opt.to_time_short": "End time ISO 8601";
|
|
136
|
+
readonly "cli.opt.app": "Filter by app name";
|
|
137
|
+
readonly "cli.opt.sender": "Filter by sender";
|
|
138
|
+
readonly "cli.opt.conversation_type": "Filter by conversation type (group/private)";
|
|
139
|
+
readonly "cli.opt.keyword": "Search keyword in title and body";
|
|
140
|
+
readonly "cli.opt.limit": "Maximum number of results";
|
|
141
|
+
readonly "cli.opt.from_date": "Start date YYYY-MM-DD";
|
|
142
|
+
readonly "cli.opt.to_date": "End date YYYY-MM-DD";
|
|
143
|
+
readonly "cli.opt.json": "Output result as JSON (for scripts)";
|
|
144
|
+
readonly "cli.opt.yes": "Skip confirmation";
|
|
145
|
+
readonly "cli.opt.date_ymd": "Target date YYYY-MM-DD";
|
|
146
|
+
readonly "cli.search.opt.limit": "Maximum number of results";
|
|
147
|
+
readonly "cli.summary.opt.limit": "Maximum notifications included in the summary";
|
|
148
|
+
readonly "cli.summary.opt.sample": "Number of recent samples to return";
|
|
149
|
+
readonly "cli.summary.opt.top": "Number of aggregation ranking rows";
|
|
150
|
+
readonly "cli.summary.opt.max_content": "Max characters per sample title/body (truncated when exceeded)";
|
|
151
|
+
readonly "cli.summary_job.opt.limit": "Maximum notifications included in the job";
|
|
152
|
+
readonly "cli.summary_job.opt.chunk_size": "Notifications per chunk";
|
|
153
|
+
readonly "cli.summary_job.opt.max_content": "Max characters per notification title/body in a chunk";
|
|
154
|
+
readonly "cli.summary_job.opt.chunk_id": "Chunk id returned by next";
|
|
155
|
+
readonly "cli.summary_job.opt.summary": "Pass chunk summary text directly";
|
|
156
|
+
readonly "cli.summary_job.opt.summary_file": "Read chunk summary from a file";
|
|
157
|
+
readonly "cli.summary_job.opt.max_chunks": "Maximum chunks to process automatically this run";
|
|
158
|
+
readonly "cli.summary_job.opt.include_result": "Include markdown result in output when complete";
|
|
159
|
+
readonly "cli.stats.opt.app": "Only count a specific app";
|
|
160
|
+
readonly "cli.stats.opt.dim": "Dimension: date/app/sender/hour/all";
|
|
161
|
+
readonly "cli.log.opt.keyword": "Filter logs by keyword";
|
|
162
|
+
readonly "cli.log.opt.limit": "Maximum number of results";
|
|
163
|
+
readonly "cli.sync.scan.opt.all": "Scan all unprocessed notifications after the checkpoint";
|
|
164
|
+
readonly "cli.sync.scan.opt.date": "Only scan a specific date YYYY-MM-DD";
|
|
165
|
+
readonly "cli.sync.scan.opt.from_date": "Only scan on/after this date YYYY-MM-DD";
|
|
166
|
+
readonly "cli.sync.scan.opt.to_date": "Only scan on/before this date YYYY-MM-DD";
|
|
167
|
+
readonly "cli.sync.next.opt.all": "Process all unprocessed notifications after the checkpoint";
|
|
168
|
+
readonly "cli.sync.next.opt.date": "Only process a specific date YYYY-MM-DD";
|
|
169
|
+
readonly "cli.sync.next.opt.from_date": "Only process on/after this date YYYY-MM-DD";
|
|
170
|
+
readonly "cli.sync.next.opt.to_date": "Only process on/before this date YYYY-MM-DD";
|
|
171
|
+
readonly "cli.sync.fetch.opt.max_end_index": "Max endIndex allowed for this sync snapshot";
|
|
172
|
+
readonly "cli.sync.commit.opt.end_index": "endIndex returned by this fetch batch";
|
|
173
|
+
readonly "cli.monitor.create.opt.description": "Task description";
|
|
174
|
+
readonly "cli.monitor.create.opt.match_rules": "Match rules JSON";
|
|
175
|
+
readonly "cli.monitor.create.opt.schedule": "Cron expression";
|
|
176
|
+
readonly "cli.doctor.opt.fix": "Auto-fix fixable issues (skip confirmation)";
|
|
177
|
+
readonly "cli.update.opt.force": "Force reinstall the latest version even if versions match";
|
|
178
|
+
readonly "cli.update.opt.beta": "Install the latest beta version";
|
|
179
|
+
readonly "cli.light.send.opt.segments": "Light effect segments JSON";
|
|
180
|
+
readonly "cli.light.send.opt.repeat": "Loop forever (default: play one round)";
|
|
181
|
+
readonly "cli.light.send.opt.repeat_times": "Repeat times for the whole sequence: 0=forever, 1=one round; ANCS path does not support >=2";
|
|
182
|
+
readonly "cli.image.list.opt.status": "Filter by status (syncing|synced|sync_failed)";
|
|
183
|
+
readonly "cli.image.list.opt.app": "Filter by source app";
|
|
184
|
+
readonly "cli.rec.list.opt.status": "Filter by transfer status (e.g. synced, transcribed)";
|
|
185
|
+
readonly "errors.INVALID_TIME": "{option} must be an ISO 8601 time, e.g. {example}";
|
|
186
|
+
readonly "errors.INVALID_TIME_INVALID": "{option} is not a valid time, e.g. {example}";
|
|
187
|
+
readonly "errors.STORAGE_UNAVAILABLE": "Cannot resolve recordings directory: stateDir and workspaceDir are unset";
|
|
188
|
+
readonly "errors.STORAGE_UNAVAILABLE.notifications": "Notifications storage directory is unavailable";
|
|
189
|
+
readonly "errors.STORAGE_UNAVAILABLE.images": "Images storage directory is unavailable";
|
|
190
|
+
readonly "errors.STORAGE_UNAVAILABLE.recordings": "Recordings storage directory is unavailable";
|
|
191
|
+
readonly "errors.LOGS_UNAVAILABLE": "Logs directory is unavailable";
|
|
192
|
+
readonly "errors.NOT_FOUND": "Not found: {target}";
|
|
193
|
+
readonly "errors.NOT_FOUND.monitor": "Monitor task '{name}' does not exist";
|
|
194
|
+
readonly "errors.NOT_FOUND.image": "Image not found: {id}";
|
|
195
|
+
readonly "errors.NOT_FOUND.recording": "Recording not found: {id}";
|
|
196
|
+
readonly "errors.ALREADY_EXISTS": "Monitor task '{name}' already exists";
|
|
197
|
+
readonly "errors.INVALID_TIME_RANGE": "--from must not be later than --to";
|
|
198
|
+
readonly "errors.INVALID_POSITIVE_INT": "{option} must be a positive integer";
|
|
199
|
+
readonly "errors.INVALID_NON_NEGATIVE_INT": "{option} must be a non-negative integer";
|
|
200
|
+
readonly "errors.INVALID_DATE": "{option} must be in YYYY-MM-DD format";
|
|
201
|
+
readonly "errors.INVALID_DATE_VALUE": "{option} is not a valid date";
|
|
202
|
+
readonly "errors.INVALID_SCOPE": "Conflicting scope parameters";
|
|
203
|
+
readonly "errors.INVALID_SCOPE.all_with_range": "--all cannot be combined with date range options";
|
|
204
|
+
readonly "errors.INVALID_SCOPE.date_with_range": "--date cannot be combined with date range options";
|
|
205
|
+
readonly "errors.INVALID_SCOPE.from_after_to": "--from-date must not be later than --to-date";
|
|
206
|
+
readonly "errors.NO_DATA": "No notifications for date {date}";
|
|
207
|
+
readonly "errors.INVALID_LOCALE": "locale must be one of: {locales}";
|
|
208
|
+
readonly "errors.INVALID_CONVERSATION_TYPE": "--conversation-type must be group or private";
|
|
209
|
+
readonly "errors.INVALID_END_INDEX": "--end-index must be a non-negative integer";
|
|
210
|
+
readonly "errors.INVALID_END_INDEX.out_of_range": "--end-index must fall within the notification file for that date";
|
|
211
|
+
readonly "errors.INVALID_END_INDEX.beyond_batch": "--end-index exceeds the single-batch fetch limit and would skip unprocessed notifications";
|
|
212
|
+
readonly "errors.STALE_END_INDEX": "--end-index is earlier than the current checkpoint; progress cannot move backwards";
|
|
213
|
+
readonly "errors.INVALID_MAX_END_INDEX": "--max-end-index must be a non-negative integer";
|
|
214
|
+
readonly "errors.CONFIG_NOT_FOUND": "Config file not found: {path}";
|
|
215
|
+
readonly "errors.CONFIG_INVALID": "Failed to read/parse config: {detail}";
|
|
216
|
+
readonly "errors.WRITE_FAILED": "Failed to write config: {detail}";
|
|
217
|
+
readonly "errors.HTTP_ERROR": "Request failed: {status} {detail}";
|
|
218
|
+
readonly "errors.IMAGE_NOT_READY": "Image {id} is not ready yet (status={status}{errorSuffix})";
|
|
219
|
+
readonly "errors.INVALID_JOB_ID": "Invalid summary job id";
|
|
220
|
+
readonly "errors.READ_FAILED": "Failed to read JSON: {path}";
|
|
221
|
+
readonly "errors.JOB_NOT_FOUND": "Summary job not found: {id}";
|
|
222
|
+
readonly "errors.INVALID_JOB": "Summary job metadata is corrupted: {id}";
|
|
223
|
+
readonly "errors.INVALID_CHUNK": "Summary job chunk is corrupted: {chunkId}";
|
|
224
|
+
readonly "errors.INVALID_COMMIT.xor": "Provide only one of --summary or --summary-file";
|
|
225
|
+
readonly "errors.INVALID_COMMIT.required": "Either --summary or --summary-file is required";
|
|
226
|
+
readonly "errors.INVALID_COMMIT.empty": "Chunk summary must not be empty";
|
|
227
|
+
readonly "errors.JOB_CANCELLED": "Summary job cancelled: {id}";
|
|
228
|
+
readonly "errors.CHUNK_NOT_FOUND": "Summary job chunk not found: {chunkId}";
|
|
229
|
+
readonly "errors.INVALID_ENV": "Invalid environment name: {env}; allowed: {available}";
|
|
230
|
+
readonly "errors.INVALID_MATCH_RULES": "match-rules must be valid JSON";
|
|
231
|
+
readonly "errors.TUNNEL_NOT_CONFIGURED": "RELAY_TUNNEL_URL is not configured; tunnel features are disabled. Set RELAY_TUNNEL_URL at build time.";
|
|
232
|
+
readonly "errors.TUNNEL_TOKEN_MISSING": "API Key is not set; the tunnel cannot connect. Run: ntf auth set-api-key <apiKey>";
|
|
233
|
+
readonly "errors.STATE_DIR_UNAVAILABLE": "Cannot determine the state directory, so tunnel status cannot be checked. Run this command in the openclaw main environment.";
|
|
234
|
+
readonly "errors.STATUS_NOT_FOUND": "Tunnel status file not found. The tunnel service may not have started yet. Confirm the openclaw main process is running.";
|
|
235
|
+
readonly "env.reload.gateway": "Gateway in-process reload triggered";
|
|
236
|
+
readonly "env.reload.jvsclaw": "Host is JvsClaw; reload or restart the instance from the control plane for the switch to take effect";
|
|
237
|
+
readonly "env.reload.qclaw": "Host is QClaw; restart the QClaw desktop app for the switch to take effect";
|
|
238
|
+
readonly "env.reload.command": "Triggered {command}";
|
|
239
|
+
readonly "env.reload.manual": "Environment switched, but auto-reload did not finish; run manually: {command}";
|
|
240
|
+
readonly "env.switched.with_reload": "Switched to {env} and triggered a reload";
|
|
241
|
+
readonly "env.switched": "Switched to {env}";
|
|
242
|
+
readonly "progress.searching": "Searching notifications...";
|
|
243
|
+
readonly "progress.summary": "Building notification summary input...";
|
|
244
|
+
readonly "progress.summary_job_create": "Creating chunked notification summary job...";
|
|
245
|
+
readonly "doctor.checking": "🔍 Checking environment...";
|
|
246
|
+
readonly "doctor.all_pass": "✅ All checks passed; no issues found.";
|
|
247
|
+
readonly "doctor.fix_label": "Fix: {fix}";
|
|
248
|
+
readonly "doctor.summary": "Done: {critical} critical · {warn} warn · {info} info";
|
|
249
|
+
readonly "doctor.manual_only": "All issues above require manual fixes. See the hints above.";
|
|
250
|
+
readonly "doctor.fixable_found": "Found {count} auto-fixable issue(s):";
|
|
251
|
+
readonly "doctor.confirm_fix": "Run auto-fix now? [y/N]: ";
|
|
252
|
+
readonly "doctor.cancelled": "Cancelled.";
|
|
253
|
+
readonly "doctor.fix_failed": "{title} fix failed: {message}";
|
|
254
|
+
readonly "doctor.manual_remaining": "{count} issue(s) still need manual attention. See the hints above.";
|
|
255
|
+
readonly "doctor.fix_done": "Fix complete ({fixed}/{total}). Suggested next step: openclaw gateway restart";
|
|
256
|
+
readonly "doctor.credentials.title": "API Key not configured";
|
|
257
|
+
readonly "doctor.credentials.detail": "No apiKey found in credentials.json; tunnel and push features will not work.";
|
|
258
|
+
readonly "doctor.credentials.fix": "Run: ntf auth set-api-key <your-api-key>";
|
|
259
|
+
readonly "doctor.dangerous_flags.title": "gateway.controlUi.dangerouslyDisableDeviceAuth is enabled";
|
|
260
|
+
readonly "doctor.dangerous_flags.detail": "This disables Control UI device authentication; anyone can access the control panel.";
|
|
261
|
+
readonly "doctor.dangerous_flags.fix": "Set to false";
|
|
262
|
+
readonly "doctor.node_version.title": "Node.js version too old (v{version})";
|
|
263
|
+
readonly "doctor.node_version.detail": "Requires >= {minVersion}; current is v{version}.";
|
|
264
|
+
readonly "doctor.node_version.fix": "Upgrade Node.js to {minVersion} or newer";
|
|
265
|
+
readonly "doctor.plugin_version.title": "Plugin update available (current {current} → latest {latest})";
|
|
266
|
+
readonly "doctor.plugin_version.detail": "A newer version is available; update to get the latest features and fixes.";
|
|
267
|
+
readonly "doctor.plugin_version.fix": "Run: ntf update";
|
|
268
|
+
readonly "doctor.state_dir_perms.title": "State directory permissions are too open ({stateDir} mode={mode})";
|
|
269
|
+
readonly "doctor.state_dir_perms.detail": "Other users may read credentials and config files under this directory.";
|
|
270
|
+
readonly "doctor.tool_policy.title": "Extension plugin tool policy is permissive";
|
|
271
|
+
readonly "doctor.tool_policy.detail": "These agents use the default policy: {agents}. Plugin tools may be invoked without authorization.";
|
|
272
|
+
readonly "doctor.tool_policy.fix": "Prefer minimal or coding profile for agents handling untrusted input, or set an explicit tool allowlist.";
|
|
273
|
+
readonly "doctor.trusted_proxy.title": "gateway.auth.mode is trusted-proxy";
|
|
274
|
+
readonly "doctor.trusted_proxy.detail": "Auth is delegated to a reverse proxy. Ensure: (1) the proxy terminates TLS and authenticates users; (2) gateway.trustedProxies is limited to proxy IPs; (3) the firewall blocks direct access to the Gateway port.";
|
|
275
|
+
readonly "doctor.trusted_proxy.fix": "Manual proxy review required; cannot auto-fix";
|
|
276
|
+
readonly "doctor.trusted_proxy_allow_users.title": "allowUsers is empty in trusted-proxy mode";
|
|
277
|
+
readonly "doctor.trusted_proxy_allow_users.detail": "Any user authenticated by the proxy can access Gateway.";
|
|
278
|
+
readonly "doctor.trusted_proxy_allow_users.fix": "Edit openclaw.json and add allowed user emails to gateway.auth.trustedProxy.allowUsers, e.g. [\"nick@example.com\"]";
|
|
279
|
+
readonly "doctor.tunnel.not_found.title": "Tunnel status file not found";
|
|
280
|
+
readonly "doctor.tunnel.not_found.detail": "The tunnel service may never have started, or the status file was deleted.";
|
|
281
|
+
readonly "doctor.tunnel.not_found.fix": "Confirm the openclaw main process is running";
|
|
282
|
+
readonly "doctor.tunnel.invalid.title": "Failed to parse tunnel status file";
|
|
283
|
+
readonly "doctor.tunnel.invalid.detail": "File contents are corrupted or incorrectly formatted.";
|
|
284
|
+
readonly "doctor.tunnel.invalid.fix": "Restart the openclaw main process";
|
|
285
|
+
readonly "doctor.tunnel.stale.title": "Tunnel status is stale";
|
|
286
|
+
readonly "doctor.tunnel.stale.detail": "The status file still shows connected, but the runtime status is no longer valid.";
|
|
287
|
+
readonly "doctor.tunnel.stale.fix": "Restart the openclaw main process";
|
|
288
|
+
readonly "doctor.tunnel.disconnected.title": "Tunnel not connected (state={state})";
|
|
289
|
+
readonly "doctor.tunnel.disconnected.detail": "Tunnel has been in {state} since {since}{reasonSuffix}; reconnect attempts: {attempts}";
|
|
290
|
+
readonly "doctor.tunnel.disconnected.reason": ", reason: {reason}";
|
|
291
|
+
readonly "doctor.tunnel.disconnected.fix": "Check the network or restart the openclaw main process";
|
|
292
|
+
readonly "doctor.local_gateway.invalid_url.title": "Local Gateway URL config is invalid";
|
|
293
|
+
readonly "doctor.local_gateway.invalid_url.detail": "{warning}; falling back to {baseUrl}";
|
|
294
|
+
readonly "doctor.local_gateway.invalid_url.fix": "Fix PHONE_NOTIFICATIONS_GATEWAY_BASE_URL, or unset it and restart openclaw/gateway";
|
|
295
|
+
readonly "doctor.local_gateway.tls.title": "Gateway TLS may block the Relay local proxy";
|
|
296
|
+
readonly "doctor.local_gateway.tls.detail": "Detected gateway.tls.enabled=true, but the plugin local proxy defaults to {baseUrl}. If Gateway only accepts HTTPS/WSS, local RPC handshake will fail.";
|
|
297
|
+
readonly "doctor.local_gateway.tls.fix": "Set PHONE_NOTIFICATIONS_GATEWAY_BASE_URL=https://127.0.0.1:<port>, or disable gateway.tls.enabled and restart gateway";
|
|
298
|
+
readonly "doctor.local_gateway.unresolvable.title": "Local Gateway URL cannot be resolved";
|
|
299
|
+
readonly "doctor.local_gateway.unresolvable.detail": "Cannot resolve the local Gateway URL the plugin will use: {baseUrl}";
|
|
300
|
+
readonly "doctor.local_gateway.unresolvable.fix": "Set PHONE_NOTIFICATIONS_GATEWAY_BASE_URL=http://127.0.0.1:<port>";
|
|
301
|
+
readonly "doctor.local_gateway.unreachable.title": "Local Gateway unreachable";
|
|
302
|
+
readonly "doctor.local_gateway.unreachable.detail": "Plugin will connect to {baseUrl}, but TCP probe failed{errorSuffix}";
|
|
303
|
+
readonly "doctor.local_gateway.unreachable.fix": "Run openclaw gateway status and confirm gateway.port matches PHONE_NOTIFICATIONS_GATEWAY_BASE_URL";
|
|
304
|
+
readonly "monitor.delete.confirm": "Confirm delete monitor task '{name}'? Add --yes to skip confirmation";
|
|
305
|
+
readonly "update.checking": "Checking{beta} latest version ...";
|
|
306
|
+
readonly "update.checking_beta": " beta";
|
|
307
|
+
readonly "update.fetch_failed": "Failed to fetch latest version: {message}";
|
|
308
|
+
readonly "update.already_latest": "Already on latest{beta} version v{version}";
|
|
309
|
+
readonly "update.force": "Force update: v{current} → v{latest}";
|
|
310
|
+
readonly "update.found": "New version found: v{current} → v{latest}; updating ...";
|
|
311
|
+
readonly "update.downloading": "Downloading install script ...";
|
|
312
|
+
readonly "update.download_failed": "Failed to download install script: {message}";
|
|
313
|
+
readonly "update.write_failed": "Failed to write temp file: {message}";
|
|
314
|
+
readonly "update.spawn_failed": "Install script failed to start: {message}";
|
|
315
|
+
readonly "update.exit_code": "Install script exit code: {code}";
|
|
316
|
+
readonly "update.request_failed": "Request failed: {url} (HTTP {status})";
|
|
317
|
+
readonly "update.version_empty": "Version tag is empty: {baseUrl}";
|
|
318
|
+
readonly "rec.setup.choice_prompt": "{prompt} [1-{max}, default {default}]: ";
|
|
319
|
+
readonly "rec.setup.choice_invalid": " Enter a number between 1 and {max}";
|
|
320
|
+
readonly "rec.setup.optional_suffix": " [optional, press Enter to skip]: ";
|
|
321
|
+
readonly "rec.setup.api_header": "─── Cloud ASR (model-proxy) setup ───";
|
|
322
|
+
readonly "rec.setup.api_note": "Note: no third-party API key needed; the plugin reuses the current account API key for the model-proxy long-recording API.";
|
|
323
|
+
readonly "rec.setup.api.endpoint": "Custom model-proxy submit-task endpoint URL";
|
|
324
|
+
readonly "rec.setup.api.language": "Language hint (e.g. zh / en)";
|
|
325
|
+
readonly "rec.setup.api.itn": "Enable text normalization ITN? (y/N)";
|
|
326
|
+
readonly "rec.setup.local_header": "─── Local Whisper transcription setup ───";
|
|
327
|
+
readonly "rec.setup.local.model_label": "Model size:";
|
|
328
|
+
readonly "rec.setup.local.model_auto": "Auto (recommend based on available memory)";
|
|
329
|
+
readonly "rec.setup.local.choose_model": "Choose model";
|
|
330
|
+
readonly "rec.setup.local.language": "Language hint (e.g. zh / en; leave empty for auto-detect)";
|
|
331
|
+
readonly "rec.setup.local.backend_label": "Inference backend:";
|
|
332
|
+
readonly "rec.setup.local.backend_auto": "Auto (recommend based on runtime)";
|
|
333
|
+
readonly "rec.setup.local.backend_coreml": "coreml (recommended on Apple Silicon)";
|
|
334
|
+
readonly "rec.setup.local.backend_cuda": "cuda (NVIDIA GPU)";
|
|
335
|
+
readonly "rec.setup.local.choose_backend": "Choose backend";
|
|
336
|
+
readonly "rec.setup.local.source_label": "Model download source:";
|
|
337
|
+
readonly "rec.setup.local.source_auto": "auto (probe HuggingFace first, fall back to domestic mirror)";
|
|
338
|
+
readonly "rec.setup.local.source_hf": "huggingface (direct overseas)";
|
|
339
|
+
readonly "rec.setup.local.source_domestic": "domestic (China mirror)";
|
|
340
|
+
readonly "rec.setup.local.choose_source": "Choose download source";
|
|
341
|
+
readonly "rec.setup.local.mirror": "Custom model download URL (overrides source)";
|
|
342
|
+
readonly "rec.setup.existing": "Existing config: mode = {mode}";
|
|
343
|
+
readonly "rec.setup.existing_updated": ", updated at {updatedAt}";
|
|
344
|
+
readonly "rec.setup.mode_label": "Transcription mode:";
|
|
345
|
+
readonly "rec.setup.choose_mode": "Choose mode";
|
|
346
|
+
readonly "rec.setup.mode_api": "api (cloud model-proxy long recording)";
|
|
347
|
+
readonly "rec.setup.mode_local": "local (local Whisper)";
|
|
348
|
+
readonly "rec.setup.saved": "✓ Config saved to {path}";
|
|
349
|
+
readonly "prompt.light_rule.title": "Light-effect routing tips:";
|
|
350
|
+
readonly "prompt.light_rule.persistent": "- When the user says things like \"when/if/on receiving a certain notification or message, turn on/blink/show a light effect\", that is a persistent cloud light-rule request — you must call {create} or {update}.";
|
|
351
|
+
readonly "prompt.light_rule.immediate": "- When the user wants a light effect now/immediately, or after the current one-off task finishes, call light_control; do not create a light rule.";
|
|
352
|
+
readonly "prompt.light_rule.display": "- When the user asks to display/show content, text, or results on the hardware/screen/device, also call light_control: headline in title, body text in reason (gen-2 screen hardware shows the notification title and body on its screen); if no effect is specified, use a low-key default for segments (single steady segment, low brightness, 2–3s). Do not create a light rule, and do not claim content cannot be shown on the hardware.";
|
|
353
|
+
readonly "prompt.light_rule.rule_text": "- When creating a rule, turn the user's natural-language request into ruleText; Notification Intelligence Service's dedicated Agent compiles and saves the rule.";
|
|
354
|
+
readonly "prompt.light_rule.crud": "- Create/update/delete/query light rules via lightrules_* tools; do not hand-edit tasks/*/meta.json.";
|
|
355
|
+
readonly "prompt.light_rule.errors": "- If a lightrules_* tool returns an error, report the failure honestly; do not pretend chat history or an old toolResult is the current cloud rule list.";
|
|
356
|
+
readonly "prompt.light_rule.language": "- Language: the reply AND the lightrules_create/update `ruleText` argument must use replyLanguage (from the original user-authored message that started this run). Prefer paraphrasing the user's own words into ruleText. Never translate an English request into Chinese ruleText (or the reverse) because App UI locale or tool schemas are another language—never mix languages.";
|
|
357
|
+
readonly "prompt.reply.language": "- Reply language: prose, tables, and natural-language strings inside code/tool samples must use replyLanguage (from the original user-authored message that started this run). If tool schemas or skills show examples in another language, translate them before writing the reply. Never mix languages in one reply (do not leave non-English sample phrases in an English reply).";
|
|
358
|
+
readonly "locale.updated": "Global UI locale updated: {locale}";
|
|
359
|
+
readonly "light.validation.must_array": "Must be an array";
|
|
360
|
+
readonly "light.validation.must_not_empty": "Must not be empty";
|
|
361
|
+
readonly "light.validation.max_segments": "At most {max} segments";
|
|
362
|
+
readonly "light.validation.segments_json": "segments must be valid JSON";
|
|
363
|
+
readonly "light.validation.must_object": "Must be an object";
|
|
364
|
+
readonly "light.validation.unsupported_mode": "Unsupported mode '{mode}'; allowed: {modes}";
|
|
365
|
+
readonly "light.validation.duration": "Must be a number ≥0 (0 means unlimited duration)";
|
|
366
|
+
readonly "light.validation.color_flow_anchor": "color_flow needs at least one non-zero color anchor (color or background)";
|
|
367
|
+
readonly "light.validation.byte": "Must be a number 0–255";
|
|
368
|
+
readonly "light.validation.brightness_zero": "brightness=0 is only allowed in steady mode; other modes are filtered on firmware";
|
|
369
|
+
readonly "light.validation.must_rgb_brightness": "Must include numeric r/g/b/brightness";
|
|
370
|
+
readonly "light.validation.must_rgb": "Must include numeric r/g/b";
|
|
371
|
+
readonly "light.validation.rise_ms": "rise_ms must be a number >0 (0ms not supported)";
|
|
372
|
+
readonly "light.validation.hold_ms": "hold_ms must be a number ≥0";
|
|
373
|
+
readonly "light.validation.fall_ms": "fall_ms must be a number >0 (0ms not supported)";
|
|
374
|
+
readonly "light.validation.off_ms": "off_ms must be a number ≥0";
|
|
375
|
+
readonly "light.validation.direction": "direction must be ltr or rtl";
|
|
376
|
+
readonly "light.validation.window": "window only supports 1/2/3";
|
|
377
|
+
readonly "light.validation.non_negative": "Must be a number ≥0";
|
|
378
|
+
readonly "light.validation.color_flow_misuse": "color_flow only has a single extreme solid foreground anchor (no effective background). The result is same-hue bright/dim ring flow, not a multi-color palette. If the user wants a \"single-color wave\", use mode='wave'; for multi-color flow, also set background as a second anchor.";
|
|
379
|
+
readonly "light.repeat.ancs_only": "The current ANCS path only supports repeat_times=0 (infinite) or 1 (one round); N>=2 requires a non-ANCS path";
|
|
380
|
+
readonly "light.repeat.invalid": "repeat_times must be an integer >=0";
|
|
381
|
+
readonly "light.rule.already_exists": "Light rule '{name}' already exists";
|
|
382
|
+
readonly "light.rule.not_found": "Light rule '{name}' not found";
|
|
383
|
+
readonly "light.rule.prompt.empty": "No enabled light rules.";
|
|
384
|
+
readonly "light.rule.prompt.intro": "You judge whether a notification matches a light rule.";
|
|
385
|
+
readonly "light.rule.prompt.list_header": "Enabled light rules (newest first):";
|
|
386
|
+
readonly "light.rule.prompt.task": "Task: given the next notification, decide which rules match.";
|
|
387
|
+
readonly "light.rule.prompt.hit0": "- Match 0: call no tools and end.";
|
|
388
|
+
readonly "light.rule.prompt.hit_n": "- Match 1+: call trigger_light(rule_name) once per matched rule.";
|
|
389
|
+
readonly "light.rule.prompt.no_text": "- Do not reply with free text; express the decision **only** via tool calling.";
|
|
390
|
+
readonly "light.rule.prompt.conservative": "- When unsure, prefer not triggering to avoid bothering the user.";
|
|
391
|
+
readonly "light.rule.trigger.simple": "Triggered light rule \"{rule}\"";
|
|
392
|
+
readonly "light.rule.trigger.group": "{app} group \"{conversation}\"";
|
|
393
|
+
readonly "light.rule.trigger.group_app": "{app} group chat";
|
|
394
|
+
readonly "light.rule.trigger.sender_action": "{sender} sent a message";
|
|
395
|
+
readonly "light.rule.trigger.new_message": "new message received";
|
|
396
|
+
readonly "light.rule.trigger.detected": "Detected {action} in {where}{detail}; triggered light rule \"{rule}\"";
|
|
397
|
+
readonly "light.rule.tool.rule_text_desc": "Natural-language rule in replyLanguage (same language as the user's original request). Prefer the user's own wording. English e.g. \"turn on red light when receiving a message containing 123\". Do not translate English requests into Chinese.";
|
|
398
|
+
readonly "light.setup.next_restart": "Run: openclaw gateway restart";
|
|
399
|
+
readonly "monitor.readme.description": "## Description";
|
|
400
|
+
readonly "monitor.readme.guide_title": "## Handling guide";
|
|
401
|
+
readonly "monitor.readme.guide_body": "When fetch.py outputs matching notifications:\n1. Read the matched notification content\n2. Decide from the task description whether to notify the user\n3. If needed, use the message tool to send a summary";
|
|
402
|
+
readonly "monitor.cron.message": "Phone notifications are captured in real time into JSON files under notifications/.\nRun: python3 tasks/{name}/fetch.py --notifications-dir notifications\n- NO_CHANGE or NO_MATCH → do not reply; end.\n- Has output → read tasks/{name}/README.md to process data and notify the user.";
|
|
403
|
+
readonly "summary_job.keyword.todo": "todo";
|
|
404
|
+
readonly "summary_job.keyword.need": "need";
|
|
405
|
+
readonly "summary_job.keyword.trouble": "please";
|
|
406
|
+
readonly "summary_job.keyword.confirm": "confirm";
|
|
407
|
+
readonly "summary_job.keyword.reply": "reply";
|
|
408
|
+
readonly "summary_job.keyword.approve": "approve";
|
|
409
|
+
readonly "summary_job.keyword.meet": "meeting";
|
|
410
|
+
readonly "summary_job.keyword.meeting": "meeting";
|
|
411
|
+
readonly "summary_job.keyword.schedule": "schedule";
|
|
412
|
+
readonly "summary_job.keyword.deadline": "deadline";
|
|
413
|
+
readonly "summary_job.keyword.urgent": "urgent";
|
|
414
|
+
readonly "summary_job.keyword.abnormal": "abnormal";
|
|
415
|
+
readonly "summary_job.keyword.fail": "fail";
|
|
416
|
+
readonly "summary_job.keyword.risk": "risk";
|
|
417
|
+
readonly "summary_job.none": "none";
|
|
418
|
+
readonly "summary_job.chunk_title": "## Chunk {id}";
|
|
419
|
+
readonly "summary_job.count": "- Count: {count}";
|
|
420
|
+
readonly "summary_job.time_range": "- Time range: {oldest} to {newest}";
|
|
421
|
+
readonly "summary_job.top_apps": "- Top apps: {apps}";
|
|
422
|
+
readonly "summary_job.top_senders": "- Top senders/chats: {senders}";
|
|
423
|
+
readonly "summary_job.attention": "### Needs attention";
|
|
424
|
+
readonly "summary_job.no_attention": "- No clear todo, risk, or anomaly samples";
|
|
425
|
+
readonly "summary_job.recent": "### Recent samples";
|
|
426
|
+
readonly "summary_job.none_item": "- none";
|
|
427
|
+
readonly "summary_job.result_title": "# Notification summary job {id}";
|
|
428
|
+
readonly "summary_job.result_total": "- Notifications: {total}";
|
|
429
|
+
readonly "summary_job.result_chunks": "- Chunks: {count}";
|
|
430
|
+
readonly "summary_job.result_chunk_summaries": "## Chunk summaries";
|
|
431
|
+
readonly "summary_job.result_chunk_line": "### {id} · {count} items · {oldest} to {newest}";
|
|
432
|
+
readonly "summary_job.uncommitted": "(summary not committed)";
|
|
433
|
+
readonly "recording.summary.title": "# Summary";
|
|
434
|
+
readonly "recording.summary.decisions": "Decisions";
|
|
435
|
+
readonly "recording.summary.todos": "Todos";
|
|
436
|
+
readonly "recording.summary.risks": "Risks";
|
|
437
|
+
readonly "recording.summary.open_questions": "Open questions";
|
|
438
|
+
readonly "recording.summary.meta_name": "> Recording name: {name}";
|
|
439
|
+
readonly "recording.summary.meta_duration": "> Duration: {duration}";
|
|
440
|
+
readonly "recording.summary.meta_created": "> Created at: {created}";
|
|
441
|
+
readonly "recording.summary.meta_markers": "> Interest points: {count}";
|
|
442
|
+
readonly "recording.marker_heading": "### Interest points";
|
|
443
|
+
readonly "recording.error.not_found": "Recording not found: {id}";
|
|
444
|
+
readonly "recording.error.storage_unavailable": "Recording storage unavailable: {path}";
|
|
445
|
+
readonly "recording.error.download_failed": "Download failed";
|
|
446
|
+
readonly "recording.error.empty_body": "Empty response body";
|
|
447
|
+
readonly "recording.error.timeout": "timed out";
|
|
448
|
+
readonly "recording.error.interrupted": "Transcription interrupted; please restart transcription";
|
|
449
|
+
readonly "image.error.storage_unavailable": "Image storage unavailable: {path}";
|
|
450
|
+
readonly "image.error.download_failed": "Download failed";
|
|
451
|
+
readonly "notification.error.storage_unavailable": "Notification storage unavailable: {path}";
|
|
452
|
+
readonly "auth.apikey_missing": "apiKey is not set";
|
|
453
|
+
readonly "auth.apikey_missing_hint": "apiKey is not set; run ntf auth set-api-key <apiKey> (or {path})";
|
|
454
|
+
readonly "auth.credentials_missing": "API Key is not set; write it to {path}, or run ntf auth set-api-key <apiKey> via the host CLI";
|
|
455
|
+
readonly "errors.INVALID_ENV_VALUE": "Invalid environment name: {env}; allowed: {available}";
|
|
456
|
+
readonly "errors.INVALID_LOCALE_VALUE": "Invalid locale: {locale}; allowed: {locales}";
|
|
457
|
+
readonly "update.notify.failed_title": "Plugin update failed";
|
|
458
|
+
readonly "update.notify.in_progress_title": "Plugin update in progress";
|
|
459
|
+
readonly "update.notify.restart_failed_after_update": "Plugin updated, but gateway auto-restart failed";
|
|
460
|
+
readonly "update.notify.restart_failed_prepared": "Plugin update prepared, but gateway auto-restart failed";
|
|
461
|
+
readonly "update.notify.restart_failed_default": "Gateway auto-restart failed; restart openclaw/gateway manually.";
|
|
462
|
+
readonly "update.notify.pending": "Update package is ready; waiting for gateway restart to apply.";
|
|
463
|
+
readonly "update.notify.applying": "Plugin update is being applied; please wait.";
|
|
464
|
+
readonly "update.notify.wait_restart": "Wait for gateway restart to finish";
|
|
465
|
+
readonly "update.notify.manual_restart_if_stuck": "If nothing changes for a long time, restart openclaw/gateway manually";
|
|
466
|
+
readonly "update.action.manual_restart": "Restart openclaw/gateway manually";
|
|
467
|
+
readonly "update.action.retry_trigger": "Re-trigger the plugin update after restart";
|
|
468
|
+
readonly "update.action.retry_update": "Re-trigger the plugin update";
|
|
469
|
+
readonly "update.action.reinstall_default": "If it keeps failing, reinstall with the install script into the default extensions directory";
|
|
470
|
+
readonly "update.action.check_mount": "Check whether the plugin path points to an external/network/container mount or symlink";
|
|
471
|
+
readonly "update.action.close_gateway_retry": "Close openclaw/gateway and retry";
|
|
472
|
+
readonly "update.action.check_busy": "Check plugin directory permissions or file locks";
|
|
473
|
+
readonly "update.action.check_av": "Confirm antivirus, terminals, or editors are not locking the plugin directory";
|
|
474
|
+
readonly "update.action.retry_later": "Retry the update later";
|
|
475
|
+
readonly "update.action.report": "If it keeps failing, copy the error and report it to maintainers";
|
|
476
|
+
readonly "update.action.enable_restart": "To auto-restart, enable commands.restart";
|
|
477
|
+
readonly "update.action.wait_current": "Wait for the current update to finish";
|
|
478
|
+
readonly "update.action.wait_apply": "Wait for gateway to auto-restart and apply the update";
|
|
479
|
+
readonly "update.action.check_network": "Check network connectivity";
|
|
480
|
+
readonly "update.action.check_tar": "Confirm the system tar command is available";
|
|
481
|
+
readonly "update.action.wait_load": "Wait for gateway to auto-restart and load the new version";
|
|
482
|
+
readonly "update.fail.timeout": "Gateway did not exit in time; the update was not applied. Restart openclaw/gateway manually and retry.";
|
|
483
|
+
readonly "update.fail.cross_device": "Update install failed; plugin and temp dirs may be on different disks/mounts. Re-trigger the update; if it still fails, reinstall with the install script into the default extensions directory.";
|
|
484
|
+
readonly "update.fail.busy": "Update install failed; the plugin directory may be in use. Close openclaw/gateway and retry.";
|
|
485
|
+
readonly "update.fail.generic": "Update install failed; rollback was attempted. Fix the issue based on the error and retry.";
|
|
486
|
+
readonly "update.fail.restart_disabled": "Gateway auto-restart is disabled; restart openclaw/gateway manually to apply.";
|
|
487
|
+
readonly "update.fail.no_sigusr1": "This host does not support auto-restart; restart openclaw/gateway manually to apply.";
|
|
488
|
+
readonly "update.fail.bg_start": "Update package is ready, but the background installer failed to start; the update was not applied. Retry later.";
|
|
489
|
+
readonly "update.fail.windows": "Windows does not support auto-restarting gateway; restart manually for the update to take effect.";
|
|
490
|
+
readonly "update.fail.windows_ready": "After restart, the plugin will apply the new version automatically";
|
|
491
|
+
readonly "update.fail.restart_unavailable": "Gateway auto-restart is unavailable; the update was not applied.";
|
|
492
|
+
readonly "update.fail.enable_restart_retry": "Enable gateway auto-restart and retry the update";
|
|
493
|
+
readonly "update.msg.not_pending": "Update {id} is not pending and cannot be applied";
|
|
494
|
+
readonly "update.msg.missing_package": "Update {id} is missing packageDir and cannot be applied";
|
|
495
|
+
readonly "update.msg.applied": "Applied update to {version}";
|
|
496
|
+
readonly "update.msg.apply_failed": "Failed to apply update: {error}";
|
|
497
|
+
readonly "update.msg.invalid_version": "Invalid version: {version}";
|
|
498
|
+
readonly "update.msg.busy": "Another update is already in progress ({version}, {status}/{phase}); try again later.";
|
|
499
|
+
readonly "update.msg.busy_suggestion": "Wait for the current update, or restart openclaw/gateway and retry.";
|
|
500
|
+
readonly "update.msg.download_failed": "Download failed (HTTP {status}): {url}";
|
|
501
|
+
readonly "update.msg.download_suggestion": "Failed to download the plugin package; check network or retry later.";
|
|
502
|
+
readonly "update.msg.extract_failed": "Extract failed: {error}";
|
|
503
|
+
readonly "update.msg.extract_suggestion": "Failed to extract the plugin package; confirm tar is available and retry.";
|
|
504
|
+
readonly "update.msg.prepared": "Prepared update to {version}";
|
|
505
|
+
readonly "update.msg.prepared_suggestion": "Update package is ready; it will apply after gateway restarts.";
|
|
506
|
+
readonly "update.msg.exec_error": "Update execution error: {error}";
|
|
507
|
+
readonly "update.msg.prepared_manual": "Prepared update to {version}; restart openclaw/gateway manually to apply";
|
|
508
|
+
readonly "update.msg.prepared_no_restart": "Prepared update to {version}, but gateway auto-restart is unavailable; update not applied";
|
|
509
|
+
readonly "update.msg.bg_failed": "Update prepared but background installer failed to start: {error}";
|
|
510
|
+
readonly "update.msg.applied_restarting": "Applied update to {version}; restarting gateway";
|
|
511
|
+
readonly "recording.error.invalid_transition": "Invalid state transition: {from} → {to}";
|
|
512
|
+
readonly "light.api.not_configured": "Light API is not configured; confirm OPENCLAW_HOST_* / LIGHT_APP_KEY / LIGHT_TEMPLATE_ID were set at build time";
|
|
513
|
+
readonly "update.version.fallback": "target version";
|
|
514
|
+
readonly "update.plugin_name": "Phone Notifications";
|
|
515
|
+
readonly "update.tool.version_desc": "Target version, e.g. 1.11.0";
|
|
516
|
+
readonly "light.rule.match.intro": "You match phone notifications to light rules.";
|
|
517
|
+
readonly "light.rule.match.low_latency": "This is a low-latency classification task; do not output reasoning, explanations, Markdown, or <think> content.";
|
|
518
|
+
readonly "light.rule.match.no_guess": "Judge only from rule description and notification fields; do not guess.";
|
|
519
|
+
readonly "light.rule.match.conservative": "If unsure, do not trigger.";
|
|
520
|
+
readonly "light.rule.match.output_format": "Output must be pure JSON in this exact shape:";
|
|
521
|
+
readonly "light.rule.match.output_schema": "{\"matches\":[{\"i\":<notification index>,\"rule\":\"<rule name>\"}]}";
|
|
522
|
+
readonly "light.rule.match.zero_or_exact": "For zero matches output {\"matches\":[]}; rule must exactly equal a name below.";
|
|
523
|
+
readonly "light.rule.match.tips_header": "Matching tips:";
|
|
524
|
+
readonly "light.rule.match.tip_sender": "- Sender/contact rules: prefer sender, then conversation_name, title, or an \"X:\"/\"X:\" prefix at the start of content; ignore whitespace, emoji, and CJK/ASCII punctuation differences.";
|
|
525
|
+
readonly "light.rule.match.tip_app": "- App notification rules: check whether app/appDisplayName matches the description.";
|
|
526
|
+
readonly "light.rule.match.tip_keyword": "- Keyword rules: check whether title + content contain or are semantically equivalent to the keywords in the description.";
|
|
527
|
+
readonly "light.rule.match.tip_semantic": "- Semantic rules: judge from title + content together; do not treat names casually mentioned in the body as the sender.";
|
|
528
|
+
readonly "light.rule.match.rules_header": "Enabled rules:";
|
|
529
|
+
readonly "light.rule.match.notifications_header": "The following {count} new phone notifications, numbered in order:";
|
|
530
|
+
readonly "light.rule.match.ask_json": "Decide which rules each notification matches and output JSON in the agreed format.";
|
|
531
|
+
readonly "light.rule.api.jwt_plugin_path": "{message}. The request hit the plugin-side API {path}; plugin auth should use only X-Api-Key-Id. The current 401 comes from the cloud JWT auth layer, meaning this plugin prefix was not routed to API Key auth by the gateway/server. Ask backend to check gateway allowlist and Notification Intelligence Service plugin routes: {url}";
|
|
532
|
+
readonly "light.rule.api.jwt_app_path": "{message}. Light rules should call the plugin-side API /api/plugin/notification-intelligence/light-rules with X-Api-Key-Id auth; this request may have hit the App JWT endpoint instead: {url}";
|
|
533
|
+
readonly "tool.light.description": "Control hardware lighting immediately (one-shot; does not create or save notification-triggered rules). Supports 1–12 sequential segments with five modes: wave / breath / strobe / steady / color_flow. The tool quantizes to embedded-protocol discrete steps, builds a compact ANCS control sequence per mode, and sends it over HTTP. Call when the user asks to turn lights on, change effects, set colors, set ambience, or preview/test lighting. Gen-2 hardware has a screen and shows this delivery's notification title and body on it: when the user asks to display/show content on the hardware/screen/device, also call this tool—put the headline in title and the body text in reason; if the user did not specify an effect, use a low-key default for segments (single steady segment, low brightness, 2–3s). If the user wants lights on certain notifications/messages, that is a persistent light rule—use {createTool} or {updateTool} instead.";
|
|
534
|
+
readonly "tool.light.segments_desc": "Light segments, 1–12, played in order";
|
|
535
|
+
readonly "tool.light.mode_desc": "Mode: wave (single-color chase, foreground + optional background) / breath / strobe / steady / color_flow (palette flows around the ring with 1–2 color anchors; **not a rainbow**, cannot produce a 7-color rainbow wave). Common mistakes: user asks for a red/blue wave → use wave, not color_flow; user asks for rainbow → firmware has no true 7-color rainbow—explain the limit and suggest dual-anchor color_flow or multi-segment wave rotation; do not silently fake rainbow with a single-anchor color_flow.";
|
|
536
|
+
readonly "tool.light.duration_s_desc": "Segment duration in seconds; 0 means infinite. Recommended discrete values: 0.5/1/2/3/5/6/8/16/24/32/48; keep segments ≤8s when possible to save power";
|
|
537
|
+
readonly "tool.light.brightness_desc": "Foreground brightness 0–255. Required; brightness=0 is only valid in steady mode (explicit off)";
|
|
538
|
+
readonly "tool.light.color_desc": "Foreground RGB. Required; in color_flow it is the first color anchor—at least one of color/background must be non-zero";
|
|
539
|
+
readonly "tool.light.interval_ms_desc": "Step interval (ms) for wave/strobe/color_flow; default 200. Quantized steps: 50/100/200/300/500/600/800/1600/2400/3200/4800";
|
|
540
|
+
readonly "tool.light.direction_desc": "Wave/color_flow direction; default ltr";
|
|
541
|
+
readonly "tool.light.window_desc": "wave: window size, default 2; color_flow: palette shift step (speed)";
|
|
542
|
+
readonly "tool.light.breath_rise_ms_desc": "Rise time (ms), quantized to 1040/1560/2080/2600/3100/4160";
|
|
543
|
+
readonly "tool.light.breath_hold_ms_desc": "Hold at peak brightness (ms); 0ms supported";
|
|
544
|
+
readonly "tool.light.breath_fall_ms_desc": "Fall time (ms), quantized to 1040/1560/2080/2600/3100/4160";
|
|
545
|
+
readonly "tool.light.breath_off_ms_desc": "Off time (ms); 0ms supported";
|
|
546
|
+
readonly "tool.light.breath_timing_desc": "Breath four-phase timing; breath only. rise/fall quantized to 1040/1560/2080/2600/3100/4160; hold/off also support 0ms";
|
|
547
|
+
readonly "tool.light.background_desc": "Background RGB + brightness; wave uses it as the base layer; color_flow uses it as the second anchor (interpolated with foreground for a multi-color palette)";
|
|
548
|
+
readonly "tool.light.background_brightness_desc": "Background brightness; quantized steps: 0/32/64/96/128/192/255";
|
|
549
|
+
readonly "tool.light.reason_desc": "Briefly explain why to light up in context (e.g. comfort, birthday, hydration reminder). Helps record intent for each lighting action. Gen-2 screen hardware shows it as the notification body alongside title: when the user's intent is to display content, put the body text to show here. Phone push notification length limits apply—overly long text gets truncated.";
|
|
550
|
+
readonly "tool.light.title_desc": "Short title/summary for this lighting action (e.g. warm ambience, birthday, hydration). Gen-2 screen hardware shows it as the notification title: when the user's intent is to display content, put the headline/main content here. Phone push notification length limits apply—keep it short or it gets truncated. Falls back to reason when omitted.";
|
|
551
|
+
readonly "tool.light.repeat_desc": "Legacy flag: true = loop forever, false/omitted = one round; repeat_times wins when both are set";
|
|
552
|
+
readonly "tool.light.repeat_times_desc": "Whole sequence repeat count: 0 = infinite loop, 1 = one round. ANCS path does not support N>=2";
|
|
553
|
+
readonly "tool.lightrules.list_desc": "List light rules for the current account in Notification Intelligence Service (enabled and disabled). Call when the user asks to list or view light rules.";
|
|
554
|
+
readonly "tool.lightrules.create_desc": "Create a persistent cloud light rule. Pass the user's original natural-language request as ruleText in replyLanguage (do not translate English into Chinese or Chinese into English). A separate Agent compiles name/title/description/segments/repeat_times and saves it. Call when the user wants lights on certain notifications/messages or asks to create a light rule.";
|
|
555
|
+
readonly "tool.lightrules.update_desc": "Update a cloud light rule. Prefer id; if only the display name or name is known, call lightrules_list first. ruleText recompiles semantics via the separate Agent and must stay in replyLanguage; title/enabled/description/segments/repeat_times are plain field patches. ruleText cannot be mixed with plain fields in one call.";
|
|
556
|
+
readonly "tool.lightrules.delete_desc": "Delete a cloud light rule (currently soft-delete on the server). Prefer id; call lightrules_list if unsure.";
|
|
557
|
+
readonly "tool.lightrules.segments_desc": "Light segments, 1–12, played in order";
|
|
558
|
+
readonly "tool.lightrules.mode_desc": "Mode: wave / breath / strobe / steady / color_flow";
|
|
559
|
+
readonly "tool.lightrules.duration_s_desc": "Duration in seconds; 0 means infinite";
|
|
560
|
+
readonly "tool.lightrules.param.id_desc": "Cloud rule ID (preferred)";
|
|
561
|
+
readonly "tool.lightrules.param.name_desc": "Semantic rule name (legacy compatibility)";
|
|
562
|
+
readonly "tool.lightrules.param.rule_id_desc": "Rule ID (legacy field)";
|
|
563
|
+
readonly "tool.lightrules.param.rule_name_desc": "Rule name (legacy field)";
|
|
564
|
+
readonly "tool.lightrules.param.rule_text_desc": "New natural-language rule in replyLanguage; separate Agent recompiles when set. Do not translate away from the user's language.";
|
|
565
|
+
readonly "tool.lightrules.param.title_desc": "New display title (optional)";
|
|
566
|
+
readonly "tool.lightrules.param.description_desc": "New trigger description (optional)";
|
|
567
|
+
readonly "tool.lightrules.param.enabled_desc": "true = enabled, false = disabled";
|
|
568
|
+
readonly "tool.lightrules.param.segments_desc": "New segment sequence (optional; unchanged when omitted)";
|
|
569
|
+
readonly "tool.lightrules.param.repeat_times_desc": "New repeat count: 0 = infinite loop, 1 = one round";
|
|
570
|
+
readonly "tool.lightrules.param.repeat_desc": "Legacy field: true = infinite loop, false = one round";
|
|
571
|
+
readonly "tool.lightrules.error.rule_scope": "Persistent light rules must include notification/message/call triggers; use light_control for one-shot lighting";
|
|
572
|
+
readonly "tool.lightrules.error.rule_text_required": "ruleText is required";
|
|
573
|
+
readonly "tool.lightrules.error.rule_text_empty": "ruleText must be a non-empty string";
|
|
574
|
+
readonly "tool.lightrules.error.rule_text_mixed": "ruleText cannot be mixed with title/enabled/description/segments/repeat_times/repeat in one call";
|
|
575
|
+
readonly "tool.lightrules.error.title_empty": "title must be a non-empty string";
|
|
576
|
+
readonly "tool.lightrules.error.description_type": "description must be a string";
|
|
577
|
+
readonly "tool.lightrules.error.enabled_type": "enabled must be a boolean";
|
|
578
|
+
readonly "tool.lightrules.error.repeat_times_type": "repeat_times must be a number";
|
|
579
|
+
readonly "tool.lightrules.error.repeat_type": "repeat must be a boolean";
|
|
580
|
+
readonly "tool.lightrules.error.update_field_required": "at least one update field is required";
|
|
581
|
+
readonly "tool.lightrules.error.id_required_update": "id is required; call lightrules_list first if needed";
|
|
582
|
+
readonly "tool.lightrules.error.id_required_delete": "id is required";
|
|
583
|
+
readonly "tool.lightrules.error.unknown": "Unknown error";
|
|
584
|
+
readonly "update.tool.description": "Update the phone-notifications plugin to a target version. Call only after the user explicitly agrees. After update, gateway auto-restart is attempted; manual restart if the host does not support it.";
|
|
585
|
+
readonly "update.notice.new_version_available": "[System notice] phone-notifications plugin update {latest} is available (current {current}).\nTell the user in natural language when appropriate; if they agree, call plugin-update with the version parameter. Do not repeat if they decline.";
|
|
586
|
+
readonly "update.stale.base": "[System notice] phone-notifications was updated to {diskVersion} on disk, but the process still runs {runningVersion}: in-process gateway restart (SIGUSR1 / gateway.restart) does not reload plugin code.";
|
|
587
|
+
readonly "update.stale.restart_scheduled": "A full restart was triggered automatically. If this notice persists after a few minutes, auto-restart did not work—tell the user to fully restart the openclaw process (e.g. systemctl restart openclaw, or let the service manager relaunch after stopping the process).";
|
|
588
|
+
readonly "update.stale.manual_required": "Tell the user a full openclaw process restart is required{reason}: e.g. systemctl restart openclaw, or stop openclaw and let the service manager relaunch; in-process gateway restart alone is not enough.";
|
|
589
|
+
readonly "update.stale.reason_suffix": " ({reason})";
|
|
590
|
+
readonly "update.stale.reason.restart_disabled": "commands.restart=false; automatic restart is disabled by config";
|
|
591
|
+
readonly "update.stale.reason.already_attempted": "a full restart for {diskVersion} was already attempted once and did not take effect (host may not be managed by a service manager)";
|
|
592
|
+
readonly "update.stale.reason.record_failed": "could not record the auto-restart attempt ({error}); not retrying to avoid a restart loop";
|
|
593
|
+
readonly "recording.error.audio_download_failed": "Audio download failed: {error}";
|
|
594
|
+
readonly "recording.error.audio_download_exception": "Audio download error: {error}";
|
|
595
|
+
readonly "recording.http.disabled": "POST /recordings is disabled; use gateway method recordings.result.write instead";
|
|
596
|
+
readonly "image.error.sync_failed": "Image sync failed: {error}";
|
|
597
|
+
readonly "image.error.download_msg": "Image download failed: {error}";
|
|
598
|
+
readonly "image.error.empty_body": "Empty response body";
|
|
599
|
+
readonly "image.error.size_limit": "Image exceeds limit of {maxBytes} bytes";
|
|
600
|
+
readonly "image.error.timeout": "Download timed out";
|
|
601
|
+
readonly "apns.error.config_missing": "APNs auth config missing: set OPENCLAW_APNS_TEAM_ID, OPENCLAW_APNS_KEY_ID, OPENCLAW_APNS_PRIVATE_KEY_P8";
|
|
602
|
+
readonly "tunnel.slim.middle_omitted": "……[truncated, {omitted} chars omitted]……";
|
|
603
|
+
readonly "tunnel.slim.preview_truncated": "…[truncated {omitted} chars]";
|
|
604
|
+
readonly "ns.error.positive_int": "{field} must be an integer greater than 0";
|
|
605
|
+
readonly "ns.error.iso_time": "{field} must be a valid ISO 8601 time";
|
|
606
|
+
readonly "ns.error.conversation_type": "conversationType must be group or private";
|
|
607
|
+
readonly "ns.error.from_after_to": "from must not be later than to";
|
|
608
|
+
readonly "ns.none": "none";
|
|
609
|
+
readonly "ns.sep": "; ";
|
|
610
|
+
readonly "ns.chunk.title": "### Chunk {id}";
|
|
611
|
+
readonly "ns.chunk.count": "- Count: {count}";
|
|
612
|
+
readonly "ns.chunk.top_apps": "- Top apps: {apps}";
|
|
613
|
+
readonly "ns.chunk.top_senders": "- Top senders/chats: {senders}";
|
|
614
|
+
readonly "ns.chunk.attention": "Needs attention:";
|
|
615
|
+
readonly "ns.chunk.no_attention": "- No clear todo, risk, or anomaly samples";
|
|
616
|
+
readonly "ns.chunk.recent": "Recent samples:";
|
|
617
|
+
readonly "ns.chunk.none_item": "- none";
|
|
618
|
+
readonly "ns.md.title": "# Notification summary";
|
|
619
|
+
readonly "ns.md.total": "- Notifications: {total}";
|
|
620
|
+
readonly "ns.md.cap_overflow": "- Cap: request exceeded the limit; processed the latest {limit} items";
|
|
621
|
+
readonly "ns.md.cap_recent": "- Cap: latest {limit} items";
|
|
622
|
+
readonly "ns.md.time_range": "- Time range: {oldest} to {newest}";
|
|
623
|
+
readonly "ns.md.scan": "- Scan: {days} days / {items} items, matched {matched}, took {elapsedMs}ms";
|
|
624
|
+
readonly "ns.md.distribution": "## Overall distribution";
|
|
625
|
+
readonly "ns.md.top_apps": "- Top apps: {apps}";
|
|
626
|
+
readonly "ns.md.top_senders": "- Top senders/chats: {senders}";
|
|
627
|
+
readonly "ns.md.top_conversations": "- Top conversations: {conversations}";
|
|
628
|
+
readonly "ns.md.attention": "## Needs attention";
|
|
629
|
+
readonly "ns.md.no_attention": "- No clear todo, risk, failure, or urgent samples";
|
|
630
|
+
readonly "ns.md.chunk_summaries": "## Chunk summaries";
|
|
631
|
+
readonly "ns.md.no_notifications": "No notifications";
|
|
632
|
+
readonly "ns.display.title": "# Unread notification summary";
|
|
633
|
+
readonly "ns.display.empty": "No matching notifications found.";
|
|
634
|
+
readonly "ns.display.scan_range": "Scan range: {days} days / {items} items, took {elapsedMs}ms.";
|
|
635
|
+
readonly "ns.display.coverage_overflow": "request exceeded the limit; processed the latest {limit} items";
|
|
636
|
+
readonly "ns.display.coverage_hit": "matched {total} within the latest {limit} items";
|
|
637
|
+
readonly "ns.display.summary_line": "Summarized {total} notifications; coverage: {coverage}.";
|
|
638
|
+
readonly "ns.display.time_range": "Time range: {oldest} to {newest}.";
|
|
639
|
+
readonly "ns.display.sources": "## Top sources";
|
|
640
|
+
readonly "ns.display.app": "- Apps: {apps}";
|
|
641
|
+
readonly "ns.display.sender": "- Senders/chats: {senders}";
|
|
642
|
+
readonly "ns.display.conversation": "- Conversations: {conversations}";
|
|
643
|
+
readonly "ns.display.attention": "## Needs attention";
|
|
644
|
+
readonly "ns.display.recent": "## Recent samples";
|
|
645
|
+
readonly "ns.progress.scanning": "Scanning notifications...";
|
|
646
|
+
readonly "ns.progress.snapshot": "Found {total} notifications; split into {chunks} chunks";
|
|
647
|
+
readonly "ns.progress.summarizing": "Summarizing notifications: {done}/{total} chunks";
|
|
648
|
+
readonly "ns.progress.merging": "Merging summaries...";
|
|
649
|
+
readonly "ns.progress.complete": "Notification summary complete; pushing the result...";
|
|
650
|
+
readonly "tool.notifications.summary_desc": "Summarize phone notifications/messages and broadcast notification.summary.status progress events while running. Prefer this when the user asks to summarize recent/unread notifications or roughly N items. If the user gives ~N / latest N, pass N as limit unchanged; when unread has no dedicated filter, treat it as recent and do not inflate the count yourself. On completion, broadcast notification.summary.result with display-ready Markdown. The return value is compressed Markdown summary input; reply based on it and avoid listing every item.";
|
|
651
|
+
readonly "tool.notifications.from_desc": "Start time, ISO 8601, e.g. 2026-06-13T09:00:00+08:00";
|
|
652
|
+
readonly "tool.notifications.to_desc": "End time, ISO 8601";
|
|
653
|
+
readonly "tool.notifications.app_desc": "Filter by app name or display name";
|
|
654
|
+
readonly "tool.notifications.sender_desc": "Filter by sender/title";
|
|
655
|
+
readonly "tool.notifications.conversation_type_desc": "Filter by conversation type";
|
|
656
|
+
readonly "tool.notifications.keyword_desc": "Search keywords in title, body, sender, and conversation name";
|
|
657
|
+
readonly "tool.notifications.limit_desc": "Max notifications in the summary; default 700, max 3000";
|
|
658
|
+
readonly "tool.notifications.chunk_size_desc": "Notifications per chunk; default 150";
|
|
659
|
+
readonly "ns.event.complete_message": "Notification summary complete";
|
|
660
|
+
readonly "ns.event.complete_title": "Unread notification summary";
|
|
661
|
+
readonly "ns.event.failed": "Notification summary failed: {message}";
|
|
662
|
+
readonly "ns.event.summary_failed": "Notification summary failed: {message}";
|
|
663
|
+
readonly "ns.event.started": "Notification summary job started...";
|
|
664
|
+
readonly "ns.event.storage_not_ready": "Notification storage is not ready yet";
|
|
665
|
+
};
|
|
666
|
+
//# sourceMappingURL=en-US.d.ts.map
|