@ours.network/install 1.2.1-nightly.43 → 1.2.1-nightly.44
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 +10 -3
- package/assets/release-lock.json +86 -85
- package/assets/release.json +5 -5
- package/assets/sources.json +7 -7
- package/lib/boot-readiness.mjs +67 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -739,7 +739,7 @@ Existing installation records keep their ports and identities. A listener acquir
|
|
|
739
739
|
by another process after preflight still causes startup to fail safely; no foreign
|
|
740
740
|
process is stopped and no retained installation is silently moved.
|
|
741
741
|
|
|
742
|
-
Workspace setup pins Fleet `1.2.0-nightly.
|
|
742
|
+
Workspace setup pins Fleet `1.2.0-nightly.57` with its recorded registry integrity. This release includes first-time Fleet setup through the host API for the account App, direct App access to the workspace services with the device credential, v2 positional one-use grants and automatic QR/connection-code output from `ours-fleet setup-tunnel`, optional private file/stdin inputs for legacy v1 payloads, a separate `ours-fleet link-device` command for additional devices, host prerequisite checks before the one-time workspace proof (`setup-tunnel --check`), `setup-tunnel --resume` to finish a setup that stopped after the host saved its private pending setup record (not when the proof's answer was lost, or after the setup window expired with an unconfirmed non-default port), and persists the available Fleet loopback port used by the workspace tunnel. It also accepts a setup-generated configuration left behind after the host enrollment state was removed, runs the host Codex when it is at least as new as the packaged one, offers only the Codex models the signed-in account can use, and removes the temporary setup contact after confirmation. Fleet serves no pages and opens no browser: every screen is in the App. Fleet also serves the workspace notification routes, produces notifications through the server gateway with the imported producer credential, accepts the App's device credential on the notification presence socket so an open App receives no push, and defaults agent wakes to `monitor.interrupt: after_tool` (Hermes: no interrupt; role snapshots saved before this default keep no interrupt). Existing installation identities and configured ports remain retained; a retained-port collision fails safely.
|
|
743
743
|
|
|
744
744
|
### App tunnel setup prerelease sequencing
|
|
745
745
|
|
|
@@ -756,7 +756,7 @@ connection code automatically; the App checks readiness and opens the code field
|
|
|
756
756
|
Private `--file`/`--stdin` transports remain optional and are the only transports
|
|
757
757
|
for legacy v1 payloads with long-lived credentials.
|
|
758
758
|
|
|
759
|
-
The nightly installer release manifest selects published Fleet `1.2.0-nightly.
|
|
759
|
+
The nightly installer release manifest selects published Fleet `1.2.0-nightly.57`
|
|
760
760
|
and its actual registry integrity through the normal release manifest/source-policy
|
|
761
761
|
generators. This release includes v2 argument and private-input support. The former
|
|
762
762
|
nightly.41 selection predates this capability. Merge and publish the repinned
|
|
@@ -813,7 +813,14 @@ Recovery introduces no host watchdog or service.
|
|
|
813
813
|
Host boot is a separate prerequisite. On Linux, enable the selected Docker
|
|
814
814
|
Engine system service; rootless Docker additionally needs its user service and
|
|
815
815
|
user linger. The installer reports read-only boot diagnostics and does not enable
|
|
816
|
-
or restart host services.
|
|
816
|
+
or restart host services. It reads the persistent `docker.service` unit-file
|
|
817
|
+
state, not whether Docker is running now: when Docker is running but not enabled,
|
|
818
|
+
it says that ours components depending on Docker will not start automatically
|
|
819
|
+
after a reboot and prints the optional command (`sudo systemctl enable
|
|
820
|
+
docker.service`, or `systemctl --user enable docker.service` plus
|
|
821
|
+
`sudo loginctl enable-linger USER` for rootless Docker). A masked unit, or a host
|
|
822
|
+
not booted with systemd or with no `docker.service` (WSL with Docker Desktop integration, snap,
|
|
823
|
+
OpenRC and similar), gets the same warning without a systemctl command. A reachable remote Engine or Docker Desktop context
|
|
817
824
|
cannot prove boot recovery on this machine. A custom Unix socket also has an
|
|
818
825
|
unverified boot-service binding; a host unit cannot establish its startup. On macOS/Windows with WSL, enable Docker
|
|
819
826
|
Desktop startup at sign-in; this does not provide pre-login startup. Rootless
|
package/assets/release-lock.json
CHANGED
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
"@ours.network/codex": "1.2.0-nightly.13",
|
|
14
14
|
"@ours.network/cowork": "1.3.3-nightly.20261005.f549477",
|
|
15
15
|
"@ours.network/daemon": "3.8.1-nightly.9",
|
|
16
|
-
"@ours.network/fleet": "1.2.0-nightly.
|
|
16
|
+
"@ours.network/fleet": "1.2.0-nightly.57",
|
|
17
17
|
"@ours.network/mcp": "1.2.0-nightly.13",
|
|
18
18
|
"@ours.network/messenger-server": "1.0.31-nightly.17",
|
|
19
|
-
"@ours.network/notifications": "0.3.1-nightly.
|
|
19
|
+
"@ours.network/notifications": "0.3.1-nightly.3",
|
|
20
20
|
"@ours.network/sdk": "3.8.1-nightly.17",
|
|
21
21
|
"@ours.network/tg-connector": "1.0.1-nightly.11"
|
|
22
22
|
}
|
|
@@ -585,9 +585,9 @@
|
|
|
585
585
|
}
|
|
586
586
|
},
|
|
587
587
|
"node_modules/@fastify/ajv-compiler": {
|
|
588
|
-
"version": "4.0.
|
|
589
|
-
"resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.
|
|
590
|
-
"integrity": "sha512-
|
|
588
|
+
"version": "4.0.7",
|
|
589
|
+
"resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.7.tgz",
|
|
590
|
+
"integrity": "sha512-VP0yIfwlc1ohj733keYDqyHm1VWeP9VQxYomunhr90jkC4aNNibbkrRiaNgPgqj1ORxUenILR4qzA/ppYBNAtQ==",
|
|
591
591
|
"funding": [
|
|
592
592
|
{
|
|
593
593
|
"type": "github",
|
|
@@ -606,9 +606,9 @@
|
|
|
606
606
|
}
|
|
607
607
|
},
|
|
608
608
|
"node_modules/@fastify/ajv-compiler/node_modules/fast-uri": {
|
|
609
|
-
"version": "4.2.
|
|
610
|
-
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.2.
|
|
611
|
-
"integrity": "sha512-
|
|
609
|
+
"version": "4.2.2",
|
|
610
|
+
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.2.2.tgz",
|
|
611
|
+
"integrity": "sha512-EwVpUMzLVNOmcWW0zi5G3JJwkopB6XXjnVvNBGfqrMMsVew2hkQWl5e/pe/CfYUeS6jt4cIO2MnamEW7v/7wPw==",
|
|
612
612
|
"funding": [
|
|
613
613
|
{
|
|
614
614
|
"type": "github",
|
|
@@ -621,10 +621,26 @@
|
|
|
621
621
|
],
|
|
622
622
|
"license": "BSD-3-Clause"
|
|
623
623
|
},
|
|
624
|
+
"node_modules/@fastify/deepmerge": {
|
|
625
|
+
"version": "3.2.2",
|
|
626
|
+
"resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-3.2.2.tgz",
|
|
627
|
+
"integrity": "sha512-155eqA/WMQdN6gUD4RrhS2K0Pcz2Ou9pQ86L0sipOpP9ONbTA6oYw/hW4VdBjR4egcDHqmWUK9x80oUX7S1mDQ==",
|
|
628
|
+
"funding": [
|
|
629
|
+
{
|
|
630
|
+
"type": "github",
|
|
631
|
+
"url": "https://github.com/sponsors/fastify"
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
"type": "opencollective",
|
|
635
|
+
"url": "https://opencollective.com/fastify"
|
|
636
|
+
}
|
|
637
|
+
],
|
|
638
|
+
"license": "MIT"
|
|
639
|
+
},
|
|
624
640
|
"node_modules/@fastify/error": {
|
|
625
|
-
"version": "4.2.
|
|
626
|
-
"resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.2.
|
|
627
|
-
"integrity": "sha512-
|
|
641
|
+
"version": "4.2.1",
|
|
642
|
+
"resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.2.1.tgz",
|
|
643
|
+
"integrity": "sha512-MYBumuIwP+5MIpXSyKm6/o1Eigcoij186lWUssX3LH5U8KWqU0ktZhzC4CErIX9EJeQeRGI+zJZQWakBlFbUcg==",
|
|
628
644
|
"funding": [
|
|
629
645
|
{
|
|
630
646
|
"type": "github",
|
|
@@ -638,9 +654,9 @@
|
|
|
638
654
|
"license": "MIT"
|
|
639
655
|
},
|
|
640
656
|
"node_modules/@fastify/fast-json-stringify-compiler": {
|
|
641
|
-
"version": "5.1.
|
|
642
|
-
"resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.1.
|
|
643
|
-
"integrity": "sha512-
|
|
657
|
+
"version": "5.1.1",
|
|
658
|
+
"resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.1.1.tgz",
|
|
659
|
+
"integrity": "sha512-pyxRKk7UpUnnrztP9pF4+ZYxusEQ4LifTyzRdiXmyql1QezNHxO02D25MVU2o4kMeAMYWAjG6RKRlojgkbiDAw==",
|
|
644
660
|
"funding": [
|
|
645
661
|
{
|
|
646
662
|
"type": "github",
|
|
@@ -657,9 +673,9 @@
|
|
|
657
673
|
}
|
|
658
674
|
},
|
|
659
675
|
"node_modules/@fastify/forwarded": {
|
|
660
|
-
"version": "3.
|
|
661
|
-
"resolved": "https://registry.npmjs.org/@fastify/forwarded/-/forwarded-3.
|
|
662
|
-
"integrity": "sha512-
|
|
676
|
+
"version": "3.1.1",
|
|
677
|
+
"resolved": "https://registry.npmjs.org/@fastify/forwarded/-/forwarded-3.1.1.tgz",
|
|
678
|
+
"integrity": "sha512-XfDtW2Icvhqi6DP1YHFK4q/E8WpNd3+raBdzAyVZxmTInbFTtnEEKvEAMMOVdFuRyv+ynYipaA9D8FvjPqACkw==",
|
|
663
679
|
"funding": [
|
|
664
680
|
{
|
|
665
681
|
"type": "github",
|
|
@@ -673,9 +689,9 @@
|
|
|
673
689
|
"license": "MIT"
|
|
674
690
|
},
|
|
675
691
|
"node_modules/@fastify/merge-json-schemas": {
|
|
676
|
-
"version": "0.2.
|
|
677
|
-
"resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.
|
|
678
|
-
"integrity": "sha512-
|
|
692
|
+
"version": "0.2.2",
|
|
693
|
+
"resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.2.tgz",
|
|
694
|
+
"integrity": "sha512-d/gx9sRbUCVgGRGzma46wLcwiY8noTqO2Nmjg/vbTARxHRE5bdh5PIL8s97Lt1X7ScRWRW52eVYxwIoPwIdVUA==",
|
|
679
695
|
"funding": [
|
|
680
696
|
{
|
|
681
697
|
"type": "github",
|
|
@@ -692,9 +708,9 @@
|
|
|
692
708
|
}
|
|
693
709
|
},
|
|
694
710
|
"node_modules/@fastify/proxy-addr": {
|
|
695
|
-
"version": "5.1.
|
|
696
|
-
"resolved": "https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-5.1.
|
|
697
|
-
"integrity": "sha512-
|
|
711
|
+
"version": "5.1.2",
|
|
712
|
+
"resolved": "https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-5.1.2.tgz",
|
|
713
|
+
"integrity": "sha512-uqB4QsgVoro0XDC+DIftIMGXHdBPn+lK6Ek3xXAIxPMCJfqxnbtyEoMCm2KPUVOuIosd7Cyw9HawEqMFM/UA+g==",
|
|
698
714
|
"funding": [
|
|
699
715
|
{
|
|
700
716
|
"type": "github",
|
|
@@ -1002,9 +1018,9 @@
|
|
|
1002
1018
|
}
|
|
1003
1019
|
},
|
|
1004
1020
|
"node_modules/@ours.network/fleet": {
|
|
1005
|
-
"version": "1.2.0-nightly.
|
|
1006
|
-
"resolved": "https://registry.npmjs.org/@ours.network/fleet/-/fleet-1.2.0-nightly.
|
|
1007
|
-
"integrity": "sha512-
|
|
1021
|
+
"version": "1.2.0-nightly.57",
|
|
1022
|
+
"resolved": "https://registry.npmjs.org/@ours.network/fleet/-/fleet-1.2.0-nightly.57.tgz",
|
|
1023
|
+
"integrity": "sha512-FAgN3L5yOlWQgGFJ4g0x1jpCqpAtYvRnol+ZBrgR8vCl+Ex1Ebct6GiSTIdkPtvYth4lidUgSkBpJqwiSTkx3Q==",
|
|
1008
1024
|
"license": "FSL-1.1-Apache-2.0",
|
|
1009
1025
|
"dependencies": {
|
|
1010
1026
|
"@agentclientprotocol/sdk": "^1.3.0",
|
|
@@ -1067,9 +1083,9 @@
|
|
|
1067
1083
|
}
|
|
1068
1084
|
},
|
|
1069
1085
|
"node_modules/@ours.network/notifications": {
|
|
1070
|
-
"version": "0.3.1-nightly.
|
|
1071
|
-
"resolved": "https://registry.npmjs.org/@ours.network/notifications/-/notifications-0.3.1-nightly.
|
|
1072
|
-
"integrity": "sha512-
|
|
1086
|
+
"version": "0.3.1-nightly.3",
|
|
1087
|
+
"resolved": "https://registry.npmjs.org/@ours.network/notifications/-/notifications-0.3.1-nightly.3.tgz",
|
|
1088
|
+
"integrity": "sha512-mt69E2LLkfwBMOJm7IP49wLIO9KtugBqh6nQpfrfbRuTlenjyrmZqcAuhW1CyI2R1H518B0Evxagnx9/V9fIig==",
|
|
1073
1089
|
"license": "FSL-1.1-Apache-2.0",
|
|
1074
1090
|
"dependencies": {
|
|
1075
1091
|
"web-push": "3.6.7",
|
|
@@ -1244,9 +1260,9 @@
|
|
|
1244
1260
|
}
|
|
1245
1261
|
},
|
|
1246
1262
|
"node_modules/avvio": {
|
|
1247
|
-
"version": "9.3.
|
|
1248
|
-
"resolved": "https://registry.npmjs.org/avvio/-/avvio-9.3.
|
|
1249
|
-
"integrity": "sha512-
|
|
1263
|
+
"version": "9.3.1",
|
|
1264
|
+
"resolved": "https://registry.npmjs.org/avvio/-/avvio-9.3.1.tgz",
|
|
1265
|
+
"integrity": "sha512-QyTKW61/qlba+cUQBm/sT9X8lri4UdomqSDwCnrnj1IvLVDRRiXRkz4CgBRWB+/cmfC7SK5WQc8T1vSdGvaUcQ==",
|
|
1250
1266
|
"funding": [
|
|
1251
1267
|
{
|
|
1252
1268
|
"type": "github",
|
|
@@ -1840,9 +1856,9 @@
|
|
|
1840
1856
|
"license": "MIT"
|
|
1841
1857
|
},
|
|
1842
1858
|
"node_modules/fast-json-stringify": {
|
|
1843
|
-
"version": "7.0
|
|
1844
|
-
"resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-7.0.
|
|
1845
|
-
"integrity": "sha512-
|
|
1859
|
+
"version": "7.1.0",
|
|
1860
|
+
"resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-7.1.0.tgz",
|
|
1861
|
+
"integrity": "sha512-wAhAQ+es0aH+x5OofdCHlZZFdqwtiM6lpEosaRIwfg271WYeEQ/tPcXdu5vpzlqZpbJ4WNqaW4QR5UjfG4Dc2w==",
|
|
1846
1862
|
"funding": [
|
|
1847
1863
|
{
|
|
1848
1864
|
"type": "github",
|
|
@@ -1864,9 +1880,9 @@
|
|
|
1864
1880
|
}
|
|
1865
1881
|
},
|
|
1866
1882
|
"node_modules/fast-json-stringify/node_modules/fast-uri": {
|
|
1867
|
-
"version": "4.2.
|
|
1868
|
-
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.2.
|
|
1869
|
-
"integrity": "sha512-
|
|
1883
|
+
"version": "4.2.2",
|
|
1884
|
+
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.2.2.tgz",
|
|
1885
|
+
"integrity": "sha512-EwVpUMzLVNOmcWW0zi5G3JJwkopB6XXjnVvNBGfqrMMsVew2hkQWl5e/pe/CfYUeS6jt4cIO2MnamEW7v/7wPw==",
|
|
1870
1886
|
"funding": [
|
|
1871
1887
|
{
|
|
1872
1888
|
"type": "github",
|
|
@@ -1946,9 +1962,9 @@
|
|
|
1946
1962
|
}
|
|
1947
1963
|
},
|
|
1948
1964
|
"node_modules/fastify-plugin": {
|
|
1949
|
-
"version": "6.0.
|
|
1950
|
-
"resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-6.0.
|
|
1951
|
-
"integrity": "sha512-
|
|
1965
|
+
"version": "6.0.1",
|
|
1966
|
+
"resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-6.0.1.tgz",
|
|
1967
|
+
"integrity": "sha512-4wW4RxSmvPXLrh5mgQEiu43qU3bw44N2ss4FTkTkQIbprUhE+/s43QX0j/ttcztdWK7PEkHqVthdc5GdEGDvjA==",
|
|
1952
1968
|
"funding": [
|
|
1953
1969
|
{
|
|
1954
1970
|
"type": "github",
|
|
@@ -1992,9 +2008,9 @@
|
|
|
1992
2008
|
}
|
|
1993
2009
|
},
|
|
1994
2010
|
"node_modules/find-my-way": {
|
|
1995
|
-
"version": "9.
|
|
1996
|
-
"resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.
|
|
1997
|
-
"integrity": "sha512-
|
|
2011
|
+
"version": "9.10.0",
|
|
2012
|
+
"resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.10.0.tgz",
|
|
2013
|
+
"integrity": "sha512-eru+uCPQ2g+nLBkf84MHP/KyNNMar0BDy0j+i8Fb72GF9/YHBZ58q7FODUtfVV7XU9nfRUHXSmaM8NmZcIbZ4Q==",
|
|
1998
2014
|
"license": "MIT",
|
|
1999
2015
|
"dependencies": {
|
|
2000
2016
|
"fast-deep-equal": "^3.1.3",
|
|
@@ -2334,9 +2350,9 @@
|
|
|
2334
2350
|
"license": "MIT"
|
|
2335
2351
|
},
|
|
2336
2352
|
"node_modules/json-schema-ref-resolver": {
|
|
2337
|
-
"version": "3.0.
|
|
2338
|
-
"resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-3.0.
|
|
2339
|
-
"integrity": "sha512-
|
|
2353
|
+
"version": "3.0.1",
|
|
2354
|
+
"resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-3.0.1.tgz",
|
|
2355
|
+
"integrity": "sha512-w+HwgljXpVwZ3IidoUR1qPZxSOQ+NRQWuVe6a5pe8XbHsNZE4UAwVPUvzZagn7yBKbJtt6UJnRFYbNTRPZI45Q==",
|
|
2340
2356
|
"funding": [
|
|
2341
2357
|
{
|
|
2342
2358
|
"type": "github",
|
|
@@ -2401,9 +2417,9 @@
|
|
|
2401
2417
|
}
|
|
2402
2418
|
},
|
|
2403
2419
|
"node_modules/light-my-request": {
|
|
2404
|
-
"version": "6.
|
|
2405
|
-
"resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.
|
|
2406
|
-
"integrity": "sha512-
|
|
2420
|
+
"version": "6.8.0",
|
|
2421
|
+
"resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.8.0.tgz",
|
|
2422
|
+
"integrity": "sha512-5Q8PjoSEdtGIB8fikZsTem5vgRo4F2mR6vUKTDW/H1g6MtAt8e3duQbg/QxL5yzg6BZhor2KOUm3hhWMWLTZwg==",
|
|
2407
2423
|
"funding": [
|
|
2408
2424
|
{
|
|
2409
2425
|
"type": "github",
|
|
@@ -2416,40 +2432,25 @@
|
|
|
2416
2432
|
],
|
|
2417
2433
|
"license": "BSD-3-Clause",
|
|
2418
2434
|
"dependencies": {
|
|
2419
|
-
"
|
|
2420
|
-
"
|
|
2421
|
-
"
|
|
2435
|
+
"@fastify/deepmerge": "^3.1.0",
|
|
2436
|
+
"cookie": "^2.0.0",
|
|
2437
|
+
"process-warning": "^5.0.0",
|
|
2438
|
+
"set-cookie-parser": "^3.0.1"
|
|
2422
2439
|
}
|
|
2423
2440
|
},
|
|
2424
2441
|
"node_modules/light-my-request/node_modules/cookie": {
|
|
2425
|
-
"version": "
|
|
2426
|
-
"resolved": "https://registry.npmjs.org/cookie/-/cookie-
|
|
2427
|
-
"integrity": "sha512-
|
|
2442
|
+
"version": "2.0.1",
|
|
2443
|
+
"resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.1.tgz",
|
|
2444
|
+
"integrity": "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==",
|
|
2428
2445
|
"license": "MIT",
|
|
2429
2446
|
"engines": {
|
|
2430
|
-
"node": ">=
|
|
2447
|
+
"node": ">=22"
|
|
2431
2448
|
},
|
|
2432
2449
|
"funding": {
|
|
2433
2450
|
"type": "opencollective",
|
|
2434
2451
|
"url": "https://opencollective.com/express"
|
|
2435
2452
|
}
|
|
2436
2453
|
},
|
|
2437
|
-
"node_modules/light-my-request/node_modules/process-warning": {
|
|
2438
|
-
"version": "4.0.1",
|
|
2439
|
-
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz",
|
|
2440
|
-
"integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==",
|
|
2441
|
-
"funding": [
|
|
2442
|
-
{
|
|
2443
|
-
"type": "github",
|
|
2444
|
-
"url": "https://github.com/sponsors/fastify"
|
|
2445
|
-
},
|
|
2446
|
-
{
|
|
2447
|
-
"type": "opencollective",
|
|
2448
|
-
"url": "https://opencollective.com/fastify"
|
|
2449
|
-
}
|
|
2450
|
-
],
|
|
2451
|
-
"license": "MIT"
|
|
2452
|
-
},
|
|
2453
2454
|
"node_modules/locate-path": {
|
|
2454
2455
|
"version": "5.0.0",
|
|
2455
2456
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
|
@@ -2967,9 +2968,9 @@
|
|
|
2967
2968
|
}
|
|
2968
2969
|
},
|
|
2969
2970
|
"node_modules/process-warning": {
|
|
2970
|
-
"version": "5.1.
|
|
2971
|
-
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.1.
|
|
2972
|
-
"integrity": "sha512-
|
|
2971
|
+
"version": "5.1.1",
|
|
2972
|
+
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.1.1.tgz",
|
|
2973
|
+
"integrity": "sha512-oCkNVj4OKnKEcocVBcDfiIugN1/cE6rgfT3nCtzeqZPA8+rIxMaQ0xXzIkGP8Gj2qUaP1UR7uhJ1VD8lUCpzCg==",
|
|
2973
2974
|
"funding": [
|
|
2974
2975
|
{
|
|
2975
2976
|
"type": "github",
|
|
@@ -3219,9 +3220,9 @@
|
|
|
3219
3220
|
"license": "MIT"
|
|
3220
3221
|
},
|
|
3221
3222
|
"node_modules/safe-regex2": {
|
|
3222
|
-
"version": "5.1.
|
|
3223
|
-
"resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.1.
|
|
3224
|
-
"integrity": "sha512-
|
|
3223
|
+
"version": "5.1.2",
|
|
3224
|
+
"resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.1.2.tgz",
|
|
3225
|
+
"integrity": "sha512-tAtCGFPPP02VroDVzp4daGi6bC7jWG+41D47GKf18FeH/ubvKQHT9VmhAkvtjNOmJwqtApzWeUpEhkyEYULvmw==",
|
|
3225
3226
|
"funding": [
|
|
3226
3227
|
{
|
|
3227
3228
|
"type": "github",
|
|
@@ -3265,9 +3266,9 @@
|
|
|
3265
3266
|
}
|
|
3266
3267
|
},
|
|
3267
3268
|
"node_modules/secure-json-parse": {
|
|
3268
|
-
"version": "4.1.
|
|
3269
|
-
"resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.
|
|
3270
|
-
"integrity": "sha512-
|
|
3269
|
+
"version": "4.1.1",
|
|
3270
|
+
"resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.1.tgz",
|
|
3271
|
+
"integrity": "sha512-lnd81MQEZKjhW/Gd2TQqdd4XP6QYNdDW/EP+I7nTrFHP9y2LmaGPIHk9xsnzcOiEr1c39c/e84xFgGviQKBTRw==",
|
|
3271
3272
|
"funding": [
|
|
3272
3273
|
{
|
|
3273
3274
|
"type": "github",
|
|
@@ -3344,9 +3345,9 @@
|
|
|
3344
3345
|
"license": "ISC"
|
|
3345
3346
|
},
|
|
3346
3347
|
"node_modules/set-cookie-parser": {
|
|
3347
|
-
"version": "
|
|
3348
|
-
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-
|
|
3349
|
-
"integrity": "sha512-
|
|
3348
|
+
"version": "3.1.3",
|
|
3349
|
+
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.3.tgz",
|
|
3350
|
+
"integrity": "sha512-xletSdAI5efyVJjsatBbzDkXl3M/Zmad3xfnQe7ZXuBB0yNwW7C2WFsNGjdRNfZunmNHQuX79xs/ACMTLCdcew==",
|
|
3350
3351
|
"license": "MIT"
|
|
3351
3352
|
},
|
|
3352
3353
|
"node_modules/setprototypeof": {
|
package/assets/release.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": 1,
|
|
3
3
|
"channel": "nightly",
|
|
4
|
-
"installerVersion": "1.2.1-nightly.
|
|
4
|
+
"installerVersion": "1.2.1-nightly.44",
|
|
5
5
|
"packages": {
|
|
6
6
|
"@ours.network/sdk": {
|
|
7
7
|
"version": "3.8.1-nightly.17",
|
|
@@ -24,12 +24,12 @@
|
|
|
24
24
|
"integrity": "sha512-03qDDGRgN9pBGsBsCcvArhPuYfMblqsaXS9HinxAzOSiI3PaoNOh+4MxIAOoHXoE/12xxCDf7kbMdEAR0CPIfg=="
|
|
25
25
|
},
|
|
26
26
|
"@ours.network/notifications": {
|
|
27
|
-
"version": "0.3.1-nightly.
|
|
28
|
-
"integrity": "sha512-
|
|
27
|
+
"version": "0.3.1-nightly.3",
|
|
28
|
+
"integrity": "sha512-mt69E2LLkfwBMOJm7IP49wLIO9KtugBqh6nQpfrfbRuTlenjyrmZqcAuhW1CyI2R1H518B0Evxagnx9/V9fIig=="
|
|
29
29
|
},
|
|
30
30
|
"@ours.network/fleet": {
|
|
31
|
-
"version": "1.2.0-nightly.
|
|
32
|
-
"integrity": "sha512-
|
|
31
|
+
"version": "1.2.0-nightly.57",
|
|
32
|
+
"integrity": "sha512-FAgN3L5yOlWQgGFJ4g0x1jpCqpAtYvRnol+ZBrgR8vCl+Ex1Ebct6GiSTIdkPtvYth4lidUgSkBpJqwiSTkx3Q=="
|
|
33
33
|
},
|
|
34
34
|
"@ours.network/mcp": {
|
|
35
35
|
"version": "1.2.0-nightly.13",
|
package/assets/sources.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"release": {
|
|
3
3
|
"schema": 1,
|
|
4
4
|
"channel": "nightly",
|
|
5
|
-
"installerVersion": "1.2.1-nightly.
|
|
5
|
+
"installerVersion": "1.2.1-nightly.44",
|
|
6
6
|
"packages": {
|
|
7
7
|
"@ours.network/sdk": {
|
|
8
8
|
"version": "3.8.1-nightly.17",
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
"integrity": "sha512-03qDDGRgN9pBGsBsCcvArhPuYfMblqsaXS9HinxAzOSiI3PaoNOh+4MxIAOoHXoE/12xxCDf7kbMdEAR0CPIfg=="
|
|
26
26
|
},
|
|
27
27
|
"@ours.network/notifications": {
|
|
28
|
-
"version": "0.3.1-nightly.
|
|
29
|
-
"integrity": "sha512-
|
|
28
|
+
"version": "0.3.1-nightly.3",
|
|
29
|
+
"integrity": "sha512-mt69E2LLkfwBMOJm7IP49wLIO9KtugBqh6nQpfrfbRuTlenjyrmZqcAuhW1CyI2R1H518B0Evxagnx9/V9fIig=="
|
|
30
30
|
},
|
|
31
31
|
"@ours.network/fleet": {
|
|
32
|
-
"version": "1.2.0-nightly.
|
|
33
|
-
"integrity": "sha512-
|
|
32
|
+
"version": "1.2.0-nightly.57",
|
|
33
|
+
"integrity": "sha512-FAgN3L5yOlWQgGFJ4g0x1jpCqpAtYvRnol+ZBrgR8vCl+Ex1Ebct6GiSTIdkPtvYth4lidUgSkBpJqwiSTkx3Q=="
|
|
34
34
|
},
|
|
35
35
|
"@ours.network/mcp": {
|
|
36
36
|
"version": "1.2.0-nightly.13",
|
|
@@ -83,11 +83,11 @@
|
|
|
83
83
|
},
|
|
84
84
|
"@ours.network/notifications": {
|
|
85
85
|
"type": "npm",
|
|
86
|
-
"version": "0.3.1-nightly.
|
|
86
|
+
"version": "0.3.1-nightly.3"
|
|
87
87
|
},
|
|
88
88
|
"@ours.network/fleet": {
|
|
89
89
|
"type": "npm",
|
|
90
|
-
"version": "1.2.0-nightly.
|
|
90
|
+
"version": "1.2.0-nightly.57"
|
|
91
91
|
},
|
|
92
92
|
"@ours.network/mcp": {
|
|
93
93
|
"type": "npm",
|
package/lib/boot-readiness.mjs
CHANGED
|
@@ -1,3 +1,26 @@
|
|
|
1
|
+
import { warn } from './ui.mjs';
|
|
2
|
+
|
|
3
|
+
const NO_AUTOSTART = 'ours components that depend on Docker will not start automatically after a reboot until Docker is started';
|
|
4
|
+
const OPTIONAL = 'The installer does not change this for you.';
|
|
5
|
+
|
|
6
|
+
/** Persistent unit-file state only: `is-active`/a reachable Engine says nothing about the next boot. */
|
|
7
|
+
async function unitFileState(effects, scope) {
|
|
8
|
+
// `is-enabled` reads unit files offline, so it answers even where systemd is not the init
|
|
9
|
+
// system and its answer decides nothing. /run/systemd/system is sd_booted(3)'s own test.
|
|
10
|
+
if (!effects.exists('/run/systemd/system')) return 'unavailable';
|
|
11
|
+
try {
|
|
12
|
+
if (scope.length) await effects.run('systemctl', [...scope, 'show-environment']); // a user manager must be running
|
|
13
|
+
// 1 = disabled/masked, 4 = no such unit (older systemd reports that as 1 with empty output).
|
|
14
|
+
const state = (await effects.run('systemctl', [...scope, 'is-enabled', 'docker.service'], { allowCodes: [1, 4] })).stdout.trim().split('\n')[0];
|
|
15
|
+
if (state === 'enabled') return 'enabled';
|
|
16
|
+
// enabled-runtime lives in /run and is gone after the reboot it is supposed to cover.
|
|
17
|
+
if (state === 'disabled' || state === 'enabled-runtime') return 'disabled';
|
|
18
|
+
if (state === 'masked' || state === 'masked-runtime') return 'masked';
|
|
19
|
+
if (state === '' || state === 'not-found') return 'unavailable';
|
|
20
|
+
return 'unknown';
|
|
21
|
+
} catch { return 'unavailable'; } // no systemctl, or the host/session is not running systemd
|
|
22
|
+
}
|
|
23
|
+
|
|
1
24
|
/** Diagnose availability separately from boot enablement. Never alter host services. */
|
|
2
25
|
export async function reportBootReadiness(effects, record) {
|
|
3
26
|
const platform = effects.platform.platform;
|
|
@@ -16,28 +39,58 @@ export async function reportBootReadiness(effects, record) {
|
|
|
16
39
|
effects.out('Container recovery requires Docker Desktop to start at sign-in. Enable its startup setting; this installer does not arrange pre-login host boot on this platform.');
|
|
17
40
|
return;
|
|
18
41
|
}
|
|
42
|
+
let endpoint, rootless;
|
|
19
43
|
try {
|
|
20
44
|
const context = JSON.parse((await effects.run('docker', ['context', 'inspect'])).stdout);
|
|
21
|
-
|
|
22
|
-
|
|
45
|
+
// The CLI runs with this same environment and reports the endpoint it resolved from
|
|
46
|
+
// DOCKER_HOST/DOCKER_CONTEXT; their precedence differs between its documentation and releases.
|
|
47
|
+
endpoint = context[0]?.Endpoints?.docker?.Host;
|
|
48
|
+
if (!endpoint?.startsWith('unix://') || endpoint.includes('/.docker/desktop/')) {
|
|
23
49
|
effects.out('Container recovery requires the selected remote/Desktop Docker Engine to start independently; local systemd boot cannot be verified for this context.');
|
|
24
50
|
return;
|
|
25
51
|
}
|
|
26
52
|
const info = JSON.parse((await effects.run('docker', ['info', '--format', '{{json .SecurityOptions}}'])).stdout);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
53
|
+
rootless = info.some(option => option.startsWith('name=rootless'));
|
|
54
|
+
} catch {
|
|
55
|
+
effects.out(warn(`Docker's start-at-boot setting could not be checked because the selected Docker Engine did not answer. If Docker is not set to start at boot, ${NO_AUTOSTART}.`));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const sockets = rootless ? [`unix:///run/user/${process.getuid()}/docker.sock`] : ['unix:///var/run/docker.sock', 'unix:///run/docker.sock'];
|
|
59
|
+
if (!sockets.includes(endpoint)) {
|
|
60
|
+
effects.out('The selected custom Docker socket is reachable, but its boot service binding is unverified; enable and verify the service owning that Engine.');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const scope = rootless ? ['--user'] : [];
|
|
64
|
+
const enable = `${rootless ? '' : 'sudo '}systemctl ${rootless ? '--user ' : ''}enable docker.service`;
|
|
65
|
+
const state = await unitFileState(effects, scope);
|
|
66
|
+
if (state === 'unavailable') {
|
|
67
|
+
// WSL with Docker Desktop integration, snap, OpenRC/runit and similar: a systemctl command would be wrong here.
|
|
68
|
+
effects.out(warn(`Docker is running now, but no running systemd${rootless ? ' user' : ''} manager with a docker.service was found, so its start-at-boot setting cannot be checked. If Docker is not set to start at boot, ${NO_AUTOSTART}. To start them automatically, enable start-at-boot in whatever manages this Docker Engine (Docker Desktop, snap, or your init system). ${OPTIONAL}`));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (state === 'unknown') {
|
|
72
|
+
effects.out(warn(`Docker is running now, but its systemd${rootless ? ' user' : ''} docker.service is neither plainly enabled nor disabled, so start at boot is not verified. If Docker does not start at boot, ${NO_AUTOSTART}. Check it with: systemctl ${rootless ? '--user ' : ''}status docker.service`));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (state === 'masked') {
|
|
76
|
+
effects.out(warn(`Docker is running now, but its systemd${rootless ? ' user' : ''} docker.service is masked, so it cannot start at boot: ${NO_AUTOSTART}. An administrator masked it deliberately; it must be unmasked before it can be enabled. ${OPTIONAL}`));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (state === 'disabled') {
|
|
80
|
+
effects.out(warn(`Docker is running now, but it is not enabled to start at boot: ${NO_AUTOSTART}. If you want them to start automatically, run: ${enable}${rootless ? ` (and, for startup before you log in, sudo loginctl enable-linger ${effects.username()})` : ''}. ${OPTIONAL}`));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (rootless) {
|
|
84
|
+
let linger = '';
|
|
85
|
+
try { linger = (await effects.run('loginctl', ['show-user', String(process.getuid()), '--property=Linger', '--value'])).stdout.trim(); } catch {}
|
|
86
|
+
if (linger === 'no') {
|
|
87
|
+
effects.out(warn(`Rootless Docker's user service is enabled, but user linger is off, so Docker starts only when you log in: ours components that depend on Docker will not start automatically after a reboot until then. If you want them to start at boot, run: sudo loginctl enable-linger ${effects.username()}. ${OPTIONAL}`));
|
|
31
88
|
return;
|
|
32
89
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const linger = await effects.run('loginctl', ['show-user', String(process.getuid()), '--property=Linger', '--value']);
|
|
37
|
-
if (linger.stdout.trim() !== 'yes') throw new Error('rootless user linger is disabled');
|
|
90
|
+
if (linger !== 'yes') {
|
|
91
|
+
effects.out(warn(`Rootless Docker's user service is enabled, but user linger could not be checked. If linger is off, Docker starts only when you log in and ours components that depend on Docker will not start automatically after a reboot until then. Check it with: loginctl show-user ${effects.username()} --property=Linger`));
|
|
92
|
+
return;
|
|
38
93
|
}
|
|
39
|
-
effects.out(`Docker boot service is enabled${rootless ? ' with user linger' : ''}; managed containers recover when that Engine starts.`);
|
|
40
|
-
} catch {
|
|
41
|
-
effects.out('Docker is reachable, but automatic host boot is not verified. Ask the operator to enable the selected Docker Engine boot service (and user linger for rootless Docker); container restart policy cannot start an unavailable Engine.');
|
|
42
94
|
}
|
|
95
|
+
effects.out(`Docker boot service is enabled${rootless ? ' with user linger' : ''}; managed containers recover when that Engine starts.`);
|
|
43
96
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ours.network/install",
|
|
3
|
-
"version": "1.2.1-nightly.
|
|
3
|
+
"version": "1.2.1-nightly.44",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The all-in-one ours.network installer: one shared daemon, MCP, cowork, Telegram, Fleet initialization, harness plugins, Human identity, progress UI, and guided next steps.",
|
|
6
6
|
"type": "module",
|