@intentic/local-agent 1.232.0 → 1.233.0

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/README.md CHANGED
@@ -6,9 +6,9 @@ The plumbing every intentic CLI that lives on a **user's own computer** needs, a
6
6
  ~/.intentic/<name>/ agentHome(name) — state dir + config.json
7
7
  config.json writeSecretFile() — 0700 dir, 0600 file
8
8
  <agent>.log spawnDetached() — the loop's output has nowhere else to go
9
- <agent>.pid livePid() — find the loop again from another process
9
+ <agent>.pid livePid() — find the loop again, pid + the boot it belongs to
10
10
 
11
- HKCU\…\Run registerAutostart() — Windows, per-user, no elevation
11
+ HKCU\…\Run registerAutostart() — Windows, per-user, no elevation, through the launcher stub
12
12
  ~/Library/LaunchAgents/ registerAutostart() — macOS, opt-in per agent
13
13
  ~/.config/autostart/ registerAutostart() — Linux desktop session
14
14
 
@@ -17,18 +17,18 @@ stdout createUi(process) — the one renderer every age
17
17
 
18
18
  ## Why it exists
19
19
 
20
- Three agents ship to a user's machine and have nothing in common except how they are **installed** and how they
20
+ Two agents ship to a user's machine and have nothing in common except how they are **installed** and how they
21
21
  **stay alive**:
22
22
 
23
23
  | | what it does | uses |
24
24
  | --- | --- | --- |
25
- | [`@intentic/host`](../../_computers/host) | lets the sandbox's agent work on this computer | home, launcher, autostart, detached, ui |
26
- | [`@intentic/sync`](../../_sandbox/sync) | mirrors files and ports between machine and sandbox | home, launcher, autostart, detached, ui |
25
+ | [`@intentic/machine`](../../_computers/machine) | lets the sandbox's agent work on this computer, and mirrors files and ports between the two | home, launcher, autostart, detached, ui |
27
26
  | [`@intentic/acp-bridge`](../../_sandbox/acp-bridge) | lets an editor talk to the sandbox | home |
28
27
 
29
- They were written months apart, and each copy of that plumbing was made from the last one: a shape with a known
30
- ending. The second copy is a snapshot of the first on the day it was taken, and every fix after that lands in
31
- only one of them. It already had:
28
+ The machine agent's two halves (and the standalone host/sync agents they used to be) were written months apart,
29
+ and each copy of that plumbing was made from the last one: a shape with a known ending. The second copy is a
30
+ snapshot of the first on the day it was taken, and every fix after that lands in only one of them. It already
31
+ had:
32
32
 
33
33
  - **sync wrote its token file world-readable.** Its config module was copied from host's *before* the 0600 floor
34
34
  was added there, and nothing afterwards compared the two.
@@ -52,27 +52,63 @@ its old permissions forever.
52
52
 
53
53
  **`launcher.ts`**: `cliLauncher(cliName)` answers how to re-invoke this CLI. The subtlety is the compiled
54
54
  binary: `bun build --compile` reports an `argv[1]` inside its own virtual filesystem and re-injects it on every
55
- launch, so passing it again shifts the command to `argv[2]` where the parser never looks.
55
+ launch, so passing it again shifts the command to `argv[2]` where the parser never looks. `windowsLaunchStub()`
56
+ finds the other half of a Windows install, [`intentic-launch.exe`](../win-launcher), sitting next to the agent's
57
+ own executable.
56
58
 
57
59
  **`autostart.ts`**: `registerAutostart(spec, launcher, log)` against an `AutostartSpec` the agent declares.
