@glodon-aiot/bot-client-sdk 3.25.1-alpha.7 → 3.26.0-alpha.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.
Files changed (70) hide show
  1. package/README.md +543 -98
  2. package/dist/es/AgentSession.mjs +230 -165
  3. package/dist/es/BotClient.mjs +186 -136
  4. package/dist/es/Config.mjs +111 -26
  5. package/dist/es/Session.mjs +12 -0
  6. package/dist/es/api/index.mjs +42 -33
  7. package/dist/es/index.mjs +68 -9
  8. package/dist/es/localFiles/adapters/FileSystemAccessAdapter.mjs +174 -0
  9. package/dist/es/localFiles/adapters/HostBridgeAdapter.mjs +172 -0
  10. package/dist/es/localFiles/adapters/MemoryWorkspaceAdapter.mjs +162 -0
  11. package/dist/es/localFiles/adapters/WorkspaceFileAdapter.mjs +50 -0
  12. package/dist/es/localFiles/adapters/fsaTypes.mjs +9 -0
  13. package/dist/es/localFiles/constants.mjs +47 -0
  14. package/dist/es/localFiles/createLocalFilesPlugin.mjs +255 -0
  15. package/dist/es/localFiles/createLocalPythonPlugin.mjs +196 -0
  16. package/dist/es/localFiles/errors.mjs +57 -0
  17. package/dist/es/localFiles/host/connectHostBridge.mjs +50 -0
  18. package/dist/es/localFiles/host/protocol.mjs +26 -0
  19. package/dist/es/localFiles/limits.mjs +22 -0
  20. package/dist/es/localFiles/schemas.mjs +327 -0
  21. package/dist/es/localFiles/security/downloadUrlPolicy.mjs +39 -0
  22. package/dist/es/localFiles/security/glob.mjs +28 -0
  23. package/dist/es/localFiles/security/pathPolicy.mjs +59 -0
  24. package/dist/es/localFiles/security/sensitiveFiles.mjs +115 -0
  25. package/dist/es/localFiles/tools/readTools.mjs +333 -0
  26. package/dist/es/localFiles/tools/runtime.mjs +108 -0
  27. package/dist/es/localFiles/tools/transferTools.mjs +228 -0
  28. package/dist/es/localFiles/tools/writeTools.mjs +173 -0
  29. package/dist/es/localFiles/transfer/SessionFileTransfer.mjs +111 -0
  30. package/dist/es/localFiles/validate.mjs +66 -0
  31. package/dist/es/localFiles/workspace/LocalWorkspace.mjs +339 -0
  32. package/dist/es/localFiles/workspace/handleStore.mjs +79 -0
  33. package/dist/es/localFiles/workspace/watchDirectory.mjs +38 -0
  34. package/dist/es/package.json.mjs +7 -4
  35. package/dist/lib/index.js +9 -4
  36. package/dist/src/AgentSession.d.ts +9 -0
  37. package/dist/src/BotClient.d.ts +12 -2
  38. package/dist/src/Config.d.ts +22 -0
  39. package/dist/src/Session.d.ts +5 -1
  40. package/dist/src/api/index.d.ts +3 -1
  41. package/dist/src/index.d.ts +4 -2
  42. package/dist/src/localFiles/adapters/FileSystemAccessAdapter.d.ts +17 -0
  43. package/dist/src/localFiles/adapters/HostBridgeAdapter.d.ts +24 -0
  44. package/dist/src/localFiles/adapters/MemoryWorkspaceAdapter.d.ts +18 -0
  45. package/dist/src/localFiles/adapters/WorkspaceFileAdapter.d.ts +26 -0
  46. package/dist/src/localFiles/adapters/fsaTypes.d.ts +39 -0
  47. package/dist/src/localFiles/constants.d.ts +50 -0
  48. package/dist/src/localFiles/createLocalFilesPlugin.d.ts +11 -0
  49. package/dist/src/localFiles/createLocalPythonPlugin.d.ts +12 -0
  50. package/dist/src/localFiles/errors.d.ts +34 -0
  51. package/dist/src/localFiles/host/connectHostBridge.d.ts +6 -0
  52. package/dist/src/localFiles/host/protocol.d.ts +33 -0
  53. package/dist/src/localFiles/index.d.ts +21 -0
  54. package/dist/src/localFiles/limits.d.ts +3 -0
  55. package/dist/src/localFiles/schemas.d.ts +30 -0
  56. package/dist/src/localFiles/security/downloadUrlPolicy.d.ts +4 -0
  57. package/dist/src/localFiles/security/glob.d.ts +3 -0
  58. package/dist/src/localFiles/security/pathPolicy.d.ts +14 -0
  59. package/dist/src/localFiles/security/sensitiveFiles.d.ts +23 -0
  60. package/dist/src/localFiles/tools/readTools.d.ts +7 -0
  61. package/dist/src/localFiles/tools/runtime.d.ts +43 -0
  62. package/dist/src/localFiles/tools/transferTools.d.ts +4 -0
  63. package/dist/src/localFiles/tools/writeTools.d.ts +4 -0
  64. package/dist/src/localFiles/transfer/SessionFileTransfer.d.ts +40 -0
  65. package/dist/src/localFiles/types.d.ts +306 -0
  66. package/dist/src/localFiles/validate.d.ts +2 -0
  67. package/dist/src/localFiles/workspace/LocalWorkspace.d.ts +99 -0
  68. package/dist/src/localFiles/workspace/handleStore.d.ts +11 -0
  69. package/dist/src/localFiles/workspace/watchDirectory.d.ts +7 -0
  70. package/package.json +7 -4
