@zhin.js/plugin-earthquake 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +115 -2
- package/commands//345/234/260/351/234/207/index.js +25 -0
- package/commands//345/234/260/351/234/207//350/256/242/351/230/205/index.js +51 -0
- package/commands//345/234/260/351/234/207//350/256/242/351/230/205/347/212/266/346/200/201/index.js +41 -0
- package/commands//345/234/260/351/234/207//351/200/200/350/256/242/index.js +19 -0
- package/lib/config.d.ts +58 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +138 -0
- package/lib/config.js.map +1 -0
- package/lib/conversation.d.ts +14 -0
- package/lib/conversation.d.ts.map +1 -0
- package/lib/conversation.js +54 -0
- package/lib/conversation.js.map +1 -0
- package/lib/dedupe.d.ts +60 -0
- package/lib/dedupe.d.ts.map +1 -0
- package/lib/dedupe.js +122 -0
- package/lib/dedupe.js.map +1 -0
- package/lib/filters.d.ts +26 -0
- package/lib/filters.d.ts.map +1 -0
- package/lib/filters.js +47 -0
- package/lib/filters.js.map +1 -0
- package/lib/format.d.ts +14 -0
- package/lib/format.d.ts.map +1 -0
- package/lib/format.js +66 -0
- package/lib/format.js.map +1 -0
- package/lib/http.d.ts +71 -0
- package/lib/http.d.ts.map +1 -0
- package/lib/http.js +138 -0
- package/lib/http.js.map +1 -0
- package/lib/index.d.ts +22 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +14 -0
- package/lib/index.js.map +1 -0
- package/lib/permission.d.ts +11 -0
- package/lib/permission.d.ts.map +1 -0
- package/lib/permission.js +11 -0
- package/lib/permission.js.map +1 -0
- package/lib/query-text.d.ts +11 -0
- package/lib/query-text.d.ts.map +1 -0
- package/lib/query-text.js +37 -0
- package/lib/query-text.js.map +1 -0
- package/lib/rate-limit.d.ts +17 -0
- package/lib/rate-limit.d.ts.map +1 -0
- package/lib/rate-limit.js +41 -0
- package/lib/rate-limit.js.map +1 -0
- package/lib/runtime.d.ts +4 -0
- package/lib/runtime.d.ts.map +1 -0
- package/lib/runtime.js +4 -0
- package/lib/runtime.js.map +1 -0
- package/lib/service.d.ts +77 -0
- package/lib/service.d.ts.map +1 -0
- package/lib/service.js +229 -0
- package/lib/service.js.map +1 -0
- package/lib/sources/cenc.d.ts +37 -0
- package/lib/sources/cenc.d.ts.map +1 -0
- package/lib/sources/cenc.js +110 -0
- package/lib/sources/cenc.js.map +1 -0
- package/lib/sources/feed-source.d.ts +51 -0
- package/lib/sources/feed-source.d.ts.map +1 -0
- package/lib/sources/feed-source.js +115 -0
- package/lib/sources/feed-source.js.map +1 -0
- package/lib/sources/parse-helpers.d.ts +10 -0
- package/lib/sources/parse-helpers.d.ts.map +1 -0
- package/lib/sources/parse-helpers.js +36 -0
- package/lib/sources/parse-helpers.js.map +1 -0
- package/lib/sources/usgs.d.ts +14 -0
- package/lib/sources/usgs.d.ts.map +1 -0
- package/lib/sources/usgs.js +81 -0
- package/lib/sources/usgs.js.map +1 -0
- package/lib/subscribe-args.d.ts +9 -0
- package/lib/subscribe-args.d.ts.map +1 -0
- package/lib/subscribe-args.js +40 -0
- package/lib/subscribe-args.js.map +1 -0
- package/lib/subscriptions.d.ts +36 -0
- package/lib/subscriptions.d.ts.map +1 -0
- package/lib/subscriptions.js +122 -0
- package/lib/subscriptions.js.map +1 -0
- package/lib/types.d.ts +36 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/package.json +105 -3
- package/plugin.js +71 -0
- package/schema.json +153 -0
- package/skills/earthquake/SKILL.md +37 -0
- package/skills/earthquake/tools/recent_earthquakes/index.js +19 -0
package/package.json
CHANGED
|
@@ -1,6 +1,108 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/plugin-earthquake",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Earthquake query and group alert plugin for Zhin.js — CENC + USGS, magnitude/region subscriptions (Plugin Runtime)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./lib/index.js",
|
|
7
|
+
"types": "./lib/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./lib/index.d.ts",
|
|
11
|
+
"import": "./lib/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"lib",
|
|
17
|
+
"plugin.js",
|
|
18
|
+
"schema.json",
|
|
19
|
+
"commands",
|
|
20
|
+
"!commands/**/*.ts",
|
|
21
|
+
"skills",
|
|
22
|
+
"!skills/**/*.ts",
|
|
23
|
+
"README.md",
|
|
24
|
+
"CHANGELOG.md"
|
|
25
|
+
],
|
|
26
|
+
"keywords": [
|
|
27
|
+
"zhin",
|
|
28
|
+
"zhin.js",
|
|
29
|
+
"bot",
|
|
30
|
+
"plugin",
|
|
31
|
+
"earthquake",
|
|
32
|
+
"地震",
|
|
33
|
+
"cenc",
|
|
34
|
+
"usgs",
|
|
35
|
+
"alert"
|
|
36
|
+
],
|
|
37
|
+
"author": {
|
|
38
|
+
"name": "lc-cn",
|
|
39
|
+
"email": "admin@liucl.cn",
|
|
40
|
+
"url": "https://github.com/lc-cn"
|
|
41
|
+
},
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@zhin.js/skill": "1.1.8",
|
|
45
|
+
"@zhin.js/tool": "1.1.8"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"typescript": "^6.0.3",
|
|
49
|
+
"vitest": "^4.1.10",
|
|
50
|
+
"zod": "^4.4.3",
|
|
51
|
+
"@zhin.js/command": "1.1.9",
|
|
52
|
+
"@zhin.js/testing": "1.0.5",
|
|
53
|
+
"zhin.js": "1.1.13"
|
|
54
|
+
},
|
|
55
|
+
"peerDependencies": {
|
|
56
|
+
"zod": "^4.0.0",
|
|
57
|
+
"@zhin.js/command": "^1.1.9",
|
|
58
|
+
"zhin.js": "^1.1.13"
|
|
59
|
+
},
|
|
60
|
+
"peerDependenciesMeta": {
|
|
61
|
+
"@zhin.js/command": {
|
|
62
|
+
"optional": true
|
|
63
|
+
},
|
|
64
|
+
"zod": {
|
|
65
|
+
"optional": true
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"repository": {
|
|
69
|
+
"type": "git",
|
|
70
|
+
"url": "git+https://github.com/zhinjs/zhin.git",
|
|
71
|
+
"directory": "plugins/utils/earthquake"
|
|
72
|
+
},
|
|
73
|
+
"publishConfig": {
|
|
74
|
+
"access": "public",
|
|
75
|
+
"registry": "https://registry.npmjs.org"
|
|
76
|
+
},
|
|
77
|
+
"engines": {
|
|
78
|
+
"node": ">=22.19.0"
|
|
79
|
+
},
|
|
80
|
+
"zhin": {
|
|
81
|
+
"protocol": 1,
|
|
82
|
+
"type": "plugin",
|
|
83
|
+
"entry": "./plugin.js",
|
|
84
|
+
"engine": "^1.0.0",
|
|
85
|
+
"runtime": "trusted",
|
|
86
|
+
"features": [
|
|
87
|
+
{
|
|
88
|
+
"package": "@zhin.js/command",
|
|
89
|
+
"api": "^1.0.0"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"package": "@zhin.js/tool",
|
|
93
|
+
"api": "^1.0.0"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"package": "@zhin.js/skill",
|
|
97
|
+
"api": "^1.0.0"
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"plugins": []
|
|
101
|
+
},
|
|
102
|
+
"scripts": {
|
|
103
|
+
"build": "tsc",
|
|
104
|
+
"check": "tsc -p tsconfig.check.json",
|
|
105
|
+
"clean": "rimraf lib",
|
|
106
|
+
"test": "NODE_OPTIONS=--experimental-strip-types vitest run --root ../../.. plugins/utils/earthquake/tests"
|
|
107
|
+
}
|
|
6
108
|
}
|
package/plugin.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { databaseHostToken, definePlugin, logger, outboundHostToken, scheduleHostToken, } from 'zhin.js';
|
|
3
|
+
import { assertEarthquakeTimezone, resolveEarthquakeConfig, } from "./lib/config.js";
|
|
4
|
+
import { earthquakeServiceToken } from "./lib/runtime.js";
|
|
5
|
+
import { EarthquakeService } from "./lib/service.js";
|
|
6
|
+
import { createMemoryState, SubscriptionStore } from "./lib/subscriptions.js";
|
|
7
|
+
/**
|
|
8
|
+
* Plugin Runtime:
|
|
9
|
+
* - Commands: `地震` query, `地震 订阅` / `地震 退订` / `地震 订阅状态`.
|
|
10
|
+
* - Agent tool: `recent_earthquakes` (skill `earthquake`).
|
|
11
|
+
* - DB: subscriptions persist in `databaseHostToken.state` when available; else in memory.
|
|
12
|
+
* - Outbound + Schedule: when both hosts exist, a cron job polls and pushes alerts.
|
|
13
|
+
*/
|
|
14
|
+
export default definePlugin({
|
|
15
|
+
name: 'earthquake',
|
|
16
|
+
metadata: {
|
|
17
|
+
displayName: '地震速报',
|
|
18
|
+
},
|
|
19
|
+
setup(context) {
|
|
20
|
+
const config = resolveEarthquakeConfig(context.config.get());
|
|
21
|
+
assertEarthquakeTimezone(config.timezone);
|
|
22
|
+
let state;
|
|
23
|
+
if (context.resources.has(databaseHostToken)) {
|
|
24
|
+
try {
|
|
25
|
+
state = context.resources.use(databaseHostToken).state;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// No persistent state port: fall back to memory below.
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const store = new SubscriptionStore(state ?? createMemoryState(), {
|
|
32
|
+
maxSubscriptions: config.maxSubscriptions,
|
|
33
|
+
});
|
|
34
|
+
let push;
|
|
35
|
+
if (context.resources.has(outboundHostToken)) {
|
|
36
|
+
const outbound = context.resources.use(outboundHostToken);
|
|
37
|
+
push = async (subscription, content) => {
|
|
38
|
+
await outbound.send({
|
|
39
|
+
adapter: subscription.adapter,
|
|
40
|
+
endpointKey: subscription.endpointKey,
|
|
41
|
+
conversation: {
|
|
42
|
+
kind: subscription.conversationKind,
|
|
43
|
+
id: subscription.conversationId,
|
|
44
|
+
},
|
|
45
|
+
content,
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const service = new EarthquakeService({
|
|
50
|
+
config,
|
|
51
|
+
store,
|
|
52
|
+
push,
|
|
53
|
+
logger: { warn: (message) => logger.warn(message) },
|
|
54
|
+
});
|
|
55
|
+
context.resources.provide(earthquakeServiceToken, service);
|
|
56
|
+
context.lifecycle.add(() => service.stop());
|
|
57
|
+
if (!push || !context.resources.has(scheduleHostToken))
|
|
58
|
+
return;
|
|
59
|
+
const schedule = context.resources.use(scheduleHostToken);
|
|
60
|
+
const dispose = schedule.register({
|
|
61
|
+
id: 'earthquake/poll',
|
|
62
|
+
cron: config.pollCron,
|
|
63
|
+
description: 'Poll CENC/USGS earthquake feeds and push subscription alerts',
|
|
64
|
+
async execute() {
|
|
65
|
+
// poll() never throws; failures are logged and the next tick tries again.
|
|
66
|
+
await service.poll();
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
context.lifecycle.add(dispose);
|
|
70
|
+
},
|
|
71
|
+
});
|
package/schema.json
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"properties": {
|
|
6
|
+
"sources": {
|
|
7
|
+
"type": "array",
|
|
8
|
+
"description": "启用的数据源及优先顺序;合并同一地震时排在前面的数据源提供地点文字,某个数据源失败时由其余数据源兜底",
|
|
9
|
+
"items": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"enum": [
|
|
12
|
+
"cenc",
|
|
13
|
+
"usgs"
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"minItems": 1,
|
|
17
|
+
"uniqueItems": true,
|
|
18
|
+
"default": [
|
|
19
|
+
"cenc",
|
|
20
|
+
"usgs"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"cencUrls": {
|
|
24
|
+
"type": "array",
|
|
25
|
+
"description": "CENC 地震目录地址,按顺序尝试(首个为主源,其余为备用镜像);仅支持 HTTPS,最多 5 个",
|
|
26
|
+
"items": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"pattern": "^https://"
|
|
29
|
+
},
|
|
30
|
+
"minItems": 1,
|
|
31
|
+
"maxItems": 5,
|
|
32
|
+
"uniqueItems": true,
|
|
33
|
+
"default": [
|
|
34
|
+
"https://api.wolfx.jp/cenc_eqlist.json",
|
|
35
|
+
"https://ceic.ac.cn/data/data.json"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"usgsFeed": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"description": "USGS GeoJSON 汇总源名称(震级下限_时间范围)",
|
|
41
|
+
"enum": [
|
|
42
|
+
"significant_hour",
|
|
43
|
+
"significant_day",
|
|
44
|
+
"4.5_hour",
|
|
45
|
+
"4.5_day",
|
|
46
|
+
"2.5_hour",
|
|
47
|
+
"2.5_day",
|
|
48
|
+
"1.0_hour",
|
|
49
|
+
"1.0_day"
|
|
50
|
+
],
|
|
51
|
+
"default": "2.5_day"
|
|
52
|
+
},
|
|
53
|
+
"pollCron": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "订阅轮询频率(6 段 Cron:秒 分 时 日 月 周)",
|
|
56
|
+
"default": "0 */2 * * * *"
|
|
57
|
+
},
|
|
58
|
+
"timezone": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"description": "显示发震时刻使用的 IANA 时区",
|
|
61
|
+
"default": "Asia/Shanghai"
|
|
62
|
+
},
|
|
63
|
+
"requestTimeoutMs": {
|
|
64
|
+
"type": "number",
|
|
65
|
+
"description": "单次 HTTP 请求超时(毫秒)",
|
|
66
|
+
"default": 10000,
|
|
67
|
+
"minimum": 1000,
|
|
68
|
+
"maximum": 60000
|
|
69
|
+
},
|
|
70
|
+
"maxRetries": {
|
|
71
|
+
"type": "number",
|
|
72
|
+
"description": "网络错误、超时、429 与 5xx 的重试次数(不含首次请求)",
|
|
73
|
+
"default": 2,
|
|
74
|
+
"minimum": 0,
|
|
75
|
+
"maximum": 5,
|
|
76
|
+
"multipleOf": 1
|
|
77
|
+
},
|
|
78
|
+
"retryBaseDelayMs": {
|
|
79
|
+
"type": "number",
|
|
80
|
+
"description": "指数退避的首次等待(毫秒),每次重试翻倍并加入随机抖动",
|
|
81
|
+
"default": 1000,
|
|
82
|
+
"minimum": 100,
|
|
83
|
+
"maximum": 10000
|
|
84
|
+
},
|
|
85
|
+
"retryMaxDelayMs": {
|
|
86
|
+
"type": "number",
|
|
87
|
+
"description": "单次退避或 Retry-After 等待上限(毫秒);服务端要求更久时本轮放弃并冷却该数据源",
|
|
88
|
+
"default": 30000,
|
|
89
|
+
"minimum": 1000,
|
|
90
|
+
"maximum": 120000
|
|
91
|
+
},
|
|
92
|
+
"defaultMinMagnitude": {
|
|
93
|
+
"type": "number",
|
|
94
|
+
"description": "订阅未指定震级时使用的最小震级",
|
|
95
|
+
"default": 5,
|
|
96
|
+
"minimum": 0,
|
|
97
|
+
"maximum": 10
|
|
98
|
+
},
|
|
99
|
+
"queryMinMagnitude": {
|
|
100
|
+
"type": "number",
|
|
101
|
+
"description": "「地震」查询未指定震级时使用的最小震级",
|
|
102
|
+
"default": 3,
|
|
103
|
+
"minimum": 0,
|
|
104
|
+
"maximum": 10
|
|
105
|
+
},
|
|
106
|
+
"queryLimit": {
|
|
107
|
+
"type": "number",
|
|
108
|
+
"description": "「地震」查询默认列出的条数",
|
|
109
|
+
"default": 5,
|
|
110
|
+
"minimum": 1,
|
|
111
|
+
"maximum": 20,
|
|
112
|
+
"multipleOf": 1
|
|
113
|
+
},
|
|
114
|
+
"maxEventAgeMinutes": {
|
|
115
|
+
"type": "number",
|
|
116
|
+
"description": "只推送发震时间在此分钟数以内的地震,避免推送迟到或重放的旧事件",
|
|
117
|
+
"default": 60,
|
|
118
|
+
"minimum": 5,
|
|
119
|
+
"maximum": 1440
|
|
120
|
+
},
|
|
121
|
+
"pushLimit": {
|
|
122
|
+
"type": "number",
|
|
123
|
+
"description": "每个会话在一个限流窗口内最多推送的消息数",
|
|
124
|
+
"default": 3,
|
|
125
|
+
"minimum": 1,
|
|
126
|
+
"maximum": 60,
|
|
127
|
+
"multipleOf": 1
|
|
128
|
+
},
|
|
129
|
+
"pushWindowMinutes": {
|
|
130
|
+
"type": "number",
|
|
131
|
+
"description": "推送限流窗口长度(分钟)",
|
|
132
|
+
"default": 10,
|
|
133
|
+
"minimum": 1,
|
|
134
|
+
"maximum": 1440
|
|
135
|
+
},
|
|
136
|
+
"maxEventsPerMessage": {
|
|
137
|
+
"type": "number",
|
|
138
|
+
"description": "单条推送消息最多列出的地震数,其余以数量概括",
|
|
139
|
+
"default": 5,
|
|
140
|
+
"minimum": 1,
|
|
141
|
+
"maximum": 10,
|
|
142
|
+
"multipleOf": 1
|
|
143
|
+
},
|
|
144
|
+
"maxSubscriptions": {
|
|
145
|
+
"type": "number",
|
|
146
|
+
"description": "本实例所有会话的订阅总数上限(每个会话最多一个订阅)",
|
|
147
|
+
"default": 100,
|
|
148
|
+
"minimum": 1,
|
|
149
|
+
"maximum": 1000,
|
|
150
|
+
"multipleOf": 1
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: earthquake
|
|
3
|
+
description: >-
|
|
4
|
+
地震查询能力。当用户询问最近哪里地震、某地是否地震、震级多大或想了解地震速报时使用。
|
|
5
|
+
数据来自中国地震台网(CENC)与 USGS,合并去重后返回。
|
|
6
|
+
keywords:
|
|
7
|
+
- earthquake
|
|
8
|
+
- 地震
|
|
9
|
+
- 震级
|
|
10
|
+
- 余震
|
|
11
|
+
- 地震速报
|
|
12
|
+
tags:
|
|
13
|
+
- earthquake
|
|
14
|
+
- realtime
|
|
15
|
+
tools:
|
|
16
|
+
- recent_earthquakes
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# 地震查询技能
|
|
20
|
+
|
|
21
|
+
## 工具
|
|
22
|
+
|
|
23
|
+
| 工具 | 用途 | 参数 |
|
|
24
|
+
|------|------|------|
|
|
25
|
+
| `recent_earthquakes` | 查询最近的地震 | `limit`(条数,默认 5)、`minMagnitude`(最小震级,默认 3)、`region`(地区关键词)、`hours`(时间范围,默认 24) |
|
|
26
|
+
|
|
27
|
+
**Example:**
|
|
28
|
+
```
|
|
29
|
+
用户: 刚才四川是不是地震了?
|
|
30
|
+
→ recent_earthquakes(region="四川", hours=6, minMagnitude=2)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 注意
|
|
34
|
+
|
|
35
|
+
- 地区是对地点文字的关键词匹配;`中国` / `国内` 表示中国境内(含台湾)。
|
|
36
|
+
- 回答时说明数据来源与发震时刻的时区;数据源不可用时如实告知,不要编造地震信息。
|
|
37
|
+
- 订阅群推送请引导用户使用聊天命令 `地震 订阅 [最小震级] [地区...]`。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { renderRecentEarthquakes } from "../../../../lib/query-text.js";
|
|
5
|
+
import { earthquakeServiceToken } from "../../../../lib/runtime.js";
|
|
6
|
+
export default defineAgentTool({
|
|
7
|
+
description: '查询最近发生的地震(中国地震台网 CENC 与 USGS 合并去重),可按最小震级、地区关键词和时间范围过滤',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
limit: z.number().int().min(1).max(20).optional().describe('返回条数,默认 5'),
|
|
10
|
+
minMagnitude: z.number().min(0).max(10).optional().describe('最小震级,默认 3'),
|
|
11
|
+
region: z.string().max(20).optional().describe('地区关键词,如「四川」「日本」「Japan」;「中国」表示国内'),
|
|
12
|
+
hours: z.number().int().min(1).max(168).optional().describe('时间范围(小时),默认 24'),
|
|
13
|
+
}),
|
|
14
|
+
keywords: ['地震', '震级', '余震', '地震速报', 'earthquake', 'quake', 'seismic'],
|
|
15
|
+
tags: ['地震', '查询', '实时'],
|
|
16
|
+
async execute({ limit, minMagnitude, region, hours }, context) {
|
|
17
|
+
return renderRecentEarthquakes(context.use(earthquakeServiceToken), { limit, minMagnitude, region, hours });
|
|
18
|
+
},
|
|
19
|
+
});
|