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

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 (67) hide show
  1. package/dist/client/connector.d.ts +1 -0
  2. package/dist/client/connector.d.ts.map +1 -1
  3. package/dist/client/connector.js +37 -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 +122 -28
  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/recall/engine.d.ts.map +1 -1
  14. package/dist/recall/engine.js +2 -0
  15. package/dist/recall/engine.js.map +1 -1
  16. package/dist/sharing/types.d.ts +1 -1
  17. package/dist/sharing/types.d.ts.map +1 -1
  18. package/dist/skill/evolver.d.ts +2 -0
  19. package/dist/skill/evolver.d.ts.map +1 -1
  20. package/dist/skill/evolver.js +56 -5
  21. package/dist/skill/evolver.js.map +1 -1
  22. package/dist/skill/generator.d.ts +2 -0
  23. package/dist/skill/generator.d.ts.map +1 -1
  24. package/dist/skill/generator.js +45 -3
  25. package/dist/skill/generator.js.map +1 -1
  26. package/dist/skill/installer.d.ts +26 -0
  27. package/dist/skill/installer.d.ts.map +1 -1
  28. package/dist/skill/installer.js +80 -4
  29. package/dist/skill/installer.js.map +1 -1
  30. package/dist/skill/upgrader.d.ts +2 -0
  31. package/dist/skill/upgrader.d.ts.map +1 -1
  32. package/dist/skill/upgrader.js +139 -1
  33. package/dist/skill/upgrader.js.map +1 -1
  34. package/dist/skill/validator.d.ts +3 -0
  35. package/dist/skill/validator.d.ts.map +1 -1
  36. package/dist/skill/validator.js +75 -0
  37. package/dist/skill/validator.js.map +1 -1
  38. package/dist/storage/sqlite.d.ts +15 -0
  39. package/dist/storage/sqlite.d.ts.map +1 -1
  40. package/dist/storage/sqlite.js +91 -9
  41. package/dist/storage/sqlite.js.map +1 -1
  42. package/dist/types.d.ts +10 -0
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/types.js +4 -0
  45. package/dist/types.js.map +1 -1
  46. package/dist/viewer/html.d.ts.map +1 -1
  47. package/dist/viewer/html.js +44 -23
  48. package/dist/viewer/html.js.map +1 -1
  49. package/dist/viewer/server.d.ts.map +1 -1
  50. package/dist/viewer/server.js +35 -15
  51. package/dist/viewer/server.js.map +1 -1
  52. package/index.ts +316 -13
  53. package/package.json +1 -1
  54. package/src/client/connector.ts +41 -8
  55. package/src/hub/server.ts +123 -27
  56. package/src/hub/user-manager.ts +42 -6
  57. package/src/recall/engine.ts +2 -0
  58. package/src/sharing/types.ts +1 -1
  59. package/src/skill/evolver.ts +58 -6
  60. package/src/skill/generator.ts +44 -5
  61. package/src/skill/installer.ts +107 -4
  62. package/src/skill/upgrader.ts +139 -1
  63. package/src/skill/validator.ts +79 -0
  64. package/src/storage/sqlite.ts +105 -9
  65. package/src/types.ts +11 -0
  66. package/src/viewer/html.ts +44 -23
  67. package/src/viewer/server.ts +35 -15
