@intentic/machine 1.345.0 → 1.347.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 +100 -135
- package/dist/device/commands.d.ts +6 -1
- package/dist/device/commands.d.ts.map +1 -1
- package/dist/device/commands.js +19 -7
- package/dist/device/commands.js.map +1 -1
- package/dist/device/grant.d.ts +2 -1
- package/dist/device/grant.d.ts.map +1 -1
- package/dist/device/router.d.ts +2 -1
- package/dist/device/router.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/keeper.js +1 -1
- package/dist/device/sandbox-rounds/keeper.js.map +1 -1
- package/dist/device/tools/agent.d.ts.map +1 -1
- package/dist/device/tools/agent.js +7 -7
- package/dist/device/tools/agent.js.map +1 -1
- package/dist/device/tools/ic-binary.d.ts +1 -0
- package/dist/device/tools/ic-binary.d.ts.map +1 -1
- package/dist/device/tools/ic-binary.js +29 -1
- package/dist/device/tools/ic-binary.js.map +1 -1
- package/dist/device/tools/os/settings.js +3 -3
- package/dist/device/tools/os/settings.js.map +1 -1
- package/dist/device/tools/sandboxes.d.ts +1 -0
- package/dist/device/tools/sandboxes.d.ts.map +1 -1
- package/dist/device/tools/sandboxes.js +7 -2
- package/dist/device/tools/sandboxes.js.map +1 -1
- package/dist/install.d.ts +9 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +28 -4
- package/dist/install.js.map +1 -1
- package/dist/resident/resident.d.ts.map +1 -1
- package/dist/resident/resident.js +1 -2
- package/dist/resident/resident.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +1 -8
- package/dist/status.js.map +1 -1
- package/dist/sync/commands.d.ts +1 -9
- package/dist/sync/commands.d.ts.map +1 -1
- package/dist/sync/commands.js +48 -89
- package/dist/sync/commands.js.map +1 -1
- package/dist/sync/config.d.ts +21 -25
- package/dist/sync/config.d.ts.map +1 -1
- package/dist/sync/config.js +76 -35
- package/dist/sync/config.js.map +1 -1
- package/dist/sync/endpoint.d.ts +1 -1
- package/dist/sync/endpoint.d.ts.map +1 -1
- package/dist/sync/endpoint.js +2 -3
- package/dist/sync/endpoint.js.map +1 -1
- package/dist/sync/folders.d.ts.map +1 -1
- package/dist/sync/folders.js.map +1 -1
- package/dist/sync/gone-watch.d.ts +0 -1
- package/dist/sync/gone-watch.d.ts.map +1 -1
- package/dist/sync/gone-watch.js +16 -53
- package/dist/sync/gone-watch.js.map +1 -1
- package/dist/sync/holds.d.ts +30 -0
- package/dist/sync/holds.d.ts.map +1 -0
- package/dist/sync/holds.js +117 -0
- package/dist/sync/holds.js.map +1 -0
- package/dist/sync/low-disk.d.ts +2 -9
- package/dist/sync/low-disk.d.ts.map +1 -1
- package/dist/sync/low-disk.js +10 -38
- package/dist/sync/low-disk.js.map +1 -1
- package/dist/sync/mirror.d.ts +1 -4
- package/dist/sync/mirror.d.ts.map +1 -1
- package/dist/sync/mirror.js +57 -161
- package/dist/sync/mirror.js.map +1 -1
- package/dist/sync/mutagen-env.d.ts +1 -3
- package/dist/sync/mutagen-env.d.ts.map +1 -1
- package/dist/sync/mutagen-env.js +2 -12
- package/dist/sync/mutagen-env.js.map +1 -1
- package/dist/sync/mutagen-move.d.ts +3 -1
- package/dist/sync/mutagen-move.d.ts.map +1 -1
- package/dist/sync/mutagen-move.js +30 -22
- package/dist/sync/mutagen-move.js.map +1 -1
- package/dist/sync/mutagen.d.ts +4 -9
- package/dist/sync/mutagen.d.ts.map +1 -1
- package/dist/sync/mutagen.js +11 -71
- package/dist/sync/mutagen.js.map +1 -1
- package/dist/sync/project/project-commands.d.ts +0 -3
- package/dist/sync/project/project-commands.d.ts.map +1 -1
- package/dist/sync/project/project-commands.js +3 -2
- package/dist/sync/project/project-commands.js.map +1 -1
- package/dist/sync/project/project-delivery.d.ts.map +1 -1
- package/dist/sync/project/project-delivery.js +3 -3
- package/dist/sync/project/project-delivery.js.map +1 -1
- package/dist/sync/project/project-transfer.d.ts +4 -0
- package/dist/sync/project/project-transfer.d.ts.map +1 -1
- package/dist/sync/project/project-transfer.js +9 -2
- package/dist/sync/project/project-transfer.js.map +1 -1
- package/dist/sync/report.d.ts.map +1 -1
- package/dist/sync/report.js +16 -10
- package/dist/sync/report.js.map +1 -1
- package/dist/sync/retire.d.ts.map +1 -1
- package/dist/sync/retire.js +1 -2
- package/dist/sync/retire.js.map +1 -1
- package/dist/sync/tunnel.d.ts +4 -3
- package/dist/sync/tunnel.d.ts.map +1 -1
- package/dist/sync/tunnel.js +107 -42
- package/dist/sync/tunnel.js.map +1 -1
- package/dist/sync/uninstall.d.ts.map +1 -1
- package/dist/sync/uninstall.js +1 -1
- package/dist/sync/uninstall.js.map +1 -1
- package/dist/sync/wake.d.ts +3 -0
- package/dist/sync/wake.d.ts.map +1 -0
- package/dist/sync/wake.js +43 -0
- package/dist/sync/wake.js.map +1 -0
- package/package.json +9 -9
- package/dist/sync/attach-commands.d.ts +0 -39
- package/dist/sync/attach-commands.d.ts.map +0 -1
- package/dist/sync/attach-commands.js +0 -164
- package/dist/sync/attach-commands.js.map +0 -1
- package/dist/sync/swap-pause.d.ts +0 -10
- package/dist/sync/swap-pause.d.ts.map +0 -1
- package/dist/sync/swap-pause.js +0 -29
- package/dist/sync/swap-pause.js.map +0 -1
package/README.md
CHANGED
|
@@ -108,8 +108,12 @@ flowchart LR
|
|
|
108
108
|
sandbox's, in this environment or another of this PC's (see [What folder sync owns](#what-folder-sync-owns)), and a
|
|
109
109
|
set-up-again that would change where a paired sandbox's folder syncs. It is **copy-first** unless
|
|
110
110
|
its owner opted into two-way: see [Copy-first projects](#copy-first-projects).
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
Setting the same folder up again keeps its session and every fact that holds its sync (see
|
|
112
|
+
[File sync runs or holds still by one rule](#file-sync-runs-or-holds-still-by-one-rule)). A project folder also takes
|
|
113
|
+
its agents' landed work by itself (`deliver: "auto"`, see [Delivering landed work](#delivering-landed-work)), and is
|
|
114
|
+
refused where it is a whole disk, a home folder or one holding it, or the system's own (`folderRefusal` in
|
|
115
|
+
[`sync/folders.ts`](src/sync/folders.ts), as the desktop app refuses them). `setup` wakes the resident watcher
|
|
116
|
+
(`sync/wake.ts`) once it has recorded the pairing, so the session is made at once rather than at the next poll.
|
|
113
117
|
- **Through Docker** ([`sync/endpoint.ts`](src/sync/endpoint.ts)): with `setup --transport auto`, the default, a
|
|
114
118
|
project's sandbox is reached through this machine's own Docker engine when the container `ic` named after the
|
|
115
119
|
pairing URL's slug is running there with that URL as its `SANDBOX_PUBLIC_URL`. Anything else stays on ssh: a hosted
|
|
@@ -124,10 +128,10 @@ flowchart LR
|
|
|
124
128
|
- (2026-10-05) The transport is no longer decided once: the container is asked after on every prepare and every
|
|
125
129
|
minute (`checkContainers` in [`sync/gone-watch.ts`](src/sync/gone-watch.ts)). A stopped container, or an engine that
|
|
126
130
|
does not answer, changes nothing. A container the engine no longer holds is looked up in ic: still listed (a swap
|
|
127
|
-
moving it) changes nothing; in ic's trash
|
|
128
|
-
at its address, whether ic holds it nowhere or cannot say, it lives elsewhere now and the
|
|
129
|
-
(
|
|
130
|
-
sync
|
|
131
|
+
moving it) changes nothing; in ic's trash holds the folder's sync still (`containerAway: "trashed"`). When the
|
|
132
|
+
sandbox still answers at its address, whether ic holds it nowhere or cannot say, it lives elsewhere now and the
|
|
133
|
+
pairing moves onto ssh (held instead without an enrollment to ride); in neither and silent, the sandbox is gone
|
|
134
|
+
(below); otherwise its sync holds still until the container is back (`containerAway: "missing"`).
|
|
131
135
|
|
|
132
136
|
(2026-10-01) Measured on Docker Desktop from Windows and from WSL: a session was up in 2–4 s, against up to 90 s
|
|
133
137
|
through the tunnel. Bind-mounting the folder into the container was rejected: a land or an agent's `rm -rf` would
|
|
@@ -141,10 +145,11 @@ flowchart LR
|
|
|
141
145
|
(`settlesFirst` in [`sync/mutagen.ts`](src/sync/mutagen.ts) says why for each). Every session and forward is created
|
|
142
146
|
with three Mutagen labels, `intentic-owner=<machineId>-<environment>`, `intentic-sandbox=<sanitized id>` and
|
|
143
147
|
`intentic-kind=sync|state|forward`; see [What folder sync owns](#what-folder-sync-owns).
|
|
144
|
-
- **
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
(`
|
|
148
|
+
- **Each folder has a sandbox of its own** (`sync setup --project`, see [Copy-first projects](#copy-first-projects)):
|
|
149
|
+
copied one way into its `/work/<name>`, with the land of a conversation written back into it by itself
|
|
150
|
+
(`deliverProject`, see [Delivering landed work](#delivering-landed-work)). _(2026-10-21) Folders used to attach to one
|
|
151
|
+
sandbox per computer (`sync setup --projects-host`, `sync attach`); that went, see
|
|
152
|
+
[One sandbox per computer, retired](#one-sandbox-per-computer-retired)._
|
|
148
153
|
- **What file sync costs this device is cycles, and the sandbox's side decides how many.** Mutagen's agent in the
|
|
149
154
|
sandbox has no recursive watcher, and both sessions force it to poll (`--watch-mode-<side> force-poll`): every 2 s
|
|
150
155
|
for the workspace, which is how late an agent's edit reaches the folder, and every 60 s for the state backup, which
|
|
@@ -170,22 +175,25 @@ flowchart LR
|
|
|
170
175
|
host key the enrollment carries when it carries one (a sandbox reads its sshd's public key off its history volume and
|
|
171
176
|
answers with it, `SyncEnrollmentAnswerSchema` in the contract), else with nothing, so `accept-new` records the key
|
|
172
177
|
the sandbox presents now, as it does for an older sandbox. Outside an enrollment a changed key is still refused. A sandbox whose ports poll has failed for ten
|
|
173
|
-
minutes has its forwards taken off localhost, and they come back with its first answer; after an hour its
|
|
174
|
-
|
|
175
|
-
restarted more often than hourly never
|
|
178
|
+
minutes has its forwards taken off localhost, and they come back with its first answer; after an hour its sync holds
|
|
179
|
+
still, an hour counted from `unreachableSince` in `sync.json` (2026-10-05: it was counted in memory, so an agent
|
|
180
|
+
restarted more often than hourly never held a dead sandbox's sessions). A sandbox that no longer exists is another
|
|
176
181
|
matter: see [Sandboxes that are gone](#sandboxes-that-are-gone). `sync uninstall` ends every session and forward of
|
|
177
182
|
this agent's and stops its Mutagen daemon, which serves this agent alone (below), starting it first if it was down so
|
|
178
183
|
every session is really ended; the synced folders keep their files. It runs the agent's own Mutagen in `bin/` and
|
|
179
184
|
downloads none: without that copy the session steps are skipped (2026-10-18). `sync uninstall --folders` (what the desktop app's
|
|
180
|
-
uninstaller runs) unpairs only the pairings that sync a folder here: mirror-only pairings
|
|
181
|
-
|
|
185
|
+
uninstaller runs) unpairs only the pairings that sync a folder here: mirror-only pairings keep their ports and their
|
|
186
|
+
enrollments.
|
|
182
187
|
- Symbolic links travel only where the device can create them ([`sync/symlinks.ts`](src/sync/symlinks.ts)). A
|
|
183
188
|
Windows PC without Developer Mode refuses every link, and Mutagen would try again on every cycle, so its sessions
|
|
184
189
|
use `--symlink-mode ignore`. Turning Developer Mode on brings them back at the agent's next start.
|
|
185
190
|
- **Which computer this is** ([`machine-id.ts`](src/machine-id.ts)): a `machineId` minted once at install and kept
|
|
186
|
-
in `~/.intentic/machine/machine-id`, sent in the connect-time facts, the sync report
|
|
187
|
-
|
|
188
|
-
|
|
191
|
+
in `~/.intentic/machine/machine-id`, sent in the connect-time facts, the sync report, the sync enrollment and the
|
|
192
|
+
device enrollment (`device setup` sends it with the environment when it redeems the pairing). The Windows side hands
|
|
193
|
+
its own to the agent it starts in each distro, so every OS install of one PC answers with one id; a sandbox joins
|
|
194
|
+
enrollments, sync enrollments and device rows on it, never on a hostname. (2026-10-20: `device setup` used to redeem
|
|
195
|
+
with no body, so the sandbox learned the id only once the agent connected, and the PC showed as two machine cards
|
|
196
|
+
until then.)
|
|
189
197
|
- The features a device advertises (`set-shape`, `reshape-later`, `rollback-to`, `background-prepare`) are read off
|
|
190
198
|
the `ic` under it, from that `ic`'s own help (`ic sandbox shape --set` for the first two, `ic sandbox rollback --to`
|
|
191
199
|
for the third, `ic sandbox prepare --auto` for the fourth), rather than listed beside the code. The agent's own two,
|
|
@@ -357,97 +365,35 @@ folded where the platform folds it). With `--json` each prints exactly one JSON
|
|
|
357
365
|
back included. Copy-first then carries the restored files to the sandbox, as it does any edit here, so the agent's
|
|
358
366
|
versions they replace are gone from there too.
|
|
359
367
|
- One bring-back, restore or delivery runs per folder at a time (`restore/<pairing key>/.operation.pid`, a pid of this
|
|
360
|
-
boot, checked alive).
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
- `attach` finds the projects host whose URL has the same host as `--sandbox-url`. Without one it answers "this
|
|
391
|
-
computer's sandbox is not set up for folders yet".
|
|
392
|
-
- It refuses:
|
|
393
|
-
- a name `isProjectDirName` refuses (the sandbox's reserved names included);
|
|
394
|
-
- a folder that is not there;
|
|
395
|
-
- a whole disk, the home folder or one holding it, `/var/home` or a whole home in it, and the system's folders (on
|
|
396
|
-
Windows, on whichever drive), as the desktop app does ([`folderRefusal`](src/sync/folders.ts)). (2026-10-06) A WSL
|
|
397
|
-
distro's folder named from Windows (`\\wsl.localhost\<distro>\…`, `\\wsl$\…`) is held to the distro's rules: its
|
|
398
|
-
`/home`, a whole home in it, `/root`, a mounted disk (`/mnt/c`) and its system's folders;
|
|
399
|
-
- a folder that is, holds or sits inside any other pairing's, this environment's or (2026-10-05) another environment
|
|
400
|
-
of this PC's ([`sync/siblings.ts`](src/sync/siblings.ts), as `setup` does);
|
|
401
|
-
- a name already attached for another folder.
|
|
402
|
-
- It records `{ key: "<sandboxId>~<name>", sandboxId, sandboxUrl, syncToken (the host's), mode: "sync", localDir,
|
|
403
|
-
remoteDir: "/work/<name>", project: true, direction: "to-sandbox", deliver: "auto", transport?, container? }`.
|
|
404
|
-
Docker is preferred, as for the host. Attaching the same folder under the same name again keeps the direction its
|
|
405
|
-
owner chose. `localDir` is the folder as given, made absolute, as `setup` records one; links are resolved only to
|
|
406
|
-
compare folders (2026-10-05: the desktop app finds its folder in `status --json` by the path it passed, and on Fedora
|
|
407
|
-
Atomic `/home` is itself a link to `/var/home`, so a link-resolved path would never be found).
|
|
408
|
-
- It returns once the pairing is recorded and the resident agent is running. The agent creates the session on its next
|
|
409
|
-
pass, and `status --json` lists the folder with its `localDir`, `remoteDir`, `deliver` and `mutagenStatus`.
|
|
410
|
-
`mutagenStatus` is absent until the session exists, then Mutagen's own words: `connecting-beta`, `scanning`,
|
|
411
|
-
`reconciling`, `staging-beta`, `transitioning`, `saving` while the first copy runs, and `watching` once a whole cycle
|
|
412
|
-
has finished. Read the first `watching` as "first copy done": later edits pass through the same words again.
|
|
413
|
-
- `detach` removes the pairing first, so the agent recreates nothing, then ends its session and drops its listing record.
|
|
414
|
-
Its restore points stay. A folder with a sandbox of its own is refused, with the `sync uninstall` that unpairs it.
|
|
415
|
-
- `changes`, `bring-back`, `restore-points`, `restore` and `direction` work on an attached folder as on any project, by
|
|
416
|
-
`--dir`.
|
|
417
|
-
|
|
418
|
-
**A pairing key.** Every pairing is filed under `pairingKey` = `key ?? sandboxId`. Every pairing made before folders could
|
|
419
|
-
attach has no `key`, so its key is its sandbox id and nothing of it moves: its session names, its restore points, its
|
|
420
|
-
listing record, its lock. The key names what is a folder's own: the `upsertPairing`/`removePairing`/`set*` writes, the
|
|
421
|
-
Mutagen session (`sessionName`), `restore/<key>/` with its lock and pause marker, and `hashes/<key>.json`. The sandbox
|
|
422
|
-
id still names what is the sandbox's: the enrollment and its token, the ssh alias and tunnel (one block per sandbox),
|
|
423
|
-
the container, the forwards, the swap pause, the report's `sandboxId`. `sync.json` is refused whole for:
|
|
424
|
-
|
|
425
|
-
- two pairings under one key;
|
|
426
|
-
- an attached key that is not `<sandboxId>~<name>` for its `/work/<name>`;
|
|
427
|
-
- a projects host with a folder, remote dir, project flag or key.
|
|
428
|
-
|
|
429
|
-
`--sandbox` (pause, resume, mirror, autoheal, uninstall) selects every pairing of the sandbox it names.
|
|
430
|
-
|
|
431
|
-
**One poll, one mirror, one report per sandbox** ([`sync/mirror.ts`](src/sync/mirror.ts)):
|
|
432
|
-
|
|
433
|
-
- The sandbox's own pairing polls its ports; with no host, the first folder attached to it does. The poll is also how the
|
|
434
|
-
sandbox's liveness and a revoked enrollment are noticed. Every other folder follows that answer
|
|
435
|
-
(`followSandbox`): paused after an hour of no answer, resumed on the first. A folder never mirrors a port, whatever
|
|
436
|
-
`mirrorOff` says. It carries the sandbox's switch only so the report says the same of it.
|
|
437
|
-
- A revoked enrollment drops every pairing of the sandbox, since they share its token.
|
|
438
|
-
- The report goes to each sandbox once (`reportCarriers`), and `scopedReport` carries all of its pairings, host and
|
|
439
|
-
folders, each with `remoteDir`, `projectsHost` and `deliver`: the daemon keeps one report per machine.
|
|
440
|
-
- **A folder's first copy waits for its report** (`readyToPrepare`). The daemon makes `/work/<name>` a repository of its
|
|
441
|
-
own once a report names it. So a folder whose session does not exist yet gets one only after a report naming it was
|
|
442
|
-
taken, tried again each pass otherwise. A daemon with no report route (404) is not waited for.
|
|
443
|
-
|
|
444
|
-
(2026-10-05) An attached folder's session is `intentic-<sandbox>--<name>-<8 hex of sha256(name)>`. A sanitized id never
|
|
445
|
-
holds `--`, so the name can be no sandbox's session nor its `-state` backup (a folder called `state` included). The hash
|
|
446
|
-
keeps `my.app` and `my_app` apart, which sanitize alike. Letting every folder poll was rejected: ten folders would cost
|
|
447
|
-
the daemon eleven polls every five seconds, and three rejected polls counted per sandbox would revoke after one tick.
|
|
448
|
-
|
|
449
|
-
**Delivering landed work** ([`sync/project/project-delivery.ts`](src/sync/project/project-delivery.ts)). When a conversation's work
|
|
450
|
-
lands in `/work/<name>`, the daemon calls `deliverProject` on the device link (`ProjectDeliverySchema` in the contract),
|
|
368
|
+
boot, checked alive). Its pause is a hold like any other (`transferSince`, below): recorded on the pairing before
|
|
369
|
+
the session is paused and lifted as the operation lets go, so the watcher's pass keeps the session paused while it
|
|
370
|
+
writes. (2026-10-21: recorded nowhere, it read as a pause nothing explained, and the next pass resumed the session in
|
|
371
|
+
the middle of the write.) A pause an operation made and never lifted (the process killed in between) is recorded in
|
|
372
|
+
`restore/<pairing key>/.paused`, and the next command about that folder resumes the session; the watcher lets go of
|
|
373
|
+
its hold by itself once the folder's lock names no live process.
|
|
374
|
+
|
|
375
|
+
### One sandbox per computer, retired
|
|
376
|
+
|
|
377
|
+
(2026-10-21) Each computer used to have one always-available sandbox that every folder attached to as `/work/<name>`:
|
|
378
|
+
`sync setup --projects-host` enrolled it with no folder of its own, and `sync attach` / `sync detach` filed each
|
|
379
|
+
folder under a key of its own (`<sandboxId>~<name>`), polled and reported once per sandbox and announced to the daemon
|
|
380
|
+
before its first copy. The owner retired it: a central sandbox for everything was the wrong shape, and each folder now
|
|
381
|
+
gets a sandbox of its own, made for it (`sync setup --project`, [Copy-first projects](#copy-first-projects)), which
|
|
382
|
+
takes landed work by itself. So there is one pairing per sandbox again, filed under its sandbox id, and `sync.json` is
|
|
383
|
+
refused whole for two pairings of one sandbox, as before.
|
|
384
|
+
|
|
385
|
+
A `sync.json` an older agent wrote is never refused for what that design left in it. Reading leaves out its folderless
|
|
386
|
+
pairing (`projectsHost: true`) and every attached folder (`key`), so nothing syncs them; the watcher's start writes
|
|
387
|
+
the file without them and says each in one line (`retireLegacyPairings` in [`sync/config.ts`](src/sync/config.ts)),
|
|
388
|
+
and the orphan sweep ends their Mutagen sessions and forwards. Nothing is deleted on either side: each folder keeps its
|
|
389
|
+
files, and that sandbox keeps its copies and its agents' history, carrying on as an ordinary sandbox. The sync scripts
|
|
390
|
+
refuse `SYNC_PROJECTS_HOST` from a desktop app older than this, rather than reading it as a folder for that
|
|
391
|
+
sandbox's whole `/work`.
|
|
392
|
+
|
|
393
|
+
### Delivering landed work
|
|
394
|
+
|
|
395
|
+
([`sync/project/project-delivery.ts`](src/sync/project/project-delivery.ts)) When a conversation's work lands in a
|
|
396
|
+
project sandbox's `/work/<name>`, the daemon calls `deliverProject` on the device link (`ProjectDeliverySchema` in the contract),
|
|
451
397
|
and this agent writes the change into the folder. It is a procedure of the link, not an MCP tool, so no agent can call
|
|
452
398
|
it, and it sits behind no switch of the grant: the folder's own `deliver: "auto"` is the permission. It is logged and
|
|
453
399
|
appended to the audit file like every call.
|
|
@@ -507,11 +453,11 @@ Two witnesses can say a sandbox is gone ([`sync/gone.ts`](src/sync/gone.ts)); ab
|
|
|
507
453
|
What follows is the same for both ([`sync/gone-watch.ts`](src/sync/gone-watch.ts)):
|
|
508
454
|
|
|
509
455
|
- **Marked.** Every pairing of the sandbox gets `goneSince` (first heard), `goneCheckedAt` and `goneBy` (`edge` or
|
|
510
|
-
`local`) in `sync.json
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
- **Asked again** at most hourly (one ports poll), whatever the outcome. An answer clears all three fields,
|
|
514
|
-
|
|
456
|
+
`local`) in `sync.json`, which is what holds its file sync still. Its ports come off localhost, its tunnel listener
|
|
457
|
+
closes, no report is posted to it, nothing is created for it, and its folders do nothing more. One line says so, with
|
|
458
|
+
the day it will be retired.
|
|
459
|
+
- **Asked again** at most hourly (one ports poll), whatever the outcome. An answer clears all three fields, which lets
|
|
460
|
+
its sync go, and the next pass puts the ports back. A sandbox ic listed again (restored from its trash) is cleared at once
|
|
515
461
|
when ic was the witness; the edge's word is withdrawn only by the sandbox answering.
|
|
516
462
|
- **Retired** once seven days (the trash window) have passed since it was first said to be gone, on a verdict asked
|
|
517
463
|
within the last hour, so an agent that was off for a week asks once first. Retiring ([`sync/retire.ts`](src/sync/retire.ts))
|
|
@@ -562,11 +508,16 @@ whose it is.
|
|
|
562
508
|
environment the watcher (and `sync uninstall`) moves off the old directory
|
|
563
509
|
([`sync/mutagen-move.ts`](src/sync/mutagen-move.ts)): each of this agent's sync sessions there is carried, not made
|
|
564
510
|
again. It is paused, its state files (`sessions/<id>` and `archives/<id>`, the last state both sides agreed on) are
|
|
565
|
-
copied into the new directory, it is terminated in the old one, and this agent's daemon, started again, loads it
|
|
566
|
-
|
|
511
|
+
copied into the new directory, it is terminated in the old one, and this agent's daemon, started again, loads it. A
|
|
512
|
+
session that was paused there is the owner's pause (`ownerPausedAt`), and the watcher's next pass resumes the rest.
|
|
513
|
+
_(2026-10-20)_ Which sessions were paused is written down at the move's first look (`mutagen-move-paused.json`, gone
|
|
514
|
+
once the move is recorded done) and declared before the move pauses anything; a later try reads that record, not a
|
|
515
|
+
listing in which the move's own pauses look like the owner's. Declared after the terminate instead, a move cut short
|
|
516
|
+
in between left nothing saying whose the pauses were, and its retry declared every session the owner's, so folders
|
|
517
|
+
nobody paused stayed paused. Made again from nothing, a two-way session would bring back what one side deleted while it
|
|
567
518
|
could not sync and read a one-sided edit as a conflict; nothing could be flushed first, since the move runs before the
|
|
568
519
|
transport is up. Forwards are terminated and made again. A session that cannot be carried is terminated and made again
|
|
569
|
-
by the watcher, paused if it was
|
|
520
|
+
by the watcher, paused if it was, since its pause was declared the same way. The old daemon is stopped only
|
|
570
521
|
when nothing else is left in it or the move started it; one of another Mutagen version is stopped and started with
|
|
571
522
|
this agent's copy for the move, then started again with the owner's own Mutagen where one is on PATH. Mutagen's own
|
|
572
523
|
sign-in registration is removed only where it starts this agent's copy.
|
|
@@ -595,11 +546,10 @@ whose it is.
|
|
|
595
546
|
up to a week. A clone the bridge started, or one already shallow, takes the sandbox's shallow boundary
|
|
596
547
|
(`--update-shallow`), so a shallow sandbox repo no longer leaves a whole refused pack behind on every pass. Leftovers
|
|
597
548
|
older than an hour from an earlier agent are cleared once per process. Holds are in `status` and the report.
|
|
598
|
-
- **A nearly full drive
|
|
599
|
-
measures the drive holding each folder whose session writes there (not a copy-first project, which only sends).
|
|
600
|
-
Under 2% of the drive, clamped to 5–20 GiB, the pairing's
|
|
601
|
-
|
|
602
|
-
put back once a minute in case one did. `status` and the device card say why, with the numbers.
|
|
549
|
+
- **A nearly full drive holds folder sync still** (2026-10-18, [`sync/low-disk.ts`](src/sync/low-disk.ts)). Every
|
|
550
|
+
pass measures the drive holding each folder whose session writes there (not a copy-first project, which only sends).
|
|
551
|
+
Under 2% of the drive, clamped to 5–20 GiB, the pairing's sync and git bridge hold still (`lowDisk`); they carry on
|
|
552
|
+
once the floor and 2 GiB more are free. `status` and the device card say why, with the numbers.
|
|
603
553
|
- **Keys and enrollments per environment.** A newly made key is commented `<hostname>-<environment>`, so the sandbox
|
|
604
554
|
files a new enrollment under that name. An existing key keeps its comment (a sandbox older than this agent would read
|
|
605
555
|
a changed comment on the same key as a second machine holding sync); the sandbox tells existing ones apart by machine
|
|
@@ -607,7 +557,7 @@ whose it is.
|
|
|
607
557
|
- **Tunnel ports per environment.** Under WSL's mirrored networking a distro's loopback is the Windows side's, so both
|
|
608
558
|
sides pairing one sandbox derived one port twice. A distro now derives its ports in 20000-23999 from its name and the
|
|
609
559
|
sandbox id; every native environment keeps 24000-27999 exactly as before, so nothing outside WSL moves.
|
|
610
|
-
- **One folder, one sync, across the PC.** `setup`
|
|
560
|
+
- **One folder, one sync, across the PC.** `setup` reads the other environments' `sync.json` (from the
|
|
611
561
|
Windows side each supervised distro's through `wsl.exe -d <distro> cat`; from a distro the Windows side's beside its
|
|
612
562
|
agent) and compare after one spelling: `C:\code\app` and `/mnt/c/code/app` are `drive:c/code/app`, and
|
|
613
563
|
`\\wsl.localhost\Ubuntu\home\ada\app` and Ubuntu's `/home/ada/app` are `wsl:ubuntu/home/ada/app`. An overlap is refused
|
|
@@ -642,17 +592,33 @@ whose it is.
|
|
|
642
592
|
each side's sandboxes to that side, a sandbox made from WSL had nobody backing it up, preparing its update or tidying
|
|
643
593
|
after it, so each environment now runs them for its own. Both back off from a slug that keeps failing, as auto-prepare does, and each has its switch
|
|
644
594
|
beside the update ones (`intentic-machine updates --backups off`, `--tidy off`).
|
|
645
|
-
- **File sync holds still while its sandbox is swapped here** ([`sync/
|
|
595
|
+
- **File sync holds still while its sandbox is swapped here** ([`sync/holds.ts`](src/sync/holds.ts) `holdsSync`). A
|
|
646
596
|
pairing's local slug is the first label of its sandbox's public hostname (what ic names a sandbox with one) or the
|
|
647
|
-
id in it (what ic names one from its connect token), so the mapping is exact. Its
|
|
648
|
-
cutover and the first quarter hour
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
597
|
+
id in it (what ic names one from its connect token), so the mapping is exact. Its sync holds still through the
|
|
598
|
+
cutover and the first quarter hour after the cutover began, and past that while ic still watches the swap and the
|
|
599
|
+
sandbox does not answer. The quarter hour is measured from the pairing's own `swapSince`, the cutover's start as ic
|
|
600
|
+
recorded it, so it lasts after ic lets its record of the swap go. (2026-10-20: a swap with no probation, such as the dev
|
|
601
|
+
loop, leaves no record seconds after its cutover, and a hold read off the record alone let go after about thirty
|
|
602
|
+
seconds. Giving ic's record a longer life was rejected: the hold is the agent's fact, and ic's record answers whether a
|
|
603
|
+
swap is going on.) A later swap of the same sandbox starts the quarter hour again. Only this environment's records
|
|
604
|
+
count: a distro syncing a sandbox the Windows side swaps is not held.
|
|
605
|
+
- **File sync runs or holds still by one rule** (2026-10-20, [`sync/holds.ts`](src/sync/holds.ts)). Eight facts on a
|
|
606
|
+
pairing hold its sync still: the owner's `sync pause` (`ownerPausedAt`), the sandbox said to be gone (`goneSince`),
|
|
607
|
+
its container away or in ic's trash (`containerAway`), a swap (`swapSince`), an hour without an answer
|
|
608
|
+
(`unreachableSince`), a nearly full drive (`lowDisk`), and a bring-back, restore or delivery writing into the folder
|
|
609
|
+
(`transferSince`, 2026-10-21; that operation also pauses its session itself, at once, before it writes). Each is kept
|
|
610
|
+
by the one rule that observes it, and none of
|
|
611
|
+
them touches Mutagen. Every pass, after the rules have run, `holdSessions` reads every session in one listing and
|
|
612
|
+
makes Mutagen agree: what runs while anything holds it is paused, and what is paused while nothing does is resumed,
|
|
613
|
+
one session per call and read back (`resumeSessions`), tried again each pass until Mutagen took it. A session is made
|
|
614
|
+
paused while its pairing is held. `sync resume` lifts the owner's pause alone and says what else still holds it; the
|
|
615
|
+
report carries the holds as `heldBy`, so a page offers Resume only for the owner's pause. Before this, each reason
|
|
616
|
+
paused and resumed Mutagen itself behind a marker of its own (`fileSyncAutoPaused`, `fileSyncSwapPaused`,
|
|
617
|
+
`fileSyncPausedFor`, `fileSyncLowDisk`, translated on read into the facts above), set only when it found the session
|
|
618
|
+
running, and a person's pause had no record at all. A marker cleared before the resume took (fair-moth, 2026-10-19),
|
|
619
|
+
one a reattach dropped (swift-cedar, 2026-10-17), or a pause another reason found in place left sync paused with
|
|
620
|
+
nothing to lift it, or lifted one somebody still meant. The first pass of this build takes every paused session no
|
|
621
|
+
fact explains as the owner's, once (`sync-owner-pauses-adopted`).
|
|
656
622
|
- (2026-10-15) **Nothing downloaded replaces a binary until the release vouches for it**
|
|
657
623
|
([`release-verify.ts`](src/release/release-verify.ts)). Before an upgrade runs the new agent (and the Windows launcher
|
|
658
624
|
beside it), before ic is put in place ([`tools/ic-binary.ts`](src/device/tools/ic-binary.ts)), and before setup
|
|
@@ -1003,8 +969,7 @@ person who runs it alone, and either way it never downloads anything.
|
|
|
1003
969
|
- [src/device/mcp.ts](src/device/mcp.ts) — every tool a sandbox can call on this device.
|
|
1004
970
|
- [src/device/policy.ts](src/device/policy.ts) — scope checks and the file-root boundary.
|
|
1005
971
|
- [src/sync/endpoint.ts](src/sync/endpoint.ts) — how a pairing reaches its sandbox: the tunnelled sshd (`tunnel.ts`), or Docker for a project on this machine.
|
|
1006
|
-
- [src/sync/
|
|
1007
|
-
- [src/sync/project/project-delivery.ts](src/sync/project/project-delivery.ts) — landed work written into an attached folder (`deliverProject`).
|
|
972
|
+
- [src/sync/project/project-delivery.ts](src/sync/project/project-delivery.ts) — landed work written into a project folder (`deliverProject`).
|
|
1008
973
|
- [src/sync/gone.ts](src/sync/gone.ts) — when a paired sandbox counts as gone; `gone-watch.ts` acts on it, `retire.ts` retires its pairings, `forget-command.ts` is `sync forget`.
|
|
1009
974
|
- [src/environments/machine.ts](src/environments/machine.ts) — the Windows root and its WSL children.
|
|
1010
975
|
- [src/upkeep/manifest.ts](src/upkeep/manifest.ts) — what the device upkeep finds and puts right; `reconcile.ts` runs it.
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { type Log, type Ui } from "@intentic/local-agent";
|
|
2
|
+
import { type PeerEnrollmentRequest } from "@intentic/sandbox-contract/schemas/hosts";
|
|
2
3
|
import type { CommandContext } from "@stricli/core";
|
|
3
4
|
import { type Narration } from "../cli-ui.js";
|
|
4
|
-
export declare const enroll: (sandboxUrl: string, pairToken: string, say?:
|
|
5
|
+
export declare const enroll: (sandboxUrl: string, pairToken: string, { identity, say }?: {
|
|
6
|
+
readonly identity?: PeerEnrollmentRequest;
|
|
7
|
+
readonly say?: Log;
|
|
8
|
+
}) => Promise<{
|
|
5
9
|
id: string;
|
|
6
10
|
token: string;
|
|
7
11
|
}>;
|
|
12
|
+
export declare const linkWait: (others: number, residentBefore: number | undefined, residentAfter: number | undefined) => number;
|
|
8
13
|
export declare const linkNamed: (urls: readonly string[], value: string) => string;
|
|
9
14
|
export declare const deviceUninstall: (say: Narration, sandbox?: string, { forGood, recordStays }?: {
|
|
10
15
|
readonly forGood?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/device/commands.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,GAAG,EAAiB,KAAK,EAAE,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/device/commands.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,GAAG,EAAiB,KAAK,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAExG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAA2B,KAAK,SAAS,EAAgB,MAAM,cAAc,CAAC;AAcrF,eAAO,MAAM,MAAM,eACH,MAAM,aACP,MAAM,sBACE;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAA;CAAE,KACrF,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAuBvC,CAAC;AA2FF,eAAO,MAAM,QAAQ,WAAY,MAAM,kBAAkB,MAAM,GAAG,SAAS,iBAAiB,MAAM,GAAG,SAAS,KAAG,MACc,CAAC;AAoChI,eAAO,MAAM,SAAS,SAAU,SAAS,MAAM,EAAE,SAAS,MAAM,KAAG,MASlE,CAAC;AAMF,eAAO,MAAM,eAAe,QACnB,SAAS,YACJ,MAAM,6BACyB;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,KACxG,OAAO,CAAC,MAAM,CAwBhB,CAAC;AAeF,eAAO,MAAM,oBAAoB,OAAc,EAAE,KAAG,OAAO,CAAC,IAAI,CA2B/D,CAAC;AAEF,eAAO,MAAM,cAAc;;;;CAAgE,CAAC"}
|
package/dist/device/commands.js
CHANGED
|
@@ -2,15 +2,21 @@ import { rm } from "node:fs/promises";
|
|
|
2
2
|
import { pollUntil } from "@intentic/base/async";
|
|
3
3
|
import { plural } from "@intentic/base/format";
|
|
4
4
|
import { explain } from "@intentic/local-agent";
|
|
5
|
+
import { environmentKeyOf } from "@intentic/sandbox-contract/schemas/hosts";
|
|
5
6
|
import { PeerEnrollmentAnswerSchema } from "@intentic/sandbox-contract/schemas/peer-enrollment";
|
|
6
7
|
import { buildCommand, machineUi, sandboxUrlOf } from "../cli-ui.js";
|
|
7
8
|
import { postWhileWarming } from "../daemon-base.js";
|
|
9
|
+
import { wslEnvironment } from "../environments/wsl.js";
|
|
8
10
|
import { completeSetup, prepareSetup } from "../install.js";
|
|
9
|
-
import {
|
|
11
|
+
import { machineId } from "../machine-id.js";
|
|
12
|
+
import { ensureResident, readResidentPid } from "../resident/resident.js";
|
|
10
13
|
import { auditPath, configPath, readLinks, readLinkStates, removeLinks, unreachableIn, upsertLink } from "./config.js";
|
|
11
14
|
const NOT_CONNECTED = "This device was not connected.";
|
|
12
|
-
export const enroll = async (sandboxUrl, pairToken, say) => {
|
|
13
|
-
const response = await postWhileWarming(sandboxUrl, "/system/hosts/enroll", {
|
|
15
|
+
export const enroll = async (sandboxUrl, pairToken, { identity, say } = {}) => {
|
|
16
|
+
const response = await postWhileWarming(sandboxUrl, "/system/hosts/enroll", {
|
|
17
|
+
headers: { "content-type": "application/json", "x-intentic-pair": pairToken },
|
|
18
|
+
body: JSON.stringify({ ...identity }),
|
|
19
|
+
}, {
|
|
14
20
|
doing: "connecting",
|
|
15
21
|
expired: explain(NOT_CONNECTED, "that pairing has expired.", "click Connect again on the device's card in your sandbox for a fresh command."),
|
|
16
22
|
say,
|
|
@@ -49,7 +55,10 @@ const SETUP_PLAN = [
|
|
|
49
55
|
];
|
|
50
56
|
const runSetup = async (ui, out, flags) => {
|
|
51
57
|
ui.step("device-enrolling", "enrolling this device with your sandbox…");
|
|
52
|
-
const { id, token } = await enroll(flags.url, flags.pair,
|
|
58
|
+
const { id, token } = await enroll(flags.url, flags.pair, {
|
|
59
|
+
identity: { machineId: machineId(), environment: environmentKeyOf({ wsl: await wslEnvironment() }) },
|
|
60
|
+
say: out,
|
|
61
|
+
});
|
|
53
62
|
const link = {
|
|
54
63
|
sandboxUrl: flags.url,
|
|
55
64
|
id,
|
|
@@ -58,9 +67,10 @@ const runSetup = async (ui, out, flags) => {
|
|
|
58
67
|
};
|
|
59
68
|
const links = await upsertLink(link);
|
|
60
69
|
ui.step("device-starting", "starting the agent on this device…");
|
|
70
|
+
const before = await readResidentPid();
|
|
61
71
|
await ensureResident(out);
|
|
62
72
|
await completeSetup(out);
|
|
63
|
-
const opened = await linkOpens(flags.url);
|
|
73
|
+
const opened = await linkOpens(flags.url, linkWait(links.length - 1, before, await readResidentPid()));
|
|
64
74
|
const others = links.length - 1;
|
|
65
75
|
ui.finished(opened ? "This device is connected." : "This device is linked. Its connection comes up as soon as the sandbox answers.", id, others === 0
|
|
66
76
|
? "Its permissions are set in the sandbox, on the same card you got this command from."
|
|
@@ -71,9 +81,11 @@ const runSetup = async (ui, out, flags) => {
|
|
|
71
81
|
};
|
|
72
82
|
const LINK_OPEN_TIMEOUT_MS = 20_000;
|
|
73
83
|
const LINK_OPEN_POLL_MS = 500;
|
|
74
|
-
const
|
|
84
|
+
const LINK_OPEN_GLANCE_MS = 2_000;
|
|
85
|
+
export const linkWait = (others, residentBefore, residentAfter) => others > 0 && residentBefore !== undefined && residentBefore === residentAfter ? LINK_OPEN_GLANCE_MS : LINK_OPEN_TIMEOUT_MS;
|
|
86
|
+
const linkOpens = async (url, timeoutMs) => await pollUntil(async () => (await readLinkStates())?.[url]?.state === "open", {
|
|
75
87
|
intervalMs: LINK_OPEN_POLL_MS,
|
|
76
|
-
timeoutMs
|
|
88
|
+
timeoutMs,
|
|
77
89
|
});
|
|
78
90
|
const uninstall = buildCommand({
|
|
79
91
|
docs: { brief: "Disconnect this device from one sandbox, or from all of them" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/device/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAoC,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAEhG,OAAO,EAAE,YAAY,EAAE,SAAS,EAAkB,YAAY,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/device/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/device/grant.d.ts
CHANGED
|
@@ -102,11 +102,11 @@ export declare const tolerantDeviceContract: {
|
|
|
102
102
|
}>;
|
|
103
103
|
localDir: z.ZodOptional<z.ZodString>;
|
|
104
104
|
remoteDir: z.ZodOptional<z.ZodString>;
|
|
105
|
-
projectsHost: z.ZodOptional<z.ZodBoolean>;
|
|
106
105
|
deliver: z.ZodOptional<z.ZodEnum<{
|
|
107
106
|
auto: "auto";
|
|
108
107
|
off: "off";
|
|
109
108
|
}>>;
|
|
109
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
110
110
|
mirroring: z.ZodOptional<z.ZodEnum<{
|
|
111
111
|
off: "off";
|
|
112
112
|
on: "on";
|
|
@@ -133,6 +133,7 @@ export declare const tolerantDeviceContract: {
|
|
|
133
133
|
}>>;
|
|
134
134
|
}, z.core.$strip>>>;
|
|
135
135
|
paused: z.ZodOptional<z.ZodBoolean>;
|
|
136
|
+
heldBy: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
136
137
|
backupStatus: z.ZodOptional<z.ZodString>;
|
|
137
138
|
lowDisk: z.ZodOptional<z.ZodObject<{
|
|
138
139
|
since: z.ZodNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grant.d.ts","sourceRoot":"","sources":["../../src/device/grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAExG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAyE,CAAC;AACvG,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAM1D,MAAM,WAAW,KAAK;IAClB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,eAAO,MAAM,SAAS,UAAW,UAAU,KAAG,KAK5C,CAAC;AAIH,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"grant.d.ts","sourceRoot":"","sources":["../../src/device/grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAExG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAyE,CAAC;AACvG,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAM1D,MAAM,WAAW,KAAK;IAClB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,eAAO,MAAM,SAAS,UAAW,UAAU,KAAG,KAK5C,CAAC;AAIH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGlC,CAAC"}
|
package/dist/device/router.d.ts
CHANGED
|
@@ -537,11 +537,11 @@ export declare const createHostRouter: (runtime: HostRuntime) => {
|
|
|
537
537
|
}>;
|
|
538
538
|
localDir: import("zod").ZodOptional<import("zod").ZodString>;
|
|
539
539
|
remoteDir: import("zod").ZodOptional<import("zod").ZodString>;
|
|
540
|
-
projectsHost: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
541
540
|
deliver: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
542
541
|
auto: "auto";
|
|
543
542
|
off: "off";
|
|
544
543
|
}>>;
|
|
544
|
+
slug: import("zod").ZodOptional<import("zod").ZodString>;
|
|
545
545
|
mirroring: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
546
546
|
off: "off";
|
|
547
547
|
on: "on";
|
|
@@ -568,6 +568,7 @@ export declare const createHostRouter: (runtime: HostRuntime) => {
|
|
|
568
568
|
}>>;
|
|
569
569
|
}, import("zod/v4/core").$strip>>>;
|
|
570
570
|
paused: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
571
|
+
heldBy: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
|
|
571
572
|
backupStatus: import("zod").ZodOptional<import("zod").ZodString>;
|
|
572
573
|
lowDisk: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
573
574
|
since: import("zod").ZodNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/device/router.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAkDpF,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,YAAY,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAGxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAE7C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACpC;AAmKD,eAAO,MAAM,gBAAgB,YAAa,WAAW
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/device/router.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAkDpF,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,YAAY,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAGxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAE7C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACpC;AAmKD,eAAO,MAAM,gBAAgB,YAAa,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFpD,CAAC"}
|
|
@@ -6,7 +6,7 @@ import { parseJsonWith } from "@intentic/base/json";
|
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import { readMachineConfig } from "../../environments/machine.js";
|
|
8
8
|
import { thisSide } from "../../environments/wsl.js";
|
|
9
|
-
import { pairingSlugs } from "../../sync/
|
|
9
|
+
import { pairingSlugs } from "../../sync/config.js";
|
|
10
10
|
import { lastLine, startRounds } from "./ic-rounds.js";
|
|
11
11
|
import { readSwaps, swapsUnderway } from "./ic-swaps.js";
|
|
12
12
|
import { readChannelSlugs } from "./swap-records.js";
|