🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

时间工具 omdsh-dev/dsh-tool-time

DeepSeek Harness
omdsh-dev56 天前有提交已提供中文文档扫描:未发现敏感能力

解析 ISO 时间并做时区转换与日历运算

32/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add omdsh-dev/dsh-tool-time
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · dev
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/10/30·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 56 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(dependency_conflict · 2026/10/30) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@deepseek-ai/dsh-tool-time(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 18:53:04

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-invariants@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • ISO8601解析
  • IANA时区转换
  • UTC日历运算

DSH 时间工具插件:严格 ISO 8601 解析、IANA 时区转换、UTC 日历运算、固定时长差,零依赖

README

由 DeepSeek 最新模型翻译生成
dsh-tool-time DSH 时间工具插件 —— 严格 ISO 解析、IANA 时区转换、UTC 日历运算、固定时长差。零依赖、零进程、纯函数。 License 动机 Agent 处理时间信息是最高频需求之一——"现在几点"、"3 天后是几号"、"把 UTC 转成北京时间"。当前做法 bash date 的问题:每次起进程、跨平台语法不一致(macOS 与 GNU date -d 完全不同)、时区转换靠 TZ=... 手动拼。模型心算时区偏移和闰年/DST 边界是错误高发区。 安全模型 无 eval、无 new Function。输入只经过严格校验: - 严格 ISO 8601 子集:仅接受 YYYY-MM-DD(UTC 零点)、YYYY-MM-DDTHH:mm:ssZ、YYYY-MM-DDTHH:mm:ss±HH:MM(±14:00 内,可选 .SSS 毫秒);不带时区的日期时间、RFC 2822、自然语言日期一律拒绝;2026-02-30 等日历溢出由查表校验拒绝(不依赖 Date 的静默归一化) - 时区名:IANA 名交给 Intl.DateTimeFormat 校验,非法即抛 time: unknown timezone - 数值:amount 必须是安全整数;unit 枚举白名单;所有字符串 ≤200 字符
展开完整文档(README 剩余 1 节)
dsh-tool-time

DSH 时间工具插件 —— 严格 ISO 解析、IANA 时区转换、UTC 日历运算、固定时长差。零依赖、零进程、纯函数。

License

动机

Agent 处理时间信息是最高频需求之一——"现在几点"、"3 天后是几号"、"把 UTC 转成北京时间"。当前做法 bash date 的问题:每次起进程、跨平台语法不一致(macOS 与 GNU date -d 完全不同)、时区转换靠 TZ=... 手动拼。模型心算时区偏移和闰年/DST 边界是错误高发区。

安全模型

无 eval、无 new Function。输入只经过严格校验:

- 严格 ISO 8601 子集:仅接受 YYYY-MM-DD(UTC 零点)、YYYY-MM-DDTHH:mm:ssZ、YYYY-MM-DDTHH:mm:ss±HH:MM(±14:00 内,可选 .SSS 毫秒);不带时区的日期时间、RFC 2822、自然语言日期一律拒绝;2026-02-30 等日历溢出由查表校验拒绝(不依赖 Date 的静默归一化)
- 时区名:IANA 名交给 Intl.DateTimeFormat 校验,非法即抛 time: unknown timezone
- 数值:amount 必须是安全整数;unit 枚举白名单;所有字符串 ≤200 字符
- Intl 环境固定:'en-CA' + hourCycle: 'h23'(避免午夜 24:00 与本地化数字)

架构

DSH Agent
│ ctx.tools.register()
▼
src/index.ts(Cordis 插件入口 + action 分发 + 独立校验) │ ▼ src/time.ts ├── parseStrictISO() — 严格 ISO 解析(正则 + 查表校验) ├── formatInTimezone() — Intl formatToParts 组装(时钟可注入) ├── addMonthsClamped() — 先置 1 日 → 目标年月 → 天数钳制 └── diffBetween() — 固定时长(sign + absolute 分解)

工具声明

ctx.tools.register(defineTool({
name: 'time',
parameters: {
action: { type: 'string', required: true, enum: ['now', 'convert', 'add', 'diff'] },
value: { type: 'string', description: 'Strict ISO 8601 timestamp' },
timezone: { type: 'string', description: 'IANA timezone (default UTC; display only)' },
from: { type: 'string', description: 'diff start' },
to: { type: 'string', description: 'diff end' },
amount: { type: 'integer', description: 'Signed safe integer' },
unit: { type: 'string', enum: ['seconds','minutes','hours','days','weeks','months','years'] },
},
output: { schema: { type: 'json' }, render: (_a, v) => [{ type: 'text', text: JSON.stringify(v, null, 2) }] },
execute: (args) => Promise.resolve(executeAction(args.action, args) as JsonValue),
timeoutMs: 1000,
}))

支持的操作

| action | 参数 | 返回 |
| now | timezone?(默认 UTC) | 当前时间结构化表示 |
| convert | value + timezone(必填) | 转换后的结构化时间 |
| add | value + amount + unit(timezone? 仅展示) | 加减后的结构化时间 |
| diff | from + to | 固定时长差(无月份/年份) |

返回结构(canonical value):

{
"iso": "2026-08-05T06:00:00.000Z",
"unix": 1785909600000,
"timezone": "Asia/Shanghai",
"timezoneSource": "explicit",
"local": "2026-08-05T14:00:00+08:00",
"formatted": "2026-08-05 14:00:00 (Asia/Shanghai)"
}

语义契约:

- add 始终基于 UTC 运算(日历日语义,跨 DST 保持"日历日"直觉);timezone 仅决定 local/formatted 展示
- 月份/年份钳制:2026-01-31 + 1 month = 2026-02-28;2028-02-29 + 1 year = 2029-02-28(先置 1 日 → 定位目标年月 → 按目标月最大天数钳制)
- diff 仅固定时长:sign + 带符号总量 + absolute 余数分解(月/年无法从毫秒唯一推导,不提供)。字段语义(AUDIT-TIME-03):
- milliseconds 是精确带符号总时长
- seconds/minutes/hours/days/weeks 是 sign * floor(abs / unit)(对绝对值截断后带符号)
- absolute 是 abs 的非负余数分解(如 -1500ms → milliseconds: -1500, seconds: -1, absolute: {seconds: 1, milliseconds: 500})
- 差值超过安全整数范围抛 time: diff duration out of range
- 默认 UTC:省略 timezone 时结果与运行环境无关(timezoneSource: "default-utc")

DSH 0.1.5-rc.1 兼容(已验证)

本插件已迁移到 DSH 0.1.5-rc.1 依赖线,并在 local harness 0.1.5-rc.1(npm 私有包)的隔离 consumer 中完成全链路验证:

- 类型/运行时:peer 为 @deepseek-ai/cordis: ^4.0.1 + @deepseek-ai/dsh-tools: >=0.0.1-rc.1 =0.0.1-rc.1 .tgz 交互式(web)profile
dsh plugin --profile web add ./dsh-tool-time-.tgz
一次性任务(headless)profile
dsh plugin --profile headless add ./dsh-tool-time-.tgz

包内 dsh.bundle.patch(指向 cordis.patch.yml)会在安装后自动把插件加入 profile 的 layer stack;插件的 cordis.patch.yml 以 - insert: 插入 tool-time 条目。插件缺失的 peer 依赖(@deepseek-ai/cordis、@deepseek-ai/dsh-tools)由 profile 的 healed profiles/node_modules 回退安装提供。

⚠️ web 与 headless 是不同 profile:web 安装不会自动覆盖 headless;dsh run 默认使用 headless profile。Windows 路径使用正斜杠(C:/...)。

验证安装 sh
dsh --profile web --dump-config | grep tool-time

运行验证 sh
dsh run "使用 time 工具获取当前 UTC 时间"

手动安装与旧版本兼容(monorepo 旧场景)

monorepo 方式仅适用于旧场景:不支持 Profile Bundle 的旧快照或插件开发调试环境:

1. 放入 monorepo:cp -r time ~/.dsh/source/master/packages/tools/time(开发调试)
2. apps/cli/package.json 加 "@deepseek-ai/dsh-tool-time": "workspace:^";tsconfig.host.json references 加 { "path": "./packages/tools/time" }
3. pnpm install && pnpm run build
4. 在 profile 用户层 patch 插入插件(~/.dsh/profiles//cordis.patch.yml): yaml
- insert:
- id: tool-time
name: '@deepseek-ai/dsh-tool-time'

5. 验证:dsh --profile --dump-config | grep tool-time

注意:patch 是 id-targeted 语义(DSH 0.1.5-rc.1(npm))——裸 - id: 条目会报 entry "xxx" not found,必须用 - insert: 列表包裹。
已知限制
1. 分发链路:peer 依赖(如 @deepseek-ai/dsh-tools)为 npm 私有包,独立安装不依赖 monorepo workspace(monorepo 仅旧场景)
2. add 是 UTC 日历运算,非当地墙钟语义(当地墙钟需 v2)
3. 不支持自然语言日期("next week")与日历月/年差(v2)
4. 时区数据来自 Node 内置 ICU:"跨平台一致" = "相同 Node/ICU 数据下一致"
5. 输入年份范围为 1000–9999(0000–0999 拒绝:JavaScript Date.UTC 对这些年份有 1900+ 映射的历史行为)
6. 精度契约:iso/unix 保留毫秒;local/formatted 为秒精度展示字段
7. offset 精度到分钟:v1 只支持现代时区;历史时区(<1900)的秒级 offset 会被截断

测试 bash
pnpm test

功能/错误/攻击载荷共 63 个用例(fake clock、时区已知向量、月末钳制、严格 ISO 边界、年份范围、offset 跨年、极端 amount、原型链时区名等)。完整清单见本地维护的设计文档。

许可

MIT
预览分享卡片长什么样 ↓omdsh-dev/dsh-tool-time
分享 · DeepSeek Harness Hub
omdsh-dev/dsh-tool-time

解析 ISO 时间并做时区转换与日历运算

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部