@fungi.computer/computer 0.0.0-stage → 0.1.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 (91) hide show
  1. package/Dockerfile +85 -0
  2. package/LICENSE +21 -0
  3. package/README.md +228 -2
  4. package/container/computer-init.mjs +119 -0
  5. package/container/computer-start.sh +24 -0
  6. package/container/package.json +14 -0
  7. package/container/pnpm-lock.yaml +378 -0
  8. package/container/pnpm-workspace.yaml +5 -0
  9. package/container/resource-bounds.mjs +54 -0
  10. package/container/runtime-privileges.cc +37 -0
  11. package/container/runtime-privileges.mjs +11 -0
  12. package/container/terminal-assets/README.md +35 -0
  13. package/container/terminal-assets/bashrc +49 -0
  14. package/container/terminal-assets/git-prompt.sh +586 -0
  15. package/container/terminal-protocol.mjs +58 -0
  16. package/container/terminal-runtime.mjs +10 -0
  17. package/container/terminal-server.mjs +243 -0
  18. package/dist/apply-patch/LICENSE.codex +201 -0
  19. package/dist/apply-patch/build.mjs +98 -0
  20. package/dist/apply-patch/cache.mjs +168 -0
  21. package/dist/apply-patch/compile.mjs +199 -0
  22. package/dist/apply-patch/docker/darwin.Dockerfile +15 -0
  23. package/dist/apply-patch/docker/linux-arm64.Dockerfile +38 -0
  24. package/dist/apply-patch/docker/linux-x64.Dockerfile +23 -0
  25. package/dist/apply-patch/main.rs +320 -0
  26. package/dist/apply-patch/notices.mjs +44 -0
  27. package/dist/apply-patch/pin.mjs +8 -0
  28. package/dist/apply-patch/toolchain.mjs +39 -0
  29. package/dist/computer-backends.d.ts +94 -0
  30. package/dist/computer-backends.js +103 -0
  31. package/dist/computerd.cjs +18010 -0
  32. package/dist/container-policy.d.ts +7 -0
  33. package/dist/container-policy.js +24 -0
  34. package/dist/container-system-trust.d.ts +8 -0
  35. package/dist/container-system-trust.js +66 -0
  36. package/dist/egress-policy.d.ts +89 -0
  37. package/dist/egress-policy.js +240 -0
  38. package/dist/execution-result.d.ts +3 -0
  39. package/dist/execution-result.js +28 -0
  40. package/dist/files-patch.d.ts +20 -0
  41. package/dist/files-patch.js +108 -0
  42. package/dist/files.d.ts +75 -0
  43. package/dist/files.js +136 -0
  44. package/dist/fleet/admission.d.ts +14 -0
  45. package/dist/fleet/admission.js +10 -0
  46. package/dist/fleet/backing.d.ts +52 -0
  47. package/dist/fleet/backing.js +242 -0
  48. package/dist/fleet/computers.d.ts +62 -0
  49. package/dist/fleet/computers.js +35 -0
  50. package/dist/fleet/index.d.ts +11 -0
  51. package/dist/fleet/index.js +11 -0
  52. package/dist/fleet/inventory-wire.d.ts +29 -0
  53. package/dist/fleet/inventory-wire.js +15 -0
  54. package/dist/fleet/inventory.d.ts +24 -0
  55. package/dist/fleet/inventory.js +152 -0
  56. package/dist/fleet/lifecycle.d.ts +99 -0
  57. package/dist/fleet/lifecycle.js +418 -0
  58. package/dist/fleet/runtime-usage.d.ts +50 -0
  59. package/dist/fleet/runtime-usage.js +145 -0
  60. package/dist/fleet/slots.d.ts +30 -0
  61. package/dist/fleet/slots.js +46 -0
  62. package/dist/fleet/wire.d.ts +228 -0
  63. package/dist/fleet/wire.js +127 -0
  64. package/dist/host-config.d.ts +12 -0
  65. package/dist/host-config.js +10 -0
  66. package/dist/index.d.ts +282 -0
  67. package/dist/index.js +1237 -0
  68. package/dist/light-shell.d.ts +44 -0
  69. package/dist/light-shell.js +376 -0
  70. package/dist/local-backend.d.ts +52 -0
  71. package/dist/local-backend.js +143 -0
  72. package/dist/metered-container-host.d.ts +26 -0
  73. package/dist/metered-container-host.js +48 -0
  74. package/dist/on-box-vm.d.ts +119 -0
  75. package/dist/on-box-vm.js +294 -0
  76. package/dist/operation-contract.d.ts +456 -0
  77. package/dist/operation-contract.js +450 -0
  78. package/dist/operation-record.d.ts +50 -0
  79. package/dist/operation-record.js +162 -0
  80. package/dist/preview.d.ts +55 -0
  81. package/dist/preview.js +151 -0
  82. package/dist/process-inventory.d.ts +80 -0
  83. package/dist/process-inventory.js +427 -0
  84. package/dist/pull-pending.d.ts +26 -0
  85. package/dist/pull-pending.js +35 -0
  86. package/dist/team-candidate-builder.mjs +28220 -0
  87. package/dist/transport-backend.d.ts +3 -0
  88. package/dist/transport-backend.js +99 -0
  89. package/dist/workspace-stream.d.ts +2 -0
  90. package/dist/workspace-stream.js +31 -0
  91. package/package.json +126 -3
