@agenticmail/enterprise 0.5.85 → 0.5.87

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/dist/cli.js CHANGED
@@ -48,7 +48,7 @@ Skill Development:
48
48
  break;
49
49
  case "setup":
50
50
  default:
51
- import("./setup-YD3LJ6DT.js").then((m) => m.runSetupWizard()).catch(fatal);
51
+ import("./setup-R2EI7Y2P.js").then((m) => m.runSetupWizard()).catch(fatal);
52
52
  break;
53
53
  }
54
54
  function fatal(err) {
@@ -4003,6 +4003,14 @@ function MeetingCapabilitiesSection(props) {
4003
4003
  var _d = useApp(); var toast = _d.toast;
4004
4004
  var _launching = useState(false); var launching = _launching[0]; var setLaunching = _launching[1];
4005
4005
  var _browserStatus = useState(null); var browserStatus = _browserStatus[0]; var setBrowserStatus = _browserStatus[1];
4006
+ var _sysCaps = useState(null); var sysCaps = _sysCaps[0]; var setSysCaps = _sysCaps[1];
4007
+
4008
+ // Fetch system capabilities on mount
4009
+ useEffect(function() {
4010
+ engineCall('/bridge/system/capabilities')
4011
+ .then(function(d) { setSysCaps(d); })
4012
+ .catch(function() { setSysCaps(null); });
4013
+ }, []);
4006
4014
 
4007
4015
  function checkMeetingBrowser() {
4008
4016
  engineCall('/bridge/agents/' + agentId + '/browser-config/test', { method: 'POST' })
@@ -4027,9 +4035,53 @@ function MeetingCapabilitiesSection(props) {
4027
4035
 
4028
4036
  var meetingsOn = cfg.meetingsEnabled === true;
4029
4037
 
4038
+ var isContainer = sysCaps && sysCaps.raw && (sysCaps.raw.deployment === 'container');
4039
+ var canJoinMeetings = sysCaps && sysCaps.raw && sysCaps.raw.canJoinMeetings;
4040
+ var isObserverOnly = sysCaps && sysCaps.raw && sysCaps.raw.isContainerWithFakeMedia;
4041
+ var canJoinFullMedia = sysCaps && sysCaps.raw && sysCaps.raw.canJoinMeetingsFullMedia;
4042
+
4030
4043
  return h('div', { style: sectionStyle },
4031
4044
  sectionTitle('\uD83C\uDFA5', 'Meetings & Video Calls'),
4032
4045
 
4046
+ // Deployment capability warning — show for no-meeting OR observer-only
4047
+ sysCaps && (!canJoinMeetings || isObserverOnly) && h('div', { style: {
4048
+ background: isObserverOnly ? 'rgba(33,150,243,0.08)' : 'rgba(255,152,0,0.08)',
4049
+ border: '1px solid ' + (isObserverOnly ? 'rgba(33,150,243,0.3)' : 'rgba(255,152,0,0.3)'),
4050
+ borderRadius: 8, padding: '12px 16px', marginBottom: 16,
4051
+ } },
4052
+ h('div', { style: { display: 'flex', alignItems: 'flex-start', gap: 10 } },
4053
+ h('span', { style: { fontSize: 18 } }, isObserverOnly ? '\uD83D\uDC41\uFE0F' : '\u26A0\uFE0F'),
4054
+ h('div', null,
4055
+ h('div', { style: { fontWeight: 600, fontSize: 13, marginBottom: 4 } },
4056
+ isObserverOnly
4057
+ ? 'Observer Mode — Container Deployment'
4058
+ : 'Limited on this deployment' + (isContainer ? ' (container)' : '')
4059
+ ),
4060
+ h('div', { style: { fontSize: 12, color: 'var(--text-muted)', lineHeight: 1.5 } },
4061
+ isObserverOnly
4062
+ ? 'This container has Chromium + virtual display, but uses fake media devices. The agent can join meetings as an observer — it can see the screen, read chat, and take notes, but cannot send or receive real audio/video.'
4063
+ : 'Video meeting joining requires a display server, audio subsystem, and browser — which are not available on container deployments (Fly.io, Railway, etc.).'
4064
+ ),
4065
+ isObserverOnly && h('div', { style: { fontSize: 12, marginTop: 8, lineHeight: 1.5 } },
4066
+ h('strong', null, 'Works in observer mode: '),
4067
+ 'Join meetings, read chat, see shared screens, take screenshots, capture meeting notes.'
4068
+ ),
4069
+ isObserverOnly && h('div', { style: { fontSize: 12, marginTop: 4, lineHeight: 1.5 } },
4070
+ h('strong', null, 'Does NOT work: '),
4071
+ 'Speaking, sending audio, showing video/camera, screen sharing.'
4072
+ ),
4073
+ !isObserverOnly && h('div', { style: { fontSize: 12, marginTop: 8, lineHeight: 1.5 } },
4074
+ h('strong', null, 'What works here: '), 'Calendar management, meeting prep, Drive organization, notes, email scanning for invites, RSVP.'
4075
+ ),
4076
+ h('div', { style: { fontSize: 12, marginTop: 8, lineHeight: 1.5 } },
4077
+ h('strong', null, 'For full media (audio + video): '), 'Deploy on a VM (Hetzner, DigitalOcean, GCP) with our ',
4078
+ h('code', { style: { fontSize: 11, background: 'var(--bg-secondary)', padding: '1px 4px', borderRadius: 3 } }, 'vm-setup.sh'),
4079
+ ' script, or use a Remote Browser (CDP) provider.'
4080
+ )
4081
+ )
4082
+ )
4083
+ ),
4084
+
4033
4085
  // Main toggle
4034
4086
  h('div', { style: { display: 'flex', alignItems: 'center', gap: 16, marginBottom: meetingsOn ? 16 : 0 } },
4035
4087
  h('div', {
@@ -4070,11 +4122,28 @@ function MeetingCapabilitiesSection(props) {
4070
4122
  browserStatus?.ok && h('span', { className: 'badge', style: { fontSize: 10, padding: '1px 6px', background: 'var(--success-soft)', color: 'var(--success)' } }, 'Running')
4071
4123
  ),
4072
4124
  browserStatus?.ok
4073
- ? h('div', { style: { fontSize: 12, color: 'var(--text-muted)' } }, browserStatus.browserVersion || 'Chromium ready')
4125
+ ? h('div', null,
4126
+ h('div', { style: { fontSize: 12, color: 'var(--text-muted)' } }, browserStatus.browserVersion || 'Chromium ready'),
4127
+ isObserverOnly && h('span', { className: 'badge', style: { fontSize: 10, padding: '1px 6px', marginLeft: 8, background: 'rgba(33,150,243,0.15)', color: 'var(--accent)' } }, 'Observer Only'),
4128
+ isContainer && !canJoinMeetings && !isObserverOnly && h('div', { style: { fontSize: 11, color: 'var(--warning)', marginTop: 4 } },
4129
+ '\u26A0 Browser is headless-only on this container. It cannot join video calls (no display/audio).'
4130
+ )
4131
+ )
4074
4132
  : h('div', null,
4075
- h('div', { style: { fontSize: 12, color: 'var(--text-muted)', marginBottom: 8 } }, 'A dedicated browser instance will be launched for video calls with virtual display and audio.'),
4076
- h('button', { className: 'btn btn-sm', disabled: launching, onClick: launchMeetingBrowser },
4077
- launching ? 'Launching...' : '\u25B6\uFE0F Launch Meeting Browser'
4133
+ h('div', { style: { fontSize: 12, color: 'var(--text-muted)', marginBottom: 8 } },
4134
+ isContainer && !canJoinMeetings
4135
+ ? 'Meeting browser cannot join video calls on container deployments. Use a VM or Remote Browser (CDP) instead.'
4136
+ : 'A dedicated browser instance will be launched for video calls with virtual display and audio.'
4137
+ ),
4138
+ h('button', {
4139
+ className: 'btn btn-sm',
4140
+ disabled: launching || (isContainer && !canJoinMeetings),
4141
+ onClick: launchMeetingBrowser,
4142
+ title: isContainer && !canJoinMeetings ? 'Not available on container deployments' : '',
4143
+ },
4144
+ isContainer && !canJoinMeetings
4145
+ ? '\u274C Not available on containers'
4146
+ : launching ? 'Launching...' : '\u25B6\uFE0F Launch Meeting Browser'
4078
4147
  )
4079
4148
  )
4080
4149
  )
@@ -0,0 +1,11 @@
1
+ import {
2
+ detectCapabilities,
3
+ getCapabilitySummary,
4
+ resetCapabilitiesCache
5
+ } from "./chunk-NRF3YRF7.js";
6
+ import "./chunk-KFQGP6VL.js";
7
+ export {
8
+ detectCapabilities,
9
+ getCapabilitySummary,
10
+ resetCapabilitiesCache
11
+ };
package/dist/index.js CHANGED
@@ -35,8 +35,8 @@ import {
35
35
  executeTool,
36
36
  runAgentLoop,
37
37
  toolsToDefinitions
38
- } from "./chunk-CETB63LZ.js";
39
- import "./chunk-TGOSFAYW.js";
38
+ } from "./chunk-F23OR2UN.js";
39
+ import "./chunk-NRF3YRF7.js";
40
40
  import "./chunk-TYW5XTOW.js";
41
41
  import "./chunk-AQH4DFYV.js";
42
42
  import {
@@ -52,11 +52,11 @@ import {
52
52
  requireRole,
53
53
  securityHeaders,
54
54
  validate
55
- } from "./chunk-PHZS6OIO.js";
55
+ } from "./chunk-WY7EUYDG.js";
56
56
  import {
57
57
  provision,
58
58
  runSetupWizard
59
- } from "./chunk-LOA5LNXR.js";
59
+ } from "./chunk-6YHJFTJV.js";
60
60
  import {
61
61
  ENGINE_TABLES,
62
62
  ENGINE_TABLES_POSTGRES,