@memtensor/memos-local-openclaw-plugin 1.0.4-beta.10 → 1.0.4-beta.12

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 (72) hide show
  1. package/dist/client/connector.d.ts +5 -0
  2. package/dist/client/connector.d.ts.map +1 -1
  3. package/dist/client/connector.js +38 -8
  4. package/dist/client/connector.js.map +1 -1
  5. package/dist/hub/server.d.ts +1 -0
  6. package/dist/hub/server.d.ts.map +1 -1
  7. package/dist/hub/server.js +143 -32
  8. package/dist/hub/server.js.map +1 -1
  9. package/dist/hub/user-manager.d.ts +9 -0
  10. package/dist/hub/user-manager.d.ts.map +1 -1
  11. package/dist/hub/user-manager.js +26 -2
  12. package/dist/hub/user-manager.js.map +1 -1
  13. package/dist/ingest/chunker.d.ts +2 -1
  14. package/dist/ingest/chunker.d.ts.map +1 -1
  15. package/dist/ingest/chunker.js +14 -10
  16. package/dist/ingest/chunker.js.map +1 -1
  17. package/dist/recall/engine.d.ts.map +1 -1
  18. package/dist/recall/engine.js +7 -2
  19. package/dist/recall/engine.js.map +1 -1
  20. package/dist/sharing/types.d.ts +1 -1
  21. package/dist/sharing/types.d.ts.map +1 -1
  22. package/dist/skill/evolver.d.ts +2 -0
  23. package/dist/skill/evolver.d.ts.map +1 -1
  24. package/dist/skill/evolver.js +56 -5
  25. package/dist/skill/evolver.js.map +1 -1
  26. package/dist/skill/generator.d.ts +2 -0
  27. package/dist/skill/generator.d.ts.map +1 -1
  28. package/dist/skill/generator.js +45 -3
  29. package/dist/skill/generator.js.map +1 -1
  30. package/dist/skill/installer.d.ts +26 -0
  31. package/dist/skill/installer.d.ts.map +1 -1
  32. package/dist/skill/installer.js +80 -4
  33. package/dist/skill/installer.js.map +1 -1
  34. package/dist/skill/upgrader.d.ts +2 -0
  35. package/dist/skill/upgrader.d.ts.map +1 -1
  36. package/dist/skill/upgrader.js +139 -1
  37. package/dist/skill/upgrader.js.map +1 -1
  38. package/dist/skill/validator.d.ts +3 -0
  39. package/dist/skill/validator.d.ts.map +1 -1
  40. package/dist/skill/validator.js +75 -0
  41. package/dist/skill/validator.js.map +1 -1
  42. package/dist/storage/sqlite.d.ts +28 -0
  43. package/dist/storage/sqlite.d.ts.map +1 -1
  44. package/dist/storage/sqlite.js +155 -16
  45. package/dist/storage/sqlite.js.map +1 -1
  46. package/dist/types.d.ts +10 -0
  47. package/dist/types.d.ts.map +1 -1
  48. package/dist/types.js +4 -0
  49. package/dist/types.js.map +1 -1
  50. package/dist/viewer/html.d.ts.map +1 -1
  51. package/dist/viewer/html.js +64 -24
  52. package/dist/viewer/html.js.map +1 -1
  53. package/dist/viewer/server.d.ts.map +1 -1
  54. package/dist/viewer/server.js +39 -20
  55. package/dist/viewer/server.js.map +1 -1
  56. package/index.ts +338 -33
  57. package/package.json +1 -1
  58. package/src/client/connector.ts +43 -8
  59. package/src/hub/server.ts +142 -31
  60. package/src/hub/user-manager.ts +42 -6
  61. package/src/ingest/chunker.ts +19 -13
  62. package/src/recall/engine.ts +7 -2
  63. package/src/sharing/types.ts +1 -1
  64. package/src/skill/evolver.ts +58 -6
  65. package/src/skill/generator.ts +44 -5
  66. package/src/skill/installer.ts +107 -4
  67. package/src/skill/upgrader.ts +139 -1
  68. package/src/skill/validator.ts +79 -0
  69. package/src/storage/sqlite.ts +174 -16
  70. package/src/types.ts +11 -0
  71. package/src/viewer/html.ts +64 -24
  72. package/src/viewer/server.ts +39 -20
@@ -8,6 +8,7 @@ export interface HubSessionInfo {
8
8
  userToken: string;
9
9
  role: UserRole;
10
10
  connectedAt: number;
11
+ identityKey?: string;
11
12
  }
12
13
  export interface HubStatusInfo {
13
14
  connected: boolean;
@@ -17,6 +18,10 @@ export interface HubStatusInfo {
17
18
  username: string;
18
19
  role: UserRole;
19
20
  status: UserStatus | string;
21
+ groups?: Array<{
22
+ id: string;
23
+ name: string;
24
+ }>;
20
25
  };
21
26
  }
