@kweaver-ai/kweaver-sdk 0.5.0 → 0.5.2

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.
Files changed (66) hide show
  1. package/README.md +6 -1
  2. package/README.zh.md +5 -0
  3. package/dist/api/agent-chat.d.ts +1 -1
  4. package/dist/api/agent-chat.js +4 -4
  5. package/dist/api/agent-list.d.ts +35 -0
  6. package/dist/api/agent-list.js +86 -12
  7. package/dist/api/bkn-backend.d.ts +60 -0
  8. package/dist/api/bkn-backend.js +103 -10
  9. package/dist/api/conversations.d.ts +6 -3
  10. package/dist/api/conversations.js +26 -27
  11. package/dist/api/dataflow.js +1 -10
  12. package/dist/api/datasources.js +1 -10
  13. package/dist/api/dataviews.js +1 -10
  14. package/dist/api/headers.d.ts +9 -0
  15. package/dist/api/headers.js +25 -0
  16. package/dist/api/knowledge-networks.d.ts +41 -0
  17. package/dist/api/knowledge-networks.js +69 -22
  18. package/dist/api/ontology-query.d.ts +14 -1
  19. package/dist/api/ontology-query.js +63 -49
  20. package/dist/api/semantic-search.js +2 -12
  21. package/dist/api/skills.d.ts +141 -0
  22. package/dist/api/skills.js +216 -0
  23. package/dist/api/vega.d.ts +63 -0
  24. package/dist/api/vega.js +131 -10
  25. package/dist/auth/oauth.d.ts +5 -1
  26. package/dist/auth/oauth.js +293 -94
  27. package/dist/cli.js +29 -4
  28. package/dist/client.d.ts +3 -0
  29. package/dist/client.js +4 -0
  30. package/dist/commands/agent.d.ts +33 -1
  31. package/dist/commands/agent.js +721 -49
  32. package/dist/commands/auth.js +211 -21
  33. package/dist/commands/bkn-ops.d.ts +77 -0
  34. package/dist/commands/bkn-ops.js +1056 -0
  35. package/dist/commands/bkn-query.d.ts +14 -0
  36. package/dist/commands/bkn-query.js +370 -0
  37. package/dist/commands/bkn-schema.d.ts +135 -0
  38. package/dist/commands/bkn-schema.js +1461 -0
  39. package/dist/commands/bkn-utils.d.ts +36 -0
  40. package/dist/commands/bkn-utils.js +102 -0
  41. package/dist/commands/bkn.d.ts +7 -113
  42. package/dist/commands/bkn.js +175 -2429
  43. package/dist/commands/dataview.d.ts +7 -0
  44. package/dist/commands/dataview.js +38 -2
  45. package/dist/commands/ds.d.ts +1 -0
  46. package/dist/commands/ds.js +8 -1
  47. package/dist/commands/import-csv.d.ts +2 -0
  48. package/dist/commands/import-csv.js +3 -2
  49. package/dist/commands/skill.d.ts +26 -0
  50. package/dist/commands/skill.js +524 -0
  51. package/dist/commands/vega.js +371 -14
  52. package/dist/config/jwt.d.ts +6 -0
  53. package/dist/config/jwt.js +21 -0
  54. package/dist/config/store.d.ts +37 -5
  55. package/dist/config/store.js +363 -30
  56. package/dist/index.d.ts +6 -1
  57. package/dist/index.js +5 -1
  58. package/dist/resources/bkn.d.ts +4 -0
  59. package/dist/resources/bkn.js +4 -0
  60. package/dist/resources/conversations.d.ts +5 -2
  61. package/dist/resources/conversations.js +17 -3
  62. package/dist/resources/skills.d.ts +47 -0
  63. package/dist/resources/skills.js +47 -0
  64. package/dist/resources/vega.d.ts +11 -0
  65. package/dist/resources/vega.js +37 -1
  66. package/package.json +1 -1
package/README.md CHANGED
@@ -133,6 +133,10 @@ const health = await client.vega.health();
133
133
  // Context Loader (semantic search over a BKN via MCP)
134
134
  const cl = client.contextLoader(mcpUrl, "bkn-id");
135
135
  const results = await cl.search({ query: "hypertension treatment" });