@@ -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;
@@ -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;KAC7B,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,CA2HvG;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 {
@@ -200,7 +215,11 @@ async function getHubStatus(store, config) {
200
215
  catch (err) {
201
216
  const is401 = typeof err?.message === "string" && err.message.includes("(401)");
202
217
  if (is401 && conn) {
203
- store.clearClientHubConnection();
218
+ store.setClientHubConnection({
219
+ ...conn,
220
+ userToken: "",
221
+ lastKnownStatus: "removed",
222
+ });
204
223
  return {
205
224
  connected: false,
206
225
  hubUrl: (0, hub_1.normalizeHubUrl)(hubAddress),
@@ -240,11 +259,14 @@ async function autoJoinHub(store, config, log) {
240
259
  break;
241
260
  }
242
261
  }
262
+ const persisted = store.getClientHubConnection();
263
+ const existingIdentityKey = persisted?.identityKey || "";
243
264
  log.info(`Joining Hub at ${hubUrl} as "${username}"...`);
244
265
  const result = await (0, hub_1.hubRequestJson)(hubUrl, "", "/api/v1/hub/join", {
245
266
  method: "POST",
246
- body: JSON.stringify({ teamToken, username, deviceName: hostname, clientIp }),
267
+ body: JSON.stringify({ teamToken, username, deviceName: hostname, clientIp, identityKey: existingIdentityKey }),
247
268
  });
269
+ const returnedIdentityKey = String(result.identityKey || existingIdentityKey || "");
248
270
  if (result.status === "pending") {
249
271
  log.info(`Join request submitted, awaiting admin approval. userId=${result.userId}`);
250
272
  store.setClientHubConnection({
@@ -254,12 +276,17 @@ async function autoJoinHub(store, config, log) {
254
276
  userToken: "",
255
277
  role: "member",
256
278
  connectedAt: Date.now(),
279
+ identityKey: returnedIdentityKey,
280
+ lastKnownStatus: "pending",
257
281
  });
258
282
  throw new PendingApprovalError(result.userId);
259
283
  }
260
284
  if (result.status === "rejected") {
261
285
  throw new Error(`Join request was rejected by the Hub admin.`);
262
286
  }
287
+ if (result.status === "blocked") {
288
+ throw new Error(`Your account has been blocked by the Hub admin.`);
289
+ }
263
290
  if (!result.userToken) {
264
291
  throw new Error(`Hub join failed: ${JSON.stringify(result)}`);
265
292
  }
@@ -271,6 +298,8 @@ async function autoJoinHub(store, config, log) {
271
298
  userToken: result.userToken,
272
299
  role: "member",
273
300
  connectedAt: Date.now(),
301
+ identityKey: returnedIdentityKey,
302
+ lastKnownStatus: "active",
274
303
  });
275
304
  return store.getClientHubConnection();
276
305
  }
@@ -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":"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"}
@@ -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;IAysBpB,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") {
@@ -617,20 +657,73 @@ class HubServer {
617
657
  return this.json(res, 200, { hits, meta: { totalCandidates: hits.length, searchedGroups: [], includedPublic: true } });
618
658
  }
619
659
  if (req.method === "GET" && routePath === "/api/v1/hub/skills") {
620
- const hits = this.opts.store.searchHubSkills(String(url.searchParams.get("query") || ""), {
660
+ const skillQuery = String(url.searchParams.get("query") || "");
661
+ const skillMaxResults = Number(url.searchParams.get("maxResults") || 10);
662
+ const ftsSkillHits = this.opts.store.searchHubSkills(skillQuery, {
621
663
  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
- }));
664
+ maxResults: skillMaxResults * 2,
665
+ });
666
+ let mergedSkillIds;
667
+ if (this.opts.embedder && skillQuery) {
668
+ try {
669
+ const [queryVec] = await this.opts.embedder.embed([skillQuery]);
670
+ if (queryVec) {
671
+ const skillEmbs = this.opts.store.getVisibleHubSkillEmbeddings();
672
+ const cosineSim = (vec) => {
673
+ let dot = 0, nA = 0, nB = 0;
674
+ for (let i = 0; i < queryVec.length && i < vec.length; i++) {
675
+ dot += queryVec[i] * vec[i];
676
+ nA += queryVec[i] * queryVec[i];
677
+ nB += vec[i] * vec[i];
678
+ }
679
+ return nA > 0 && nB > 0 ? dot / (Math.sqrt(nA) * Math.sqrt(nB)) : 0;
680
+ };
681
+ const vecScored = skillEmbs
682
+ .map(e => ({ id: e.skillId, score: cosineSim(e.vector) }))
683
+ .filter(e => e.score > 0.3)
684
+ .sort((a, b) => b.score - a.score)
685
+ .slice(0, skillMaxResults * 2);
686
+ const K = 60;
687
+ const rrfScores = new Map();
688
+ ftsSkillHits.forEach(({ hit }, idx) => {
689
+ rrfScores.set(hit.id, (rrfScores.get(hit.id) ?? 0) + 1 / (K + idx + 1));
690
+ });
691
+ vecScored.forEach(({ id }, idx) => {
692
+ rrfScores.set(id, (rrfScores.get(id) ?? 0) + 1 / (K + idx + 1));
693
+ });
694
+ mergedSkillIds = [...rrfScores.entries()].sort((a, b) => b[1] - a[1]).slice(0, skillMaxResults).map(([id]) => id);
695
+ }
696
+ else {
697
+ mergedSkillIds = ftsSkillHits.slice(0, skillMaxResults).map(({ hit }) => hit.id);
698
+ }
699
+ }
700
+ catch {
701
+ mergedSkillIds = ftsSkillHits.slice(0, skillMaxResults).map(({ hit }) => hit.id);
702
+ }
703
+ }
704
+ else {
705
+ mergedSkillIds = ftsSkillHits.slice(0, skillMaxResults).map(({ hit }) => hit.id);
706
+ }
707
+ const ftsSkillMap = new Map(ftsSkillHits.map(({ hit }) => [hit.id, hit]));
708
+ const hits = mergedSkillIds.map(id => {
709
+ const hit = ftsSkillMap.get(id);
710
+ if (hit) {
711
+ return {
712
+ skillId: hit.id, name: hit.name, description: hit.description,
713
+ version: hit.version, visibility: hit.visibility, groupName: hit.group_name,
714
+ ownerName: hit.owner_name || "unknown", ownerStatus: hit.owner_status || "",
715
+ qualityScore: hit.quality_score,
716
+ };
717
+ }
718
+ const skill = this.opts.store.getHubSkillById(id);
719
+ if (!skill)
720
+ return null;
721
+ return {
722
+ skillId: skill.id, name: skill.name, description: skill.description,
723
+ version: skill.version, visibility: skill.visibility, groupName: "",
724
+ ownerName: "unknown", ownerStatus: "", qualityScore: skill.qualityScore,
725
+ };
726
+ }).filter(Boolean);
634
727
  return this.json(res, 200, { hits });
635
728
  }
636
729
  if (req.method === "POST" && routePath === "/api/v1/hub/skills/publish") {
@@ -656,6 +749,7 @@ class HubServer {
656
749
  createdAt: existing?.createdAt ?? Date.now(),
657
750
  updatedAt: Date.now(),
658
751
  });
752
+ this.embedSkillAsync(skillId, String(metadata.name || sourceSkillId), String(metadata.description || ""), auth.userId, sourceSkillId);
659
753
  if (!existing) {
660
754
  this.notifyAdmins("resource_shared", "skill", String(metadata.name || sourceSkillId), auth.userId);
661
755
  }