@intentic/machine 1.345.0 → 1.346.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.
Files changed (113) hide show
  1. package/README.md +100 -135
  2. package/dist/device/commands.d.ts +6 -1
  3. package/dist/device/commands.d.ts.map +1 -1
  4. package/dist/device/commands.js +19 -7
  5. package/dist/device/commands.js.map +1 -1
  6. package/dist/device/grant.d.ts +2 -1
  7. package/dist/device/grant.d.ts.map +1 -1
  8. package/dist/device/router.d.ts +2 -1
  9. package/dist/device/router.d.ts.map +1 -1
  10. package/dist/device/sandbox-rounds/keeper.js +1 -1
  11. package/dist/device/sandbox-rounds/keeper.js.map +1 -1
  12. package/dist/device/tools/agent.d.ts.map +1 -1
  13. package/dist/device/tools/agent.js +7 -7
  14. package/dist/device/tools/agent.js.map +1 -1
  15. package/dist/device/tools/ic-binary.d.ts +1 -0
  16. package/dist/device/tools/ic-binary.d.ts.map +1 -1
  17. package/dist/device/tools/ic-binary.js +29 -1
  18. package/dist/device/tools/ic-binary.js.map +1 -1
  19. package/dist/device/tools/os/settings.js +3 -3
  20. package/dist/device/tools/os/settings.js.map +1 -1
  21. package/dist/device/tools/sandboxes.d.ts +1 -0
  22. package/dist/device/tools/sandboxes.d.ts.map +1 -1
  23. package/dist/device/tools/sandboxes.js +7 -2
  24. package/dist/device/tools/sandboxes.js.map +1 -1
  25. package/dist/install.d.ts +9 -1
  26. package/dist/install.d.ts.map +1 -1
  27. package/dist/install.js +28 -4
  28. package/dist/install.js.map +1 -1
  29. package/dist/resident/resident.d.ts.map +1 -1
  30. package/dist/resident/resident.js +1 -2
  31. package/dist/resident/resident.js.map +1 -1
  32. package/dist/status.d.ts.map +1 -1
  33. package/dist/status.js +1 -8
  34. package/dist/status.js.map +1 -1
  35. package/dist/sync/commands.d.ts +1 -9
  36. package/dist/sync/commands.d.ts.map +1 -1
  37. package/dist/sync/commands.js +48 -89
  38. package/dist/sync/commands.js.map +1 -1
  39. package/dist/sync/config.d.ts +21 -25
  40. package/dist/sync/config.d.ts.map +1 -1
  41. package/dist/sync/config.js +76 -35
  42. package/dist/sync/config.js.map +1 -1
  43. package/dist/sync/endpoint.d.ts +1 -1
  44. package/dist/sync/endpoint.d.ts.map +1 -1
  45. package/dist/sync/endpoint.js +2 -3
  46. package/dist/sync/endpoint.js.map +1 -1
  47. package/dist/sync/folders.d.ts.map +1 -1
  48. package/dist/sync/folders.js.map +1 -1
  49. package/dist/sync/gone-watch.d.ts +0 -1
  50. package/dist/sync/gone-watch.d.ts.map +1 -1
  51. package/dist/sync/gone-watch.js +16 -53
  52. package/dist/sync/gone-watch.js.map +1 -1
  53. package/dist/sync/holds.d.ts +30 -0
  54. package/dist/sync/holds.d.ts.map +1 -0
  55. package/dist/sync/holds.js +117 -0
  56. package/dist/sync/holds.js.map +1 -0
  57. package/dist/sync/low-disk.d.ts +2 -9
  58. package/dist/sync/low-disk.d.ts.map +1 -1
  59. package/dist/sync/low-disk.js +10 -38
  60. package/dist/sync/low-disk.js.map +1 -1
  61. package/dist/sync/mirror.d.ts +1 -4
  62. package/dist/sync/mirror.d.ts.map +1 -1
  63. package/dist/sync/mirror.js +57 -161
  64. package/dist/sync/mirror.js.map +1 -1
  65. package/dist/sync/mutagen-env.d.ts +1 -3
  66. package/dist/sync/mutagen-env.d.ts.map +1 -1
  67. package/dist/sync/mutagen-env.js +2 -12
  68. package/dist/sync/mutagen-env.js.map +1 -1
  69. package/dist/sync/mutagen-move.d.ts +3 -1
  70. package/dist/sync/mutagen-move.d.ts.map +1 -1
  71. package/dist/sync/mutagen-move.js +30 -22
  72. package/dist/sync/mutagen-move.js.map +1 -1
  73. package/dist/sync/mutagen.d.ts +4 -9
  74. package/dist/sync/mutagen.d.ts.map +1 -1
  75. package/dist/sync/mutagen.js +11 -71
  76. package/dist/sync/mutagen.js.map +1 -1
  77. package/dist/sync/project/project-commands.d.ts +0 -3
  78. package/dist/sync/project/project-commands.d.ts.map +1 -1
  79. package/dist/sync/project/project-commands.js +3 -2
  80. package/dist/sync/project/project-commands.js.map +1 -1
  81. package/dist/sync/project/project-delivery.d.ts.map +1 -1
  82. package/dist/sync/project/project-delivery.js +3 -3
  83. package/dist/sync/project/project-delivery.js.map +1 -1
  84. package/dist/sync/project/project-transfer.d.ts +4 -0
  85. package/dist/sync/project/project-transfer.d.ts.map +1 -1
  86. package/dist/sync/project/project-transfer.js +9 -2
  87. package/dist/sync/project/project-transfer.js.map +1 -1
  88. package/dist/sync/report.d.ts.map +1 -1
  89. package/dist/sync/report.js +16 -10
  90. package/dist/sync/report.js.map +1 -1
  91. package/dist/sync/retire.d.ts.map +1 -1
  92. package/dist/sync/retire.js +1 -2
  93. package/dist/sync/retire.js.map +1 -1
  94. package/dist/sync/tunnel.d.ts +4 -3
  95. package/dist/sync/tunnel.d.ts.map +1 -1
  96. package/dist/sync/tunnel.js +107 -42
  97. package/dist/sync/tunnel.js.map +1 -1
  98. package/dist/sync/uninstall.d.ts.map +1 -1
  99. package/dist/sync/uninstall.js +1 -1
  100. package/dist/sync/uninstall.js.map +1 -1
  101. package/dist/sync/wake.d.ts +3 -0
  102. package/dist/sync/wake.d.ts.map +1 -0
  103. package/dist/sync/wake.js +43 -0
  104. package/dist/sync/wake.js.map +1 -0
  105. package/package.json +9 -9
  106. package/dist/sync/attach-commands.d.ts +0 -39
  107. package/dist/sync/attach-commands.d.ts.map +0 -1
  108. package/dist/sync/attach-commands.js +0 -164
  109. package/dist/sync/attach-commands.js.map +0 -1
  110. package/dist/sync/swap-pause.d.ts +0 -10
  111. package/dist/sync/swap-pause.d.ts.map +0 -1
  112. package/dist/sync/swap-pause.js +0 -29
  113. 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