@@ -1,69 +1,101 @@
1
- var k = Object.defineProperty, A = Object.defineProperties;
2
- var x = Object.getOwnPropertyDescriptors;
3
- var y = Object.getOwnPropertySymbols;
4
- var I = Object.prototype.hasOwnProperty, R = Object.prototype.propertyIsEnumerable;
5
- var g = (r, i, e) => i in r ? k(r, i, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[i] = e, p = (r, i) => {
6
- for (var e in i || (i = {}))
7
- I.call(i, e) && g(r, e, i[e]);
8
- if (y)
9
- for (var e of y(i))
10
- R.call(i, e) && g(r, e, i[e]);
11
- return r;
12
- }, f = (r, i) => A(r, x(i));
13
- var d = (r, i, e) => (g(r, typeof i != "symbol" ? i + "" : i, e), e);
14
- var l = (r, i, e) => new Promise((t, n) => {
15
- var a = (o) => {
1
+ var x = Object.defineProperty, b = Object.defineProperties;
2
+ var R = Object.getOwnPropertyDescriptors;
3
+ var m = Object.getOwnPropertySymbols;
4
+ var E = Object.prototype.hasOwnProperty, L = Object.prototype.propertyIsEnumerable;
5
+ var v = (c, e, i) => e in c ? x(c, e, { enumerable: !0, configurable: !0, writable: !0, value: i }) : c[e] = i, f = (c, e) => {
6
+ for (var i in e || (e = {}))
7
+ E.call(e, i) && v(c, i, e[i]);
8
+ if (m)
9
+ for (var i of m(e))
10
+ L.call(e, i) && v(c, i, e[i]);
11
+ return c;
12
+ }, _ = (c, e) => b(c, R(e));
13
+ var l = (c, e, i) => (v(c, typeof e != "symbol" ? e + "" : e, i), i);
14
+ var d = (c, e, i) => new Promise((t, s) => {
15
+ var n = (a) => {
16
16
  try {
17
- s(e.next(o));
18
- } catch (c) {
19
- n(c);
17
+ o(i.next(a));
18
+ } catch (h) {
19
+ s(h);
20
20
  }
21
- }, h = (o) => {
21
+ }, r = (a) => {
22
22
  try {
23
- s(e.throw(o));
24
- } catch (c) {
25
- n(c);
23
+ o(i.throw(a));
24
+ } catch (h) {
25
+ s(h);
26
26
  }
27
- }, s = (o) => o.done ? t(o.value) : Promise.resolve(o.value).then(a, h);
28
- s((e = e.apply(r, i)).next());
27
+ }, o = (a) => a.done ? t(a.value) : Promise.resolve(a.value).then(n, r);
28
+ o((i = i.apply(c, e)).next());
29
29
  });
30
- import { parseJWT as m } from "./utils.mjs";
31
- import E from "./Logger.mjs";
32
- import { getCVForceService as M } from "./api/index.mjs";
33
- import { configure as S, configuration as v } from "./Config.mjs";
34
- import { ApplicationTypes as _, PromptVariableType as w } from "@glodon-aiot/apis";
35
- import C from "./AgentSession.mjs";
36
- import L from "./DialogSession.mjs";
37
- import T from "./EventBus.mjs";
38
- import V from "./package.json.mjs";
39
- const b = new E("[BotClient] ");
40
- class W {
41
- constructor(i, e, t = !0, n = {
30
+ import { parseJWT as y } from "./utils.mjs";
31
+ import W from "./Logger.mjs";
32
+ import { getAIShopService as M, getCVForceService as C } from "./api/index.mjs";
33
+ import { configure as k, configuration as p, setActiveLocalWorkspace as S, refreshBuiltinPlugins as w } from "./Config.mjs";
34
+ import { connectHostBridge as T } from "./localFiles/host/connectHostBridge.mjs";
35
+ import { LocalWorkspace as V } from "./localFiles/workspace/LocalWorkspace.mjs";
36
+ import { createIndexedDbStore as B } from "./localFiles/workspace/handleStore.mjs";
37
+ import { createDefaultSessionFileTransfer as O } from "./localFiles/transfer/SessionFileTransfer.mjs";
38
+ import { ApplicationTypes as u, PromptVariableType as A } from "@glodon-aiot/apis";
39
+ import D from "./AgentSession.mjs";
40
+ import H from "./DialogSession.mjs";
41
+ import F from "./EventBus.mjs";
42
+ import P from "./package.json.mjs";
43
+ const I = new W("[BotClient] ");
44
+ class ie {
45
+ constructor(e, i, t = !0, s = {
42
46
  analytics: {
43
47
  enabled: !1
44
48
  }
45
49
  }) {
46
- d(this, "event", new T());
47
- d(this, "cvforceApi");
50
+ l(this, "event", new F());
51
+ l(this, "cvforceApi");
48
52
  //从token解析出来的用户信息
49
- d(this, "_applicationId");
50
- d(this, "_application", null);
53
+ l(this, "_applicationId");
54
+ l(this, "_application", null);
51
55
  //session列表,被加载过的session将会被缓存到这个列表中
52
- d(this, "_sessions", []);
56
+ l(this, "_sessions", []);
53
57
  //活跃的session,只支持一个活跃的session
54
- d(this, "_activeSession");
55
- d(this, "_ready", !1);
58
+ l(this, "_activeSession");
59
+ l(this, "_ready", !1);
56
60
  //问题长度
57
- d(this, "_questionContextMaxLength", 4e3);
58
- d(this, "_promptVariables", []);
59
- if (this._token = i, this.lazyload = t, this.sdkConfigs = n, S(e), this._applicationId = m(i).rid || v.applicationId, !this._applicationId)
61
+ l(this, "_questionContextMaxLength", 4e3);
62
+ l(this, "_promptVariables", []);
63
+ l(this, "_localWorkspace");
64
+ l(this, "_disconnectHost");
65
+ if (this._token = e, this.lazyload = t, this.sdkConfigs = s, k(i), this._applicationId = y(e).rid || p.applicationId, !this._applicationId)
60
66
  throw "token is not vaild";
61
- this.cvforceApi = this.getService(), this.loadApplication().then((a) => {
62
- S(f(p({}, e), {
63
- stream: e.stream === void 0 ? (a == null ? void 0 : a.type) === _.Dialog || (a == null ? void 0 : a.type) === _.Agent : e.stream
67
+ this.cvforceApi = this.getService(), this.setupLocalWorkspace(), this.loadApplication().then((n) => {
68
+ k(_(f({}, i), {
69
+ stream: i.stream === void 0 ? (n == null ? void 0 : n.type) === u.Dialog || (n == null ? void 0 : n.type) === u.Agent : i.stream
64
70
  })), this.event.emit("ready");
65
71
  });
66
72
  }
73
+ setupLocalWorkspace() {
74
+ var s, n;
75
+ const e = (s = p.builtinPlugins) == null ? void 0 : s.localFiles;
76
+ if (!(e != null && e.enabled)) {
77
+ S(void 0), w();
78
+ return;
79
+ }
80
+ const i = [], t = (n = e.backend) != null ? n : "file-system-access";
81
+ if (t !== "file-system-access" && t !== "host-bridge")
82
+ i.push(new Error(`[LocalFiles] 不支持的 backend:${e.backend}`));
83
+ else {
84
+ const r = M(p.apiRoot, this.token, (o, a) => I.error(a));
85
+ this._localWorkspace = new V({
86
+ applicationId: this._applicationId,
87
+ config: e,
88
+ store: B(),
89
+ picker: t === "host-bridge" ? null : void 0,
90
+ transfer: O(() => this.cvforceApi, () => r)
91
+ }), S(this._localWorkspace), t === "host-bridge" ? this._disconnectHost = T(this._localWorkspace) : this._localWorkspace.restore();
92
+ }
93
+ i.push(...w()), i.length && Promise.resolve().then(() => i.forEach((r) => this.event.emit("error", r)));
94
+ }
95
+ /** 启用 builtinPlugins.localFiles 后可用;UI 与纯 SDK 集成共用此实例。 */
96
+ get localWorkspace() {
97
+ return this._localWorkspace;
98
+ }
67
99
  checkReady() {
68
100
  if (!this.ready)
69
101
  throw Error("client is not ready.");
@@ -71,8 +103,8 @@ class W {
71
103
  get ready() {
72
104
  return this._ready;
73
105
  }
74
- set ready(i) {
75
- this._ready = i;
106
+ set ready(e) {
107
+ this._ready = e;
76
108
  }
77
109
  get questionContextMaxLength() {
78
110
  return this.checkReady(), this._questionContextMaxLength;
@@ -81,49 +113,49 @@ class W {
81
113
  return this.checkReady(), this._promptVariables;
82
114
  }
83
115
  get knowledges() {
84
- var i;
85
- return this.checkReady(), (i = this._application) == null ? void 0 : i.arrange[0].knowledges;
116
+ var e;
117
+ return this.checkReady(), (e = this._application) == null ? void 0 : e.arrange[0].knowledges;
86
118
  }
87
119
  get sessions() {
88
120
  return this.checkReady(), this._sessions;
89
121
  }
90
- set sessions(i) {
91
- this.checkReady(), this._sessions = i, this.event.emit("sessions:updated", i);
122
+ set sessions(e) {
123
+ this.checkReady(), this._sessions = e, this.event.emit("sessions:updated", e);
92
124
  }
93
125
  loadApplication() {
94
- return l(this, null, function* () {
95
- var e, t, n, a, h;
126
+ return d(this, null, function* () {
127
+ var i, t, s, n, r;
96
128
  this._application = yield this.cvforceApi.getApplicationId(
97
129
  this._applicationId,
98
130
  // 这里记录应用的名称和版本,以便后期数据分析
99
131
  {
100
- ui: (e = this.sdkConfigs.ui) == null ? void 0 : e.name,
132
+ ui: (i = this.sdkConfigs.ui) == null ? void 0 : i.name,
101
133
  uiVersion: (t = this.sdkConfigs.ui) == null ? void 0 : t.version,
102
- sdkVersion: V.version
134
+ sdkVersion: P.version
103
135
  }
104
- ).then((s) => (typeof s.arrange[0].thinkingModeOpen != "boolean" && (s.arrange[0].thinkingModeOpen = !0), typeof s.arrange[0].thinkingTextOpen != "boolean" && (s.arrange[0].thinkingTextOpen = !0), f(p({}, s), {
105
- arrange: [f(p({}, s.arrange[0]), {
106
- recommendQuestionOpen: v.loadRelatedQuesions && s.arrange[0].recommendQuestionOpen
136
+ ).then((o) => (typeof o.arrange[0].thinkingModeOpen != "boolean" && (o.arrange[0].thinkingModeOpen = !0), typeof o.arrange[0].thinkingTextOpen != "boolean" && (o.arrange[0].thinkingTextOpen = !0), _(f({}, o), {
137
+ arrange: [_(f({}, o.arrange[0]), {
138
+ recommendQuestionOpen: p.loadRelatedQuesions && o.arrange[0].recommendQuestionOpen
107
139
  })]
108
140
  })));
109
- const i = (h = (a = (n = this._application) == null ? void 0 : n.arrange) == null ? void 0 : a[0]) == null ? void 0 : h.llmModel;
110
- return i && (this._questionContextMaxLength = yield this.cvforceApi.getBaseModel(i).then((s) => s.maxModelLength)), this._promptVariables = yield Promise.all([this.cvforceApi.getPrompts(this._applicationId, {
111
- type: w.User
141
+ const e = (r = (n = (s = this._application) == null ? void 0 : s.arrange) == null ? void 0 : n[0]) == null ? void 0 : r.llmModel;
142
+ return e && (this._questionContextMaxLength = yield this.cvforceApi.getBaseModel(e).then((o) => o.maxModelLength)), this._promptVariables = yield Promise.all([this.cvforceApi.getPrompts(this._applicationId, {
143
+ type: A.User
112
144
  }), this.cvforceApi.getPrompts(this._applicationId, {
113
- type: w.System
114
- })]).then(([s, o]) => [...s, ...o]), this._ready = !0, this.event.emit("application:loaded"), this._application;
145
+ type: A.System
146
+ })]).then(([o, a]) => [...o, ...a]), this._ready = !0, this.event.emit("application:loaded"), this._application;
115
147
  });
116
148
  }
117
149
  getService() {
118
- return this.cvforceApi ? this.cvforceApi : M(v.apiRoot, this.token, (i, e) => b.error(e));
150
+ return this.cvforceApi ? this.cvforceApi : C(p.apiRoot, this.token, (e, i) => I.error(i));
119
151
  }
120
152
  get token() {
121
153
  return this._token;
122
154
  }
123
- set token(i) {
124
- this.checkReady(), this._token = i, this.ready = !1;
125
- const e = m(i).rid;
126
- this._applicationId !== e && (this._applicationId = e, this._application = null, this.loadApplication().then(() => {
155
+ set token(e) {
156
+ this.checkReady(), this._token = e, this.ready = !1;
157
+ const i = y(e).rid;
158
+ this._applicationId !== i && (this._applicationId = i, this._application = null, this.loadApplication().then(() => {
127
159
  this.event.emit("ready");
128
160
  }), this.clean());
129
161
  }
@@ -134,79 +166,96 @@ class W {
134
166
  return this.checkReady(), this._application;
135
167
  }
136
168
  get activeSession() {
137
- var i;
138
- return this.checkReady(), ((i = this._activeSession) == null ? void 0 : i.id) || "";
169
+ var e;
170
+ return this.checkReady(), ((e = this._activeSession) == null ? void 0 : e.id) || "";
139
171
  }
140
- set activeSession(i) {
141
- this.checkReady(), this.loadSession(i).then((e) => {
142
- this._activeSession && this._activeSession.id !== i && this._activeSession.inactivate(), this._activeSession = e;
172
+ set activeSession(e) {
173
+ this.checkReady(), this.loadSession(e).then((i) => {
174
+ this._activeSession && this._activeSession.id !== e && this._activeSession.inactivate(), this._activeSession = i;
143
175
  });
144
176
  }
145
- createSession(i, e, t, n, a) {
146
- return l(this, null, function* () {
147
- const h = this;
148
- return new Promise((s, o) => {
149
- const c = (u) => l(this, null, function* () {
150
- if (u === _.Agent)
151
- s(new C(i, e, t, n, a, h));
152
- else if (u === _.Dialog)
153
- s(new L(i, e, t, n, a, h));
177
+ createSession(e, i, t, s, n) {
178
+ return d(this, null, function* () {
179
+ const r = this;
180
+ return new Promise((o, a) => {
181
+ const h = (g) => d(this, null, function* () {
182
+ if (g === u.Agent)
183
+ o(new D(e, i, t, s, n, r));
184
+ else if (g === u.Dialog)
185
+ o(new H(e, i, t, s, n, r));
154
186
  else
155
- throw Error(`不支持的应用类型:${u}`);
187
+ throw Error(`不支持的应用类型:${g}`);
156
188
  });
157
189
  if (this.ready) {
158
190
  if (!this._application)
159
191
  throw Error("client is not ready");
160
- c(this._application.type);
192
+ h(this._application.type);
161
193
  } else
162
194
  this.event.on("ready", () => {
163
195
  if (!this._application)
164
196
  throw Error("_application is null");
165
- c(this._application.type);
197
+ h(this._application.type);
166
198
  }, !0);
167
199
  });
168
200
  });
169
201
  }
170
- getSessions(i) {
171
- return l(this, null, function* () {
172
- return new Promise((e, t) => {
173
- const n = () => this.cvforceApi.listSessions(this._applicationId, i).then((a) => l(this, null, function* () {
174
- const h = [];
175
- for (const s of a) {
176
- const o = this._sessions.find((c) => c.id === s.id);
177
- if (o)
178
- o.data = s, this._application ? o.application = this._application : yield o.loadApplicationInfo(), h.push(o);
202
+ /**
203
+ * 获取会话产出物。不传 sessionId 时取当前活跃会话。没有产出物时返回空数组。
204
+ */
205
+ getArtifacts(e) {
206
+ return d(this, null, function* () {
207
+ var n, r;
208
+ this.checkReady();
209
+ const i = e || ((n = this._activeSession) == null ? void 0 : n.id);
210
+ if (!i)
211
+ throw new Error("session id is not defined");
212
+ const t = this._sessions.find((o) => o.id === i);
213
+ if (t)
214
+ return t.getArtifacts();
215
+ const s = yield this.cvforceApi.getSessionArtifacts(this._applicationId, i);
216
+ return (r = s == null ? void 0 : s.artifacts) != null ? r : [];
217
+ });
218
+ }
219
+ getSessions(e) {
220
+ return d(this, null, function* () {
221
+ return new Promise((i, t) => {
222
+ const s = () => this.cvforceApi.listSessions(this._applicationId, e).then((n) => d(this, null, function* () {
223
+ const r = [];
224
+ for (const o of n) {
225
+ const a = this._sessions.find((h) => h.id === o.id);
226
+ if (a)
227
+ a.data = o, this._application ? a.application = this._application : yield a.loadApplicationInfo(), r.push(a);
179
228
  else {
180
- const c = yield this.createSession(this.token, s.id, s, this.lazyload, this._application || void 0);
181
- h.push(c);
229
+ const h = yield this.createSession(this.token, o.id, o, this.lazyload, this._application || void 0);
230
+ r.push(h);
182
231
  }
183
232
  }
184
- if (i != null && i.pageSize) {
185
- const s = [...this._sessions, ...h], o = /* @__PURE__ */ new Map();
186
- for (const c of s)
187
- o.set(c.id, c);
188
- return this.sessions = Array.from(o.values()), this.sessions;
233
+ if (e != null && e.pageSize) {
234
+ const o = [...this._sessions, ...r], a = /* @__PURE__ */ new Map();
235
+ for (const h of o)
236
+ a.set(h.id, h);
237
+ return this.sessions = Array.from(a.values()), this.sessions;
189
238
  } else
190
- return this.sessions = h, h;
239
+ return this.sessions = r, r;
191
240
  }));
192
241
  if (this.ready) {
193
242
  if (!this._application)
194
243
  throw Error("_application is null");
195
- e(n());
244
+ i(s());
196
245
  } else
197
246
  this.event.on("ready", () => {
198
247
  if (!this._application)
199
248
  throw Error("_application is null");
200
- e(n());
249
+ i(s());
201
250
  }, !0);
202
251
  });
203
252
  });
204
253
  }
205
- loadSession(i = "", e) {
206
- return l(this, null, function* () {
254
+ loadSession(e = "", i) {
255
+ return d(this, null, function* () {
207
256
  this.checkReady();
208
- let t = this.sessions.find((n) => n.id === i);
209
- if (t || (t = yield this.createSession(this.token, i, e), this._sessions.push(t)), this._activeSession) {
257
+ let t = this.sessions.find((s) => s.id === e);
258
+ if (t || (t = yield this.createSession(this.token, e, i), this._sessions.push(t)), this._activeSession) {
210
259
  if (this._activeSession === t)
211
260
  return t;
212
261
  this._activeSession.inactivate();
@@ -217,60 +266,61 @@ class W {
217
266
  });
218
267
  }
219
268
  reload() {
220
- return this.loadApplication().then(() => l(this, null, function* () {
269
+ return this.loadApplication().then(() => d(this, null, function* () {
221
270
  return yield this.getSessions(), this.event.emit("ready"), this;
222
271
  }));
223
272
  }
224
- reloadSession(i) {
225
- return l(this, null, function* () {
273
+ reloadSession(e) {
274
+ return d(this, null, function* () {
226
275
  yield this.reload();
227
- let e = this._sessions.find((t) => t.id === i) || this._activeSession;
228
- if (!e) {
276
+ let i = this._sessions.find((t) => t.id === e) || this._activeSession;
277
+ if (!i) {
229
278
  console.warn("reloadSession session failed.");
230
279
  return;
231
280
  }
232
- return yield e.reload(), e;
281
+ return yield i.reload(), i;
233
282
  });
234
283
  }
235
- setTop(i, e, t = "top_time desc, sort_status desc, updated_at desc") {
236
- return l(this, null, function* () {
237
- let n = i ? this._sessions.find((a) => a.id === i) : this._activeSession;
238
- if (!n) {
284
+ setTop(e, i, t = "top_time desc, sort_status desc, updated_at desc") {
285
+ return d(this, null, function* () {
286
+ let s = e ? this._sessions.find((n) => n.id === e) : this._activeSession;
287
+ if (!s) {
239
288
  console.warn("setTop session failed.");
240
289
  return;
241
290
  }
242
- return yield n.setTop(e), this.getSessions({
291
+ return yield s.setTop(i), this.getSessions({
243
292
  order: t
244
293
  });
245
294
  });
246
295
  }
247
- addEventListener(i, e, t = !1) {
248
- if (typeof e != "function")
296
+ addEventListener(e, i, t = !1) {
297
+ if (typeof i != "function")
249
298
  throw Error("event listener is not a function");
250
299
  if (t) {
251
- this.event.once(i, e);
300
+ this.event.once(e, i);
252
301
  return;
253
302
  }
254
- this.event.on(i, e);
303
+ this.event.on(e, i);
255
304
  }
256
- removeEventListener(i, e) {
257
- this.event.off(i, e);
305
+ removeEventListener(e, i) {
306
+ this.event.off(e, i);
258
307
  }
259
- removeSession(i, e) {
260
- return l(this, null, function* () {
308
+ removeSession(e, i) {
309
+ return d(this, null, function* () {
261
310
  this.checkReady();
262
311
  let t = -1;
263
- if (typeof i == "string" ? t = this._sessions.findIndex((n) => n.id === i) : t = this._sessions.findIndex((n) => n.id === i.id), t > -1) {
264
- const n = this._sessions[t];
265
- e && (yield n.delete()), this._sessions.splice(t, 1);
312
+ if (typeof e == "string" ? t = this._sessions.findIndex((s) => s.id === e) : t = this._sessions.findIndex((s) => s.id === e.id), t > -1) {
313
+ const s = this._sessions[t];
314
+ i && (yield s.delete()), this._sessions.splice(t, 1);
266
315
  } else
267
316
  console.warn("session delete failed, session is not exist.");
268
317
  });
269
318
  }
270
319
  clean() {
271
- this._sessions.forEach((i) => i.destroy()), this.sessions = [];
320
+ var e;
321
+ (e = this._disconnectHost) == null || e.call(this), this._disconnectHost = void 0, this._sessions.forEach((i) => i.destroy()), this.sessions = [];
272
322
  }
273
323
  }
274
324
  export {
275
- W as default
325
+ ie as default
276
326
  };
@@ -1,40 +1,125 @@
1
- var u = Object.defineProperty, f = Object.defineProperties;
2
- var v = Object.getOwnPropertyDescriptors;
3
- var n = Object.getOwnPropertySymbols;
4
- var p = Object.prototype.hasOwnProperty, h = Object.prototype.propertyIsEnumerable;
5
- var g = (o, t, e) => t in o ? u(o, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : o[t] = e, c = (o, t) => {
6
- for (var e in t || (t = {}))
7
- p.call(t, e) && g(o, e, t[e]);
8
- if (n)
9
- for (var e of n(t))
10
- h.call(t, e) && g(o, e, t[e]);
11
- return o;
12
- }, l = (o, t) => f(o, v(t));
13
- import d from "./Logger.mjs";
14
- const R = new d("[Config] ");
15
- var s = /* @__PURE__ */ ((o) => (o.dev = "https://aiot-dev.glodon.com/api/cvforcepd", o.test = "https://aiot-dev.glodon.com/api/cvforce", o.prod = "https://copilot.glodon.com/api/cvforce", o.local = "http://localhost:3000/api/cvforcepd", o))(s || {});
16
- let i = {
1
+ var O = Object.defineProperty, w = Object.defineProperties;
2
+ var k = Object.getOwnPropertyDescriptors;
3
+ var h = Object.getOwnPropertySymbols;
4
+ var F = Object.prototype.hasOwnProperty, N = Object.prototype.propertyIsEnumerable;
5
+ var a = (e, i, o) => i in e ? O(e, i, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[i] = o, c = (e, i) => {
6
+ for (var o in i || (i = {}))
7
+ F.call(i, o) && a(e, o, i[o]);
8
+ if (h)
9
+ for (var o of h(i))
10
+ N.call(i, o) && a(e, o, i[o]);
11
+ return e;
12
+ }, R = (e, i) => w(e, k(i));
13
+ import f from "./Logger.mjs";
14
+ import { LOCAL_PYTHON_FUNCTION_CODE as y, LOCAL_FILES_PLUGIN_CODES as A, LOCAL_PYTHON_PLUGIN_CODES as E } from "./localFiles/constants.mjs";
15
+ import { createLocalFilesPlugin as I } from "./localFiles/createLocalFilesPlugin.mjs";
16
+ import { createLocalPythonPlugin as $ } from "./localFiles/createLocalPythonPlugin.mjs";
17
+ const q = new f("[Config] ");
18
+ var _ = /* @__PURE__ */ ((e) => (e.dev = "https://aiot-dev.glodon.com/api/cvforcepd", e.test = "https://aiot-dev.glodon.com/api/cvforce", e.prod = "https://copilot.glodon.com/api/cvforce", e.local = "http://localhost:3000/api/cvforcepd", e))(_ || {});
19
+ let n = {
17
20
  debug: !1,
18
21
  env: "prod",
19
22
  //AIoT 环境, 与apiRoot配对使用
20
23
  apiRoot: "https://copilot.glodon.com/api/cvforce",
21
24
  //https://${hostname}/${PRODUCD_CODE}
22
25
  applicationId: "",
26
+ /** 最终生效的插件表 = 业务插件 + 内置插件,由 configure() 计算,不要直接修改。 */
23
27
  plugins: {},
28
+ /** 集成方传入的原始 plugins。 */
29
+ businessPlugins: {},
30
+ builtinPlugins: void 0,
24
31
  mcp: void 0,
25
32
  loadRelatedQuesions: !0,
26
33
  stream: !1
27
- };
28
- function x(o) {
29
- var t, e;
30
- d.debug = (o == null ? void 0 : o.debug) || !1, i = l(c(c({}, i), o), {
31
- apiRoot: (o == null ? void 0 : o.apiRoot) || i.apiRoot || (o != null && o.env ? s[o.env || "prod"] : i.apiRoot),
34
+ }, u, r, d;
35
+ const v = /* @__PURE__ */ new Set();
36
+ function T(e) {
37
+ u !== e && (u = e, r = void 0, d = void 0, v.clear());
38
+ }
39
+ function j() {
40
+ if (!r)
41
+ return;
42
+ const {
43
+ pluginCode: e,
44
+ table: i
45
+ } = r, o = n.plugins[e], l = i[e];
46
+ if (!(!o || o.list_directory !== l.list_directory))
47
+ return e;
48
+ }
49
+ function z() {
50
+ if (!d)
51
+ return;
52
+ const {
53
+ pluginCode: e,
54
+ table: i
55
+ } = d, o = n.plugins[e], l = i[e];
56
+ if (!(!o || o[y] !== l[y]))
57
+ return e;
58
+ }
59
+ function S(e, i) {
60
+ return (e == null ? void 0 : e.pluginCode) || A[i];
61
+ }
62
+ function D(e, i, o) {
63
+ return (e == null ? void 0 : e.pluginCode) || o || E[i];
64
+ }
65
+ function H() {
66
+ var P, C, b;
67
+ const e = (P = n.businessPlugins) != null ? P : {}, i = (C = n.builtinPlugins) == null ? void 0 : C.localFiles, o = (b = n.builtinPlugins) == null ? void 0 : b.localPython, l = [], g = c({}, e);
68
+ let s, p = !1;
69
+ if (i != null && i.enabled && u && (s = S(i, n.env), s ? e[s] ? l.push(`[LocalFiles] 业务插件中已存在 pluginCode「${s}」,已保留业务插件,内置文件工具未注册。`) : (((r == null ? void 0 : r.workspace) !== u || r.pluginCode !== s) && (r = {
70
+ workspace: u,
71
+ pluginCode: s,
72
+ table: I({
73
+ pluginCode: s,
74
+ workspace: u
75
+ })
76
+ }), g[s] = r.table[s], p = !0) : l.push(`[LocalFiles] 当前环境(env: ${n.env})没有默认的内置工具插件编码,请配置 builtinPlugins.localFiles.pluginCode。内置文件工具未注册。`)), o != null && o.enabled) {
77
+ const t = D(o, n.env, s);
78
+ if (!u)
79
+ l.push("[LocalPython] 运行脚本依赖已启用的本地工作区。内置脚本工具未注册。");
80
+ else if (!t)
81
+ l.push(`[LocalPython] 当前环境(env: ${n.env})没有默认的内置工具插件编码,请配置 builtinPlugins.localPython.pluginCode,或与文件工具使用同一个 pluginCode。内置脚本工具未注册。`);
82
+ else if (e[t])
83
+ l.push(`[LocalPython] pluginCode「${t}」已被业务插件占用,已保留业务插件,内置脚本工具未注册。`);
84
+ else if (g[t] && !(p && t === s))
85
+ l.push(`[LocalPython] pluginCode「${t}」已被占用,已保留原插件,内置脚本工具未注册。`);
86
+ else {
87
+ ((d == null ? void 0 : d.workspace) !== u || d.pluginCode !== t || d.approve !== o.onApprovalRequired) && (d = {
88
+ workspace: u,
89
+ pluginCode: t,
90
+ approve: o.onApprovalRequired,
91
+ table: $({
92
+ pluginCode: t,
93
+ workspace: u,
94
+ onApprovalRequired: o.onApprovalRequired
95
+ })
96
+ });
97
+ const L = d.table[t];
98
+ g[t] = p && t === s ? c(c({}, g[t]), L) : L;
99
+ }
100
+ }
101
+ return n.plugins = g, l;
102
+ }
103
+ function B() {
104
+ return H().filter((e) => !v.has(e)).map((e) => (v.add(e), console.error(e), new Error(e)));
105
+ }
106
+ function J(e) {
107
+ var i, o, l;
108
+ f.debug = (e == null ? void 0 : e.debug) || !1, n = R(c(c({}, n), e), {
109
+ apiRoot: (e == null ? void 0 : e.apiRoot) || n.apiRoot || (e != null && e.env ? _[e.env || "prod"] : n.apiRoot),
32
110
  // 应用未注册插件时 param.plugins 为 undefined,避免覆盖默认空表
33
- plugins: (e = (t = o == null ? void 0 : o.plugins) != null ? t : i.plugins) != null ? e : {}
34
- }), d.debug && R.log("updated", i);
111
+ businessPlugins: (o = (i = e == null ? void 0 : e.plugins) != null ? i : n.businessPlugins) != null ? o : {},
112
+ builtinPlugins: (l = e == null ? void 0 : e.builtinPlugins) != null ? l : n.builtinPlugins
113
+ }), B(), f.debug && q.log("updated", n);
35
114
  }
36
115
  export {
37
- s as ApiUrl,
38
- i as configuration,
39
- x as configure
116
+ _ as ApiUrl,
117
+ n as configuration,
118
+ J as configure,
119
+ j as getRegisteredLocalFilesPluginCode,
120
+ z as getRegisteredLocalPythonPluginCode,
121
+ B as refreshBuiltinPlugins,
122
+ S as resolveLocalFilesPluginCode,
123
+ D as resolveLocalPythonPluginCode,
124
+ T as setActiveLocalWorkspace
40
125
  };
@@ -729,6 +729,18 @@ class te {
729
729
  * @param params - 评论参数,包含评论相关的信息,如消息 ID 等
730
730
  * @returns 返回调用 API 提交评论后的响应结果
731
731
  */
732
+ /**
733
+ * 获取当前会话的产出物。没有产出物时返回空数组。
734
+ */
735
+ getArtifacts() {
736
+ return c(this, null, function* () {
737
+ var t;
738
+ if (!this._applicationId || !this._id)
739
+ throw Error("session is not avalible. id is undefined");
740
+ const e = yield this.cvforceApi.getSessionArtifacts(this._applicationId, this._id);
741
+ return (t = e == null ? void 0 : e.artifacts) != null ? t : [];
742
+ });
743
+ }
732
744
  postMessageComment(e) {
733
745
  return c(this, null, function* () {
734
746
  if (!this._applicationId || !this._id)