136
+
137
+ // Skills (registry + market + progressive read)
138
+ const skills = await client.skills.market({ name: "kweaver" });
139
+ const skillMd = await client.skills.fetchContent("skill-id");
136
140
  ```
137
141
 
138
142
  ## CLI Reference
@@ -145,7 +149,7 @@ kweaver auth status/list/use/delete/logout
145
149
  kweaver config show / list-bd / set-bd <value> # platform business domain — after login
146
150
  kweaver token
147
151
  kweaver ds list/get/delete/tables/connect
148
- kweaver ds import-csv <ds_id> --files <glob> [--table-prefix <p>] [--batch-size 500]
152
+ kweaver ds import-csv <ds_id> --files <glob> [--table-prefix <p>] [--batch-size 500] [--recreate]
149
153
  kweaver dataview list/find/get/query/delete
150
154
  kweaver bkn list/get/stats/export/create/update/delete
151
155
  kweaver bkn create-from-ds <ds_id> --name <name> [--tables t1,t2] [--build]
@@ -158,6 +162,7 @@ kweaver bkn subgraph / search
158
162
  kweaver bkn action-execution get
159
163
  kweaver bkn action-log list/get/cancel
160
164
  kweaver agent list/get/create/update/delete/chat/sessions/history/publish/unpublish
165
+ kweaver skill list/market/get/register/status/delete/content/read-file/download/install
161
166
  kweaver vega health/stats/inspect/catalog/resource/connector-type
162
167
  kweaver context-loader config set/use/list/show
163
168
  kweaver context-loader kn-search/query-object-instance/...
package/README.zh.md CHANGED
@@ -122,6 +122,10 @@ const queryRows = await client.dataviews.query(viewId, {
122
122
  // Context Loader(通过 MCP 对 BKN 做语义搜索)
123
123
  const cl = client.contextLoader(mcpUrl, "bkn-id");
124
124
  const results = await cl.search({ query: "高血压 治疗" });
125
+
126
+ // Skill(注册表/市场/渐进式读取)
127
+ const skills = await client.skills.market({ name: "kweaver" });
128
+ const skillMd = await client.skills.fetchContent("skill-id");
125
129
  ```
126
130
 
127
131
  ## 命令速查
@@ -143,6 +147,7 @@ kweaver bkn subgraph
143
147
  kweaver bkn action-execution get
144
148
  kweaver bkn action-log list/get/cancel
145
149
  kweaver agent list/get/chat/sessions/history
150
+ kweaver skill list/market/get/register/status/delete/content/read-file/download/install
146
151
  kweaver context-loader config set/use/list/show
147
152
  kweaver context-loader kn-search/query-object-instance/...
148
153
  kweaver call <path> [-X METHOD] [-d BODY] [-H header]
@@ -41,7 +41,7 @@ export interface AgentInfo {
41
41
  key: string;
42
42
  version: string;
43
43
  }
44
- export declare function buildChatUrl(baseUrl: string, agentId: string): string;
44
+ export declare function buildChatUrl(baseUrl: string, agentKey: string): string;
45
45
  export declare function buildAgentInfoUrl(baseUrl: string, agentId: string, version: string): string;