22
27
  export declare function connectToHub(store: SqliteStore, config: MemosLocalConfig, log?: Logger): Promise<HubSessionInfo>;
@@ -1 +1 @@
1
- {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/client/connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,GAAG;QACX,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,QAAQ,CAAC;QACf,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAgEtH;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmHvG;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,CAAC,CA2DzB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAgB,MAAM,EAAE,MAAM,CAAC;gBACnB,MAAM,EAAE,MAAM;CAK3B"}
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/client/connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,GAAG;QACX,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,QAAQ,CAAC;QACf,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;QAC5B,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC9C,CAAC;CACH;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2EtH;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CA4HvG;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,CAAC,CAwEzB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAgB,MAAM,EAAE,MAAM,CAAC;gBACnB,MAAM,EAAE,MAAM;CAK3B"}
@@ -68,6 +68,8 @@ async function connectToHub(store, config, log) {
68
68
  userToken: result.userToken,
69
69
  role: "member",
70
70
  connectedAt: Date.now(),
71
+ identityKey: persisted.identityKey || "",
72
+ lastKnownStatus: "active",
71
73
  });
72
74
  return store.getClientHubConnection();
73
75
  }
@@ -77,6 +79,12 @@ async function connectToHub(store, config, log) {
77
79
  if (result.status === "rejected") {
78
80
  throw new Error("Join request was rejected by the Hub admin.");
79
81
  }
82
+ if (result.status === "blocked") {
83
+ throw new Error("Your account has been blocked by the Hub admin.");
84
+ }
85
+ if (result.status === "left" || result.status === "removed") {
86
+ log.info(`User status is "${result.status}", will try to rejoin.`);
87
+ }
80
88
  }
