@intentic/machine 1.331.0 → 1.333.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 (257) hide show
  1. package/README.md +67 -8
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +1 -1
  4. package/dist/app.js.map +1 -1
  5. package/dist/autostart/autostart.js +1 -1
  6. package/dist/autostart/autostart.js.map +1 -1
  7. package/dist/cli-ui.d.ts +10 -0
  8. package/dist/cli-ui.d.ts.map +1 -0
  9. package/dist/cli-ui.js +62 -0
  10. package/dist/cli-ui.js.map +1 -0
  11. package/dist/commands.d.ts.map +1 -1
  12. package/dist/commands.js +61 -26
  13. package/dist/commands.js.map +1 -1
  14. package/dist/daemon-base.d.ts +1 -0
  15. package/dist/daemon-base.d.ts.map +1 -1
  16. package/dist/daemon-base.js +21 -18
  17. package/dist/daemon-base.js.map +1 -1
  18. package/dist/device/audit.d.ts.map +1 -1
  19. package/dist/device/audit.js.map +1 -1
  20. package/dist/device/commands.d.ts +8 -6
  21. package/dist/device/commands.d.ts.map +1 -1
  22. package/dist/device/commands.js +64 -42
  23. package/dist/device/commands.js.map +1 -1
  24. package/dist/device/connection.d.ts.map +1 -1
  25. package/dist/device/connection.js +2 -3
  26. package/dist/device/connection.js.map +1 -1
  27. package/dist/device/grant.d.ts +7 -0
  28. package/dist/device/grant.d.ts.map +1 -1
  29. package/dist/device/loopback-catch.d.ts.map +1 -1
  30. package/dist/device/loopback-catch.js +1 -1
  31. package/dist/device/loopback-catch.js.map +1 -1
  32. package/dist/device/mcp.d.ts.map +1 -1
  33. package/dist/device/mcp.js +19 -0
  34. package/dist/device/mcp.js.map +1 -1
  35. package/dist/device/policy.d.ts.map +1 -1
  36. package/dist/device/policy.js +3 -5
  37. package/dist/device/policy.js.map +1 -1
  38. package/dist/device/router.d.ts +7 -0
  39. package/dist/device/router.d.ts.map +1 -1
  40. package/dist/device/router.js +17 -5
  41. package/dist/device/router.js.map +1 -1
  42. package/dist/device/sandbox-cli.d.ts +12 -1
  43. package/dist/device/sandbox-cli.d.ts.map +1 -1
  44. package/dist/device/sandbox-cli.js +90 -18
  45. package/dist/device/sandbox-cli.js.map +1 -1
  46. package/dist/device/sandbox-rounds/ic-swaps.d.ts +11 -0
  47. package/dist/device/sandbox-rounds/ic-swaps.d.ts.map +1 -0
  48. package/dist/device/sandbox-rounds/ic-swaps.js +40 -0
  49. package/dist/device/sandbox-rounds/ic-swaps.js.map +1 -0
  50. package/dist/device/sandbox-rounds/keeper.d.ts +26 -1
  51. package/dist/device/sandbox-rounds/keeper.d.ts.map +1 -1
  52. package/dist/device/sandbox-rounds/keeper.js +118 -20
  53. package/dist/device/sandbox-rounds/keeper.js.map +1 -1
  54. package/dist/device/sandbox-rounds/probation-watch.d.ts +1 -1
  55. package/dist/device/sandbox-rounds/probation-watch.d.ts.map +1 -1
  56. package/dist/device/sandbox-rounds/probation-watch.js +2 -2
  57. package/dist/device/sandbox-rounds/probation-watch.js.map +1 -1
  58. package/dist/device/sandbox-rounds/sleep.d.ts +52 -0
  59. package/dist/device/sandbox-rounds/sleep.d.ts.map +1 -0
  60. package/dist/device/sandbox-rounds/sleep.js +115 -0
  61. package/dist/device/sandbox-rounds/sleep.js.map +1 -0
  62. package/dist/device/sandbox-rounds/swap-records.d.ts +1 -5
  63. package/dist/device/sandbox-rounds/swap-records.d.ts.map +1 -1
  64. package/dist/device/sandbox-rounds/swap-records.js +2 -33
  65. package/dist/device/sandbox-rounds/swap-records.js.map +1 -1
  66. package/dist/device/sandbox-rounds/swaps-fallback.d.ts +7 -0
  67. package/dist/device/sandbox-rounds/swaps-fallback.d.ts.map +1 -0
  68. package/dist/device/sandbox-rounds/swaps-fallback.js +44 -0
  69. package/dist/device/sandbox-rounds/swaps-fallback.js.map +1 -0
  70. package/dist/device/tools/agent.js +3 -3
  71. package/dist/device/tools/agent.js.map +1 -1
  72. package/dist/device/tools/android.d.ts.map +1 -1
  73. package/dist/device/tools/android.js +7 -62
  74. package/dist/device/tools/android.js.map +1 -1
  75. package/dist/device/tools/apps.d.ts.map +1 -1
  76. package/dist/device/tools/apps.js +7 -1
  77. package/dist/device/tools/apps.js.map +1 -1
  78. package/dist/device/tools/describe.d.ts +6 -0
  79. package/dist/device/tools/describe.d.ts.map +1 -1
  80. package/dist/device/tools/describe.js +30 -9
  81. package/dist/device/tools/describe.js.map +1 -1
  82. package/dist/device/tools/device.d.ts.map +1 -1
  83. package/dist/device/tools/device.js +2 -1
  84. package/dist/device/tools/device.js.map +1 -1
  85. package/dist/device/tools/ic-binary.d.ts +7 -0
  86. package/dist/device/tools/ic-binary.d.ts.map +1 -1
  87. package/dist/device/tools/ic-binary.js +16 -8
  88. package/dist/device/tools/ic-binary.js.map +1 -1
  89. package/dist/device/tools/logs/logs.d.ts +30 -0
  90. package/dist/device/tools/logs/logs.d.ts.map +1 -0
  91. package/dist/device/tools/logs/logs.js +147 -0
  92. package/dist/device/tools/logs/logs.js.map +1 -0
  93. package/dist/device/tools/programs/artifacts.d.ts.map +1 -1
  94. package/dist/device/tools/programs/artifacts.js +5 -10
  95. package/dist/device/tools/programs/artifacts.js.map +1 -1
  96. package/dist/device/tools/programs/{tunnel.d.ts → device-tunnel.d.ts} +1 -1
  97. package/dist/device/tools/programs/device-tunnel.d.ts.map +1 -0
  98. package/dist/device/tools/programs/{tunnel.js → device-tunnel.js} +1 -1
  99. package/dist/device/tools/programs/device-tunnel.js.map +1 -0
  100. package/dist/device/tools/programs/isolated.d.ts +0 -1
  101. package/dist/device/tools/programs/isolated.d.ts.map +1 -1
  102. package/dist/device/tools/programs/isolated.js +8 -10
  103. package/dist/device/tools/programs/isolated.js.map +1 -1
  104. package/dist/device/tools/programs/programs.d.ts +1 -1
  105. package/dist/device/tools/programs/programs.d.ts.map +1 -1
  106. package/dist/device/tools/programs/programs.js +89 -35
  107. package/dist/device/tools/programs/programs.js.map +1 -1
  108. package/dist/device/tools/sandboxes.d.ts.map +1 -1
  109. package/dist/device/tools/sandboxes.js +11 -10
  110. package/dist/device/tools/sandboxes.js.map +1 -1
  111. package/dist/device/tools/shell.d.ts +6 -5
  112. package/dist/device/tools/shell.d.ts.map +1 -1
  113. package/dist/device/tools/shell.js +37 -86
  114. package/dist/device/tools/shell.js.map +1 -1
  115. package/dist/engine-env.d.ts +15 -0
  116. package/dist/engine-env.d.ts.map +1 -0
  117. package/dist/engine-env.js +80 -0
  118. package/dist/engine-env.js.map +1 -0
  119. package/dist/environments/auto-upgrade.d.ts +2 -2
  120. package/dist/environments/auto-upgrade.d.ts.map +1 -1
  121. package/dist/environments/auto-upgrade.js +3 -5
  122. package/dist/environments/auto-upgrade.js.map +1 -1
  123. package/dist/environments/commands.d.ts +7 -1
  124. package/dist/environments/commands.d.ts.map +1 -1
  125. package/dist/environments/commands.js +37 -31
  126. package/dist/environments/commands.js.map +1 -1
  127. package/dist/environments/machine-upgrade.d.ts +8 -1
  128. package/dist/environments/machine-upgrade.d.ts.map +1 -1
  129. package/dist/environments/machine-upgrade.js +35 -26
  130. package/dist/environments/machine-upgrade.js.map +1 -1
  131. package/dist/environments/machine.d.ts +5 -4
  132. package/dist/environments/machine.d.ts.map +1 -1
  133. package/dist/environments/machine.js +13 -16
  134. package/dist/environments/machine.js.map +1 -1
  135. package/dist/environments/wsl.d.ts.map +1 -1
  136. package/dist/environments/wsl.js +4 -7
  137. package/dist/environments/wsl.js.map +1 -1
  138. package/dist/install.d.ts.map +1 -1
  139. package/dist/install.js +28 -30
  140. package/dist/install.js.map +1 -1
  141. package/dist/resident/last-exit.d.ts +40 -0
  142. package/dist/resident/last-exit.d.ts.map +1 -0
  143. package/dist/resident/last-exit.js +147 -0
  144. package/dist/resident/last-exit.js.map +1 -0
  145. package/dist/resident/log-roll.d.ts +8 -0
  146. package/dist/resident/log-roll.d.ts.map +1 -0
  147. package/dist/resident/log-roll.js +30 -0
  148. package/dist/resident/log-roll.js.map +1 -0
  149. package/dist/{resident.d.ts → resident/resident.d.ts} +1 -1
  150. package/dist/resident/resident.d.ts.map +1 -0
  151. package/dist/{resident.js → resident/resident.js} +52 -27
  152. package/dist/resident/resident.js.map +1 -0
  153. package/dist/{supervision.d.ts → resident/supervision.d.ts} +7 -3
  154. package/dist/resident/supervision.d.ts.map +1 -0
  155. package/dist/{supervision.js → resident/supervision.js} +20 -16
  156. package/dist/resident/supervision.js.map +1 -0
  157. package/dist/resident/watchdog.d.ts +24 -0
  158. package/dist/resident/watchdog.d.ts.map +1 -0
  159. package/dist/resident/watchdog.js +69 -0
  160. package/dist/resident/watchdog.js.map +1 -0
  161. package/dist/status.d.ts +14 -8
  162. package/dist/status.d.ts.map +1 -1
  163. package/dist/status.js +141 -107
  164. package/dist/status.js.map +1 -1
  165. package/dist/sync/attach-commands.d.ts +1 -1
  166. package/dist/sync/attach-commands.d.ts.map +1 -1
  167. package/dist/sync/attach-commands.js +19 -12
  168. package/dist/sync/attach-commands.js.map +1 -1
  169. package/dist/sync/commands.d.ts +6 -3
  170. package/dist/sync/commands.d.ts.map +1 -1
  171. package/dist/sync/commands.js +149 -113
  172. package/dist/sync/commands.js.map +1 -1
  173. package/dist/sync/exec.d.ts +9 -0
  174. package/dist/sync/exec.d.ts.map +1 -1
  175. package/dist/sync/exec.js +21 -22
  176. package/dist/sync/exec.js.map +1 -1
  177. package/dist/sync/folders.d.ts.map +1 -1
  178. package/dist/sync/folders.js +3 -14
  179. package/dist/sync/folders.js.map +1 -1
  180. package/dist/sync/forget-command.d.ts +1 -1
  181. package/dist/sync/forget-command.d.ts.map +1 -1
  182. package/dist/sync/forget-command.js +10 -7
  183. package/dist/sync/forget-command.js.map +1 -1
  184. package/dist/sync/git-bridge.d.ts.map +1 -1
  185. package/dist/sync/git-bridge.js +4 -2
  186. package/dist/sync/git-bridge.js.map +1 -1
  187. package/dist/sync/local-sandboxes.d.ts.map +1 -1
  188. package/dist/sync/local-sandboxes.js +2 -4
  189. package/dist/sync/local-sandboxes.js.map +1 -1
  190. package/dist/sync/mirror.d.ts.map +1 -1
  191. package/dist/sync/mirror.js +9 -18
  192. package/dist/sync/mirror.js.map +1 -1
  193. package/dist/sync/mutagen.d.ts.map +1 -1
  194. package/dist/sync/mutagen.js +33 -37
  195. package/dist/sync/mutagen.js.map +1 -1
  196. package/dist/sync/project/project-commands.d.ts +7 -2
  197. package/dist/sync/project/project-commands.d.ts.map +1 -1
  198. package/dist/sync/project/project-commands.js +110 -46
  199. package/dist/sync/project/project-commands.js.map +1 -1
  200. package/dist/sync/project/project-files.d.ts +4 -6
  201. package/dist/sync/project/project-files.d.ts.map +1 -1
  202. package/dist/sync/project/project-files.js +4 -6
  203. package/dist/sync/project/project-files.js.map +1 -1
  204. package/dist/sync/project/project-local.d.ts.map +1 -1
  205. package/dist/sync/project/project-local.js +3 -19
  206. package/dist/sync/project/project-local.js.map +1 -1
  207. package/dist/sync/project/project-remote.js +4 -4
  208. package/dist/sync/project/project-transfer.d.ts +13 -30
  209. package/dist/sync/project/project-transfer.d.ts.map +1 -1
  210. package/dist/sync/project/project-transfer.js +1 -1
  211. package/dist/sync/project/project-transfer.js.map +1 -1
  212. package/dist/sync/retire.d.ts.map +1 -1
  213. package/dist/sync/retire.js +3 -3
  214. package/dist/sync/retire.js.map +1 -1
  215. package/dist/sync/siblings.d.ts.map +1 -1
  216. package/dist/sync/siblings.js +3 -6
  217. package/dist/sync/siblings.js.map +1 -1
  218. package/dist/sync/ssh.d.ts +1 -1
  219. package/dist/sync/ssh.d.ts.map +1 -1
  220. package/dist/sync/ssh.js +8 -7
  221. package/dist/sync/ssh.js.map +1 -1
  222. package/dist/sync/swap-pause.d.ts.map +1 -1
  223. package/dist/sync/swap-pause.js +2 -2
  224. package/dist/sync/swap-pause.js.map +1 -1
  225. package/dist/upgrade.d.ts +7 -0
  226. package/dist/upgrade.d.ts.map +1 -1
  227. package/dist/upgrade.js +24 -13
  228. package/dist/upgrade.js.map +1 -1
  229. package/dist/upkeep/doctor.d.ts +4 -2
  230. package/dist/upkeep/doctor.d.ts.map +1 -1
  231. package/dist/upkeep/doctor.js +40 -26
  232. package/dist/upkeep/doctor.js.map +1 -1
  233. package/dist/upkeep/login.js +1 -1
  234. package/dist/upkeep/login.js.map +1 -1
  235. package/dist/upkeep/retention.d.ts +6 -0
  236. package/dist/upkeep/retention.d.ts.map +1 -1
  237. package/dist/upkeep/retention.js +55 -3
  238. package/dist/upkeep/retention.js.map +1 -1
  239. package/dist/upkeep/retired.js +1 -1
  240. package/dist/upkeep/retired.js.map +1 -1
  241. package/dist/upkeep/second-ic.d.ts.map +1 -1
  242. package/dist/upkeep/second-ic.js +4 -6
  243. package/dist/upkeep/second-ic.js.map +1 -1
  244. package/dist/upkeep/trash.d.ts.map +1 -1
  245. package/dist/upkeep/trash.js +5 -6
  246. package/dist/upkeep/trash.js.map +1 -1
  247. package/package.json +9 -9
  248. package/dist/device/tools/programs/tunnel.d.ts.map +0 -1
  249. package/dist/device/tools/programs/tunnel.js.map +0 -1
  250. package/dist/resident.d.ts.map +0 -1
  251. package/dist/resident.js.map +0 -1
  252. package/dist/supervision.d.ts.map +0 -1
  253. package/dist/supervision.js.map +0 -1
  254. package/dist/watchdog.d.ts +0 -13
  255. package/dist/watchdog.d.ts.map +0 -1
  256. package/dist/watchdog.js +0 -38
  257. package/dist/watchdog.js.map +0 -1