58
- Windows gets the **detached** command (Explorer starts a Run entry in the interactive session, where the
59
- foreground loop would park a black console window on the desktop from login until shutdown); launchd and the
60
- desktop session, which supervise what they start, get the **foreground** one. `launchAgent` is optional: an
61
- agent that has not been exercised on macOS says so and gets a note, rather than a file macOS never reads.
62
-
63
- **`detached.ts`**: `spawnDetached`, `livePid`, `isProcessAlive`. The loop is spawned `detached` on **every**
64
- platform: on POSIX for its own session, on Windows because without it the loop is torn down the moment its
65
- parent exits: measured on the compiled binary, and the reason "connected in the background (pid N)" was a lie
66
- there for every release that passed `windowsHide` instead. The two cannot be combined to get both properties
60
+ launchd and the desktop session, which supervise what they start, get the **foreground** command. So does
61
+ Windows, but through the stub: `intentic-launch.exe --log <log> -- <agent> <foreground args>`. `launchAgent` is
62
+ optional: an agent that has not been exercised on macOS says so and gets a note, rather than a file macOS never
63
+ reads.
64
+
65
+ Windows earns that indirection. Explorer starts a Run entry in the interactive session, and the loader gives
66
+ every console-subsystem program a console — which on Windows 11, where the default console host is Windows
67
+ Terminal, is a terminal window on the desktop. The entry used to name the agent's own **detached** command,
68
+ which spawns the loop and exits, so what a user saw at every single boot was a black window for one to two
69
+ seconds. Nothing softer works: `powershell -WindowStyle Hidden` hides the console *its* host owns while the
70
+ window belongs to WindowsTerminal.exe, and a Task Scheduler logon task maps a window like anything else. Only a
71
+ program whose PE subsystem is GUI never gets a console, which is the whole of what the stub is. `detachedArgs`
72
+ remains the fallback for an install with no stub beside it (a developer running `node dist/cli.js`), and
73
+ registration says out loud that a window will flash.
74
+
75
+ **`detached.ts`**: `spawnDetached`, `livePid`, `pidFileBody`, `isProcessAlive`. On POSIX the loop is spawned
76
+ `detached` for its own session; on Windows because without it the loop is torn down the moment its parent
77
+ exits — measured on the compiled binary, and the reason "connected in the background (pid N)" was a lie there
78
+ for every release that passed `windowsHide` instead. The two cannot be combined to get both properties
67
79
  (`CREATE_NO_WINDOW` is ignored alongside `DETACHED_PROCESS`), so a detached loop on Windows has no console at
68
80
  all, and Windows hands a console child of a console-less process a new console *with a window*. That is why
69
81
  every spawn inside a loop (git and ssh in sync's bridge, docker and PowerShell in host's tools) passes
70
82
  `windowsHide` itself; the flag applies whether or not the parent has a console, where inheritance did not.
71
83
 
84
+ Where the stub is installed, `spawnDetached` goes through it on Windows and the bargain improves: the loop gets
85
+ `CREATE_NO_WINDOW`, so it has a console of its own with **no window on it**, and every console child inherits
86
+ that console instead of being handed a fresh one. The per-spawn `windowsHide` stays — it is what covers a loop
87
+ started any other way — but it stops being the only thing between a user and a black window. The stub prints
88
+ the loop's pid on its stdout, because its own pid belongs to a process that has already exited by the time the
89
+ settle check below would probe it.
90
+
72
91
  `spawnDetached` also answers only once the loop has **survived** a short settle window, and throws naming its log
73
92
  otherwise. A pid proves the OS created a process; every caller turns it straight into a sentence promising the
74
93
  user their machine is now doing something.
75
94
 
95
+ A pidfile lives beside the config, so it **outlives the boot that wrote it**, while the number in it means
96
+ nothing outside that boot's process table: pids restart low and are handed out in roughly the same order every
97
+ time, so a loop's own pid from yesterday is somebody else's transient process this morning. So `pidFileBody`
98
+ writes the pid *and* a stamp naming the boot, and `livePid` ignores any record from a different one without
99
+ probing it. On Linux the stamp is `/proc/sys/kernel/random/boot_id`, exact and unmoved by the clock; elsewhere
100
+ it is the boot's epoch by subtraction from the uptime, which libuv takes from `GetTickCount64` on Windows and
101
+ `kern.boottime` on macOS — both keep counting across sleep, so a laptop that suspends goes on answering the same
102
+ boot. That derived form is compared with a two-minute tolerance, because it is anchored to `Date.now()` and a
103
+ stepped clock would otherwise read as a new boot; a false *mismatch* is the expensive direction, since it lets a
104
+ second loop start on top of a live one.
105
+
106
+ The cost of not doing this was measured: a machine bugchecked in standby, nothing removed the sync watcher's
107
+ pidfile, and on the next boot the watcher probed the pid it used to hold, found an unrelated early-boot process
108
+ wearing it, and refused to start. Refusing is deliberate and so exits 0 — a supervisor must not restart a
109
+ watcher into refusing again every `RestartSec` — which is precisely why `Restart=on-failure` never fired and
110
+ desktop file sync stayed off until somebody went looking.
111
+
76
112
  **`ui.ts`**: `createUi(process)` is the whole of what an agent writes to a person, and the TypeScript twin of
