@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.
- package/dist/index.cjs +47 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +47 -3
- package/dist/index.js.map +1 -1
- package/dist/internal/tools/git.cjs +47 -3
- package/dist/internal/tools/git.cjs.map +1 -1
- package/dist/internal/tools/git.js +47 -3
- package/dist/internal/tools/git.js.map +1 -1
- package/dist/internal/tools/shell.cjs +54 -5
- package/dist/internal/tools/shell.cjs.map +1 -1
- package/dist/internal/tools/shell.d.cts +26 -1
- package/dist/internal/tools/shell.d.ts +26 -1
- package/dist/internal/tools/shell.js +52 -4
- package/dist/internal/tools/shell.js.map +1 -1
- package/dist/internal/update/controller.cjs +1 -1
- package/dist/internal/update/controller.js +1 -1
- package/dist/internal/update/platform.cjs +1 -1
- package/dist/internal/update/platform.js +1 -1
- package/dist/tools/explore.cjs +47 -3
- package/dist/tools/explore.cjs.map +1 -1
- package/dist/tools/explore.js +47 -3
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/git.cjs +47 -3
- package/dist/tools/git.cjs.map +1 -1
- package/dist/tools/git.js +47 -3
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/media.cjs +47 -3
- package/dist/tools/media.cjs.map +1 -1
- package/dist/tools/media.js +47 -3
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/search.cjs +47 -3
- package/dist/tools/search.cjs.map +1 -1
- package/dist/tools/search.js +47 -3
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/shell.cjs +54 -5
- package/dist/tools/shell.cjs.map +1 -1
- package/dist/tools/shell.d.cts +1 -1
- package/dist/tools/shell.d.ts +1 -1
- package/dist/tools/shell.js +52 -4
- package/dist/tools/shell.js.map +1 -1
- package/package.json +2 -2
package/dist/tools/media.js
CHANGED
|
@@ -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) =>
|
|
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
|
-
|
|
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,
|