Repository navigation
Add A/时差保安 (timezone-guard): a two-clock verdict panel for the other time zone #61
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
MyPrototypeWhat
merged 2 commits into
MiniMax-AI:main
from
LiuChen19960902:feat/timezone-guard
Oct 23, 2026
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
plugins/liuchen19960902/timezone-guard/.minimax-plugin/plugin.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| { | ||
| "schemaVersion": 1, | ||
| "name": "timezone-guard", | ||
| "displayName": "A/时差保安", | ||
| "version": "1.0.1", | ||
| "description": "别在对方睡着的时区跟 Claude 聊天。A/时差保安实时对照对方当地时间:绿了正常聊,黄了短聊,红了先睡。", | ||
| "author": "FineCat", | ||
| "icon": "icon.png", | ||
| "category": "Productivity", | ||
| "exampleQueries": [ | ||
| "打开A/时差保安,看看洛杉矶现在该不该开口", | ||
| "洛杉矶现在几点,对照上海" | ||
| ], | ||
| "apps": [], | ||
| "mcpServers": [], | ||
| "skills": [] | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| MIT License | ||
|
|
||
| Copyright (c) 2026 FineCat | ||
|
|
||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
|
|
||
| The above copyright notice and this permission notice shall be included in all | ||
| copies or substantial portions of the Software. | ||
|
|
||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| SOFTWARE. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,136 @@ | ||
| # A/时差保安 (Timezone Guard) | ||
|
|
||
| [English](README.md) | [简体中文](README.zh-CN.md) | ||
|
|
||
| One clock, one verdict: is it a reasonable time to message someone in another time zone? The verdict | ||
| follows the **other** city's local time, because what matters is whether *they* are awake. | ||
|
|
||
| Author: [FineCat](https://github.com/LiuChen19960902) · Version: `1.0.1` | ||
|
|
||
|  | ||
|
|
||
| *The page itself is in Chinese. This screenshot is the light theme, taken while Los Angeles was at | ||
| 20:23 (the evening band); the dark theme is below.* | ||
|
|
||
|  | ||
|
|
||
| ## What it answers | ||
|
|
||
| **Whether to speak up right now.** | ||
|
|
||
| The verdict reads the **target city's local time**, not yours — it is their convenience that | ||
| matters. Your own city is shown for reference only. The thresholds are the same for every city, | ||
| regardless of hemisphere or local habits. | ||
|
|
||
| | Target local time | Band | Verdict | | ||
| | --- | --- | --- | | ||
| | 09:00–18:00 | Day (green) | Now is fine | | ||
| | 18:00–22:00 | Evening (yellow) | Keep it short | | ||
| | 06:00–09:00 | Early morning (yellow) | Don't go deep | | ||
| | 22:00–06:00 | Night (red) | Go to sleep, don't send | | ||
|
|
||
| ## What is on the page | ||
|
|
||
| - **One verdict** — a 24 px status-coloured headline, the single subject of the page. Colour is | ||
| never the only carrier of meaning; text and shape carry it too. | ||
| - **Two clocks** — the target city on top, your own below, each with its date and short time zone | ||
| name (PDT, GMT+8, and so on). 12-hour and 24-hour formats are both available. | ||
| - **A 24-cell strip** — one cell per hour of the target city's day, drawn as a sun, a half sun on | ||
| the horizon, or a moon. The current hour is filled with the verdict colour, and the four | ||
| thresholds land exactly on cell boundaries. | ||
| - **A one-line tip** — under the verdict, one line reads "their band + time range + one sentence | ||
| of advice", and below it an optional time-difference note appears when your own side is the | ||
| later one. No message templates, no copy button, and nothing is pushed into a chat box. | ||
| - **Every time zone** — all 418 time zones the runtime knows about are covered, and in the tables | ||
| shipped with this package each one has a Chinese name (the count follows the runtime's own time | ||
| zone database; a zone the runtime adds later and the shipped tables do not know yet falls back | ||
| to its English name). Country-level entries such as "China (default)" are there too. Either | ||
| city can be changed on its own, and the ⇄ in the title swaps the two in one click. | ||
|
|
||
| Times and offsets are computed locally with the browser's `Intl` and the runtime's own time zone | ||
| database, so daylight saving time is handled for you. **No network, no account, no push, not a | ||
| calendar.** | ||
|
|
||
| ## Install | ||
|
|
||
| Copy the whole directory, **including the hidden `.minimax-plugin` directory**, into the MiniMax | ||
| Code plugins directory: | ||
|
|
||
| | System | Target path | | ||
| | --- | --- | | ||
| | Windows | `C:\Users\<you>\.minimax\plugins\timezone-guard` | | ||
| | macOS | `/Users/<you>/.minimax/plugins/timezone-guard` | | ||
| | Linux | `/home/<you>/.minimax/plugins/timezone-guard` | | ||
|
|
||
| `.minimax` is a hidden directory: on Windows enable "Hidden items" in File Explorer, on macOS press | ||
| `Cmd + Shift + .`. If your client uses a custom data directory, put the package in that | ||
| directory's `plugins/` folder instead. | ||
|
|
||
| Then restart MiniMax Code, confirm the plugin is recognised and enabled, and ask the Agent to open | ||
| "A/时差保安" — or say "打开A/时差保安,看看洛杉矶现在该不该开口". | ||
|
|
||
| To update, close the app and exit MiniMax Code first, then replace the whole plugin directory. | ||
|
|
||
| ## Tested environment | ||
|
|
||
| MiniMax Code desktop **3.1.4** on Windows 11 Home (10.0.26300, x64). This package was developed | ||
| and tested against 3.1.4. | ||
|
|
||
| Requires MiniMax Code **3.1.2** or later: the package declares `surface.window` (the size of the | ||
| popped-out window), so older clients cannot install it at all. | ||
|
|
||
| Checked inside the client: install and open; the verdict switches correctly across its four time | ||
| bands (day, early morning, evening, night); either city can be changed on its own, and the ⇄ in | ||
| the title swaps the pair with one click (checked with a mouse click and with Enter / Space — both | ||
| clocks, the time difference, the hour strip, the verdict and the two city inputs all follow the | ||
| swap and persist); the city list | ||
| covers every time zone the runtime knows about (418 on the tested runtime), each with a Chinese | ||
| name and no dead entry; the 12/24-hour toggle persists; both the light and the dark theme render | ||
| correctly; the page renders at the panel's default width. | ||
|
|
||
| Layout was additionally measured against this package's own client files in Chromium 155 at 400 / | ||
| 460 / 560 / 680 / 1100 / 1440 CSS pixels wide: no horizontal overflow, no double scrollbar, no | ||
| stray whitespace under the card. | ||
|
|
||
| **Not verified:** macOS and Linux; popping the page out into its own window (`surface.window`) was | ||
| never exercised — the page is a single responsive column either way. | ||
|
|
||
| ## Data & access | ||
|
|
||
| - **Files read** — only the four static files inside its own package directory: | ||
| `miniapp/client/index.html`, `styles.css`, `cities.js`, `app.js`. Nothing outside the package is | ||
| read, and the disk is never scanned. | ||
| - **Files written** — none. `context.dataDir` is not used and nothing is written anywhere. | ||
| - **Browser storage** — interface preferences only, under the key `timezone-guard.prefs.v1`: the | ||
| selected pair of cities, the theme, and the 12/24-hour format. No session and no content data. | ||
| - **Network** — none. The page loads its assets from the plugin's own loopback server; there is no | ||
| telemetry, and no remote font, icon, or script. | ||
| - **Processes** — none spawned. | ||
| - **Agent turns** — none. The package declares no `agentAccess` and starts no Agent turn. | ||
| - **Credentials** — no API key, no account, no configuration of any kind. | ||
|
|
||
| ## Files | ||
|
|
||
| ```text | ||
| .minimax-plugin/plugin.json Plugin manifest | ||
| package.json Mini App declaration | ||
| miniapp/miniapp.json Payload roots, Node entry, page route | ||
| miniapp/client/index.html The page served at /dashboard, including the SVG sprite | ||
| miniapp/client/styles.css Visual layer | ||
| miniapp/client/app.js Time zone logic, verdict, city picker, 24-hour strip | ||
| miniapp/client/cities.js City list and Chinese names for every time zone | ||
| miniapp/node/server.mjs Node entry: start(context) → { dispose } | ||
| miniapp/node/miniapp-api.ts Type declarations for the runtime context | ||
| docs/preview.png Screenshot of the page, light theme | ||
| docs/preview-dark.png Screenshot of the page, dark theme | ||
| icon.png Plugin icon | ||
| ``` | ||
|
|
||
| The page is plain HTML, CSS, and JavaScript — no framework, no CDN, no build step, fully offline. | ||
| The Node entry only serves `/dashboard` and those four files on the port the Host assigns. There | ||
| are **no third-party runtime dependencies**: the Node side uses built-in modules only, and the | ||
| browser side uses native APIs only. | ||
|
|
||
| ## License | ||
|
|
||
| [MIT](./LICENSE). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,84 @@ | ||
| # A/时差保安 | ||
|
|
||
| [English](README.md) | 简体中文 | ||
|
|
||
| 发消息之前先看一眼对方那边几点。一个只有结论、没有废话的时差仪表:**该正常聊、该短聊、还是该先睡**,一律按对方城市的当地时间判定。 | ||
|
|
||
| 作者:[FineCat](https://github.com/LiuChen19960902) · 版本:`1.0.1` | ||
|
|
||
|  | ||
|
|
||
| *浅色主题。截图拍摄时洛杉矶是 20:23,落在傍晚档;深色主题见下图。* | ||
|
|
||
|  | ||
|
|
||
| ## 它回答什么 | ||
|
|
||
| **此刻该不该开口跟对方说话。** | ||
|
|
||
| 判定只看**对方城市的当地时间** —— 不方便的是对方,不是你;自己的城市只作对照。所以人在上海盯洛杉矶,和人在伦敦盯上海,是同一套标准。 | ||
|
|
||
| | 对方当地时间 | 档位 | 结论 | | ||
| | --- | --- | --- | | ||
| | 09:00–18:00 | 白天(绿) | 现在可以聊 | | ||
| | 18:00–22:00 | 傍晚(黄) | 短聊就好 | | ||
| | 06:00–09:00 | 清晨(黄) | 先别展开 | | ||
| | 22:00–06:00 | 深夜(红) | 先睡,别发 | | ||
|
|
||
| 阈值对所有城市完全一致,不因东西半球或作息文化而变。 | ||
|
|
||
| ## 页面里有什么 | ||
|
|
||
| - **一个判定** —— 24 px 状态色大字,页面的唯一主角。颜色之外始终有文字和形状,不靠颜色单独传意。 | ||
| - **两个时钟** —— 对方城市在上,自己的在下,各带日期和时区短名(PDT、GMT+8 这类)。12H / 24H 可切换。 | ||
| - **一条 24 格图标带** —— 对方城市一天里的每一小时占一格,画成太阳、贴地平线的半日或月亮;当前那一格铺上判定色。四个阈值正好落在格子边界上。 | ||
| - **一句话提醒** —— 判定下方一行写明「对方档位 + 时间段 + 一句话建议」,再往下是可选的时差提醒(只有你这边更晚时才出现)。不生成话术、不提供一键复制、不往聊天框里塞东西。 | ||
| - **所有时区都能选** —— 运行时认识的 418 个时区全部覆盖,在随包的这套表里每个都有中文名(数量随运行时 tzdata 版本增减;若运行时新增了表里还没有的时区,该条目会退回英文名)。另按国家给出「中国(默认)」这类国家级条目。两侧的城市都能单独切换,标题中间那个 ⇄ 还能一键对调。 | ||
|
|
||
| 时间与偏移全部由浏览器的 `Intl` 和运行时自带的时区数据库算出,夏令时自动处理。**不联网、无账号、无推送、不做日历。** | ||
|
|
||
| ## 安装与使用 | ||
|
|
||
| 把整个目录(**含隐藏的 `.minimax-plugin` 目录**)复制到用户主目录下的 `.minimax/plugins/`: | ||
|
|
||
| | 系统 | 目标路径 | | ||
| | --- | --- | | ||
| | Windows | `C:\Users\<用户名>\.minimax\plugins\timezone-guard` | | ||
| | macOS | `/Users/<用户名>/.minimax/plugins/timezone-guard` | | ||
| | Linux | `/home/<用户名>/.minimax/plugins/timezone-guard` | | ||
|
|
||
| `.minimax` 是隐藏目录:Windows 上需在文件资源管理器开启「显示隐藏的项目」,macOS 上按 `Cmd + Shift + .`。只要用过 MiniMax Code,这个目录通常已经存在。如果客户端使用了自定义数据目录,请放到那个目录下的 `plugins/` 里。 | ||
|
|
||
| 然后重启 MiniMax Code,确认插件已被识别并启用,让 Agent 帮你打开「A/时差保安」,或直接说「打开A/时差保安,看看洛杉矶现在该不该开口」。 | ||
|
|
||
| 更新时先关闭应用并退出 MiniMax Code,再整体替换插件目录。卸载同理,删除该目录即可。 | ||
|
|
||
| ## 已验证环境 | ||
|
|
||
| MiniMax Code 桌面版 **3.1.4**,Windows 11 家庭版(10.0.26300,x64)。本插件在 3.1.4 上开发并测试。 | ||
|
|
||
| 需要 MiniMax Code **3.1.2** 或更高版本:包里声明了 `surface.window`(弹出独立窗口的尺寸),更早的版本装不上这个包。 | ||
|
|
||
| 在客户端里验证过:安装与打开;判定在白天 / 清晨 / 傍晚 / 深夜四个时段档各自正确切换;两个城市分别可切换,标题里的 ⇄ 点击后可一键对调(鼠标点击与键盘 Enter / Space 都试过,对调后两个时钟、时差、图标带、判定与两个城市输入框全部跟着翻转并持久化);城市库覆盖运行时全部时区(实测运行时为 418 个)、每个都有中文名、无失效条目;12H / 24H 切换并持久化;浅色与深色两套主题;面板默认宽度下渲染正常。 | ||
|
|
||
| 布局另在本包的 client 文件上用 Chromium 155 直接测过 400 / 460 / 560 / 680 / 1100 / 1440 px 六档宽度:无横向溢出、无双滚动条、卡片底部无多余留白。 | ||
|
|
||
| **未验证:** macOS 与 Linux;把面板弹成独立窗口(`surface.window`)这条路径没有实测过 —— 页面本身仍是一列响应式布局。 | ||
|
|
||
| ## 数据与访问范围 | ||
|
|
||
| - **读取的文件** —— 只有它自己包目录下的四个静态文件:`miniapp/client/index.html`、`styles.css`、`cities.js`、`app.js`。不读包目录以外的任何文件,也不扫描磁盘。 | ||
| - **写入的文件** —— 无。不写 `context.dataDir`,不写任何地方。 | ||
| - **浏览器存储** —— 只存界面偏好,键名 `timezone-guard.prefs.v1`:选中的两个城市、主题、12H/24H 制式。不存会话、不存任何内容数据。 | ||
| - **网络** —— 无。页面只从插件自己的回环服务加载静态资源,没有遥测,没有远程字体、图标或脚本。 | ||
| - **子进程** —— 无。 | ||
| - **Agent 轮次** —— 无。包没有声明 `agentAccess`,运行期不发起任何 Agent 调用。 | ||
| - **凭据** —— 不需要 API key、不需要账号、不需要任何配置。 | ||
|
|
||
| ## 源码与验证情况 | ||
|
|
||
| 页面是 `miniapp/client/index.html`(无框架、无 CDN、无构建步骤,离线可用),视觉层在 `styles.css`,逻辑在 `app.js`,城市库与全时区中文名在 `cities.js`;Node 入口是 `miniapp/node/server.mjs`,它只负责把 `/dashboard` 和这四个静态文件挂到宿主分配的端口上;供编辑器类型检查用的 Host API 类型定义在 `miniapp/node/miniapp-api.ts`。**没有任何第三方运行时依赖** —— Node 侧只用内置模块,浏览器侧只用原生 API。 | ||
|
|
||
| ## 许可 | ||
|
|
||
| [MIT](LICENSE)。 |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
建议(非阻塞):这是 MiniMax Code 的插件,描述里提到「跟 Claude 聊天」容易让人误解,建议换成「跟对方聊天 / 发消息」这类中性说法。