77
113
  `ic`'s `_sandbox/ic/src/ui.rs`. One question decides everything: is stdout a terminal. A **pipe** gets the
78
114
  `intentic: [phase] message` marker stream and nothing else, because the desktop app parses it into a progress
@@ -99,5 +135,6 @@ business: which is why host's scopes and sync's Mutagen sessions are nowhere nea
99
135
  - [src/home.ts](src/home.ts): the `~/.intentic/<agent>` directory and its 0600 floor.
100
136
  - [src/autostart.ts](src/autostart.ts): login autostart, per platform.
101
137
  - [src/detached.ts](src/detached.ts): the background loop, and surviving a closed terminal.
102
- - [src/launcher.ts](src/launcher.ts): `cliLauncher()`, including the compiled-binary argv case.
138
+ - [src/launcher.ts](src/launcher.ts): `cliLauncher()` and the Windows launcher stub, including the
139
+ compiled-binary argv case.
103
140
  - [src/ui.ts](src/ui.ts), the renderer: the pipe/terminal/nested split, the checklist, the ranked ending.
@@ -14,8 +14,12 @@ export interface AutostartSpec {
14
14
  readonly foregroundArgs: readonly string[];
15
15
  readonly failureNote: (reason: string) => string;
16
16
  }
17
- export declare const windowsRunAddArgs: (spec: AutostartSpec, launcher: CliLauncher) => string[];
17
+ export declare const windowsRunAddArgs: (spec: AutostartSpec, launcher: CliLauncher, stub?: string) => string[];
18
18
  export declare const windowsRunDeleteArgs: (spec: AutostartSpec) => string[];
19
+ export declare const windowsRunValueAddArgs: (name: string, commandLine: string) => string[];
20
+ export declare const windowsRunValueDeleteArgs: (name: string) => string[];
21
+ export declare const setWindowsRunValue: (name: string, commandLine: string) => void;
22
+ export declare const clearWindowsRunValue: (name: string) => void;
19
23
  export declare const systemdUserUnit: (spec: AutostartSpec, launcher: CliLauncher) => string;
20
24
  export declare const linuxDesktopEntry: (spec: AutostartSpec, launcher: CliLauncher) => string;
21
25
  export declare const macLaunchAgentXml: (spec: AutostartSpec, agent: LaunchAgentSpec, launcher: CliLauncher) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"autostart.d.ts","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AA6BrC,MAAM,WAAW,eAAe;IAE5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAG1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAOpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;IAUvC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAE3C,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CACpD;AAiCD,eAAO,MAAM,iBAAiB,SAAU,aAAa,YAAY,WAAW,KAAG,MAAM,EAUpF,CAAC;AAEF,eAAO,MAAM,oBAAoB,SAAU,aAAa,KAAG,MAAM,EAAmE,CAAC;AAuErI,eAAO,MAAM,eAAe,SAAU,aAAa,YAAY,WAAW,KAAG,MAmB5E,CAAC;AAwBF,eAAO,MAAM,iBAAiB,SAAU,aAAa,YAAY,WAAW,KAAG,MAO9E,CAAC;AAIF,eAAO,MAAM,iBAAiB,SAAU,aAAa,SAAS,eAAe,YAAY,WAAW,KAAG,MAetG,CAAC;AA2CF,eAAO,MAAM,iBAAiB,SAAgB,aAAa,YAAY,WAAW,OAAO,GAAG,KAAG,OAAO,CAAC,OAAO,CAuB7G,CAAC;AAGF,eAAO,MAAM,mBAAmB,SAAgB,aAAa,OAAO,GAAG,KAAG,OAAO,CAAC,IAAI,CA8BrF,CAAC"}
