@songsid/agend 2.1.10-beta.2 → 2.1.10-beta.4

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/paths.d.ts CHANGED
@@ -1,11 +1,23 @@
1
1
  /** Resolve the AgEnD data directory. Override with AGEND_HOME env var. */
2
2
  export declare function getAgendHome(): string;
3
+ /**
4
+ * Whether this process's AgEnD home is the user's real default one — the only
5
+ * home that uses tmux's default socket and the plain "agend" session (#1126).
6
+ *
7
+ * Before, "default" meant `AGEND_HOME === $HOME/.agend`. A throwaway fleet run
8
+ * with HOME and AGEND_HOME both pointed at a scratch directory matched that,
9
+ * attached to the LIVE fleet's default tmux server, and its startup cleanup
10
+ * killed 16 live windows as "orphaned" (2026-10-03). Comparing against the
11
+ * real home closes that, and changes nothing for anyone whose AGEND_HOME is
12
+ * unset or set to their real ~/.agend: their socket and session names stay.
13
+ */
14
+ export declare function isDefaultAgendHome(home?: string): boolean;
3
15
  /** Tmux session name — unique per AGEND_HOME to avoid cross-instance interference. */
4
16
  export declare function getTmuxSessionName(): string;
5
17
  /**
6
- * Tmux socket name for -L flag. Returns null for default AGEND_HOME
7
- * (backward compatible — uses tmux's default socket). Custom AGEND_HOME
8
- * gets a unique socket to isolate tmux servers.
18
+ * Tmux socket name for -L flag. Null only for the user's real default home
19
+ * (tmux's default socket, as always); any other AgEnD home gets a socket of
20
+ * its own, so it can never reach — and clean up — another fleet's server.
9
21
  */
10
22
  export declare function getTmuxSocketName(): string | null;
11
23
  /** Ensure an auto-created workspace has a .git directory (best effort). */
package/dist/paths.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { join } from "node:path";
2
- import { homedir } from "node:os";
2
+ import { homedir, userInfo } from "node:os";
3
3
  import { createHash } from "node:crypto";
4
4
  import { existsSync } from "node:fs";
5
5
  import { execFileSync } from "node:child_process";
@@ -7,39 +7,59 @@ import { execFileSync } from "node:child_process";
7
7
  export function getAgendHome() {
8
8
  return process.env.AGEND_HOME || join(homedir(), ".agend");
9
9
  }
