@zhin.js/plugin-short-url 3.0.2 → 3.0.4

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.
@@ -1,8 +1,8 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { isValidUrl, shortenUrl } from '../../src/short-url-lib.js';
4
4
 
5
- export default defineTool<{ url: string }>({
5
+ export default defineAgentTool<{ url: string }>({
6
6
  description: '缩短一个 URL,返回短链接',
7
7
  inputSchema: z.object({ url: z.string().min(1) }),
8
8
  keywords: ['短链', '缩短', 'shorten', 'short url'],
@@ -0,0 +1,16 @@
1
+ import { defineCommand } from '@zhin.js/command';
2
+ import { expandUrl, isValidUrl } from '../../src/short-url-lib.js';
3
+
4
+ export default defineCommand({
5
+ description: '展开一个短链接,显示原始地址',
6
+ async execute({ params }) {
7
+ const url = String(params.url ?? '');
8
+ if (!isValidUrl(url)) return '请提供有效的 HTTP/HTTPS 链接';
9
+ try {
10
+ const original = await expandUrl(url);
11
+ return `原始链接: ${original}`;
12
+ } catch (e: unknown) {
13
+ return `展开失败: ${e instanceof Error ? e.message : String(e)}`;
14
+ }
15
+ },
16
+ });
@@ -0,0 +1,16 @@
1
+ import { defineCommand } from '@zhin.js/command';
2
+ import { isValidUrl, shortenUrl } from '../../src/short-url-lib.js';
3
+
4
+ export default defineCommand({
5
+ description: '缩短一个 URL',
6
+ async execute({ params }) {
7
+ const url = String(params.url ?? '');
8
+ if (!isValidUrl(url)) return '请提供有效的 HTTP/HTTPS 链接';
9
+ try {
10
+ const short = await shortenUrl(url);
11
+ return `短链接: ${short}`;
12
+ } catch (e: unknown) {
13
+ return `缩短失败: ${e instanceof Error ? e.message : String(e)}`;
14
+ }
15
+ },
16
+ });
package/lib/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { expandUrl, isValidUrl, shortenUrl } from './short-url-lib.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { expandUrl, isValidUrl, shortenUrl } from './short-url-lib.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function isValidUrl(input: string): boolean;
2
+ export declare function shortenUrl(url: string): Promise<string>;
3
+ export declare function expandUrl(url: string): Promise<string>;
4
+ //# sourceMappingURL=short-url-lib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"short-url-lib.d.ts","sourceRoot":"","sources":["../src/short-url-lib.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOjD;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO7D;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM5D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"short-url-lib.js","sourceRoot":"","sources":["../src/short-url-lib.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,GAAG,GAAG,4CAA4C,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAClF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqE,CAAC;IACpG,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC;IACvB,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5C,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zhin.js/plugin-short-url",
3
- "version": "3.0.2",
4
- "description": "URL shortener plugin for Zhin.js — shorten & expand URLs",
3
+ "version": "3.0.4",
4
+ "description": "URL shortener plugin for Zhin.js — shorten & expand URLs (Plugin Runtime)",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
7
7
  "types": "./lib/index.d.ts",
@@ -14,6 +14,9 @@
14
14
  "./package.json": "./package.json"
15
15
  },
16
16
  "files": [
17
+ "plugin.ts",
18
+ "schema.json",
19
+ "commands",
17
20
  "src",
18
21
  "lib",
19
22
  "agent",
@@ -33,16 +36,27 @@
33
36
  "url": "https://github.com/lc-cn"
34
37
  },
35
38
  "license": "MIT",
39
+ "dependencies": {
40
+ "@zhin.js/plugin-runtime": "1.1.0",
41
+ "@zhin.js/command": "1.0.2"
42
+ },
36
43
  "devDependencies": {
37
44
  "typescript": "^6.0.3",
45
+ "vitest": "^4.1.10",
38
46
  "zod": "^4.4.3",
39
- "zhin.js": "4.1.2",
40
- "@zhin.js/agent": "1.0.3"
47
+ "@zhin.js/agent": "1.0.5"
41
48
  },
42
49
  "peerDependencies": {
43
50
  "zod": "^4.0.0",
44
- "@zhin.js/agent": "1.0.3",
45
- "zhin.js": "4.1.2"
51
+ "@zhin.js/agent": "1.0.5"
52
+ },
53
+ "peerDependenciesMeta": {
54
+ "@zhin.js/agent": {
55
+ "optional": true
56
+ },
57
+ "zod": {
58
+ "optional": true
59
+ }
46
60
  },
47
61
  "repository": {
48
62
  "type": "git",
@@ -53,17 +67,26 @@
53
67
  "access": "public",
54
68
  "registry": "https://registry.npmjs.org"
55
69
  },
56
- "peerDependenciesMeta": {
57
- "@zhin.js/agent": {
58
- "optional": true
59
- },
60
- "zod": {
61
- "optional": true
62
- }
70
+ "engines": {
71
+ "node": "^20.19.0 || >=22.12.0"
72
+ },
73
+ "zhin": {
74
+ "protocol": 1,
75
+ "type": "plugin",
76
+ "entry": "./plugin.ts",
77
+ "engine": "^1.0.0",
78
+ "runtime": "trusted",
79
+ "features": [
80
+ {
81
+ "package": "@zhin.js/command",
82
+ "api": "^1.0.0"
83
+ }
84
+ ],
85
+ "plugins": []
63
86
  },
64
87
  "scripts": {
65
88
  "build": "tsc",
66
89
  "clean": "rimraf lib",
67
- "test": "sh -c 'cd ../../.. && vitest run plugins/utils/short-url/tests'"
90
+ "test": "NODE_OPTIONS=--experimental-strip-types vitest run --root ../../.. plugins/utils/short-url/tests"
68
91
  }
69
92
  }
package/plugin.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { definePlugin } from '@zhin.js/plugin-runtime';
2
+
3
+ export default definePlugin({
4
+ name: 'short-url',
5
+ metadata: {
6
+ displayName: 'Short URL',
7
+ },
8
+ });
package/schema.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "properties": {}
6
+ }
package/src/index.ts CHANGED
@@ -1,36 +1 @@
1
- import { formatCompact, MessageCommand, usePlugin } from 'zhin.js';
2
- import { expandUrl, isValidUrl, shortenUrl } from './short-url-lib.js';
3
-
4
- const { addCommand, logger } = usePlugin();
5
-
6
- addCommand(
7
- new MessageCommand('短链 <url:text>')
8
- .desc('缩短一个 URL')
9
- .action(async (_message, result) => {
10
- const url = result.params.url as string;
11
- if (!isValidUrl(url)) return '请提供有效的 HTTP/HTTPS 链接';
12
- try {
13
- const short = await shortenUrl(url);
14
- return `短链接: ${short}`;
15
- } catch (e: unknown) {
16
- logger.warn(formatCompact({ op: 'shorten', ok: false, error: e instanceof Error ? e.message : String(e) }));
17
- return `缩短失败: ${e instanceof Error ? e.message : String(e)}`;
18
- }
19
- }),
20
- );
21
-
22
- addCommand(
23
- new MessageCommand('展开 <url:text>')
24
- .desc('展开一个短链接,显示原始地址')
25
- .action(async (_message, result) => {
26
- const url = result.params.url as string;
27
- if (!isValidUrl(url)) return '请提供有效的 HTTP/HTTPS 链接';
28
- try {
29
- const original = await expandUrl(url);
30
- return `原始链接: ${original}`;
31
- } catch (e: unknown) {
32
- logger.warn(formatCompact({ op: 'expand', ok: false, error: e instanceof Error ? e.message : String(e) }));
33
- return `展开失败: ${e instanceof Error ? e.message : String(e)}`;
34
- }
35
- }),
36
- );
1
+ export { expandUrl, isValidUrl, shortenUrl } from './short-url-lib.js';
@@ -1,19 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { isValidUrl, shortenUrl } from '../../src/short-url-lib.js';
4
- export default defineTool({
5
- description: '缩短一个 URL,返回短链接',
6
- inputSchema: z.object({ url: z.string().min(1) }),
7
- keywords: ['短链', '缩短', 'shorten', 'short url'],
8
- async execute({ url }) {
9
- if (!isValidUrl(url))
10
- return '无效的 URL,需要 http:// 或 https:// 开头';
11
- try {
12
- return await shortenUrl(url);
13
- }
14
- catch (e) {
15
- return `缩短失败: ${e instanceof Error ? e.message : String(e)}`;
16
- }
17
- },
18
- });
19
- //# sourceMappingURL=short_url.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"short_url.js","sourceRoot":"","sources":["../../../agent/tools/short_url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEpE,eAAe,UAAU,CAAkB;IACzC,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC;IAC9C,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE;QACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,kCAAkC,CAAC;QAChE,IAAI,CAAC;YACH,OAAO,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
package/lib/src/index.js DELETED
@@ -1,34 +0,0 @@
1
- import { formatCompact, MessageCommand, usePlugin } from 'zhin.js';
2
- import { expandUrl, isValidUrl, shortenUrl } from './short-url-lib.js';
3
- const { addCommand, logger } = usePlugin();
4
- addCommand(new MessageCommand('短链 <url:text>')
5
- .desc('缩短一个 URL')
6
- .action(async (_message, result) => {
7
- const url = result.params.url;
8
- if (!isValidUrl(url))
9
- return '请提供有效的 HTTP/HTTPS 链接';
10
- try {
11
- const short = await shortenUrl(url);
12
- return `短链接: ${short}`;
13
- }
14
- catch (e) {
15
- logger.warn(formatCompact({ op: 'shorten', ok: false, error: e instanceof Error ? e.message : String(e) }));
16
- return `缩短失败: ${e instanceof Error ? e.message : String(e)}`;
17
- }
18
- }));
19
- addCommand(new MessageCommand('展开 <url:text>')
20
- .desc('展开一个短链接,显示原始地址')
21
- .action(async (_message, result) => {
22
- const url = result.params.url;
23
- if (!isValidUrl(url))
24
- return '请提供有效的 HTTP/HTTPS 链接';
25
- try {
26
- const original = await expandUrl(url);
27
- return `原始链接: ${original}`;
28
- }
29
- catch (e) {
30
- logger.warn(formatCompact({ op: 'expand', ok: false, error: e instanceof Error ? e.message : String(e) }));
31
- return `展开失败: ${e instanceof Error ? e.message : String(e)}`;
32
- }
33
- }));
34
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;AAE3C,UAAU,CACR,IAAI,cAAc,CAAC,eAAe,CAAC;KAChC,IAAI,CAAC,UAAU,CAAC;KAChB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAa,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,sBAAsB,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,QAAQ,KAAK,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5G,OAAO,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;AACH,CAAC,CAAC,CACL,CAAC;AAEF,UAAU,CACR,IAAI,cAAc,CAAC,eAAe,CAAC;KAChC,IAAI,CAAC,gBAAgB,CAAC;KACtB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAa,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,sBAAsB,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,SAAS,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3G,OAAO,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;AACH,CAAC,CAAC,CACL,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"short-url-lib.js","sourceRoot":"","sources":["../../src/short-url-lib.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,GAAG,GAAG,4CAA4C,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAClF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqE,CAAC;IACpG,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC;IACvB,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5C,CAAC"}
File without changes