@agenticmail/enterprise 0.5.147 → 0.5.149

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,34 @@
1
+ import "./chunk-KFQGP6VL.js";
2
+
3
+ // src/cli-serve.ts
4
+ async function runServe(_args) {
5
+ const DATABASE_URL = process.env.DATABASE_URL;
6
+ const JWT_SECRET = process.env.JWT_SECRET;
7
+ const PORT = parseInt(process.env.PORT || "8080", 10);
8
+ if (!DATABASE_URL) {
9
+ console.error("ERROR: DATABASE_URL environment variable is required");
10
+ process.exit(1);
11
+ }
12
+ if (!JWT_SECRET) {
13
+ console.error("ERROR: JWT_SECRET environment variable is required");
14
+ process.exit(1);
15
+ }
16
+ const { createAdapter } = await import("./factory-MBP7N2OQ.js");
17
+ const { createServer } = await import("./server-D3R4NX53.js");
18
+ const db = await createAdapter({
19
+ type: DATABASE_URL.startsWith("postgres") ? "postgres" : "sqlite",
20
+ connectionString: DATABASE_URL
21
+ });
22
+ await db.migrate();
23
+ const server = createServer({
24
+ port: PORT,
25
+ db,
26
+ jwtSecret: JWT_SECRET,
27
+ corsOrigins: ["*"]
28
+ });
29
+ await server.start();
30
+ console.log(`AgenticMail Enterprise server running on :${PORT}`);
31
+ }
32
+ export {
33
+ runServe
34
+ };
package/dist/cli.js CHANGED
@@ -47,14 +47,14 @@ Skill Development:
47
47
  `);
48
48
  break;
49
49
  case "serve":
50
- import("./cli-serve-PAZBBNYO.js").then((m) => m.runServe(args.slice(1))).catch(fatal);
50
+ import("./cli-serve-TY75XKAC.js").then((m) => m.runServe(args.slice(1))).catch(fatal);
51
51
  break;
52
52
  case "agent":
53
- import("./cli-agent-C5GYBTEP.js").then((m) => m.runAgent(args.slice(1))).catch(fatal);
53
+ import("./cli-agent-JMYRK6TG.js").then((m) => m.runAgent(args.slice(1))).catch(fatal);
54
54
  break;
55
55
  case "setup":
56
56
  default:
57
- import("./setup-FYDVXY3G.js").then((m) => m.runSetupWizard()).catch(fatal);
57
+ import("./setup-E5UQ7DVF.js").then((m) => m.runSetupWizard()).catch(fatal);
58
58
  break;
59
59
  }
60
60
  function fatal(err) {
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  provision,
9
9
  runSetupWizard
10
- } from "./chunk-75367ZJT.js";
10
+ } from "./chunk-W2D2QS6F.js";
11
11
  import {
12
12
  ActionJournal,
13
13
  ActivityTracker,
@@ -54,7 +54,7 @@ import {
54
54
  executeTool,
55
55
  runAgentLoop,
56
56
  toolsToDefinitions
57
- } from "./chunk-AOR6GSZQ.js";
57
+ } from "./chunk-5DHA3EXP.js";
58
58
  import "./chunk-AQH4DFYV.js";
59
59
  import {
60
60
  ValidationError,
@@ -69,7 +69,7 @@ import {
69
69
  requireRole,
70
70
  securityHeaders,
71
71
  validate
72
- } from "./chunk-ROB2PPZ2.js";
72
+ } from "./chunk-RT7T4NSG.js";
73
73
  import "./chunk-3SMTCIR4.js";
74
74
  import {
75
75
  CircuitBreaker,
@@ -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-5DHA3EXP.js";
18
+ import "./chunk-AQH4DFYV.js";
19
+ import "./chunk-JLSQOQ5L.js";
20
+ import {
21
+ PROVIDER_REGISTRY,
22
+ listAllProviders,
23
+ resolveApiKeyForProvider,
24
+ resolveProvider
25
+ } from "./chunk-67KZYSLU.js";
26
+ import "./chunk-NRF3YRF7.js";
27
+ import "./chunk-TYW5XTOW.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-RT7T4NSG.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-W2D2QS6F.js";
10
+ import "./chunk-MHIFVS5L.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.147",
3
+ "version": "0.5.149",
4
4
  "description": "AgenticMail Enterprise — cloud-hosted AI agent identity, email, auth & compliance for organizations",
5
5
  "type": "module",
6
6
  "bin": {
@@ -373,78 +373,7 @@ export function createMeetingLifecycleTools(config: MeetingLifecycleConfig, _opt
373
373
  },
374
374
 
375
375
  // ─── Check Meeting Joinability ─────────────────────
376
- {
377
- name: 'meeting_join',
378
- description: 'Join a video meeting (Google Meet, Zoom, or Teams) by opening the meeting URL in a browser. Works in observer mode on containers (can see screen/chat but no real audio/video). On VMs, full audio/video is available.',
379
- category: 'utility' as const,
380
- parameters: {
381
- type: 'object' as const,
382
- properties: {
383
- url: { type: 'string', description: 'Meeting URL (e.g. https://meet.google.com/abc-defg-hij)' },
384
- platform: { type: 'string', description: 'Meeting platform: google_meet, zoom, teams (auto-detected from URL if omitted)' },
385
- muted: { type: 'boolean', description: 'Join with mic muted (default: true)' },
386
- cameraOff: { type: 'boolean', description: 'Join with camera off (default: true)' },
387
- },
388
- required: ['url'],
389
- },
390
- async execute(_id: string, params: any) {
391
- const meetUrl = params.url;
392
- if (!meetUrl) return errorResult('Meeting URL is required');
393
-
394
- const caps = getCaps();
395
- const summary = getCapabilitySummary(caps);
396
-
397
- // Auto-detect platform
398
- let platform = params.platform || 'unknown';
399
- if (meetUrl.includes('meet.google.com')) platform = 'google_meet';
400
- else if (meetUrl.includes('zoom.us') || meetUrl.includes('zoom.com')) platform = 'zoom';
401
- else if (meetUrl.includes('teams.microsoft.com') || meetUrl.includes('teams.live.com')) platform = 'teams';
402
-
403
- // Return instructions for the agent to use browser tool
404
- // The agent has browser tool access and should use it to navigate to the URL
405
- const isObserverOnly = !caps.canJoinMeetings;
406
- const instructions: string[] = [];
407
-
408
- if (platform === 'google_meet') {
409
- instructions.push(
410
- `Navigate to: ${meetUrl}`,
411
- 'Wait for the pre-join screen to load.',
412
- 'If prompted to sign in, you should already be authenticated via Google OAuth.',
413
- isObserverOnly
414
- ? 'You are in OBSERVER mode: camera and mic will show as unavailable. Click "Join now" or "Ask to join" anyway.'
415
- : 'Toggle mic OFF (Ctrl+D) and camera OFF (Ctrl+E) before joining.',
416
- 'Click the "Join now" or "Ask to join" button.',
417
- 'Once in the meeting, you can observe the screen and read the chat.',
418
- );
419
- } else if (platform === 'zoom') {
420
- instructions.push(
421
- `Navigate to: ${meetUrl}`,
422
- 'Click "Join from Your Browser" (do NOT install the Zoom client).',
423
- 'Enter your name if prompted.',
424
- 'Join with mic and camera off.',
425
- );
426
- } else if (platform === 'teams') {
427
- instructions.push(
428
- `Navigate to: ${meetUrl}`,
429
- 'Click "Continue on this browser" (do NOT use the Teams app).',
430
- 'Enter your name if prompted.',
431
- 'Join with mic and camera off.',
432
- );
433
- } else {
434
- instructions.push(`Navigate to: ${meetUrl}`, 'Follow the on-screen prompts to join.');
435
- }
436
-
437
- return jsonResult({
438
- status: 'ready_to_join',
439
- platform,
440
- url: meetUrl,
441
- mode: isObserverOnly ? 'observer' : 'full',
442
- deployment: summary.deployment,
443
- instructions,
444
- nextStep: 'Use the browser tool to navigate to the URL and follow the instructions above. Use browser(action="navigate", targetUrl="' + meetUrl + '") then browser(action="snapshot") to see the page.',
445
- });
446
- },
447
- },
376
+ // NOTE: meeting_join is defined in google/meetings.ts — do NOT duplicate here
448
377
  {
449
378
  name: 'meeting_can_join',
450
379
  description: 'Check if this agent can join a video meeting on the current deployment. Returns capabilities and specific instructions based on what is available.',
package/src/cli-agent.ts CHANGED
@@ -22,6 +22,10 @@ import { Hono } from 'hono';
22
22
  import { serve } from '@hono/node-server';
23
23
 
24
24
  export async function runAgent(_args: string[]) {
25
+ // Catch unhandled errors so they show in logs
26
+ process.on('uncaughtException', (err) => { console.error('[FATAL] Uncaught exception:', err.message, err.stack?.slice(0, 500)); });
27
+ process.on('unhandledRejection', (reason: any) => { console.error('[FATAL] Unhandled rejection:', reason?.message || reason, reason?.stack?.slice(0, 500)); });
28
+
25
29
  const DATABASE_URL = process.env.DATABASE_URL;
26
30
  const JWT_SECRET = process.env.JWT_SECRET;
27
31
  const AGENT_ID = process.env.AGENTICMAIL_AGENT_ID;
@@ -574,6 +578,7 @@ async function startEmailPolling(
574
578
 
575
579
  // Initial load — mark existing messages as processed so we don't reply to old emails
576
580
  try {
581
+ console.log('[email-poll] Loading existing messages...');
577
582
  const existing = await emailProvider.listMessages('INBOX', { limit: 50 });
578
583
  for (const msg of existing) {
579
584
  processedIds.add(msg.uid);
@@ -583,6 +588,8 @@ async function startEmailPolling(
583
588
  console.error(`[email-poll] Failed to load existing messages: ${e.message}`);
584
589
  }
585
590
 
591
+ console.log('[email-poll] Setting up poll interval...');
592
+
586
593
  // Poll loop
587
594
  const POLL_INTERVAL = 30_000; // 30 seconds
588
595
  const agentEmail = (emailConfig.email || config.email?.address || '').toLowerCase();
@@ -819,9 +826,10 @@ When you receive an email containing a meeting link (meet.google.com, zoom.us, t
819
826
  }
820
827
 
821
828
  // Start polling
822
- setInterval(pollOnce, POLL_INTERVAL);
829
+ console.log('[email-poll] Starting poll loop (interval: 30s, first poll: 5s)');
830
+ setInterval(() => { console.log('[email-poll] Tick'); pollOnce(); }, POLL_INTERVAL);
823
831
  // First poll after 5s
824
- setTimeout(pollOnce, 5000);
832
+ setTimeout(() => { console.log('[email-poll] First poll firing'); pollOnce(); }, 5000);
825
833
  }
826
834
 
827
835
  // ─── Calendar Polling Loop ──────────────────────────────────