@agenticmail/enterprise 0.5.85 → 0.5.86

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.
@@ -0,0 +1,49 @@
1
+ import {
2
+ AgentRuntime,
3
+ EmailChannel,
4
+ FollowUpScheduler,
5
+ SessionManager,
6
+ SubAgentManager,
7
+ ToolRegistry,
8
+ callLLM,
9
+ createAgentRuntime,
10
+ createNoopHooks,
11
+ createRuntimeHooks,
12
+ estimateMessageTokens,
13
+ estimateTokens,
14
+ executeTool,
15
+ runAgentLoop,
16
+ toolsToDefinitions
17
+ } from "./chunk-FN73A3AQ.js";
18
+ import "./chunk-TGOSFAYW.js";
19
+ import "./chunk-TYW5XTOW.js";
20
+ import "./chunk-AQH4DFYV.js";
21
+ import "./chunk-JLSQOQ5L.js";
22
+ import {
23
+ PROVIDER_REGISTRY,
24
+ listAllProviders,
25
+ resolveApiKeyForProvider,
26
+ resolveProvider
27
+ } from "./chunk-67KZYSLU.js";
28
+ import "./chunk-KFQGP6VL.js";
29
+ export {
30
+ AgentRuntime,
31
+ EmailChannel,
32
+ FollowUpScheduler,
33
+ PROVIDER_REGISTRY,
34
+ SessionManager,
35
+ SubAgentManager,
36
+ ToolRegistry,
37
+ callLLM,
38
+ createAgentRuntime,
39
+ createNoopHooks,
40
+ createRuntimeHooks,
41
+ estimateMessageTokens,
42
+ estimateTokens,
43
+ executeTool,
44
+ listAllProviders,
45
+ resolveApiKeyForProvider,
46
+ resolveProvider,
47
+ runAgentLoop,
48
+ toolsToDefinitions
49
+ };
@@ -0,0 +1,12 @@
1
+ import {
2
+ createServer
3
+ } from "./chunk-QJIY4RQJ.js";
4
+ import "./chunk-3SMTCIR4.js";
5
+ import "./chunk-JLSQOQ5L.js";
6
+ import "./chunk-RO537U6H.js";
7
+ import "./chunk-DRXMYYKN.js";
8
+ import "./chunk-67KZYSLU.js";
9
+ import "./chunk-KFQGP6VL.js";
10
+ export {
11
+ createServer
12
+ };
@@ -0,0 +1,20 @@
1
+ import {
2
+ promptCompanyInfo,
3
+ promptDatabase,
4
+ promptDeployment,
5
+ promptDomain,
6
+ promptRegistration,
7
+ provision,
8
+ runSetupWizard
9
+ } from "./chunk-U72GUDSD.js";
10
+ import "./chunk-QDXUZP7Y.js";
11
+ import "./chunk-KFQGP6VL.js";
12
+ export {
13
+ promptCompanyInfo,
14
+ promptDatabase,
15
+ promptDeployment,
16
+ promptDomain,
17
+ promptRegistration,
18
+ provision,
19
+ runSetupWizard
20
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticmail/enterprise",
3
- "version": "0.5.85",
3
+ "version": "0.5.86",
4
4
  "description": "AgenticMail Enterprise — cloud-hosted AI agent identity, email, auth & compliance for organizations",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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,41 @@ 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
+
4030
4041
  return h('div', { style: sectionStyle },
4031
4042
  sectionTitle('\uD83C\uDFA5', 'Meetings & Video Calls'),
4032
4043
 
4044
+ // Deployment capability warning
4045
+ sysCaps && !canJoinMeetings && h('div', { style: {
4046
+ background: 'rgba(255,152,0,0.08)', border: '1px solid rgba(255,152,0,0.3)',
4047
+ borderRadius: 8, padding: '12px 16px', marginBottom: 16,
4048
+ } },
4049
+ h('div', { style: { display: 'flex', alignItems: 'flex-start', gap: 10 } },
4050
+ h('span', { style: { fontSize: 18 } }, '\u26A0\uFE0F'),
4051
+ h('div', null,
4052
+ h('div', { style: { fontWeight: 600, fontSize: 13, marginBottom: 4 } },
4053
+ 'Limited on this deployment' + (isContainer ? ' (container)' : '')
4054
+ ),
4055
+ h('div', { style: { fontSize: 12, color: 'var(--text-muted)', lineHeight: 1.5 } },
4056
+ 'Video meeting joining requires a display server, audio subsystem, and browser — which are not available on container deployments (Fly.io, Railway, etc.).'
4057
+ ),
4058
+ h('div', { style: { fontSize: 12, marginTop: 8, lineHeight: 1.5 } },
4059
+ h('strong', null, 'What works here: '), 'Calendar management, meeting prep, Drive organization, notes, email scanning for invites, RSVP.'
4060
+ ),
4061
+ h('div', { style: { fontSize: 12, marginTop: 4, lineHeight: 1.5 } },
4062
+ h('strong', null, 'For meeting joining: '), 'Deploy on a VM (Hetzner, DigitalOcean, GCP) with our ',
4063
+ h('code', { style: { fontSize: 11, background: 'var(--bg-secondary)', padding: '1px 4px', borderRadius: 3 } }, 'vm-setup.sh'),
4064
+ ' script, or use a Remote Browser (CDP) provider below.'
4065
+ ),
4066
+ sysCaps.unavailable && sysCaps.unavailable.length > 0 && h('div', { style: { fontSize: 11, color: 'var(--text-muted)', marginTop: 8 } },
4067
+ 'Missing: ' + sysCaps.unavailable.join(' \u2022 ')
4068
+ )
4069
+ )
4070
+ )
4071
+ ),
4072
+
4033
4073
  // Main toggle
4034
4074
  h('div', { style: { display: 'flex', alignItems: 'center', gap: 16, marginBottom: meetingsOn ? 16 : 0 } },
4035
4075
  h('div', {
@@ -4070,11 +4110,27 @@ function MeetingCapabilitiesSection(props) {
4070
4110
  browserStatus?.ok && h('span', { className: 'badge', style: { fontSize: 10, padding: '1px 6px', background: 'var(--success-soft)', color: 'var(--success)' } }, 'Running')
4071
4111
  ),
4072
4112
  browserStatus?.ok
4073
- ? h('div', { style: { fontSize: 12, color: 'var(--text-muted)' } }, browserStatus.browserVersion || 'Chromium ready')
4113
+ ? h('div', null,
4114
+ h('div', { style: { fontSize: 12, color: 'var(--text-muted)' } }, browserStatus.browserVersion || 'Chromium ready'),
4115
+ isContainer && !canJoinMeetings && h('div', { style: { fontSize: 11, color: 'var(--warning)', marginTop: 4 } },
4116
+ '\u26A0 Browser is headless-only on this container. It cannot join video calls (no display/audio).'
4117
+ )
4118
+ )
4074
4119
  : 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'
4120
+ h('div', { style: { fontSize: 12, color: 'var(--text-muted)', marginBottom: 8 } },
4121
+ isContainer && !canJoinMeetings
4122
+ ? 'Meeting browser cannot join video calls on container deployments. Use a VM or Remote Browser (CDP) instead.'
4123
+ : 'A dedicated browser instance will be launched for video calls with virtual display and audio.'
4124
+ ),
4125
+ h('button', {
4126
+ className: 'btn btn-sm',
4127
+ disabled: launching || (isContainer && !canJoinMeetings),
4128
+ onClick: launchMeetingBrowser,
4129
+ title: isContainer && !canJoinMeetings ? 'Not available on container deployments' : '',
4130
+ },
4131
+ isContainer && !canJoinMeetings
4132
+ ? '\u274C Not available on containers'
4133
+ : launching ? 'Launching...' : '\u25B6\uFE0F Launch Meeting Browser'
4078
4134
  )
4079
4135
  )
4080
4136
  )
@@ -957,6 +957,20 @@ export function createAgentRoutes(opts: {
957
957
  if (!managed) return c.json({ error: 'Agent not found' }, 404);
958
958
 
959
959
  try {
960
+ // Check system capabilities first
961
+ const { detectCapabilities, getCapabilitySummary } = await import('../runtime/environment.js');
962
+ const caps = detectCapabilities();
963
+ if (!caps.canJoinMeetings) {
964
+ const summary = getCapabilitySummary(caps);
965
+ return c.json({
966
+ error: 'Meeting browser cannot run on this ' + summary.deployment + ' deployment',
967
+ deployment: summary.deployment,
968
+ missing: summary.unavailable,
969
+ recommendations: summary.recommendations,
970
+ hint: 'Deploy on a VM with display + audio, or configure a Remote Browser (CDP) provider.',
971
+ }, 400);
972
+ }
973
+
960
974
  const { execSync, spawn } = await import('node:child_process');
961
975
  const chromePath = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH || '/usr/bin/chromium';
962
976