@zqagent/core 0.3.8 → 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
@@ -4494,6 +4494,12 @@ var ShellTaskManager = class {
4494
4494
  tasks = /* @__PURE__ */ new Map();
4495
4495
  seq = 0;
4496
4496
  cleanupInstalled = false;
4497
+ /** 任务集合变化监听(server 用它推送,替代控制台的 5s 轮询) */
4498
+ listener = null;
4499
+ /** 注册变化监听(传 null 取消) */
4500
+ setListener(cb) {
4501
+ this.listener = cb;
4502
+ }
4497
4503
  /** 启动一个后台任务,立即返回快照(不等退出) */
4498
4504
  start(opts) {
4499
4505
  this.installCleanup();
@@ -4521,16 +4527,26 @@ var ShellTaskManager = class {
4521
4527
  this.tasks.set(id, task);
4522
4528
  child.stdout?.on("data", (d) => task.stdout.add(d.toString("utf-8")));
4523
4529
  child.stderr?.on("data", (d) => task.stderr.add(d.toString("utf-8")));
4524
- child.on("error", (err) => task.stderr.add(`[spawn error] ${err.message}
4525
- `));
4530
+ child.on("error", (err) => {
4531
+ task.stderr.add(`[spawn error] ${err.message}
4532
+ `);
4533
+ if (task.status === "running") {
4534
+ task.endedAt = Date.now();
4535
+ task.status = "exited";
4536
+ this._notify(task.scope);
4537
+ }
4538
+ });
4526
4539
  child.on("exit", (code, signal) => {
4527
4540
  task.exitCode = code;
4528
4541
  task.signal = signal;
4529
4542
  task.endedAt = Date.now();
4530
4543
  if (task.status !== "killed") task.status = "exited";
4544
+ this._notify(task.scope);
4531
4545
  });
4532
4546
  child.unref();
4533
- return this.snapshot(task);
4547
+ const snap = this.snapshot(task);
4548
+ this._notify(task.scope);
4549
+ return snap;
4534
4550
  }
4535
4551
  /** 读取任务输出与状态 */
4536
4552
  output(taskId) {
@@ -4549,6 +4565,7 @@ var ShellTaskManager = class {
4549
4565
  task.status = "killed";
4550
4566
  task.endedAt = Date.now();
4551
4567
  killTree(task.child.pid);
4568
+ this._notify(task.scope);
4552
4569
  }
4553
4570
  return this.snapshot(task);
4554
4571
  }
@@ -4568,6 +4585,33 @@ var ShellTaskManager = class {
4568
4585
  }
4569
4586
  }
4570
4587
  }
4588
+ /**
4589
+ * 通知订阅方「该归属下运行中的任务变了」。
4590
+ *
4591
+ * 只遍历内存任务表取字段,不调用 snapshot(后者会 join 两路 64KB 缓冲)。
4592
+ */
4593
+ _notify(scope) {
4594
+ const listener = this.listener;
4595
+ if (!listener) return;
4596
+ const tasks = [];
4597
+ for (const task of this.tasks.values()) {
4598
+ if (task.scope !== scope || task.status !== "running") continue;
4599
+ tasks.push({
4600
+ task_id: task.id,
4601
+ command: task.command,
4602
+ status: task.status,
4603
+ running: true,
4604
+ exit_code: task.exitCode,
4605
+ signal: task.signal,
4606
+ duration_ms: Date.now() - task.startedAt,
4607
+ started_at: task.startedAt
4608
+ });
4609
+ }
4610
+ try {
4611
+ listener(scope, tasks);
4612
+ } catch {
4613
+ }
4614
+ }
4571
4615
  snapshot(task) {
4572
4616
  return {
4573
4617
  task_id: task.id,