- Attaching the same folder again keeps its session and the watcher's pause and outage records, so an automatic pause
112
- still resumes when its reason ends. The host's enrollment and transport settings are refreshed.
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 pauses the folder's sync with that reason. When the sandbox still answers
128
- at its address, whether ic holds it nowhere or cannot say, it lives elsewhere now and the pairing moves onto ssh
129
- (paused instead without an enrollment to ride); in neither and silent, the sandbox is gone (below); otherwise its
130
- sync is paused until the container is back.
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
- - **This computer's own sandbox takes folders** (see [Folders attached to this computer's sandbox](#folders-attached-to-this-computers-sandbox)):
145
- `sync setup --projects-host` enrolls it with no folder of its own, and each folder the owner opens attaches to it as
146
- `/work/<name>` (`sync attach`), copy-first, with the land of a conversation written back into it by itself
147
- (`deliverProject`).
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 sessions
174
- are paused, an hour counted from `unreachableSince` in `sync.json` (2026-10-05: it was counted in memory, so an agent
175
- restarted more often than hourly never paused a dead sandbox's sessions). A sandbox that no longer exists is another
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 and the projects host keep
181
- their ports and their enrollments.
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 and the sync enrollment. The
187
- Windows side hands its own to the agent it starts in each distro, so every OS install of one PC answers with one id;
188
- a sandbox joins enrollments, sync enrollments and device rows on it, never on a hostname.
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). A pause an operation made and never lifted (the process killed in between) is recorded in
361
- `restore/<pairing key>/.paused`, and the next command about that folder resumes the session.
362
-
363
- ### Folders attached to this computer's sandbox
364
-
365
- Each computer has one always-available local sandbox, and any number of folders attach to it, each as `/work/<name>`.
366
- A folder used to get a project sandbox of its own (`sync setup --project`, above), which still works.
367
-
368
- **The projects host.** `intentic-machine sync setup --url <sandboxUrl> --pair <token> --projects-host` (with
369
- `--transport` and `--sandbox-id` as for any setup) enrolls the machine sandbox exactly as a setup does, and records a
370
- folderless pairing: `{ sandboxUrl, sandboxId, mode: "sync", syncToken, projectsHost: true, transport?, container? }`.
371
- It has no Mutagen session, no git bridge and no state backup. It holds the sandbox's sync token, and it is the one
372
- pairing that mirrors the sandbox's ports to localhost. It reaches the sandbox through Docker when the sandbox's
373
- container runs on this machine's engine, so its forwards ride `docker://` too. Refused:
374
-
375
- - `--projects-host` with `--dir`, `--remote-dir` or `--project`.
376
- - Turning a sandbox that syncs a folder into the projects host, and the other way round. Unpair first.
377
- - An enrollment that comes back ports-only.
378
-
379
- Enrolling again rotates the sandbox's one token per machine key, so the new token is written into every pairing of that
380
- sandbox (`withPairing` in [`sync/config.ts`](src/sync/config.ts)).
381
-
382
- **Attaching and detaching.** Both are local: no enrollment, no network. With `--json` each prints exactly one JSON
383
- object, `{ "ok": false, "error": "<sentence>" }` and exit code 1 on failure, as the copy-first commands do.
384
-
385
- | Command | Success output |
386
- |---|---|
387
- | `sync attach --sandbox-url <url> --dir <folder> --name <name>` | `{ "ok": true, "pairing": "<sandboxId>~<name>", "remoteDir": "/work/<name>", "folder": "<folder as given, absolute>" }` |
388
- | `sync detach --dir <folder>` | `{ "ok": true, "pairing": "<key>", "folder": "<folder>" }` |
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`. Its sessions are paused with the watcher's own marker, `fileSyncPausedFor: "gone"`; a pause
511
- somebody else made is left alone. Its ports come off localhost, its tunnel listener closes, no report is posted to
512
- it, nothing is created for it, and its folders do nothing more. One line says so, with the day it will be retired.
513
- - **Asked again** at most hourly (one ports poll), whatever the outcome. An answer clears all three fields, lifts the
514
- pause, and the next pass puts the ports back. A sandbox ic listed again (restored from its trash) is cleared at once
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 and
566
- resumes what was running. Made again from nothing, a two-way session would bring back what one side deleted while it
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 (`mutagen-moved.json` holds the names until then). The old daemon is stopped only
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 pauses folder sync** (2026-10-18, [`sync/low-disk.ts`](src/sync/low-disk.ts)). Every pass
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 sessions and git bridge pause (`fileSyncLowDisk`); they
601
- resume once the floor and 2 GiB more are free. While paused, no other pause's lifting resumes them, and the pause is
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` and `attach` read the other environments' `sync.json` (from the
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/swap-pause.ts`](src/sync/swap-pause.ts)). A
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 sessions are paused through the
648
- cutover and the first quarter hour of probation, and past that while the sandbox does not answer, then resumed; a
649
- pause somebody made is left alone. Only this environment's records count: a distro syncing a sandbox the Windows side
650
- swaps is not paused. (2026-10-19) Every resume the agent makes (after a swap, an outage, a gone verdict, a full
651
- drive, and `sync resume`) goes one session per call, awaited, and is checked by listing the sessions afterwards
652
- ([`sync/mutagen.ts`](src/sync/mutagen.ts) `resumeSessions`). A pause's mark stays until that check passes, and the
653
- next pass tries again. Before this, one `mutagen sync resume` over both sessions stopped at the first that could not
654
- reach a sandbox still coming up. It also ran blocking, which froze the transport it connects through. Its exit code
655
- was taken as the answer, so after a rebuild one session was often left paused with no mark to lift it.
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/attach-commands.ts](src/sync/attach-commands.ts) — `sync attach` and `sync detach`, folders on this computer's own sandbox.
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?: Log) => Promise<{
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;AAElF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAA2B,KAAK,SAAS,EAAgB,MAAM,cAAc,CAAC;AAUrF,eAAO,MAAM,MAAM,eAAsB,MAAM,aAAa,MAAM,QAAQ,GAAG,KAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAoBpH,CAAC;AAmHF,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"}
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"}
@@ -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 { ensureResident } from "../resident/resident.js";
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", { headers: { "x-intentic-pair": pairToken } }, {
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, out);
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 linkOpens = async (url) => await pollUntil(async () => (await readLinkStates())?.[url]?.state === "open", {
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: LINK_OPEN_TIMEOUT_MS,
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":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/device/commands.ts"],"names":[],"mappings":"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"}
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGlC,CAAC"}
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"}
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFpD,CAAC"}
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/swap-pause.js";
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";