@zqagent/core 0.3.8 → 0.3.10

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 (45) 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.cjs.map +1 -1
  17. package/dist/internal/update/controller.js +1 -1
  18. package/dist/internal/update/controller.js.map +1 -1
  19. package/dist/internal/update/platform.cjs +1 -1
  20. package/dist/internal/update/platform.cjs.map +1 -1
  21. package/dist/internal/update/platform.js +1 -1
  22. package/dist/internal/update/platform.js.map +1 -1
  23. package/dist/tools/explore.cjs +47 -3
  24. package/dist/tools/explore.cjs.map +1 -1
  25. package/dist/tools/explore.js +47 -3
  26. package/dist/tools/explore.js.map +1 -1
  27. package/dist/tools/git.cjs +47 -3
  28. package/dist/tools/git.cjs.map +1 -1
  29. package/dist/tools/git.js +47 -3
  30. package/dist/tools/git.js.map +1 -1
  31. package/dist/tools/media.cjs +47 -3
  32. package/dist/tools/media.cjs.map +1 -1
  33. package/dist/tools/media.js +47 -3
  34. package/dist/tools/media.js.map +1 -1
  35. package/dist/tools/search.cjs +47 -3
  36. package/dist/tools/search.cjs.map +1 -1
  37. package/dist/tools/search.js +47 -3
  38. package/dist/tools/search.js.map +1 -1
  39. package/dist/tools/shell.cjs +54 -5
  40. package/dist/tools/shell.cjs.map +1 -1
  41. package/dist/tools/shell.d.cts +1 -1
  42. package/dist/tools/shell.d.ts +1 -1
  43. package/dist/tools/shell.js +52 -4
  44. package/dist/tools/shell.js.map +1 -1
  45. package/package.json +2 -2
@@ -4523,6 +4523,12 @@ var ShellTaskManager = class {
4523
4523
  tasks = /* @__PURE__ */ new Map();
4524
4524
  seq = 0;
4525
4525
  cleanupInstalled = false;
4526
+ /** 任务集合变化监听(server 用它推送,替代控制台的 5s 轮询) */
4527
+ listener = null;
4528
+ /** 注册变化监听(传 null 取消) */
4529
+ setListener(cb) {
4530
+ this.listener = cb;
4531
+ }
4526
4532
  /** 启动一个后台任务,立即返回快照(不等退出) */
4527
4533
  start(opts) {
4528
4534
  this.installCleanup();
@@ -4550,16 +4556,26 @@ var ShellTaskManager = class {
4550
4556
  this.tasks.set(id, task);
4551
4557
  child.stdout?.on("data", (d) => task.stdout.add(d.toString("utf-8")));
4552
4558
  child.stderr?.on("data", (d) => task.stderr.add(d.toString("utf-8")));
4553
- child.on("error", (err) => task.stderr.add(`[spawn error] ${err.message}
4554
- `));
4559
+ child.on("error", (err) => {
4560
+ task.stderr.add(`[spawn error] ${err.message}
4561
+ `);
4562
+ if (task.status === "running") {
4563
+ task.endedAt = Date.now();
4564
+ task.status = "exited";
4565
+ this._notify(task.scope);
4566
+ }
4567
+ });
4555
4568
  child.on("exit", (code, signal) => {
4556
4569
  task.exitCode = code;
4557
4570
  task.signal = signal;
4558
4571
  task.endedAt = Date.now();
4559
4572
  if (task.status !== "killed") task.status = "exited";
4573
+ this._notify(task.scope);
4560
4574
  });
4561
4575
  child.unref();
4562
- return this.snapshot(task);
4576
+ const snap = this.snapshot(task);
4577
+ this._notify(task.scope);
4578
+ return snap;
4563
4579
  }
4564
4580
  /** 读取任务输出与状态 */
4565
4581
  output(taskId) {
@@ -4578,6 +4594,7 @@ var ShellTaskManager = class {
4578
4594
  task.status = "killed";
4579
4595
  task.endedAt = Date.now();
4580
4596
  killTree(task.child.pid);
4597
+ this._notify(task.scope);
4581
4598
  }
4582
4599
  return this.snapshot(task);
4583
4600
  }
@@ -4597,6 +4614,33 @@ var ShellTaskManager = class {
4597
4614
  }
4598
4615
  }
4599
4616
  }
4617
+ /**
4618
+ * 通知订阅方「该归属下运行中的任务变了」。
4619
+ *
4620
+ * 只遍历内存任务表取字段,不调用 snapshot(后者会 join 两路 64KB 缓冲)。
4621
+ */
4622
+ _notify(scope) {
4623
+ const listener = this.listener;
4624
+ if (!listener) return;
4625
+ const tasks = [];
4626
+ for (const task of this.tasks.values()) {
4627
+ if (task.scope !== scope || task.status !== "running") continue;
4628
+ tasks.push({
4629
+ task_id: task.id,
4630
+ command: task.command,
4631
+ status: task.status,
4632
+ running: true,
4633
+ exit_code: task.exitCode,
4634
+ signal: task.signal,
4635
+ duration_ms: Date.now() - task.startedAt,
4636
+ started_at: task.startedAt
4637
+ });
4638
+ }
4639
+ try {
4640
+ listener(scope, tasks);
4641
+ } catch {
4642
+ }
4643
+ }
4600
4644
  snapshot(task) {
4601
4645
  return {
4602
4646
  task_id: task.id,