@agenticmail/enterprise 0.5.168 → 0.5.170
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/agent-autonomy-GSH6XDPR.js +650 -0
- package/dist/agent-autonomy-M7WKBPKI.js +665 -0
- package/dist/chunk-2ALM5WEM.js +2195 -0
- package/dist/chunk-OZ7OBEUD.js +16484 -0
- package/dist/chunk-RNHBMPPK.js +898 -0
- package/dist/cli-agent-4XXBLRXV.js +993 -0
- package/dist/cli-agent-SHOCSBKU.js +993 -0
- package/dist/cli-serve-D5G3XNSI.js +34 -0
- package/dist/cli.js +3 -3
- package/dist/dashboard/pages/agent-detail.js +345 -60
- package/dist/index.js +3 -3
- package/dist/runtime-RNR3Y7HR.js +49 -0
- package/dist/server-O45YMZQ3.js +12 -0
- package/dist/setup-NLVGTWZ3.js +20 -0
- package/package.json +1 -1
- package/src/agent-tools/tools/google/drive.ts +72 -2
- package/src/cli-agent.ts +14 -9
- package/src/dashboard/pages/agent-detail.js +345 -60
- package/src/engine/agent-autonomy.ts +148 -25
|
@@ -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-O45YMZQ3.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-D5G3XNSI.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-4XXBLRXV.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-NLVGTWZ3.js").then((m) => m.runSetupWizard()).catch(fatal);
|
|
58
58
|
break;
|
|
59
59
|
}
|
|
60
60
|
function fatal(err) {
|
|
@@ -1529,18 +1529,33 @@ function ActivitySection(props) {
|
|
|
1529
1529
|
var _selectedItem = useState(null);
|
|
1530
1530
|
var selectedItem = _selectedItem[0]; var setSelectedItem = _selectedItem[1];
|
|
1531
1531
|
|
|
1532
|
+
// Filtering
|
|
1533
|
+
var _typeFilter = useState('');
|
|
1534
|
+
var typeFilter = _typeFilter[0]; var setTypeFilter = _typeFilter[1];
|
|
1535
|
+
var _searchFilter = useState('');
|
|
1536
|
+
var searchFilter = _searchFilter[0]; var setSearchFilter = _searchFilter[1];
|
|
1537
|
+
var _dateFrom = useState('');
|
|
1538
|
+
var dateFrom = _dateFrom[0]; var setDateFrom = _dateFrom[1];
|
|
1539
|
+
var _dateTo = useState('');
|
|
1540
|
+
var dateTo = _dateTo[0]; var setDateTo = _dateTo[1];
|
|
1541
|
+
|
|
1542
|
+
// Pagination
|
|
1543
|
+
var PAGE_SIZE = 25;
|
|
1544
|
+
var _page = useState(1);
|
|
1545
|
+
var page = _page[0]; var setPage = _page[1];
|
|
1546
|
+
|
|
1532
1547
|
var loadEvents = function() {
|
|
1533
|
-
engineCall('/activity/events?agentId=' + agentId + '&limit=
|
|
1548
|
+
engineCall('/activity/events?agentId=' + agentId + '&limit=200')
|
|
1534
1549
|
.then(function(d) { setEvents(d.events || []); })
|
|
1535
1550
|
.catch(function() {});
|
|
1536
1551
|
};
|
|
1537
1552
|
var loadToolCalls = function() {
|
|
1538
|
-
engineCall('/activity/tool-calls?agentId=' + agentId + '&limit=
|
|
1553
|
+
engineCall('/activity/tool-calls?agentId=' + agentId + '&limit=200')
|
|
1539
1554
|
.then(function(d) { setToolCalls(d.toolCalls || []); })
|
|
1540
1555
|
.catch(function() {});
|
|
1541
1556
|
};
|
|
1542
1557
|
var loadJournal = function() {
|
|
1543
|
-
engineCall('/journal?agentId=' + agentId + '&orgId=' + getOrgId() + '&limit=
|
|
1558
|
+
engineCall('/journal?agentId=' + agentId + '&orgId=' + getOrgId() + '&limit=200')
|
|
1544
1559
|
.then(function(d) { setJournalEntries(d.entries || []); })
|
|
1545
1560
|
.catch(function() {});
|
|
1546
1561
|
};
|
|
@@ -1548,27 +1563,22 @@ function ActivitySection(props) {
|
|
|
1548
1563
|
var loadAll = function() {
|
|
1549
1564
|
setLoading(true);
|
|
1550
1565
|
Promise.all([
|
|
1551
|
-
engineCall('/activity/events?agentId=' + agentId + '&limit=
|
|
1552
|
-
engineCall('/activity/tool-calls?agentId=' + agentId + '&limit=
|
|
1553
|
-
engineCall('/journal?agentId=' + agentId + '&orgId=' + getOrgId() + '&limit=
|
|
1566
|
+
engineCall('/activity/events?agentId=' + agentId + '&limit=200').then(function(d) { setEvents(d.events || []); }).catch(function() {}),
|
|
1567
|
+
engineCall('/activity/tool-calls?agentId=' + agentId + '&limit=200').then(function(d) { setToolCalls(d.toolCalls || []); }).catch(function() {}),
|
|
1568
|
+
engineCall('/journal?agentId=' + agentId + '&orgId=' + getOrgId() + '&limit=200').then(function(d) { setJournalEntries(d.entries || []); }).catch(function() {}),
|
|
1554
1569
|
]).then(function() { setLoading(false); }).catch(function() { setLoading(false); });
|
|
1555
1570
|
};
|
|
1556
1571
|
|
|
1557
1572
|
useEffect(loadAll, []);
|
|
1558
1573
|
|
|
1574
|
+
// Reset page when filters change
|
|
1575
|
+
useEffect(function() { setPage(1); }, [typeFilter, searchFilter, dateFrom, dateTo, activeTab]);
|
|
1576
|
+
|
|
1559
1577
|
var rollback = function(id) {
|
|
1560
|
-
showConfirm({
|
|
1561
|
-
|
|
1562
|
-
message: 'Are you sure you want to rollback this journal entry? This will attempt to reverse the original action.',
|
|
1563
|
-
warning: true,
|
|
1564
|
-
confirmText: 'Rollback'
|
|
1565
|
-
}).then(function(confirmed) {
|
|
1566
|
-
if (!confirmed) return;
|
|
1578
|
+
showConfirm({ title: 'Rollback Action', message: 'Reverse this journal entry?', warning: true, confirmText: 'Rollback' }).then(function(ok) {
|
|
1579
|
+
if (!ok) return;
|
|
1567
1580
|
engineCall('/journal/' + id + '/rollback', { method: 'POST', body: JSON.stringify({}) })
|
|
1568
|
-
.then(function(r) {
|
|
1569
|
-
if (r.success) { toast('Action rolled back', 'success'); loadJournal(); }
|
|
1570
|
-
else { toast('Rollback failed: ' + (r.error || 'Unknown'), 'error'); }
|
|
1571
|
-
})
|
|
1581
|
+
.then(function(r) { if (r.success) { toast('Rolled back', 'success'); loadJournal(); } else toast('Failed: ' + (r.error || ''), 'error'); })
|
|
1572
1582
|
.catch(function(e) { toast(e.message, 'error'); });
|
|
1573
1583
|
});
|
|
1574
1584
|
};
|
|
@@ -1579,34 +1589,98 @@ function ActivitySection(props) {
|
|
|
1579
1589
|
else if (activeTab === 'journal') loadJournal();
|
|
1580
1590
|
};
|
|
1581
1591
|
|
|
1592
|
+
// Filter helper
|
|
1593
|
+
var filterItems = function(items) {
|
|
1594
|
+
var filtered = items;
|
|
1595
|
+
if (typeFilter) {
|
|
1596
|
+
filtered = filtered.filter(function(item) {
|
|
1597
|
+
var t = (item.type || item.eventType || item.tool || item.toolName || item.actionType || '').toLowerCase();
|
|
1598
|
+
return t.includes(typeFilter.toLowerCase());
|
|
1599
|
+
});
|
|
1600
|
+
}
|
|
1601
|
+
if (searchFilter) {
|
|
1602
|
+
var q = searchFilter.toLowerCase();
|
|
1603
|
+
filtered = filtered.filter(function(item) {
|
|
1604
|
+
var text = JSON.stringify(item).toLowerCase();
|
|
1605
|
+
return text.includes(q);
|
|
1606
|
+
});
|
|
1607
|
+
}
|
|
1608
|
+
if (dateFrom) {
|
|
1609
|
+
var fromTs = new Date(dateFrom).getTime();
|
|
1610
|
+
filtered = filtered.filter(function(item) {
|
|
1611
|
+
var ts = new Date(item.timestamp || item.createdAt).getTime();
|
|
1612
|
+
return ts >= fromTs;
|
|
1613
|
+
});
|
|
1614
|
+
}
|
|
1615
|
+
if (dateTo) {
|
|
1616
|
+
var toTs = new Date(dateTo + 'T23:59:59').getTime();
|
|
1617
|
+
filtered = filtered.filter(function(item) {
|
|
1618
|
+
var ts = new Date(item.timestamp || item.createdAt).getTime();
|
|
1619
|
+
return ts <= toTs;
|
|
1620
|
+
});
|
|
1621
|
+
}
|
|
1622
|
+
return filtered;
|
|
1623
|
+
};
|
|
1624
|
+
|
|
1625
|
+
// Get current data source
|
|
1626
|
+
var currentItems = activeTab === 'events' ? events : activeTab === 'tools' ? toolCalls : journalEntries;
|
|
1627
|
+
var filtered = filterItems(currentItems);
|
|
1628
|
+
var totalPages = Math.max(1, Math.ceil(filtered.length / PAGE_SIZE));
|
|
1629
|
+
var paged = filtered.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE);
|
|
1630
|
+
|
|
1631
|
+
// Extract unique types for filter dropdown
|
|
1632
|
+
var uniqueTypes = [];
|
|
1633
|
+
var typeSet = {};
|
|
1634
|
+
currentItems.forEach(function(item) {
|
|
1635
|
+
var t = item.type || item.eventType || item.tool || item.toolName || item.actionType || '';
|
|
1636
|
+
if (t && !typeSet[t]) { typeSet[t] = true; uniqueTypes.push(t); }
|
|
1637
|
+
});
|
|
1638
|
+
uniqueTypes.sort();
|
|
1639
|
+
|
|
1640
|
+
var filterBarStyle = { display: 'flex', gap: 8, padding: '8px 16px', borderBottom: '1px solid var(--border)', flexWrap: 'wrap', alignItems: 'center' };
|
|
1641
|
+
var filterInputStyle = { padding: '4px 8px', borderRadius: 4, border: '1px solid var(--border)', background: 'var(--bg-secondary)', color: 'var(--text-primary)', fontSize: 12 };
|
|
1642
|
+
|
|
1582
1643
|
return h('div', { className: 'card' },
|
|
1583
1644
|
h('div', { className: 'card-header', style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between' } },
|
|
1584
1645
|
h('h3', { style: { margin: 0, fontSize: 15, fontWeight: 600 } }, 'Activity'),
|
|
1585
|
-
h('
|
|
1646
|
+
h('div', { style: { display: 'flex', gap: 8, alignItems: 'center' } },
|
|
1647
|
+
h('span', { style: { fontSize: 11, color: 'var(--text-muted)' } }, filtered.length + ' items'),
|
|
1648
|
+
h('button', { className: 'btn btn-ghost btn-sm', onClick: refreshCurrent }, I.refresh())
|
|
1649
|
+
)
|
|
1586
1650
|
),
|
|
1587
1651
|
h('div', { style: { borderBottom: '1px solid var(--border)' } },
|
|
1588
1652
|
h('div', { className: 'tabs', style: { padding: '0 16px' } },
|
|
1589
|
-
h('div', { className: 'tab' + (activeTab === 'events' ? ' active' : ''), onClick: function() { setActiveTab('events'); } }, 'Events'),
|
|
1590
|
-
h('div', { className: 'tab' + (activeTab === 'tools' ? ' active' : ''), onClick: function() { setActiveTab('tools'); } }, 'Tool Calls'),
|
|
1591
|
-
h('div', { className: 'tab' + (activeTab === 'journal' ? ' active' : ''), onClick: function() { setActiveTab('journal'); } }, 'Journal')
|
|
1653
|
+
h('div', { className: 'tab' + (activeTab === 'events' ? ' active' : ''), onClick: function() { setActiveTab('events'); } }, 'Events (' + events.length + ')'),
|
|
1654
|
+
h('div', { className: 'tab' + (activeTab === 'tools' ? ' active' : ''), onClick: function() { setActiveTab('tools'); } }, 'Tool Calls (' + toolCalls.length + ')'),
|
|
1655
|
+
h('div', { className: 'tab' + (activeTab === 'journal' ? ' active' : ''), onClick: function() { setActiveTab('journal'); } }, 'Journal (' + journalEntries.length + ')')
|
|
1592
1656
|
)
|
|
1593
1657
|
),
|
|
1658
|
+
|
|
1659
|
+
// Filter bar
|
|
1660
|
+
h('div', { style: filterBarStyle },
|
|
1661
|
+
h('select', { style: Object.assign({}, filterInputStyle, { width: 140 }), value: typeFilter, onChange: function(e) { setTypeFilter(e.target.value); } },
|
|
1662
|
+
h('option', { value: '' }, 'All types'),
|
|
1663
|
+
uniqueTypes.map(function(t) { return h('option', { key: t, value: t }, t); })
|
|
1664
|
+
),
|
|
1665
|
+
h('input', { style: Object.assign({}, filterInputStyle, { width: 180 }), type: 'text', placeholder: 'Search...', value: searchFilter, onChange: function(e) { setSearchFilter(e.target.value); } }),
|
|
1666
|
+
h('input', { style: Object.assign({}, filterInputStyle, { width: 130 }), type: 'date', value: dateFrom, onChange: function(e) { setDateFrom(e.target.value); }, title: 'From date' }),
|
|
1667
|
+
h('span', { style: { fontSize: 11, color: 'var(--text-muted)' } }, 'to'),
|
|
1668
|
+
h('input', { style: Object.assign({}, filterInputStyle, { width: 130 }), type: 'date', value: dateTo, onChange: function(e) { setDateTo(e.target.value); }, title: 'To date' }),
|
|
1669
|
+
(typeFilter || searchFilter || dateFrom || dateTo) && h('button', { className: 'btn btn-ghost btn-sm', style: { fontSize: 11 }, onClick: function() { setTypeFilter(''); setSearchFilter(''); setDateFrom(''); setDateTo(''); } }, 'Clear')
|
|
1670
|
+
),
|
|
1671
|
+
|
|
1594
1672
|
h('div', { className: 'card-body-flush' },
|
|
1595
1673
|
|
|
1596
1674
|
// Events Tab
|
|
1597
1675
|
activeTab === 'events' && (
|
|
1598
|
-
|
|
1599
|
-
? h('div', { style: { padding: 40, textAlign: 'center', color: 'var(--text-muted)' } }, 'No events
|
|
1676
|
+
paged.length === 0
|
|
1677
|
+
? h('div', { style: { padding: 40, textAlign: 'center', color: 'var(--text-muted)' } }, filtered.length === 0 && events.length > 0 ? 'No events match filters' : 'No events recorded')
|
|
1600
1678
|
: h('table', { className: 'data-table' },
|
|
1601
1679
|
h('thead', null,
|
|
1602
|
-
h('tr', null,
|
|
1603
|
-
h('th', null, 'Time'),
|
|
1604
|
-
h('th', null, 'Type'),
|
|
1605
|
-
h('th', null, 'Details')
|
|
1606
|
-
)
|
|
1680
|
+
h('tr', null, h('th', null, 'Time'), h('th', null, 'Type'), h('th', null, 'Details'))
|
|
1607
1681
|
),
|
|
1608
1682
|
h('tbody', null,
|
|
1609
|
-
|
|
1683
|
+
paged.map(function(ev, i) {
|
|
1610
1684
|
var details = typeof ev.data === 'object' ? JSON.stringify(ev.data) : (ev.details || ev.data || '-');
|
|
1611
1685
|
return h('tr', { key: ev.id || i, onClick: function() { setSelectedItem(ev); }, style: { cursor: 'pointer' } },
|
|
1612
1686
|
h('td', { style: { fontSize: 12, color: 'var(--text-muted)', whiteSpace: 'nowrap' } }, new Date(ev.timestamp || ev.createdAt).toLocaleString()),
|
|
@@ -1620,19 +1694,14 @@ function ActivitySection(props) {
|
|
|
1620
1694
|
|
|
1621
1695
|
// Tool Calls Tab
|
|
1622
1696
|
activeTab === 'tools' && (
|
|
1623
|
-
|
|
1624
|
-
? h('div', { style: { padding: 40, textAlign: 'center', color: 'var(--text-muted)' } }, 'No tool calls
|
|
1697
|
+
paged.length === 0
|
|
1698
|
+
? h('div', { style: { padding: 40, textAlign: 'center', color: 'var(--text-muted)' } }, filtered.length === 0 && toolCalls.length > 0 ? 'No tool calls match filters' : 'No tool calls recorded')
|
|
1625
1699
|
: h('table', { className: 'data-table' },
|
|
1626
1700
|
h('thead', null,
|
|
1627
|
-
h('tr', null,
|
|
1628
|
-
h('th', null, 'Time'),
|
|
1629
|
-
h('th', null, 'Tool'),
|
|
1630
|
-
h('th', null, 'Duration'),
|
|
1631
|
-
h('th', null, 'Status')
|
|
1632
|
-
)
|
|
1701
|
+
h('tr', null, h('th', null, 'Time'), h('th', null, 'Tool'), h('th', null, 'Duration'), h('th', null, 'Status'))
|
|
1633
1702
|
),
|
|
1634
1703
|
h('tbody', null,
|
|
1635
|
-
|
|
1704
|
+
paged.map(function(tc, i) {
|
|
1636
1705
|
var statusClass = tc.success === true ? 'badge badge-success' : tc.success === false ? 'badge badge-danger' : 'badge badge-neutral';
|
|
1637
1706
|
var statusLabel = tc.success === true ? 'OK' : tc.success === false ? 'Failed' : (tc.status || 'Pending');
|
|
1638
1707
|
return h('tr', { key: tc.id || i, onClick: function() { setSelectedItem(tc); }, style: { cursor: 'pointer' } },
|
|
@@ -1648,42 +1717,38 @@ function ActivitySection(props) {
|
|
|
1648
1717
|
|
|
1649
1718
|
// Journal Tab
|
|
1650
1719
|
activeTab === 'journal' && (
|
|
1651
|
-
|
|
1652
|
-
? h('div', { style: { padding: 40, textAlign: 'center', color: 'var(--text-muted)' } }, 'No journal entries
|
|
1720
|
+
paged.length === 0
|
|
1721
|
+
? h('div', { style: { padding: 40, textAlign: 'center', color: 'var(--text-muted)' } }, filtered.length === 0 && journalEntries.length > 0 ? 'No journal entries match filters' : 'No journal entries')
|
|
1653
1722
|
: h('table', { className: 'data-table' },
|
|
1654
1723
|
h('thead', null,
|
|
1655
|
-
h('tr', null,
|
|
1656
|
-
h('th', null, 'Time'),
|
|
1657
|
-
h('th', null, 'Tool'),
|
|
1658
|
-
h('th', null, 'Action Type'),
|
|
1659
|
-
h('th', null, 'Reversible'),
|
|
1660
|
-
h('th', null, 'Status'),
|
|
1661
|
-
h('th', null, 'Actions')
|
|
1662
|
-
)
|
|
1724
|
+
h('tr', null, h('th', null, 'Time'), h('th', null, 'Tool'), h('th', null, 'Action Type'), h('th', null, 'Reversible'), h('th', null, 'Status'), h('th', null, 'Actions'))
|
|
1663
1725
|
),
|
|
1664
1726
|
h('tbody', null,
|
|
1665
|
-
|
|
1727
|
+
paged.map(function(e) {
|
|
1666
1728
|
return h('tr', { key: e.id, onClick: function(evt) { if (evt.target.tagName === 'BUTTON' || evt.target.closest('button')) return; setSelectedItem(e); }, style: { cursor: 'pointer' } },
|
|
1667
1729
|
h('td', { style: { fontSize: 12, color: 'var(--text-muted)', whiteSpace: 'nowrap' } }, new Date(e.createdAt).toLocaleString()),
|
|
1668
1730
|
h('td', null, e.toolName || e.toolId || '-'),
|
|
1669
1731
|
h('td', null, h('span', { className: 'badge-tag' }, e.actionType || '-')),
|
|
1670
1732
|
h('td', null, e.reversible ? '\u2705' : '\u274C'),
|
|
1671
|
-
h('td', null,
|
|
1672
|
-
|
|
1673
|
-
? h('span', { className: 'status-badge status-warning' }, 'Rolled Back')
|
|
1674
|
-
: h('span', { className: 'status-badge status-success' }, 'Active')
|
|
1675
|
-
),
|
|
1676
|
-
h('td', null,
|
|
1677
|
-
e.reversible && !e.reversed && h('button', { className: 'btn btn-ghost btn-sm', onClick: function() { rollback(e.id); } }, I.undo(), ' Rollback')
|
|
1678
|
-
)
|
|
1733
|
+
h('td', null, e.reversed ? h('span', { className: 'status-badge status-warning' }, 'Rolled Back') : h('span', { className: 'status-badge status-success' }, 'Active')),
|
|
1734
|
+
h('td', null, e.reversible && !e.reversed && h('button', { className: 'btn btn-ghost btn-sm', onClick: function() { rollback(e.id); } }, I.undo(), ' Rollback'))
|
|
1679
1735
|
);
|
|
1680
1736
|
})
|
|
1681
1737
|
)
|
|
1682
1738
|
)
|
|
1739
|
+
),
|
|
1740
|
+
|
|
1741
|
+
// Pagination
|
|
1742
|
+
totalPages > 1 && h('div', { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', gap: 6, padding: '10px 16px', borderTop: '1px solid var(--border)' } },
|
|
1743
|
+
h('button', { className: 'btn btn-ghost btn-sm', disabled: page <= 1, onClick: function() { setPage(1); }, style: { fontSize: 11 } }, '«'),
|
|
1744
|
+
h('button', { className: 'btn btn-ghost btn-sm', disabled: page <= 1, onClick: function() { setPage(page - 1); }, style: { fontSize: 11 } }, '‹'),
|
|
1745
|
+
h('span', { style: { fontSize: 12, color: 'var(--text-muted)', minWidth: 80, textAlign: 'center' } }, 'Page ' + page + ' / ' + totalPages),
|
|
1746
|
+
h('button', { className: 'btn btn-ghost btn-sm', disabled: page >= totalPages, onClick: function() { setPage(page + 1); }, style: { fontSize: 11 } }, '›'),
|
|
1747
|
+
h('button', { className: 'btn btn-ghost btn-sm', disabled: page >= totalPages, onClick: function() { setPage(totalPages); }, style: { fontSize: 11 } }, '»')
|
|
1683
1748
|
)
|
|
1684
1749
|
),
|
|
1685
1750
|
|
|
1686
|
-
//
|
|
1751
|
+
// Detail Modal
|
|
1687
1752
|
selectedItem && (function() {
|
|
1688
1753
|
var item = selectedItem;
|
|
1689
1754
|
var typeLabel = item.type || item.eventType || item.tool || item.toolName || item.actionType || 'Detail';
|
|
@@ -6410,6 +6475,225 @@ function ToolSecuritySection(props) {
|
|
|
6410
6475
|
// AGENT DETAIL PAGE (Main Orchestrator)
|
|
6411
6476
|
// ════════════════════════════════════════════════════════════
|
|
6412
6477
|
|
|
6478
|
+
// ─── Autonomy Settings Section ──────────────────────────
|
|
6479
|
+
|
|
6480
|
+
function AutonomySection(props) {
|
|
6481
|
+
var agentId = props.agentId;
|
|
6482
|
+
var engineAgent = props.engineAgent;
|
|
6483
|
+
var reload = props.reload;
|
|
6484
|
+
var app = useApp();
|
|
6485
|
+
var toast = app.toast;
|
|
6486
|
+
|
|
6487
|
+
var defaults = {
|
|
6488
|
+
enabled: true,
|
|
6489
|
+
clockEnabled: true,
|
|
6490
|
+
dailyCatchupEnabled: true, dailyCatchupHour: 9, dailyCatchupMinute: 0,
|
|
6491
|
+
weeklyCatchupEnabled: true, weeklyCatchupDay: 1, weeklyCatchupHour: 9, weeklyCatchupMinute: 0,
|
|
6492
|
+
goalCheckEnabled: true, goalCheckHours: [14, 17],
|
|
6493
|
+
knowledgeContribEnabled: true, knowledgeContribDay: 5, knowledgeContribHour: 15,
|
|
6494
|
+
escalationEnabled: true, guardrailEnforcementEnabled: true, driveAccessRequestEnabled: true,
|
|
6495
|
+
};
|
|
6496
|
+
|
|
6497
|
+
var existing = (engineAgent?.config?.autonomy) || {};
|
|
6498
|
+
var _form = useState(Object.assign({}, defaults, existing));
|
|
6499
|
+
var form = _form[0]; var setForm = _form[1];
|
|
6500
|
+
var _saving = useState(false);
|
|
6501
|
+
var saving = _saving[0]; var setSaving = _saving[1];
|
|
6502
|
+
var _dirty = useState(false);
|
|
6503
|
+
var dirty = _dirty[0]; var setDirty = _dirty[1];
|
|
6504
|
+
|
|
6505
|
+
var set = function(key, val) {
|
|
6506
|
+
var u = Object.assign({}, form);
|
|
6507
|
+
u[key] = val;
|
|
6508
|
+
setForm(u);
|
|
6509
|
+
setDirty(true);
|
|
6510
|
+
};
|
|
6511
|
+
|
|
6512
|
+
var save = function() {
|
|
6513
|
+
setSaving(true);
|
|
6514
|
+
var ea = engineAgent || {};
|
|
6515
|
+
var isRunning = ea.state === 'running' || ea.state === 'active' || ea.state === 'degraded';
|
|
6516
|
+
var endpoint = isRunning ? '/agents/' + agentId + '/hot-update' : '/agents/' + agentId + '/config';
|
|
6517
|
+
var method = isRunning ? 'POST' : 'PATCH';
|
|
6518
|
+
engineCall(endpoint, {
|
|
6519
|
+
method: method,
|
|
6520
|
+
body: JSON.stringify({ updates: { autonomy: form }, updatedBy: 'dashboard' })
|
|
6521
|
+
}).then(function() {
|
|
6522
|
+
toast('Autonomy settings saved' + (isRunning ? ' (agent will reload within 10 min)' : ''), 'success');
|
|
6523
|
+
setDirty(false);
|
|
6524
|
+
setSaving(false);
|
|
6525
|
+
if (reload) reload();
|
|
6526
|
+
}).catch(function(err) {
|
|
6527
|
+
toast(err.message, 'error');
|
|
6528
|
+
setSaving(false);
|
|
6529
|
+
});
|
|
6530
|
+
};
|
|
6531
|
+
|
|
6532
|
+
var DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
|
6533
|
+
|
|
6534
|
+
var toggleStyle = function(on) {
|
|
6535
|
+
return {
|
|
6536
|
+
width: 40, height: 22, borderRadius: 11,
|
|
6537
|
+
background: on ? 'var(--success)' : 'var(--border)',
|
|
6538
|
+
cursor: 'pointer', position: 'relative', flexShrink: 0,
|
|
6539
|
+
transition: 'background 0.2s', display: 'inline-block',
|
|
6540
|
+
};
|
|
6541
|
+
};
|
|
6542
|
+
var knobStyle = function(on) {
|
|
6543
|
+
return {
|
|
6544
|
+
width: 18, height: 18, borderRadius: '50%', background: '#fff',
|
|
6545
|
+
position: 'absolute', top: 2, left: on ? 20 : 2,
|
|
6546
|
+
transition: 'left 0.2s', boxShadow: '0 1px 3px rgba(0,0,0,0.2)',
|
|
6547
|
+
};
|
|
6548
|
+
};
|
|
6549
|
+
|
|
6550
|
+
var Toggle = function(p) {
|
|
6551
|
+
return h('div', { style: { display: 'flex', alignItems: 'center', gap: 10 } },
|
|
6552
|
+
h('div', { style: toggleStyle(p.value), onClick: function() { set(p.field, !p.value); } },
|
|
6553
|
+
h('div', { style: knobStyle(p.value) })
|
|
6554
|
+
),
|
|
6555
|
+
h('span', { style: { fontSize: 13, fontWeight: 500 } }, p.label),
|
|
6556
|
+
p.desc && h('span', { style: { fontSize: 11, color: 'var(--text-muted)' } }, p.desc)
|
|
6557
|
+
);
|
|
6558
|
+
};
|
|
6559
|
+
|
|
6560
|
+
var TimeSelect = function(p) {
|
|
6561
|
+
return h('div', { style: { display: 'flex', gap: 8, alignItems: 'center' } },
|
|
6562
|
+
h('select', { className: 'input', style: { width: 80 }, value: p.hour, onChange: function(e) { set(p.hourField, parseInt(e.target.value)); } },
|
|
6563
|
+
Array.from({length: 24}, function(_, i) {
|
|
6564
|
+
var label = i === 0 ? '12 AM' : i < 12 ? i + ' AM' : i === 12 ? '12 PM' : (i - 12) + ' PM';
|
|
6565
|
+
return h('option', { key: i, value: i }, label);
|
|
6566
|
+
})
|
|
6567
|
+
),
|
|
6568
|
+
h('span', null, ':'),
|
|
6569
|
+
h('select', { className: 'input', style: { width: 65 }, value: p.minute, onChange: function(e) { set(p.minuteField, parseInt(e.target.value)); } },
|
|
6570
|
+
[0, 15, 30, 45].map(function(m) { return h('option', { key: m, value: m }, String(m).padStart(2, '0')); })
|
|
6571
|
+
)
|
|
6572
|
+
);
|
|
6573
|
+
};
|
|
6574
|
+
|
|
6575
|
+
var DaySelect = function(p) {
|
|
6576
|
+
return h('select', { className: 'input', style: { width: 130 }, value: p.value, onChange: function(e) { set(p.field, parseInt(e.target.value)); } },
|
|
6577
|
+
DAYS.map(function(d, i) { return h('option', { key: i, value: i }, d); })
|
|
6578
|
+
);
|
|
6579
|
+
};
|
|
6580
|
+
|
|
6581
|
+
var cardStyle = { marginBottom: 12 };
|
|
6582
|
+
var rowStyle = { display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '10px 16px', borderBottom: '1px solid var(--border)' };
|
|
6583
|
+
var configRow = { display: 'flex', gap: 12, alignItems: 'center', padding: '8px 16px 8px 48px', borderBottom: '1px solid var(--border)', fontSize: 13 };
|
|
6584
|
+
|
|
6585
|
+
return h(Fragment, null,
|
|
6586
|
+
// Header
|
|
6587
|
+
h('div', { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 16 } },
|
|
6588
|
+
h('div', null,
|
|
6589
|
+
h('div', { style: { fontSize: 15, fontWeight: 600 } }, 'Agent Autonomy Settings'),
|
|
6590
|
+
h('div', { style: { fontSize: 12, color: 'var(--text-muted)' } }, 'Configure automated behaviors — all times use agent timezone')
|
|
6591
|
+
),
|
|
6592
|
+
h('div', { style: { display: 'flex', gap: 8 } },
|
|
6593
|
+
dirty && h('span', { style: { fontSize: 11, color: 'var(--warning)', alignSelf: 'center' } }, 'Unsaved changes'),
|
|
6594
|
+
h('button', { className: 'btn btn-primary btn-sm', disabled: !dirty || saving, onClick: save }, saving ? 'Saving...' : 'Save')
|
|
6595
|
+
)
|
|
6596
|
+
),
|
|
6597
|
+
|
|
6598
|
+
// Master switch
|
|
6599
|
+
h('div', { className: 'card', style: cardStyle },
|
|
6600
|
+
h('div', { style: rowStyle },
|
|
6601
|
+
h(Toggle, { field: 'enabled', value: form.enabled, label: 'Enable Autonomy System', desc: 'Master switch for all automated agent behaviors' })
|
|
6602
|
+
)
|
|
6603
|
+
),
|
|
6604
|
+
|
|
6605
|
+
// Clock In/Out
|
|
6606
|
+
h('div', { className: 'card', style: Object.assign({}, cardStyle, { opacity: form.enabled ? 1 : 0.5 }) },
|
|
6607
|
+
h('div', { style: rowStyle },
|
|
6608
|
+
h(Toggle, { field: 'clockEnabled', value: form.clockEnabled, label: 'Auto Clock-In/Out', desc: 'Clock in/out based on work schedule' })
|
|
6609
|
+
),
|
|
6610
|
+
form.clockEnabled && h('div', { style: configRow },
|
|
6611
|
+
h('span', { style: { color: 'var(--text-muted)' } }, 'Uses times from the Workforce tab schedule')
|
|
6612
|
+
)
|
|
6613
|
+
),
|
|
6614
|
+
|
|
6615
|
+
// Daily Catchup
|
|
6616
|
+
h('div', { className: 'card', style: Object.assign({}, cardStyle, { opacity: form.enabled ? 1 : 0.5 }) },
|
|
6617
|
+
h('div', { style: rowStyle },
|
|
6618
|
+
h(Toggle, { field: 'dailyCatchupEnabled', value: form.dailyCatchupEnabled, label: 'Daily Manager Catchup', desc: 'Email summary to manager each workday' })
|
|
6619
|
+
),
|
|
6620
|
+
form.dailyCatchupEnabled && h('div', { style: configRow },
|
|
6621
|
+
h('span', { style: { color: 'var(--text-muted)', fontSize: 12 } }, 'Time configured in Manager & Catch-Up tab')
|
|
6622
|
+
)
|
|
6623
|
+
),
|
|
6624
|
+
|
|
6625
|
+
// Weekly Catchup
|
|
6626
|
+
h('div', { className: 'card', style: Object.assign({}, cardStyle, { opacity: form.enabled ? 1 : 0.5 }) },
|
|
6627
|
+
h('div', { style: rowStyle },
|
|
6628
|
+
h(Toggle, { field: 'weeklyCatchupEnabled', value: form.weeklyCatchupEnabled, label: 'Weekly Manager Catchup', desc: 'Broader weekly summary + goals, uses same time as daily' })
|
|
6629
|
+
),
|
|
6630
|
+
form.weeklyCatchupEnabled && h('div', { style: configRow },
|
|
6631
|
+
h('span', null, 'Send on'),
|
|
6632
|
+
h(DaySelect, { value: form.weeklyCatchupDay, field: 'weeklyCatchupDay' }),
|
|
6633
|
+
h('span', { style: { color: 'var(--text-muted)', fontSize: 12 } }, '(same time as daily catchup)')
|
|
6634
|
+
)
|
|
6635
|
+
),
|
|
6636
|
+
|
|
6637
|
+
// Goal Check
|
|
6638
|
+
h('div', { className: 'card', style: Object.assign({}, cardStyle, { opacity: form.enabled ? 1 : 0.5 }) },
|
|
6639
|
+
h('div', { style: rowStyle },
|
|
6640
|
+
h(Toggle, { field: 'goalCheckEnabled', value: form.goalCheckEnabled, label: 'Goal Progress Checks', desc: 'Reviews Google Tasks at set hours (last = end-of-day review)' })
|
|
6641
|
+
),
|
|
6642
|
+
form.goalCheckEnabled && h('div', { style: configRow },
|
|
6643
|
+
h('span', null, 'Check at hours:'),
|
|
6644
|
+
h('input', { className: 'input', style: { width: 150 },
|
|
6645
|
+
value: (form.goalCheckHours || [14, 17]).join(', '),
|
|
6646
|
+
placeholder: '14, 17',
|
|
6647
|
+
onChange: function(e) {
|
|
6648
|
+
var hrs = e.target.value.split(',').map(function(s) { return parseInt(s.trim()); }).filter(function(n) { return !isNaN(n) && n >= 0 && n <= 23; });
|
|
6649
|
+
set('goalCheckHours', hrs.length > 0 ? hrs : [14, 17]);
|
|
6650
|
+
}
|
|
6651
|
+
}),
|
|
6652
|
+
h('span', { style: { fontSize: 11, color: 'var(--text-muted)' } }, '(24h format, comma-separated)')
|
|
6653
|
+
)
|
|
6654
|
+
),
|
|
6655
|
+
|
|
6656
|
+
// Knowledge Contribution
|
|
6657
|
+
h('div', { className: 'card', style: Object.assign({}, cardStyle, { opacity: form.enabled ? 1 : 0.5 }) },
|
|
6658
|
+
h('div', { style: rowStyle },
|
|
6659
|
+
h(Toggle, { field: 'knowledgeContribEnabled', value: form.knowledgeContribEnabled, label: 'Weekly Knowledge Contribution', desc: 'Agent reviews learnings and contributes to role-based knowledge base' })
|
|
6660
|
+
),
|
|
6661
|
+
form.knowledgeContribEnabled && h('div', { style: configRow },
|
|
6662
|
+
h('span', null, 'Contribute on'),
|
|
6663
|
+
h(DaySelect, { value: form.knowledgeContribDay, field: 'knowledgeContribDay' }),
|
|
6664
|
+
h('span', null, 'at'),
|
|
6665
|
+
h('select', { className: 'input', style: { width: 80 }, value: form.knowledgeContribHour, onChange: function(e) { set('knowledgeContribHour', parseInt(e.target.value)); } },
|
|
6666
|
+
Array.from({length: 24}, function(_, i) {
|
|
6667
|
+
var label = i === 0 ? '12 AM' : i < 12 ? i + ' AM' : i === 12 ? '12 PM' : (i - 12) + ' PM';
|
|
6668
|
+
return h('option', { key: i, value: i }, label);
|
|
6669
|
+
})
|
|
6670
|
+
)
|
|
6671
|
+
)
|
|
6672
|
+
),
|
|
6673
|
+
|
|
6674
|
+
// Smart Escalation
|
|
6675
|
+
h('div', { className: 'card', style: Object.assign({}, cardStyle, { opacity: form.enabled ? 1 : 0.5 }) },
|
|
6676
|
+
h('div', { style: rowStyle },
|
|
6677
|
+
h(Toggle, { field: 'escalationEnabled', value: form.escalationEnabled, label: 'Smart Answer Escalation', desc: 'Search memory → Drive → escalate to manager when unsure' })
|
|
6678
|
+
)
|
|
6679
|
+
),
|
|
6680
|
+
|
|
6681
|
+
// Guardrail Enforcement
|
|
6682
|
+
h('div', { className: 'card', style: Object.assign({}, cardStyle, { opacity: form.enabled ? 1 : 0.5 }) },
|
|
6683
|
+
h('div', { style: rowStyle },
|
|
6684
|
+
h(Toggle, { field: 'guardrailEnforcementEnabled', value: form.guardrailEnforcementEnabled, label: 'Runtime Guardrail Enforcement', desc: 'Evaluate guardrail rules on inbound emails and tool calls' })
|
|
6685
|
+
)
|
|
6686
|
+
),
|
|
6687
|
+
|
|
6688
|
+
// Drive Access Requests
|
|
6689
|
+
h('div', { className: 'card', style: Object.assign({}, cardStyle, { opacity: form.enabled ? 1 : 0.5 }) },
|
|
6690
|
+
h('div', { style: rowStyle },
|
|
6691
|
+
h(Toggle, { field: 'driveAccessRequestEnabled', value: form.driveAccessRequestEnabled, label: 'Drive Access Requests', desc: 'When agent cannot access a file, it requests access from manager instead of failing silently' })
|
|
6692
|
+
)
|
|
6693
|
+
)
|
|
6694
|
+
);
|
|
6695
|
+
}
|
|
6696
|
+
|
|
6413
6697
|
function AgentDetailPage(props) {
|
|
6414
6698
|
var agentId = props.agentId;
|
|
6415
6699
|
var onBack = props.onBack;
|
|
@@ -6430,8 +6714,8 @@ function AgentDetailPage(props) {
|
|
|
6430
6714
|
var _agents = useState([]);
|
|
6431
6715
|
var agents = _agents[0]; var setAgents = _agents[1];
|
|
6432
6716
|
|
|
6433
|
-
var TABS = ['overview', 'personal', 'email', 'configuration', 'manager', 'tools', 'skills', 'permissions', 'activity', 'communication', 'workforce', 'memory', 'guardrails', 'budget', 'tool-security', 'deployment'];
|
|
6434
|
-
var TAB_LABELS = { 'tool-security': 'Tool Security', 'manager': 'Manager & Catch-Up', 'email': 'Email', 'tools': 'Tools' };
|
|
6717
|
+
var TABS = ['overview', 'personal', 'email', 'configuration', 'manager', 'tools', 'skills', 'permissions', 'activity', 'communication', 'workforce', 'memory', 'guardrails', 'autonomy', 'budget', 'tool-security', 'deployment'];
|
|
6718
|
+
var TAB_LABELS = { 'tool-security': 'Tool Security', 'manager': 'Manager & Catch-Up', 'email': 'Email', 'tools': 'Tools', 'autonomy': 'Autonomy' };
|
|
6435
6719
|
|
|
6436
6720
|
var load = function() {
|
|
6437
6721
|
setLoading(true);
|
|
@@ -6563,6 +6847,7 @@ function AgentDetailPage(props) {
|
|
|
6563
6847
|
tab === 'workforce' && h(WorkforceSection, { agentId: agentId }),
|
|
6564
6848
|
tab === 'memory' && h(MemorySection, { agentId: agentId }),
|
|
6565
6849
|
tab === 'guardrails' && h(GuardrailsSection, { agentId: agentId, agents: agents }),
|
|
6850
|
+
tab === 'autonomy' && h(AutonomySection, { agentId: agentId, engineAgent: engineAgent, reload: load }),
|
|
6566
6851
|
tab === 'budget' && h(BudgetSection, { agentId: agentId }),
|
|
6567
6852
|
tab === 'tool-security' && h(ToolSecuritySection, { agentId: agentId }),
|
|
6568
6853
|
tab === 'deployment' && h(DeploymentSection, { agentId: agentId, engineAgent: engineAgent, agent: agent, reload: load, onBack: onBack })
|
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-RNHBMPPK.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-OZ7OBEUD.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-2ALM5WEM.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-OZ7OBEUD.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-2ALM5WEM.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
|
+
};
|