1
+ {"version":3,"file":"autostart.d.ts","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAA0E,MAAM,eAAe,CAAC;AACzH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAkCrC,MAAM,WAAW,eAAe;IAE5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAG1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAOpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;IAavC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAE3C,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CACpD;AA0CD,eAAO,MAAM,iBAAiB,SAAU,aAAa,YAAY,WAAW,SAAS,MAAM,KAAG,MAAM,EAM/F,CAAC;AAEN,eAAO,MAAM,oBAAoB,SAAU,aAAa,KAAG,MAAM,EAAqD,CAAC;AAOvH,eAAO,MAAM,sBAAsB,SAAU,MAAM,eAAe,MAAM,KAAG,MAAM,EAUhF,CAAC;AAEF,eAAO,MAAM,yBAAyB,SAAU,MAAM,KAAG,MAAM,EAAmD,CAAC;AAGnH,eAAO,MAAM,kBAAkB,SAAU,MAAM,eAAe,MAAM,KAAG,IAAqE,CAAC;AAI7I,eAAO,MAAM,oBAAoB,SAAU,MAAM,KAAG,IAEnD,CAAC;AAuEF,eAAO,MAAM,eAAe,SAAU,aAAa,YAAY,WAAW,KAAG,MAmB5E,CAAC;AAwBF,eAAO,MAAM,iBAAiB,SAAU,aAAa,YAAY,WAAW,KAAG,MAO9E,CAAC;AAIF,eAAO,MAAM,iBAAiB,SAAU,aAAa,SAAS,eAAe,YAAY,WAAW,KAAG,MAetG,CAAC;AA2CF,eAAO,MAAM,iBAAiB,SAAgB,aAAa,YAAY,WAAW,OAAO,GAAG,KAAG,OAAO,CAAC,OAAO,CAkC7G,CAAC;AAGF,eAAO,MAAM,mBAAmB,SAAgB,aAAa,OAAO,GAAG,KAAG,OAAO,CAAC,IAAI,CA4BrF,CAAC"}
package/dist/autostart.js CHANGED
@@ -2,7 +2,7 @@ import { spawnSync } from "node:child_process";
2
2
  import { mkdir, rm, writeFile } from "node:fs/promises";
3
3
  import { homedir } from "node:os";
4
4
  import { basename, dirname, join } from "node:path";
5
- import { quotedCommandLine } from "./launcher.js";
5
+ import { quotedCommandLine, stubCommand, WINDOWS_LAUNCH_STUB, windowsLaunchStub } from "./launcher.js";
6
6
  const WINDOWS_RUN_KEY = "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";
7
7
  const linuxDesktopPath = (spec) => join(homedir(), ".config", "autostart", `${spec.id}.desktop`);
8
8
  const macPlistPath = (agent) => join(homedir(), "Library", "LaunchAgents", `${agent.label}.plist`);
