@intentic/machine 1.303.0 → 1.305.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 +111 -52
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +2 -5
- package/dist/app.js.map +1 -1
- package/dist/commands.d.ts +1 -9
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +41 -27
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/daemon-base.d.ts +4 -3
- package/dist/daemon-base.d.ts.map +1 -1
- package/dist/daemon-base.js.map +1 -1
- package/dist/device/auto-prepare.js +3 -3
- package/dist/device/auto-prepare.js.map +1 -1
- package/dist/device/commands.d.ts +2 -1
- package/dist/device/commands.d.ts.map +1 -1
- package/dist/device/commands.js +48 -30
- package/dist/device/commands.js.map +1 -1
- package/dist/device/config.d.ts +17 -12
- package/dist/device/config.d.ts.map +1 -1
- package/dist/device/config.js +29 -17
- package/dist/device/config.js.map +1 -1
- package/dist/device/connection.d.ts +3 -1
- package/dist/device/connection.d.ts.map +1 -1
- package/dist/device/connection.js +7 -3
- package/dist/device/connection.js.map +1 -1
- package/dist/device/mcp.js.map +1 -1
- package/dist/device/policy.d.ts +4 -4
- package/dist/device/policy.d.ts.map +1 -1
- package/dist/device/policy.js.map +1 -1
- package/dist/device/router.d.ts +76 -3
- package/dist/device/router.d.ts.map +1 -1
- package/dist/device/router.js +12 -4
- package/dist/device/router.js.map +1 -1
- package/dist/device/tools/agent.d.ts +3 -3
- package/dist/device/tools/agent.d.ts.map +1 -1
- package/dist/device/tools/agent.js +25 -11
- package/dist/device/tools/agent.js.map +1 -1
- package/dist/device/tools/apps.d.ts +6 -6
- package/dist/device/tools/apps.d.ts.map +1 -1
- package/dist/device/tools/apps.js.map +1 -1
- package/dist/device/tools/browser.d.ts +9 -9
- package/dist/device/tools/browser.d.ts.map +1 -1
- package/dist/device/tools/browser.js.map +1 -1
- package/dist/device/tools/describe.d.ts +5 -3
- package/dist/device/tools/describe.d.ts.map +1 -1
- package/dist/device/tools/describe.js +19 -2
- package/dist/device/tools/describe.js.map +1 -1
- package/dist/device/tools/device.d.ts +2 -2
- package/dist/device/tools/device.d.ts.map +1 -1
- package/dist/device/tools/device.js.map +1 -1
- package/dist/device/tools/files.d.ts +5 -5
- package/dist/device/tools/files.d.ts.map +1 -1
- package/dist/device/tools/files.js.map +1 -1
- package/dist/device/tools/sandboxes.d.ts +16 -11
- package/dist/device/tools/sandboxes.d.ts.map +1 -1
- package/dist/device/tools/sandboxes.js +36 -54
- package/dist/device/tools/sandboxes.js.map +1 -1
- package/dist/device/tools/shell.d.ts +2 -24
- package/dist/device/tools/shell.d.ts.map +1 -1
- package/dist/device/tools/shell.js +2 -53
- package/dist/device/tools/shell.js.map +1 -1
- package/dist/environments/auto-upgrade.d.ts +20 -0
- package/dist/environments/auto-upgrade.d.ts.map +1 -0
- package/dist/environments/auto-upgrade.js +77 -0
- package/dist/environments/auto-upgrade.js.map +1 -0
- package/dist/environments/children.d.ts +27 -0
- package/dist/environments/children.d.ts.map +1 -0
- package/dist/environments/children.js +106 -0
- package/dist/environments/children.js.map +1 -0
- package/dist/environments/commands.d.ts +12 -0
- package/dist/environments/commands.d.ts.map +1 -0
- package/dist/environments/commands.js +102 -0
- package/dist/environments/commands.js.map +1 -0
- package/dist/environments/crossing.d.ts +31 -0
- package/dist/environments/crossing.d.ts.map +1 -0
- package/dist/environments/crossing.js +64 -0
- package/dist/environments/crossing.js.map +1 -0
- package/dist/environments/machine-upgrade.d.ts +26 -0
- package/dist/environments/machine-upgrade.d.ts.map +1 -0
- package/dist/environments/machine-upgrade.js +153 -0
- package/dist/environments/machine-upgrade.js.map +1 -0
- package/dist/environments/machine.d.ts +29 -0
- package/dist/environments/machine.d.ts.map +1 -0
- package/dist/environments/machine.js +88 -0
- package/dist/environments/machine.js.map +1 -0
- package/dist/install.d.ts +4 -6
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +35 -47
- package/dist/install.js.map +1 -1
- package/dist/installed.d.ts +1 -1
- package/dist/installed.d.ts.map +1 -1
- package/dist/installed.js +3 -8
- package/dist/installed.js.map +1 -1
- package/dist/release.d.ts +27 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +132 -0
- package/dist/release.js.map +1 -0
- package/dist/resident.d.ts +12 -6
- package/dist/resident.d.ts.map +1 -1
- package/dist/resident.js +163 -84
- package/dist/resident.js.map +1 -1
- package/dist/status.d.ts +3 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +21 -7
- package/dist/status.js.map +1 -1
- package/dist/supervision.d.ts +11 -0
- package/dist/supervision.d.ts.map +1 -0
- package/dist/supervision.js +98 -0
- package/dist/supervision.js.map +1 -0
- package/dist/sync/commands.d.ts.map +1 -1
- package/dist/sync/commands.js +7 -5
- package/dist/sync/commands.js.map +1 -1
- package/dist/sync/config.d.ts +0 -1
- package/dist/sync/config.d.ts.map +1 -1
- package/dist/sync/config.js +0 -1
- package/dist/sync/config.js.map +1 -1
- package/dist/sync/mirror.d.ts +1 -2
- package/dist/sync/mirror.d.ts.map +1 -1
- package/dist/sync/mirror.js +2 -3
- package/dist/sync/mirror.js.map +1 -1
- package/dist/sync/mutagen.d.ts +0 -8
- package/dist/sync/mutagen.d.ts.map +1 -1
- package/dist/sync/mutagen.js +12 -80
- package/dist/sync/mutagen.js.map +1 -1
- package/dist/sync/report.d.ts +2 -0
- package/dist/sync/report.d.ts.map +1 -1
- package/dist/sync/report.js +4 -2
- package/dist/sync/report.js.map +1 -1
- package/dist/sync/residue.d.ts.map +1 -1
- package/dist/sync/residue.js +8 -0
- package/dist/sync/residue.js.map +1 -1
- package/dist/upgrade.d.ts +7 -16
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +93 -116
- package/dist/upgrade.js.map +1 -1
- package/dist/wsl.d.ts +6 -0
- package/dist/wsl.d.ts.map +1 -1
- package/dist/wsl.js +23 -2
- package/dist/wsl.js.map +1 -1
- package/package.json +12 -12
- package/dist/device/testing.d.ts +0 -10
- package/dist/device/testing.d.ts.map +0 -1
- package/dist/device/testing.js +0 -51
- package/dist/device/testing.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# @intentic/machine
|
|
2
2
|
|
|
3
3
|
The one agent that lives on a user's own device: it lets a sandbox's agent work on the machine, and keeps the
|
|
4
|
-
machine's folders and ports mirrored with the sandbox — one binary, one resident
|
|
4
|
+
machine's folders and ports mirrored with the sandbox — one binary, one resident agent per OS install, and one version
|
|
5
|
+
across the whole computer.
|
|
5
6
|
|
|
6
7
|
It replaces two agents (`@intentic/host` and `@intentic/sync`) that shared everything about *being installed* —
|
|
7
|
-
a resident
|
|
8
|
+
a resident agent, a pidfile, a login entry, an updater, a ~90 MB compiled binary — and nothing about what they
|
|
8
9
|
did. Merging them halves what a machine downloads and keeps resident, and gives "is this machine's agent
|
|
9
10
|
running" one answer instead of two halves of one.
|
|
10
11
|
|
|
@@ -13,7 +14,7 @@ running" one answer instead of two halves of one.
|
|
|
13
14
|
The **device half** (`src/device/`, the machine side of the `host` capability):
|
|
14
15
|
|
|
15
16
|
- Dial each linked sandbox — one outbound WebSocket, enrollment token in the first frame, oRPC after that; the
|
|
16
|
-
machine *serves* `
|
|
17
|
+
machine *serves* `deviceContract`, so no port ever opens here. Where it dials is the shared resolver's answer
|
|
17
18
|
(below), re-asked on every reconnect, so a sandbox on this very machine stays connected with its tunnel down.
|
|
18
19
|
- Expose the tool surface (`run_command`, files, screenshot, `describe`; deliberately no delete — trash is
|
|
19
20
|
recoverable) as MCP carried verbatim, so a machine can learn a tool without a daemon release.
|
|
@@ -26,12 +27,20 @@ The **device half** (`src/device/`, the machine side of the `host` capability):
|
|
|
26
27
|
their logs. `reshape` changes a sandbox's share or privileges through `ic sandbox reshape` on the same
|
|
27
28
|
switch as the swaps, because another reshape undoes it; its ask is a closed form (two caps, two switches)
|
|
28
29
|
spelled into `ic` flags here, so nothing a browser or a model sends reaches docker as text. `describe`
|
|
29
|
-
reports the docker engine's size beside the OS, which is
|
|
30
|
+
reports the docker engine's size beside the OS, which is all those caps can amount to.
|
|
31
|
+
- **Drop the links nothing answers** (`intentic-machine device forget-unreachable`, and the button the sandbox's
|
|
32
|
+
Devices tab draws for it): a deleted or recreated sandbox leaves its side of the link here, and the agent re-dials
|
|
33
|
+
that address for as long as the machine runs. Only the resident agent's own live stamp decides what counts as gone
|
|
34
|
+
(`src/device/config.ts`), so a machine whose agent is stopped drops **nothing** — "I can't reach it" and "I'm not
|
|
35
|
+
running" are the same sentence from a config file, and only one of them is a reason to delete a link.
|
|
36
|
+
- **Drop a link the sandbox revoked**, at once: the sandbox closes the socket with 1008 after reading its own
|
|
37
|
+
enrollments, which no redial heals, so the link leaves `device.json` rather than being dialled at every start.
|
|
30
38
|
- Keep each local sandbox's **next update downloaded** (`src/device/auto-prepare.ts`): a background tick
|
|
31
39
|
runs `ic sandbox prepare <slug> --auto` every few hours, so the web app's update card offers a half-minute
|
|
32
|
-
restart instead of minutes of pulling. On by default; the switch is `intentic-machine
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
restart instead of minutes of pulling. On by default; the switch is `intentic-machine updates --sandboxes off`
|
|
41
|
+
(kept in `machine.json`, re-read every tick). Only the machine's root runs it (see **One machine**): every
|
|
42
|
+
environment of a PC talks to the one Docker engine, and two ticks would pull the same image twice. Nothing in any
|
|
43
|
+
sandbox can start or steer the tick — a sandbox only learns the outcome through the staged marker `ic` writes.
|
|
35
44
|
|
|
36
45
|
The **sync half** (`src/sync/`, the machine side of desktop sync):
|
|
37
46
|
|
|
@@ -77,9 +86,10 @@ The **sync half** (`src/sync/`, the machine side of desktop sync):
|
|
|
77
86
|
- Register Mutagen's daemon for login autostart — on Windows through the launcher stub, because Mutagen's own
|
|
78
87
|
registration flashes a console window at every boot.
|
|
79
88
|
|
|
80
|
-
**Shared** (`src/`): the one resident
|
|
81
|
-
app's tray reads
|
|
82
|
-
|
|
89
|
+
**Shared** (`src/`): the one resident agent (`run`), the merged `status` (its `--json` envelope is what the desktop
|
|
90
|
+
app's tray reads, and the sandbox asks the running agent for the same report over the device connection's `report`
|
|
91
|
+
call, behind "Run commands"), the machine-wide `upgrade` with automatic rollback, the `updates` switches, the autostart
|
|
92
|
+
spec, and **where a sandbox's daemon is dialled** ([src/daemon-base.ts](src/daemon-base.ts)). A sandbox usually runs in a container on this very
|
|
83
93
|
machine, which publishes its daemon on `127.0.0.1:<port derived from the sandbox id>`, so every dial either half
|
|
84
94
|
makes — the device socket, both enrollments, the sync transport, the ports poll, the machine report — tries
|
|
85
95
|
that address first and the public URL last. A candidate is adopted only if the daemon's unauthenticated
|
|
@@ -91,51 +101,92 @@ tab, with every button there gone, while this same process was polling it over l
|
|
|
91
101
|
a pairing sitting on the public URL each minute, so a container started later is promoted with no restart; the
|
|
92
102
|
socket re-resolves on every reconnect.
|
|
93
103
|
|
|
94
|
-
## The resident
|
|
95
|
-
|
|
96
|
-
`intentic-machine run --foreground` (what systemd, launchd
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
-
|
|
100
|
-
|
|
101
|
-
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
104
|
+
## The resident agent
|
|
105
|
+
|
|
106
|
+
`intentic-machine run --foreground` (what systemd, launchd, the Windows logon task and, for a distro, its Windows side
|
|
107
|
+
run) serves everything this environment holds in one process ([src/resident.ts](src/resident.ts)):
|
|
108
|
+
|
|
109
|
+
- **Configuration is re-read, never restarted for.** Every tick re-reads the links (`device.json`), the sync pairings
|
|
110
|
+
(`sync.json`) and, on Windows, the distros it keeps running (`machine.json`): a new link is dialled, a removed or
|
|
111
|
+
re-enrolled one is closed, and a pairing added later starts the sync half in this same process. So `setup`,
|
|
112
|
+
`uninstall`, `forget-unreachable` and a scope push leave every other sandbox's socket and every sync transport
|
|
113
|
+
alone; only a new binary or `run` restarts the agent. `device setup` waits for the agent's own stamp to show the new
|
|
114
|
+
link's socket open before it says "connected".
|
|
115
|
+
- It exits — and takes its login entry with it — only when links, pairings and kept distros are all **readably**
|
|
116
|
+
empty. A config that exists and will not parse is logged and the agent keeps what it already runs: retiring the login
|
|
117
|
+
entry is a decision nothing but a fresh install undoes, and one unreadable file must not be able to make it.
|
|
118
|
+
- **One agent per environment.** The pidfile (JSON: pid, the boot it belongs to, the build it runs, who restarts it) is
|
|
119
|
+
claimed by writing it and re-reading after a settle, so two agents started at the same moment cannot both keep it, and
|
|
120
|
+
it is re-checked every tick as a lease: an agent that finds another pid there leaves with exit 75.
|
|
121
|
+
- **Every start goes through the supervisor** ([src/supervision.ts](src/supervision.ts)): `schtasks /run` for the logon
|
|
122
|
+
task, `systemctl --user start`, launchd, or the Windows side for a distro it keeps; a bare detached spawn only where
|
|
123
|
+
nothing supervises. The running agent settles its own entry once as it starts: it puts back one lost to a tidied Run
|
|
124
|
+
key or a reset profile, and a distro kept by its Windows side removes its own, so each agent has exactly one starter.
|
|
125
|
+
- On a signal it exits `128+signal`, never 0: a supervisor must restart what it did not stop, and the incident that
|
|
126
|
+
bought that rule is written out in [src/sync/mirror.ts](src/sync/mirror.ts).
|
|
127
|
+
- It stamps **what each link's socket is doing** into `links.tick` every five seconds: the only process that knows is
|
|
128
|
+
this one and the only process that is asked is `status`, in another terminal. See **Linked vs connected**.
|
|
129
|
+
- State files are written whole: every write lands beside the file and replaces it by rename, so no reader ever sees a
|
|
130
|
+
torn `device.json` and mistakes it for an empty one.
|
|
131
|
+
|
|
132
|
+
## One machine: Windows and its distros
|
|
133
|
+
|
|
134
|
+
A Windows PC with WSL runs one agent per OS install — Mutagen has to watch a distro's folder from inside that distro —
|
|
135
|
+
but it is one computer, so it has one version and one supervisor tree
|
|
136
|
+
([machines-and-environments.md](../../docs/design/machines-and-environments.md)).
|
|
137
|
+
|
|
138
|
+
- **The Windows side is the root, and each distro with an agent is its child.** The root holds one `wsl.exe` session
|
|
139
|
+
per child ([src/environments/children.ts](src/environments/children.ts)): the session boots the distro at sign-in,
|
|
140
|
+
keeps WSL from shutting the VM down once its last client leaves, and restarts the distro's agent on a ladder from one
|
|
141
|
+
second to five minutes when it crashes. A child that exits 0 (nothing left to serve), has no agent any more, or is
|
|
142
|
+
gone from `wsl -l` is taken off the list.
|
|
143
|
+
- **A distro hands itself over.** A distro agent that finds a Windows agent through interop asks it to take over
|
|
144
|
+
(the hidden `environment attach <distro>`), removes its own systemd entry and is restarted by the root from then on.
|
|
145
|
+
A Windows `setup` adopts distros already running an agent. A distro whose Windows side has no agent looks after
|
|
146
|
+
itself, and is the root of its own machine.
|
|
147
|
+
- **One upgrade path** ([src/environments/machine-upgrade.ts](src/environments/machine-upgrade.ts)). `intentic-machine upgrade`, from
|
|
148
|
+
any side, moves the whole PC to one exact release: the newest of the published one and every side's installed one,
|
|
149
|
+
never backwards. A distro hands the job to its Windows side; the root upgrades its distros first and itself last,
|
|
150
|
+
since its own restart ends the stream a sandbox is reading. Each side still downloads the tagged asset, probes it,
|
|
151
|
+
swaps it in, restarts through its supervisor, checks the build that came up and rolls back when it did not
|
|
152
|
+
([src/upgrade.ts](src/upgrade.ts)), under a per-environment lock so two upgrades never share a download. The Windows
|
|
153
|
+
launcher is pinned to the same release and swapped with the agent.
|
|
154
|
+
- **Automatic updates** ([src/environments/auto-upgrade.ts](src/environments/auto-upgrade.ts)). The root compares its
|
|
155
|
+
sides every hour and brings a lagging one level, and asks the release channel about every six hours, first a few
|
|
156
|
+
jittered minutes after it starts. A target that failed is retried after 1, 2, 4… hours, a day at most, and a build
|
|
157
|
+
from source is never touched. `intentic-machine updates --agent off` stops the release check but not the levelling,
|
|
158
|
+
since sides on different versions is never a state worth keeping; `--sandboxes off` is the image switch above. Both
|
|
159
|
+
switches are the root's, and a distro hands the command to it.
|
|
160
|
+
- **Setup lands on the machine's version.** Every `setup` first moves its own side onto the newest version the channel
|
|
161
|
+
or any side has, re-execs, and once enrolled brings the rest of the PC level in the background.
|
|
162
|
+
- **Uninstall stays per environment**, because links and grants differ per side. The Windows side keeps running while
|
|
163
|
+
it still keeps a distro, and says so.
|
|
112
164
|
|
|
113
165
|
### Installed vs running
|
|
114
166
|
|
|
115
|
-
Two facts, and every surface
|
|
116
|
-
`bin/intentic-machine` ([src/installed.ts](src/installed.ts)); `
|
|
117
|
-
They drift whenever a binary lands without a restart — a
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
its loop posts to and its installed build to one reading over a `host` capability.
|
|
167
|
+
Two facts, and every surface carries both. `agent.installed` in the machine report is the **file** at
|
|
168
|
+
`bin/intentic-machine` ([src/installed.ts](src/installed.ts)); `agent.build` is the **agent** running from it, as its
|
|
169
|
+
pidfile stamps it. They drift whenever a binary lands without a restart — a copy dropped in, a swap whose restart did
|
|
170
|
+
not take — and a report that carried one version would answer the running build to one reader and the installed build
|
|
171
|
+
to another.
|
|
121
172
|
|
|
122
173
|
- `intentic-machine status` says which is which, and the summary the tray reads leads with `OLD BUILD RUNNING`.
|
|
123
174
|
- The Devices row says it beside the pid, with the two commands that close it.
|
|
124
|
-
- `intentic-machine upgrade` restarts
|
|
125
|
-
download, and after a swap it
|
|
175
|
+
- `intentic-machine upgrade` restarts an agent that is behind the installed binary even when there is nothing to
|
|
176
|
+
download, and after a swap it checks that the agent which came up **is** the new build rather than that some
|
|
126
177
|
process is alive — the check the old agent passed just as well as the new one.
|
|
127
|
-
-
|
|
128
|
-
--stop` is a thing people do on purpose.
|
|
178
|
+
- An agent already on the installed build is never bounced, and one that is stopped is never started by an upgrade:
|
|
179
|
+
`run --stop` is a thing people do on purpose.
|
|
129
180
|
|
|
130
181
|
### Linked vs connected
|
|
131
182
|
|
|
132
183
|
The same gap one level down, on the command whose entire job is to answer "is my machine connected". `device.json`
|
|
133
184
|
records the sandboxes this machine is **meant** to answer to and nothing whatever about whether it reaches any of
|
|
134
185
|
them, so `status` printed `connected as <id>` for every line in it — including, on the machine this was written
|
|
135
|
-
for, a sandbox whose host had been answering 502 for four hours while the
|
|
186
|
+
for, a sandbox whose host had been answering 502 for four hours while the agent retried it every 30 seconds and
|
|
136
187
|
said so in a log nobody had been pointed at.
|
|
137
188
|
|
|
138
|
-
- The
|
|
189
|
+
- The agent's stamp is the answer: `status` prints `connected`, `NOT connected (retrying)` or `NOT connected`
|
|
139
190
|
per link, and the summary the tray reads counts the links that are actually up (`1 of 2 sandboxes connected`).
|
|
140
191
|
- The stamp **ages** on purpose, since it describes sockets held in a process that may be gone. Four ticks past
|
|
141
192
|
the last write it is no answer at all — which is also what an agent too old to write one leaves behind — and
|
|
@@ -145,14 +196,22 @@ said so in a log nobody had been pointed at.
|
|
|
145
196
|
|
|
146
197
|
## Key files
|
|
147
198
|
|
|
148
|
-
- [src/commands.ts](src/commands.ts) — the CLI surface: `device setup|uninstall|
|
|
149
|
-
- [src/install.ts](src/install.ts) — what every `setup` runs first:
|
|
150
|
-
- [src/
|
|
199
|
+
- [src/commands.ts](src/commands.ts) — the CLI surface: `device setup|uninstall|forget-unreachable`, `sync setup|pause|resume|mirror|uninstall|…`, shared `run|status|version|upgrade|updates|uninstall`, and the hidden `environment attach`.
|
|
200
|
+
- [src/install.ts](src/install.ts) — what every `setup` runs first and last: move onto the machine's newest agent (then re-exec), PATH repair, the Windows launcher stub; once enrolled, adopt running distros and level the rest of the PC.
|
|
201
|
+
- [src/release.ts](src/release.ts) — the release channel: tagged asset URLs, what `releases/latest` points at, resumable downloads, the `version` probe, and the sweep of what a finished swap leaves in `bin/`.
|
|
202
|
+
- [src/upgrade.ts](src/upgrade.ts) — one environment to one exact release: download → probe → swap → restart through the supervisor → check, rolling back a build that will not start, and a restart when the file is current but the agent is not.
|
|
203
|
+
- [src/environments/machine-upgrade.ts](src/environments/machine-upgrade.ts) — the machine-wide upgrade: the target rule, the order (distros first, the root last), and the lock.
|
|
204
|
+
- [src/environments/children.ts](src/environments/children.ts) — the root keeping each distro's agent running through a held `wsl.exe` session.
|
|
205
|
+
- [src/environments/auto-upgrade.ts](src/environments/auto-upgrade.ts) — the root's update tick and its backoff.
|
|
206
|
+
- [src/environments/machine.ts](src/environments/machine.ts) — `machine.json` (kept distros, the two update switches, the last failed target) and reaching the Windows side from a distro.
|
|
207
|
+
- [src/environments/crossing.ts](src/environments/crossing.ts) — argv that crosses between Windows and a distro, for `run_command`'s `in:` and for the machine's own calls.
|
|
208
|
+
- [src/supervision.ts](src/supervision.ts) — start, stop and restart through whoever supervises this environment, and which one that is.
|
|
151
209
|
- [src/installed.ts](src/installed.ts) — which build the *file* at `bin/intentic-machine` is, as opposed to the one running: free while the two agree, one probe per swap after they stop.
|
|
152
210
|
- [src/daemon-base.ts](src/daemon-base.ts) — where a sandbox's daemon is dialled, for both halves: loopback first when `/health` proves it is ours, the public URL as the floor.
|
|
153
|
-
- [src/resident.ts](src/resident.ts) — the one
|
|
211
|
+
- [src/resident.ts](src/resident.ts) — the one agent: its claim and lease, the per-tick reconcile of links, pairings and distros, and its exits.
|
|
154
212
|
- [src/device/auto-prepare.ts](src/device/auto-prepare.ts) — the background update-download tick; the judgement about *what* to download stays in `ic sandbox prepare --auto`, on purpose.
|
|
155
213
|
- [src/status.ts](src/status.ts) — both halves as one answer; `--json` is what the desktop app and tray read.
|
|
214
|
+
- [src/device/router.ts](src/device/router.ts) — the `deviceContract` this machine serves, including `report`, the reading the sandbox's Devices tab is built from.
|
|
156
215
|
- [src/wsl.ts](src/wsl.ts) — whether this is a WSL distro, and which one. WSL hands a distro the Windows machine's own hostname, so without this the sandbox cannot tell a distro from the Windows install hosting it, or one distro from its neighbour; reported at connect (`describe`) as well as in the status report, so it is known even with "Run commands" off.
|
|
157
216
|
- [src/device/tools/shell.ts](src/device/tools/shell.ts) — `run_command`, and its `in:` crossing: `wsl:<distro>` from Windows runs `wsl.exe --exec sh -lc` with the script as one argument, `windows` from a distro runs PowerShell through interop; no quoting through the first shell either way.
|
|
158
217
|
- [src/device/policy.ts](src/device/policy.ts) — what the sandbox is permitted to do here; the security surface.
|
|
@@ -164,16 +223,16 @@ said so in a log nobody had been pointed at.
|
|
|
164
223
|
## How it fits
|
|
165
224
|
|
|
166
225
|
Runs on the user's machine, not in the sandbox. Installed by `device.{sh,ps1}` / `sync.{sh,ps1}` (both cards
|
|
167
|
-
put the same binary in `~/.intentic/machine/bin`), shipped as a bun-compiled binary per platform,
|
|
168
|
-
by `upgrade
|
|
226
|
+
put the same binary in `~/.intentic/machine/bin`), shipped as a bun-compiled binary per platform, and kept on one
|
|
227
|
+
release across the whole PC by `upgrade` and the root's automatic updates.
|
|
169
228
|
|
|
170
229
|
Those four installers are **bootstrap shims**: they download an agent onto a machine that has none (pinned to
|
|
171
230
|
the tag `releases/latest` resolves to, resumable, probed by running `version` before it may become the agent)
|
|
172
231
|
and exec `setup`. Every other decision — installed-vs-published, PATH repair, the Windows launcher stub — runs
|
|
173
|
-
from [src/install.ts](src/install.ts) at the top of every `setup`: it
|
|
174
|
-
download→probe→swap→rollback machinery as `upgrade`, then re-execs the new agent with the
|
|
175
|
-
re-running a card's command still upgrades a machine while the rule lives in exactly one compiled,
|
|
176
|
-
place.
|
|
232
|
+
from [src/install.ts](src/install.ts) at the top of every `setup`: it moves this side onto the machine's newest
|
|
233
|
+
release through the same download→probe→swap→rollback machinery as `upgrade`, then re-execs the new agent with the
|
|
234
|
+
same argv, so re-running a card's command still upgrades a machine while the rule lives in exactly one compiled,
|
|
235
|
+
tested place.
|
|
177
236
|
|
|
178
237
|
The one decision a shim cannot delegate is whether the installed agent can take the handover at all: `device
|
|
179
238
|
setup` is itself part of this CLI's vocabulary, so an agent older than a route rename rejects it — and the
|
|
@@ -191,10 +250,10 @@ The install-and-stay-alive plumbing is
|
|
|
191
250
|
|
|
192
251
|
- **Bidirectional sync has no undo.** The integration tests here run against real directories and a real
|
|
193
252
|
Mutagen for exactly that reason; a unit test that mocks the sync proves nothing about the case that loses work.
|
|
194
|
-
- **The two halves keep separate state files** (`device.json`, `sync.json`) in the one home: the
|
|
253
|
+
- **The two halves keep separate state files** (`device.json`, `sync.json`) in the one home: the agent rewrites
|
|
195
254
|
one half's state while a concurrent `setup` writes the other's, and separate files make cross-half torn
|
|
196
255
|
writes impossible rather than unlikely.
|
|
197
256
|
- **Scopes are a cache.** The sandbox pushes the real grant on every connect; what is stored only governs the
|
|
198
257
|
seconds before the first push, and it starts at everything-off.
|
|
199
|
-
- **The transport lives in the resident
|
|
258
|
+
- **The transport lives in the resident agent**, so `sync setup` starts the agent *before* it probes ssh or hands
|
|
200
259
|
anything to Mutagen: every step after that one needs the port to be open.
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,GAAG,6EAgBf,CAAC"}
|
package/dist/app.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { agentException } from "@intentic/local-agent";
|
|
2
|
-
import { buildApplication,
|
|
2
|
+
import { buildApplication, text_en } from "@stricli/core";
|
|
3
3
|
import { commands } from "./commands.js";
|
|
4
4
|
import { MACHINE_VERSION } from "./version.js";
|
|
5
|
-
export const app = buildApplication(
|
|
6
|
-
routes: commands,
|
|
7
|
-
docs: { brief: "intentic-machine, connect this device to your intentic sandboxes" },
|
|
8
|
-
}), {
|
|
5
|
+
export const app = buildApplication(commands, {
|
|
9
6
|
name: "intentic-machine",
|
|
10
7
|
versionInfo: { currentVersion: MACHINE_VERSION },
|
|
11
8
|
scanner: { caseStyle: "allow-kebab-for-camel" },
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAM/C,MAAM,CAAC,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,EAAE;IACtC,IAAI,EAAE,kBAAkB;IAGxB,WAAW,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE;IAChD,OAAO,EAAE,EAAE,SAAS,EAAE,uBAAuB,EAAE;IAG/C,YAAY,EAAE;QACV,IAAI,EAAE;YACF,GAAG,OAAO;YACV,eAAe,EAAE,cAAc;YAC/B,4BAA4B,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,WAAW,cAAc,CAAC,GAAG,CAAC,EAAE;SACnF;KACJ;CACJ,CACJ,CAAC"}
|
package/dist/commands.d.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
1
|
import { type CommandContext } from "@stricli/core";
|
|
2
|
-
export declare const commands:
|
|
3
|
-
device: import("@stricli/core").RouteMap<CommandContext>;
|
|
4
|
-
sync: import("@stricli/core").RouteMap<CommandContext>;
|
|
5
|
-
run: import("@stricli/core").Command<CommandContext>;
|
|
6
|
-
status: import("@stricli/core").Command<CommandContext>;
|
|
7
|
-
version: import("@stricli/core").Command<CommandContext>;
|
|
8
|
-
upgrade: import("@stricli/core").Command<CommandContext>;
|
|
9
|
-
uninstall: import("@stricli/core").Command<CommandContext>;
|
|
10
|
-
};
|
|
2
|
+
export declare const commands: import("@stricli/core").RouteMap<CommandContext>;
|
|
11
3
|
//# sourceMappingURL=commands.d.ts.map
|
package/dist/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAkGjF,eAAO,MAAM,QAAQ,kDAmBnB,CAAC"}
|
package/dist/commands.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { buildCommand, buildRouteMap } from "@stricli/core";
|
|
2
2
|
import { deviceCommands, deviceUninstall } from "./device/commands.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { environmentRoutes, updates } from "./environments/commands.js";
|
|
4
|
+
import { realMachineIo, upgradeMachine } from "./environments/machine-upgrade.js";
|
|
5
|
+
import { runForeground } from "./resident.js";
|
|
6
|
+
import { readResident, restartResident, stopResident } from "./supervision.js";
|
|
5
7
|
import { status } from "./status.js";
|
|
6
8
|
import { syncCommands, syncUninstall } from "./sync/commands.js";
|
|
7
|
-
import { assetUrl, runUpgrade, upgradeMessage } from "./upgrade.js";
|
|
8
9
|
import { MACHINE_VERSION } from "./version.js";
|
|
9
10
|
const run = buildCommand({
|
|
10
|
-
docs: { brief: "
|
|
11
|
+
docs: { brief: "Restart this machine's agent: sandbox connections, file sync, port mirroring (setup starts it for you)" },
|
|
11
12
|
parameters: {
|
|
12
13
|
flags: {
|
|
13
|
-
foreground: { kind: "boolean", brief: "Run the
|
|
14
|
-
stop: { kind: "boolean", brief: "Stop the background
|
|
14
|
+
foreground: { kind: "boolean", brief: "Run the agent in this terminal instead of the background" },
|
|
15
|
+
stop: { kind: "boolean", brief: "Stop the background agent" },
|
|
15
16
|
},
|
|
16
17
|
},
|
|
17
18
|
async func(flags) {
|
|
@@ -19,10 +20,13 @@ const run = buildCommand({
|
|
|
19
20
|
if (flags.stop) {
|
|
20
21
|
const pid = await stopResident();
|
|
21
22
|
out(pid === undefined ? "not running." : `stopped (pid ${pid}).`);
|
|
23
|
+
out("It comes back at your next sign-in, and sooner if this machine's supervisor notices it gone. `intentic-machine uninstall` is what stops it for good.");
|
|
22
24
|
return;
|
|
23
25
|
}
|
|
24
26
|
if (!flags.foreground) {
|
|
25
|
-
await
|
|
27
|
+
await restartResident(out);
|
|
28
|
+
const held = await readResident();
|
|
29
|
+
out(held === undefined ? "the agent did not come back up: check its log." : `running (pid ${held.pid}, ${held.build ?? "unknown build"}).`);
|
|
26
30
|
return;
|
|
27
31
|
}
|
|
28
32
|
await runForeground((message) => void this.process.stdout.write(`[${new Date().toISOString()}] ${message}\n`));
|
|
@@ -37,44 +41,54 @@ const version = buildCommand({
|
|
|
37
41
|
},
|
|
38
42
|
});
|
|
39
43
|
const upgrade = buildCommand({
|
|
40
|
-
docs: { brief: "
|
|
44
|
+
docs: { brief: "Upgrade the agent on this whole machine (Windows and every WSL distro on it) to the newest release" },
|
|
41
45
|
parameters: {
|
|
42
46
|
flags: {
|
|
43
47
|
force: {
|
|
44
48
|
kind: "boolean",
|
|
45
49
|
brief: "Install the published agent even over one built from source (which is otherwise left alone)",
|
|
46
50
|
},
|
|
51
|
+
level: { kind: "boolean", brief: "Bring every side to the newest release one of them already runs, without asking for a newer one", default: false, hidden: true },
|
|
47
52
|
},
|
|
48
53
|
},
|
|
49
54
|
async func(flags) {
|
|
50
55
|
const out = (message) => void this.process.stdout.write(`${message}\n`);
|
|
51
|
-
|
|
52
|
-
|
|
56
|
+
if (!(await upgradeMachine(realMachineIo(flags, out), flags, out))) {
|
|
57
|
+
process.exitCode = 1;
|
|
58
|
+
}
|
|
53
59
|
},
|
|
54
60
|
});
|
|
55
61
|
const uninstall = buildCommand({
|
|
56
|
-
docs: { brief: "Remove this
|
|
62
|
+
docs: { brief: "Remove this environment's agent: every sandbox link, every sync pairing, the login entry" },
|
|
57
63
|
parameters: {},
|
|
58
64
|
async func() {
|
|
59
65
|
const out = (message) => void this.process.stdout.write(`${message}\n`);
|
|
60
66
|
await syncUninstall(out);
|
|
61
67
|
await deviceUninstall(out);
|
|
62
|
-
|
|
68
|
+
const still = await readResident();
|
|
69
|
+
out(still === undefined
|
|
70
|
+
? "Nothing intentic stays resident here."
|
|
71
|
+
: `The agent keeps running (pid ${still.pid}) only to keep this PC's WSL distros running; uninstall inside each of them to remove it entirely.`);
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
export const commands = buildRouteMap({
|
|
75
|
+
routes: {
|
|
76
|
+
device: buildRouteMap({
|
|
77
|
+
routes: deviceCommands,
|
|
78
|
+
docs: { brief: "Let a sandbox work on this device (the Connect-this-device card)" },
|
|
79
|
+
}),
|
|
80
|
+
sync: buildRouteMap({
|
|
81
|
+
routes: syncCommands,
|
|
82
|
+
docs: { brief: "Mirror a sandbox's files and ports onto this machine (the Desktop sync card)" },
|
|
83
|
+
}),
|
|
84
|
+
environment: environmentRoutes,
|
|
85
|
+
run,
|
|
86
|
+
status,
|
|
87
|
+
version,
|
|
88
|
+
upgrade,
|
|
89
|
+
updates,
|
|
90
|
+
uninstall,
|
|
63
91
|
},
|
|
92
|
+
docs: { brief: "intentic-machine, connect this device to your intentic sandboxes", hideRoute: { environment: true } },
|
|
64
93
|
});
|
|
65
|
-
export const commands = {
|
|
66
|
-
device: buildRouteMap({
|
|
67
|
-
routes: deviceCommands,
|
|
68
|
-
docs: { brief: "Let a sandbox work on this device (the Connect-this-device card)" },
|
|
69
|
-
}),
|
|
70
|
-
sync: buildRouteMap({
|
|
71
|
-
routes: syncCommands,
|
|
72
|
-
docs: { brief: "Mirror a sandbox's files and ports onto this machine (the Desktop sync card)" },
|
|
73
|
-
}),
|
|
74
|
-
run,
|
|
75
|
-
status,
|
|
76
|
-
version,
|
|
77
|
-
upgrade,
|
|
78
|
-
uninstall,
|
|
79
|
-
};
|
|
80
94
|
//# sourceMappingURL=commands.js.map
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAuB,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export declare const baseDir: string;
|
|
2
|
+
export declare const binDir: string;
|
|
2
3
|
export declare const runPidPath: string;
|
|
3
4
|
export declare const runLogPath: string;
|
|
4
5
|
export declare const agentLogPath: string;
|
|
6
|
+
export declare const machineConfigPath: string;
|
|
7
|
+
export declare const upgradeLockPath: string;
|
|
5
8
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,QAAW,CAAC;AAGhC,eAAO,MAAM,UAAU,QAA+B,CAAC;AACvD,eAAO,MAAM,UAAU,QAA+B,CAAC;AAGvD,eAAO,MAAM,YAAY,QAAsC,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,QAAW,CAAC;AAGhC,eAAO,MAAM,MAAM,QAAuB,CAAC;AAG3C,eAAO,MAAM,UAAU,QAA+B,CAAC;AACvD,eAAO,MAAM,UAAU,QAA+B,CAAC;AAGvD,eAAO,MAAM,YAAY,QAAsC,CAAC;AAGhE,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAG/D,eAAO,MAAM,eAAe,QAA+B,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -2,7 +2,10 @@ import { join } from "node:path";
|
|
|
2
2
|
import { agentHome } from "@intentic/local-agent";
|
|
3
3
|
const home = agentHome("machine");
|
|
4
4
|
export const baseDir = home.dir;
|
|
5
|
+
export const binDir = join(baseDir, "bin");
|
|
5
6
|
export const runPidPath = join(baseDir, "machine.pid");
|
|
6
7
|
export const runLogPath = join(baseDir, "machine.log");
|
|
7
8
|
export const agentLogPath = join(baseDir, "machine-update.log");
|
|
9
|
+
export const machineConfigPath = join(baseDir, "machine.json");
|
|
10
|
+
export const upgradeLockPath = join(binDir, "upgrade.lock");
|
|
8
11
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;AAGhC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAGvD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;AAGhC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAG3C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAGvD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;AAGhE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAG/D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC"}
|
package/dist/daemon-base.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { Log } from "@intentic/local-agent";
|
|
2
|
+
export type FetchImpl = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
2
3
|
export declare const daemonIdOf: (sandboxUrl: string) => string | undefined;
|
|
3
4
|
export declare const candidateBases: (sandboxUrl: string) => readonly string[];
|
|
4
|
-
export declare const probeDaemonBase: (base: string, expectedId: string, fetchImpl?:
|
|
5
|
+
export declare const probeDaemonBase: (base: string, expectedId: string, fetchImpl?: FetchImpl) => Promise<boolean>;
|
|
5
6
|
export interface DaemonBase {
|
|
6
7
|
readonly base: string;
|
|
7
8
|
readonly local: boolean;
|
|
8
9
|
}
|
|
9
|
-
export declare const resolveDaemonBase: (sandboxUrl: string, fetchImpl?:
|
|
10
|
+
export declare const resolveDaemonBase: (sandboxUrl: string, fetchImpl?: FetchImpl) => Promise<DaemonBase>;
|
|
10
11
|
export declare const PROMOTION_INTERVAL_MS = 60000;
|
|
11
12
|
export interface DaemonTarget {
|
|
12
13
|
readonly sandboxId: string;
|
|
@@ -16,7 +17,7 @@ export interface DaemonBases {
|
|
|
16
17
|
readonly resolve: (pairing: DaemonTarget) => Promise<string>;
|
|
17
18
|
readonly failed: (sandboxId: string) => void;
|
|
18
19
|
}
|
|
19
|
-
export declare const createDaemonBases: (log: Log, fetchImpl?:
|
|
20
|
+
export declare const createDaemonBases: (log: Log, fetchImpl?: FetchImpl, now?: () => number) => DaemonBases;
|
|
20
21
|
export interface Dialed<T extends DaemonTarget> {
|
|
21
22
|
readonly pairing: T;
|
|
22
23
|
readonly base: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-base.d.ts","sourceRoot":"","sources":["../src/daemon-base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-base.d.ts","sourceRoot":"","sources":["../src/daemon-base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAajD,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAK5F,eAAO,MAAM,UAAU,eAAgB,MAAM,KAAG,MAAM,GAAG,SAGxD,CAAC;AAIF,eAAO,MAAM,cAAc,eAAgB,MAAM,KAAG,SAAS,MAAM,EASlE,CAAC;AAIF,eAAO,MAAM,eAAe,SAAgB,MAAM,cAAc,MAAM,cAAa,SAAS,KAAW,OAAO,CAAC,OAAO,CAWrH,CAAC;AAIF,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B;AAID,eAAO,MAAM,iBAAiB,eAAsB,MAAM,cAAa,SAAS,KAAW,OAAO,CAAC,UAAU,CAc5G,CAAC;AAMF,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAI5C,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAUD,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAID,eAAO,MAAM,iBAAiB,QAAS,GAAG,cAAa,SAAS,QAAe,MAAM,MAAM,KAAc,WA8BxG,CAAC;AAGF,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,YAAY;IAC1C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAGD,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,YAAY,YAAY,SAAS,CAAC,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC"}
|
package/dist/daemon-base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-base.js","sourceRoot":"","sources":["../src/daemon-base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAQ/D,MAAM,gBAAgB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-base.js","sourceRoot":"","sources":["../src/daemon-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { errorMessage } from "@intentic/base/errors";
|
|
2
2
|
import { plural } from "@intentic/base/format";
|
|
3
|
-
import {
|
|
3
|
+
import { readMachineConfig } from "../environments/machine.js";
|
|
4
4
|
import { fleet, icInFlight, runIc } from "./tools/sandboxes.js";
|
|
5
5
|
const FIRST_TICK_MS = 5 * 60_000;
|
|
6
6
|
const TICK_MS = 6 * 60 * 60_000;
|
|
@@ -63,7 +63,7 @@ export const startAutoPrepare = (log) => {
|
|
|
63
63
|
};
|
|
64
64
|
const tick = async () => {
|
|
65
65
|
try {
|
|
66
|
-
if (await
|
|
66
|
+
if ((await readMachineConfig().catch(() => ({ sandboxUpdates: true }))).sandboxUpdates !== false) {
|
|
67
67
|
await runTick(state, await fleet(), async (slug) => await runIc(autoPrepareArgs(slug), () => undefined), log);
|
|
68
68
|
}
|
|
69
69
|
}
|
|
@@ -74,7 +74,7 @@ export const startAutoPrepare = (log) => {
|
|
|
74
74
|
schedule(TICK_MS + Math.floor(Math.random() * JITTER_MS));
|
|
75
75
|
}
|
|
76
76
|
};
|
|
77
|
-
schedule(FIRST_TICK_MS);
|
|
77
|
+
schedule(FIRST_TICK_MS + Math.floor(Math.random() * JITTER_MS));
|
|
78
78
|
return {
|
|
79
79
|
stop: () => {
|
|
80
80
|
stopped = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-prepare.js","sourceRoot":"","sources":["../../src/device/auto-prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auto-prepare.js","sourceRoot":"","sources":["../../src/device/auto-prepare.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { type Log } from "@intentic/local-agent";
|
|
2
2
|
import { type CommandContext } from "@stricli/core";
|
|
3
3
|
export declare const deviceUninstall: (out: Log, sandbox?: string) => Promise<void>;
|
|
4
|
+
export declare const dropUnreachableLinks: (out: Log) => Promise<void>;
|
|
4
5
|
export declare const deviceCommands: {
|
|
5
6
|
setup: import("@stricli/core").Command<CommandContext>;
|
|
6
7
|
uninstall: import("@stricli/core").Command<CommandContext>;
|
|
7
|
-
|
|
8
|
+
"forget-unreachable": import("@stricli/core").Command<CommandContext>;
|
|
8
9
|
};
|
|
9
10
|
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/device/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/device/commands.ts"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,GAAG,EAA0B,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AA8JlE,eAAO,MAAM,eAAe,QAAe,GAAG,YAAY,MAAM,KAAG,OAAO,CAAC,IAAI,CAyB9E,CAAC;AAgBF,eAAO,MAAM,oBAAoB,QAAe,GAAG,KAAG,OAAO,CAAC,IAAI,CAwBjE,CAAC;AAEF,eAAO,MAAM,cAAc;;;;CAAgE,CAAC"}
|