@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.
- package/dist/chunk-5DHA3EXP.js +16421 -0
- package/dist/chunk-RT7T4NSG.js +2195 -0
- package/dist/chunk-W2D2QS6F.js +898 -0
- package/dist/cli-agent-JMYRK6TG.js +825 -0
- package/dist/cli-agent-NJA6QJRP.js +810 -0
- package/dist/cli-serve-TY75XKAC.js +34 -0
- package/dist/cli.js +3 -3
- package/dist/index.js +3 -3
- package/dist/runtime-XWEE5ZCZ.js +49 -0
- package/dist/server-D3R4NX53.js +12 -0
- package/dist/setup-E5UQ7DVF.js +20 -0
- package/package.json +1 -1
- package/src/agent-tools/tools/meeting-lifecycle.ts +1 -72
- package/src/cli-agent.ts +10 -2
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
@@ -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
|
-
|
|
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 ──────────────────────────────────
|