@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
package/dist/index.js CHANGED
@@ -10272,6 +10272,12 @@ var ShellTaskManager = class {
10272
10272
  tasks = /* @__PURE__ */ new Map();
10273
10273
  seq = 0;
10274
10274
  cleanupInstalled = false;
10275
+ /** 任务集合变化监听(server 用它推送,替代控制台的 5s 轮询) */
10276
+ listener = null;
10277
+ /** 注册变化监听(传 null 取消) */
10278
+ setListener(cb) {
10279
+ this.listener = cb;
10280
+ }
10275
10281
  /** 启动一个后台任务,立即返回快照(不等退出) */
10276
10282
  start(opts) {
10277
10283
  this.installCleanup();
@@ -10299,16 +10305,26 @@ var ShellTaskManager = class {
10299
10305
  this.tasks.set(id, task);
10300
10306
  child.stdout?.on("data", (d) => task.stdout.add(d.toString("utf-8")));
10301
10307
  child.stderr?.on("data", (d) => task.stderr.add(d.toString("utf-8")));
10302
- child.on("error", (err) => task.stderr.add(`[spawn error] ${err.message}
10303
- `));
10308
+ child.on("error", (err) => {
10309
+ task.stderr.add(`[spawn error] ${err.message}
10310
+ `);
10311
+ if (task.status === "running") {
10312
+ task.endedAt = Date.now();
10313
+ task.status = "exited";
10314
+ this._notify(task.scope);
10315
+ }
10316
+ });
10304
10317
  child.on("exit", (code, signal) => {
10305
10318
  task.exitCode = code;
10306
10319
  task.signal = signal;
10307
10320
  task.endedAt = Date.now();
10308
10321
  if (task.status !== "killed") task.status = "exited";
10322
+ this._notify(task.scope);
10309
10323
  });
10310
10324
  child.unref();
10311
- return this.snapshot(task);
10325
+ const snap = this.snapshot(task);
10326
+ this._notify(task.scope);
10327
+ return snap;
10312
10328
  }
10313
10329
  /** 读取任务输出与状态 */
10314
10330
  output(taskId) {
@@ -10327,6 +10343,7 @@ var ShellTaskManager = class {
10327
10343
  task.status = "killed";
10328
10344
  task.endedAt = Date.now();
10329
10345
  killTree(task.child.pid);
10346
+ this._notify(task.scope);
10330
10347
  }
10331
10348
  return this.snapshot(task);
10332
10349
  }
@@ -10346,6 +10363,33 @@ var ShellTaskManager = class {
10346
10363
  }
10347
10364
  }
10348
10365
  }
10366
+ /**
10367
+ * 通知订阅方「该归属下运行中的任务变了」。
10368
+ *
10369
+ * 只遍历内存任务表取字段,不调用 snapshot(后者会 join 两路 64KB 缓冲)。
10370
+ */
10371
+ _notify(scope) {
10372
+ const listener = this.listener;
10373
+ if (!listener) return;
10374
+ const tasks = [];
10375
+ for (const task of this.tasks.values()) {
10376
+ if (task.scope !== scope || task.status !== "running") continue;
10377
+ tasks.push({
10378
+ task_id: task.id,
10379
+ command: task.command,
10380
+ status: task.status,
10381
+ running: true,
10382
+ exit_code: task.exitCode,
10383
+ signal: task.signal,
10384
+ duration_ms: Date.now() - task.startedAt,
10385
+ started_at: task.startedAt
10386
+ });
10387
+ }
10388
+ try {
10389
+ listener(scope, tasks);
10390
+ } catch {
10391
+ }
10392
+ }
10349
10393
  snapshot(task) {
10350
10394
  return {
10351
10395
  task_id: task.id,