@openclaw/tencent-provider 2026.7.1-beta.1 → 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 CHANGED
@@ -1,3 +1,3 @@
1
- import { i as buildTokenHubModelDefinition, n as TOKENHUB_MODEL_CATALOG, r as TOKENHUB_PROVIDER_ID, t as TOKENHUB_BASE_URL } from "./models-BZXHEe2B.js";
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-BZXHEe2B.js";
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: TOKENHUB_PROVIDER_ID,
69
+ providerId: TOKENPLAN_PROVIDER_ID,
30
70
  methodId: "api-key",
31
- label: "Tencent TokenHub",
32
- hint: "Hy via Tencent TokenHub Gateway",
33
- optionKey: "tokenhubApiKey",
34
- flagName: "--tokenhub-api-key",
35
- envVar: "TOKENHUB_API_KEY",
36
- promptMessage: "Enter Tencent TokenHub API key",
37
- defaultModel: TOKENHUB_DEFAULT_MODEL_REF,
38
- expectedProviders: [TOKENHUB_PROVIDER_ID],
39
- applyConfig: (cfg) => applyTokenHubConfig(cfg),
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: "tokenhub-api-key",
42
- choiceLabel: "Tencent TokenHub",
81
+ choiceId: "tokenplan-api-key",
82
+ choiceLabel: "Tencent TokenPlan",
43
83
  groupId: "tencent",
44
84
  groupLabel: "Tencent Cloud",
45
- groupHint: "Tencent TokenHub"
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: TOKENHUB_PROVIDER_ID,
53
- buildProvider: buildTokenHubProvider
92
+ providerId: TOKENPLAN_PROVIDER_ID,
93
+ buildProvider: buildTokenPlanProvider
54
94
  })
55
95
  },
56
- augmentModelCatalog: () => buildStaticCatalogEntries(TOKENHUB_PROVIDER_ID, TOKENHUB_MODEL_CATALOG)
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 buildTokenHubModelDefinition, n as TOKENHUB_MODEL_CATALOG, r as TOKENHUB_PROVIDER_ID, t as TOKENHUB_BASE_URL } from "./models-BZXHEe2B.js";
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 buildTokenHubModelDefinition, n as TOKENHUB_MODEL_CATALOG, r as TOKENHUB_PROVIDER_ID, t as TOKENHUB_BASE_URL } from "./models-BZXHEe2B.js";
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-preview`;
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 preview (TokenHub)"
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 };
@@ -1,4 +1,4 @@
1
- import { i as buildTokenHubModelDefinition, n as TOKENHUB_MODEL_CATALOG, t as TOKENHUB_BASE_URL } from "./models-BZXHEe2B.js";
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/models",
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 };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@openclaw/tencent-provider",
3
- "version": "2026.7.1-beta.1",
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.1"
9
+ "version": "2026.7.1-beta.4"
10
10
  }
11
11
  }
12
12
  }
@@ -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.1",
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.1"
18
+ "pluginApi": ">=2026.7.1-beta.4"
18
19
  },
19
20
  "build": {
20
- "openclawVersion": "2026.7.1-beta.1",
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.1"
44
+ "openclaw": ">=2026.7.1-beta.4"
43
45
  },
44
46
  "peerDependenciesMeta": {
45
47
  "openclaw": {
@@ -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 };