81
89
  catch (err) {
82
90
  if (err instanceof PendingApprovalError)
@@ -91,6 +99,7 @@ async function connectToHub(store, config, log) {
91
99
  }
92
100
  const hubUrl = (0, hub_1.normalizeHubUrl)(hubAddress);
93
101
  const me = await (0, hub_1.hubRequestJson)(hubUrl, userToken, "/api/v1/hub/me", { method: "GET" });
102
+ const persisted = store.getClientHubConnection();
94
103
  store.setClientHubConnection({
95
104
  hubUrl,
96
105
  userId: String(me.id),
@@ -98,6 +107,8 @@ async function connectToHub(store, config, log) {
98
107
  userToken,
99
108
  role: String(me.role ?? "member"),
100
109
  connectedAt: Date.now(),
110
+ identityKey: persisted?.identityKey || String(me.identityKey ?? ""),
111
+ lastKnownStatus: "active",
101
112
  });
102
113
  return store.getClientHubConnection();
103
114
  }
@@ -106,9 +117,13 @@ async function getHubStatus(store, config) {
106
117
  const configHubAddress = config.sharing?.client?.hubAddress || "";
107
118
  const hubAddress = conn?.hubUrl || (configHubAddress ? (0, hub_1.normalizeHubUrl)(configHubAddress) : "");
108
119
  const userToken = conn?.userToken || config.sharing?.client?.userToken || "";
109
- // If DB has a connection to a different Hub than config, the DB data is stale
110
120
  if (conn && configHubAddress && conn.hubUrl && (0, hub_1.normalizeHubUrl)(configHubAddress) !== conn.hubUrl) {
111
- store.clearClientHubConnection();
121
+ store.setClientHubConnection({
122
+ ...conn,
123
+ hubUrl: (0, hub_1.normalizeHubUrl)(configHubAddress),
124
+ userToken: "",
125
+ lastKnownStatus: "hub_changed",
126
+ });
112
127
  return { connected: false, user: null };
113
128
  }
114
129
  if (conn && conn.userId && (!userToken || userToken === "")) {
@@ -139,6 +154,8 @@ async function getHubStatus(store, config) {
139
154
  userToken: result.userToken,
140
155
  role: "member",
141
156
  connectedAt: Date.now(),
157
+ identityKey: conn.identityKey || "",
158
+ lastKnownStatus: "active",
142
159
  });
143
160
  const me = await (0, hub_1.hubRequestJson)((0, hub_1.normalizeHubUrl)(hubAddress), result.userToken, "/api/v1/hub/me", { method: "GET" });
144
161
  return {
@@ -178,12 +195,10 @@ async function getHubStatus(store, config) {
178
195
  const latestRole = String(me.role ?? "member");
179
196
  if (conn && (conn.username !== latestUsername || conn.role !== latestRole)) {
180
197
  store.setClientHubConnection({
181
- hubUrl: conn.hubUrl,
182
- userId: conn.userId,
198
+ ...conn,
183
199
  username: latestUsername,
184
- userToken: conn.userToken,
185
200
  role: latestRole,
186
- connectedAt: conn.connectedAt,
201
+ lastKnownStatus: "active",
187
202
  });
188
203
  }
189
204
  return {
@@ -194,13 +209,18 @@ async function getHubStatus(store, config) {
194
209
  username: latestUsername,
195
210
  role: latestRole,
196
211
  status: String(me.status ?? "active"),
212
+ groups: Array.isArray(me.groups) ? me.groups : [],
197
213
  },
198
214
  };
199
215
  }
200
216
  catch (err) {
201
217
  const is401 = typeof err?.message === "string" && err.message.includes("(401)");
202
218
  if (is401 && conn) {
203
- store.clearClientHubConnection();
219
+ store.setClientHubConnection({
220
+ ...conn,
221
+ userToken: "",
222
+ lastKnownStatus: "removed",
223
+ });
204
224
  return {
205
225
  connected: false,
206
226
  hubUrl: (0, hub_1.normalizeHubUrl)(hubAddress),
@@ -240,11 +260,14 @@ async function autoJoinHub(store, config, log) {
240
260
  break;
241
261
  }
242
262
  }
263
+ const persisted = store.getClientHubConnection();
264
+ const existingIdentityKey = persisted?.identityKey || "";
243
265
  log.info(`Joining Hub at ${hubUrl} as "${username}"...`);
244
266
  const result = await (0, hub_1.hubRequestJson)(hubUrl, "", "/api/v1/hub/join", {
245
267
  method: "POST",
246
- body: JSON.stringify({ teamToken, username, deviceName: hostname, clientIp }),
268
+ body: JSON.stringify({ teamToken, username, deviceName: hostname, clientIp, identityKey: existingIdentityKey }),
247
269
  });
270
+ const returnedIdentityKey = String(result.identityKey || existingIdentityKey || "");
248
271
  if (result.status === "pending") {
249
272
  log.info(`Join request submitted, awaiting admin approval. userId=${result.userId}`);
250
273
  store.setClientHubConnection({
@@ -254,12 +277,17 @@ async function autoJoinHub(store, config, log) {
254
277
  userToken: "",
255
278
  role: "member",
256
279
  connectedAt: Date.now(),
280
+ identityKey: returnedIdentityKey,
281
+ lastKnownStatus: "pending",
257
282
  });
258
283
  throw new PendingApprovalError(result.userId);
259
284
  }
260
285
  if (result.status === "rejected") {
261
286
  throw new Error(`Join request was rejected by the Hub admin.`);
262
287
  }
288
+ if (result.status === "blocked") {
289
+ throw new Error(`Your account has been blocked by the Hub admin.`);
290
+ }
263
291
  if (!result.userToken) {
264
292
  throw new Error(`Hub join failed: ${JSON.stringify(result)}`);
265
293
  }
@@ -271,6 +299,8 @@ async function autoJoinHub(store, config, log) {
271
299
  userToken: result.userToken,
272
300
  role: "member",
273
301
  connectedAt: Date.now(),
302
+ identityKey: returnedIdentityKey,
303
+ lastKnownStatus: "active",
274
304
  });
275
305
  return store.getClientHubConnection();
276
306
  }
@@ -1 +1 @@
1
- {"version":3,"file":"connector.js","sourceRoot":"","sources":["../../src/client/connector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connector.js","sourceRoot":"","sources":["../../src/client/connector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,oCA2EC;AAED,oCA4HC;AAED,kCA4EC;AA/SD,+BAAwD;AAwBjD,KAAK,UAAU,YAAY,CAAC,KAAkB,EAAE,MAAwB,EAAE,GAAY;IAC3F,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;IAC5D,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;IAExD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;QACjD,IAAI,SAAS,EAAE,SAAS;YAAE,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACpD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;QAE/H,4FAA4F;QAC5F,MAAM,SAAS,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;QACjD,IAAI,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,UAAU,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,IAAA,qBAAe,EAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAO,CAAC,SAAU,CAAC;YACpD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAc,EAAC,MAAM,EAAE,EAAE,EAAE,iCAAiC,EAAE;oBACjF,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;iBAC9D,CAAQ,CAAC;gBACV,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACnD,GAAG,CAAC,IAAI,CAAC,wDAAwD,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;oBACrF,KAAK,CAAC,sBAAsB,CAAC;wBAC3B,MAAM;wBACN,MAAM,EAAE,SAAS,CAAC,MAAM;wBACxB,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,EAAE;wBAClC,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;wBACvB,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,EAAE;wBACxC,eAAe,EAAE,QAAQ;qBAC1B,CAAC,CAAC;oBACH,OAAO,KAAK,CAAC,sBAAsB,EAAG,CAAC;gBACzC,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAChC,MAAM,IAAI,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACnD,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAChC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACrE,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC5D,GAAG,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,MAAM,wBAAwB,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,oBAAoB;oBAAE,MAAM,GAAG,CAAC;gBACnD,GAAG,CAAC,IAAI,CAAC,kEAAkE,GAAG,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,qBAAe,EAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,MAAM,IAAA,oBAAc,EAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAQ,CAAC;IAC/F,MAAM,SAAS,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;IACjD,KAAK,CAAC,sBAAsB,CAAC;QAC3B,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;QACnC,SAAS;QACT,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,QAAQ,CAAa;QAC7C,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,WAAW,EAAE,SAAS,EAAE,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC;QACnE,eAAe,EAAE,QAAQ;KAC1B,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,sBAAsB,EAAG,CAAC;AACzC,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,KAAkB,EAAE,MAAwB;IAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;IAC5C,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAA,qBAAe,EAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/F,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;IAE7E,IAAI,IAAI,IAAI,gBAAgB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAA,qBAAe,EAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACjG,KAAK,CAAC,sBAAsB,CAAC;YAC3B,GAAG,IAAI;YACP,MAAM,EAAE,IAAA,qBAAe,EAAC,gBAAgB,CAAC;YACzC,SAAS,EAAE,EAAE;YACb,eAAe,EAAE,aAAa;SAC/B,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,KAAK,EAAE,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;QAC1D,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAc,EAAC,IAAA,qBAAe,EAAC,UAAU,CAAC,EAAE,EAAE,EAAE,iCAAiC,EAAE;oBACtG,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;iBACzD,CAAQ,CAAC;gBACV,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAChC,OAAO;wBACL,SAAS,EAAE,KAAK;wBAChB,MAAM,EAAE,IAAA,qBAAe,EAAC,UAAU,CAAC;wBACnC,IAAI,EAAE;4BACJ,EAAE,EAAE,IAAI,CAAC,MAAM;4BACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;4BAC7B,IAAI,EAAE,QAAQ;4BACd,MAAM,EAAE,SAAS;yBAClB;qBACF,CAAC;gBACJ,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACnD,KAAK,CAAC,sBAAsB,CAAC;wBAC3B,MAAM,EAAE,IAAA,qBAAe,EAAC,UAAU,CAAC;wBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;wBAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;wBACvB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;wBACnC,eAAe,EAAE,QAAQ;qBAC1B,CAAC,CAAC;oBACH,MAAM,EAAE,GAAG,MAAM,IAAA,oBAAc,EAAC,IAAA,qBAAe,EAAC,UAAU,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAQ,CAAC;oBAC3H,OAAO;wBACL,SAAS,EAAE,IAAI;wBACf,MAAM,EAAE,IAAA,qBAAe,EAAC,UAAU,CAAC;wBACnC,IAAI,EAAE;4BACJ,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;4BACjB,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;4BACnC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,QAAQ,CAAa;4BAC7C,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,QAAQ,CAAC;yBACtC;qBACF,CAAC;gBACJ,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,OAAO;wBACL,SAAS,EAAE,KAAK;wBAChB,MAAM,EAAE,IAAA,qBAAe,EAAC,UAAU,CAAC;wBACnC,IAAI,EAAE;4BACJ,EAAE,EAAE,IAAI,CAAC,MAAM;4BACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;4BAC7B,IAAI,EAAE,QAAQ;4BACd,MAAM,EAAE,UAAU;yBACnB;qBACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,IAAA,oBAAc,EAAC,IAAA,qBAAe,EAAC,UAAU,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAQ,CAAC;QACpH,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,QAAQ,CAAa,CAAC;QAC3D,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,cAAc,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;YAC3E,KAAK,CAAC,sBAAsB,CAAC;gBAC3B,GAAG,IAAI;gBACP,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,UAAU;gBAChB,eAAe,EAAE,QAAQ;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,IAAA,qBAAe,EAAC,UAAU,CAAC;YACnC,IAAI,EAAE;gBACJ,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,QAAQ,CAAC;gBACrC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;aAClD;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChF,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,KAAK,CAAC,sBAAsB,CAAC;gBAC3B,GAAG,IAAI;gBACP,SAAS,EAAE,EAAE;gBACb,eAAe,EAAE,SAAS;aAC3B,CAAC,CAAC;YACH,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,IAAA,qBAAe,EAAC,UAAU,CAAC;gBACnC,IAAI,EAAE;oBACJ,EAAE,EAAE,IAAI,CAAC,MAAM;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;oBAC7B,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,SAAS;iBAClB;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,KAAkB,EAClB,MAAwB,EACxB,GAAW;IAEX,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,qBAAe,EAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,wDAAa,IAAI,GAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC;IAClD,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAChF,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAChF,CAAC;YACD,IAAI,QAAQ;gBAAE,MAAM;QACtB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;IACjD,MAAM,mBAAmB,GAAG,SAAS,EAAE,WAAW,IAAI,EAAE,CAAC;IAEzD,GAAG,CAAC,IAAI,CAAC,kBAAkB,MAAM,QAAQ,QAAQ,MAAM,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAc,EAAC,MAAM,EAAE,EAAE,EAAE,kBAAkB,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;KAChH,CAAQ,CAAC;IAEV,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,mBAAmB,IAAI,EAAE,CAAC,CAAC;IAEpF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC,2DAA2D,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACrF,KAAK,CAAC,sBAAsB,CAAC;YAC3B,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7B,QAAQ;YACR,SAAS,EAAE,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;YACvB,WAAW,EAAE,mBAAmB;YAChC,eAAe,EAAE,SAAS;SAC3B,CAAC,CAAC;QACH,MAAM,IAAI,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,KAAK,CAAC,sBAAsB,CAAC;QAC3B,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,QAAQ;QACR,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,WAAW,EAAE,mBAAmB;QAChC,eAAe,EAAE,QAAQ;KAC1B,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,sBAAsB,EAAG,CAAC;AACzC,CAAC;AAED,MAAa,oBAAqB,SAAQ,KAAK;IAC7B,MAAM,CAAS;IAC/B,YAAY,MAAc;QACxB,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAPD,oDAOC"}
@@ -34,6 +34,7 @@ export declare class HubServer {
34
34
  private loadAuthState;
35
35
  private saveAuthState;
36
36
  private embedChunksAsync;
37
+ private embedSkillAsync;
37
38
  private embedMemoryAsync;
38
39
  private handle;
39
40
  private notifyAdmins;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/hub/server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIzD,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAQF,qBAAa,SAAS;IAiBR,OAAO,CAAC,IAAI;IAhBxB,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,YAAY,CAAgH;IACpI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAU;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAM;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAM;IAC/C,OAAO,CAAC,WAAW,CAA6D;IAEhF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAiB;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAa;IAC9D,OAAO,CAAC,iBAAiB,CAAC,CAAiC;IAC3D,OAAO,CAAC,gBAAgB,CAAqB;gBAEzB,IAAI,EAAE,gBAAgB;IAM1C,OAAO,CAAC,cAAc;IAahB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAsDxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,OAAO,KAAK,IAAI,GAEf;IAED,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;YAcV,MAAM;IAunBpB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAoB;YAE5C,QAAQ;IAgBtB,OAAO,CAAC,IAAI;CAKb"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/hub/server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIzD,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAQF,qBAAa,SAAS;IAiBR,OAAO,CAAC,IAAI;IAhBxB,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,YAAY,CAAgH;IACpI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAU;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAM;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAM;IAC/C,OAAO,CAAC,WAAW,CAA6D;IAEhF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAiB;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAa;IAC9D,OAAO,CAAC,iBAAiB,CAAC,CAAiC;IAC3D,OAAO,CAAC,gBAAgB,CAAqB;gBAEzB,IAAI,EAAE,gBAAgB;IAM1C,OAAO,CAAC,cAAc;IAahB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAsDxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,OAAO,KAAK,IAAI,GAEf;IAED,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,gBAAgB;YAcV,MAAM;IAwtBpB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAoB;YAE5C,QAAQ;IAgBtB,OAAO,CAAC,IAAI;CAKb"}
@@ -173,6 +173,20 @@ class HubServer {
173
173
  this.opts.log.warn(`hub: embedding shared chunks failed: ${err}`);
174
174
  });
175
175
  }
176
+ embedSkillAsync(skillId, name, description, sourceUserId, sourceSkillId) {
177
+ const embedder = this.opts.embedder;
178
+ if (!embedder)
179
+ return;
180
+ const text = `${name}: ${description}`;
181
+ embedder.embed([text]).then((vectors) => {
182
+ if (vectors[0]) {
183
+ this.opts.store.upsertHubSkillEmbedding(skillId, Array.from(vectors[0]), sourceUserId, sourceSkillId);
184
+ this.opts.log.info(`hub: embedded shared skill ${skillId}`);
185
+ }
186
+ }).catch((err) => {
187
+ this.opts.log.warn(`hub: embedding shared skill failed: ${err}`);
188
+ });
189
+ }
176
190
  embedMemoryAsync(memoryId, summary, content) {
177
191
  const embedder = this.opts.embedder;
178
192
  if (!embedder)
@@ -207,8 +221,14 @@ class HubServer {
207
221
  || req.headers["x-client-ip"]?.trim()
208
222
  || req.headers["x-forwarded-for"]?.split(",")[0]?.trim()
209
223
  || req.socket.remoteAddress || "";
210
- const existingUsers = this.opts.store.listHubUsers();
211
- const existingUser = existingUsers.find(u => u.username === username);
224
+ const identityKey = typeof body.identityKey === "string" ? body.identityKey.trim() : "";
225
+ let existingUser = identityKey
226
+ ? this.userManager.findByIdentityKey(identityKey)
227
+ : null;
228
+ if (!existingUser) {
229
+ const existingUsers = this.opts.store.listHubUsers();
230
+ existingUser = existingUsers.find(u => u.username === username && u.status !== "left" && u.status !== "removed") ?? null;
231
+ }
212
232
  if (existingUser) {
213
233
  try {
214
234
  this.opts.store.updateHubUserActivity(existingUser.id, joinIp);
@@ -217,31 +237,45 @@ class HubServer {
217
237
  if (existingUser.status === "active") {
218
238
  const token = (0, auth_1.issueUserToken)({ userId: existingUser.id, username: existingUser.username, role: existingUser.role, status: "active" }, this.authSecret);
219
239
  this.userManager.approveUser(existingUser.id, token);
220
- return this.json(res, 200, { status: "active", userId: existingUser.id, userToken: token });
240
+ if (identityKey && !existingUser.identityKey) {
241
+ this.opts.store.upsertHubUser({ ...existingUser, identityKey });
242
+ }
243
+ return this.json(res, 200, { status: "active", userId: existingUser.id, userToken: token, identityKey: existingUser.identityKey || identityKey });
221
244
  }
222
245
  if (existingUser.status === "pending") {
223
246
  this.notifyAdmins("user_join_request", "user", username, "", { dedup: true });
224
- return this.json(res, 200, { status: "pending", userId: existingUser.id });
247
+ return this.json(res, 200, { status: "pending", userId: existingUser.id, identityKey: existingUser.identityKey || identityKey });
225
248
  }
226
249
  if (existingUser.status === "rejected") {
227
250
  if (body.reapply === true) {
228
251
  this.userManager.resetToPending(existingUser.id);
229
252
  this.notifyAdmins("user_join_request", "user", username, "");
230
253
  this.opts.log.info(`Hub: rejected user "${username}" (${existingUser.id}) re-applied, reset to pending`);
231
- return this.json(res, 200, { status: "pending", userId: existingUser.id });
254
+ return this.json(res, 200, { status: "pending", userId: existingUser.id, identityKey: existingUser.identityKey || identityKey });
232
255
  }
233
256
  return this.json(res, 200, { status: "rejected", userId: existingUser.id });
234
257
  }
235
258
  if (existingUser.status === "removed") {
236
- this.userManager.resetToPending(existingUser.id);
237
- this.notifyAdmins("user_join_request", "user", username, "");
238
- this.opts.log.info(`Hub: removed user "${username}" (${existingUser.id}) re-applied, reset to pending`);
239
- return this.json(res, 200, { status: "pending", userId: existingUser.id });
259
+ this.userManager.rejoinUser(existingUser.id);
260
+ this.notifyAdmins("user_join_request", "user", username, "", { dedup: true });
261
+ this.opts.log.info(`Hub: removed user "${username}" (${existingUser.id}) re-applied via rejoin, reset to pending`);
262
+ return this.json(res, 200, { status: "pending", userId: existingUser.id, identityKey: existingUser.identityKey || identityKey });
263
+ }
264
+ if (existingUser.status === "left") {
265
+ this.userManager.rejoinUser(existingUser.id);
266
+ this.notifyAdmins("user_join_request", "user", username, "", { dedup: true });
267
+ this.opts.log.info(`Hub: left user "${username}" (${existingUser.id}) re-applied via rejoin, reset to pending`);
268
+ return this.json(res, 200, { status: "pending", userId: existingUser.id, identityKey: existingUser.identityKey || identityKey });
269
+ }
270
+ if (existingUser.status === "blocked") {
271
+ return this.json(res, 200, { status: "blocked", userId: existingUser.id });
240
272
  }
241
273
  }
274
+ const generatedIdentityKey = identityKey || (0, crypto_1.randomUUID)();
242
275
  const user = this.userManager.createPendingUser({
243
276
  username,
244
277
  deviceName: typeof body.deviceName === "string" ? body.deviceName : undefined,
278
+ identityKey: generatedIdentityKey,
245
279
  });
246
280
  try {
247
281
  this.opts.store.updateHubUserActivity(user.id, joinIp);
@@ -249,7 +283,7 @@ class HubServer {
249
283
  catch { /* best-effort */ }
250
284
  this.opts.log.info(`Hub: user "${username}" (${user.id}) registered as pending, awaiting admin approval`);
251
285
  this.notifyAdmins("user_join_request", "user", username, "");
252
- return this.json(res, 200, { status: "pending", userId: user.id });
286
+ return this.json(res, 200, { status: "pending", userId: user.id, identityKey: generatedIdentityKey });
253
287
  }
254
288
  if (req.method === "POST" && routePath === "/api/v1/hub/registration-status") {
255
289
  const body = await this.readJson(req);
@@ -268,6 +302,15 @@ class HubServer {
268
302
  if (user.status === "rejected") {
269
303
  return this.json(res, 200, { status: "rejected" });
270
304
  }
305
+ if (user.status === "blocked") {
306
+ return this.json(res, 200, { status: "blocked" });
307
+ }
308
+ if (user.status === "left") {
309
+ return this.json(res, 200, { status: "left" });
310
+ }
311
+ if (user.status === "removed") {
312
+ return this.json(res, 200, { status: "removed" });
313
+ }
271
314
  if (user.status === "active") {
272
315
  const token = (0, auth_1.issueUserToken)({ userId: user.id, username: user.username, role: user.role, status: user.status }, this.authSecret);
273
316
  return this.json(res, 200, { status: "active", userToken: token });
@@ -286,13 +329,10 @@ class HubServer {
286
329
  return this.json(res, 200, { ok: true });
287
330
  }
288
331
  if (req.method === "POST" && routePath === "/api/v1/hub/leave") {
289
- try {
290
- this.opts.store.updateHubUserActivity(auth.userId, "", 0);
291
- }
292
- catch { /* best-effort */ }
332
+ this.userManager.markUserLeft(auth.userId);
293
333
  this.knownOnlineUsers.delete(auth.userId);
294
334
  this.notifyAdmins("user_offline", "user", auth.username, auth.userId);
295
- this.opts.log.info(`Hub: user "${auth.username}" (${auth.userId}) left voluntarily`);
335
+ this.opts.log.info(`Hub: user "${auth.username}" (${auth.userId}) left voluntarily, status set to "left"`);
296
336
  return this.json(res, 200, { ok: true });
297
337
  }
298
338
  if (req.method === "GET" && routePath === "/api/v1/hub/me") {
@@ -330,12 +370,21 @@ class HubServer {
330
370
  if (auth.role !== "admin")
331
371
  return this.json(res, 403, { error: "forbidden" });
332
372
  const body = await this.readJson(req);
333
- const token = (0, auth_1.issueUserToken)({ userId: String(body.userId), username: String(body.username || ""), role: "member", status: "active" }, this.authSecret);
334
- const approved = this.userManager.approveUser(String(body.userId), token);
373
+ const userId = String(body.userId);
374
+ const username = String(body.username || "");
375
+ const token = (0, auth_1.issueUserToken)({ userId, username, role: "member", status: "active" }, this.authSecret);
376
+ const approved = this.userManager.approveUser(userId, token);
335
377
  if (!approved)
336
378
  return this.json(res, 404, { error: "not_found" });
337
379
  try {
338
- this.opts.store.updateHubUserActivity(String(body.userId), "");
380
+ this.opts.store.updateHubUserActivity(userId, "");
381
+ }
382
+ catch { /* best-effort */ }
383
+ try {
384
+ this.opts.store.insertHubNotification({
385
+ id: (0, crypto_1.randomUUID)(), userId, type: "membership_approved",
386
+ resource: "user", title: `Your request to join team "${this.teamName}" has been approved. Welcome!`,
387
+ });
339
388
  }
340
389
  catch { /* best-effort */ }
341
390
  return this.json(res, 200, { status: "active", token });
@@ -344,9 +393,17 @@ class HubServer {
344
393
  if (auth.role !== "admin")
345
394
  return this.json(res, 403, { error: "forbidden" });
346
395
  const body = await this.readJson(req);
347
- const rejected = this.userManager.rejectUser(String(body.userId));
396
+ const userId = String(body.userId);
397
+ const rejected = this.userManager.rejectUser(userId);
348
398
  if (!rejected)
349
399
  return this.json(res, 404, { error: "not_found" });
400
+ try {
401
+ this.opts.store.insertHubNotification({
402
+ id: (0, crypto_1.randomUUID)(), userId, type: "membership_rejected",
403
+ resource: "user", title: `Your request to join team "${this.teamName}" has been declined.`,
404
+ });
405
+ }
406
+ catch { /* best-effort */ }
350
407
  return this.json(res, 200, { status: "rejected" });
351
408
  }
352
409
  if (req.method === "GET" && routePath === "/api/v1/hub/admin/users") {
@@ -617,20 +674,73 @@ class HubServer {
617
674
  return this.json(res, 200, { hits, meta: { totalCandidates: hits.length, searchedGroups: [], includedPublic: true } });
618
675
  }
619
676
  if (req.method === "GET" && routePath === "/api/v1/hub/skills") {
620
- const hits = this.opts.store.searchHubSkills(String(url.searchParams.get("query") || ""), {
677
+ const skillQuery = String(url.searchParams.get("query") || "");
678
+ const skillMaxResults = Number(url.searchParams.get("maxResults") || 10);
679
+ const ftsSkillHits = this.opts.store.searchHubSkills(skillQuery, {
621
680
  userId: auth.userId,
622
- maxResults: Number(url.searchParams.get("maxResults") || 10),
623
- }).map(({ hit }) => ({
624
- skillId: hit.id,
625
- name: hit.name,
626
- description: hit.description,
627
- version: hit.version,
628
- visibility: hit.visibility,
629
- groupName: hit.group_name,
630
- ownerName: hit.owner_name || "unknown",
631
- ownerStatus: hit.owner_status || "",
632
- qualityScore: hit.quality_score,
633
- }));
681
+ maxResults: skillMaxResults * 2,
682
+ });
683
+ let mergedSkillIds;
684
+ if (this.opts.embedder && skillQuery) {
685
+ try {
686
+ const [queryVec] = await this.opts.embedder.embed([skillQuery]);
687
+ if (queryVec) {
688
+ const skillEmbs = this.opts.store.getVisibleHubSkillEmbeddings();
689
+ const cosineSim = (vec) => {
690
+ let dot = 0, nA = 0, nB = 0;
691
+ for (let i = 0; i < queryVec.length && i < vec.length; i++) {
692
+ dot += queryVec[i] * vec[i];
693
+ nA += queryVec[i] * queryVec[i];
694
+ nB += vec[i] * vec[i];
695
+ }
696
+ return nA > 0 && nB > 0 ? dot / (Math.sqrt(nA) * Math.sqrt(nB)) : 0;
697
+ };
698
+ const vecScored = skillEmbs
699
+ .map(e => ({ id: e.skillId, score: cosineSim(e.vector) }))
700
+ .filter(e => e.score > 0.3)
701
+ .sort((a, b) => b.score - a.score)
702
+ .slice(0, skillMaxResults * 2);
703
+ const K = 60;
704
+ const rrfScores = new Map();
705
+ ftsSkillHits.forEach(({ hit }, idx) => {
706
+ rrfScores.set(hit.id, (rrfScores.get(hit.id) ?? 0) + 1 / (K + idx + 1));
707
+ });
708
+ vecScored.forEach(({ id }, idx) => {
709
+ rrfScores.set(id, (rrfScores.get(id) ?? 0) + 1 / (K + idx + 1));
710
+ });
711
+ mergedSkillIds = [...rrfScores.entries()].sort((a, b) => b[1] - a[1]).slice(0, skillMaxResults).map(([id]) => id);
712
+ }
713
+ else {
714
+ mergedSkillIds = ftsSkillHits.slice(0, skillMaxResults).map(({ hit }) => hit.id);
715
+ }
716
+ }
717
+ catch {
718
+ mergedSkillIds = ftsSkillHits.slice(0, skillMaxResults).map(({ hit }) => hit.id);
719
+ }
720
+ }
721
+ else {
722
+ mergedSkillIds = ftsSkillHits.slice(0, skillMaxResults).map(({ hit }) => hit.id);
723
+ }
724
+ const ftsSkillMap = new Map(ftsSkillHits.map(({ hit }) => [hit.id, hit]));
725
+ const hits = mergedSkillIds.map(id => {
726
+ const hit = ftsSkillMap.get(id);
727
+ if (hit) {
728
+ return {
729
+ skillId: hit.id, name: hit.name, description: hit.description,
730
+ version: hit.version, visibility: hit.visibility, groupName: hit.group_name,
731
+ ownerName: hit.owner_name || "unknown", ownerStatus: hit.owner_status || "",
732
+ qualityScore: hit.quality_score,
733
+ };
734
+ }
735
+ const skill = this.opts.store.getHubSkillById(id);
736
+ if (!skill)
737
+ return null;
738
+ return {
739
+ skillId: skill.id, name: skill.name, description: skill.description,
740
+ version: skill.version, visibility: skill.visibility, groupName: "",
741
+ ownerName: "unknown", ownerStatus: "", qualityScore: skill.qualityScore,
742
+ };
743
+ }).filter(Boolean);
634
744
  return this.json(res, 200, { hits });
635
745
  }
636
746
  if (req.method === "POST" && routePath === "/api/v1/hub/skills/publish") {
@@ -656,6 +766,7 @@ class HubServer {
656
766
  createdAt: existing?.createdAt ?? Date.now(),
657
767
  updatedAt: Date.now(),
658
768
  });
769
+ this.embedSkillAsync(skillId, String(metadata.name || sourceSkillId), String(metadata.description || ""), auth.userId, sourceSkillId);
659
770
  if (!existing) {
660
771
  this.notifyAdmins("resource_shared", "skill", String(metadata.name || sourceSkillId), auth.userId);
661
772
  }