10
- /** Tmux session name — unique per AGEND_HOME to avoid cross-instance interference. */
11
- export function getTmuxSessionName() {
12
- const home = getAgendHome();
13
- const defaultHome = join(homedir(), ".agend");
14
- if (home === defaultHome)
15
- return "agend";
10
+ /**
11
+ * The user's real AgEnD home: `.agend` in the home directory from the
12
+ * password database, NOT `$HOME`. A test or throwaway fleet that changes HOME
13
+ * (and AGEND_HOME with it) must not be mistaken for the user's own fleet.
14
+ * Null when the password database cannot be read: falling back to homedir()
15
+ * would trust `$HOME` again (#1128 review), so then no home is the default.
16
+ */
17
+ function realDefaultAgendHome() {
18
+ try {
19
+ return join(userInfo().homedir, ".agend");
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ /**
26
+ * Whether this process's AgEnD home is the user's real default one — the only
27
+ * home that uses tmux's default socket and the plain "agend" session (#1126).
28
+ *
29
+ * Before, "default" meant `AGEND_HOME === $HOME/.agend`. A throwaway fleet run
30
+ * with HOME and AGEND_HOME both pointed at a scratch directory matched that,
31
+ * attached to the LIVE fleet's default tmux server, and its startup cleanup
32
+ * killed 16 live windows as "orphaned" (2026-10-03). Comparing against the
33
+ * real home closes that, and changes nothing for anyone whose AGEND_HOME is
34
+ * unset or set to their real ~/.agend: their socket and session names stay.
35
+ */
36
+ export function isDefaultAgendHome(home = getAgendHome()) {
37
+ // Exact string comparison, as before: only WHICH home it is compared with
38
+ // changed, so no existing AGEND_HOME value moves to another socket. An
39
+ // unknown real home is never matched: the fleet gets an isolated socket.
40
+ const real = realDefaultAgendHome();
41
+ return real !== null && home === real;
42
+ }
43
+ function isolatedSuffix(home) {
16
44
  // sha256 instead of md5: this hash is not security-critical (we just need a
17
45
  // short stable suffix so two custom AGEND_HOME values don't collide on the
18
46
  // tmux session/socket namespace), but md5 trips FIPS-mode Node and security
19
- // scanners. The suffix value WILL change for users with a custom
20
- // AGEND_HOME — that only affects an in-memory tmux session/socket name, so
21
- // a single daemon restart resyncs cleanly (any orphan tmux session under
22
- // the old name can be killed manually).
47
+ // scanners.
23
48
  return "agend-" + createHash("sha256").update(home).digest("hex").slice(0, 6);
24
49
  }
50
+ /** Tmux session name — unique per AGEND_HOME to avoid cross-instance interference. */
51
+ export function getTmuxSessionName() {
52
+ const home = getAgendHome();
53
+ return isDefaultAgendHome(home) ? "agend" : isolatedSuffix(home);
54
+ }
25
55
  /**
26
- * Tmux socket name for -L flag. Returns null for default AGEND_HOME
27
- * (backward compatible — uses tmux's default socket). Custom AGEND_HOME
28
- * gets a unique socket to isolate tmux servers.
56
+ * Tmux socket name for -L flag. Null only for the user's real default home
57
+ * (tmux's default socket, as always); any other AgEnD home gets a socket of
58
+ * its own, so it can never reach — and clean up — another fleet's server.
29
59
  */
30
60
  export function getTmuxSocketName() {
31
61
  const home = getAgendHome();
32
- const defaultHome = join(homedir(), ".agend");
33
- if (home === defaultHome)
34
- return null;
35
- // sha256 instead of md5: this hash is not security-critical (we just need a
36
- // short stable suffix so two custom AGEND_HOME values don't collide on the
37
- // tmux session/socket namespace), but md5 trips FIPS-mode Node and security
38
- // scanners. The suffix value WILL change for users with a custom
39
- // AGEND_HOME — that only affects an in-memory tmux session/socket name, so
40
- // a single daemon restart resyncs cleanly (any orphan tmux session under
41
- // the old name can be killed manually).
42
- return "agend-" + createHash("sha256").update(home).digest("hex").slice(0, 6);
62
+ return isDefaultAgendHome(home) ? null : isolatedSuffix(home);
43
63
  }
44
64
  /** Ensure an auto-created workspace has a .git directory (best effort). */
45
65
  export function ensureWorkspaceGit(dir) {
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,0EAA0E;AAC1E,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IACzC,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,iEAAiE;IACjE,2EAA2E;IAC3E,yEAAyE;IACzE,wCAAwC;IACxC,OAAO,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACtC,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,iEAAiE;IACjE,2EAA2E;IAC3E,yEAAyE;IACzE,wCAAwC;IACxC,OAAO,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACnC,4EAA4E;QAC5E,6EAA6E;QAC7E,IAAI,CAAC;YAAC,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACpG,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,0EAA0E;AAC1E,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,YAAY,EAAE;IAC9D,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,YAAY;IACZ,OAAO,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACnC,4EAA4E;QAC5E,6EAA6E;QAC7E,IAAI,CAAC;YAAC,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACpG,CAAC;AACH,CAAC"}
package/dist/types.d.ts CHANGED
@@ -78,7 +78,13 @@ export interface ChannelConfig {
78
78
  }
79
79
  export type DeliveryWorkerMode = "off" | "wake_only" | "on";
80
80
  export declare const DELIVERY_WORKER_MODES: readonly DeliveryWorkerMode[];
81
- /** The delivery_worker mode for `name`: instance override, then fleet default, then "off". */
81
+ export declare const DEFAULT_DELIVERY_WORKER_MODE: DeliveryWorkerMode;
82
+ /**
83
+ * The delivery_worker mode for `name`: instance override, then fleet default,
84
+ * then `wake_only` (#1129). The built-in default used to be `off`, which
85
+ * never woke a target paused across a fleet restart for queued work: the
86
+ * delegated task waited until someone ran /wake. An explicit `off` is kept.
87
+ */
82
88
  export declare function resolveDeliveryWorkerMode(config: {
83
89
  defaults?: {
84
90
  delivery_worker?: unknown;
@@ -106,10 +112,10 @@ export interface InstanceConfig {
106
112
  warm_overflow?: number;
107
113
  /**
108
114
  * Phase 2 delivery owner for this target (docs/design/phase2-submit-contract.md):
109
- * `off` (default) keeps the current outbox pump, `wake_only` adds the wake
110
- * coordinator (2b), `on` hands claim/submit to the per-target worker (2c).
111
- * Read from `defaults.delivery_worker` with a per-instance override. In 2a
112
- * only the setting exists — every mode behaves as `off`.
115
+ * `off` keeps the outbox pump alone, `wake_only` (default since #1129) adds
116
+ * the wake coordinator (2b), `on` hands claim/submit to the per-target
117
+ * worker (2c). Read from `defaults.delivery_worker` with a per-instance
118
+ * override.
113
119
  */
114
120
  delivery_worker?: DeliveryWorkerMode;
115
121
  /** Agent display name (e.g. "Kuro", "Luna") — chosen by the agent itself */
package/dist/types.js CHANGED
@@ -1,10 +1,16 @@
1
1
  export const DELIVERY_WORKER_MODES = ["off", "wake_only", "on"];
2
- /** The delivery_worker mode for `name`: instance override, then fleet default, then "off". */
2
+ export const DEFAULT_DELIVERY_WORKER_MODE = "wake_only";
3
+ /**
4
+ * The delivery_worker mode for `name`: instance override, then fleet default,
5
+ * then `wake_only` (#1129). The built-in default used to be `off`, which
6
+ * never woke a target paused across a fleet restart for queued work: the
7
+ * delegated task waited until someone ran /wake. An explicit `off` is kept.
8
+ */
3
9
  export function resolveDeliveryWorkerMode(config, name) {
4
10
  for (const value of [config?.instances?.[name]?.delivery_worker, config?.defaults?.delivery_worker]) {
5
11
  if (typeof value === "string" && DELIVERY_WORKER_MODES.includes(value))
6
12
  return value;
7
13
  }
8
- return "off";
14
+ return DEFAULT_DELIVERY_WORKER_MODE;
9
15
  }
10
16
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgFA,MAAM,CAAC,MAAM,qBAAqB,GAAkC,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AAE/F,8FAA8F;AAC9F,MAAM,UAAU,yBAAyB,CACvC,MAAkI,EAClI,IAAY;IAEZ,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;QACpG,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,qBAA2C,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAA2B,CAAC;IACpI,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgFA,MAAM,CAAC,MAAM,qBAAqB,GAAkC,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AAC/F,MAAM,CAAC,MAAM,4BAA4B,GAAuB,WAAW,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAkI,EAClI,IAAY;IAEZ,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;QACpG,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,qBAA2C,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAA2B,CAAC;IACpI,CAAC;IACD,OAAO,4BAA4B,CAAC;AACtC,CAAC"}
@@ -13,6 +13,28 @@ export declare function getUpdateSelector(opts: UpdateVersionOptions): string;
13
13
  */
14
14
  export declare function lookupTargetVersion(selector: string, run?: typeof execFileSync): string | null;
15
15
  export declare function shouldSkipUpdate(currentVersion: string, targetVersion: string | null, force?: boolean): boolean;
16
+ /**
17
+ * The running fleet started before the installed package was written: it is
18
+ * still executing the previous version's code (#1113 hotfix). That happens
19
+ * when an update installed the package but its restart did not go through —
20
+ * a second `agend update` then saw "already up to date" and left the old
21
+ * process running against the new files on disk. Unknown (no pid, no start
22
+ * time) is false: never restart on a guess.
23
+ */
24
+ export declare function runningFleetPredatesInstall(opts: {
25
+ pid: number | null;
26
+ installedAtMs: number;
27
+ processStartMs: (pid: number) => number | null;
28
+ /**
29
+ * Whether `pid` is an AgEnD fleet process (its command line). A stale
30
+ * fleet.pid can name a recycled pid — an unrelated process that a restart
31
+ * would signal (#1125 review) — so anything not confirmed is not a fleet.
32
+ */
33
+ isFleetProcess: (pid: number) => boolean;
34
+ marginMs?: number;
35
+ }): boolean;
36
+ /** Start time of a live process, via `ps -o lstart=` (Linux and macOS); null if gone. */
37
+ export declare function processStartMs(pid: number, run?: (args: string[]) => string): number | null;
16
38
  interface UpdateOutput {
17
39
  log(message: string): void;
18
40
  error(message: string): void;
@@ -30,6 +30,37 @@ export function shouldSkipUpdate(currentVersion, targetVersion, force = false) {
30
30
  && targetVersion !== null
31
31
  && normalizeVersion(currentVersion) === normalizeVersion(targetVersion);
32
32
  }
33
+ /**
34
+ * The running fleet started before the installed package was written: it is
35
+ * still executing the previous version's code (#1113 hotfix). That happens
36
+ * when an update installed the package but its restart did not go through —
37
+ * a second `agend update` then saw "already up to date" and left the old
38
+ * process running against the new files on disk. Unknown (no pid, no start
39
+ * time) is false: never restart on a guess.
40
+ */
41
+ export function runningFleetPredatesInstall(opts) {
42
+ if (opts.pid === null || !Number.isFinite(opts.installedAtMs))
43
+ return false;
44
+ if (!opts.isFleetProcess(opts.pid))
45
+ return false;
46
+ const started = opts.processStartMs(opts.pid);
47
+ if (started === null)
48
+ return false;
49
+ return started < opts.installedAtMs - (opts.marginMs ?? 2_000);
50
+ }
51
+ /** Start time of a live process, via `ps -o lstart=` (Linux and macOS); null if gone. */
52
+ export function processStartMs(pid, run = args => execFileSync("ps", args, { encoding: "utf8", env: { ...process.env, LC_ALL: "C", TZ: process.env.TZ }, stdio: ["ignore", "pipe", "ignore"], timeout: 5000 })) {
53
+ try {
54
+ const text = run(["-o", "lstart=", "-p", String(pid)]).trim();
55
+ if (!text)
56
+ return null;
57
+ const ms = Date.parse(text);
58
+ return Number.isFinite(ms) ? ms : null;
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
33
64
  /** Report restart status and let the CLI translate failure into exit code 1. */
34
65
  export function reportUpdateRestart(status, output = console) {
35
66
  if (status === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD,uDAAuD;AACvD,MAAM,UAAU,iBAAiB,CAAC,IAA0B;IAC1D,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,MAA2B,YAAY;IAEvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAChB,KAAK,EACL,CAAC,MAAM,EAAE,kBAAkB,QAAQ,EAAE,EAAE,SAAS,CAAC,EACjD;YACE,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,MAAM;SAChB,CACF,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,OAAO,IAAI,IAAI,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,cAAsB,EACtB,aAA4B,EAC5B,KAAK,GAAG,KAAK;IAEb,OAAO,CAAC,KAAK;WACR,aAAa,KAAK,IAAI;WACtB,gBAAgB,CAAC,cAAc,CAAC,KAAK,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAC5E,CAAC;AAOD,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CACjC,MAAqB,EACrB,SAAuB,OAAO;IAE9B,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,8 @@
10
10
  * only claims targets that are awake. Nothing here writes a pane or claims a
11
11
  * row.
12
12
  *
13
- * Active only for targets whose `delivery_worker` is `wake_only` or `on`;
14
- * `off` (the default) leaves every path as it was.
13
+ * Active for targets whose `delivery_worker` is `wake_only` (the default
14
+ * since #1129) or `on`; an explicit `off` leaves every path as it was.
15
15
  */
16
16
  import { t } from "./locale.js";
17
17
  /** Row kinds that never warrant waking a target. Empty: every current kind asks for action (§1.2). */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@songsid/agend",
3
- "version": "2.1.10-beta.2",
3
+ "version": "2.1.10-beta.4",
4
4
  "description": "Multi-agent fleet daemon — run any coding CLI (Claude, Gemini, Codex, OpenCode) from Telegram",
5
5
  "type": "module",
6
6
  "bin": {