@intentic/local-agent 1.216.0 → 1.218.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 +23 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ui.d.ts +41 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +359 -0
- package/dist/ui.js.map +1 -0
- package/package.json +1 -1
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
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
|
package/dist/ui.d.ts.map
ADDED
|
@@ -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.
|
|
3
|
+
"version": "1.218.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",
|