@intentic/local-agent 1.217.0 → 1.218.1

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
@@ -11,6 +11,8 @@ The plumbing every intentic CLI that lives on a **user's own computer** needs, a
11
11
  HKCU\…\Run registerAutostart() — Windows, per-user, no elevation
12
12
  ~/Library/LaunchAgents/ registerAutostart() — macOS, opt-in per agent
13
13
  ~/.config/autostart/ registerAutostart() — Linux desktop session
14
+
15
+ stdout createUi(process) — the one renderer every agent speaks through
14
16
  ```
15
17
 
16
18
  ## Why it exists
@@ -20,8 +22,8 @@ Three agents ship to a user's machine and have nothing in common except how they
20
22
 
21
23
  | | what it does | uses |
22
24
  | --- | --- | --- |
23
- | [`@intentic/host`](../../_computers/host) | lets the sandbox's agent work on this computer | home, launcher, autostart, detached |
24
- | [`@intentic/sync`](../../_sandbox/sync) | mirrors files and ports between machine and sandbox | home, launcher, autostart, detached |
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
27
  | [`@intentic/acp-bridge`](../../_sandbox/acp-bridge) | lets an editor talk to the sandbox | home |
26
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
@@ -35,10 +37,13 @@ only one of them. It already had:
35
37
  - **The Windows console rule, the compiled-binary argv rule and "report what the tool actually said"** were each
36
38
  written out at length in two files, in prose, cross-referencing the other agent by name — including in
37
39
  ARCHITECTURE.md, which said host's spawns behave "for the reason `@intentic/sync` documents".
40
+ - **Each agent grew its own `out()` closure** writing straight to stdout, so every improvement to how one of
41
+ them reads landed in exactly one of them — while the install a user actually experiences is `ic` and these
42
+ agents in sequence, three voices deep.
38
43
 
39
44
  This package is those lessons as code, so the fourth agent inherits them by importing rather than by reading.
40
45
 
41
- ## The four pieces
46
+ ## The five pieces
42
47
 
43
48
  **`home.ts`** — `agentHome(name)` gives `{ dir, configPath }` under `~/.intentic/<name>`; `writeSecretFile`
44
49
  writes through a 0700 directory to a 0600 file. Both modes are re-applied on every write, because `mkdir` does
@@ -68,6 +73,20 @@ every spawn inside a loop — git and ssh in sync's bridge, docker and PowerShel
68
73
  otherwise. A pid proves the OS created a process; every caller turns it straight into a sentence promising the
69
74
  user their machine is now doing something.
70
75
 
76
+ **`ui.ts`** — `createUi(process)` is the whole of what an agent writes to a person, and the TypeScript twin of
77
+ `ic`'s `_sandbox/ic/src/ui.rs`. One question decides everything: is stdout a terminal. A **pipe** gets the
78
+ `intentic: [phase] message` marker stream and nothing else, because the desktop app parses it into a progress
79
+ bar and CI reads it out of a log — that shape is a contract, written down in
80
+ [docs/cli-output-protocol.md](../../docs/cli-output-protocol.md). A **terminal** gets a banner, a numbered
81
+ checklist with durations, one repainting status line and a ranked ending. And a third mode, **nested**, is what
82
+ makes an install read as one program rather than three: `ic` runs these agents inside its own checklist and
83
+ sets `INTENTIC_UI=nested`, so their output lands as detail under its step instead of opening a second banner in
84
+ the middle of somebody's setup.
85
+
86
+ The live region is deliberately **one line**, repainted with a carriage return. Redrawing a whole checklist in
87
+ place needs the cursor moved up N lines, which needs to know when a line wrapped — and these run under
88
+ `curl | sh` on terminals of unknown width. Everything already settled scrolls above it.
89
+
71
90
  ## What this package is not
72
91
 
73
92
  It knows nothing about sandboxes, tunnels, enrollment or MCP. It takes a name, a launcher and a spec, and makes a
@@ -81,3 +100,4 @@ business — which is why host's scopes and sync's Mutagen sessions are nowhere
81
100
  - [src/autostart.ts](src/autostart.ts) — login autostart, per platform.
82
101
  - [src/detached.ts](src/detached.ts) — the background loop, and surviving a closed terminal.
83
102
  - [src/launcher.ts](src/launcher.ts) — `cliLauncher()`, including the compiled-binary argv case.
103
+ - [src/ui.ts](src/ui.ts) — the renderer: the pipe/terminal/nested split, the checklist, the ranked ending.
package/dist/index.d.ts CHANGED
@@ -3,4 +3,5 @@ export { cliLauncher, quotedCommandLine, type CliLauncher } from "./launcher.js"
3
3
  export { linuxDesktopEntry, macLaunchAgentXml, registerAutostart, unregisterAutostart, windowsRunAddArgs, windowsRunDeleteArgs, type AutostartSpec, type LaunchAgentSpec, } from "./autostart.js";
4
4
  export { isProcessAlive, livePid, spawnDetached } from "./detached.js";
5
5
  export { agentException } from "./text.js";
6
+ export { asLabel, createUi, estimate, humanDuration, truncate, wrap, type Footnote, type PlanStep, type RowOutcome, type Ui, type UiMode, type UiProcess, } from "./ui.js";
6
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"}
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"}
package/dist/index.js CHANGED
@@ -3,4 +3,5 @@ export { cliLauncher, quotedCommandLine } from "./launcher.js";
3
3
  export { linuxDesktopEntry, macLaunchAgentXml, registerAutostart, unregisterAutostart, windowsRunAddArgs, windowsRunDeleteArgs, } from "./autostart.js";
4
4
  export { isProcessAlive, livePid, spawnDetached } from "./detached.js";
5
5
  export { agentException } from "./text.js";
6
+ export { asLabel, createUi, estimate, humanDuration, truncate, wrap, } from "./ui.js";
6
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"}
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"}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,41 @@
1
+ export type UiMode = "rich" | "plain" | "nested";
2
+ export interface PlanStep {
3
+ readonly phase: string;
4
+ readonly label: string;
5
+ readonly weight: number;
6
+ }
7
+ export type RowOutcome = "pass" | "warn" | "fail" | "skip";
8
+ export type Footnote = readonly [what: string, command: string];
9
+ export interface Ui {
10
+ readonly mode: UiMode;
11
+ begin: (title: string, plan?: readonly PlanStep[]) => void;
12
+ step: (phase: string, message: string) => void;
13
+ detail: (text: string) => void;
14
+ progress: (text: string) => void;
15
+ row: (outcome: RowOutcome, name: string, note?: string) => void;
16
+ note: (text: string) => void;
17
+ warn: (text: string) => void;
18
+ finished: (verdict: string, address: string | undefined, instruction: string, footnotes?: readonly Footnote[]) => void;
19
+ fail: (message: string) => void;
20
+ suspend: () => void;
21
+ resume: () => void;
22
+ close: () => void;
23
+ }
24
+ export interface UiProcess {
25
+ readonly stdout: {
26
+ write: (chunk: string) => unknown;
27
+ isTTY?: boolean | undefined;
28
+ columns?: number | undefined;
29
+ };
30
+ readonly stderr: {
31
+ write: (chunk: string) => unknown;
32
+ };
33
+ readonly env?: Record<string, string | undefined> | undefined;
34
+ }
35
+ export declare const wrap: (text: string, width: number) => string[];
36
+ export declare const truncate: (text: string, limit: number) => string;
37
+ export declare const humanDuration: (milliseconds: number) => string;
38
+ export declare const estimate: (totalWeight: number, consumed: number, elapsedSeconds: number) => string | undefined;
39
+ export declare const asLabel: (message: string) => string;
40
+ export declare const createUi: (process: UiProcess) => Ui;
41
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAmCA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAUjD,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAGD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAG3D,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAEhE,MAAM,WAAW,EAAE;IACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,QAAQ,EAAE,KAAK,IAAI,CAAC;IAE3D,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,GAAG,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,KAAK,IAAI,CAAC;IAEvH,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB,KAAK,EAAE,MAAM,IAAI,CAAC;CACrB;AAQD,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAClH,QAAQ,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;KAAE,CAAC;IACvD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;CACjE;AAuCD,eAAO,MAAM,IAAI,SAAU,MAAM,SAAS,MAAM,KAAG,MAAM,EAoBxD,CAAC;AAGF,eAAO,MAAM,QAAQ,SAAU,MAAM,SAAS,MAAM,KAAG,MAStD,CAAC;AAGF,eAAO,MAAM,aAAa,iBAAkB,MAAM,KAAG,MASpD,CAAC;AASF,eAAO,MAAM,QAAQ,gBAAiB,MAAM,YAAY,MAAM,kBAAkB,MAAM,KAAG,MAAM,GAAG,SAOjG,CAAC;AAGF,eAAO,MAAM,OAAO,YAAa,MAAM,KAAG,MAGzC,CAAC;AAuBF,eAAO,MAAM,QAAQ,YAAa,SAAS,KAAG,EAwU7C,CAAC"}
package/dist/ui.js ADDED
@@ -0,0 +1,359 @@
1
+ const UNICODE = { ok: "✓", fail: "✗", warn: "!", skip: "·", spinner: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] };
2
+ const ASCII = { ok: "+", fail: "x", warn: "!", skip: "-", spinner: ["|", "/", "-", "\\"] };
3
+ const DIM = "\u001b[2m";
4
+ const BOLD = "\u001b[1m";
5
+ const GREEN = "\u001b[32m";
6
+ const RED = "\u001b[31m";
7
+ const YELLOW = "\u001b[33m";
8
+ const CYAN = "\u001b[36m";
9
+ const RESET = "\u001b[0m";
10
+ const TICK_MS = 110;
11
+ const ESTIMATE_FLOOR_SECONDS = 20;
12
+ export const wrap = (text, width) => {
13
+ if (width < 20) {
14
+ return [text];
15
+ }
16
+ const lines = [];
17
+ let current = "";
18
+ for (const word of text.split(/\s+/u).filter((part) => part !== "")) {
19
+ if (current === "") {
20
+ current = word;
21
+ }
22
+ else if ([...current].length + 1 + [...word].length <= width) {
23
+ current = `${current} ${word}`;
24
+ }
25
+ else {
26
+ lines.push(current);
27
+ current = word;
28
+ }
29
+ }
30
+ if (current !== "") {
31
+ lines.push(current);
32
+ }
33
+ return lines.length === 0 ? [""] : lines;
34
+ };
35
+ export const truncate = (text, limit) => {
36
+ const characters = [...text];
37
+ if (characters.length <= limit) {
38
+ return text;
39
+ }
40
+ if (limit <= 1) {
41
+ return "";
42
+ }
43
+ return `${characters.slice(0, limit - 1).join("")}…`;
44
+ };
45
+ export const humanDuration = (milliseconds) => {
46
+ const seconds = Math.floor(Math.max(0, milliseconds) / 1000);
47
+ if (seconds >= 90) {
48
+ return `${Math.round(seconds / 60)}m`;
49
+ }
50
+ if (seconds >= 10) {
51
+ return `${seconds}s`;
52
+ }
53
+ return `${(Math.max(0, milliseconds) / 1000).toFixed(1)}s`;
54
+ };
55
+ export const estimate = (totalWeight, consumed, elapsedSeconds) => {
56
+ if (totalWeight <= 0 || consumed < 1) {
57
+ return undefined;
58
+ }
59
+ const pace = Math.min(3, Math.max(0.5, elapsedSeconds / consumed));
60
+ const left = Math.max(0, (totalWeight - consumed) * pace);
61
+ return left < ESTIMATE_FLOOR_SECONDS ? undefined : humanDuration(left * 1000);
62
+ };
63
+ export const asLabel = (message) => {
64
+ const trimmed = message.replace(/[…. ]+$/u, "");
65
+ return trimmed === "" ? "" : trimmed[0].toUpperCase() + trimmed.slice(1);
66
+ };
67
+ const detectMode = (process) => {
68
+ const forced = process.env?.["INTENTIC_UI"];
69
+ if (forced === "plain" || forced === "rich" || forced === "nested") {
70
+ return forced;
71
+ }
72
+ if (process.env?.["INTENTIC_PLAIN"] === "1") {
73
+ return "plain";
74
+ }
75
+ return process.stdout.isTTY === true ? "rich" : "plain";
76
+ };
77
+ export const createUi = (process) => {
78
+ const mode = detectMode(process);
79
+ const env = process.env ?? {};
80
+ const colour = mode !== "plain" && (env["FORCE_COLOR"] !== undefined || env["NO_COLOR"] === undefined);
81
+ const width = Math.min(120, Math.max(40, process.stdout.columns ?? 80));
82
+ const glyphs = colour ? UNICODE : ASCII;
83
+ const paint = (text, code) => (colour ? `${code}${text}${RESET}` : text);
84
+ const out = (text) => void process.stdout.write(text);
85
+ let plan = [];
86
+ let index;
87
+ let ordinal = 0;
88
+ let label = "";
89
+ let detailText = "";
90
+ let started = Date.now();
91
+ let stepStarted = Date.now();
92
+ let frame = 0;
93
+ let live = false;
94
+ let suspended = false;
95
+ let behind = 0;
96
+ let ticker;
97
+ const totalWeight = () => plan.reduce((sum, step) => sum + step.weight, 0);
98
+ const stepFraction = () => {
99
+ if (index === undefined) {
100
+ return 0;
101
+ }
102
+ const weight = plan[index]?.weight ?? 0;
103
+ return weight <= 0 ? 0 : Math.min(0.9, (Date.now() - stepStarted) / 1000 / weight);
104
+ };
105
+ const remaining = () => {
106
+ if (index === undefined) {
107
+ return undefined;
108
+ }
109
+ return estimate(totalWeight(), behind + (plan[index]?.weight ?? 0) * stepFraction(), (Date.now() - started) / 1000);
110
+ };
111
+ const erase = () => {
112
+ if (!live) {
113
+ return;
114
+ }
115
+ out(`\r${" ".repeat(width)}\r`);
116
+ live = false;
117
+ };
118
+ const repaint = () => {
119
+ if (mode !== "rich" || suspended || label === "") {
120
+ return;
121
+ }
122
+ const spinner = glyphs.spinner[frame % glyphs.spinner.length] ?? "";
123
+ const elapsed = humanDuration(Date.now() - stepStarted);
124
+ const left = remaining();
125
+ const right = left === undefined || Date.now() - stepStarted < 5000 ? elapsed : `${elapsed} · ~${left} left`;
126
+ const head = ` ${spinner} ${String(ordinal).padStart(2)} ${label}`;
127
+ const budget = width - 1;
128
+ const fixed = [...head].length + [...right].length + 1;
129
+ const middle = detailText === "" ? "" : truncate(` · ${detailText}`, Math.max(0, budget - fixed));
130
+ const pad = " ".repeat(Math.max(0, budget - fixed - [...middle].length));
131
+ const text = colour
132
+ ? ` ${paint(spinner, CYAN)} ${paint(String(ordinal).padStart(2), DIM)} ${label}${middle === "" ? "" : paint(middle, DIM)}${pad} ${paint(right, DIM)}`
133
+ : `${head}${middle}${pad} ${right}`;
134
+ out(`\r${text}`);
135
+ live = true;
136
+ };
137
+ const above = (text) => {
138
+ erase();
139
+ out(`${text}\n`);
140
+ repaint();
141
+ };
142
+ const startTicker = () => {
143
+ if (mode !== "rich" || ticker !== undefined) {
144
+ return;
145
+ }
146
+ ticker = setInterval(() => {
147
+ frame += 1;
148
+ repaint();
149
+ }, TICK_MS);
150
+ ticker.unref?.();
151
+ };
152
+ const settle = () => {
153
+ if (label === "") {
154
+ return;
155
+ }
156
+ erase();
157
+ if (index !== undefined) {
158
+ behind += plan[index]?.weight ?? 0;
159
+ }
160
+ const took = humanDuration(Date.now() - stepStarted);
161
+ const bare = ` x ${String(ordinal).padStart(2)} ${label}`;
162
+ const pad = " ".repeat(Math.max(0, width - 1 - [...bare].length - [...took].length));
163
+ out(` ${paint(glyphs.ok, GREEN)} ${paint(String(ordinal).padStart(2), DIM)} ${label}${pad}${paint(took, DIM)}\n`);
164
+ label = "";
165
+ detailText = "";
166
+ };
167
+ const nestedLine = (text, marker) => {
168
+ for (const [at, part] of wrap(text, width - 10).entries()) {
169
+ const lead = at === 0 && marker !== undefined ? ` ${marker} ` : " ";
170
+ above(`${lead}${paint(part, DIM)}`);
171
+ }
172
+ };
173
+ return {
174
+ mode,
175
+ begin: (title, steps = []) => {
176
+ plan = steps;
177
+ started = Date.now();
178
+ if (mode !== "rich") {
179
+ return;
180
+ }
181
+ out("\n");
182
+ out(` ${paint(title, BOLD)}\n`);
183
+ if (steps.length > 0) {
184
+ const seconds = steps.reduce((sum, step) => sum + step.weight, 0);
185
+ const minutes = Math.max(1, Math.round(seconds / 60));
186
+ out(`${paint(` ${steps.length} steps, roughly ${minutes} minute${minutes === 1 ? "" : "s"}.`, DIM)}\n`);
187
+ }
188
+ out("\n");
189
+ startTicker();
190
+ },
191
+ step: (phase, message) => {
192
+ if (mode === "plain") {
193
+ out(`intentic: [${phase}] ${message}\n`);
194
+ return;
195
+ }
196
+ if (mode === "nested") {
197
+ nestedLine(asLabel(message));
198
+ return;
199
+ }
200
+ settle();
201
+ const found = plan.findIndex((planned) => planned.phase === phase);
202
+ const at = found >= 0 && (index === undefined || found >= index) ? found : undefined;
203
+ index = at;
204
+ label = at === undefined ? asLabel(message) : (plan[at]?.label ?? asLabel(message));
205
+ detailText = "";
206
+ ordinal += 1;
207
+ stepStarted = Date.now();
208
+ frame = 0;
209
+ startTicker();
210
+ repaint();
211
+ },
212
+ detail: (text) => {
213
+ if (mode !== "rich" || detailText === text) {
214
+ return;
215
+ }
216
+ detailText = text;
217
+ repaint();
218
+ },
219
+ progress: (text) => {
220
+ if (mode === "plain") {
221
+ out(` ${text}\n`);
222
+ return;
223
+ }
224
+ if (mode === "nested") {
225
+ nestedLine(text);
226
+ return;
227
+ }
228
+ detailText = text;
229
+ repaint();
230
+ },
231
+ row: (outcome, name, note = "") => {
232
+ if (mode === "plain") {
233
+ const tail = note === "" ? "" : ` — ${note}`;
234
+ const word = outcome === "pass" ? "ok " : outcome === "fail" ? "FAIL" : outcome === "warn" ? "warn" : "skip";
235
+ out(` ${word} ${name}${tail}\n`);
236
+ return;
237
+ }
238
+ const glyph = outcome === "pass" ? glyphs.ok : outcome === "fail" ? glyphs.fail : outcome === "warn" ? glyphs.warn : glyphs.skip;
239
+ const code = outcome === "pass" ? GREEN : outcome === "fail" ? RED : outcome === "warn" ? YELLOW : DIM;
240
+ const body = note === "" ? name : `${name} — ${note}`;
241
+ for (const [at, part] of wrap(body, width - 10).entries()) {
242
+ above(at === 0 ? ` ${paint(glyph, code)} ${paint(part, DIM)}` : ` ${paint(part, DIM)}`);
243
+ }
244
+ },
245
+ note: (text) => {
246
+ if (mode === "plain") {
247
+ out(`intentic: ${text}\n`);
248
+ return;
249
+ }
250
+ for (const part of wrap(text, width - 8)) {
251
+ above(` ${paint(part, DIM)}`);
252
+ }
253
+ },
254
+ warn: (text) => {
255
+ if (mode === "plain") {
256
+ for (const [at, part] of text.split("\n").entries()) {
257
+ process.stderr.write(at === 0 ? `intentic: ${part}\n` : ` ${part}\n`);
258
+ }
259
+ return;
260
+ }
261
+ let first = true;
262
+ for (const paragraph of text.split("\n")) {
263
+ for (const part of wrap(paragraph, width - 9)) {
264
+ above(first ? ` ${paint(glyphs.warn, YELLOW)} ${paint(part, DIM)}` : ` ${paint(part, DIM)}`);
265
+ first = false;
266
+ }
267
+ }
268
+ },
269
+ finished: (verdict, address, instruction, footnotes = []) => {
270
+ if (mode === "plain") {
271
+ out(`${verdict}\n`);
272
+ if (address !== undefined) {
273
+ out(`${address}\n`);
274
+ }
275
+ if (instruction !== "") {
276
+ out(`${instruction}\n`);
277
+ }
278
+ for (const [what, command] of footnotes) {
279
+ out(`${what}: ${command}\n`);
280
+ }
281
+ return;
282
+ }
283
+ if (mode === "nested") {
284
+ nestedLine(verdict, paint(glyphs.ok, GREEN));
285
+ if (address !== undefined) {
286
+ nestedLine(address);
287
+ }
288
+ return;
289
+ }
290
+ settle();
291
+ const took = `took ${humanDuration(Date.now() - started)}`;
292
+ const pad = " ".repeat(Math.max(1, width - 6 - [...verdict].length - [...took].length));
293
+ out("\n");
294
+ out(` ${paint(glyphs.ok, GREEN)} ${paint(verdict, BOLD)}${pad}${paint(took, DIM)}\n`);
295
+ if (address !== undefined) {
296
+ out(`\n ${paint(address, CYAN)}\n`);
297
+ }
298
+ if (instruction !== "") {
299
+ out(`\n ${instruction}\n`);
300
+ }
301
+ if (footnotes.length > 0) {
302
+ out("\n");
303
+ const column = Math.max(...footnotes.map(([what]) => [...what].length));
304
+ for (const [at, [what, command]] of footnotes.entries()) {
305
+ const heading = (at === 0 ? "later" : "").padEnd(6);
306
+ out(`${paint(truncate(` ${heading} ${what.padEnd(column)} ${command}`, width), DIM)}\n`);
307
+ }
308
+ }
309
+ out("\n");
310
+ },
311
+ fail: (message) => {
312
+ if (mode === "plain") {
313
+ process.stderr.write(`error: ${message}\n`);
314
+ return;
315
+ }
316
+ erase();
317
+ if (mode === "nested") {
318
+ for (const [at, part] of wrap(message, width - 10).entries()) {
319
+ process.stderr.write(`${at === 0 ? ` ${paint(glyphs.fail, RED)} ` : " "}${paint(part, RED)}\n`);
320
+ }
321
+ return;
322
+ }
323
+ const [first = "", ...rest] = message.split("\n");
324
+ process.stderr.write("\n");
325
+ for (const [at, part] of wrap(first, width - 6).entries()) {
326
+ process.stderr.write(`${at === 0 ? ` ${paint(glyphs.fail, RED)} ` : " "}${paint(part, RED)}\n`);
327
+ }
328
+ for (const line of rest) {
329
+ const trimmed = line.trimEnd();
330
+ process.stderr.write(trimmed === "" ? "\n" : ` ${trimmed}\n`);
331
+ }
332
+ process.stderr.write("\n");
333
+ },
334
+ suspend: () => {
335
+ if (mode !== "rich") {
336
+ return;
337
+ }
338
+ erase();
339
+ suspended = true;
340
+ },
341
+ resume: () => {
342
+ if (mode !== "rich") {
343
+ return;
344
+ }
345
+ suspended = false;
346
+ repaint();
347
+ },
348
+ close: () => {
349
+ if (mode === "rich") {
350
+ settle();
351
+ }
352
+ if (ticker !== undefined) {
353
+ clearInterval(ticker);
354
+ ticker = undefined;
355
+ }
356
+ },
357
+ };
358
+ };
359
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentic/local-agent",
3
- "version": "1.217.0",
3
+ "version": "1.218.1",
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",