@@ -1,4 +1,5 @@
1
- import { type CommandClass, type DeviceScopes } from "@intentic/sandbox-contract";
1
+ import { type CommandClass, type DeviceScopes, type SandboxPowerCommand } from "@intentic/sandbox-contract";
2
+ import { type CollectedOutput } from "@intentic/base/process";
2
3
  export declare const DEFAULT_TIMEOUT_MS = 120000;
3
4
  export declare const MAX_TIMEOUT_MS: number;
4
5
  export declare const shellFor: (platform: NodeJS.Platform) => {
@@ -6,10 +7,7 @@ export declare const shellFor: (platform: NodeJS.Platform) => {
6
7
  readonly args: (script: string) => string[];
7
8
  readonly label: string;
8
9
  };
9
- export interface CollectedOutput {
10
- readonly text: string;
11
- readonly dropped: number;
12
- }
10
+ export type { CollectedOutput };
13
11
  export interface CommandResult {
14
12
  readonly exitCode: number | null;
15
13
  readonly stdout: CollectedOutput;
@@ -18,7 +16,10 @@ export interface CommandResult {
18
16
  readonly lingering: boolean;
19
17
  }
20
18
  export declare const stopRunningCommands: () => Promise<void>;
19
+ export declare const destructiveRefusal: (classes: readonly CommandClass[]) => string;
21
20
  export declare const destructiveClasses: (command: string) => CommandClass[];
21
+ export declare const sandboxPowerIn: (commandLine: string) => SandboxPowerCommand[];
22
+ export declare const assertNoSandboxPower: (commandLine: string, scopes: DeviceScopes, how?: "command" | "typed") => void;
22
23
  export declare const runCommand: (input: {
23
24
  readonly command: string;
24
25
  readonly cwd?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/device/tools/shell.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwB,KAAK,YAAY,EAAE,KAAK,YAAY,EAAgB,MAAM,4BAA4B,CAAC;AAetH,eAAO,MAAM,kBAAkB,SAAU,CAAC;AAC1C,eAAO,MAAM,cAAc,QAAiB,CAAC;AAU7C,eAAO,MAAM,QAAQ,aACP,MAAM,CAAC,QAAQ,KAC1B;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAgBjG,CAAC;AAEF,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AA+DD,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAAC,IAAI,CAExD,CAAC;AA+DF,eAAO,MAAM,kBAAkB,YAAa,MAAM,KAAG,YAAY,EAGtB,CAAC;AAc5C,eAAO,MAAM,UAAU,UACZ;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,UACrG,YAAY,KACrB,OAAO,CAAC,aAAa,CAcvB,CAAC;AAYF,eAAO,MAAM,cAAc,WAAY,aAAa,aAAa,MAAM,KAAG,MAazD,CAAC"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/device/tools/shell.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,KAAK,YAAY,EACjB,KAAK,YAAY,EAIjB,KAAK,mBAAmB,EAE3B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,KAAK,eAAe,EAA+B,MAAM,wBAAwB,CAAC;AAe3F,eAAO,MAAM,kBAAkB,SAAU,CAAC;AAC1C,eAAO,MAAM,cAAc,QAAiB,CAAC;AAK7C,eAAO,MAAM,QAAQ,aACP,MAAM,CAAC,QAAQ,KAC1B;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAgBjG,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AAOD,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAAC,IAAI,CAExD,CAAC;AAoDF,eAAO,MAAM,kBAAkB,YAAa,SAAS,YAAY,EAAE,KAAG,MAG1B,CAAC;AAK7C,eAAO,MAAM,kBAAkB,YAAa,MAAM,KAAG,YAAY,EAGtB,CAAC;AAU5C,eAAO,MAAM,cAAc,gBAAiB,MAAM,KAAG,mBAAmB,EACwC,CAAC;AASjH,eAAO,MAAM,oBAAoB,gBAAiB,MAAM,UAAU,YAAY,QAAO,SAAS,GAAG,OAAO,KAAe,IAUtH,CAAC;AAcF,eAAO,MAAM,UAAU,UACZ;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,UACrG,YAAY,KACrB,OAAO,CAAC,aAAa,CAgBvB,CAAC;AAYF,eAAO,MAAM,cAAc,WAAY,aAAa,aAAa,MAAM,KAAG,MAazD,CAAC"}
@@ -1,9 +1,8 @@
1
- import { spawn } from "node:child_process";
2
1
  import { existsSync } from "node:fs";
3
- import { StringDecoder } from "node:string_decoder";
4
2
  import { homeDir } from "@intentic/local-agent";
5
- import { sleep } from "@intentic/base/async";
6
- import { COMMAND_CLASS_LABELS, matchCommand } from "@intentic/sandbox-contract";
3
+ import { COMMAND_CLASS_LABELS, hardRuleClasses, managesSandbox, matchCommand, sandboxPowerCommands, } from "@intentic/sandbox-contract";
4
+ import { SANDBOX_CONTAINER_PREFIX } from "@intentic/sandbox-run";
5
+ import { runBounded, stopProcessTree } from "@intentic/base/process";
7
6
  import { assertPath, assertScope, rootsOf, ScopeError } from "../policy.js";
8
7
  import { crossInterpreter, POWERSHELL_FLAGS, targetOf } from "../../environments/crossing.js";
9
8
  import { thisSide } from "../../environments/wsl.js";
@@ -11,8 +10,6 @@ import { forgetCommand, recordCommand } from "./command-ledger.js";
11
10
  export const DEFAULT_TIMEOUT_MS = 120_000;
12
11
  export const MAX_TIMEOUT_MS = 10 * 60 * 1000;
13
12
  const MAX_OUTPUT = 100_000;
14
- const PIPE_GRACE_MS = 1_000;
15
- const KILL_GRACE_MS = 2_000;
16
13
  export const shellFor = (platform) => {
17
14
  if (platform === "win32") {
18
15
  const pwsh = ["C:\\Program Files\\PowerShell\\7\\pwsh.exe", "C:\\Program Files\\PowerShell\\7-preview\\pwsh.exe"].find((path) => existsSync(path));
@@ -26,103 +23,56 @@ export const shellFor = (platform) => {
26
23
  const shell = process.env["SHELL"] ?? "/bin/sh";
27
24
  return { command: shell, args: (script) => ["-lc", script], label: shell };
28
25
  };
29
- const collector = () => {
30
- const decoder = new StringDecoder("utf8");
31
- const half = MAX_OUTPUT / 2;
32
- let head = "";
33
- let tail = "";
34
- let dropped = 0;
35
- const take = (text) => {
36
- const room = Math.max(half - head.length, 0);
37
- head += text.slice(0, room);
38
- tail += text.slice(room);
39
- if (tail.length > half) {
40
- dropped += tail.length - half;
41
- tail = tail.slice(-half);
42
- }
43
- };
44
- return {
45
- write: (chunk) => take(decoder.write(chunk)),
46
- end: () => {
47
- take(decoder.end());
48
- return { text: dropped === 0 ? `${head}${tail}` : `${head}\n… [${dropped} characters cut] …\n${tail}`, dropped };
49
- },
50
- };
51
- };
52
- const signalGroup = (pid, signal) => {
53
- try {
54
- process.kill(-pid, signal);
55
- }
56
- catch {
57
- }
58
- };
59
- const stopTree = async (child) => {
60
- const pid = child.pid;
61
- if (pid === undefined) {
62
- return;
63
- }
64
- if (process.platform === "win32") {
65
- await new Promise((resolve) => {
66
- spawn("taskkill", ["/pid", String(pid), "/T", "/F"], { stdio: "ignore", windowsHide: true })
67
- .once("exit", () => resolve())
68
- .once("error", () => resolve());
69
- });
70
- child.kill();
71
- return;
72
- }
73
- signalGroup(pid, "SIGTERM");
74
- await sleep(KILL_GRACE_MS);
75
- signalGroup(pid, "SIGKILL");
76
- };
77
26
  const inFlight = new Set();
78
27
  export const stopRunningCommands = async () => {
79
- await Promise.all([...inFlight].map(stopTree));
28
+ await Promise.all([...inFlight].map(async (child) => await stopProcessTree(child)));
80
29
  };
81
30
  const execute = async (interpreter, timeout) => {
82
- const child = spawn(interpreter.command, [...interpreter.args], {
83
- ...(interpreter.cwd === undefined ? {} : { cwd: interpreter.cwd }),
31
+ const spawned = {};
32
+ const result = await runBounded(interpreter.command, interpreter.args, {
33
+ cwd: interpreter.cwd,
84
34
  env: interpreter.env,
85
- stdio: ["ignore", "pipe", "pipe"],
86
- detached: process.platform !== "win32",
87
- windowsHide: true,
35
+ timeoutMs: timeout,
36
+ maxOutput: MAX_OUTPUT,
37
+ onSpawn: (child) => {
38
+ spawned.child = child;
39
+ inFlight.add(child);
40
+ if (child.pid !== undefined && process.platform !== "win32") {
41
+ spawned.recorded = recordCommand(child.pid);
42
+ }
43
+ },
88
44
  });
89
- inFlight.add(child);
90
- const pid = child.pid;
91
- const recorded = pid === undefined || process.platform === "win32" ? Promise.resolve() : recordCommand(pid);
92
- const stdout = collector();
93
- const stderr = collector();
94
- child.stdout.on("data", stdout.write);
95
- child.stderr.on("data", stderr.write);
96
- const closed = new Promise((resolve) => child.once("close", () => resolve(true)));
97
- let stopping;
98
- const deadline = setTimeout(() => {
99
- stopping = stopTree(child);
100
- }, timeout);
101
- const exitCode = await new Promise((resolve, reject) => {
102
- child.once("exit", (code) => resolve(code));
103
- child.once("error", reject);
104
- }).finally(() => {
105
- clearTimeout(deadline);
45
+ const { child, recorded = Promise.resolve() } = spawned;
46
+ if (child !== undefined) {
106
47
  inFlight.delete(child);
48
+ const pid = child.pid;
107
49
  if (pid !== undefined) {
108
50
  void recorded.then(async () => await forgetCommand(pid));
109
51
  }
110
- });
111
- await stopping;
112
- const drained = await Promise.race([closed, sleep(PIPE_GRACE_MS, { unref: true }).then(() => false)]);
113
- if (!drained) {
114
- child.stdout.destroy();
115
- child.stderr.destroy();
116
52
  }
117
- return { exitCode, stdout: stdout.end(), stderr: stderr.end(), timedOut: stopping !== undefined, lingering: !drained };
53
+ if (result.spawnError !== undefined) {
54
+ throw result.spawnError;
55
+ }
56
+ return { exitCode: result.exitCode, stdout: result.stdout, stderr: result.stderr, timedOut: result.timedOut, lingering: result.lingering };
118
57
  };
119
- const GATED_CLASSES = new Set(["files.destructive", "system.destructive", "container.state"]);
120
- const destructiveRefusal = (classes) => `Refused: this command would ${classes.map((commandClass) => COMMAND_CLASS_LABELS[commandClass]).join(" and ")} on this device, ` +
58
+ const GATED_CLASSES = hardRuleClasses("device");
59
+ export const destructiveRefusal = (classes) => `Refused: this command would ${classes.map((commandClass) => COMMAND_CLASS_LABELS[commandClass]).join(" and ")} on this device, ` +
121
60
  `and "Run destructive commands" is switched off for it. Turn it on in its capability card to allow this, ` +
122
61
  `or run a command that does not delete.`;
123
62
  export const destructiveClasses = (command) => matchCommand(command, { locus: "device" })
124
63
  .filter((match) => match.live && GATED_CLASSES.has(match.commandClass))
125
64
  .map((match) => match.commandClass);
65
+ export const sandboxPowerIn = (commandLine) => sandboxPowerCommands(commandLine).filter((hit) => hit.live && managesSandbox(hit, SANDBOX_CONTAINER_PREFIX));
66
+ const doingOf = (hits) => [...new Set(hits.map((hit) => hit.op))].join(", ");
67
+ export const assertNoSandboxPower = (commandLine, scopes, how = "command") => {
68
+ const hits = sandboxPowerIn(commandLine);
69
+ if (hits.length === 0 || scopes.sandboxes === "on") {
70
+ return;
71
+ }
72
+ throw new ScopeError(`Refused: ${how === "typed" ? "typed into a terminal, this" : "this command"} would manage a sandbox on this device (${doingOf(hits)}), and "Manage sandboxes on this device" is switched off for it. ` +
73
+ `That switch decides whether anything may stop, restart, update or remove a sandbox here, however it is spelled: the device's own tools, \`ic sandbox …\`, or \`docker\`. ` +
74
+ `Turn it on in its capability card to allow this.`);
75
+ };
126
76
  const nativeInterpreter = async (script, cwd, scopes) => {
127
77
  const shell = shellFor(process.platform);
128
78
  return {
@@ -138,6 +88,7 @@ export const runCommand = async (input, scopes) => {
138
88
  if (destructive.length > 0 && scopes.destructive !== "on") {
139
89
  throw new ScopeError(destructiveRefusal(destructive));
140
90
  }
91
+ assertNoSandboxPower(input.command, scopes);
141
92
  const target = targetOf(input.in);
142
93
  const interpreter = target.kind === "native"
143
94
  ? await nativeInterpreter(input.command, input.cwd, scopes)
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/device/tools/shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/device/tools/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface EngineRecord {
2
+ readonly host: string;
3
+ readonly certPath: string;
4
+ readonly bin: string;
5
+ readonly pipe?: string;
6
+ }
7
+ export declare const activeEngine: (text: string | undefined) => EngineRecord | undefined;
8
+ export declare const pipePath: (host: string) => string | undefined;
9
+ export declare const endpointOf: (record: EngineRecord, present: (path: string) => boolean) => {
10
+ readonly host: string;
11
+ readonly tls: boolean;
12
+ };
13
+ export declare const engineEnvChanges: (env: Readonly<Record<string, string | undefined>>, record: EngineRecord | undefined, ours: string | undefined, present?: (path: string) => boolean) => Record<string, string | undefined>;
14
+ export declare const syncEngineEnv: (env?: NodeJS.ProcessEnv, home?: string) => void;
15
+ //# sourceMappingURL=engine-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-env.d.ts","sourceRoot":"","sources":["../src/engine-env.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD,eAAO,MAAM,YAAY,SAAU,MAAM,GAAG,SAAS,KAAG,YAAY,GAAG,SAuBtE,CAAC;AAGF,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,MAAM,GAAG,SAGhD,CAAC;AAGF,eAAO,MAAM,UAAU,WAAY,YAAY,WAAW,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CAGnI,CAAC;AAKF,eAAO,MAAM,gBAAgB,QACpB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,UACzC,YAAY,GAAG,SAAS,QAC1B,MAAM,GAAG,SAAS,YACf,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KACnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAgBnC,CAAC;AAMF,eAAO,MAAM,aAAa,SAAS,MAAM,CAAC,UAAU,SAAsB,MAAM,KAAe,IAoB9F,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join, win32 } from "node:path";
3
+ import { STATE_DIR } from "@intentic/constants";
4
+ import { homeDir } from "@intentic/local-agent";
5
+ const delimiter = win32.delimiter;
6
+ const VARS = ["DOCKER_HOST", "DOCKER_TLS_VERIFY", "DOCKER_CERT_PATH"];
7
+ export const activeEngine = (text) => {
8
+ if (text === undefined) {
9
+ return undefined;
10
+ }
11
+ let record;
12
+ try {
13
+ record = JSON.parse(text);
14
+ }
15
+ catch {
16
+ return undefined;
17
+ }
18
+ if (typeof record !== "object" || record === null) {
19
+ return undefined;
20
+ }
21
+ const fields = record;
22
+ if (fields["engine"] !== "intentic" || fields["active"] === false) {
23
+ return undefined;
24
+ }
25
+ const { host, certPath, bin, pipe } = fields;
26
+ if (typeof host !== "string" || typeof certPath !== "string" || typeof bin !== "string") {
27
+ return undefined;
28
+ }
29
+ return typeof pipe === "string" ? { host, certPath, bin, pipe } : { host, certPath, bin };
30
+ };
31
+ export const pipePath = (host) => {
32
+ const leaf = host.startsWith("npipe:////./pipe/") ? host.slice("npipe:////./pipe/".length) : "";
33
+ return leaf !== "" && !/[\\/]/.test(leaf) ? `\\\\.\\pipe\\${leaf}` : undefined;
34
+ };
35
+ export const endpointOf = (record, present) => {
36
+ const path = record.pipe === undefined ? undefined : pipePath(record.pipe);
37
+ return record.pipe !== undefined && path !== undefined && present(path) ? { host: record.pipe, tls: false } : { host: record.host, tls: true };
38
+ };
39
+ export const engineEnvChanges = (env, record, ours, present = () => false) => {
40
+ if (record === undefined) {
41
+ if (ours === undefined || env["DOCKER_HOST"] !== ours) {
42
+ return {};
43
+ }
44
+ return Object.fromEntries(VARS.map((name) => [name, undefined]));
45
+ }
46
+ const path = env["PATH"] ?? env["Path"] ?? "";
47
+ const first = path.split(delimiter)[0];
48
+ const endpoint = endpointOf(record, present);
49
+ return {
50
+ DOCKER_HOST: endpoint.host,
51
+ DOCKER_TLS_VERIFY: endpoint.tls ? "1" : undefined,
52
+ DOCKER_CERT_PATH: endpoint.tls ? record.certPath : undefined,
53
+ ...(first === record.bin ? {} : { PATH: [record.bin, path].filter((part) => part !== "").join(delimiter) }),
54
+ };
55
+ };
56
+ let pointedAt;
57
+ export const syncEngineEnv = (env = process.env, home = homeDir()) => {
58
+ if (process.platform !== "win32") {
59
+ return;
60
+ }
61
+ let text;
62
+ try {
63
+ text = readFileSync(join(home, STATE_DIR, "engine", "engine.json"), "utf8");
64
+ }
65
+ catch {
66
+ text = undefined;
67
+ }
68
+ const record = activeEngine(text);
69
+ const changes = engineEnvChanges(env, record, pointedAt, existsSync);
70
+ for (const [name, value] of Object.entries(changes)) {
71
+ if (value === undefined) {
72
+ delete env[name];
73
+ }
74
+ else {
75
+ env[name] = value;
76
+ }
77
+ }
78
+ pointedAt = record === undefined ? undefined : changes["DOCKER_HOST"];
79
+ };
80
+ //# sourceMappingURL=engine-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-env.js","sourceRoot":"","sources":["../src/engine-env.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Log } from "@intentic/local-agent";
2
- import { type SwapRecord } from "../device/sandbox-rounds/swap-records.js";
2
+ import { type DeviceSwap } from "@intentic/sandbox-contract";
3
3
  import { type MachineConfig } from "./machine.js";
4
4
  export declare const retryAfterMs: (count: number) => number;
5
5
  export interface AutoUpgradeReading {
@@ -13,7 +13,7 @@ export declare const autoUpgradeDecision: (reading: AutoUpgradeReading) => {
13
13
  readonly level: boolean;
14
14
  readonly target: string;
15
15
  } | undefined;
16
- export declare const upgradeHeldBy: (swapping: ReadonlySet<string>, records: readonly SwapRecord[], now: number) => string[];
16
+ export declare const upgradeHeldBy: (swapping: ReadonlySet<string>, swaps: readonly DeviceSwap[]) => string[];
17
17
  export interface AutoUpgrade {
18
18
  readonly stop: () => void;
19
19
  readonly nudge: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"auto-upgrade.d.ts","sourceRoot":"","sources":["../../src/environments/auto-upgrade.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAmB,KAAK,UAAU,EAAiB,MAAM,0CAA0C,CAAC;AAI3G,OAAO,EAAe,KAAK,aAAa,EAAqB,MAAM,cAAc,CAAC;AAkBlF,eAAO,MAAM,YAAY,UAAW,MAAM,KAAG,MAAiE,CAAC;AAE/G,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAGD,eAAO,MAAM,mBAAmB,YAAa,kBAAkB,KAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAmBxH,CAAC;AAIF,eAAO,MAAM,aAAa,aAAc,WAAW,CAAC,MAAM,CAAC,WAAW,SAAS,UAAU,EAAE,OAAO,MAAM,KAAG,MAAM,EAEhH,CAAC;AAEF,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAE1B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,gBAAgB,QAAS,GAAG,KAAG,WA+C3C,CAAC"}
1
+ {"version":3,"file":"auto-upgrade.d.ts","sourceRoot":"","sources":["../../src/environments/auto-upgrade.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAe,KAAK,UAAU,EAAW,MAAM,4BAA4B,CAAC;AAKnF,OAAO,EAAe,KAAK,aAAa,EAAqB,MAAM,cAAc,CAAC;AAkBlF,eAAO,MAAM,YAAY,UAAW,MAAM,KAAG,MAAiE,CAAC;AAE/G,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAGD,eAAO,MAAM,mBAAmB,YAAa,kBAAkB,KAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAmBxH,CAAC;AAIF,eAAO,MAAM,aAAa,aAAc,WAAW,CAAC,MAAM,CAAC,SAAS,SAAS,UAAU,EAAE,KAAG,MAAM,EAA0D,CAAC;AAE7J,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAE1B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,gBAAgB,QAAS,GAAG,KAAG,WA+C3C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { errorMessage } from "@intentic/base/errors";
2
2
  import { DEV_VERSION, isNewer } from "@intentic/sandbox-contract";
3
- import { readSwapRecords, swapsUnderway } from "../device/sandbox-rounds/swap-records.js";
3
+ import { readSwaps, swapsUnderway } from "../device/sandbox-rounds/ic-swaps.js";
4
4
  import { icSwapsInFlight } from "../device/tools/sandboxes.js";
5
5
  import { installedBuild } from "../installed.js";
6
6
  import { publishedVersion } from "../release.js";
@@ -33,9 +33,7 @@ export const autoUpgradeDecision = (reading) => {
33
33
  }
34
34
  return { level: released === undefined || machineTarget(undefined, installed) === target, target };
35
35
  };
36
- export const upgradeHeldBy = (swapping, records, now) => [
37
- ...new Set([...swapping, ...swapsUnderway(records, now)]),
38
- ];
36
+ export const upgradeHeldBy = (swapping, swaps) => [...new Set([...swapping, ...swapsUnderway(swaps)])];
39
37
  export const startAutoUpgrade = (log) => {
40
38
  let timer;
41
39
  let stopped = false;
@@ -47,7 +45,7 @@ export const startAutoUpgrade = (log) => {
47
45
  }
48
46
  };
49
47
  const tick = async () => {
50
- const swapping = upgradeHeldBy(icSwapsInFlight, await readSwapRecords(), Date.now());
48
+ const swapping = upgradeHeldBy(icSwapsInFlight, await readSwaps());
51
49
  if (swapping.length > 0) {
52
50
  log(`auto-upgrade: put off while ${swapping.join(", ")} ${swapping.length === 1 ? "is" : "are"} mid-swap; looking again in ${DEFERRED_MS / 60_000} minutes.`);
53
51
  schedule(DEFERRED_MS);
@@ -1 +1 @@
1
- {"version":3,"file":"auto-upgrade.js","sourceRoot":"","sources":["../../src/environments/auto-upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-upgrade.js","sourceRoot":"","sources":["../../src/environments/auto-upgrade.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Log } from "@intentic/local-agent";
1
+ import { type Footnote, type Item, type Log } from "@intentic/local-agent";
2
2
  import { type CommandContext } from "@stricli/core";
3
3
  import { type MachineConfig } from "./machine.js";
4
4
  export declare const environmentRoutes: import("@stricli/core").RouteMap<CommandContext>;
@@ -11,4 +11,10 @@ export interface UpdatesFlags {
11
11
  }
12
12
  export declare const withSwitches: (config: MachineConfig, flags: UpdatesFlags) => MachineConfig;
13
13
  export declare const updates: import("@stricli/core").Command<CommandContext>;
14
+ interface SwitchRow {
15
+ readonly item: Item;
16
+ readonly later: Footnote;
17
+ }
18
+ export declare const switchRows: (config: MachineConfig) => readonly SwitchRow[];
19
+ export {};
14
20
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/environments/commands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAGjF,OAAO,EAAe,KAAK,aAAa,EAAgF,MAAM,cAAc,CAAC;AA8B7I,eAAO,MAAM,iBAAiB,kDAG5B,CAAC;AAMH,eAAO,MAAM,mBAAmB,QAAe,GAAG,KAAG,OAAO,CAAC,IAAI,CAiBhE,CAAC;AASF,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;CAChC;AASD,eAAO,MAAM,YAAY,WAAY,aAAa,SAAS,YAAY,KAAG,aAoBzE,CAAC;AASF,eAAO,MAAM,OAAO,iDA6DlB,CAAC"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/environments/commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAInE,OAAO,EAA8B,KAAK,aAAa,EAAkE,MAAM,cAAc,CAAC;AA8B9I,eAAO,MAAM,iBAAiB,kDAG5B,CAAC;AAMH,eAAO,MAAM,mBAAmB,QAAe,GAAG,KAAG,OAAO,CAAC,IAAI,CAiBhE,CAAC;AASF,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;CAChC;AASD,eAAO,MAAM,YAAY,WAAY,aAAa,SAAS,YAAY,KAAG,aAoBzE,CAAC;AASF,eAAO,MAAM,OAAO,iDAgDlB,CAAC;AAGH,UAAU,SAAS;IACf,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC5B;AAQD,eAAO,MAAM,UAAU,WAAY,aAAa,KAAG,SAAS,SAAS,EAKpE,CAAC"}
@@ -1,31 +1,33 @@
1
- import { execFile } from "node:child_process";
2
- import { promisify } from "node:util";
3
- import { buildCommand, buildRouteMap } from "@stricli/core";
4
- import { ensureResident } from "../resident.js";
1
+ import { execBounded } from "@intentic/base/process";
2
+ import { explain } from "@intentic/local-agent";
3
+ import { buildRouteMap } from "@stricli/core";
4
+ import { buildCommand, machineUi } from "../cli-ui.js";
5
+ import { ensureResident } from "../resident/resident.js";
5
6
  import { listDistros, WINDOWS_SIDE } from "./wsl.js";
6
- import { heldDistros, readMachineConfig, runOnWindows, updateMachineConfig, windowsRoot, withChild } from "./machine.js";
7
- const exec = promisify(execFile);
7
+ import { handToWindows, heldDistros, readMachineConfig, updateMachineConfig, windowsRoot, withChild } from "./machine.js";
8
8
  const attach = buildCommand({
9
9
  docs: { brief: "Keep a WSL distro's agent running from this PC's Windows side (the distro's own agent asks for this)" },
10
10
  parameters: {
11
11
  positional: { kind: "tuple", parameters: [{ brief: "The distro, as `wsl -l` names it", parse: String, placeholder: "distro" }] },
12
12
  },
13
13
  async func(_flags, distro) {
14
- const out = (message) => void this.process.stdout.write(`${message}\n`);
14
+ const ui = machineUi(this.process);
15
+ const failed = `${distro} is not kept running from here.`;
15
16
  if (!WINDOWS_SIDE) {
16
- throw new Error("only the Windows side of a PC keeps its distros running.");
17
+ throw new Error(explain(failed, "only the Windows side of a device keeps its WSL distros running."));
17
18
  }
19
+ ui.act(`Keeping ${distro} running from this side`);
18
20
  const listed = await listDistros();
19
21
  if (listed === undefined) {
20
- throw new Error("wsl.exe could not be asked which distros this PC has.");
22
+ throw new Error(explain(failed, "wsl.exe could not be asked which distros this device has."));
21
23
  }
22
24
  if (!listed.includes(distro)) {
23
- throw new Error(`WSL has no distro called "${distro}"; it lists ${listed.join(", ") || "none"}.`);
25
+ throw new Error(explain(failed, `WSL has no distro called ${distro}; it lists ${listed.join(", ") || "none"}.`));
24
26
  }
25
27
  const before = await heldDistros();
26
28
  await updateMachineConfig((config) => withChild(config, distro));
27
- await ensureResident(out);
28
- out(before.includes(distro) ? `${distro} is already kept running from here.` : `${distro}'s agent is kept running from here now.`);
29
+ await ensureResident(ui.note);
30
+ ui.done(before.includes(distro) ? `${distro} is already kept running from here.` : `${distro}'s agent is kept running from here now.`);
29
31
  },
30
32
  });
31
33
  export const environmentRoutes = buildRouteMap({
@@ -40,7 +42,7 @@ export const adoptRunningDistros = async (log) => {
40
42
  const held = await heldDistros();
41
43
  const running = ((await listDistros({ running: true })) ?? []).filter((distro) => !held.includes(distro));
42
44
  for (const distro of running) {
43
- const has = await exec("wsl.exe", ["-d", distro, "--exec", "sh", "-c", HAS_RESIDENT_SH], { timeout: 30_000, windowsHide: true })
45
+ const has = await execBounded("wsl.exe", ["-d", distro, "--exec", "sh", "-c", HAS_RESIDENT_SH], { timeoutMs: 30_000 })
44
46
  .then(() => true)
45
47
  .catch(() => false);
46
48
  if (has) {
@@ -53,7 +55,7 @@ const onOff = (value) => {
53
55
  if (value === "on" || value === "off") {
54
56
  return value;
55
57
  }
56
- throw new Error(`"${value}" is not on or off.`);
58
+ throw new Error(`${value} is not on or off.`);
57
59
  };
58
60
  const switchedTo = (flag, stored) => flag === undefined ? stored : flag === "on" ? undefined : false;
59
61
  export const withSwitches = (config, flags) => {
@@ -83,7 +85,7 @@ const updatesArgs = (flags) => ["agent", "sandboxes", "backups", "tidy"].flatMap
83
85
  });
84
86
  export const updates = buildCommand({
85
87
  docs: {
86
- brief: "What this machine does by itself: update its agent (the whole PC at once), download each sandbox's next image, back each sandbox up daily and tidy what swaps leave behind",
88
+ brief: "What this device does by itself: update its agent (the whole PC at once), download each sandbox's next image, back each sandbox up daily and tidy what swaps leave behind",
87
89
  },
88
90
  parameters: {
89
91
  flags: {
@@ -98,7 +100,7 @@ export const updates = buildCommand({
98
100
  kind: "parsed",
99
101
  parse: onOff,
100
102
  optional: true,
101
- brief: "Back each sandbox up once a day, encrypted, on this machine (on by default)",
103
+ brief: "Back each sandbox up once a day, encrypted, on this device (on by default)",
102
104
  },
103
105
  tidy: {
104
106
  kind: "parsed",
@@ -109,30 +111,34 @@ export const updates = buildCommand({
109
111
  },
110
112
  },
111
113
  async func(flags) {
112
- const out = (message) => void this.process.stdout.write(`${message}\n`);
113
114
  const root = await windowsRoot();
114
115
  if (root !== undefined) {
115
- if (runOnWindows(root, ["updates", ...updatesArgs(flags)], { inherit: true }).status !== 0) {
116
- throw new Error("the Windows side's agent did not take that; run it there: intentic-machine updates");
116
+ if (handToWindows(root, ["updates", ...updatesArgs(flags)]) !== 0) {
117
+ process.exitCode = 1;
117
118
  }
118
119
  return;
119
120
  }
121
+ const ui = machineUi(this.process);
120
122
  if (updatesArgs(flags).length > 0) {
123
+ ui.act("Changing what this device does by itself");
121
124
  await updateMachineConfig((config) => withSwitches(config, flags));
125
+ ui.done("Saved. Each switch applies from the agent's next pass.");
122
126
  }
123
127
  const config = await readMachineConfig();
124
- out(config.agentUpdates === false
125
- ? "Agent: updated only when asked (`intentic-machine upgrade`, or Update on the sandbox's Devices tab). Turn it back on with --agent on."
126
- : "Agent: updated by itself when a release is published, the whole PC at once. Turn it off with --agent off.");
127
- out(config.sandboxUpdates === false
128
- ? "Sandboxes: each update downloads when you take it, a wait of minutes. Turn background downloads back on with --sandboxes on."
129
- : "Sandboxes: each one's next update is downloaded in the background, so applying it is a restart of about half a minute, which a sandbox takes by itself at a quiet moment unless its update card says otherwise. Turn the downloads off with --sandboxes off.");
130
- out(config.sandboxBackups === false
131
- ? "Backups: none are taken by themselves. Turn the daily backup back on with --backups on."
132
- : "Backups: each running sandbox is backed up once a day, encrypted, on this machine (`intentic-machine sandbox backups <slug>` lists them). Turn it off with --backups off.");
133
- out(config.sandboxTidy === false
134
- ? "Tidy: what swaps and removals leave behind stays until you run `ic sandbox tidy`. Turn the daily tidy back on with --tidy on."
135
- : "Tidy: once a day, images no sandbox can go back to, records of removed sandboxes and the trash past its week are cleared; volumes are only listed, never deleted. Turn it off with --tidy off.");
128
+ ui.report("intentic · what this device does by itself");
129
+ const rows = switchRows(config);
130
+ ui.items(rows.map((row) => row.item));
131
+ ui.later(rows.map((row) => row.later));
136
132
  },
137
133
  });
134
+ const switchRow = (name, on, saidOn, saidOff) => ({
135
+ item: { tone: on ? "ok" : "skip", name, meta: on ? saidOn : saidOff },
136
+ later: [`turn ${name} ${on ? "off" : "on"}`, `intentic-machine updates --${name} ${on ? "off" : "on"}`],
137
+ });
138
+ export const switchRows = (config) => [
139
+ switchRow("agent", config.agentUpdates !== false, "updated by itself, the whole device at once", "updated only when asked"),
140
+ switchRow("sandboxes", config.sandboxUpdates !== false, "each next update downloads in the background", "each update downloads when it is taken"),
141
+ switchRow("backups", config.sandboxBackups !== false, "each running sandbox daily, encrypted, on this device", "none taken by themselves"),
142
+ switchRow("tidy", config.sandboxTidy !== false, "daily: old images, removed sandboxes' records, week-old trash", "left until tidied by hand"),
143
+ ];
138
144
  //# sourceMappingURL=commands.js.map