ai-world-sdk 1.5.9 → 1.5.11
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/dist/cli/commands/plugin-token.d.ts +2 -0
- package/dist/cli/commands/plugin-token.js +181 -0
- package/dist/cli/index.js +2 -0
- package/dist/config.d.ts +3 -3
- package/dist/config.js +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -1
- package/dist/plugin-token.d.ts +71 -0
- package/dist/plugin-token.js +133 -0
- package/pacakges/ai-sdk-provider/.changeset/README.md +34 -0
- package/pacakges/ai-sdk-provider/.changeset/config.json +13 -0
- package/pacakges/ai-sdk-provider/.github/PULL_REQUEST_TEMPLATE.md +16 -0
- package/pacakges/ai-sdk-provider/.github/workflows/ci.yaml +24 -0
- package/pacakges/ai-sdk-provider/.github/workflows/publish-manual.yaml +36 -0
- package/pacakges/ai-sdk-provider/.github/workflows/publish.yaml +107 -0
- package/pacakges/ai-sdk-provider/.vscode/settings.json +32 -0
- package/pacakges/ai-sdk-provider/CHANGELOG.md +631 -0
- package/pacakges/ai-sdk-provider/CLAUDE.md +79 -0
- package/pacakges/ai-sdk-provider/CONTRIBUTING.md +241 -0
- package/pacakges/ai-sdk-provider/LICENSE +201 -0
- package/pacakges/ai-sdk-provider/README.md +426 -0
- package/pacakges/ai-sdk-provider/biome.json +122 -0
- package/pacakges/ai-sdk-provider/dist/index.d.mts +880 -0
- package/pacakges/ai-sdk-provider/dist/index.d.ts +880 -0
- package/pacakges/ai-sdk-provider/dist/index.js +5382 -0
- package/pacakges/ai-sdk-provider/dist/index.js.map +1 -0
- package/pacakges/ai-sdk-provider/dist/index.mjs +5348 -0
- package/pacakges/ai-sdk-provider/dist/index.mjs.map +1 -0
- package/pacakges/ai-sdk-provider/dist/internal/index.d.mts +723 -0
- package/pacakges/ai-sdk-provider/dist/internal/index.d.ts +723 -0
- package/pacakges/ai-sdk-provider/dist/internal/index.js +5112 -0
- package/pacakges/ai-sdk-provider/dist/internal/index.js.map +1 -0
- package/pacakges/ai-sdk-provider/dist/internal/index.mjs +5076 -0
- package/pacakges/ai-sdk-provider/dist/internal/index.mjs.map +1 -0
- package/pacakges/ai-sdk-provider/e2e/cache-control.test.ts +74 -0
- package/pacakges/ai-sdk-provider/e2e/embeddings/index.test.ts +128 -0
- package/pacakges/ai-sdk-provider/e2e/fixtures/pdfs/generate-pdfs.sh +181 -0
- package/pacakges/ai-sdk-provider/e2e/fixtures/pdfs/large.json +7 -0
- package/pacakges/ai-sdk-provider/e2e/fixtures/pdfs/large.pdf +12865 -70
- package/pacakges/ai-sdk-provider/e2e/gemini/reasoning-multiturn.test.ts +221 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-160-toolcallid-uniqueness.test.ts +88 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-166-finish-reason-null.test.ts +129 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-171-cache-tool-key-ordering.test.ts +70 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-181-tool-response-image.test.ts +199 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-190-streamobject-flush-error.test.ts +114 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-194-grok-invalid-json.test.ts +93 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-196-anthropic-1h-cache-ttl.test.ts +85 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-199-openai-pdf-processing.test.ts +102 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-212-anthropic-web-search-online.test.ts +128 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-234-prompt-caching.test.ts +201 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-237-reasoning-linebreaks.test.ts +103 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-248-gemini-web-search-empty-response.test.ts +210 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-269-image-size-parameter.test.ts +208 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-287-tool-calls-missing-arguments.test.ts +87 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-341-cache-control-last-text-part.test.ts +138 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-383-video-url-support.test.ts +120 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-386-image-files-parameter.test.ts +109 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-387-temperature-settings.test.ts +113 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-389-system-cache-control.test.ts +107 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-391-reasoning-effort-values.test.ts +121 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-392-auto-router-plugin.test.ts +84 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-394-reasoning-end-signature.test.ts +157 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-407-token-usage-details.test.ts +141 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-411-output-object-tools-conflict.test.ts +75 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-412-mid-stream-termination.test.ts +217 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-413-reasoning-metadata-bloat.test.ts +292 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-413-tool-input-end-streaming.test.ts +167 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-418-gemini-thought-signature.test.ts +171 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-419-420-finish-reason-usage-fallback.test.ts +87 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-419-usage-fallback.test.ts +106 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-422-incomplete-error-information.test.ts +46 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-423-signature-stripped.test.ts +165 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-423-streaming-signature-loss.test.ts +161 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-423-uimessage-roundtrip.test.ts +111 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-424-anthropic-auto-cache.test.ts +66 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-432-raw-response-body.test.ts +52 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-438-gemini-reasoning-redacted.test.ts +120 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-439-exact-payload.test.ts +108 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-443-eager-input-streaming.test.ts +204 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-453-signature-reopen.test.ts +203 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-474-web-search-server-tool.test.ts +102 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-483-response-format-strict-option.test.ts +199 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-484-image-url-query-params.test.ts +165 -0
- package/pacakges/ai-sdk-provider/e2e/issues/issue-63-web-search-annotations.test.ts +159 -0
- package/pacakges/ai-sdk-provider/e2e/parallel-tool-calls.test.ts +425 -0
- package/pacakges/ai-sdk-provider/e2e/pdf-blob/index.test.ts +139 -0
- package/pacakges/ai-sdk-provider/e2e/pdf-url/index.test.ts +60 -0
- package/pacakges/ai-sdk-provider/e2e/reasoning-effort.test.ts +139 -0
- package/pacakges/ai-sdk-provider/e2e/reasoning-multiturn/index.test.ts +69 -0
- package/pacakges/ai-sdk-provider/e2e/tools-with-reasoning.test.ts +76 -0
- package/pacakges/ai-sdk-provider/e2e/tools.ts +61 -0
- package/pacakges/ai-sdk-provider/e2e/usage-accounting.test.ts +55 -0
- package/pacakges/ai-sdk-provider/e2e/utils.ts +15 -0
- package/pacakges/ai-sdk-provider/e2e/video-generation.test.ts +43 -0
- package/pacakges/ai-sdk-provider/e2e/web-search/index.test.ts +50 -0
- package/pacakges/ai-sdk-provider/example.env.e2e +3 -0
- package/pacakges/ai-sdk-provider/package.json +89 -0
- package/pacakges/ai-sdk-provider/pnpm-lock.yaml +3075 -0
- package/pacakges/ai-sdk-provider/pnpm-workspace.yaml +6 -0
- package/pacakges/ai-sdk-provider/src/chat/convert-to-openrouter-chat-messages.test.ts +3079 -0
- package/pacakges/ai-sdk-provider/src/chat/convert-to-openrouter-chat-messages.ts +618 -0
- package/pacakges/ai-sdk-provider/src/chat/errors.test.ts +97 -0
- package/pacakges/ai-sdk-provider/src/chat/file-parser-schema.test.ts +112 -0
- package/pacakges/ai-sdk-provider/src/chat/file-url-utils.ts +167 -0
- package/pacakges/ai-sdk-provider/src/chat/get-tool-choice.ts +42 -0
- package/pacakges/ai-sdk-provider/src/chat/index.test.ts +6093 -0
- package/pacakges/ai-sdk-provider/src/chat/index.ts +1300 -0
- package/pacakges/ai-sdk-provider/src/chat/is-url.ts +15 -0
- package/pacakges/ai-sdk-provider/src/chat/large-pdf-response.test.ts +108 -0
- package/pacakges/ai-sdk-provider/src/chat/payload-comparison.test.ts +154 -0
- package/pacakges/ai-sdk-provider/src/chat/schemas.ts +288 -0
- package/pacakges/ai-sdk-provider/src/chat/signature-roundtrip.test.ts +777 -0
- package/pacakges/ai-sdk-provider/src/completion/convert-to-openrouter-completion-prompt.ts +150 -0
- package/pacakges/ai-sdk-provider/src/completion/index.test.ts +958 -0
- package/pacakges/ai-sdk-provider/src/completion/index.ts +441 -0
- package/pacakges/ai-sdk-provider/src/completion/schemas.ts +67 -0
- package/pacakges/ai-sdk-provider/src/embedding/index.test.ts +262 -0
- package/pacakges/ai-sdk-provider/src/embedding/index.ts +113 -0
- package/pacakges/ai-sdk-provider/src/embedding/schemas.ts +26 -0
- package/pacakges/ai-sdk-provider/src/facade.ts +131 -0
- package/pacakges/ai-sdk-provider/src/image/index.test.ts +769 -0
- package/pacakges/ai-sdk-provider/src/image/index.ts +206 -0
- package/pacakges/ai-sdk-provider/src/image/schemas.ts +48 -0
- package/pacakges/ai-sdk-provider/src/index.ts +3 -0
- package/pacakges/ai-sdk-provider/src/internal/index.ts +10 -0
- package/pacakges/ai-sdk-provider/src/provider.ts +327 -0
- package/pacakges/ai-sdk-provider/src/schemas/error-response.test.ts +171 -0
- package/pacakges/ai-sdk-provider/src/schemas/error-response.ts +105 -0
- package/pacakges/ai-sdk-provider/src/schemas/format.ts +12 -0
- package/pacakges/ai-sdk-provider/src/schemas/image.ts +23 -0
- package/pacakges/ai-sdk-provider/src/schemas/provider-metadata.ts +91 -0
- package/pacakges/ai-sdk-provider/src/schemas/reasoning-details.ts +92 -0
- package/pacakges/ai-sdk-provider/src/tests/provider-options.test.ts +234 -0
- package/pacakges/ai-sdk-provider/src/tests/stream-usage-accounting.test.ts +409 -0
- package/pacakges/ai-sdk-provider/src/tests/usage-accounting.test.ts +555 -0
- package/pacakges/ai-sdk-provider/src/tests/web-search-tool.test.ts +319 -0
- package/pacakges/ai-sdk-provider/src/tool/web-search.ts +52 -0
- package/pacakges/ai-sdk-provider/src/types/index.ts +114 -0
- package/pacakges/ai-sdk-provider/src/types/openrouter-api-types.ts +83 -0
- package/pacakges/ai-sdk-provider/src/types/openrouter-chat-completions-input.ts +116 -0
- package/pacakges/ai-sdk-provider/src/types/openrouter-chat-settings.ts +233 -0
- package/pacakges/ai-sdk-provider/src/types/openrouter-completion-settings.ts +39 -0
- package/pacakges/ai-sdk-provider/src/types/openrouter-embedding-settings.ts +56 -0
- package/pacakges/ai-sdk-provider/src/types/openrouter-image-settings.ts +49 -0
- package/pacakges/ai-sdk-provider/src/types/openrouter-video-settings.ts +26 -0
- package/pacakges/ai-sdk-provider/src/utils/compute-token-usage.test.ts +186 -0
- package/pacakges/ai-sdk-provider/src/utils/compute-token-usage.ts +55 -0
- package/pacakges/ai-sdk-provider/src/utils/deterministic-stringify.test.ts +87 -0
- package/pacakges/ai-sdk-provider/src/utils/deterministic-stringify.ts +35 -0
- package/pacakges/ai-sdk-provider/src/utils/map-finish-reason.ts +43 -0
- package/pacakges/ai-sdk-provider/src/utils/reasoning-details-duplicate-tracker.test.ts +324 -0
- package/pacakges/ai-sdk-provider/src/utils/reasoning-details-duplicate-tracker.ts +70 -0
- package/pacakges/ai-sdk-provider/src/utils/remove-undefined.ts +12 -0
- package/pacakges/ai-sdk-provider/src/utils/type-guards.ts +6 -0
- package/pacakges/ai-sdk-provider/src/utils/with-stream-error-handling.test.ts +119 -0
- package/pacakges/ai-sdk-provider/src/utils/with-stream-error-handling.ts +25 -0
- package/pacakges/ai-sdk-provider/src/utils/with-user-agent-suffix.test.ts +133 -0
- package/pacakges/ai-sdk-provider/src/utils/with-user-agent-suffix.ts +78 -0
- package/pacakges/ai-sdk-provider/src/version.ts +4 -0
- package/pacakges/ai-sdk-provider/src/video/index.test.ts +515 -0
- package/pacakges/ai-sdk-provider/src/video/index.ts +275 -0
- package/pacakges/ai-sdk-provider/src/video/schemas.ts +36 -0
- package/pacakges/ai-sdk-provider/tsconfig.json +42 -0
- package/pacakges/ai-sdk-provider/tsup.config.ts +28 -0
- package/pacakges/ai-sdk-provider/turbo.json +8 -0
- package/pacakges/ai-sdk-provider/vitest.e2e.config.ts +21 -0
- package/pacakges/ai-sdk-provider/vitest.edge.config.ts +16 -0
- package/pacakges/ai-sdk-provider/vitest.issues.config.ts +28 -0
- package/pacakges/ai-sdk-provider/vitest.node.config.ts +16 -0
- package/package.json +3 -2
- package/skills/ai-world-sdk/SKILL.md +1 -0
- package/skills/ai-world-sdk/docs/admin-api.md +55 -0
- package/skills/ai-world-sdk/docs/cli-commands.md +14 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerPluginTokenCommands = registerPluginTokenCommands;
|
|
4
|
+
const config_1 = require("../config");
|
|
5
|
+
const output_1 = require("../output");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
function collectOpts(cmd) {
|
|
8
|
+
const chain = [];
|
|
9
|
+
for (let c = cmd; c; c = c.parent)
|
|
10
|
+
chain.unshift(c);
|
|
11
|
+
const o = {};
|
|
12
|
+
for (const c of chain)
|
|
13
|
+
Object.assign(o, c.opts());
|
|
14
|
+
return o;
|
|
15
|
+
}
|
|
16
|
+
function resolveAndInit(cmd) {
|
|
17
|
+
const o = collectOpts(cmd);
|
|
18
|
+
const auth = (0, config_1.resolveAuth)({
|
|
19
|
+
baseUrl: o.baseUrl,
|
|
20
|
+
token: o.token,
|
|
21
|
+
pluginId: o.pluginId,
|
|
22
|
+
});
|
|
23
|
+
(0, utils_1.initSDK)(auth);
|
|
24
|
+
return o;
|
|
25
|
+
}
|
|
26
|
+
function parsePositiveInt(raw, flag) {
|
|
27
|
+
if (raw == null || raw === '')
|
|
28
|
+
return undefined;
|
|
29
|
+
const n = parseInt(raw, 10);
|
|
30
|
+
if (!Number.isFinite(n)) {
|
|
31
|
+
const err = new Error(`无效的 ${flag}: ${raw}`);
|
|
32
|
+
err.code = 'VALIDATION_ERROR';
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
35
|
+
return n;
|
|
36
|
+
}
|
|
37
|
+
function registerPluginTokenCommands(program) {
|
|
38
|
+
const pt = program.command('plugin-token').description('插件 Token 管理(需管理员权限)');
|
|
39
|
+
pt.command('list')
|
|
40
|
+
.description('列出插件 Token')
|
|
41
|
+
.option('--plugin-id <id>', '按插件 ID 过滤')
|
|
42
|
+
.option('--active', '仅显示启用')
|
|
43
|
+
.option('--inactive', '仅显示停用')
|
|
44
|
+
.option('--page <n>', '页码')
|
|
45
|
+
.option('--page-size <n>', '每页条数')
|
|
46
|
+
.action(async (opts, cmd) => {
|
|
47
|
+
try {
|
|
48
|
+
const o = resolveAndInit(cmd);
|
|
49
|
+
const { PluginTokenClient } = require('../../plugin-token');
|
|
50
|
+
const client = new PluginTokenClient();
|
|
51
|
+
const isActive = opts.active ? true : opts.inactive ? false : undefined;
|
|
52
|
+
const result = await client.list({
|
|
53
|
+
pluginId: opts.pluginId,
|
|
54
|
+
isActive,
|
|
55
|
+
page: parsePositiveInt(opts.page, '--page') || 1,
|
|
56
|
+
pageSize: parsePositiveInt(opts.pageSize, '--page-size') || 20,
|
|
57
|
+
});
|
|
58
|
+
(0, output_1.output)(result, (0, utils_1.getFormat)(program));
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
(0, utils_1.handleError)(err, 'plugin-token list');
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
pt.command('create')
|
|
65
|
+
.description('创建插件 Token')
|
|
66
|
+
.requiredOption('--plugin-id <id>', '插件 ID')
|
|
67
|
+
.requiredOption('--name <name>', 'Token 名称')
|
|
68
|
+
.requiredOption('--role-id <id>', '角色 ID')
|
|
69
|
+
.option('--description <desc>', '描述')
|
|
70
|
+
.option('--expires <date>', '过期时间 (ISO 8601)')
|
|
71
|
+
.action(async (opts, cmd) => {
|
|
72
|
+
try {
|
|
73
|
+
resolveAndInit(cmd);
|
|
74
|
+
const { PluginTokenClient } = require('../../plugin-token');
|
|
75
|
+
const client = new PluginTokenClient();
|
|
76
|
+
const result = await client.create({
|
|
77
|
+
plugin_id: opts.pluginId,
|
|
78
|
+
name: opts.name,
|
|
79
|
+
role_id: Number(opts.roleId),
|
|
80
|
+
description: opts.description,
|
|
81
|
+
expires_at: opts.expires,
|
|
82
|
+
});
|
|
83
|
+
(0, output_1.output)(result, (0, utils_1.getFormat)(program));
|
|
84
|
+
console.error(`\n⚠️ Token 仅显示一次,请妥善保存: ${result.token}`);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
(0, utils_1.handleError)(err, 'plugin-token create');
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
pt.command('get')
|
|
91
|
+
.argument('<id>', 'Token ID')
|
|
92
|
+
.description('获取插件 Token 详情')
|
|
93
|
+
.action(async (idArg, _opts, cmd) => {
|
|
94
|
+
try {
|
|
95
|
+
resolveAndInit(cmd);
|
|
96
|
+
const { PluginTokenClient } = require('../../plugin-token');
|
|
97
|
+
const client = new PluginTokenClient();
|
|
98
|
+
const result = await client.get(Number(idArg));
|
|
99
|
+
(0, output_1.output)(result, (0, utils_1.getFormat)(program));
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
(0, utils_1.handleError)(err, 'plugin-token get');
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
pt.command('update')
|
|
106
|
+
.argument('<id>', 'Token ID')
|
|
107
|
+
.description('更新插件 Token')
|
|
108
|
+
.option('--name <name>', '名称')
|
|
109
|
+
.option('--description <desc>', '描述')
|
|
110
|
+
.option('--role-id <id>', '角色 ID')
|
|
111
|
+
.option('--expires <date>', '过期时间 (ISO 8601)')
|
|
112
|
+
.action(async (idArg, opts, cmd) => {
|
|
113
|
+
try {
|
|
114
|
+
resolveAndInit(cmd);
|
|
115
|
+
const { PluginTokenClient } = require('../../plugin-token');
|
|
116
|
+
const client = new PluginTokenClient();
|
|
117
|
+
const data = {};
|
|
118
|
+
if (opts.name != null)
|
|
119
|
+
data.name = opts.name;
|
|
120
|
+
if (opts.description != null)
|
|
121
|
+
data.description = opts.description;
|
|
122
|
+
if (opts.roleId != null)
|
|
123
|
+
data.role_id = Number(opts.roleId);
|
|
124
|
+
if (opts.expires != null)
|
|
125
|
+
data.expires_at = opts.expires;
|
|
126
|
+
const result = await client.update(Number(idArg), data);
|
|
127
|
+
(0, output_1.output)(result, (0, utils_1.getFormat)(program));
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
(0, utils_1.handleError)(err, 'plugin-token update');
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
pt.command('delete')
|
|
134
|
+
.argument('<id>', 'Token ID')
|
|
135
|
+
.description('删除插件 Token')
|
|
136
|
+
.action(async (idArg, _opts, cmd) => {
|
|
137
|
+
try {
|
|
138
|
+
resolveAndInit(cmd);
|
|
139
|
+
const { PluginTokenClient } = require('../../plugin-token');
|
|
140
|
+
const client = new PluginTokenClient();
|
|
141
|
+
await client.delete(Number(idArg));
|
|
142
|
+
(0, output_1.output)({ deleted: true, id: Number(idArg) }, (0, utils_1.getFormat)(program));
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
(0, utils_1.handleError)(err, 'plugin-token delete');
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
pt.command('regenerate')
|
|
149
|
+
.argument('<id>', 'Token ID')
|
|
150
|
+
.description('重新生成 Token(旧 Token 立即失效)')
|
|
151
|
+
.action(async (idArg, _opts, cmd) => {
|
|
152
|
+
try {
|
|
153
|
+
resolveAndInit(cmd);
|
|
154
|
+
const { PluginTokenClient } = require('../../plugin-token');
|
|
155
|
+
const client = new PluginTokenClient();
|
|
156
|
+
const result = await client.regenerate(Number(idArg));
|
|
157
|
+
(0, output_1.output)(result, (0, utils_1.getFormat)(program));
|
|
158
|
+
console.error(`\n⚠️ 新 Token 仅显示一次: ${result.token}`);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
(0, utils_1.handleError)(err, 'plugin-token regenerate');
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
pt.command('toggle')
|
|
165
|
+
.argument('<id>', 'Token ID')
|
|
166
|
+
.description('切换启用/停用状态')
|
|
167
|
+
.action(async (idArg, _opts, cmd) => {
|
|
168
|
+
try {
|
|
169
|
+
resolveAndInit(cmd);
|
|
170
|
+
const { PluginTokenClient } = require('../../plugin-token');
|
|
171
|
+
const client = new PluginTokenClient();
|
|
172
|
+
const result = await client.toggle(Number(idArg));
|
|
173
|
+
const status = result.is_active ? '已启用' : '已停用';
|
|
174
|
+
console.error(`Token #${idArg} ${status}`);
|
|
175
|
+
(0, output_1.output)(result, (0, utils_1.getFormat)(program));
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
(0, utils_1.handleError)(err, 'plugin-token toggle');
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
package/dist/cli/index.js
CHANGED
|
@@ -104,6 +104,7 @@ const stats_1 = require("./commands/stats");
|
|
|
104
104
|
const ai_config_1 = require("./commands/ai-config");
|
|
105
105
|
const shared_1 = require("./commands/shared");
|
|
106
106
|
const chrome_1 = require("./commands/chrome");
|
|
107
|
+
const plugin_token_1 = require("./commands/plugin-token");
|
|
107
108
|
(0, help_1.registerHelpCommand)(program);
|
|
108
109
|
(0, version_1.registerVersionCommand)(program);
|
|
109
110
|
(0, auth_1.registerAuthCommands)(program);
|
|
@@ -121,6 +122,7 @@ const chrome_1 = require("./commands/chrome");
|
|
|
121
122
|
(0, ai_config_1.registerAiConfigCommands)(program);
|
|
122
123
|
(0, shared_1.registerSharedCommands)(program);
|
|
123
124
|
(0, chrome_1.registerChromeCommands)(program);
|
|
125
|
+
(0, plugin_token_1.registerPluginTokenCommands)(program);
|
|
124
126
|
program.parseAsync(process.argv).catch((err) => {
|
|
125
127
|
(0, utils_1.handleError)(err, process.argv.slice(2).join(' '));
|
|
126
128
|
});
|
package/dist/config.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* 注意: {VERSION} 占位符会在构建时被替换为实际版本号
|
|
11
11
|
*/
|
|
12
|
-
export declare const SDK_SIGNATURE = "AI_WORLD_SDK_V:1.5.
|
|
12
|
+
export declare const SDK_SIGNATURE = "AI_WORLD_SDK_V:1.5.11";
|
|
13
13
|
/**
|
|
14
14
|
* 版本兼容性错误
|
|
15
15
|
*/
|
|
@@ -35,8 +35,8 @@ declare class SDKConfig {
|
|
|
35
35
|
private _authCheckPromise;
|
|
36
36
|
private _currentUser;
|
|
37
37
|
private _cliMode;
|
|
38
|
-
readonly sdkSignature = "AI_WORLD_SDK_V:1.5.
|
|
39
|
-
readonly sdkVersion = "1.5.
|
|
38
|
+
readonly sdkSignature = "AI_WORLD_SDK_V:1.5.11";
|
|
39
|
+
readonly sdkVersion = "1.5.11";
|
|
40
40
|
constructor();
|
|
41
41
|
/**
|
|
42
42
|
* Set global base URL
|
package/dist/config.js
CHANGED
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.sdkConfig = exports.VersionCompatibilityError = exports.SDK_SIGNATURE = void 0;
|
|
8
8
|
// SDK 版本号(构建时自动从 package.json 更新)
|
|
9
9
|
// 此版本号会在运行 npm run build 时自动从 package.json 读取并更新
|
|
10
|
-
const SDK_VERSION = "1.5.
|
|
10
|
+
const SDK_VERSION = "1.5.11";
|
|
11
11
|
/**
|
|
12
12
|
* SDK 特征码 - 用于在构建后的 JS 文件中识别 SDK 版本
|
|
13
13
|
* 格式: AI_WORLD_SDK_V:版本号
|
|
@@ -15,7 +15,7 @@ const SDK_VERSION = "1.5.9";
|
|
|
15
15
|
*
|
|
16
16
|
* 注意: {VERSION} 占位符会在构建时被替换为实际版本号
|
|
17
17
|
*/
|
|
18
|
-
exports.SDK_SIGNATURE = "AI_WORLD_SDK_V:1.5.
|
|
18
|
+
exports.SDK_SIGNATURE = "AI_WORLD_SDK_V:1.5.11";
|
|
19
19
|
/**
|
|
20
20
|
* 版本兼容性错误
|
|
21
21
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export { StatsClient, DashboardClient, type StatsClientConfig, type AiApiCallsOp
|
|
|
39
39
|
export { AIConfigClient, type AIConfigClientConfig, } from "./ai-config";
|
|
40
40
|
export { SharedResourceClient, type SharedResourceClientConfig, type SharedResourceInfo, type SharedResourceListResponse, type ListSharedResourceOptions, type UpdateSharedResourceData, } from "./shared-resource";
|
|
41
41
|
export { ChromeExtensionClient, type ChromeExtensionClientConfig, type ChromeExtensionInfo, type ChromeExtensionListResponse, type ListChromeExtensionsOptions, type CreateChromeExtensionData, } from "./chrome-extension";
|
|
42
|
+
export { PluginTokenClient, type PluginTokenClientConfig, type PluginTokenInfo, type PluginTokenCreateResponse, type PluginTokenListResponse, type ListPluginTokensOptions, type CreatePluginTokenData, type UpdatePluginTokenData, } from "./plugin-token";
|
|
42
43
|
export { sdkConfig, VersionCompatibilityError, SDK_SIGNATURE, type AuthenticatedUser } from "./config";
|
|
43
44
|
/**
|
|
44
45
|
* Create a chat model instance based on model name
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
20
20
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.bytesFromUrl = exports.getImageProxyConfig = exports.pollImageTask = exports.getImageTask = exports.submitImageTask = exports.generateImageSync = exports.generateKunpoImage = exports.SDK_SIGNATURE = exports.VersionCompatibilityError = exports.sdkConfig = exports.ChromeExtensionClient = exports.SharedResourceClient = exports.AIConfigClient = exports.DashboardClient = exports.StatsClient = exports.PluginManagementClient = exports.AdminClient = exports.getCurrentUserInfo = exports.AuthClient = exports.AgentSkillClient = exports.VersionedResourceClient = exports.ResourceClient = exports.MinioStorageClient = exports.DownloadClient = exports.OpenAIVideoGenerationClient = exports.VideoUnderstandingClient = exports.VideoGenerationClient = exports.GeminiImageGenerationClient = exports.DoubaoImageGenerationClient = exports.ChatAnthropic = exports.ChatGoogleGenerativeAI = exports.ChatOpenAI = exports.BaseChatModel = exports.AIMessageChunk = exports.SystemMessage = exports.AIMessage = exports.HumanMessage = void 0;
|
|
23
|
+
exports.bytesFromUrl = exports.getImageProxyConfig = exports.pollImageTask = exports.getImageTask = exports.submitImageTask = exports.generateImageSync = exports.generateKunpoImage = exports.SDK_SIGNATURE = exports.VersionCompatibilityError = exports.sdkConfig = exports.PluginTokenClient = exports.ChromeExtensionClient = exports.SharedResourceClient = exports.AIConfigClient = exports.DashboardClient = exports.StatsClient = exports.PluginManagementClient = exports.AdminClient = exports.getCurrentUserInfo = exports.AuthClient = exports.AgentSkillClient = exports.VersionedResourceClient = exports.ResourceClient = exports.MinioStorageClient = exports.DownloadClient = exports.OpenAIVideoGenerationClient = exports.VideoUnderstandingClient = exports.VideoGenerationClient = exports.GeminiImageGenerationClient = exports.DoubaoImageGenerationClient = exports.ChatAnthropic = exports.ChatGoogleGenerativeAI = exports.ChatOpenAI = exports.BaseChatModel = exports.AIMessageChunk = exports.SystemMessage = exports.AIMessage = exports.HumanMessage = void 0;
|
|
24
24
|
exports.createChatModel = createChatModel;
|
|
25
25
|
const openai_1 = require("./chat_models/openai");
|
|
26
26
|
const google_1 = require("./chat_models/google");
|
|
@@ -85,6 +85,9 @@ Object.defineProperty(exports, "SharedResourceClient", { enumerable: true, get:
|
|
|
85
85
|
// Export chrome extension client
|
|
86
86
|
var chrome_extension_1 = require("./chrome-extension");
|
|
87
87
|
Object.defineProperty(exports, "ChromeExtensionClient", { enumerable: true, get: function () { return chrome_extension_1.ChromeExtensionClient; } });
|
|
88
|
+
// Export plugin token client
|
|
89
|
+
var plugin_token_1 = require("./plugin-token");
|
|
90
|
+
Object.defineProperty(exports, "PluginTokenClient", { enumerable: true, get: function () { return plugin_token_1.PluginTokenClient; } });
|
|
88
91
|
// Export global configuration
|
|
89
92
|
var config_2 = require("./config");
|
|
90
93
|
Object.defineProperty(exports, "sdkConfig", { enumerable: true, get: function () { return config_2.sdkConfig; } });
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Token Client
|
|
3
|
+
* 插件 Token 管理客户端(管理员接口)
|
|
4
|
+
*/
|
|
5
|
+
export interface PluginTokenClientConfig {
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
token?: string;
|
|
8
|
+
headers?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
export interface PluginTokenInfo {
|
|
11
|
+
id: number;
|
|
12
|
+
plugin_id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
is_active: boolean;
|
|
16
|
+
token_prefix: string;
|
|
17
|
+
last_used_at?: string;
|
|
18
|
+
expires_at?: string;
|
|
19
|
+
created_at: string;
|
|
20
|
+
updated_at: string;
|
|
21
|
+
role?: {
|
|
22
|
+
id: number;
|
|
23
|
+
name: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
permissions: Record<string, any>;
|
|
26
|
+
};
|
|
27
|
+
created_by_name?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface PluginTokenCreateResponse extends PluginTokenInfo {
|
|
30
|
+
token: string;
|
|
31
|
+
}
|
|
32
|
+
export interface PluginTokenListResponse {
|
|
33
|
+
items: PluginTokenInfo[];
|
|
34
|
+
total: number;
|
|
35
|
+
page: number;
|
|
36
|
+
page_size: number;
|
|
37
|
+
}
|
|
38
|
+
export interface ListPluginTokensOptions {
|
|
39
|
+
page?: number;
|
|
40
|
+
pageSize?: number;
|
|
41
|
+
pluginId?: string;
|
|
42
|
+
search?: string;
|
|
43
|
+
isActive?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface CreatePluginTokenData {
|
|
46
|
+
plugin_id: string;
|
|
47
|
+
name: string;
|
|
48
|
+
description?: string;
|
|
49
|
+
role_id: number;
|
|
50
|
+
expires_at?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface UpdatePluginTokenData {
|
|
53
|
+
name?: string;
|
|
54
|
+
description?: string;
|
|
55
|
+
role_id?: number;
|
|
56
|
+
expires_at?: string | null;
|
|
57
|
+
}
|
|
58
|
+
export declare class PluginTokenClient {
|
|
59
|
+
private baseUrl;
|
|
60
|
+
private headers;
|
|
61
|
+
constructor(config?: PluginTokenClientConfig);
|
|
62
|
+
private handleErrorResponse;
|
|
63
|
+
private buildUrl;
|
|
64
|
+
list(options?: ListPluginTokensOptions): Promise<PluginTokenListResponse>;
|
|
65
|
+
create(data: CreatePluginTokenData): Promise<PluginTokenCreateResponse>;
|
|
66
|
+
get(id: number): Promise<PluginTokenInfo>;
|
|
67
|
+
update(id: number, data: UpdatePluginTokenData): Promise<PluginTokenInfo>;
|
|
68
|
+
delete(id: number): Promise<void>;
|
|
69
|
+
regenerate(id: number): Promise<PluginTokenCreateResponse>;
|
|
70
|
+
toggle(id: number): Promise<PluginTokenInfo>;
|
|
71
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Plugin Token Client
|
|
4
|
+
* 插件 Token 管理客户端(管理员接口)
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.PluginTokenClient = void 0;
|
|
8
|
+
const config_1 = require("./config");
|
|
9
|
+
const log_1 = require("./log");
|
|
10
|
+
class PluginTokenClient {
|
|
11
|
+
constructor(config = {}) {
|
|
12
|
+
this.baseUrl =
|
|
13
|
+
config.baseUrl ||
|
|
14
|
+
config_1.sdkConfig.getServerUrl() ||
|
|
15
|
+
(typeof window !== "undefined" ? window.location.origin : "");
|
|
16
|
+
const globalHeaders = config_1.sdkConfig.getHeaders();
|
|
17
|
+
const globalToken = config.token || config_1.sdkConfig.getToken();
|
|
18
|
+
this.headers = {
|
|
19
|
+
"Content-Type": "application/json",
|
|
20
|
+
...globalHeaders,
|
|
21
|
+
...config.headers,
|
|
22
|
+
};
|
|
23
|
+
if (globalToken) {
|
|
24
|
+
this.headers["Authorization"] = `Bearer ${globalToken}`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async handleErrorResponse(response) {
|
|
28
|
+
let errorMessage = `Request failed: ${response.status} ${response.statusText}`;
|
|
29
|
+
try {
|
|
30
|
+
const errorText = await response.text();
|
|
31
|
+
const errorJson = JSON.parse(errorText);
|
|
32
|
+
errorMessage = errorJson.detail || errorMessage;
|
|
33
|
+
}
|
|
34
|
+
catch { }
|
|
35
|
+
throw new Error(errorMessage);
|
|
36
|
+
}
|
|
37
|
+
buildUrl(path, params) {
|
|
38
|
+
const url = `${this.baseUrl}${path}`;
|
|
39
|
+
if (!params)
|
|
40
|
+
return url;
|
|
41
|
+
const sp = new URLSearchParams();
|
|
42
|
+
for (const [k, v] of Object.entries(params)) {
|
|
43
|
+
if (v !== undefined && v !== null)
|
|
44
|
+
sp.set(k, String(v));
|
|
45
|
+
}
|
|
46
|
+
const qs = sp.toString();
|
|
47
|
+
return qs ? `${url}?${qs}` : url;
|
|
48
|
+
}
|
|
49
|
+
async list(options = {}) {
|
|
50
|
+
const url = this.buildUrl("/api/admin/plugin-tokens", {
|
|
51
|
+
page: options.page,
|
|
52
|
+
page_size: options.pageSize,
|
|
53
|
+
plugin_id: options.pluginId,
|
|
54
|
+
search: options.search,
|
|
55
|
+
is_active: options.isActive,
|
|
56
|
+
});
|
|
57
|
+
(0, log_1.debugLog)("PluginTokenClient.list", url);
|
|
58
|
+
(0, log_1.logRequest)("GET", url, this.headers);
|
|
59
|
+
const resp = await fetch(url, { method: "GET", headers: this.headers });
|
|
60
|
+
(0, log_1.logResponse)(resp.status, resp.statusText, resp.headers);
|
|
61
|
+
if (!resp.ok)
|
|
62
|
+
await this.handleErrorResponse(resp);
|
|
63
|
+
return resp.json();
|
|
64
|
+
}
|
|
65
|
+
async create(data) {
|
|
66
|
+
const url = `${this.baseUrl}/api/admin/plugin-tokens`;
|
|
67
|
+
(0, log_1.debugLog)("PluginTokenClient.create", url);
|
|
68
|
+
(0, log_1.logRequest)("POST", url, this.headers, data);
|
|
69
|
+
const resp = await fetch(url, {
|
|
70
|
+
method: "POST",
|
|
71
|
+
headers: this.headers,
|
|
72
|
+
body: JSON.stringify(data),
|
|
73
|
+
});
|
|
74
|
+
(0, log_1.logResponse)(resp.status, resp.statusText, resp.headers);
|
|
75
|
+
if (!resp.ok)
|
|
76
|
+
await this.handleErrorResponse(resp);
|
|
77
|
+
return resp.json();
|
|
78
|
+
}
|
|
79
|
+
async get(id) {
|
|
80
|
+
const url = `${this.baseUrl}/api/admin/plugin-tokens/${id}`;
|
|
81
|
+
(0, log_1.debugLog)("PluginTokenClient.get", url);
|
|
82
|
+
(0, log_1.logRequest)("GET", url);
|
|
83
|
+
const resp = await fetch(url, { method: "GET", headers: this.headers });
|
|
84
|
+
(0, log_1.logResponse)(resp.status, resp.statusText, resp.headers);
|
|
85
|
+
if (!resp.ok)
|
|
86
|
+
await this.handleErrorResponse(resp);
|
|
87
|
+
return resp.json();
|
|
88
|
+
}
|
|
89
|
+
async update(id, data) {
|
|
90
|
+
const url = `${this.baseUrl}/api/admin/plugin-tokens/${id}`;
|
|
91
|
+
(0, log_1.debugLog)("PluginTokenClient.update", url);
|
|
92
|
+
(0, log_1.logRequest)("PATCH", url, this.headers, data);
|
|
93
|
+
const resp = await fetch(url, {
|
|
94
|
+
method: "PATCH",
|
|
95
|
+
headers: this.headers,
|
|
96
|
+
body: JSON.stringify(data),
|
|
97
|
+
});
|
|
98
|
+
(0, log_1.logResponse)(resp.status, resp.statusText, resp.headers);
|
|
99
|
+
if (!resp.ok)
|
|
100
|
+
await this.handleErrorResponse(resp);
|
|
101
|
+
return resp.json();
|
|
102
|
+
}
|
|
103
|
+
async delete(id) {
|
|
104
|
+
const url = `${this.baseUrl}/api/admin/plugin-tokens/${id}`;
|
|
105
|
+
(0, log_1.debugLog)("PluginTokenClient.delete", url);
|
|
106
|
+
(0, log_1.logRequest)("DELETE", url, this.headers);
|
|
107
|
+
const resp = await fetch(url, { method: "DELETE", headers: this.headers });
|
|
108
|
+
(0, log_1.logResponse)(resp.status, resp.statusText, resp.headers);
|
|
109
|
+
if (!resp.ok)
|
|
110
|
+
await this.handleErrorResponse(resp);
|
|
111
|
+
}
|
|
112
|
+
async regenerate(id) {
|
|
113
|
+
const url = `${this.baseUrl}/api/admin/plugin-tokens/${id}/regenerate`;
|
|
114
|
+
(0, log_1.debugLog)("PluginTokenClient.regenerate", url);
|
|
115
|
+
(0, log_1.logRequest)("POST", url, this.headers);
|
|
116
|
+
const resp = await fetch(url, { method: "POST", headers: this.headers });
|
|
117
|
+
(0, log_1.logResponse)(resp.status, resp.statusText, resp.headers);
|
|
118
|
+
if (!resp.ok)
|
|
119
|
+
await this.handleErrorResponse(resp);
|
|
120
|
+
return resp.json();
|
|
121
|
+
}
|
|
122
|
+
async toggle(id) {
|
|
123
|
+
const url = `${this.baseUrl}/api/admin/plugin-tokens/${id}/toggle`;
|
|
124
|
+
(0, log_1.debugLog)("PluginTokenClient.toggle", url);
|
|
125
|
+
(0, log_1.logRequest)("PATCH", url, this.headers);
|
|
126
|
+
const resp = await fetch(url, { method: "PATCH", headers: this.headers });
|
|
127
|
+
(0, log_1.logResponse)(resp.status, resp.statusText, resp.headers);
|
|
128
|
+
if (!resp.ok)
|
|
129
|
+
await this.handleErrorResponse(resp);
|
|
130
|
+
return resp.json();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.PluginTokenClient = PluginTokenClient;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Changesets
|
|
2
|
+
|
|
3
|
+
Hello! This folder contains [Changesets](https://github.com/changesets/changesets), which help manage releases and changelogs.
|
|
4
|
+
|
|
5
|
+
## Adding a changeset
|
|
6
|
+
|
|
7
|
+
To create a new changeset, run:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm changeset
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This will prompt you for:
|
|
14
|
+
|
|
15
|
+
1. Which type of change (patch/minor/major)
|
|
16
|
+
2. A summary of the changes
|
|
17
|
+
|
|
18
|
+
The tool will create a markdown file in `.changeset/` with your changes.
|
|
19
|
+
|
|
20
|
+
## How releases work
|
|
21
|
+
|
|
22
|
+
When changes are merged to `main`:
|
|
23
|
+
|
|
24
|
+
1. The Release workflow creates/updates a "Version Packages" PR
|
|
25
|
+
2. This PR will bump versions and update CHANGELOGs based on all changesets
|
|
26
|
+
3. When you merge the "Version Packages" PR, packages are automatically published to npm
|
|
27
|
+
|
|
28
|
+
## Empty changesets
|
|
29
|
+
|
|
30
|
+
If your changes don't need a release (docs, tests, CI config):
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pnpm changeset --empty
|
|
34
|
+
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://unpkg.com/@changesets/config@1.6.4/schema.json",
|
|
3
|
+
"changelog": [
|
|
4
|
+
"@changesets/changelog-github",
|
|
5
|
+
{ "repo": "OpenRouterTeam/ai-sdk-provider" }
|
|
6
|
+
],
|
|
7
|
+
"commit": false,
|
|
8
|
+
"linked": [],
|
|
9
|
+
"access": "public",
|
|
10
|
+
"baseBranch": "main",
|
|
11
|
+
"updateInternalDependencies": "patch",
|
|
12
|
+
"ignore": []
|
|
13
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
|
|
3
|
+
<!-- Briefly describe your changes -->
|
|
4
|
+
|
|
5
|
+
## Checklist
|
|
6
|
+
|
|
7
|
+
- [ ] I have run `pnpm stylecheck` and `pnpm typecheck`
|
|
8
|
+
- [ ] I have run `pnpm test` and all tests pass
|
|
9
|
+
- [ ] I have added tests for my changes (if applicable)
|
|
10
|
+
- [ ] I have updated documentation (if applicable)
|
|
11
|
+
|
|
12
|
+
### Changeset
|
|
13
|
+
|
|
14
|
+
- [ ] I have run `pnpm changeset` to create a changeset file
|
|
15
|
+
|
|
16
|
+
> **Note:** A changeset is required for your changes to trigger a release. If your PR only contains docs, tests, or CI changes that don't need a release, run `pnpm changeset --empty` instead.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
ci:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
packages: write
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
- uses: actions/setup-node@v4
|
|
17
|
+
with:
|
|
18
|
+
node-version: "20.x"
|
|
19
|
+
- uses: pnpm/action-setup@v4
|
|
20
|
+
- run: pnpm install
|
|
21
|
+
- run: pnpm test
|
|
22
|
+
- run: pnpm build
|
|
23
|
+
- run: pnpm typecheck
|
|
24
|
+
- run: pnpm stylecheck
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# DEPRECATED: This workflow is kept for emergency manual releases only.
|
|
2
|
+
# Normal releases should use the changeset-based publish.yaml workflow.
|
|
3
|
+
# To use this, manually create a GitHub Release.
|
|
4
|
+
name: Publish package (legacy)
|
|
5
|
+
on:
|
|
6
|
+
release:
|
|
7
|
+
types: [published]
|
|
8
|
+
workflow_dispatch: {}
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
packages: write
|
|
15
|
+
id-token: write
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- uses: actions/setup-node@v4
|
|
19
|
+
with:
|
|
20
|
+
node-version: "20.x"
|
|
21
|
+
registry-url: "https://registry.npmjs.org"
|
|
22
|
+
scope: "@openrouter"
|
|
23
|
+
- uses: pnpm/action-setup@v4
|
|
24
|
+
- run: pnpm install --frozen-lockfile
|
|
25
|
+
- run: pnpm typecheck
|
|
26
|
+
- run: pnpm build
|
|
27
|
+
- run: pnpm test
|
|
28
|
+
- name: Publish to npm
|
|
29
|
+
run: |
|
|
30
|
+
if [ "${{ github.event.release.prerelease }}" = "true" ]; then
|
|
31
|
+
pnpm publish --provenance --access public --no-git-checks --tag beta
|
|
32
|
+
else
|
|
33
|
+
pnpm publish --provenance --access public --no-git-checks
|
|
34
|
+
fi
|
|
35
|
+
env:
|
|
36
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|