@@ -11,7 +11,7 @@ const systemdUnitPath = (spec) => join(homedir(), ".config", "systemd", "user",
11
11
  const regExe = () => join(process.env["SystemRoot"] ?? "C:\\Windows", "System32", "reg.exe");
12
12
  const reason = (error) => (error instanceof Error ? error.message : String(error));
13
13
  const register = (command, args) => {
14
- const result = spawnSync(command, args, { encoding: "utf8" });
14
+ const result = spawnSync(command, args, { encoding: "utf8", windowsHide: true });
15
15
  if (result.error !== undefined) {
16
16
  throw result.error;
17
17
  }
@@ -20,18 +20,24 @@ const register = (command, args) => {
20
20
  throw new Error(said === "" ? `${basename(command)} exited ${result.status}` : said);
21
21
  }
22
22
  };
23
- export const windowsRunAddArgs = (spec, launcher) => [
23
+ export const windowsRunAddArgs = (spec, launcher, stub) => windowsRunValueAddArgs(spec.windowsRunValue, quotedCommandLine(stub === undefined ? [...launcher, ...spec.detachedArgs] : stubCommand(stub, spec.logPath, [...launcher, ...spec.foregroundArgs])));
24
+ export const windowsRunDeleteArgs = (spec) => windowsRunValueDeleteArgs(spec.windowsRunValue);
25
+ export const windowsRunValueAddArgs = (name, commandLine) => [
24
26
  "add",
25
27
  WINDOWS_RUN_KEY,
26
28
  "/v",
27
- spec.windowsRunValue,
29
+ name,
28
30
  "/t",
29
31
  "REG_SZ",
30
32
  "/d",
31
- quotedCommandLine([...launcher, ...spec.detachedArgs]),
33
+ commandLine,
32
34
  "/f",
33
35
  ];
34
- export const windowsRunDeleteArgs = (spec) => ["delete", WINDOWS_RUN_KEY, "/v", spec.windowsRunValue, "/f"];
36
+ export const windowsRunValueDeleteArgs = (name) => ["delete", WINDOWS_RUN_KEY, "/v", name, "/f"];
37
+ export const setWindowsRunValue = (name, commandLine) => register(regExe(), windowsRunValueAddArgs(name, commandLine));
38
+ export const clearWindowsRunValue = (name) => {
39
+ spawnSync(regExe(), windowsRunValueDeleteArgs(name), { stdio: "ignore", windowsHide: true });
40
+ };
35
41
  const SYSTEMD_LIVE_STATES = new Set(["running", "degraded", "starting", "maintenance", "stopping", "initializing"]);
36
42
  const systemdUserAvailable = () => {
37
43
  const result = spawnSync("systemctl", ["--user", "is-system-running"], { encoding: "utf8" });
@@ -127,7 +133,11 @@ export const registerAutostart = async (spec, launcher, log) => {
127
133
  return await registerMac(spec, spec.launchAgent, launcher);
128
134
  }
129
135
  if (process.platform === "win32") {
130
- register(regExe(), windowsRunAddArgs(spec, launcher));
136
+ const stub = windowsLaunchStub(launcher);
137
+ if (stub === undefined) {
138
+ log(`note: ${WINDOWS_LAUNCH_STUB} isn't installed beside this agent, so ${spec.id} will start at login through a console window that flashes on the desktop. Re-run the install command from the capability card to get it.`);
139
+ }
140
+ register(regExe(), windowsRunAddArgs(spec, launcher, stub));
131
141
  return false;
132
142
  }
133
143
  if (process.platform === "linux") {
@@ -154,7 +164,7 @@ export const unregisterAutostart = async (spec, log) => {
154
164
  return;
155
165
  }
156
166
  if (process.platform === "win32") {
157
- spawnSync(regExe(), windowsRunDeleteArgs(spec), { stdio: "ignore" });
167
+ clearWindowsRunValue(spec.windowsRunValue);
158
168
  return;
159
169
  }
160
170
  spawnSync("systemctl", ["--user", "disable", "--now", systemdUnitName(spec)], { stdio: "ignore" });
@@ -1 +1 @@
1
- {"version":3,"file":"autostart.js","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autostart.js","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import type { CliLauncher } from "./launcher.js";
1
+ import { type CliLauncher } from "./launcher.js";
2
2
  export declare const isProcessAlive: (pid: number) => boolean;
3
+ export declare const pidFileBody: (pid?: number) => Promise<string>;
3
4
  export declare const livePid: (pidPath: string) => Promise<number | undefined>;
4
5
  export declare const spawnDetached: (logPath: string, launcher: CliLauncher, args: readonly string[]) => Promise<number>;
5
6
  //# sourceMappingURL=detached.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detached.d.ts","sourceRoot":"","sources":["../src/detached.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAYjD,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,OAO5C,CAAC;AAIF,eAAO,MAAM,OAAO,YAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAMzE,CAAC;AAwCF,eAAO,MAAM,aAAa,YAAmB,MAAM,YAAY,WAAW,QAAQ,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,CAgBnH,CAAC"}
1
+ {"version":3,"file":"detached.d.ts","sourceRoot":"","sources":["../src/detached.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,WAAW,EAAkC,MAAM,eAAe,CAAC;AAYjF,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,OAO5C,CAAC;AAiDF,eAAO,MAAM,WAAW,SAAe,MAAM,KAAiB,OAAO,CAAC,MAAM,CAAkC,CAAC;AAK/G,eAAO,MAAM,OAAO,YAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAUzE,CAAC;AAmGF,eAAO,MAAM,aAAa,YAAmB,MAAM,YAAY,WAAW,QAAQ,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,CAUnH,CAAC"}
package/dist/detached.js CHANGED
@@ -1,7 +1,10 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { openSync } from "node:fs";
3
3
  import { readFile } from "node:fs/promises";
4
+ import { uptime } from "node:os";
5
+ import { basename } from "node:path";
4
6
  import { setTimeout } from "node:timers/promises";
7
+ import { stubCommand, windowsLaunchStub } from "./launcher.js";
5
8
  export const isProcessAlive = (pid) => {
6
9
  try {
7
10
  process.kill(pid, 0);
@@ -11,24 +14,74 @@ export const isProcessAlive = (pid) => {
11
14
  return error.code === "EPERM";
12
15
  }
13
16
  };
17
+ const bootToken = async () => {
18
+ const bootId = (await readFile("/proc/sys/kernel/random/boot_id", "utf8").catch(() => "")).trim();
19
+ return bootId === "" ? `at:${Math.round(Date.now() - uptime() * 1000)}` : `id:${bootId}`;
20
+ };
21
+ const SAME_BOOT_MS = 120_000;
22
+ const sameBoot = (written, current) => {
23
+ if (!written.startsWith("at:") || !current.startsWith("at:")) {
24
+ return written === current;
25
+ }
26
+ return Math.abs(Number(written.slice(3)) - Number(current.slice(3))) <= SAME_BOOT_MS;
27
+ };
28
+ export const pidFileBody = async (pid = process.pid) => `${pid} ${await bootToken()}`;
14
29
  export const livePid = async (pidPath) => {
15
- const pid = Number((await readFile(pidPath, "utf8").catch(() => "")).trim());
30
+ const [written = "", stamp = ""] = (await readFile(pidPath, "utf8").catch(() => "")).trim().split(/\s+/);
31
+ const pid = Number(written);
16
32
  if (!Number.isInteger(pid) || pid <= 0) {
17
33
  return undefined;
18
34
  }
35
+ if (!sameBoot(stamp, await bootToken())) {
36
+ return undefined;
37
+ }
19
38
  return isProcessAlive(pid) ? pid : undefined;
20
39
  };
21
40
  const SETTLE_MS = 2_000;
22
41
  const SETTLE_POLL_MS = 100;
23
- export const spawnDetached = async (logPath, launcher, args) => {
42
+ const STUB_REPLY_MS = 10_000;
43
+ const spawnHere = (logPath, launcher, args) => {
24
44
  const logFd = openSync(logPath, "a");
25
45
  const [command, ...leading] = launcher;
26
46
  const child = spawn(command, [...leading, ...args], { detached: true, stdio: ["ignore", logFd, logFd] });
27
47
  child.unref();
28
- const pid = child.pid;
29
- if (pid === undefined) {
48
+ if (child.pid === undefined) {
30
49
  throw new Error(`could not start ${command} in the background. Details: ${logPath}`);
31
50
  }
51
+ return child.pid;
52
+ };
53
+ const spawnThroughStub = async (stub, logPath, launcher, args) => {
54
+ const [command, ...rest] = stubCommand(stub, logPath, [...launcher, ...args]);
55
+ const child = spawn(command, rest, { detached: true, stdio: ["ignore", "pipe", "pipe"] });
56
+ let answered = "";
57
+ let complained = "";
58
+ child.stdout?.on("data", (chunk) => (answered += chunk.toString()));
59
+ child.stderr?.on("data", (chunk) => (complained += chunk.toString()));
60
+ const status = await new Promise((resolve, reject) => {
61
+ const timer = globalThis.setTimeout(() => {
62
+ child.kill();
63
+ reject(new Error(`${basename(stub)} did not answer within ${STUB_REPLY_MS}ms. Details: ${logPath}`));
64
+ }, STUB_REPLY_MS);
65
+ timer.unref();
66
+ child.once("error", (error) => {
67
+ clearTimeout(timer);
68
+ reject(error);
69
+ });
70
+ child.once("close", (code) => {
71
+ clearTimeout(timer);
72
+ resolve(code);
73
+ });
74
+ });
75
+ const pid = Number(answered.trim());
76
+ if (status !== 0 || !Number.isInteger(pid) || pid <= 0) {
77
+ const said = complained.trim();
78
+ throw new Error(`${basename(stub)} could not start the background loop${said === "" ? "" : `: ${said}`}. Details: ${logPath}`);
79
+ }
80
+ return pid;
81
+ };
82
+ export const spawnDetached = async (logPath, launcher, args) => {
83
+ const stub = windowsLaunchStub(launcher);
84
+ const pid = stub === undefined ? spawnHere(logPath, launcher, args) : await spawnThroughStub(stub, logPath, launcher, args);
32
85
  for (let waited = 0; waited < SETTLE_MS; waited += SETTLE_POLL_MS) {
33
86
  await setTimeout(SETTLE_POLL_MS);
34
87
  if (!isProcessAlive(pid)) {
@@ -1 +1 @@
1
- {"version":3,"file":"detached.js","sourceRoot":"","sources":["../src/detached.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAalD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAW,EAAE;IACnD,IAAI,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAQ,KAA+B,CAAC,IAAI,KAAK,OAAO,CAAC;IAC7D,CAAC;AACL,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,OAAe,EAA+B,EAAE;IAC1E,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC,CAAC;AA8BF,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,cAAc,GAAG,GAAG,CAAC;AAS3B,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,OAAe,EAAE,QAAqB,EAAE,IAAuB,EAAmB,EAAE;IACpH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,QAAQ,CAAC;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACzG,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,gCAAgC,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI,cAAc,EAAE,CAAC;QAChE,MAAM,UAAU,CAAC,cAAc,CAAC,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4DAA4D,GAAG,eAAe,OAAO,EAAE,CAAC,CAAC;QAC7G,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC,CAAC"}
1
+ {"version":3,"file":"detached.js","sourceRoot":"","sources":["../src/detached.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { agentHome, writeSecretFile, type AgentHome, type Log } from "./home.js";
2
- export { cliLauncher, quotedCommandLine, type CliLauncher } from "./launcher.js";
3
- export { linuxDesktopEntry, macLaunchAgentXml, registerAutostart, unregisterAutostart, windowsRunAddArgs, windowsRunDeleteArgs, type AutostartSpec, type LaunchAgentSpec, } from "./autostart.js";
4
- export { isProcessAlive, livePid, spawnDetached } from "./detached.js";
2
+ export { cliLauncher, quotedCommandLine, stubCommand, WINDOWS_LAUNCH_STUB, windowsLaunchStub, type CliLauncher } from "./launcher.js";
3
+ export { clearWindowsRunValue, linuxDesktopEntry, macLaunchAgentXml, registerAutostart, setWindowsRunValue, unregisterAutostart, windowsRunAddArgs, windowsRunDeleteArgs, type AutostartSpec, type LaunchAgentSpec, } from "./autostart.js";
4
+ export { isProcessAlive, livePid, pidFileBody, spawnDetached } from "./detached.js";
5
5
  export { agentException } from "./text.js";
6
6
  export { asLabel, createUi, estimate, humanDuration, truncate, wrap, type Footnote, type PlanStep, type RowOutcome, type Ui, type UiMode, type UiProcess, } from "./ui.js";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EACH,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EACH,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,EAAE,EACP,KAAK,MAAM,EACX,KAAK,SAAS,GACjB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACtI,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EACH,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,EAAE,EACP,KAAK,MAAM,EACX,KAAK,SAAS,GACjB,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export { agentHome, writeSecretFile } from "./home.js";
2
- export { cliLauncher, quotedCommandLine } from "./launcher.js";
3
- export { linuxDesktopEntry, macLaunchAgentXml, registerAutostart, unregisterAutostart, windowsRunAddArgs, windowsRunDeleteArgs, } from "./autostart.js";
4
- export { isProcessAlive, livePid, spawnDetached } from "./detached.js";
2
+ export { cliLauncher, quotedCommandLine, stubCommand, WINDOWS_LAUNCH_STUB, windowsLaunchStub } from "./launcher.js";
3
+ export { clearWindowsRunValue, linuxDesktopEntry, macLaunchAgentXml, registerAutostart, setWindowsRunValue, unregisterAutostart, windowsRunAddArgs, windowsRunDeleteArgs, } from "./autostart.js";
4
+ export { isProcessAlive, livePid, pidFileBody, spawnDetached } from "./detached.js";
5
5
  export { agentException } from "./text.js";
6
6
  export { asLabel, createUi, estimate, humanDuration, truncate, wrap, } from "./ui.js";
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,eAAe,EAA4B,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAoB,MAAM,eAAe,CAAC;AACjF,OAAO,EACH,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GAGvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EACH,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,IAAI,GAOP,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,eAAe,EAA4B,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAoB,MAAM,eAAe,CAAC;AACtI,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GAGvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EACH,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,IAAI,GAOP,MAAM,SAAS,CAAC"}
@@ -1,4 +1,7 @@
1
1
  export type CliLauncher = readonly [string, ...string[]];
2
2
  export declare const cliLauncher: (cliName: string) => CliLauncher;
3
3
  export declare const quotedCommandLine: (argv: readonly string[]) => string;
4
+ export declare const WINDOWS_LAUNCH_STUB = "intentic-launch.exe";
5
+ export declare const windowsLaunchStub: (launcher: CliLauncher) => string | undefined;
6
+ export declare const stubCommand: (stub: string, logPath: string, argv: readonly string[]) => readonly [string, ...string[]];
4
7
  //# sourceMappingURL=launcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAKzD,eAAO,MAAM,WAAW,YAAa,MAAM,KAAG,WAM7C,CAAC;AAKF,eAAO,MAAM,iBAAiB,SAAU,SAAS,MAAM,EAAE,KAAG,MAAiD,CAAC"}
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAKzD,eAAO,MAAM,WAAW,YAAa,MAAM,KAAG,WAM7C,CAAC;AAKF,eAAO,MAAM,iBAAiB,SAAU,SAAS,MAAM,EAAE,KAAG,MAAiD,CAAC;AAc9G,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,eAAO,MAAM,iBAAiB,aAAc,WAAW,KAAG,MAAM,GAAG,SAMlE,CAAC;AAQF,eAAO,MAAM,WAAW,SAAU,MAAM,WAAW,MAAM,QAAQ,SAAS,MAAM,EAAE,KAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAMjH,CAAC"}
package/dist/launcher.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { existsSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
1
3
  const isBunVirtualEntry = (entry) => entry.includes("$bunfs") || entry.includes("~BUN");
2
4
  export const cliLauncher = (cliName) => {
3
5
  const entry = process.argv[1];
@@ -7,4 +9,19 @@ export const cliLauncher = (cliName) => {
7
9
  return isBunVirtualEntry(entry) ? [process.execPath] : [process.execPath, entry];
8
10
  };
9
11
  export const quotedCommandLine = (argv) => argv.map((arg) => `"${arg}"`).join(" ");
12
+ export const WINDOWS_LAUNCH_STUB = "intentic-launch.exe";
13
+ export const windowsLaunchStub = (launcher) => {
14
+ if (process.platform !== "win32") {
15
+ return undefined;
16
+ }
17
+ const candidate = join(dirname(launcher[0]), WINDOWS_LAUNCH_STUB);
18
+ return existsSync(candidate) ? candidate : undefined;
19
+ };
20
+ export const stubCommand = (stub, logPath, argv) => [
21
+ stub,
22
+ "--log",
23
+ logPath,
24
+ "--",
25
+ ...argv,
26
+ ];
10
27
  //# sourceMappingURL=launcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAkBA,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAGzG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAe,EAAE;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,wBAAwB,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrF,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAuB,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAoB1C,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAGzG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAe,EAAE;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,wBAAwB,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrF,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAuB,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAc9G,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAqB,EAAsB,EAAE;IAC3E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAClE,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,IAAuB,EAAkC,EAAE,CAAC;IACnH,IAAI;IACJ,OAAO;IACP,OAAO;IACP,IAAI;IACJ,GAAG,IAAI;CACV,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentic/local-agent",
3
- "version": "1.232.0",
3
+ "version": "1.233.0",
4
4
  "description": "The plumbing every intentic CLI that lives on a user's own computer needs, state home, login autostart, self-relaunch, detached background loop",
5
5
  "license": "MIT",
6
6
  "type": "module",