@@ -0,0 +1,378 @@
1
+ lockfileVersion: '9.0'
2
+
3
+ settings:
4
+ autoInstallPeers: true
5
+ excludeLinksFromLockfile: false
6
+
7
+ importers:
8
+
9
+ .:
10
+ dependencies:
11
+ esbuild:
12
+ specifier: 0.28.2
13
+ version: 0.28.2
14
+ fuse-native:
15
+ specifier: 2.2.6
16
+ version: 2.2.6
17
+ node-pty:
18
+ specifier: 1.1.0
19
+ version: 1.1.0
20
+ ws:
21
+ specifier: 8.21.3
22
+ version: 8.21.3
23
+
24
+ packages:
25
+
26
+ '@esbuild/aix-ppc64@0.28.2':
27
+ resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==}
28
+ engines: {node: '>=18'}
29
+ cpu: [ppc64]
30
+ os: [aix]
31
+
32
+ '@esbuild/android-arm64@0.28.2':
33
+ resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==}
34
+ engines: {node: '>=18'}
35
+ cpu: [arm64]
36
+ os: [android]
37
+
38
+ '@esbuild/android-arm@0.28.2':
39
+ resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==}
40
+ engines: {node: '>=18'}
41
+ cpu: [arm]
42
+ os: [android]
43
+
44
+ '@esbuild/android-x64@0.28.2':
45
+ resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==}
46
+ engines: {node: '>=18'}
47
+ cpu: [x64]
48
+ os: [android]
49
+
50
+ '@esbuild/darwin-arm64@0.28.2':
51
+ resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==}
52
+ engines: {node: '>=18'}
53
+ cpu: [arm64]
54
+ os: [darwin]
55
+
56
+ '@esbuild/darwin-x64@0.28.2':
57
+ resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==}
58
+ engines: {node: '>=18'}
59
+ cpu: [x64]
60
+ os: [darwin]
61
+
62
+ '@esbuild/freebsd-arm64@0.28.2':
63
+ resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==}
64
+ engines: {node: '>=18'}
65
+ cpu: [arm64]
66
+ os: [freebsd]
67
+
68
+ '@esbuild/freebsd-x64@0.28.2':
69
+ resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==}
70
+ engines: {node: '>=18'}
71
+ cpu: [x64]
72
+ os: [freebsd]
73
+
74
+ '@esbuild/linux-arm64@0.28.2':
75
+ resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==}
76
+ engines: {node: '>=18'}
77
+ cpu: [arm64]
78
+ os: [linux]
79
+
80
+ '@esbuild/linux-arm@0.28.2':
81
+ resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==}
82
+ engines: {node: '>=18'}
83
+ cpu: [arm]
84
+ os: [linux]
85
+
86
+ '@esbuild/linux-ia32@0.28.2':
87
+ resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==}
88
+ engines: {node: '>=18'}
89
+ cpu: [ia32]
90
+ os: [linux]
91
+
92
+ '@esbuild/linux-loong64@0.28.2':
93
+ resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==}
94
+ engines: {node: '>=18'}
95
+ cpu: [loong64]
96
+ os: [linux]
97
+
98
+ '@esbuild/linux-mips64el@0.28.2':
99
+ resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==}
100
+ engines: {node: '>=18'}
101
+ cpu: [mips64el]
102
+ os: [linux]
103
+
104
+ '@esbuild/linux-ppc64@0.28.2':
105
+ resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==}
106
+ engines: {node: '>=18'}
107
+ cpu: [ppc64]
108
+ os: [linux]
109
+
110
+ '@esbuild/linux-riscv64@0.28.2':
111
+ resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==}
112
+ engines: {node: '>=18'}
113
+ cpu: [riscv64]
114
+ os: [linux]
115
+
116
+ '@esbuild/linux-s390x@0.28.2':
117
+ resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==}
118
+ engines: {node: '>=18'}
119
+ cpu: [s390x]
120
+ os: [linux]
121
+
122
+ '@esbuild/linux-x64@0.28.2':
123
+ resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==}
124
+ engines: {node: '>=18'}
125
+ cpu: [x64]
126
+ os: [linux]
127
+
128
+ '@esbuild/netbsd-arm64@0.28.2':
129
+ resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==}
130
+ engines: {node: '>=18'}
131
+ cpu: [arm64]
132
+ os: [netbsd]
133
+
134
+ '@esbuild/netbsd-x64@0.28.2':
135
+ resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==}
136
+ engines: {node: '>=18'}
137
+ cpu: [x64]
138
+ os: [netbsd]
139
+
140
+ '@esbuild/openbsd-arm64@0.28.2':
141
+ resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==}
142
+ engines: {node: '>=18'}
143
+ cpu: [arm64]
144
+ os: [openbsd]
145
+
146
+ '@esbuild/openbsd-x64@0.28.2':
147
+ resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==}
148
+ engines: {node: '>=18'}
149
+ cpu: [x64]
150
+ os: [openbsd]
151
+
152
+ '@esbuild/openharmony-arm64@0.28.2':
153
+ resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==}
154
+ engines: {node: '>=18'}
155
+ cpu: [arm64]
156
+ os: [openharmony]
157
+
158
+ '@esbuild/sunos-x64@0.28.2':
159
+ resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==}
160
+ engines: {node: '>=18'}
161
+ cpu: [x64]
162
+ os: [sunos]
163
+
164
+ '@esbuild/win32-arm64@0.28.2':
165
+ resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==}
166
+ engines: {node: '>=18'}
167
+ cpu: [arm64]
168
+ os: [win32]
169
+
170
+ '@esbuild/win32-ia32@0.28.2':
171
+ resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==}
172
+ engines: {node: '>=18'}
173
+ cpu: [ia32]
174
+ os: [win32]
175
+
176
+ '@esbuild/win32-x64@0.28.2':
177
+ resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==}
178
+ engines: {node: '>=18'}
179
+ cpu: [x64]
180
+ os: [win32]
181
+
182
+ esbuild@0.28.2:
183
+ resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==}
184
+ engines: {node: '>=18'}
185
+ hasBin: true
186
+
187
+ fuse-native@2.2.6:
188
+ resolution: {integrity: sha512-Y5wXd7vUsWWWIIHbjluv7jKZgPZaSVA5YWaW3I5fXIJfcGWL6IRUgoBUveQAq+D8cG9cCiGNahv9CeToccCXrw==}
189
+ hasBin: true
190
+
191
+ fuse-shared-library-darwin@1.1.3:
192
+ resolution: {integrity: sha512-4Q8gMxyMl1+gwHGpiYUoKKpi7xq8WcPo0TvJvjZzHMuCiszouu2GgEs6SJAqPB3LjfmEkl6kPV+2Oluczr0Nig==}
193
+
194
+ fuse-shared-library-linux-arm@1.0.0:
195
+ resolution: {integrity: sha512-Dj4ssxo1/MKGvOsVWRblSRu+o5F5OJTrVPDkjSyGDU2yKvVnIzQSwy1deiWA0qCcS/Q8iJMlZaCpCcZWSwvoug==}
196
+
197
+ fuse-shared-library-linux@1.0.1:
198
+ resolution: {integrity: sha512-07MQRSobrBKwW4D7oKm0gM2TwgvZWb+gC08JdiYDG4KBTncxk9ssqEDiDMKll8hpseZufsY2w1yc/feOu2DPmQ==}
199
+
200
+ fuse-shared-library@1.1.1:
201
+ resolution: {integrity: sha512-EfgTo/eS1euZFUe7x8KqyA40hV4DwP7kqp1VNZApu2nlPnJv8SanraBE3VXyX7ff41sxw7M0oWY7re3G3wnZVA==}
202
+
203
+ inherits@2.0.4:
204
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
205
+
206
+ nanoresource@1.3.0:
207
+ resolution: {integrity: sha512-OI5dswqipmlYfyL3k/YMm7mbERlh4Bd1KuKdMHpeoVD1iVxqxaTMKleB4qaA2mbQZ6/zMNSxCXv9M9P/YbqTuQ==}
208
+
209
+ napi-macros@2.2.2:
210
+ resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==}
211
+
212
+ node-addon-api@7.1.1:
213
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
214
+
215
+ node-gyp-build@4.8.4:
216
+ resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
217
+ hasBin: true
218
+
219
+ node-pty@1.1.0:
220
+ resolution: {integrity: sha512-20JqtutY6JPXTUnL0ij1uad7Qe1baT46lyolh2sSENDd4sTzKZ4nmAFkeAARDKwmlLjPx6XKRlwRUxwjOy+lUg==}
221
+
222
+ ws@8.21.3:
223
+ resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==}
224
+ engines: {node: '>=10.0.0'}
225
+ peerDependencies:
226
+ bufferutil: ^4.0.1
227
+ utf-8-validate: '>=5.0.2'
228
+ peerDependenciesMeta:
229
+ bufferutil:
230
+ optional: true
231
+ utf-8-validate:
232
+ optional: true
233
+
234
+ snapshots:
235
+
236
+ '@esbuild/aix-ppc64@0.28.2':
237
+ optional: true
238
+
239
+ '@esbuild/android-arm64@0.28.2':
240
+ optional: true
241
+
242
+ '@esbuild/android-arm@0.28.2':
243
+ optional: true
244
+
245
+ '@esbuild/android-x64@0.28.2':
246
+ optional: true
247
+
248
+ '@esbuild/darwin-arm64@0.28.2':
249
+ optional: true
250
+
251
+ '@esbuild/darwin-x64@0.28.2':
252
+ optional: true
253
+
254
+ '@esbuild/freebsd-arm64@0.28.2':
255
+ optional: true
256
+
257
+ '@esbuild/freebsd-x64@0.28.2':
258
+ optional: true
259
+
260
+ '@esbuild/linux-arm64@0.28.2':
261
+ optional: true
262
+
263
+ '@esbuild/linux-arm@0.28.2':
264
+ optional: true
265
+
266
+ '@esbuild/linux-ia32@0.28.2':
267
+ optional: true
268
+
269
+ '@esbuild/linux-loong64@0.28.2':
270
+ optional: true
271
+
272
+ '@esbuild/linux-mips64el@0.28.2':
273
+ optional: true
274
+
275
+ '@esbuild/linux-ppc64@0.28.2':
276
+ optional: true
277
+
278
+ '@esbuild/linux-riscv64@0.28.2':
279
+ optional: true
280
+
281
+ '@esbuild/linux-s390x@0.28.2':
282
+ optional: true
283
+
284
+ '@esbuild/linux-x64@0.28.2':
285
+ optional: true
286
+
287
+ '@esbuild/netbsd-arm64@0.28.2':
288
+ optional: true
289
+
290
+ '@esbuild/netbsd-x64@0.28.2':
291
+ optional: true
292
+
293
+ '@esbuild/openbsd-arm64@0.28.2':
294
+ optional: true
295
+
296
+ '@esbuild/openbsd-x64@0.28.2':
297
+ optional: true
298
+
299
+ '@esbuild/openharmony-arm64@0.28.2':
300
+ optional: true
301
+
302
+ '@esbuild/sunos-x64@0.28.2':
303
+ optional: true
304
+
305
+ '@esbuild/win32-arm64@0.28.2':
306
+ optional: true
307
+
308
+ '@esbuild/win32-ia32@0.28.2':
309
+ optional: true
310
+
311
+ '@esbuild/win32-x64@0.28.2':
312
+ optional: true
313
+
314
+ esbuild@0.28.2:
315
+ optionalDependencies:
316
+ '@esbuild/aix-ppc64': 0.28.2
317
+ '@esbuild/android-arm': 0.28.2
318
+ '@esbuild/android-arm64': 0.28.2
319
+ '@esbuild/android-x64': 0.28.2
320
+ '@esbuild/darwin-arm64': 0.28.2
321
+ '@esbuild/darwin-x64': 0.28.2
322
+ '@esbuild/freebsd-arm64': 0.28.2
323
+ '@esbuild/freebsd-x64': 0.28.2
324
+ '@esbuild/linux-arm': 0.28.2
325
+ '@esbuild/linux-arm64': 0.28.2
326
+ '@esbuild/linux-ia32': 0.28.2
327
+ '@esbuild/linux-loong64': 0.28.2
328
+ '@esbuild/linux-mips64el': 0.28.2
329
+ '@esbuild/linux-ppc64': 0.28.2
330
+ '@esbuild/linux-riscv64': 0.28.2
331
+ '@esbuild/linux-s390x': 0.28.2
332
+ '@esbuild/linux-x64': 0.28.2
333
+ '@esbuild/netbsd-arm64': 0.28.2
334
+ '@esbuild/netbsd-x64': 0.28.2
335
+ '@esbuild/openbsd-arm64': 0.28.2
336
+ '@esbuild/openbsd-x64': 0.28.2
337
+ '@esbuild/openharmony-arm64': 0.28.2
338
+ '@esbuild/sunos-x64': 0.28.2
339
+ '@esbuild/win32-arm64': 0.28.2
340
+ '@esbuild/win32-ia32': 0.28.2
341
+ '@esbuild/win32-x64': 0.28.2
342
+
343
+ fuse-native@2.2.6:
344
+ dependencies:
345
+ fuse-shared-library: 1.1.1
346
+ nanoresource: 1.3.0
347
+ napi-macros: 2.2.2
348
+ node-gyp-build: 4.8.4
349
+
350
+ fuse-shared-library-darwin@1.1.3: {}
351
+
352
+ fuse-shared-library-linux-arm@1.0.0: {}
353
+
354
+ fuse-shared-library-linux@1.0.1: {}
355
+
356
+ fuse-shared-library@1.1.1:
357
+ dependencies:
358
+ fuse-shared-library-darwin: 1.1.3
359
+ fuse-shared-library-linux: 1.0.1
360
+ fuse-shared-library-linux-arm: 1.0.0
361
+
362
+ inherits@2.0.4: {}
363
+
364
+ nanoresource@1.3.0:
365
+ dependencies:
366
+ inherits: 2.0.4
367
+
368
+ napi-macros@2.2.2: {}
369
+
370
+ node-addon-api@7.1.1: {}
371
+
372
+ node-gyp-build@4.8.4: {}
373
+
374
+ node-pty@1.1.0:
375
+ dependencies:
376
+ node-addon-api: 7.1.1
377
+
378
+ ws@8.21.3: {}
@@ -0,0 +1,5 @@
1
+ # Standalone install for the Computer image; not a member of the repo workspace.
2
+ allowBuilds:
3
+ node-pty: true
4
+ fuse-native: true
5
+ esbuild: true
@@ -0,0 +1,54 @@
1
+ /** The Computer ceiling shared by the platform image and on-box host. */
2
+ export const computerResourceBounds = Object.freeze({
3
+ vcpus: 4,
4
+ memoryMib: 12_288,
5
+ diskGib: 20,
6
+ pidsMax: 256,
7
+ maxRuntimeMs: 24 * 60 * 60 * 1_000,
8
+ });
9
+
10
+ /** Proofs may shorten a runtime, but no start may extend the ceiling. */
11
+ export function boundedRuntimeMs(value) {
12
+ if (value === undefined) return computerResourceBounds.maxRuntimeMs;
13
+ return boundedInteger(
14
+ "runtime deadline",
15
+ Number(value),
16
+ 1_000,
17
+ computerResourceBounds.maxRuntimeMs,
18
+ );
19
+ }
20
+
21
+ function boundedInteger(name, value, minimum, maximum) {
22
+ const valid = Number.isInteger(value) && value >= minimum && value <= maximum;
23
+ if (!valid) throw new Error(`Computer ${name} exceeds its resource bound`);
24
+ return value;
25
+ }
26
+
27
+ export function computerRuntimeExpired(startedAt, now, maximumRuntimeMs) {
28
+ return now - startedAt >= maximumRuntimeMs;
29
+ }
30
+
31
+ /** The host may provision a smaller VM, never a larger Computer. */
32
+ export function boundedVmResources({ vcpus, memMib, diskGib, pidsMax }) {
33
+ return {
34
+ vcpus: boundedInteger("vcpus", vcpus, 1, computerResourceBounds.vcpus),
35
+ memMib: boundedInteger(
36
+ "memMib",
37
+ memMib,
38
+ 1,
39
+ computerResourceBounds.memoryMib,
40
+ ),
41
+ diskGib: boundedInteger(
42
+ "diskGib",
43
+ diskGib,
44
+ 1,
45
+ computerResourceBounds.diskGib,
46
+ ),
47
+ pidsMax: boundedInteger(
48
+ "pidsMax",
49
+ pidsMax,
50
+ 1,
51
+ computerResourceBounds.pidsMax,
52
+ ),
53
+ };
54
+ }
@@ -0,0 +1,37 @@
1
+ #include <node_api.h>
2
+ #include <grp.h>
3
+ #include <sys/prctl.h>
4
+ #include <unistd.h>
5
+ #include <cerrno>
6
+ #include <cstring>
7
+
8
+ // This runs only after FUSE is mounted and before any runtime listener opens.
9
+ // libc's credential calls update every thread, including FUSE's worker threads.
10
+ static napi_value enterRuntimePhase(napi_env env, napi_callback_info info) {
11
+ size_t count = 1;
12
+ napi_value args[1];
13
+ uint32_t uid;
14
+ if (napi_get_cb_info(env, info, &count, args, nullptr, nullptr) != napi_ok ||
15
+ count != 1 || napi_get_value_uint32(env, args[0], &uid) != napi_ok ||
16
+ uid < 100000 || uid > 2000099999 || getuid() != 0) {
17
+ napi_throw_error(env, nullptr, "Invalid privileged mount transition");
18
+ return nullptr;
19
+ }
20
+ if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) != 0 ||
21
+ setgroups(0, nullptr) != 0 || setresgid(uid, uid, uid) != 0 ||
22
+ setresuid(uid, uid, uid) != 0) {
23
+ napi_throw_error(env, nullptr, strerror(errno));
24
+ return nullptr;
25
+ }
26
+ napi_value result;
27
+ napi_get_undefined(env, &result);
28
+ return result;
29
+ }
30
+ static napi_value initialize(napi_env env, napi_value exports) {
31
+ napi_value fn;
32
+ napi_create_function(env, "enterRuntimePhase", NAPI_AUTO_LENGTH,
33
+ enterRuntimePhase, nullptr, &fn);
34
+ napi_set_named_property(env, exports, "enterRuntimePhase", fn);
35
+ return exports;
36
+ }
37
+ NAPI_MODULE(NODE_GYP_MODULE_NAME, initialize)
@@ -0,0 +1,11 @@
1
+ import process from "node:process";
2
+ import { createRequire } from "node:module";
3
+ const loadNative = createRequire(import.meta.url);
4
+ const native = loadNative("./runtime-privileges.node");
5
+
6
+ export function enterRuntimePhase() {
7
+ const uid = Number(process.env.COMPUTER_RUNTIME_UID);
8
+ if (!Number.isSafeInteger(uid) || uid < 100_000 || uid > 2_000_099_999)
9
+ throw new Error("Invalid Computer runtime UID");
10
+ native.enterRuntimePhase(uid);
11
+ }
@@ -0,0 +1,35 @@
1
+ # Computer shell assets
2
+
3
+ `git-prompt.sh` is the supplied Git v2.34.1 contrib implementation, retaining
4
+ its upstream license and branch detection. `bashrc` adapts the supplied
5
+ Botanical prompt to show the numeric exit status, user/Computer and short cwd,
6
+ with Caps/Stipe colors for the prompt and ls/grep. It honors `NO_COLOR` and
7
+ `TERM=dumb`. An interactive guard keeps command and agent shells quiet.
8
+
9
+ The retained client source is `terminal-banner.ts` from the reference snapshot
10
+ in `.botanical/old-terminal-juice`: welcome art, status and hint belong to Shed,
11
+ never to the shell. The spacing fix is `fdc3b2a9`; raw-terminal CRLF is
12
+ `d7872a5b`. Shared art now lives in `packages/lantern/src/art`, exported through
13
+ `@fungi.computer/lantern/banner` for Shed and the CLI family. No banner renderer
14
+ or art is copied into the Computer image.
15
+
16
+ The real path is Shed `TerminalPanel` → Agar `openComputerTerminal` → Hub
17
+ Computer admission → Computer `terminalAfterAcceptance` → terminal server
18
+ `TerminalSessions.#open` → Bash login → system bashrc/profile. The PTY's ready
19
+ control frame supplies bounded display facts separately from shell output. Agar
20
+ decodes them; Shed renders the width-aware welcome before reading buffered PTY
21
+ output. Socket reconnects reuse the session; theme swaps replay Shed's bounded
22
+ output history without opening another connection or adding a banner. A
23
+ deliberate reopen clears the prior display and welcomes the new session.
24
+
25
+ Team delivers the directory name to Computer on create/replay; Computer stores
26
+ it locally. The admitted private PTY URL supplies the name, owning Team ID and
27
+ `Team inference` model-door label, never credentials or provider URLs. Only the
28
+ Computer name enters Bash's environment for its prompt. Ready metadata reports
29
+ the terminal server's actual uptime and image package version.
30
+
31
+ The existing Shed renderer is Ghostty, as in the retained Dashboard. Its browser
32
+ proof checks real cells at wide and narrow widths, connection ordering, retries
33
+ and theme replay. Computerd command execution is separate and receives no
34
+ welcome bytes. Local image proof checks the prompt and absence of art/hints on
35
+ an interactive PTY, plus quiet non-interactive startup.
@@ -0,0 +1,49 @@
1
+ # Retained interactive Bash prompt, adapted from Botanical's shell assets.
2
+ # This file is sourced by the image's system bashrc (including login shells).
3
+ case $- in
4
+ *i*) ;;
5
+ *) return ;;
6
+ esac
7
+ [[ ${_FUNGI_SHELL_READY:-} ]] && return
8
+ _FUNGI_SHELL_READY=1
9
+
10
+ shopt -s checkwinsize histappend
11
+ # Branches, Computer names and directories are data, not prompt shell code.
12
+ shopt -u promptvars
13
+ export HISTCONTROL=ignoreboth
14
+ export HISTSIZE=10000
15
+ . /opt/fungi/terminal-assets/git-prompt.sh
16
+
17
+ # Caps mocha: coral directories, teal links, green executables, pink archives.
18
+ if [[ -t 1 && ! ${NO_COLOR+x} && ${TERM:-dumb} != dumb ]]; then
19
+ export LS_COLORS='di=38;2;249;130;132:ln=38;2;148;226;213:ex=38;2;166;227;161:*.tar=38;2;245;194;231:*.gz=38;2;245;194;231:*.zip=38;2;245;194;231'
20
+ export GREP_COLORS='ms=38;2;249;130;132'
21
+ alias ls='ls --color=auto'
22
+ alias grep='grep --color=auto'
23
+ else
24
+ unset LS_COLORS
25
+ alias ls='ls --color=never'
26
+ alias grep='grep --color=never'
27
+ fi
28
+
29
+ _FUNGI_UPDATE_PS1() {
30
+ local exit_code=$? mark='✓' branch='' dirty='' tint='' reset=''
31
+ [[ $exit_code == 0 ]] || mark="✗ $exit_code"
32
+ if [[ -t 1 && ! ${NO_COLOR+x} && ${TERM:-dumb} != dumb ]]; then
33
+ tint='\[\e[38;2;249;130;132m\]'
34
+ reset='\[\e[0m\]'
35
+ fi
36
+ branch=$(__git_ps1 '%s' 2>/dev/null)
37
+ if [[ -n $branch ]]; then
38
+ [[ -z $(git status --porcelain 2>/dev/null) ]] || dirty=' *'
39
+ branch=" git:($branch)$dirty"
40
+ fi
41
+ local computer=${FUNGI_COMPUTER_NAME:-Computer}
42
+ # Strip prompt escapes/control bytes from names and branch text.
43
+ computer=${computer//[[:cntrl:]]/}
44
+ computer=${computer//\\/?}
45
+ branch=${branch//[[:cntrl:]]/}
46
+ branch=${branch//\\/?}
47
+ PS1="$tint$mark ${USER:-fungi}@$computer \W$branch$reset ➜ "
48
+ }
49
+ PROMPT_COMMAND=_FUNGI_UPDATE_PS1