@openclaw/tencent-provider 2026.7.1-beta.2 → 2026.7.1-beta.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.
- package/dist/api.js +3 -3
- package/dist/config-compat.js +75 -0
- package/dist/index.js +61 -20
- package/dist/models-BQhpfSMm.js +119 -0
- package/dist/models.js +2 -2
- package/dist/onboard.js +27 -4
- package/dist/provider-catalog.js +9 -2
- package/dist/provider-discovery.js +13 -4
- package/dist/setup-api.js +13 -0
- package/dist/stream.js +49 -0
- package/npm-shrinkwrap.json +2 -2
- package/openclaw.plugin.json +63 -3
- package/package.json +7 -5
- package/dist/models-BZXHEe2B.js +0 -67
package/dist/api.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { i as
|
|
2
|
-
import { buildTokenHubProvider } from "./provider-catalog.js";
|
|
3
|
-
export { TOKENHUB_BASE_URL, TOKENHUB_MODEL_CATALOG, TOKENHUB_PROVIDER_ID, buildTokenHubModelDefinition, buildTokenHubProvider };
|
|
1
|
+
import { a as TOKENPLAN_MODEL_CATALOG, c as buildTokenPlanModelDefinition, i as TOKENPLAN_BASE_URL, n as TOKENHUB_MODEL_CATALOG, o as TOKENPLAN_PROVIDER_ID, r as TOKENHUB_PROVIDER_ID, s as buildTokenHubModelDefinition, t as TOKENHUB_BASE_URL } from "./models-BQhpfSMm.js";
|
|
2
|
+
import { buildTokenHubProvider, buildTokenPlanProvider } from "./provider-catalog.js";
|
|
3
|
+
export { TOKENHUB_BASE_URL, TOKENHUB_MODEL_CATALOG, TOKENHUB_PROVIDER_ID, TOKENPLAN_BASE_URL, TOKENPLAN_MODEL_CATALOG, TOKENPLAN_PROVIDER_ID, buildTokenHubModelDefinition, buildTokenHubProvider, buildTokenPlanModelDefinition, buildTokenPlanProvider };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
//#region extensions/tencent/config-compat.ts
|
|
2
|
+
const TENCENT_TOKENHUB_DEFAULT_MODEL_REF = "tencent-tokenhub/hy3";
|
|
3
|
+
const TENCENT_TOKENHUB_PREVIEW_MODEL_REF = "tencent-tokenhub/hy3-preview";
|
|
4
|
+
const TOKENHUB_DEFAULT_ALIAS = "Hy3 (TokenHub)";
|
|
5
|
+
const TOKENHUB_PREVIEW_ALIAS = "Hy3 preview (TokenHub)";
|
|
6
|
+
function isTokenHubModelMapConfigured(models) {
|
|
7
|
+
return Object.hasOwn(models, "tencent-tokenhub/hy3") || Object.hasOwn(models, "tencent-tokenhub/hy3-preview");
|
|
8
|
+
}
|
|
9
|
+
function withDefaultAlias(entry, alias) {
|
|
10
|
+
return {
|
|
11
|
+
...entry,
|
|
12
|
+
alias: entry?.alias ?? alias
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function needsDefaultAlias(entry) {
|
|
16
|
+
return entry?.alias === void 0;
|
|
17
|
+
}
|
|
18
|
+
function migrateDefaultModel(model) {
|
|
19
|
+
if (model === "tencent-tokenhub/hy3-preview") return {
|
|
20
|
+
model: { primary: TENCENT_TOKENHUB_DEFAULT_MODEL_REF },
|
|
21
|
+
changed: true
|
|
22
|
+
};
|
|
23
|
+
if (model && typeof model === "object" && "primary" in model && model.primary === "tencent-tokenhub/hy3-preview") return {
|
|
24
|
+
model: {
|
|
25
|
+
...model,
|
|
26
|
+
primary: TENCENT_TOKENHUB_DEFAULT_MODEL_REF
|
|
27
|
+
},
|
|
28
|
+
changed: true
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
model,
|
|
32
|
+
changed: false
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function migrateTencentTokenHubModelDefaults(cfg) {
|
|
36
|
+
const existingModels = cfg.agents?.defaults?.models;
|
|
37
|
+
if (!existingModels || !isTokenHubModelMapConfigured(existingModels)) return {
|
|
38
|
+
config: cfg,
|
|
39
|
+
changes: []
|
|
40
|
+
};
|
|
41
|
+
const needsDefaultRepair = !Object.hasOwn(existingModels, "tencent-tokenhub/hy3") || needsDefaultAlias(existingModels["tencent-tokenhub/hy3"]);
|
|
42
|
+
const needsPreviewRepair = !Object.hasOwn(existingModels, "tencent-tokenhub/hy3-preview") || needsDefaultAlias(existingModels["tencent-tokenhub/hy3-preview"]);
|
|
43
|
+
const migratedModel = migrateDefaultModel(cfg.agents?.defaults?.model);
|
|
44
|
+
if (!needsDefaultRepair && !needsPreviewRepair && !migratedModel.changed) return {
|
|
45
|
+
config: cfg,
|
|
46
|
+
changes: []
|
|
47
|
+
};
|
|
48
|
+
const nextModels = {
|
|
49
|
+
...existingModels,
|
|
50
|
+
[TENCENT_TOKENHUB_DEFAULT_MODEL_REF]: withDefaultAlias(existingModels[TENCENT_TOKENHUB_DEFAULT_MODEL_REF], TOKENHUB_DEFAULT_ALIAS),
|
|
51
|
+
[TENCENT_TOKENHUB_PREVIEW_MODEL_REF]: withDefaultAlias(existingModels[TENCENT_TOKENHUB_PREVIEW_MODEL_REF], TOKENHUB_PREVIEW_ALIAS)
|
|
52
|
+
};
|
|
53
|
+
const nextConfig = {
|
|
54
|
+
...cfg,
|
|
55
|
+
agents: {
|
|
56
|
+
...cfg.agents,
|
|
57
|
+
defaults: {
|
|
58
|
+
...cfg.agents?.defaults,
|
|
59
|
+
models: nextModels,
|
|
60
|
+
...migratedModel.model !== void 0 ? { model: migratedModel.model } : void 0
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const changes = [`Updated Tencent TokenHub agent model defaults to include ${TENCENT_TOKENHUB_DEFAULT_MODEL_REF} and ${TENCENT_TOKENHUB_PREVIEW_MODEL_REF}.`];
|
|
65
|
+
if (migratedModel.changed) changes.push(`Changed Tencent TokenHub primary default from ${TENCENT_TOKENHUB_PREVIEW_MODEL_REF} to ${TENCENT_TOKENHUB_DEFAULT_MODEL_REF}.`);
|
|
66
|
+
return {
|
|
67
|
+
config: nextConfig,
|
|
68
|
+
changes
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function normalizeCompatibilityConfig({ cfg }) {
|
|
72
|
+
return migrateTencentTokenHubModelDefaults(cfg);
|
|
73
|
+
}
|
|
74
|
+
//#endregion
|
|
75
|
+
export { TENCENT_TOKENHUB_DEFAULT_MODEL_REF, TENCENT_TOKENHUB_PREVIEW_MODEL_REF, migrateTencentTokenHubModelDefaults, normalizeCompatibilityConfig };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { n as TOKENHUB_MODEL_CATALOG, r as TOKENHUB_PROVIDER_ID } from "./models-
|
|
2
|
-
import { buildTokenHubProvider } from "./provider-catalog.js";
|
|
3
|
-
import { TOKENHUB_DEFAULT_MODEL_REF, applyTokenHubConfig } from "./onboard.js";
|
|
1
|
+
import { a as TOKENPLAN_MODEL_CATALOG, n as TOKENHUB_MODEL_CATALOG, o as TOKENPLAN_PROVIDER_ID, r as TOKENHUB_PROVIDER_ID } from "./models-BQhpfSMm.js";
|
|
2
|
+
import { buildTokenHubProvider, buildTokenPlanProvider } from "./provider-catalog.js";
|
|
3
|
+
import { TOKENHUB_DEFAULT_MODEL_REF, TOKENPLAN_DEFAULT_MODEL_REF, applyTokenHubConfig, applyTokenPlanConfig } from "./onboard.js";
|
|
4
|
+
import { wrapTencentProviderStream } from "./stream.js";
|
|
4
5
|
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
|
5
6
|
import { createProviderApiKeyAuthMethod } from "openclaw/plugin-sdk/provider-auth-api-key";
|
|
6
7
|
import { buildSingleProviderApiKeyCatalog } from "openclaw/plugin-sdk/provider-catalog-shared";
|
|
@@ -15,45 +16,85 @@ function buildStaticCatalogEntries(providerId, catalog) {
|
|
|
15
16
|
contextWindow: entry.contextWindow
|
|
16
17
|
}));
|
|
17
18
|
}
|
|
19
|
+
function createTokenHubApiKeyAuthMethod() {
|
|
20
|
+
return createProviderApiKeyAuthMethod({
|
|
21
|
+
providerId: TOKENHUB_PROVIDER_ID,
|
|
22
|
+
methodId: "api-key",
|
|
23
|
+
label: "Tencent TokenHub",
|
|
24
|
+
hint: "Hy via Tencent TokenHub Gateway",
|
|
25
|
+
optionKey: "tokenhubApiKey",
|
|
26
|
+
flagName: "--tokenhub-api-key",
|
|
27
|
+
envVar: "TOKENHUB_API_KEY",
|
|
28
|
+
promptMessage: "Enter Tencent TokenHub API key",
|
|
29
|
+
defaultModel: TOKENHUB_DEFAULT_MODEL_REF,
|
|
30
|
+
expectedProviders: [TOKENHUB_PROVIDER_ID],
|
|
31
|
+
applyConfig: applyTokenHubConfig,
|
|
32
|
+
wizard: {
|
|
33
|
+
choiceId: "tokenhub-api-key",
|
|
34
|
+
choiceLabel: "Tencent TokenHub",
|
|
35
|
+
groupId: "tencent",
|
|
36
|
+
groupLabel: "Tencent Cloud",
|
|
37
|
+
groupHint: "Tencent TokenHub"
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
18
41
|
var tencent_default = definePluginEntry({
|
|
19
42
|
id: "tencent",
|
|
20
43
|
name: "Tencent Cloud Provider",
|
|
21
|
-
description: "Bundled Tencent Cloud provider plugin (TokenHub)",
|
|
44
|
+
description: "Bundled Tencent Cloud provider plugin (TokenHub, TokenPlan)",
|
|
22
45
|
register(api) {
|
|
23
46
|
api.registerProvider({
|
|
24
47
|
id: TOKENHUB_PROVIDER_ID,
|
|
25
48
|
label: "Tencent TokenHub",
|
|
26
49
|
docsPath: "/providers/tencent",
|
|
27
50
|
envVars: ["TOKENHUB_API_KEY"],
|
|
51
|
+
auth: [createTokenHubApiKeyAuthMethod()],
|
|
52
|
+
catalog: {
|
|
53
|
+
order: "simple",
|
|
54
|
+
run: (ctx) => buildSingleProviderApiKeyCatalog({
|
|
55
|
+
ctx,
|
|
56
|
+
providerId: TOKENHUB_PROVIDER_ID,
|
|
57
|
+
buildProvider: buildTokenHubProvider
|
|
58
|
+
})
|
|
59
|
+
},
|
|
60
|
+
augmentModelCatalog: () => buildStaticCatalogEntries(TOKENHUB_PROVIDER_ID, TOKENHUB_MODEL_CATALOG),
|
|
61
|
+
wrapStreamFn: wrapTencentProviderStream
|
|
62
|
+
});
|
|
63
|
+
api.registerProvider({
|
|
64
|
+
id: TOKENPLAN_PROVIDER_ID,
|
|
65
|
+
label: "Tencent TokenPlan",
|
|
66
|
+
docsPath: "/providers/tencent",
|
|
67
|
+
envVars: ["TOKENPLAN_API_KEY"],
|
|
28
68
|
auth: [createProviderApiKeyAuthMethod({
|
|
29
|
-
providerId:
|
|
69
|
+
providerId: TOKENPLAN_PROVIDER_ID,
|
|
30
70
|
methodId: "api-key",
|
|
31
|
-
label: "Tencent
|
|
32
|
-
hint: "Hy via Tencent
|
|
33
|
-
optionKey: "
|
|
34
|
-
flagName: "--
|
|
35
|
-
envVar: "
|
|
36
|
-
promptMessage: "Enter Tencent
|
|
37
|
-
defaultModel:
|
|
38
|
-
expectedProviders: [
|
|
39
|
-
applyConfig:
|
|
71
|
+
label: "Tencent TokenPlan",
|
|
72
|
+
hint: "Hy via Tencent TokenPlan Gateway",
|
|
73
|
+
optionKey: "tokenplanApiKey",
|
|
74
|
+
flagName: "--tokenplan-api-key",
|
|
75
|
+
envVar: "TOKENPLAN_API_KEY",
|
|
76
|
+
promptMessage: "Enter Tencent TokenPlan API key",
|
|
77
|
+
defaultModel: TOKENPLAN_DEFAULT_MODEL_REF,
|
|
78
|
+
expectedProviders: [TOKENPLAN_PROVIDER_ID],
|
|
79
|
+
applyConfig: applyTokenPlanConfig,
|
|
40
80
|
wizard: {
|
|
41
|
-
choiceId: "
|
|
42
|
-
choiceLabel: "Tencent
|
|
81
|
+
choiceId: "tokenplan-api-key",
|
|
82
|
+
choiceLabel: "Tencent TokenPlan",
|
|
43
83
|
groupId: "tencent",
|
|
44
84
|
groupLabel: "Tencent Cloud",
|
|
45
|
-
groupHint: "Tencent
|
|
85
|
+
groupHint: "Tencent TokenPlan"
|
|
46
86
|
}
|
|
47
87
|
})],
|
|
48
88
|
catalog: {
|
|
49
89
|
order: "simple",
|
|
50
90
|
run: (ctx) => buildSingleProviderApiKeyCatalog({
|
|
51
91
|
ctx,
|
|
52
|
-
providerId:
|
|
53
|
-
buildProvider:
|
|
92
|
+
providerId: TOKENPLAN_PROVIDER_ID,
|
|
93
|
+
buildProvider: buildTokenPlanProvider
|
|
54
94
|
})
|
|
55
95
|
},
|
|
56
|
-
augmentModelCatalog: () => buildStaticCatalogEntries(
|
|
96
|
+
augmentModelCatalog: () => buildStaticCatalogEntries(TOKENPLAN_PROVIDER_ID, TOKENPLAN_MODEL_CATALOG),
|
|
97
|
+
wrapStreamFn: wrapTencentProviderStream
|
|
57
98
|
});
|
|
58
99
|
}
|
|
59
100
|
});
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { buildManifestModelProviderConfig } from "openclaw/plugin-sdk/provider-catalog-shared";
|
|
2
|
+
//#region extensions/tencent/openclaw.plugin.json
|
|
3
|
+
var modelCatalog = {
|
|
4
|
+
"providers": {
|
|
5
|
+
"tencent-tokenhub": {
|
|
6
|
+
"baseUrl": "https://tokenhub.tencentmaas.com/v1",
|
|
7
|
+
"api": "openai-completions",
|
|
8
|
+
"models": [{
|
|
9
|
+
"id": "hy3-preview",
|
|
10
|
+
"name": "Hy3 preview (TokenHub)",
|
|
11
|
+
"reasoning": true,
|
|
12
|
+
"input": ["text"],
|
|
13
|
+
"contextWindow": 256e3,
|
|
14
|
+
"maxTokens": 64e3,
|
|
15
|
+
"cost": {
|
|
16
|
+
"input": .176,
|
|
17
|
+
"output": .587,
|
|
18
|
+
"cacheRead": .059,
|
|
19
|
+
"cacheWrite": 0,
|
|
20
|
+
"tieredPricing": [
|
|
21
|
+
{
|
|
22
|
+
"input": .176,
|
|
23
|
+
"output": .587,
|
|
24
|
+
"cacheRead": .059,
|
|
25
|
+
"cacheWrite": 0,
|
|
26
|
+
"range": [0, 16e3]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"input": .235,
|
|
30
|
+
"output": .939,
|
|
31
|
+
"cacheRead": .088,
|
|
32
|
+
"cacheWrite": 0,
|
|
33
|
+
"range": [16e3, 32e3]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"input": .293,
|
|
37
|
+
"output": 1.173,
|
|
38
|
+
"cacheRead": .117,
|
|
39
|
+
"cacheWrite": 0,
|
|
40
|
+
"range": [32e3]
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"compat": {
|
|
45
|
+
"supportsUsageInStreaming": true,
|
|
46
|
+
"supportsReasoningEffort": true,
|
|
47
|
+
"supportedReasoningEfforts": [
|
|
48
|
+
"none",
|
|
49
|
+
"low",
|
|
50
|
+
"high"
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
}, {
|
|
54
|
+
"id": "hy3",
|
|
55
|
+
"name": "Hy3 (TokenHub)",
|
|
56
|
+
"reasoning": true,
|
|
57
|
+
"input": ["text"],
|
|
58
|
+
"contextWindow": 256e3,
|
|
59
|
+
"maxTokens": 64e3,
|
|
60
|
+
"compat": {
|
|
61
|
+
"supportsUsageInStreaming": true,
|
|
62
|
+
"supportsReasoningEffort": true,
|
|
63
|
+
"supportedReasoningEfforts": ["none", "high"]
|
|
64
|
+
}
|
|
65
|
+
}]
|
|
66
|
+
},
|
|
67
|
+
"tencent-tokenplan": {
|
|
68
|
+
"baseUrl": "https://api.lkeap.cloud.tencent.com/plan/v3",
|
|
69
|
+
"api": "openai-completions",
|
|
70
|
+
"models": [{
|
|
71
|
+
"id": "hy3",
|
|
72
|
+
"name": "Hy3 (TokenPlan)",
|
|
73
|
+
"reasoning": true,
|
|
74
|
+
"input": ["text"],
|
|
75
|
+
"contextWindow": 256e3,
|
|
76
|
+
"maxTokens": 64e3,
|
|
77
|
+
"compat": {
|
|
78
|
+
"supportsUsageInStreaming": true,
|
|
79
|
+
"supportsReasoningEffort": true,
|
|
80
|
+
"supportedReasoningEfforts": ["none", "high"]
|
|
81
|
+
}
|
|
82
|
+
}]
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"discovery": {
|
|
86
|
+
"tencent-tokenhub": "static",
|
|
87
|
+
"tencent-tokenplan": "static"
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region extensions/tencent/models.ts
|
|
92
|
+
const TOKENHUB_PROVIDER_ID = "tencent-tokenhub";
|
|
93
|
+
const TOKENHUB_MANIFEST_PROVIDER = buildManifestModelProviderConfig({
|
|
94
|
+
providerId: TOKENHUB_PROVIDER_ID,
|
|
95
|
+
catalog: modelCatalog.providers[TOKENHUB_PROVIDER_ID]
|
|
96
|
+
});
|
|
97
|
+
const TOKENHUB_BASE_URL = TOKENHUB_MANIFEST_PROVIDER.baseUrl;
|
|
98
|
+
const TOKENHUB_MODEL_CATALOG = TOKENHUB_MANIFEST_PROVIDER.models;
|
|
99
|
+
function buildTokenHubModelDefinition(model) {
|
|
100
|
+
return {
|
|
101
|
+
...model,
|
|
102
|
+
api: "openai-completions"
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
const TOKENPLAN_PROVIDER_ID = "tencent-tokenplan";
|
|
106
|
+
const TOKENPLAN_MANIFEST_PROVIDER = buildManifestModelProviderConfig({
|
|
107
|
+
providerId: TOKENPLAN_PROVIDER_ID,
|
|
108
|
+
catalog: modelCatalog.providers[TOKENPLAN_PROVIDER_ID]
|
|
109
|
+
});
|
|
110
|
+
const TOKENPLAN_BASE_URL = TOKENPLAN_MANIFEST_PROVIDER.baseUrl;
|
|
111
|
+
const TOKENPLAN_MODEL_CATALOG = TOKENPLAN_MANIFEST_PROVIDER.models;
|
|
112
|
+
function buildTokenPlanModelDefinition(model) {
|
|
113
|
+
return {
|
|
114
|
+
...model,
|
|
115
|
+
api: "openai-completions"
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//#endregion
|
|
119
|
+
export { TOKENPLAN_MODEL_CATALOG as a, buildTokenPlanModelDefinition as c, TOKENPLAN_BASE_URL as i, TOKENHUB_MODEL_CATALOG as n, TOKENPLAN_PROVIDER_ID as o, TOKENHUB_PROVIDER_ID as r, buildTokenHubModelDefinition as s, TOKENHUB_BASE_URL as t };
|
package/dist/models.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as
|
|
2
|
-
export { TOKENHUB_BASE_URL, TOKENHUB_MODEL_CATALOG, TOKENHUB_PROVIDER_ID, buildTokenHubModelDefinition };
|
|
1
|
+
import { a as TOKENPLAN_MODEL_CATALOG, c as buildTokenPlanModelDefinition, i as TOKENPLAN_BASE_URL, n as TOKENHUB_MODEL_CATALOG, o as TOKENPLAN_PROVIDER_ID, r as TOKENHUB_PROVIDER_ID, s as buildTokenHubModelDefinition, t as TOKENHUB_BASE_URL } from "./models-BQhpfSMm.js";
|
|
2
|
+
export { TOKENHUB_BASE_URL, TOKENHUB_MODEL_CATALOG, TOKENHUB_PROVIDER_ID, TOKENPLAN_BASE_URL, TOKENPLAN_MODEL_CATALOG, TOKENPLAN_PROVIDER_ID, buildTokenHubModelDefinition, buildTokenPlanModelDefinition };
|
package/dist/onboard.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import { i as
|
|
1
|
+
import { a as TOKENPLAN_MODEL_CATALOG, c as buildTokenPlanModelDefinition, i as TOKENPLAN_BASE_URL, n as TOKENHUB_MODEL_CATALOG, o as TOKENPLAN_PROVIDER_ID, r as TOKENHUB_PROVIDER_ID, s as buildTokenHubModelDefinition, t as TOKENHUB_BASE_URL } from "./models-BQhpfSMm.js";
|
|
2
2
|
import "./api.js";
|
|
3
3
|
import { applyAgentDefaultModelPrimary, applyProviderConfigWithModelCatalog } from "openclaw/plugin-sdk/provider-onboard";
|
|
4
4
|
//#region extensions/tencent/onboard.ts
|
|
5
|
-
const TOKENHUB_DEFAULT_MODEL_REF = `${TOKENHUB_PROVIDER_ID}/hy3
|
|
5
|
+
const TOKENHUB_DEFAULT_MODEL_REF = `${TOKENHUB_PROVIDER_ID}/hy3`;
|
|
6
|
+
const TOKENHUB_PREVIEW_MODEL_REF = `${TOKENHUB_PROVIDER_ID}/hy3-preview`;
|
|
6
7
|
function applyTokenHubProviderConfig(cfg) {
|
|
7
8
|
const models = { ...cfg.agents?.defaults?.models };
|
|
8
9
|
models[TOKENHUB_DEFAULT_MODEL_REF] = {
|
|
9
10
|
...models[TOKENHUB_DEFAULT_MODEL_REF],
|
|
10
|
-
alias: models[TOKENHUB_DEFAULT_MODEL_REF]?.alias ?? "Hy3
|
|
11
|
+
alias: models[TOKENHUB_DEFAULT_MODEL_REF]?.alias ?? "Hy3 (TokenHub)"
|
|
12
|
+
};
|
|
13
|
+
models[TOKENHUB_PREVIEW_MODEL_REF] = {
|
|
14
|
+
...models[TOKENHUB_PREVIEW_MODEL_REF],
|
|
15
|
+
alias: models[TOKENHUB_PREVIEW_MODEL_REF]?.alias ?? "Hy3 preview (TokenHub)"
|
|
11
16
|
};
|
|
12
17
|
return applyProviderConfigWithModelCatalog(cfg, {
|
|
13
18
|
agentModels: models,
|
|
@@ -20,5 +25,23 @@ function applyTokenHubProviderConfig(cfg) {
|
|
|
20
25
|
function applyTokenHubConfig(cfg) {
|
|
21
26
|
return applyAgentDefaultModelPrimary(applyTokenHubProviderConfig(cfg), TOKENHUB_DEFAULT_MODEL_REF);
|
|
22
27
|
}
|
|
28
|
+
const TOKENPLAN_DEFAULT_MODEL_REF = `${TOKENPLAN_PROVIDER_ID}/hy3`;
|
|
29
|
+
function applyTokenPlanProviderConfig(cfg) {
|
|
30
|
+
const models = { ...cfg.agents?.defaults?.models };
|
|
31
|
+
models[TOKENPLAN_DEFAULT_MODEL_REF] = {
|
|
32
|
+
...models[TOKENPLAN_DEFAULT_MODEL_REF],
|
|
33
|
+
alias: models[TOKENPLAN_DEFAULT_MODEL_REF]?.alias ?? "Hy3 (TokenPlan)"
|
|
34
|
+
};
|
|
35
|
+
return applyProviderConfigWithModelCatalog(cfg, {
|
|
36
|
+
agentModels: models,
|
|
37
|
+
providerId: TOKENPLAN_PROVIDER_ID,
|
|
38
|
+
api: "openai-completions",
|
|
39
|
+
baseUrl: TOKENPLAN_BASE_URL,
|
|
40
|
+
catalogModels: TOKENPLAN_MODEL_CATALOG.map(buildTokenPlanModelDefinition)
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function applyTokenPlanConfig(cfg) {
|
|
44
|
+
return applyAgentDefaultModelPrimary(applyTokenPlanProviderConfig(cfg), TOKENPLAN_DEFAULT_MODEL_REF);
|
|
45
|
+
}
|
|
23
46
|
//#endregion
|
|
24
|
-
export { TOKENHUB_DEFAULT_MODEL_REF, applyTokenHubConfig };
|
|
47
|
+
export { TOKENHUB_DEFAULT_MODEL_REF, TOKENHUB_PREVIEW_MODEL_REF, TOKENPLAN_DEFAULT_MODEL_REF, applyTokenHubConfig, applyTokenPlanConfig };
|
package/dist/provider-catalog.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as
|
|
1
|
+
import { a as TOKENPLAN_MODEL_CATALOG, c as buildTokenPlanModelDefinition, i as TOKENPLAN_BASE_URL, n as TOKENHUB_MODEL_CATALOG, s as buildTokenHubModelDefinition, t as TOKENHUB_BASE_URL } from "./models-BQhpfSMm.js";
|
|
2
2
|
//#region extensions/tencent/provider-catalog.ts
|
|
3
3
|
function buildTokenHubProvider() {
|
|
4
4
|
return {
|
|
@@ -7,5 +7,12 @@ function buildTokenHubProvider() {
|
|
|
7
7
|
models: TOKENHUB_MODEL_CATALOG.map(buildTokenHubModelDefinition)
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
|
+
function buildTokenPlanProvider() {
|
|
11
|
+
return {
|
|
12
|
+
baseUrl: TOKENPLAN_BASE_URL,
|
|
13
|
+
api: "openai-completions",
|
|
14
|
+
models: TOKENPLAN_MODEL_CATALOG.map(buildTokenPlanModelDefinition)
|
|
15
|
+
};
|
|
16
|
+
}
|
|
10
17
|
//#endregion
|
|
11
|
-
export { buildTokenHubProvider };
|
|
18
|
+
export { buildTokenHubProvider, buildTokenPlanProvider };
|
|
@@ -1,14 +1,23 @@
|
|
|
1
|
-
import { buildTokenHubProvider } from "./provider-catalog.js";
|
|
1
|
+
import { buildTokenHubProvider, buildTokenPlanProvider } from "./provider-catalog.js";
|
|
2
2
|
//#region extensions/tencent/provider-discovery.ts
|
|
3
|
-
const tencentProviderDiscovery = {
|
|
3
|
+
const tencentProviderDiscovery = [{
|
|
4
4
|
id: "tencent-tokenhub",
|
|
5
5
|
label: "Tencent TokenHub",
|
|
6
|
-
docsPath: "/providers/
|
|
6
|
+
docsPath: "/providers/tencent",
|
|
7
7
|
auth: [],
|
|
8
8
|
staticCatalog: {
|
|
9
9
|
order: "simple",
|
|
10
10
|
run: async () => ({ provider: buildTokenHubProvider() })
|
|
11
11
|
}
|
|
12
|
-
}
|
|
12
|
+
}, {
|
|
13
|
+
id: "tencent-tokenplan",
|
|
14
|
+
label: "Tencent TokenPlan",
|
|
15
|
+
docsPath: "/providers/tencent",
|
|
16
|
+
auth: [],
|
|
17
|
+
staticCatalog: {
|
|
18
|
+
order: "simple",
|
|
19
|
+
run: async () => ({ provider: buildTokenPlanProvider() })
|
|
20
|
+
}
|
|
21
|
+
}];
|
|
13
22
|
//#endregion
|
|
14
23
|
export { tencentProviderDiscovery as default };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { migrateTencentTokenHubModelDefaults } from "./config-compat.js";
|
|
2
|
+
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
|
3
|
+
//#region extensions/tencent/setup-api.ts
|
|
4
|
+
var setup_api_default = definePluginEntry({
|
|
5
|
+
id: "tencent",
|
|
6
|
+
name: "Tencent Cloud Provider Setup",
|
|
7
|
+
description: "Lightweight Tencent Cloud provider setup hooks",
|
|
8
|
+
register(api) {
|
|
9
|
+
api.registerConfigMigration((config) => migrateTencentTokenHubModelDefaults(config));
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
//#endregion
|
|
13
|
+
export { setup_api_default as default };
|
package/dist/stream.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { o as TOKENPLAN_PROVIDER_ID, r as TOKENHUB_PROVIDER_ID } from "./models-BQhpfSMm.js";
|
|
2
|
+
import { createPayloadPatchStreamWrapper } from "openclaw/plugin-sdk/provider-stream-shared";
|
|
3
|
+
//#region extensions/tencent/stream.ts
|
|
4
|
+
const TENCENT_PROVIDER_IDS = /* @__PURE__ */ new Set([TOKENHUB_PROVIDER_ID, TOKENPLAN_PROVIDER_ID]);
|
|
5
|
+
const TENCENT_REASONING_EFFORT_MAP = Object.freeze({
|
|
6
|
+
off: "none",
|
|
7
|
+
none: "none",
|
|
8
|
+
minimal: "high",
|
|
9
|
+
low: "high",
|
|
10
|
+
medium: "high",
|
|
11
|
+
high: "high",
|
|
12
|
+
xhigh: "high"
|
|
13
|
+
});
|
|
14
|
+
const TOKENHUB_HY3_PREVIEW_REASONING_EFFORTS = /* @__PURE__ */ new Set([
|
|
15
|
+
"none",
|
|
16
|
+
"low",
|
|
17
|
+
"high"
|
|
18
|
+
]);
|
|
19
|
+
function resolveRequestedEffort(thinkingLevel, options) {
|
|
20
|
+
const withEffort = options ?? {};
|
|
21
|
+
const raw = typeof withEffort.reasoningEffort === "string" && withEffort.reasoningEffort || typeof withEffort.reasoning === "string" && withEffort.reasoning || typeof thinkingLevel === "string" && thinkingLevel || void 0;
|
|
22
|
+
return raw ? raw.trim().toLowerCase() : void 0;
|
|
23
|
+
}
|
|
24
|
+
function mapEffortForTencent(model, effort) {
|
|
25
|
+
if (!effort) return;
|
|
26
|
+
if (model.provider === "tencent-tokenhub" && model.id === "hy3-preview") {
|
|
27
|
+
if (effort === "off") return "none";
|
|
28
|
+
return TOKENHUB_HY3_PREVIEW_REASONING_EFFORTS.has(effort) ? effort : void 0;
|
|
29
|
+
}
|
|
30
|
+
return TENCENT_REASONING_EFFORT_MAP[effort];
|
|
31
|
+
}
|
|
32
|
+
function isTencentCompletionsCall(model) {
|
|
33
|
+
const provider = model.provider;
|
|
34
|
+
const api = model.api;
|
|
35
|
+
return typeof provider === "string" && TENCENT_PROVIDER_IDS.has(provider) && api === "openai-completions";
|
|
36
|
+
}
|
|
37
|
+
function wrapTencentProviderStream(ctx) {
|
|
38
|
+
return createPayloadPatchStreamWrapper(ctx.streamFn, ({ payload, model, options }) => {
|
|
39
|
+
const mapped = mapEffortForTencent(model, resolveRequestedEffort(ctx.thinkingLevel, options));
|
|
40
|
+
if (mapped === void 0) return;
|
|
41
|
+
if (mapped === "none" || mapped === "off") {
|
|
42
|
+
payload.reasoning_effort = "none";
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
payload.reasoning_effort = mapped;
|
|
46
|
+
}, { shouldPatch: ({ model }) => isTencentCompletionsCall(model) });
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { wrapTencentProviderStream };
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/tencent-provider",
|
|
3
|
-
"version": "2026.7.1-beta.
|
|
3
|
+
"version": "2026.7.1-beta.4",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@openclaw/tencent-provider",
|
|
9
|
-
"version": "2026.7.1-beta.
|
|
9
|
+
"version": "2026.7.1-beta.4"
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
}
|
package/openclaw.plugin.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
},
|
|
6
6
|
"enabledByDefault": true,
|
|
7
7
|
"providerCatalogEntry": "./provider-discovery.ts",
|
|
8
|
-
"providers": ["tencent-tokenhub"],
|
|
8
|
+
"providers": ["tencent-tokenhub", "tencent-tokenplan"],
|
|
9
9
|
"modelCatalog": {
|
|
10
10
|
"providers": {
|
|
11
11
|
"tencent-tokenhub": {
|
|
@@ -50,14 +50,48 @@
|
|
|
50
50
|
},
|
|
51
51
|
"compat": {
|
|
52
52
|
"supportsUsageInStreaming": true,
|
|
53
|
-
"supportsReasoningEffort": true
|
|
53
|
+
"supportsReasoningEffort": true,
|
|
54
|
+
"supportedReasoningEfforts": ["none", "low", "high"]
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "hy3",
|
|
59
|
+
"name": "Hy3 (TokenHub)",
|
|
60
|
+
"reasoning": true,
|
|
61
|
+
"input": ["text"],
|
|
62
|
+
"contextWindow": 256000,
|
|
63
|
+
"maxTokens": 64000,
|
|
64
|
+
"compat": {
|
|
65
|
+
"supportsUsageInStreaming": true,
|
|
66
|
+
"supportsReasoningEffort": true,
|
|
67
|
+
"supportedReasoningEfforts": ["none", "high"]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"tencent-tokenplan": {
|
|
73
|
+
"baseUrl": "https://api.lkeap.cloud.tencent.com/plan/v3",
|
|
74
|
+
"api": "openai-completions",
|
|
75
|
+
"models": [
|
|
76
|
+
{
|
|
77
|
+
"id": "hy3",
|
|
78
|
+
"name": "Hy3 (TokenPlan)",
|
|
79
|
+
"reasoning": true,
|
|
80
|
+
"input": ["text"],
|
|
81
|
+
"contextWindow": 256000,
|
|
82
|
+
"maxTokens": 64000,
|
|
83
|
+
"compat": {
|
|
84
|
+
"supportsUsageInStreaming": true,
|
|
85
|
+
"supportsReasoningEffort": true,
|
|
86
|
+
"supportedReasoningEfforts": ["none", "high"]
|
|
54
87
|
}
|
|
55
88
|
}
|
|
56
89
|
]
|
|
57
90
|
}
|
|
58
91
|
},
|
|
59
92
|
"discovery": {
|
|
60
|
-
"tencent-tokenhub": "static"
|
|
93
|
+
"tencent-tokenhub": "static",
|
|
94
|
+
"tencent-tokenplan": "static"
|
|
61
95
|
}
|
|
62
96
|
},
|
|
63
97
|
"setup": {
|
|
@@ -65,14 +99,26 @@
|
|
|
65
99
|
{
|
|
66
100
|
"id": "tencent-tokenhub",
|
|
67
101
|
"envVars": ["TOKENHUB_API_KEY"]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "tencent-tokenplan",
|
|
105
|
+
"envVars": ["TOKENPLAN_API_KEY"]
|
|
68
106
|
}
|
|
69
107
|
]
|
|
70
108
|
},
|
|
109
|
+
"configContracts": {
|
|
110
|
+
"compatibilityMigrationPaths": [
|
|
111
|
+
"models.providers.tencent-tokenhub",
|
|
112
|
+
"agents.defaults.models.tencent-tokenhub/hy3",
|
|
113
|
+
"agents.defaults.models.tencent-tokenhub/hy3-preview"
|
|
114
|
+
]
|
|
115
|
+
},
|
|
71
116
|
"providerAuthChoices": [
|
|
72
117
|
{
|
|
73
118
|
"provider": "tencent-tokenhub",
|
|
74
119
|
"method": "api-key",
|
|
75
120
|
"choiceId": "tokenhub-api-key",
|
|
121
|
+
"appGuidedSecret": true,
|
|
76
122
|
"choiceLabel": "Tencent TokenHub",
|
|
77
123
|
"groupId": "tencent",
|
|
78
124
|
"groupLabel": "Tencent Cloud",
|
|
@@ -81,6 +127,20 @@
|
|
|
81
127
|
"cliFlag": "--tokenhub-api-key",
|
|
82
128
|
"cliOption": "--tokenhub-api-key <key>",
|
|
83
129
|
"cliDescription": "Tencent TokenHub API key"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"provider": "tencent-tokenplan",
|
|
133
|
+
"method": "api-key",
|
|
134
|
+
"choiceId": "tokenplan-api-key",
|
|
135
|
+
"appGuidedSecret": true,
|
|
136
|
+
"choiceLabel": "Tencent TokenPlan",
|
|
137
|
+
"groupId": "tencent",
|
|
138
|
+
"groupLabel": "Tencent Cloud",
|
|
139
|
+
"groupHint": "Tencent TokenPlan",
|
|
140
|
+
"optionKey": "tokenplanApiKey",
|
|
141
|
+
"cliFlag": "--tokenplan-api-key",
|
|
142
|
+
"cliOption": "--tokenplan-api-key <key>",
|
|
143
|
+
"cliDescription": "Tencent TokenPlan API key"
|
|
84
144
|
}
|
|
85
145
|
],
|
|
86
146
|
"configSchema": {
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/tencent-provider",
|
|
3
|
-
"version": "2026.7.1-beta.
|
|
3
|
+
"version": "2026.7.1-beta.4",
|
|
4
4
|
"description": "OpenClaw Tencent Cloud provider plugin (TokenHub + Token Plan)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"openclaw": {
|
|
7
7
|
"extensions": [
|
|
8
8
|
"./index.ts"
|
|
9
9
|
],
|
|
10
|
+
"setupEntry": "./dist/setup-api.js",
|
|
10
11
|
"install": {
|
|
11
12
|
"clawhubSpec": "clawhub:@openclaw/tencent-provider",
|
|
12
13
|
"npmSpec": "@openclaw/tencent-provider",
|
|
@@ -14,10 +15,10 @@
|
|
|
14
15
|
"minHostVersion": ">=2026.6.9"
|
|
15
16
|
},
|
|
16
17
|
"compat": {
|
|
17
|
-
"pluginApi": ">=2026.7.1-beta.
|
|
18
|
+
"pluginApi": ">=2026.7.1-beta.4"
|
|
18
19
|
},
|
|
19
20
|
"build": {
|
|
20
|
-
"openclawVersion": "2026.7.1-beta.
|
|
21
|
+
"openclawVersion": "2026.7.1-beta.4",
|
|
21
22
|
"bundledDist": false
|
|
22
23
|
},
|
|
23
24
|
"release": {
|
|
@@ -26,7 +27,8 @@
|
|
|
26
27
|
},
|
|
27
28
|
"runtimeExtensions": [
|
|
28
29
|
"./dist/index.js"
|
|
29
|
-
]
|
|
30
|
+
],
|
|
31
|
+
"runtimeSetupEntry": "./dist/setup-api.js"
|
|
30
32
|
},
|
|
31
33
|
"repository": {
|
|
32
34
|
"type": "git",
|
|
@@ -39,7 +41,7 @@
|
|
|
39
41
|
"README.md"
|
|
40
42
|
],
|
|
41
43
|
"peerDependencies": {
|
|
42
|
-
"openclaw": ">=2026.7.1-beta.
|
|
44
|
+
"openclaw": ">=2026.7.1-beta.4"
|
|
43
45
|
},
|
|
44
46
|
"peerDependenciesMeta": {
|
|
45
47
|
"openclaw": {
|
package/dist/models-BZXHEe2B.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { buildManifestModelProviderConfig } from "openclaw/plugin-sdk/provider-catalog-shared";
|
|
2
|
-
//#region extensions/tencent/openclaw.plugin.json
|
|
3
|
-
var modelCatalog = {
|
|
4
|
-
"providers": { "tencent-tokenhub": {
|
|
5
|
-
"baseUrl": "https://tokenhub.tencentmaas.com/v1",
|
|
6
|
-
"api": "openai-completions",
|
|
7
|
-
"models": [{
|
|
8
|
-
"id": "hy3-preview",
|
|
9
|
-
"name": "Hy3 preview (TokenHub)",
|
|
10
|
-
"reasoning": true,
|
|
11
|
-
"input": ["text"],
|
|
12
|
-
"contextWindow": 256e3,
|
|
13
|
-
"maxTokens": 64e3,
|
|
14
|
-
"cost": {
|
|
15
|
-
"input": .176,
|
|
16
|
-
"output": .587,
|
|
17
|
-
"cacheRead": .059,
|
|
18
|
-
"cacheWrite": 0,
|
|
19
|
-
"tieredPricing": [
|
|
20
|
-
{
|
|
21
|
-
"input": .176,
|
|
22
|
-
"output": .587,
|
|
23
|
-
"cacheRead": .059,
|
|
24
|
-
"cacheWrite": 0,
|
|
25
|
-
"range": [0, 16e3]
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"input": .235,
|
|
29
|
-
"output": .939,
|
|
30
|
-
"cacheRead": .088,
|
|
31
|
-
"cacheWrite": 0,
|
|
32
|
-
"range": [16e3, 32e3]
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"input": .293,
|
|
36
|
-
"output": 1.173,
|
|
37
|
-
"cacheRead": .117,
|
|
38
|
-
"cacheWrite": 0,
|
|
39
|
-
"range": [32e3]
|
|
40
|
-
}
|
|
41
|
-
]
|
|
42
|
-
},
|
|
43
|
-
"compat": {
|
|
44
|
-
"supportsUsageInStreaming": true,
|
|
45
|
-
"supportsReasoningEffort": true
|
|
46
|
-
}
|
|
47
|
-
}]
|
|
48
|
-
} },
|
|
49
|
-
"discovery": { "tencent-tokenhub": "static" }
|
|
50
|
-
};
|
|
51
|
-
//#endregion
|
|
52
|
-
//#region extensions/tencent/models.ts
|
|
53
|
-
const TOKENHUB_PROVIDER_ID = "tencent-tokenhub";
|
|
54
|
-
const TOKENHUB_MANIFEST_PROVIDER = buildManifestModelProviderConfig({
|
|
55
|
-
providerId: TOKENHUB_PROVIDER_ID,
|
|
56
|
-
catalog: modelCatalog.providers[TOKENHUB_PROVIDER_ID]
|
|
57
|
-
});
|
|
58
|
-
const TOKENHUB_BASE_URL = TOKENHUB_MANIFEST_PROVIDER.baseUrl;
|
|
59
|
-
const TOKENHUB_MODEL_CATALOG = TOKENHUB_MANIFEST_PROVIDER.models;
|
|
60
|
-
function buildTokenHubModelDefinition(model) {
|
|
61
|
-
return {
|
|
62
|
-
...model,
|
|
63
|
-
api: "openai-completions"
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
//#endregion
|
|
67
|
-
export { buildTokenHubModelDefinition as i, TOKENHUB_MODEL_CATALOG as n, TOKENHUB_PROVIDER_ID as r, TOKENHUB_BASE_URL as t };
|