@zqagent/core 0.3.7 → 0.3.9

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 (41) hide show
  1. package/dist/index.cjs +47 -3
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +47 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/internal/tools/git.cjs +47 -3
  6. package/dist/internal/tools/git.cjs.map +1 -1
  7. package/dist/internal/tools/git.js +47 -3
  8. package/dist/internal/tools/git.js.map +1 -1
  9. package/dist/internal/tools/shell.cjs +54 -5
  10. package/dist/internal/tools/shell.cjs.map +1 -1
  11. package/dist/internal/tools/shell.d.cts +26 -1
  12. package/dist/internal/tools/shell.d.ts +26 -1
  13. package/dist/internal/tools/shell.js +52 -4
  14. package/dist/internal/tools/shell.js.map +1 -1
  15. package/dist/internal/update/controller.cjs +1 -1
  16. package/dist/internal/update/controller.js +1 -1
  17. package/dist/internal/update/platform.cjs +1 -1
  18. package/dist/internal/update/platform.js +1 -1
  19. package/dist/tools/explore.cjs +47 -3
  20. package/dist/tools/explore.cjs.map +1 -1
  21. package/dist/tools/explore.js +47 -3
  22. package/dist/tools/explore.js.map +1 -1
  23. package/dist/tools/git.cjs +47 -3
  24. package/dist/tools/git.cjs.map +1 -1
  25. package/dist/tools/git.js +47 -3
  26. package/dist/tools/git.js.map +1 -1
  27. package/dist/tools/media.cjs +47 -3
  28. package/dist/tools/media.cjs.map +1 -1
  29. package/dist/tools/media.js +47 -3
  30. package/dist/tools/media.js.map +1 -1
  31. package/dist/tools/search.cjs +47 -3
  32. package/dist/tools/search.cjs.map +1 -1
  33. package/dist/tools/search.js +47 -3
  34. package/dist/tools/search.js.map +1 -1
  35. package/dist/tools/shell.cjs +54 -5
  36. package/dist/tools/shell.cjs.map +1 -1
  37. package/dist/tools/shell.d.cts +1 -1
  38. package/dist/tools/shell.d.ts +1 -1
  39. package/dist/tools/shell.js +52 -4
  40. package/dist/tools/shell.js.map +1 -1
  41. package/package.json +2 -2
@@ -225,6 +225,12 @@ var ShellTaskManager = class {
225
225
  tasks = /* @__PURE__ */ new Map();
226
226
  seq = 0;
227
227
  cleanupInstalled = false;
228
+ /** 任务集合变化监听(server 用它推送,替代控制台的 5s 轮询) */
229
+ listener = null;
230
+ /** 注册变化监听(传 null 取消) */
231
+ setListener(cb) {
232
+ this.listener = cb;
233
+ }
228
234
  /** 启动一个后台任务,立即返回快照(不等退出) */
229
235
  start(opts) {
230
236
  this.installCleanup();
@@ -252,16 +258,26 @@ var ShellTaskManager = class {
252
258
  this.tasks.set(id, task);
253
259
  child.stdout?.on("data", (d) => task.stdout.add(d.toString("utf-8")));
254
260
  child.stderr?.on("data", (d) => task.stderr.add(d.toString("utf-8")));
255
- child.on("error", (err) => task.stderr.add(`[spawn error] ${err.message}
256
- `));
261
+ child.on("error", (err) => {
262
+ task.stderr.add(`[spawn error] ${err.message}
263
+ `);
264
+ if (task.status === "running") {
265
+ task.endedAt = Date.now();
266
+ task.status = "exited";
267
+ this._notify(task.scope);
268
+ }
269
+ });
257
270
  child.on("exit", (code, signal) => {
258
271
  task.exitCode = code;
259
272
  task.signal = signal;
260
273
  task.endedAt = Date.now();
261
274
  if (task.status !== "killed") task.status = "exited";
275
+ this._notify(task.scope);
262
276
  });
263
277
  child.unref();
264
- return this.snapshot(task);
278
+ const snap = this.snapshot(task);
279
+ this._notify(task.scope);
280
+ return snap;
265
281
  }
266
282
  /** 读取任务输出与状态 */
267
283
  output(taskId) {
@@ -280,6 +296,7 @@ var ShellTaskManager = class {
280
296
  task.status = "killed";
281
297
  task.endedAt = Date.now();
282
298
  killTree(task.child.pid);
299
+ this._notify(task.scope);
283
300
  }
284
301
  return this.snapshot(task);
285
302
  }
@@ -299,6 +316,33 @@ var ShellTaskManager = class {
299
316
  }
300
317
  }
301
318
  }
319
+ /**
320
+ * 通知订阅方「该归属下运行中的任务变了」。
321
+ *
322
+ * 只遍历内存任务表取字段,不调用 snapshot(后者会 join 两路 64KB 缓冲)。
323
+ */
324
+ _notify(scope) {
325
+ const listener = this.listener;
326
+ if (!listener) return;
327
+ const tasks = [];
328
+ for (const task of this.tasks.values()) {
329
+ if (task.scope !== scope || task.status !== "running") continue;
330
+ tasks.push({
331
+ task_id: task.id,
332
+ command: task.command,
333
+ status: task.status,
334
+ running: true,
335
+ exit_code: task.exitCode,
336
+ signal: task.signal,
337
+ duration_ms: Date.now() - task.startedAt,
338
+ started_at: task.startedAt
339
+ });
340
+ }
341
+ try {
342
+ listener(scope, tasks);
343
+ } catch {
344
+ }
345
+ }
302
346
  snapshot(task) {
303
347
  return {
304
348
  task_id: task.id,