@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
package/dist/index.cjs CHANGED
@@ -10395,6 +10395,12 @@ var ShellTaskManager = class {
10395
10395
  tasks = /* @__PURE__ */ new Map();
10396
10396
  seq = 0;
10397
10397
  cleanupInstalled = false;
10398
+ /** 任务集合变化监听(server 用它推送,替代控制台的 5s 轮询) */
10399
+ listener = null;
10400
+ /** 注册变化监听(传 null 取消) */
10401
+ setListener(cb) {
10402
+ this.listener = cb;
10403
+ }
10398
10404
  /** 启动一个后台任务,立即返回快照(不等退出) */
10399
10405
  start(opts) {
10400
10406
  this.installCleanup();
@@ -10422,16 +10428,26 @@ var ShellTaskManager = class {
10422
10428
  this.tasks.set(id, task);
10423
10429
  child.stdout?.on("data", (d) => task.stdout.add(d.toString("utf-8")));
10424
10430
  child.stderr?.on("data", (d) => task.stderr.add(d.toString("utf-8")));
10425
- child.on("error", (err) => task.stderr.add(`[spawn error] ${err.message}
10426
- `));
10431
+ child.on("error", (err) => {
10432
+ task.stderr.add(`[spawn error] ${err.message}
10433
+ `);
10434
+ if (task.status === "running") {
10435
+ task.endedAt = Date.now();
10436
+ task.status = "exited";
10437
+ this._notify(task.scope);
10438
+ }
10439
+ });
10427
10440
  child.on("exit", (code, signal) => {
10428
10441
  task.exitCode = code;
10429
10442
  task.signal = signal;
10430
10443
  task.endedAt = Date.now();
10431
10444
  if (task.status !== "killed") task.status = "exited";
10445
+ this._notify(task.scope);
10432
10446
  });
10433
10447
  child.unref();
10434
- return this.snapshot(task);
10448
+ const snap = this.snapshot(task);
10449
+ this._notify(task.scope);
10450
+ return snap;
10435
10451
  }
10436
10452
  /** 读取任务输出与状态 */
10437
10453
  output(taskId) {
@@ -10450,6 +10466,7 @@ var ShellTaskManager = class {
10450
10466
  task.status = "killed";
10451
10467
  task.endedAt = Date.now();
10452
10468
  killTree(task.child.pid);
10469
+ this._notify(task.scope);
10453
10470
  }
10454
10471
  return this.snapshot(task);
10455
10472
  }
@@ -10469,6 +10486,33 @@ var ShellTaskManager = class {
10469
10486
  }
10470
10487
  }
10471
10488
  }
10489
+ /**
10490
+ * 通知订阅方「该归属下运行中的任务变了」。
10491
+ *
10492
+ * 只遍历内存任务表取字段,不调用 snapshot(后者会 join 两路 64KB 缓冲)。
10493
+ */
10494
+ _notify(scope) {
10495
+ const listener = this.listener;
10496
+ if (!listener) return;
10497
+ const tasks = [];
10498
+ for (const task of this.tasks.values()) {
10499
+ if (task.scope !== scope || task.status !== "running") continue;
10500
+ tasks.push({
10501
+ task_id: task.id,
10502
+ command: task.command,
10503
+ status: task.status,
10504
+ running: true,
10505
+ exit_code: task.exitCode,
10506
+ signal: task.signal,
10507
+ duration_ms: Date.now() - task.startedAt,
10508
+ started_at: task.startedAt
10509
+ });
10510
+ }
10511
+ try {
10512
+ listener(scope, tasks);
10513
+ } catch {
10514
+ }
10515
+ }
10472
10516
  snapshot(task) {
10473
10517
  return {
10474
10518
  task_id: task.id,