46
46
  export declare function fetchAgentInfo(options: {
47
47
  baseUrl: string;
@@ -2,9 +2,9 @@ import { fetchTextOrThrow, HttpError } from "../utils/http.js";
2
2
  import { normalizeDisplayText } from "../utils/display-text.js";
3
3
  const CHAT_PATH = "/api/agent-factory/v1/app";
4
4
  const AGENT_INFO_PATH = "/api/agent-factory/v3/agent-market/agent";
5
- export function buildChatUrl(baseUrl, agentId) {
5
+ export function buildChatUrl(baseUrl, agentKey) {
6
6
  const base = baseUrl.replace(/\/+$/, "");
7
- return `${base}${CHAT_PATH}/${agentId}/chat/completion`;
7
+ return `${base}${CHAT_PATH}/${agentKey}/chat/completion`;
8
8
  }
9
9
  export function buildAgentInfoUrl(baseUrl, agentId, version) {
10
10
  const base = baseUrl.replace(/\/+$/, "");
@@ -233,7 +233,7 @@ function applySseDataLine(line, state, verbose, onTextDelta, onProgress) {
233
233
  }
234
234
  export async function sendChatRequest(options) {
235
235
  const { baseUrl, accessToken, agentId, agentKey, agentVersion, query, conversationId, stream, verbose, businessDomain = "bd_public", } = options;
236
- const url = buildChatUrl(baseUrl, agentId);
236
+ const url = buildChatUrl(baseUrl, agentKey);
237
237
  const body = {
238
238
  agent_id: agentId,
239
239
  agent_key: agentKey,
@@ -292,7 +292,7 @@ export async function sendChatRequest(options) {
292
292
  export async function sendChatRequestStream(options, callbacks) {
293
293
  const opts = { ...options, stream: true };
294
294
  const { baseUrl, accessToken, agentId, agentKey, agentVersion, query, conversationId, verbose, businessDomain = "bd_public", } = opts;
295
- const url = buildChatUrl(baseUrl, agentId);
295
+ const url = buildChatUrl(baseUrl, agentKey);
296
296
  const body = {
297
297
  agent_id: agentId,
298
298
  agent_key: agentKey,
@@ -51,6 +51,7 @@ export interface PublishAgentOptions {
51
51
  accessToken: string;
52
52
  agentId: string;
53
53
  body?: string;
54
+ categoryId?: string;
54
55
  businessDomain?: string;
55
56
  }
56
57
  export declare function publishAgent(options: PublishAgentOptions): Promise<string>;
@@ -61,3 +62,37 @@ export interface UnpublishAgentOptions {
61
62
  businessDomain?: string;
62
63
  }
63
64
  export declare function unpublishAgent(options: UnpublishAgentOptions): Promise<void>;
65
+ export interface ListPersonalAgentsOptions {
66
+ baseUrl: string;
67
+ accessToken: string;
68
+ businessDomain?: string;
69
+ name?: string;
70
+ pagination_marker_str?: string;
71
+ publish_status?: string;
72
+ publish_to_be?: string;
73
+ size?: number;
74
+ }
75
+ export declare function listPersonalAgents(options: ListPersonalAgentsOptions): Promise<string>;
76
+ export interface ListPublishedAgentTemplatesOptions {
77
+ baseUrl: string;
78
+ accessToken: string;
79
+ businessDomain?: string;
80
+ category_id?: string;
81
+ name?: string;
82
+ pagination_marker_str?: string;
83
+ size?: number;
84
+ }
85
+ export declare function listPublishedAgentTemplates(options: ListPublishedAgentTemplatesOptions): Promise<string>;
86
+ export interface GetPublishedAgentTemplateOptions {
87
+ baseUrl: string;
88
+ accessToken: string;
89
+ templateId: string;
90
+ businessDomain?: string;
91
+ }
92
+ export declare function getPublishedAgentTemplate(options: GetPublishedAgentTemplateOptions): Promise<string>;
93
+ export interface ListAgentCategoriesOptions {
94
+ baseUrl: string;
95
+ accessToken: string;
96
+ businessDomain?: string;
97
+ }
98
+ export declare function listAgentCategories(options: ListAgentCategoriesOptions): Promise<string>;
@@ -1,14 +1,5 @@
1
1
  import { HttpError } from "../utils/http.js";
2
- function buildHeaders(accessToken, businessDomain) {
3
- return {
4
- accept: "application/json, text/plain, */*",
5
- "accept-language": "zh-CN",
6
- authorization: `Bearer ${accessToken}`,
7
- token: accessToken,
8
- "x-business-domain": businessDomain,
9
- "x-language": "zh-CN",
10
- };
11
- }
2
+ import { buildHeaders } from "./headers.js";
12
3
  export async function listAgents(options) {
13
4
  const { baseUrl, accessToken, businessDomain = "bd_public", name = "", offset = 0, limit = 50, category_id = "", custom_space_id = "", is_to_square = 1, } = options;
14
5
  const base = baseUrl.replace(/\/+$/, "");
@@ -110,16 +101,25 @@ export async function deleteAgent(options) {
110
101
  }
111
102
  }
112
103
  export async function publishAgent(options) {
113
- const { baseUrl, accessToken, agentId, body = "{}", businessDomain = "bd_public", } = options;
104
+ const { baseUrl, accessToken, agentId, body, categoryId, businessDomain = "bd_public", } = options;
114
105
  const base = baseUrl.replace(/\/+$/, "");
115
106
  const url = `${base}/api/agent-factory/v3/agent/${encodeURIComponent(agentId)}/publish`;
107
+ // Build default body if not provided
108
+ const requestBody = body || JSON.stringify({
109
+ business_domain_id: "bd_public",
110
+ category_ids: categoryId ? [categoryId] : [],
111
+ description: "",
112
+ publish_to_where: ["square"],
113
+ publish_to_bes: ["skill_agent"],
114
+ pms_control: null,
115
+ });
116
116
  const response = await fetch(url, {
117
117
  method: "POST",
118
118
  headers: {
119
119
  ...buildHeaders(accessToken, businessDomain),
120
120
  "content-type": "application/json",
121
121
  },
122
- body,
122
+ body: requestBody,
123
123
  });
124
124
  const responseBody = await response.text();
125
125
  if (!response.ok) {
@@ -140,3 +140,77 @@ export async function unpublishAgent(options) {
140
140
  throw new HttpError(response.status, response.statusText, responseBody);
141
141
  }
142
142
  }
143
+ export async function listPersonalAgents(options) {
144
+ const { baseUrl, accessToken, businessDomain = "bd_public", name = "", pagination_marker_str = "", publish_status = "", publish_to_be = "", size = 48, } = options;
145
+ const base = baseUrl.replace(/\/+$/, "");
146
+ const params = new URLSearchParams();
147
+ if (name)
148
+ params.append("name", name);
149
+ if (pagination_marker_str)
150
+ params.append("pagination_marker_str", pagination_marker_str);
151
+ if (publish_status)
152
+ params.append("publish_status", publish_status);
153
+ if (publish_to_be)
154
+ params.append("publish_to_be", publish_to_be);
155
+ params.append("size", String(size));
156
+ const url = `${base}/api/agent-factory/v3/personal-space/agent-list?${params.toString()}`;
157
+ const response = await fetch(url, {
158
+ method: "GET",
159
+ headers: buildHeaders(accessToken, businessDomain),
160
+ });
161
+ const responseBody = await response.text();
162
+ if (!response.ok) {
163
+ throw new HttpError(response.status, response.statusText, responseBody);
164
+ }
165
+ return responseBody;
166
+ }
167
+ export async function listPublishedAgentTemplates(options) {
168
+ const { baseUrl, accessToken, businessDomain = "bd_public", category_id = "", name = "", pagination_marker_str = "", size = 48, } = options;
169
+ const base = baseUrl.replace(/\/+$/, "");
170
+ const params = new URLSearchParams();
171
+ if (category_id)
172
+ params.append("category_id", category_id);
173
+ if (name)
174
+ params.append("name", name);
175
+ if (pagination_marker_str)
176
+ params.append("pagination_marker_str", pagination_marker_str);
177
+ params.append("size", String(size));
178
+ const url = `${base}/api/agent-factory/v3/published/agent-tpl?${params.toString()}`;
179
+ const response = await fetch(url, {
180
+ method: "GET",
181
+ headers: buildHeaders(accessToken, businessDomain),
182
+ });
183
+ const responseBody = await response.text();
184
+ if (!response.ok) {
185
+ throw new HttpError(response.status, response.statusText, responseBody);
186
+ }
187
+ return responseBody;
188
+ }
189
+ export async function getPublishedAgentTemplate(options) {
190
+ const { baseUrl, accessToken, templateId, businessDomain = "bd_public", } = options;
191
+ const base = baseUrl.replace(/\/+$/, "");
192
+ const url = `${base}/api/agent-factory/v3/published/agent-tpl/${encodeURIComponent(templateId)}`;
193
+ const response = await fetch(url, {
194
+ method: "GET",
195
+ headers: buildHeaders(accessToken, businessDomain),
196
+ });
197
+ const responseBody = await response.text();
198
+ if (!response.ok) {
199
+ throw new HttpError(response.status, response.statusText, responseBody);
200
+ }
201
+ return responseBody;
202
+ }
203
+ export async function listAgentCategories(options) {
204
+ const { baseUrl, accessToken, businessDomain = "bd_public", } = options;
205
+ const base = baseUrl.replace(/\/+$/, "");
206
+ const url = `${base}/api/agent-factory/v3/category`;
207
+ const response = await fetch(url, {
208
+ method: "GET",
209
+ headers: buildHeaders(accessToken, businessDomain),
210
+ });
211
+ const responseBody = await response.text();
212
+ if (!response.ok) {
213
+ throw new HttpError(response.status, response.statusText, responseBody);
214
+ }
215
+ return responseBody;
216
+ }
@@ -6,6 +6,66 @@ export interface UploadBknOptions {
6
6
  branch?: string;
7
7
  }
8
8
  export declare function uploadBkn(options: UploadBknOptions): Promise<string>;
9
+ export interface BknBackendBaseOptions {
10
+ baseUrl: string;
11
+ accessToken: string;
12
+ businessDomain?: string;
13
+ }
14
+ export interface BknBackendKnOptions extends BknBackendBaseOptions {
15
+ knId: string;
16
+ }
17
+ export interface ConceptGroupOptions extends BknBackendKnOptions {
18
+ cgId: string;
19
+ }
20
+ export interface ConceptGroupBodyOptions extends BknBackendKnOptions {
21
+ body: string;
22
+ }
23
+ export interface ConceptGroupMutateOptions extends ConceptGroupOptions {
24
+ body: string;
25
+ }
26
+ export interface ConceptGroupRemoveMembersOptions extends ConceptGroupOptions {
27
+ otIds: string;
28
+ }
29
+ export declare function listConceptGroups(opts: BknBackendKnOptions): Promise<string>;
30
+ export declare function getConceptGroup(opts: ConceptGroupOptions): Promise<string>;
31
+ export declare function createConceptGroup(opts: ConceptGroupBodyOptions): Promise<string>;
32
+ export declare function updateConceptGroup(opts: ConceptGroupMutateOptions): Promise<string>;
33
+ export declare function deleteConceptGroup(opts: ConceptGroupOptions): Promise<string>;
34
+ export declare function addConceptGroupMembers(opts: ConceptGroupMutateOptions): Promise<string>;
35
+ export declare function removeConceptGroupMembers(opts: ConceptGroupRemoveMembersOptions): Promise<string>;
36
+ export interface ActionScheduleOptions extends BknBackendKnOptions {
37
+ scheduleId: string;
38
+ }
39
+ export interface ActionScheduleBodyOptions extends BknBackendKnOptions {
40
+ body: string;
41
+ }
42
+ export interface ActionScheduleMutateOptions extends ActionScheduleOptions {
43
+ body: string;
44
+ }
45
+ export interface ActionScheduleDeleteOptions extends BknBackendKnOptions {
46
+ scheduleIds: string;
47
+ }
48
+ export declare function listActionSchedules(opts: BknBackendKnOptions): Promise<string>;
49
+ export declare function getActionSchedule(opts: ActionScheduleOptions): Promise<string>;
50
+ export declare function createActionSchedule(opts: ActionScheduleBodyOptions): Promise<string>;
51
+ export declare function updateActionSchedule(opts: ActionScheduleMutateOptions): Promise<string>;
52
+ export declare function setActionScheduleStatus(opts: ActionScheduleMutateOptions): Promise<string>;
53
+ export declare function deleteActionSchedules(opts: ActionScheduleDeleteOptions): Promise<string>;
54
+ export interface JobOptions extends BknBackendKnOptions {
55
+ jobId: string;
56
+ }
57
+ export interface JobDeleteOptions extends BknBackendKnOptions {
58
+ jobIds: string;
59
+ }
60
+ export declare function listJobs(opts: BknBackendKnOptions): Promise<string>;
61
+ export declare function getJob(opts: JobOptions): Promise<string>;
62
+ export declare function getJobTasks(opts: JobOptions): Promise<string>;
63
+ export declare function deleteJobs(opts: JobDeleteOptions): Promise<string>;
64
+ export interface RelationTypePathsOptions extends BknBackendKnOptions {
65
+ body: string;
66
+ }
67
+ export declare function queryRelationTypePaths(opts: RelationTypePathsOptions): Promise<string>;
68
+ export declare function listBknResources(opts: BknBackendBaseOptions): Promise<string>;
9
69
  export interface DownloadBknOptions {
10
70
  baseUrl: string;
11
71
  accessToken: string;
@@ -1,14 +1,5 @@
1
1
  import { HttpError } from "../utils/http.js";
2
- function buildHeaders(accessToken, businessDomain) {
3
- return {
4
- accept: "application/json, text/plain, */*",
5
- "accept-language": "zh-cn",
6
- authorization: `Bearer ${accessToken}`,
7
- token: accessToken,
8
- "x-business-domain": businessDomain,
9
- "x-language": "zh-cn",
10
- };
11
- }
2
+ import { buildHeaders } from "./headers.js";
12
3
  export async function uploadBkn(options) {
13
4
  const { baseUrl, accessToken, tarBuffer, businessDomain = "bd_public", branch = "main", } = options;
14
5
  const base = baseUrl.replace(/\/+$/, "");
@@ -28,6 +19,108 @@ export async function uploadBkn(options) {
28
19
  }
29
20
  return body;
30
21
  }
22
+ const BKN_BASE = "/api/bkn-backend/v1";
23
+ function knUrl(baseUrl, knId, path) {
24
+ const base = baseUrl.replace(/\/+$/, "");
25
+ return `${base}${BKN_BASE}/knowledge-networks/${encodeURIComponent(knId)}/${path}`;
26
+ }
27
+ function baseUrlOnly(baseUrl, path) {
28
+ const base = baseUrl.replace(/\/+$/, "");
29
+ return `${base}${BKN_BASE}/${path}`;
30
+ }
31
+ async function bknGet(url, accessToken, businessDomain = "bd_public") {
32
+ const response = await fetch(url, { method: "GET", headers: buildHeaders(accessToken, businessDomain) });
33
+ const body = await response.text();
34
+ if (!response.ok)
35
+ throw new HttpError(response.status, response.statusText, body);
36
+ return body;
37
+ }
38
+ async function bknPost(url, accessToken, reqBody, businessDomain = "bd_public") {
39
+ const response = await fetch(url, {
40
+ method: "POST",
41
+ headers: { ...buildHeaders(accessToken, businessDomain), "content-type": "application/json" },
42
+ body: reqBody,
43
+ });
44
+ const body = await response.text();
45
+ if (!response.ok)
46
+ throw new HttpError(response.status, response.statusText, body);
47
+ return body;
48
+ }
49
+ async function bknPut(url, accessToken, reqBody, businessDomain = "bd_public") {
50
+ const response = await fetch(url, {
51
+ method: "PUT",
52
+ headers: { ...buildHeaders(accessToken, businessDomain), "content-type": "application/json" },
53
+ body: reqBody,
54
+ });
55
+ const body = await response.text();
56
+ if (!response.ok)
57
+ throw new HttpError(response.status, response.statusText, body);
58
+ return body;
59
+ }
60
+ async function bknDelete(url, accessToken, businessDomain = "bd_public") {
61
+ const response = await fetch(url, { method: "DELETE", headers: buildHeaders(accessToken, businessDomain) });
62
+ const body = await response.text();
63
+ if (!response.ok)
64
+ throw new HttpError(response.status, response.statusText, body);
65
+ return body;
66
+ }
67
+ export function listConceptGroups(opts) {
68
+ return bknGet(knUrl(opts.baseUrl, opts.knId, "concept-groups"), opts.accessToken, opts.businessDomain);
69
+ }
70
+ export function getConceptGroup(opts) {
71
+ return bknGet(knUrl(opts.baseUrl, opts.knId, `concept-groups/${encodeURIComponent(opts.cgId)}`), opts.accessToken, opts.businessDomain);
72
+ }
73
+ export function createConceptGroup(opts) {
74
+ return bknPost(knUrl(opts.baseUrl, opts.knId, "concept-groups"), opts.accessToken, opts.body, opts.businessDomain);
75
+ }
76
+ export function updateConceptGroup(opts) {
77
+ return bknPut(knUrl(opts.baseUrl, opts.knId, `concept-groups/${encodeURIComponent(opts.cgId)}`), opts.accessToken, opts.body, opts.businessDomain);
78
+ }
79
+ export function deleteConceptGroup(opts) {
80
+ return bknDelete(knUrl(opts.baseUrl, opts.knId, `concept-groups/${encodeURIComponent(opts.cgId)}`), opts.accessToken, opts.businessDomain);
81
+ }
82
+ export function addConceptGroupMembers(opts) {
83
+ return bknPost(knUrl(opts.baseUrl, opts.knId, `concept-groups/${encodeURIComponent(opts.cgId)}/object-types`), opts.accessToken, opts.body, opts.businessDomain);
84
+ }
85
+ export function removeConceptGroupMembers(opts) {
86
+ return bknDelete(knUrl(opts.baseUrl, opts.knId, `concept-groups/${encodeURIComponent(opts.cgId)}/object-types/${opts.otIds}`), opts.accessToken, opts.businessDomain);
87
+ }
88
+ export function listActionSchedules(opts) {
89
+ return bknGet(knUrl(opts.baseUrl, opts.knId, "action-schedules"), opts.accessToken, opts.businessDomain);
90
+ }
91
+ export function getActionSchedule(opts) {
92
+ return bknGet(knUrl(opts.baseUrl, opts.knId, `action-schedules/${encodeURIComponent(opts.scheduleId)}`), opts.accessToken, opts.businessDomain);
93
+ }
94
+ export function createActionSchedule(opts) {
95
+ return bknPost(knUrl(opts.baseUrl, opts.knId, "action-schedules"), opts.accessToken, opts.body, opts.businessDomain);
96
+ }
97
+ export function updateActionSchedule(opts) {
98
+ return bknPut(knUrl(opts.baseUrl, opts.knId, `action-schedules/${encodeURIComponent(opts.scheduleId)}`), opts.accessToken, opts.body, opts.businessDomain);
99
+ }
100
+ export function setActionScheduleStatus(opts) {
101
+ return bknPut(knUrl(opts.baseUrl, opts.knId, `action-schedules/${encodeURIComponent(opts.scheduleId)}/status`), opts.accessToken, opts.body, opts.businessDomain);
102
+ }
103
+ export function deleteActionSchedules(opts) {
104
+ return bknDelete(knUrl(opts.baseUrl, opts.knId, `action-schedules/${opts.scheduleIds}`), opts.accessToken, opts.businessDomain);
105
+ }
106
+ export function listJobs(opts) {
107
+ return bknGet(knUrl(opts.baseUrl, opts.knId, "jobs"), opts.accessToken, opts.businessDomain);
108
+ }
109
+ export function getJob(opts) {
110
+ return bknGet(knUrl(opts.baseUrl, opts.knId, `jobs/${encodeURIComponent(opts.jobId)}`), opts.accessToken, opts.businessDomain);
111
+ }
112
+ export function getJobTasks(opts) {
113
+ return bknGet(knUrl(opts.baseUrl, opts.knId, `jobs/${encodeURIComponent(opts.jobId)}/tasks`), opts.accessToken, opts.businessDomain);
114
+ }
115
+ export function deleteJobs(opts) {
116
+ return bknDelete(knUrl(opts.baseUrl, opts.knId, `jobs/${opts.jobIds}`), opts.accessToken, opts.businessDomain);
117
+ }
118
+ export function queryRelationTypePaths(opts) {
119
+ return bknPost(knUrl(opts.baseUrl, opts.knId, "relation-type-paths"), opts.accessToken, opts.body, opts.businessDomain);
120
+ }
121
+ export function listBknResources(opts) {
122
+ return bknGet(baseUrlOnly(opts.baseUrl, "resources"), opts.accessToken, opts.businessDomain);
123
+ }
31
124
  export async function downloadBkn(options) {
32
125
  const { baseUrl, accessToken, knId, businessDomain = "bd_public", branch = "main", } = options;
33
126
  const base = baseUrl.replace(/\/+$/, "");
@@ -1,21 +1,24 @@
1
1
  export interface ListConversationsOptions {
2
2
  baseUrl: string;
3
3
  accessToken: string;
4
- agentId: string;
4
+ agentKey: string;
5
5
  businessDomain?: string;
6
- limit?: number;
6
+ page?: number;
7
+ size?: number;
7
8
  }
8
9
  export interface ListMessagesOptions {
9
10
  baseUrl: string;
10
11
  accessToken: string;
12
+ agentKey: string;
11
13
  conversationId: string;
12
14
  businessDomain?: string;
13
- limit?: number;
14
15
  }
15
16
  export interface GetTracesOptions {
16
17
  baseUrl: string;
17
18
  accessToken: string;
19
+ agentId: string;
18
20
  conversationId: string;
21
+ businessDomain?: string;
19
22
  }
20
23
  /**
21
24
  * List conversations for an agent.
@@ -1,21 +1,20 @@
1
- function buildConversationsUrl(baseUrl, agentId) {
1
+ function buildConversationsUrl(baseUrl, agentKey) {
2
2
  const base = baseUrl.replace(/\/+$/, "");
3
- return `${base}/api/agent-app/v1/app/${agentId}/conversations`;
3
+ return `${base}/api/agent-factory/v1/app/${agentKey}/conversation`;
4
4
  }
5
- function buildMessagesUrl(baseUrl, conversationId) {
5
+ function buildMessagesUrl(baseUrl, agentKey, conversationId) {
6
6
  const base = baseUrl.replace(/\/+$/, "");
7
- return `${base}/api/agent-app/v1/conversations/${conversationId}/messages`;
7
+ return `${base}/api/agent-factory/v1/app/${agentKey}/conversation/${conversationId}`;
8
8
  }
9
9
  /**
10
10
  * List conversations for an agent.
11
11
  * Returns empty array on 404 (endpoint may not be available in all deployments).
12
12
  */
13
13
  export async function listConversations(opts) {
14
- const { baseUrl, accessToken, agentId, businessDomain = "bd_public", limit } = opts;
15
- const url = new URL(buildConversationsUrl(baseUrl, agentId));
16
- if (limit !== undefined) {
17
- url.searchParams.set("limit", String(limit));
18
- }
14
+ const { baseUrl, accessToken, agentKey, businessDomain = "bd_public", page = 1, size = 10 } = opts;
15
+ const url = new URL(buildConversationsUrl(baseUrl, agentKey));
16
+ url.searchParams.set("page", String(page));
17
+ url.searchParams.set("size", String(size));
19
18
  const response = await fetch(url.toString(), {
20
19
  method: "GET",
21
20
  headers: {
@@ -25,29 +24,35 @@ export async function listConversations(opts) {
25
24
  "x-business-domain": businessDomain,
26
25
  },
27
26
  });
28
- if (response.status === 404) {
29
- return "[]";
30
- }
31
27
  const body = await response.text();
32
28
  if (!response.ok) {
33
29
  throw new Error(`listConversations failed: HTTP ${response.status} ${response.statusText} — ${body.slice(0, 200)}`);
34
30
  }
35
31
  return body || "[]";
36
32
  }
37
- function buildTracesUrl(baseUrl, conversationId) {
33
+ function buildTracesUrl(baseUrl, agentId, conversationId) {
38
34
  const base = baseUrl.replace(/\/+$/, "");
39
- return `${base}/api/agent-observability/v1/traces/by-conversation?conversation_id=${conversationId}`;
35
+ return `${base}/api/agent-factory/v1/observability/agent/${agentId}/conversation/${conversationId}/session`;
40
36
  }
41
37
  export async function getTracesByConversation(opts) {
42
- const { baseUrl, accessToken, conversationId } = opts;
43
- const url = buildTracesUrl(baseUrl, conversationId);
38
+ const { baseUrl, accessToken, agentId, conversationId, businessDomain = "bd_public" } = opts;
39
+ const url = buildTracesUrl(baseUrl, agentId, conversationId);
44
40
  const response = await fetch(url, {
45
- method: "GET",
41
+ method: "POST",
46
42
  headers: {
43
+ "Content-Type": "application/json",
47
44
  accept: "application/json",
48
45
  authorization: `Bearer ${accessToken}`,
49
46
  token: accessToken,
47
+ "x-business-domain": businessDomain,
50
48
  },
49
+ body: JSON.stringify({
50
+ agent_id: agentId,
51
+ start_time: 1,
52
+ end_time: Date.now() + 86400000,
53
+ page: 1,
54
+ size: 50,
55
+ }),
51
56
  });
52
57
  const body = await response.text();
53
58
  if (!response.ok) {
@@ -60,12 +65,9 @@ export async function getTracesByConversation(opts) {
60
65
  * Returns empty array on 404 (endpoint may not be available in all deployments).
61
66
  */
62
67
  export async function listMessages(opts) {
63
- const { baseUrl, accessToken, conversationId, businessDomain = "bd_public", limit } = opts;
64
- const url = new URL(buildMessagesUrl(baseUrl, conversationId));
65
- if (limit !== undefined) {
66
- url.searchParams.set("limit", String(limit));
67
- }
68
- const response = await fetch(url.toString(), {
68
+ const { baseUrl, accessToken, agentKey, conversationId, businessDomain = "bd_public" } = opts;
69
+ const url = buildMessagesUrl(baseUrl, agentKey, conversationId);
70
+ const response = await fetch(url, {
69
71
  method: "GET",
70
72
  headers: {
71
73
  accept: "application/json",
@@ -74,12 +76,9 @@ export async function listMessages(opts) {
74
76
  "x-business-domain": businessDomain,
75
77
  },
76
78
  });
77
- if (response.status === 404) {
78
- return "[]";
79
- }
80
79
  const body = await response.text();
81
80
  if (!response.ok) {
82
81
  throw new Error(`listMessages failed: HTTP ${response.status} ${response.statusText} — ${body.slice(0, 200)}`);
83
82
  }
84
- return body || "[]";
83
+ return body || "{}";
85
84
  }
@@ -1,14 +1,5 @@
1
1
  import { HttpError } from "../utils/http.js";
2
- function buildHeaders(accessToken, businessDomain) {
3
- return {
4
- accept: "application/json, text/plain, */*",
5
- "accept-language": "zh-cn",
6
- authorization: `Bearer ${accessToken}`,
7
- token: accessToken,
8
- "x-business-domain": businessDomain,
9
- "x-language": "zh-cn",
10
- };
11
- }
2
+ import { buildHeaders } from "./headers.js";
12
3
  function debugLog(method, url, headers, body) {
13
4
  if (!process.env["KWEAVER_DEBUG_HTTP"])
14
5
  return;
@@ -1,5 +1,6 @@
1
1
  import { HttpError } from "../utils/http.js";
2
2
  import { encryptPassword } from "../utils/crypto.js";
3
+ import { buildHeaders } from "./headers.js";
3
4
  const HTTPS_PROTOCOLS = new Set(["maxcompute", "anyshare7", "opensearch"]);
4
5
  function connectProtocol(dsType) {
5
6
  return HTTPS_PROTOCOLS.has(dsType) ? "https" : "jdbc";
@@ -18,16 +19,6 @@ function makeBinData(type, host, port, database, account, password, schema) {
18
19
  }
19
20
  return d;
20
21
  }
21
- function buildHeaders(accessToken, businessDomain) {
22
- return {
23
- accept: "application/json, text/plain, */*",
24
- "accept-language": "zh-cn",
25
- authorization: `Bearer ${accessToken}`,
26
- token: accessToken,
27
- "x-business-domain": businessDomain,
28
- "x-language": "zh-cn",
29
- };
30
- }
31
22
  export async function testDatasource(options) {
32
23
  const { baseUrl, accessToken, type, host, port, database, account, password, schema, businessDomain = "bd_public", } = options;
33
24
  const base = baseUrl.replace(/\/+$/, "");
@@ -1,15 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { HttpError } from "../utils/http.js";
3
- function buildHeaders(accessToken, businessDomain) {
4
- return {
5
- accept: "application/json, text/plain, */*",
6
- "accept-language": "zh-cn",
7
- authorization: `Bearer ${accessToken}`,
8
- token: accessToken,
9
- "x-business-domain": businessDomain,
10
- "x-language": "zh-cn",
11
- };
12
- }
3
+ import { buildHeaders } from "./headers.js";
13
4
  function extractViewId(data) {
14
5
  if (Array.isArray(data) && data.length > 0) {
15
6
  const item = data[0];
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shared HTTP header builder for all KWeaver API calls.
3
+ *
4
+ * Supports optional x-account-id / x-account-type headers read from
5
+ * environment variables KWEAVER_ACCOUNT_ID and KWEAVER_ACCOUNT_TYPE.
6
+ * These are required by older platform versions (e.g. dip-poc.aishu.cn)
7
+ * that do not infer account info from the token automatically.
8
+ */
9
+ export declare function buildHeaders(accessToken: string, businessDomain: string): Record<string, string>;