@bongos/core 1.19.884 → 1.19.885

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 (65) hide show
  1. package/.bongos-core.json +19 -284
  2. package/docs/architecture.md +0 -1
  3. package/docs/file-map.md +0 -1
  4. package/docs/module-api-changelog.md +2 -0
  5. package/package-lock.json +2 -2
  6. package/package.json +1 -1
  7. package/src/bongos/serve-internal.js +10 -56
  8. package/src/module-api.js +1 -1
  9. package/src/platform-server.js +0 -1
  10. package/tests/host_topology_skips.mjs +0 -1
  11. package/tests/instance_release_config.mjs +27 -26
  12. package/tests/session_rename_fallback.mjs +8 -90
  13. package/modules/dev-box/app/README.md +0 -74
  14. package/modules/dev-box/app/assets/tray/mac-alertTemplate.png +0 -0
  15. package/modules/dev-box/app/assets/tray/mac-alertTemplate@2x.png +0 -0
  16. package/modules/dev-box/app/assets/tray/mac-busyTemplate.png +0 -0
  17. package/modules/dev-box/app/assets/tray/mac-busyTemplate@2x.png +0 -0
  18. package/modules/dev-box/app/assets/tray/mac-offTemplate.png +0 -0
  19. package/modules/dev-box/app/assets/tray/mac-offTemplate@2x.png +0 -0
  20. package/modules/dev-box/app/assets/tray/mac-onTemplate.png +0 -0
  21. package/modules/dev-box/app/assets/tray/mac-onTemplate@2x.png +0 -0
  22. package/modules/dev-box/app/assets/tray/win-alert.png +0 -0
  23. package/modules/dev-box/app/assets/tray/win-busy.png +0 -0
  24. package/modules/dev-box/app/assets/tray/win-off.png +0 -0
  25. package/modules/dev-box/app/assets/tray/win-on.png +0 -0
  26. package/modules/dev-box/app/build-resources/dmg-background.png +0 -0
  27. package/modules/dev-box/app/build-resources/dmg-background@2x.png +0 -0
  28. package/modules/dev-box/app/build-resources/icon.png +0 -0
  29. package/modules/dev-box/app/electron-builder.tmpl.yml +0 -95
  30. package/modules/dev-box/app/electron-builder.yml +0 -95
  31. package/modules/dev-box/app/package-lock.json +0 -5291
  32. package/modules/dev-box/app/package.json +0 -30
  33. package/modules/dev-box/app/renderer/app.js +0 -319
  34. package/modules/dev-box/app/renderer/index.html +0 -45
  35. package/modules/dev-box/app/renderer/styles.css +0 -248
  36. package/modules/dev-box/app/renderer/theme.generated.css +0 -16
  37. package/modules/dev-box/app/scripts/apply-dmg-backdrop.sh +0 -82
  38. package/modules/dev-box/app/scripts/dmgbuild-settings.py +0 -39
  39. package/modules/dev-box/app/scripts/gen-brand.js +0 -138
  40. package/modules/dev-box/app/scripts/gen-dmg-backdrop.py +0 -323
  41. package/modules/dev-box/app/scripts/gen-icons.js +0 -286
  42. package/modules/dev-box/app/scripts/vendor-client.js +0 -23
  43. package/modules/dev-box/app/src/box-controller.js +0 -287
  44. package/modules/dev-box/app/src/brand.generated.json +0 -13
  45. package/modules/dev-box/app/src/brand.js +0 -16
  46. package/modules/dev-box/app/src/config.js +0 -31
  47. package/modules/dev-box/app/src/gds-client.js +0 -96
  48. package/modules/dev-box/app/src/main.js +0 -610
  49. package/modules/dev-box/app/src/pairing.js +0 -57
  50. package/modules/dev-box/app/src/preload.js +0 -29
  51. package/modules/dev-box/app/src/session-store.js +0 -82
  52. package/modules/dev-box/app/src/ssh-setup.js +0 -569
  53. package/modules/dev-box/app/src/task-picker.js +0 -70
  54. package/modules/dev-box/app/src/tray.js +0 -99
  55. package/modules/dev-box/app/src/updater.js +0 -55
  56. package/modules/dev-box/app/src/vendor/bongos-client.cjs +0 -1014
  57. package/modules/dev-box/app/test/unit.mjs +0 -526
  58. package/src/devbox-downloads.js +0 -67
  59. package/tests/devbox_artifact_gate.mjs +0 -75
  60. package/tests/devbox_dmg_backdrop.mjs +0 -137
  61. package/tests/devbox_downloads.mjs +0 -140
  62. package/tests/devbox_icons.mjs +0 -304
  63. package/tests/devbox_installer_brand.mjs +0 -232
  64. package/tests/devbox_key_register.mjs +0 -234
  65. package/tests/devbox_update_path.mjs +0 -84
