@web-auto/webauto 0.1.15 → 0.1.16

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.
@@ -2870,10 +2870,6 @@ function renderTasksPanel(root, ctx2) {
2870
2870
  }
2871
2871
  async function saveTask(runImmediately = false) {
2872
2872
  const data = collectFormData();
2873
- if (runImmediately && data.scheduleMode === "immediate") {
2874
- await runWithoutSave();
2875
- return;
2876
- }
2877
2873
  saveBtn.disabled = true;
2878
2874
  runBtn.disabled = true;
2879
2875
  runEphemeralBtn.disabled = true;
@@ -3212,6 +3208,7 @@ function renderDashboard(root, ctx2) {
3212
3208
  let stoppedAt = null;
3213
3209
  let elapsedTimer = null;
3214
3210
  let statePollTimer = null;
3211
+ let accountLabelPollTimer = null;
3215
3212
  let unsubscribeState = null;
3216
3213
  let unsubscribeCmd = null;
3217
3214
  const contextRun = ctx2?.xhsCurrentRun && typeof ctx2.xhsCurrentRun === "object" ? ctx2.xhsCurrentRun : null;
@@ -3225,6 +3222,10 @@ function renderDashboard(root, ctx2) {
3225
3222
  const maxLogs = 500;
3226
3223
  const maxRecentErrors = 8;
3227
3224
  const maxLikedLinks = 30;
3225
+ const accountLabelByProfile = /* @__PURE__ */ new Map();
3226
+ let accountLabelRefreshInFlight = false;
3227
+ let accountLabelRefreshedAt = 0;
3228
+ const accountLabelRefreshTtlMs = 15e3;
3228
3229
  const initialTaskId = String(contextRun?.taskId || ctx2?.activeTaskConfigId || "").trim();
3229
3230
  if (initialTaskId) {
3230
3231
  taskConfigId.textContent = initialTaskId;
@@ -3241,14 +3242,49 @@ function renderDashboard(root, ctx2) {
3241
3242
  const text = String(value ?? "").trim();
3242
3243
  return text.length > 0 && text !== "-";
3243
3244
  };
3245
+ const resolveAccountLabel = (profileIdLike) => {
3246
+ const profileId = String(profileIdLike || "").trim();
3247
+ if (!profileId) return "-";
3248
+ return accountLabelByProfile.get(profileId) || profileId;
3249
+ };
3250
+ const applyAccountLabel = (profileIdLike) => {
3251
+ const profileId = String(profileIdLike || "").trim();
3252
+ if (!profileId) return;
3253
+ activeProfileId = profileId;
3254
+ taskAccount.textContent = resolveAccountLabel(profileId);
3255
+ if (!accountLabelByProfile.has(profileId)) {
3256
+ void refreshAccountLabels(true);
3257
+ }
3258
+ };
3259
+ async function refreshAccountLabels(force = false) {
3260
+ if (accountLabelRefreshInFlight) return;
3261
+ if (!force && Date.now() - accountLabelRefreshedAt < accountLabelRefreshTtlMs) return;
3262
+ if (typeof ctx2.api?.cmdRunJson !== "function") return;
3263
+ if (typeof ctx2.api?.pathJoin !== "function") return;
3264
+ accountLabelRefreshInFlight = true;
3265
+ try {
3266
+ const rows = await listAccountProfiles(ctx2.api, { platform: "xiaohongshu" });
3267
+ accountLabelByProfile.clear();
3268
+ for (const row of rows) {
3269
+ const profileId = String(row?.profileId || "").trim();
3270
+ if (!profileId) continue;
3271
+ const label = String(row?.alias || row?.name || profileId).trim() || profileId;
3272
+ accountLabelByProfile.set(profileId, label);
3273
+ }
3274
+ accountLabelRefreshedAt = Date.now();
3275
+ if (activeProfileId) {
3276
+ taskAccount.textContent = resolveAccountLabel(activeProfileId);
3277
+ }
3278
+ } catch {
3279
+ } finally {
3280
+ accountLabelRefreshInFlight = false;
3281
+ }
3282
+ }
3244
3283
  if (contextRun) {
3245
3284
  if (hasRenderableValue(contextRun.keyword)) taskKeyword.textContent = String(contextRun.keyword);
3246
3285
  if (Number(contextRun.target) > 0) taskTarget.textContent = String(Number(contextRun.target));
3247
3286
  if (hasRenderableValue(contextRun.profileId)) {
3248
- const aliases = ctx2.api?.settings?.profileAliases || {};
3249
- const profileId = String(contextRun.profileId);
3250
- taskAccount.textContent = aliases[profileId] || profileId;
3251
- activeProfileId = profileId;
3287
+ applyAccountLabel(contextRun.profileId);
3252
3288
  }
3253
3289
  if (hasRenderableValue(contextRun.taskId)) taskConfigId.textContent = String(contextRun.taskId);
3254
3290
  const startedAtTs = Date.parse(String(contextRun.startedAt || ""));
@@ -3454,6 +3490,18 @@ function renderDashboard(root, ctx2) {
3454
3490
  clearInterval(statePollTimer);
3455
3491
  statePollTimer = null;
3456
3492
  }
3493
+ function startAccountLabelPoll() {
3494
+ if (accountLabelPollTimer) return;
3495
+ accountLabelPollTimer = setInterval(() => {
3496
+ if (paused) return;
3497
+ void refreshAccountLabels(false);
3498
+ }, 3e4);
3499
+ }
3500
+ function stopAccountLabelPoll() {
3501
+ if (!accountLabelPollTimer) return;
3502
+ clearInterval(accountLabelPollTimer);
3503
+ accountLabelPollTimer = null;
3504
+ }
3457
3505
  function addLog(line, type = "info") {
3458
3506
  const ts = (/* @__PURE__ */ new Date()).toLocaleTimeString("zh-CN", { hour12: false });
3459
3507
  const logLine = createEl("div", { className: "log-line" });
@@ -3549,9 +3597,7 @@ function renderDashboard(root, ctx2) {
3549
3597
  taskTarget.textContent = String(state.target);
3550
3598
  }
3551
3599
  if (state.profileId) {
3552
- const aliases = ctx2.api?.settings?.profileAliases || {};
3553
- taskAccount.textContent = aliases[state.profileId] || state.profileId;
3554
- activeProfileId = String(state.profileId || "").trim();
3600
+ applyAccountLabel(state.profileId);
3555
3601
  }
3556
3602
  const taskId = String(state.taskId || state.scheduleTaskId || state.configTaskId || "").trim();
3557
3603
  if (taskId) {
@@ -3636,7 +3682,7 @@ function renderDashboard(root, ctx2) {
3636
3682
  resetDashboardForNewRun("\u65B0\u4EFB\u52A1\u542F\u52A8", ts);
3637
3683
  if (payload.keyword) taskKeyword.textContent = String(payload.keyword);
3638
3684
  if (payload.maxNotes) taskTarget.textContent = String(payload.maxNotes);
3639
- if (payload.profileId) activeProfileId = String(payload.profileId || "").trim();
3685
+ if (payload.profileId) applyAccountLabel(payload.profileId);
3640
3686
  if (payload.taskId) {
3641
3687
  const taskId = String(payload.taskId || "").trim();
3642
3688
  if (taskId) {
@@ -3788,9 +3834,7 @@ function renderDashboard(root, ctx2) {
3788
3834
  if (summary.keyword) taskKeyword.textContent = String(summary.keyword);
3789
3835
  if (assigned) taskTarget.textContent = String(assigned);
3790
3836
  if (profile?.profileId) {
3791
- const aliases = ctx2.api?.settings?.profileAliases || {};
3792
- taskAccount.textContent = aliases[profile.profileId] || profile.profileId;
3793
- activeProfileId = String(profile.profileId || "").trim();
3837
+ applyAccountLabel(profile.profileId);
3794
3838
  }
3795
3839
  const runId = String(profile?.runId || summary?.runId || "").trim();
3796
3840
  if (runId) {
@@ -3930,8 +3974,7 @@ function renderDashboard(root, ctx2) {
3930
3974
  taskTarget.textContent = String(config.target || 50);
3931
3975
  }
3932
3976
  if (!hasRenderableValue(contextRun?.profileId) && config.lastProfileId) {
3933
- const aliases = ctx2.api?.settings?.profileAliases || {};
3934
- taskAccount.textContent = aliases[config.lastProfileId] || config.lastProfileId;
3977
+ applyAccountLabel(config.lastProfileId);
3935
3978
  }
3936
3979
  const taskId = String(contextRun?.taskId || config.taskId || ctx2?.activeTaskConfigId || "").trim();
3937
3980
  if (taskId) {
@@ -4008,14 +4051,17 @@ function renderDashboard(root, ctx2) {
4008
4051
  }
4009
4052
  };
4010
4053
  renderRunSummary();
4054
+ void refreshAccountLabels(true);
4011
4055
  loadTaskInfo();
4012
4056
  subscribeToUpdates();
4013
4057
  fetchCurrentState();
4014
4058
  startStatePoll();
4059
+ startAccountLabelPoll();
4015
4060
  startElapsedTimer();
4016
4061
  return () => {
4017
4062
  stopElapsedTimer();
4018
4063
  stopStatePoll();
4064
+ stopAccountLabelPoll();
4019
4065
  if (unsubscribeState) unsubscribeState();
4020
4066
  if (unsubscribeCmd) unsubscribeCmd();
4021
4067
  if (unsubscribeBus) unsubscribeBus();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@web-auto/webauto",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "webauto": "bin/webauto.mjs"
@@ -50,6 +50,7 @@
50
50
  },
51
51
  "scripts": {
52
52
  "postinstall": "node scripts/postinstall-resources.mjs",
53
+ "prepack": "npm run build",
53
54
  "start:mcp:browser": "npx @browsermcp/mcp@latest",
54
55
  "build": "npm run prebuild && npm run build:services && npm run self-check:post-build && npm run ui:test && npm --prefix apps/desktop-console run build",
55
56
  "build:services": "tsc -p tsconfig.services.json",