@@ -1,99 +0,0 @@
1
- // devbox-app/src/tray.js — the menu-bar (mac) / system-tray (Windows) face.
2
- //
3
- // macOS gets monochrome TEMPLATE images (the OS recolors them for light/dark
4
- // menu bars; the shape carries the state). Windows gets colored PNGs. Four
5
- // states: off (outline), on (filled), busy (half), alert (bang).
6
-
7
- const path = require('node:path');
8
- const { Tray, Menu, nativeImage } = require('electron');
9
-
10
- const ASSETS = path.join(__dirname, '..', 'assets', 'tray');
11
- const IS_MAC = process.platform === 'darwin';
12
-
13
- // status (box-controller vocabulary) → icon variant
14
- function iconVariant(status) {
15
- switch (status) {
16
- case 'active': return 'on';
17
- case 'provisioning':
18
- case 'closing': return 'busy';
19
- case 'error': return 'alert';
20
- default: return 'off'; // none / signed_out / loading
21
- }
22
- }
23
-
24
- function loadIcon(variant) {
25
- const file = IS_MAC ? `mac-${variant}Template.png` : `win-${variant}.png`;
26
- const img = nativeImage.createFromPath(path.join(ASSETS, file));
27
- if (IS_MAC) img.setTemplateImage(true);
28
- return img;
29
- }
30
-
31
- function statusLine(snapshot) {
32
- switch (snapshot.status) {
33
- case 'signed_out': return 'Not signed in';
34
- case 'loading': return 'Checking…';
35
- case 'none': return 'Box: off';
36
- case 'provisioning': return 'Box: starting up…';
37
- case 'active': return `Box: ON${snapshot.box && snapshot.box.hostname ? ` — ${snapshot.box.hostname}` : ''}`;
38
- case 'closing': return 'Box: shutting down…';
39
- case 'error': return 'Box: error — open the panel';
40
- default: return 'Dev Box';
41
- }
42
- }
43
-
44
- // createTray({ onOpen, onToggle, onOpenTerminal, onOpenHall, onQuit,
45
- // getLoginItem, setLoginItem }) → { update(snapshot), destroy() }
46
- function createTray(handlers) {
47
- const tray = new Tray(loadIcon('off'));
48
- let current = { status: 'loading' };
49
-
50
- function buildMenu() {
51
- const s = current;
52
- const onOrOff = s.status === 'active' || s.status === 'closing';
53
- return Menu.buildFromTemplate([
54
- { label: statusLine(s), enabled: false },
55
- { type: 'separator' },
56
- { label: 'Open Dev Box panel', click: handlers.onOpen },
57
- {
58
- label: onOrOff ? 'Turn box off' : 'Turn box on',
59
- enabled: s.status !== 'signed_out' && s.status !== 'loading' && !s.busy
60
- && s.status !== 'provisioning' && s.status !== 'closing',
61
- click: handlers.onToggle,
62
- },
63
- {
64
- label: 'Open browser terminal',
65
- enabled: Boolean(s.terminal && s.terminal.url),
66
- click: handlers.onOpenTerminal,
67
- },
68
- { label: 'Open the builders’ hall', click: handlers.onOpenHall },
69
- { type: 'separator' },
70
- {
71
- label: 'Start at login',
72
- type: 'checkbox',
73
- checked: handlers.getLoginItem(),
74
- click: (item) => handlers.setLoginItem(item.checked),
75
- },
76
- { type: 'separator' },
77
- { label: 'Quit', click: handlers.onQuit },
78
- ]);
79
- }
80
-
81
- // Left-click opens the panel; right-click (and mac ctrl-click) the menu.
82
- tray.on('click', handlers.onOpen);
83
- tray.on('right-click', () => tray.popUpContextMenu(buildMenu()));
84
-
85
- return {
86
- update(snapshot) {
87
- current = snapshot;
88
- tray.setImage(loadIcon(iconVariant(snapshot.status)));
89
- tray.setToolTip(statusLine(snapshot));
90
- // Keep a context menu reachable on platforms that route both buttons to
91
- // 'click' — popUpContextMenu handles the rest.
92
- if (!IS_MAC) tray.setContextMenu(buildMenu());
93
- },
94
- bounds() { return tray.getBounds(); },
95
- destroy() { tray.destroy(); },
96
- };
97
- }
98
-
99
- module.exports = { createTray, iconVariant, statusLine };
@@ -1,55 +0,0 @@
1
- // devbox-app/src/updater.js — pure update-check logic (#924). No Electron, no
2
- // network: deciding "is a newer release available?" and "which installer target
3
- // do I need?" are pure functions so test/unit.mjs proves them without a GUI. The
4
- // Electron wiring (poll the endpoint, download, launch the installer) is in main.js.
5
-
6
- // Parse "X.Y.Z" → [X, Y, Z] numbers, or null for anything that isn't a clean
7
- // three-part numeric version (the same shape devbox-downloads.js enforces on the
8
- // server), so a malformed value can never be mistaken for an upgrade.
9
- function parseVersion(v) {
10
- if (typeof v !== 'string') return null;
11
- const m = /^(\d+)\.(\d+)\.(\d+)$/.exec(v.trim());
12
- return m ? [Number(m[1]), Number(m[2]), Number(m[3])] : null;
13
- }
14
-
15
- // -1 if a<b, 0 if equal, 1 if a>b. An unparseable side sorts BELOW a parseable
16
- // one (and two bad ones are equal), so a malformed version never reads as newer.
17
- function compareVersions(a, b) {
18
- const pa = parseVersion(a);
19
- const pb = parseVersion(b);
20
- if (!pa || !pb) {
21
- if (!pa && !pb) return 0;
22
- return pa ? 1 : -1;
23
- }
24
- for (let i = 0; i < 3; i++) {
25
- if (pa[i] !== pb[i]) return pa[i] < pb[i] ? -1 : 1;
26
- }
27
- return 0;
28
- }
29
-
30
- // The load-bearing decision: the "update available" banner shows ONLY when the
31
- // published release is STRICTLY newer than what's running. This replaces the
32
- // naive `latest !== current` check, which would advertise a DOWNGRADE whenever
33
- // the published config trails the installed app (the live state today: app 1.0.6
34
- // vs config 1.0.5). Returns false on any unparseable version — never a
35
- // false-positive.
36
- function isUpdateAvailable(currentVersion, latestVersion) {
37
- if (!parseVersion(currentVersion) || !parseVersion(latestVersion)) return false;
38
- return compareVersions(latestVersion, currentVersion) > 0;
39
- }
40
-
41
- // Map the running (platform, arch) to a config/devbox-app.json asset target key.
42
- // Mirrors the four built targets. Anything else (e.g. linux) → null = no
43
- // in-app installer for this platform (the banner simply won't offer one).
44
- function resolveTarget(platform, arch) {
45
- if (platform === 'darwin') return arch === 'arm64' ? 'mac-arm64' : 'mac-x64';
46
- if (platform === 'win32') return arch === 'arm64' ? 'win-arm64' : 'win-x64';
47
- return null;
48
- }
49
-
50
- // The exact banner copy the task specifies: "Update available — v1.0.6".
51
- function updateBannerText(latestVersion) {
52
- return `Update available — v${latestVersion}`;
53
- }
54
-
55
- module.exports = { parseVersion, compareVersions, isUpdateAvailable, resolveTarget, updateBannerText };