@agenticmail/enterprise 0.5.227 → 0.5.228
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/dashboard/assets/icons/emoji-icons.js +7 -7
- package/dist/dashboard/index.html +2 -2
- package/dist/dashboard/pages/agent-detail/memory.js +1 -1
- package/dist/dashboard/pages/agent-detail/shared.js +1 -1
- package/dist/dashboard/pages/agent-detail/whatsapp.js +1 -1
- package/dist/dashboard/pages/guardrails.js +10 -10
- package/dist/dashboard/pages/knowledge-contributions.js +1 -1
- package/dist/dashboard/pages/knowledge-import.js +3 -3
- package/dist/dashboard/pages/login.js +1 -1
- package/dist/dashboard/pages/messages.js +2 -2
- package/dist/dashboard/pages/org-chart.js +4 -4
- package/dist/dashboard/pages/settings.js +3 -3
- package/dist/dashboard/pages/task-pipeline.js +6 -6
- package/dist/dashboard/pages/vault.js +2 -2
- package/package.json +1 -1
- package/src/dashboard/assets/icons/emoji-icons.js +7 -7
- package/src/dashboard/index.html +2 -2
- package/src/dashboard/pages/agent-detail/memory.js +1 -1
- package/src/dashboard/pages/agent-detail/shared.js +1 -1
- package/src/dashboard/pages/agent-detail/whatsapp.js +1 -1
- package/src/dashboard/pages/guardrails.js +10 -10
- package/src/dashboard/pages/knowledge-contributions.js +1 -1
- package/src/dashboard/pages/knowledge-import.js +3 -3
- package/src/dashboard/pages/login.js +1 -1
- package/src/dashboard/pages/messages.js +2 -2
- package/src/dashboard/pages/org-chart.js +4 -4
- package/src/dashboard/pages/settings.js +3 -3
- package/src/dashboard/pages/task-pipeline.js +6 -6
- package/src/dashboard/pages/vault.js +2 -2
|
@@ -91,7 +91,7 @@ export const E = {
|
|
|
91
91
|
return h('svg', svg({ width: s, height: s }),
|
|
92
92
|
h('defs', null,
|
|
93
93
|
h('linearGradient', { id: 'clip-g', x1: '0%', y1: '0%', x2: '0%', y2: '100%' },
|
|
94
|
-
h('stop', { offset: '0%', stopColor: '#
|
|
94
|
+
h('stop', { offset: '0%', stopColor: '#15803d' }),
|
|
95
95
|
h('stop', { offset: '100%', stopColor: '#059669' })
|
|
96
96
|
)
|
|
97
97
|
),
|
|
@@ -202,7 +202,7 @@ export const E = {
|
|
|
202
202
|
checkCircle: function(size) {
|
|
203
203
|
var s = size || 20;
|
|
204
204
|
return h('svg', svg({ width: s, height: s }),
|
|
205
|
-
h('circle', { cx: 12, cy: 12, r: 10, fill: '#
|
|
205
|
+
h('circle', { cx: 12, cy: 12, r: 10, fill: '#15803d', stroke: 'none' }),
|
|
206
206
|
h('path', { d: 'M7.5 12.5l3 3 6-6', stroke: '#fff', strokeWidth: 2.5, fill: 'none', strokeLinecap: 'round', strokeLinejoin: 'round' })
|
|
207
207
|
);
|
|
208
208
|
},
|
|
@@ -608,7 +608,7 @@ export const E = {
|
|
|
608
608
|
return h('svg', svg({ width: s, height: s }),
|
|
609
609
|
h('rect', { x: 3, y: 4, width: 5, height: 17, rx: 1, fill: '#ef4444', stroke: 'none' }),
|
|
610
610
|
h('rect', { x: 9, y: 2, width: 5, height: 19, rx: 1, fill: '#3b82f6', stroke: 'none' }),
|
|
611
|
-
h('rect', { x: 15, y: 5, width: 5, height: 16, rx: 1, fill: '#
|
|
611
|
+
h('rect', { x: 15, y: 5, width: 5, height: 16, rx: 1, fill: '#15803d', stroke: 'none' }),
|
|
612
612
|
h('rect', { x: 4, y: 7, width: 3, height: 1, rx: 0.5, fill: '#fca5a5', stroke: 'none', opacity: 0.6 }),
|
|
613
613
|
h('rect', { x: 10, y: 5, width: 3, height: 1, rx: 0.5, fill: '#93c5fd', stroke: 'none', opacity: 0.6 }),
|
|
614
614
|
h('rect', { x: 16, y: 8, width: 3, height: 1, rx: 0.5, fill: '#86efac', stroke: 'none', opacity: 0.6 })
|
|
@@ -782,8 +782,8 @@ export const E = {
|
|
|
782
782
|
var s = size || 20;
|
|
783
783
|
return h('svg', svg({ width: s, height: s }),
|
|
784
784
|
h('path', { d: 'M1 6v16l7-4 8 4 7-4V2l-7 4-8-4-7 4z', fill: '#86efac', stroke: 'none' }),
|
|
785
|
-
h('path', { d: 'M8 2v16', stroke: '#
|
|
786
|
-
h('path', { d: 'M16 6v16', stroke: '#
|
|
785
|
+
h('path', { d: 'M8 2v16', stroke: '#15803d', strokeWidth: 1.5 }),
|
|
786
|
+
h('path', { d: 'M16 6v16', stroke: '#15803d', strokeWidth: 1.5 }),
|
|
787
787
|
h('circle', { cx: 12, cy: 10, r: 2, fill: '#ef4444', stroke: 'none' })
|
|
788
788
|
);
|
|
789
789
|
},
|
|
@@ -886,8 +886,8 @@ export const E = {
|
|
|
886
886
|
var s = size || 20;
|
|
887
887
|
return h('svg', svg({ width: s, height: s }),
|
|
888
888
|
h('rect', { x: 2, y: 3, width: 20, height: 18, rx: 3, fill: '#1e1e1e' }),
|
|
889
|
-
h('path', { d: 'M6 8l4 4-4 4', stroke: '#
|
|
890
|
-
h('line', { x1: 12, y1: 16, x2: 18, y2: 16, stroke: '#
|
|
889
|
+
h('path', { d: 'M6 8l4 4-4 4', stroke: '#16a34a', strokeWidth: 2, fill: 'none', strokeLinecap: 'round', strokeLinejoin: 'round' }),
|
|
890
|
+
h('line', { x1: 12, y1: 16, x2: 18, y2: 16, stroke: '#16a34a', strokeWidth: 2, strokeLinecap: 'round' })
|
|
891
891
|
);
|
|
892
892
|
},
|
|
893
893
|
};
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
--accent-hover: var(--brand-hover, #4f46e5);
|
|
31
31
|
--accent-soft: var(--brand-soft, rgba(99,102,241,0.12));
|
|
32
32
|
--accent-text: var(--brand-text, #818cf8);
|
|
33
|
-
--success: #
|
|
34
|
-
--success-soft: rgba(
|
|
33
|
+
--success: #15803d;
|
|
34
|
+
--success-soft: rgba(21,128,61,0.15);
|
|
35
35
|
--warning: #f59e0b;
|
|
36
36
|
--warning-soft: rgba(245,158,11,0.12);
|
|
37
37
|
--danger: #ef4444;
|
|
@@ -154,7 +154,7 @@ export function MemorySection(props) {
|
|
|
154
154
|
var sourcesCount = memoryStats && memoryStats.bySource ? Object.keys(memoryStats.bySource).length : 0;
|
|
155
155
|
|
|
156
156
|
var catColor = function(c) {
|
|
157
|
-
var m = { preference: '#8b5cf6', interaction_pattern: '#ec4899', context: '#3b82f6', skill: '#
|
|
157
|
+
var m = { preference: '#8b5cf6', interaction_pattern: '#ec4899', context: '#3b82f6', skill: '#15803d', processed_email: '#6366f1', org_knowledge: '#f59e0b', procedure: '#14b8a6', relationship: '#f43f5e', reflection: '#a855f7', domain_expertise: '#0ea5e9', error_pattern: '#ef4444' };
|
|
158
158
|
return m[c] || '#64748b';
|
|
159
159
|
};
|
|
160
160
|
var impColor = function(i) {
|
|
@@ -73,7 +73,7 @@ export function formatTime(iso) { return iso ? new Date(iso).toLocaleString() :
|
|
|
73
73
|
export var MEMORY_CATEGORIES = [
|
|
74
74
|
{ value: 'org_knowledge', label: 'Org Knowledge', color: '#6366f1' },
|
|
75
75
|
{ value: 'interaction_pattern', label: 'Interaction Pattern', color: '#0ea5e9' },
|
|
76
|
-
{ value: 'preference', label: 'Preference', color: '#
|
|
76
|
+
{ value: 'preference', label: 'Preference', color: '#15803d' },
|
|
77
77
|
{ value: 'correction', label: 'Correction', color: '#f59e0b' },
|
|
78
78
|
{ value: 'skill', label: 'Skill', color: '#8b5cf6' },
|
|
79
79
|
{ value: 'context', label: 'Context', color: '#64748b' },
|
|
@@ -563,7 +563,7 @@ function ConversationsCard(props) {
|
|
|
563
563
|
!loading && convos.length > 0 && h('div', null,
|
|
564
564
|
convos.map(function(c) {
|
|
565
565
|
var initial = (c.name || c.contactId || '?').charAt(0).toUpperCase();
|
|
566
|
-
var colors = ['#6366f1', '#ec4899', '#f59e0b', '#
|
|
566
|
+
var colors = ['#6366f1', '#ec4899', '#f59e0b', '#15803d', '#8b5cf6', '#ef4444', '#06b6d4', '#84cc16'];
|
|
567
567
|
var colorIdx = (initial.charCodeAt(0) || 0) % colors.length;
|
|
568
568
|
return h('div', { key: c.contactId,
|
|
569
569
|
style: { display: 'flex', alignItems: 'center', gap: '12px', padding: '12px', borderRadius: '10px', cursor: 'pointer', transition: 'background 0.15s', marginBottom: '2px' },
|
|
@@ -23,7 +23,7 @@ var ENFORCEMENT_TYPES = [
|
|
|
23
23
|
var MEMORY_CATEGORIES = [
|
|
24
24
|
{ value: 'org_knowledge', label: 'Org Knowledge', color: '#6366f1' },
|
|
25
25
|
{ value: 'interaction_pattern', label: 'Interaction Pattern', color: '#0ea5e9' },
|
|
26
|
-
{ value: 'preference', label: 'Preference', color: '#
|
|
26
|
+
{ value: 'preference', label: 'Preference', color: '#15803d' },
|
|
27
27
|
{ value: 'correction', label: 'Correction', color: '#f59e0b' },
|
|
28
28
|
{ value: 'skill', label: 'Skill', color: '#8b5cf6' },
|
|
29
29
|
{ value: 'context', label: 'Context', color: '#64748b' },
|
|
@@ -200,7 +200,7 @@ function OverviewTab(props) {
|
|
|
200
200
|
.catch(function(e) { toast(e.message, 'error'); });
|
|
201
201
|
};
|
|
202
202
|
|
|
203
|
-
var typeColor = function(t) { return t === 'kill' ? '#ef4444' : t === 'pause' ? '#f59e0b' : t === 'resume' ? '#
|
|
203
|
+
var typeColor = function(t) { return t === 'kill' ? '#ef4444' : t === 'pause' ? '#f59e0b' : t === 'resume' ? '#15803d' : '#0ea5e9'; };
|
|
204
204
|
|
|
205
205
|
return h(Fragment, null,
|
|
206
206
|
// Quick action bar
|
|
@@ -218,7 +218,7 @@ function OverviewTab(props) {
|
|
|
218
218
|
// Stat cards
|
|
219
219
|
h('div', { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(150px, 1fr))', gap: 12, marginBottom: 16 } },
|
|
220
220
|
h(StatCard, { label: 'Org Policies', value: policyCount, sub: mandatoryCount + ' mandatory', color: '#6366f1' }),
|
|
221
|
-
h(StatCard, { label: 'Agents Onboarded', value: onboarded + '/' + totalAgents, color: '#
|
|
221
|
+
h(StatCard, { label: 'Agents Onboarded', value: onboarded + '/' + totalAgents, color: '#15803d' }),
|
|
222
222
|
h(StatCard, { label: 'In Onboarding', value: inProgress, color: '#f59e0b' }),
|
|
223
223
|
h(StatCard, { label: 'Recent Interventions', value: recentInterventions, color: '#ef4444' })
|
|
224
224
|
),
|
|
@@ -234,7 +234,7 @@ function OverviewTab(props) {
|
|
|
234
234
|
))),
|
|
235
235
|
h('div', { className: 'card-body' },
|
|
236
236
|
onboardingData.slice(0, 8).map(function(ag) {
|
|
237
|
-
var statusColor = ag.overallStatus === 'completed' ? '#
|
|
237
|
+
var statusColor = ag.overallStatus === 'completed' ? '#15803d' : ag.overallStatus === 'in_progress' ? '#f59e0b' : ag.overallStatus === 'needs_renewal' ? '#ef4444' : '#64748b';
|
|
238
238
|
return h('div', { key: ag.agentId, style: { display: 'flex', alignItems: 'center', gap: 12, padding: '8px 0', borderBottom: '1px solid var(--border)' } },
|
|
239
239
|
h('div', { style: { minWidth: 120, fontWeight: 500, fontSize: 13 } }, renderAgentBadge(ag.agentId, agentData)),
|
|
240
240
|
h('div', { style: { flex: 1 } }, h(ProgressBar, { value: ag.acknowledgedPolicies || 0, total: ag.totalPolicies || 1, color: statusColor })),
|
|
@@ -475,7 +475,7 @@ function OnboardingTab(props) {
|
|
|
475
475
|
var needsRenewal = progress.filter(function(p) { return p.overallStatus === 'needs_renewal'; }).length;
|
|
476
476
|
var notStarted = progress.filter(function(p) { return p.overallStatus === 'not_started'; }).length;
|
|
477
477
|
|
|
478
|
-
var statusColor = function(s) { return s === 'completed' ? '#
|
|
478
|
+
var statusColor = function(s) { return s === 'completed' ? '#15803d' : s === 'in_progress' ? '#f59e0b' : s === 'needs_renewal' ? '#ef4444' : '#64748b'; };
|
|
479
479
|
|
|
480
480
|
return h(Fragment, null,
|
|
481
481
|
// Actions bar
|
|
@@ -490,7 +490,7 @@ function OnboardingTab(props) {
|
|
|
490
490
|
),
|
|
491
491
|
// Stats
|
|
492
492
|
h('div', { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(130px, 1fr))', gap: 12, marginBottom: 16 } },
|
|
493
|
-
h(StatCard, { label: 'Completed', value: completed, color: '#
|
|
493
|
+
h(StatCard, { label: 'Completed', value: completed, color: '#15803d' }),
|
|
494
494
|
h(StatCard, { label: 'In Progress', value: inProg, color: '#f59e0b' }),
|
|
495
495
|
h(StatCard, { label: 'Needs Renewal', value: needsRenewal, color: '#ef4444' }),
|
|
496
496
|
h(StatCard, { label: 'Not Started', value: notStarted, color: '#64748b' })
|
|
@@ -515,7 +515,7 @@ function OnboardingTab(props) {
|
|
|
515
515
|
h('table', { className: 'data-table', style: { fontSize: 12 } },
|
|
516
516
|
h('thead', null, h('tr', null, h('th', null, 'Policy'), h('th', null, 'Status'), h('th', null, 'Acknowledged'), h('th', null, 'Memory ID'))),
|
|
517
517
|
h('tbody', null, ag.records.map(function(r) {
|
|
518
|
-
var rColor = r.status === 'acknowledged' ? '#
|
|
518
|
+
var rColor = r.status === 'acknowledged' ? '#15803d' : r.status === 'failed' ? '#ef4444' : '#f59e0b';
|
|
519
519
|
return h('tr', { key: r.id },
|
|
520
520
|
h('td', null, r.policyId ? r.policyId.substring(0, 16) : '-'),
|
|
521
521
|
h('td', null, h(Badge, { color: rColor }, r.status)),
|
|
@@ -645,7 +645,7 @@ function MemoryTab(props) {
|
|
|
645
645
|
),
|
|
646
646
|
// Confidence bar
|
|
647
647
|
h('div', { style: { height: 3, background: 'var(--border)', borderRadius: 2, marginBottom: isExpanded ? 8 : 0 } },
|
|
648
|
-
h('div', { style: { width: ((m.confidence || 0) * 100) + '%', height: '100%', background: m.confidence > 0.7 ? '#
|
|
648
|
+
h('div', { style: { width: ((m.confidence || 0) * 100) + '%', height: '100%', background: m.confidence > 0.7 ? '#15803d' : m.confidence > 0.3 ? '#f59e0b' : '#ef4444', borderRadius: 2 } })
|
|
649
649
|
),
|
|
650
650
|
isExpanded && h(Fragment, null,
|
|
651
651
|
h('div', { style: { fontSize: 13, padding: '8px 12px', background: 'var(--bg)', borderRadius: 6, whiteSpace: 'pre-wrap', maxHeight: 200, overflow: 'auto', border: '1px solid var(--border)', marginBottom: 8 } }, m.content),
|
|
@@ -827,7 +827,7 @@ function RulesTab(props) {
|
|
|
827
827
|
|
|
828
828
|
var sevColor = function(s) { var f = SEVERITIES.find(function(x) { return x.value === s; }); return f ? f.color : '#64748b'; };
|
|
829
829
|
var actColor = function(a) { var f = RULE_ACTIONS.find(function(x) { return x.value === a; }); return f ? f.color : '#64748b'; };
|
|
830
|
-
var typeColor = function(t) { return t === 'kill' ? '#ef4444' : t === 'pause' ? '#f59e0b' : t === 'resume' ? '#
|
|
830
|
+
var typeColor = function(t) { return t === 'kill' ? '#ef4444' : t === 'pause' ? '#f59e0b' : t === 'resume' ? '#15803d' : '#0ea5e9'; };
|
|
831
831
|
|
|
832
832
|
return h(Fragment, null,
|
|
833
833
|
// Sub-tabs
|
|
@@ -860,7 +860,7 @@ function RulesTab(props) {
|
|
|
860
860
|
h('td', null, h(Badge, { color: sevColor(r.severity) }, r.severity)),
|
|
861
861
|
h('td', null, h(Badge, { color: actColor(r.action) }, r.action)),
|
|
862
862
|
h('td', { style: { textAlign: 'center' } }, r.triggerCount || 0),
|
|
863
|
-
h('td', null, r.enabled !== false ? h('span', { style: { color: '#
|
|
863
|
+
h('td', null, r.enabled !== false ? h('span', { style: { color: '#15803d' } }, 'Yes') : h('span', { style: { color: '#ef4444' } }, 'No')),
|
|
864
864
|
h('td', { style: { whiteSpace: 'nowrap' } },
|
|
865
865
|
h('button', { className: 'btn btn-ghost btn-sm', onClick: function() { openEditRule(r); } }, I.settings()),
|
|
866
866
|
h('button', { className: 'btn btn-ghost btn-sm', onClick: function() { deleteRule(r.id); } }, I.trash())
|
|
@@ -618,7 +618,7 @@ export function KnowledgeContributionsPage() {
|
|
|
618
618
|
useEffect(function() { if (tab === 'stats') loadTimeline(); }, [tab, loadTimeline]);
|
|
619
619
|
|
|
620
620
|
// SVG chart helpers — clean background, dark mode, hover tooltips
|
|
621
|
-
var CHART_COLORS = ['#6366f1', '#
|
|
621
|
+
var CHART_COLORS = ['#6366f1', '#15803d', '#f59e0b', '#ef4444', '#8b5cf6', '#06b6d4', '#ec4899', '#14b8a6'];
|
|
622
622
|
var [tooltip, setTooltip] = useState(null); // { x, y, lines: [] }
|
|
623
623
|
|
|
624
624
|
// Shared tooltip overlay (rendered once, positioned absolutely)
|
|
@@ -130,7 +130,7 @@ const PLATFORMS = [
|
|
|
130
130
|
sourceType: 'url',
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
|
-
id: 'upload', label: 'File Upload', color: '#
|
|
133
|
+
id: 'upload', label: 'File Upload', color: '#15803d',
|
|
134
134
|
desc: 'Upload files directly',
|
|
135
135
|
icon: () => h('svg', { viewBox: '0 0 24 24', width: 28, height: 28, fill: 'none', stroke: 'currentColor', strokeWidth: 1.5 },
|
|
136
136
|
h('path', { d: 'M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 3v12' })
|
|
@@ -257,7 +257,7 @@ export function KnowledgeImportWizard({ kbId, kbName, onClose, onDone }) {
|
|
|
257
257
|
h('div', { style: { position: 'relative', width: 100, height: 100, margin: '0 auto 20px' } },
|
|
258
258
|
h('svg', { viewBox: '0 0 100 100', width: 100, height: 100 },
|
|
259
259
|
h('circle', { cx: 50, cy: 50, r: 42, fill: 'none', stroke: 'var(--border)', strokeWidth: 6 }),
|
|
260
|
-
h('circle', { cx: 50, cy: 50, r: 42, fill: 'none', stroke: done ? (success ? 'var(--success, #
|
|
260
|
+
h('circle', { cx: 50, cy: 50, r: 42, fill: 'none', stroke: done ? (success ? 'var(--success, #15803d)' : 'var(--danger, #ef4444)') : 'var(--accent, #6366f1)', strokeWidth: 6, strokeLinecap: 'round', strokeDasharray: 2 * Math.PI * 42, strokeDashoffset: 2 * Math.PI * 42 * (1 - pct / 100), transform: 'rotate(-90 50 50)', style: { transition: 'stroke-dashoffset 0.5s' } })
|
|
261
261
|
),
|
|
262
262
|
h('div', { style: { position: 'absolute', inset: 0, display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center' } },
|
|
263
263
|
h('div', { style: { fontSize: 24, fontWeight: 700 } }, pct + '%'),
|
|
@@ -271,7 +271,7 @@ export function KnowledgeImportWizard({ kbId, kbName, onClose, onDone }) {
|
|
|
271
271
|
// Stats row
|
|
272
272
|
h('div', { style: { display: 'flex', justifyContent: 'center', gap: 20, marginBottom: 16 } },
|
|
273
273
|
stat('Discovered', prog.totalItems || 0),
|
|
274
|
-
stat('Imported', prog.importedItems || 0, 'var(--success, #
|
|
274
|
+
stat('Imported', prog.importedItems || 0, 'var(--success, #15803d)'),
|
|
275
275
|
prog.skippedItems > 0 && stat('Skipped', prog.skippedItems, 'var(--warning, #f59e0b)'),
|
|
276
276
|
prog.failedItems > 0 && stat('Failed', prog.failedItems, 'var(--danger, #ef4444)'),
|
|
277
277
|
),
|
|
@@ -425,7 +425,7 @@ export function OnboardingWizard({ onComplete }) {
|
|
|
425
425
|
onClick: doTestDb,
|
|
426
426
|
style: { fontSize: 13 }
|
|
427
427
|
}, dbTesting ? 'Testing...' : 'Test Connection'),
|
|
428
|
-
dbTestResult && dbTestResult.ok && h('span', { style: { color: 'var(--success, #
|
|
428
|
+
dbTestResult && dbTestResult.ok && h('span', { style: { color: 'var(--success, #15803d)', fontSize: 13 } }, 'Connection successful'),
|
|
429
429
|
dbTestResult && !dbTestResult.ok && h('span', { style: { color: 'var(--danger)', fontSize: 13 } }, dbTestResult.error)
|
|
430
430
|
),
|
|
431
431
|
errorBox,
|
|
@@ -46,7 +46,7 @@ export function MessagesPage() {
|
|
|
46
46
|
const dirBadge = (dir) => {
|
|
47
47
|
if (dir === 'internal') return h('span', { className: 'status-badge', style: { background: 'rgba(59,130,246,0.15)', color: '#3b82f6' } }, 'Internal');
|
|
48
48
|
if (dir === 'external_outbound') return h('span', { className: 'status-badge', style: { background: 'rgba(249,115,22,0.15)', color: '#f97316' } }, 'Ext Out');
|
|
49
|
-
if (dir === 'external_inbound') return h('span', { className: 'status-badge', style: { background: 'rgba(34,197,94,0.15)', color: '#
|
|
49
|
+
if (dir === 'external_inbound') return h('span', { className: 'status-badge', style: { background: 'rgba(34,197,94,0.15)', color: '#15803d' } }, 'Ext In');
|
|
50
50
|
return h('span', { className: 'status-badge' }, dir || 'unknown');
|
|
51
51
|
};
|
|
52
52
|
|
|
@@ -184,7 +184,7 @@ export function MessagesPage() {
|
|
|
184
184
|
const opacity = dimmed ? 0.25 : 1;
|
|
185
185
|
return h('g', { key: 'n' + i, style: { cursor: 'pointer', opacity: opacity }, onClick: () => setSelectedNode(n.id === selectedNode ? null : n.id) },
|
|
186
186
|
isAgent
|
|
187
|
-
? h('circle', { cx: n.x, cy: n.y, r: isSelected ? 18 : 14, fill: n.state === 'running' ? '#
|
|
187
|
+
? h('circle', { cx: n.x, cy: n.y, r: isSelected ? 18 : 14, fill: n.state === 'running' ? '#15803d' : '#9ca3af', stroke: isSelected ? '#fff' : 'none', strokeWidth: isSelected ? 3 : 0 })
|
|
188
188
|
: h('rect', { x: n.x - (isSelected ? 12 : 9), y: n.y - (isSelected ? 12 : 9), width: isSelected ? 24 : 18, height: isSelected ? 24 : 18, rx: 3, fill: '#f97316', stroke: isSelected ? '#fff' : 'none', strokeWidth: isSelected ? 3 : 0 }),
|
|
189
189
|
h('text', { x: n.x, y: n.y + (isAgent ? 28 : 26), textAnchor: 'middle', fontSize: 11, fill: 'var(--text-secondary)' }, n.name.length > 16 ? n.name.substring(0, 14) + '..' : n.name)
|
|
190
190
|
);
|
|
@@ -22,7 +22,7 @@ var H_GAP = 40;
|
|
|
22
22
|
var V_GAP = 80;
|
|
23
23
|
var PAD = 60;
|
|
24
24
|
|
|
25
|
-
var STATE_COLORS = { running: '#
|
|
25
|
+
var STATE_COLORS = { running: '#15803d', stopped: '#6b7394', error: '#ef4444', paused: '#f59e0b', deploying: '#06b6d4' };
|
|
26
26
|
var ACCENT = '#6366f1';
|
|
27
27
|
|
|
28
28
|
// ─── Tree Layout ─────────────────────────────────────────
|
|
@@ -117,7 +117,7 @@ function OrgSummary(props) {
|
|
|
117
117
|
}
|
|
118
118
|
return h('div', { style: { display: 'flex', alignItems: 'center', gap: 6, padding: '6px 16px', borderBottom: '1px solid var(--oc-border)', background: 'var(--oc-metrics)', flexShrink: 0, overflowX: 'auto', fontSize: 11 } },
|
|
119
119
|
chip('Agents', nodes.length - external, 'var(--oc-text)'),
|
|
120
|
-
chip('Running', running, '#
|
|
120
|
+
chip('Running', running, '#15803d'),
|
|
121
121
|
stopped > 0 && chip('Stopped', stopped, '#6b7394'),
|
|
122
122
|
errored > 0 && chip('Error', errored, '#ef4444'),
|
|
123
123
|
paused > 0 && chip('Paused', paused, '#f59e0b'),
|
|
@@ -229,7 +229,7 @@ export function OrgChartPage() {
|
|
|
229
229
|
),
|
|
230
230
|
h('div', { style: { color: 'var(--oc-dim)', fontSize: 12 } }, positioned.length + ' agents'),
|
|
231
231
|
h('div', { style: { flex: 1 } }),
|
|
232
|
-
legendDot('#
|
|
232
|
+
legendDot('#15803d', 'Running'), legendDot('#6b7394', 'Stopped'), legendDot('#ef4444', 'Error'), legendDot('#f59e0b', 'Paused'), legendDot('#8b5cf6', 'External'),
|
|
233
233
|
h('div', { style: { width: 1, height: 14, background: 'var(--oc-faint)', margin: '0 4px' } }),
|
|
234
234
|
h('button', { onClick: function() { setZoom(function(z) { return Math.min(3, z + 0.2); }); }, style: toolbarBtnStyle }, '+'),
|
|
235
235
|
h('div', { style: { color: 'var(--oc-dim)', fontSize: 11, minWidth: 36, textAlign: 'center' } }, Math.round(zoom * 100) + '%'),
|
|
@@ -325,7 +325,7 @@ export function OrgChartPage() {
|
|
|
325
325
|
),
|
|
326
326
|
h('div', { style: { display: 'flex', flexDirection: 'column', gap: 4 } },
|
|
327
327
|
tooltipRow('State', hoveredNode.state || 'unknown', STATE_COLORS[hoveredNode.state]),
|
|
328
|
-
!hoveredNode.isExternal && tooltipRow('Clocked In', hoveredNode.clockedIn ? 'Yes' : 'No', hoveredNode.clockedIn ? '#
|
|
328
|
+
!hoveredNode.isExternal && tooltipRow('Clocked In', hoveredNode.clockedIn ? 'Yes' : 'No', hoveredNode.clockedIn ? '#15803d' : '#6b7394'),
|
|
329
329
|
tooltipRow('Type', hoveredNode.isExternal ? 'External (Human)' : 'Internal (AI)'),
|
|
330
330
|
hoveredNode.managerName && tooltipRow('Reports To', hoveredNode.managerName),
|
|
331
331
|
hoveredNode.subordinateCount > 0 && tooltipRow('Direct Reports', String(hoveredNode.subordinateCount), ACCENT),
|
|
@@ -618,7 +618,7 @@ export function SettingsPage() {
|
|
|
618
618
|
h('div', { style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 16 } },
|
|
619
619
|
settings.smtpUser && h('div', { style: { padding: 12, background: 'var(--bg-success, rgba(34,197,94,0.08))', borderRadius: 'var(--radius)', border: '1px solid var(--border)' } },
|
|
620
620
|
h('div', { style: { display: 'flex', alignItems: 'center', gap: 8, marginBottom: 8 } },
|
|
621
|
-
h('span', { style: { color: '#
|
|
621
|
+
h('span', { style: { color: '#15803d', fontSize: 18 } }, '\u2713'),
|
|
622
622
|
h('strong', null, 'Relay Configured')
|
|
623
623
|
),
|
|
624
624
|
h('div', { style: { fontSize: 13, color: 'var(--text-secondary)' } },
|
|
@@ -629,7 +629,7 @@ export function SettingsPage() {
|
|
|
629
629
|
),
|
|
630
630
|
settings.cfApiToken && h('div', { style: { padding: 12, background: 'var(--bg-success, rgba(34,197,94,0.08))', borderRadius: 'var(--radius)', border: '1px solid var(--border)' } },
|
|
631
631
|
h('div', { style: { display: 'flex', alignItems: 'center', gap: 8, marginBottom: 8 } },
|
|
632
|
-
h('span', { style: { color: '#
|
|
632
|
+
h('span', { style: { color: '#15803d', fontSize: 18 } }, '\u2713'),
|
|
633
633
|
h('strong', null, 'Custom Domain Configured')
|
|
634
634
|
),
|
|
635
635
|
h('div', { style: { fontSize: 13, color: 'var(--text-secondary)' } },
|
|
@@ -2070,7 +2070,7 @@ function LLMProvidersTab(props) {
|
|
|
2070
2070
|
return h('div', { key: p.id, style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '12px 0', borderBottom: '1px solid var(--border)' } },
|
|
2071
2071
|
h('div', null,
|
|
2072
2072
|
h('span', { style: { fontWeight: 600, fontSize: 14 } }, p.name),
|
|
2073
|
-
h('span', { style: { marginLeft: 8, color: 'var(--success, #
|
|
2073
|
+
h('span', { style: { marginLeft: 8, color: 'var(--success, #15803d)', fontSize: 12 } }, '\u2713 Connected'),
|
|
2074
2074
|
h('div', { style: { fontSize: 12, color: 'var(--text-muted)', marginTop: 2 } }, meta.desc || '')
|
|
2075
2075
|
),
|
|
2076
2076
|
h('button', {
|
|
@@ -11,9 +11,9 @@ var H_GAP = 32; // horizontal gap (left→right flow)
|
|
|
11
11
|
var V_GAP = 12; // vertical gap between lanes
|
|
12
12
|
var PAD = 16;
|
|
13
13
|
|
|
14
|
-
var STATUS_COLORS = { created: '#6366f1', assigned: '#f59e0b', in_progress: '#06b6d4', completed: '#
|
|
14
|
+
var STATUS_COLORS = { created: '#6366f1', assigned: '#f59e0b', in_progress: '#06b6d4', completed: '#15803d', failed: '#ef4444', cancelled: '#6b7394' };
|
|
15
15
|
var PRIORITY_COLORS = { urgent: '#ef4444', high: '#f59e0b', normal: '#6366f1', low: '#6b7394' };
|
|
16
|
-
var DELEGATION_COLORS = { delegation: '#6366f1', review: '#f59e0b', revision: '#f97316', escalation: '#ef4444', return: '#
|
|
16
|
+
var DELEGATION_COLORS = { delegation: '#6366f1', review: '#f59e0b', revision: '#f97316', escalation: '#ef4444', return: '#15803d' };
|
|
17
17
|
var SOURCE_META = { telegram: { icon: '\u2708\uFE0F', label: 'Telegram', color: '#0088cc' }, whatsapp: { icon: '\uD83D\uDCAC', label: 'WhatsApp', color: '#25d366' }, email: { icon: '\u2709\uFE0F', label: 'Email', color: '#ea4335' }, google_chat: { icon: '\uD83D\uDDE8\uFE0F', label: 'Google Chat', color: '#1a73e8' }, internal: { icon: '\u2699\uFE0F', label: 'Internal', color: '#6b7394' }, api: { icon: '\uD83D\uDD17', label: 'API', color: '#8b5cf6' } };
|
|
18
18
|
function sourceBadge(src) { var m = SOURCE_META[src] || { icon: '\uD83D\uDCE8', label: src || 'Unknown', color: '#6b7394' }; return h('span', { style: { display: 'inline-flex', alignItems: 'center', gap: 3, fontSize: 9, padding: '1px 5px', borderRadius: 4, background: m.color + '18', color: m.color, fontWeight: 600, whiteSpace: 'nowrap', flexShrink: 0 } }, m.icon + ' ' + m.label); }
|
|
19
19
|
// Theme-aware: use CSS variables where possible, detect dark/light
|
|
@@ -329,7 +329,7 @@ function MetricsBar(props) {
|
|
|
329
329
|
|
|
330
330
|
return h('div', { style: { display: 'flex', alignItems: 'center', gap: 6, padding: '6px 16px', borderBottom: '1px solid var(--tp-border)', background: 'var(--tp-metrics)', flexShrink: 0, overflowX: 'auto', fontSize: 11 } },
|
|
331
331
|
h('span', { style: { fontSize: 9, color: 'var(--tp-text-faint)', fontWeight: 600, letterSpacing: '0.06em', marginRight: 2 } }, 'TODAY'),
|
|
332
|
-
chip('Done', s.todayCompleted || 0, '#
|
|
332
|
+
chip('Done', s.todayCompleted || 0, '#15803d'),
|
|
333
333
|
chip('Active', s.inProgress || 0, '#06b6d4'),
|
|
334
334
|
chip('New', s.todayCreated || 0, '#f59e0b'),
|
|
335
335
|
s.todayFailed > 0 && chip('Failed', s.todayFailed, '#ef4444'),
|
|
@@ -338,7 +338,7 @@ function MetricsBar(props) {
|
|
|
338
338
|
hasActivity && chip('Total', s.total, 'rgba(255,255,255,0.6)'),
|
|
339
339
|
s.avgDurationMs > 0 && chip('Avg', formatDuration(s.avgDurationMs), '#fff'),
|
|
340
340
|
s.totalTokens > 0 && chip('Tokens', s.totalTokens > 999999 ? (s.totalTokens / 1000000).toFixed(1) + 'M' : s.totalTokens > 999 ? (s.totalTokens / 1000).toFixed(1) + 'K' : s.totalTokens, '#a855f7'),
|
|
341
|
-
s.totalCost > 0 && chip('Cost', '$' + s.totalCost.toFixed(2), '#
|
|
341
|
+
s.totalCost > 0 && chip('Cost', '$' + s.totalCost.toFixed(2), '#15803d'),
|
|
342
342
|
s.topAgents && s.topAgents.length > 0 && h(Fragment, null,
|
|
343
343
|
h('div', { style: { width: 1, height: 14, background: 'var(--tp-border)' } }),
|
|
344
344
|
s.topAgents.slice(0, 3).map(function(a) {
|
|
@@ -582,7 +582,7 @@ export function TaskPipelinePage() {
|
|
|
582
582
|
)
|
|
583
583
|
),
|
|
584
584
|
h('div', { style: { display: 'flex', alignItems: 'center', gap: 4 } },
|
|
585
|
-
h('div', { style: { width: 8, height: 8, borderRadius: '50%', background: '#
|
|
585
|
+
h('div', { style: { width: 8, height: 8, borderRadius: '50%', background: '#15803d', animation: 'flowPulse 2s infinite' } }),
|
|
586
586
|
h('span', { style: { color: 'var(--tp-text-dim)', fontSize: 11 } }, 'Live')
|
|
587
587
|
),
|
|
588
588
|
h('div', { style: { color: 'var(--tp-text-dim)', fontSize: 11 } },
|
|
@@ -835,7 +835,7 @@ export function TaskPipelinePage() {
|
|
|
835
835
|
steps.map(function(step, i) {
|
|
836
836
|
var x = i * (STEP_W + STEP_GAP);
|
|
837
837
|
var sc = step.type === 'terminal'
|
|
838
|
-
? (STATUS_COLORS[step.status] || '#
|
|
838
|
+
? (STATUS_COLORS[step.status] || '#15803d')
|
|
839
839
|
: step.type === 'person' || step.isHuman
|
|
840
840
|
? '#f59e0b'
|
|
841
841
|
: step.status ? (STATUS_COLORS[step.status] || '#6366f1') : '#6366f1';
|
|
@@ -81,13 +81,13 @@ var catColor = function(cat) {
|
|
|
81
81
|
if (cat === 'deploy') return '#6366f1';
|
|
82
82
|
if (cat === 'cloud_storage') return '#0ea5e9';
|
|
83
83
|
if (cat === 'api_key') return '#f59e0b';
|
|
84
|
-
if (cat === 'skill_credential') return '#
|
|
84
|
+
if (cat === 'skill_credential') return '#15803d';
|
|
85
85
|
return '#6b7280';
|
|
86
86
|
};
|
|
87
87
|
|
|
88
88
|
var actionColor = function(action) {
|
|
89
89
|
if (action === 'read' || action === 'decrypt') return '#0ea5e9';
|
|
90
|
-
if (action === 'create' || action === 'encrypt') return '#
|
|
90
|
+
if (action === 'create' || action === 'encrypt') return '#15803d';
|
|
91
91
|
if (action === 'delete') return '#ef4444';
|
|
92
92
|
if (action === 'rotate') return '#f59e0b';
|
|
93
93
|
if (action === 'migrate') return '#8b5cf6';
|
package/package.json
CHANGED
|
@@ -91,7 +91,7 @@ export const E = {
|
|
|
91
91
|
return h('svg', svg({ width: s, height: s }),
|
|
92
92
|
h('defs', null,
|
|
93
93
|
h('linearGradient', { id: 'clip-g', x1: '0%', y1: '0%', x2: '0%', y2: '100%' },
|
|
94
|
-
h('stop', { offset: '0%', stopColor: '#
|
|
94
|
+
h('stop', { offset: '0%', stopColor: '#15803d' }),
|
|
95
95
|
h('stop', { offset: '100%', stopColor: '#059669' })
|
|
96
96
|
)
|
|
97
97
|
),
|
|
@@ -202,7 +202,7 @@ export const E = {
|
|
|
202
202
|
checkCircle: function(size) {
|
|
203
203
|
var s = size || 20;
|
|
204
204
|
return h('svg', svg({ width: s, height: s }),
|
|
205
|
-
h('circle', { cx: 12, cy: 12, r: 10, fill: '#
|
|
205
|
+
h('circle', { cx: 12, cy: 12, r: 10, fill: '#15803d', stroke: 'none' }),
|
|
206
206
|
h('path', { d: 'M7.5 12.5l3 3 6-6', stroke: '#fff', strokeWidth: 2.5, fill: 'none', strokeLinecap: 'round', strokeLinejoin: 'round' })
|
|
207
207
|
);
|
|
208
208
|
},
|
|
@@ -608,7 +608,7 @@ export const E = {
|
|
|
608
608
|
return h('svg', svg({ width: s, height: s }),
|
|
609
609
|
h('rect', { x: 3, y: 4, width: 5, height: 17, rx: 1, fill: '#ef4444', stroke: 'none' }),
|
|
610
610
|
h('rect', { x: 9, y: 2, width: 5, height: 19, rx: 1, fill: '#3b82f6', stroke: 'none' }),
|
|
611
|
-
h('rect', { x: 15, y: 5, width: 5, height: 16, rx: 1, fill: '#
|
|
611
|
+
h('rect', { x: 15, y: 5, width: 5, height: 16, rx: 1, fill: '#15803d', stroke: 'none' }),
|
|
612
612
|
h('rect', { x: 4, y: 7, width: 3, height: 1, rx: 0.5, fill: '#fca5a5', stroke: 'none', opacity: 0.6 }),
|
|
613
613
|
h('rect', { x: 10, y: 5, width: 3, height: 1, rx: 0.5, fill: '#93c5fd', stroke: 'none', opacity: 0.6 }),
|
|
614
614
|
h('rect', { x: 16, y: 8, width: 3, height: 1, rx: 0.5, fill: '#86efac', stroke: 'none', opacity: 0.6 })
|
|
@@ -782,8 +782,8 @@ export const E = {
|
|
|
782
782
|
var s = size || 20;
|
|
783
783
|
return h('svg', svg({ width: s, height: s }),
|
|
784
784
|
h('path', { d: 'M1 6v16l7-4 8 4 7-4V2l-7 4-8-4-7 4z', fill: '#86efac', stroke: 'none' }),
|
|
785
|
-
h('path', { d: 'M8 2v16', stroke: '#
|
|
786
|
-
h('path', { d: 'M16 6v16', stroke: '#
|
|
785
|
+
h('path', { d: 'M8 2v16', stroke: '#15803d', strokeWidth: 1.5 }),
|
|
786
|
+
h('path', { d: 'M16 6v16', stroke: '#15803d', strokeWidth: 1.5 }),
|
|
787
787
|
h('circle', { cx: 12, cy: 10, r: 2, fill: '#ef4444', stroke: 'none' })
|
|
788
788
|
);
|
|
789
789
|
},
|
|
@@ -886,8 +886,8 @@ export const E = {
|
|
|
886
886
|
var s = size || 20;
|
|
887
887
|
return h('svg', svg({ width: s, height: s }),
|
|
888
888
|
h('rect', { x: 2, y: 3, width: 20, height: 18, rx: 3, fill: '#1e1e1e' }),
|
|
889
|
-
h('path', { d: 'M6 8l4 4-4 4', stroke: '#
|
|
890
|
-
h('line', { x1: 12, y1: 16, x2: 18, y2: 16, stroke: '#
|
|
889
|
+
h('path', { d: 'M6 8l4 4-4 4', stroke: '#16a34a', strokeWidth: 2, fill: 'none', strokeLinecap: 'round', strokeLinejoin: 'round' }),
|
|
890
|
+
h('line', { x1: 12, y1: 16, x2: 18, y2: 16, stroke: '#16a34a', strokeWidth: 2, strokeLinecap: 'round' })
|
|
891
891
|
);
|
|
892
892
|
},
|
|
893
893
|
};
|
package/src/dashboard/index.html
CHANGED
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
--accent-hover: var(--brand-hover, #4f46e5);
|
|
31
31
|
--accent-soft: var(--brand-soft, rgba(99,102,241,0.12));
|
|
32
32
|
--accent-text: var(--brand-text, #818cf8);
|
|
33
|
-
--success: #
|
|
34
|
-
--success-soft: rgba(
|
|
33
|
+
--success: #15803d;
|
|
34
|
+
--success-soft: rgba(21,128,61,0.15);
|
|
35
35
|
--warning: #f59e0b;
|
|
36
36
|
--warning-soft: rgba(245,158,11,0.12);
|
|
37
37
|
--danger: #ef4444;
|
|
@@ -154,7 +154,7 @@ export function MemorySection(props) {
|
|
|
154
154
|
var sourcesCount = memoryStats && memoryStats.bySource ? Object.keys(memoryStats.bySource).length : 0;
|
|
155
155
|
|
|
156
156
|
var catColor = function(c) {
|
|
157
|
-
var m = { preference: '#8b5cf6', interaction_pattern: '#ec4899', context: '#3b82f6', skill: '#
|
|
157
|
+
var m = { preference: '#8b5cf6', interaction_pattern: '#ec4899', context: '#3b82f6', skill: '#15803d', processed_email: '#6366f1', org_knowledge: '#f59e0b', procedure: '#14b8a6', relationship: '#f43f5e', reflection: '#a855f7', domain_expertise: '#0ea5e9', error_pattern: '#ef4444' };
|
|
158
158
|
return m[c] || '#64748b';
|
|
159
159
|
};
|
|
160
160
|
var impColor = function(i) {
|
|
@@ -73,7 +73,7 @@ export function formatTime(iso) { return iso ? new Date(iso).toLocaleString() :
|
|
|
73
73
|
export var MEMORY_CATEGORIES = [
|
|
74
74
|
{ value: 'org_knowledge', label: 'Org Knowledge', color: '#6366f1' },
|
|
75
75
|
{ value: 'interaction_pattern', label: 'Interaction Pattern', color: '#0ea5e9' },
|
|
76
|
-
{ value: 'preference', label: 'Preference', color: '#
|
|
76
|
+
{ value: 'preference', label: 'Preference', color: '#15803d' },
|
|
77
77
|
{ value: 'correction', label: 'Correction', color: '#f59e0b' },
|
|
78
78
|
{ value: 'skill', label: 'Skill', color: '#8b5cf6' },
|
|
79
79
|
{ value: 'context', label: 'Context', color: '#64748b' },
|
|
@@ -563,7 +563,7 @@ function ConversationsCard(props) {
|
|
|
563
563
|
!loading && convos.length > 0 && h('div', null,
|
|
564
564
|
convos.map(function(c) {
|
|
565
565
|
var initial = (c.name || c.contactId || '?').charAt(0).toUpperCase();
|
|
566
|
-
var colors = ['#6366f1', '#ec4899', '#f59e0b', '#
|
|
566
|
+
var colors = ['#6366f1', '#ec4899', '#f59e0b', '#15803d', '#8b5cf6', '#ef4444', '#06b6d4', '#84cc16'];
|
|
567
567
|
var colorIdx = (initial.charCodeAt(0) || 0) % colors.length;
|
|
568
568
|
return h('div', { key: c.contactId,
|
|
569
569
|
style: { display: 'flex', alignItems: 'center', gap: '12px', padding: '12px', borderRadius: '10px', cursor: 'pointer', transition: 'background 0.15s', marginBottom: '2px' },
|
|
@@ -23,7 +23,7 @@ var ENFORCEMENT_TYPES = [
|
|
|
23
23
|
var MEMORY_CATEGORIES = [
|
|
24
24
|
{ value: 'org_knowledge', label: 'Org Knowledge', color: '#6366f1' },
|
|
25
25
|
{ value: 'interaction_pattern', label: 'Interaction Pattern', color: '#0ea5e9' },
|
|
26
|
-
{ value: 'preference', label: 'Preference', color: '#
|
|
26
|
+
{ value: 'preference', label: 'Preference', color: '#15803d' },
|
|
27
27
|
{ value: 'correction', label: 'Correction', color: '#f59e0b' },
|
|
28
28
|
{ value: 'skill', label: 'Skill', color: '#8b5cf6' },
|
|
29
29
|
{ value: 'context', label: 'Context', color: '#64748b' },
|
|
@@ -200,7 +200,7 @@ function OverviewTab(props) {
|
|
|
200
200
|
.catch(function(e) { toast(e.message, 'error'); });
|
|
201
201
|
};
|
|
202
202
|
|
|
203
|
-
var typeColor = function(t) { return t === 'kill' ? '#ef4444' : t === 'pause' ? '#f59e0b' : t === 'resume' ? '#
|
|
203
|
+
var typeColor = function(t) { return t === 'kill' ? '#ef4444' : t === 'pause' ? '#f59e0b' : t === 'resume' ? '#15803d' : '#0ea5e9'; };
|
|
204
204
|
|
|
205
205
|
return h(Fragment, null,
|
|
206
206
|
// Quick action bar
|
|
@@ -218,7 +218,7 @@ function OverviewTab(props) {
|
|
|
218
218
|
// Stat cards
|
|
219
219
|
h('div', { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(150px, 1fr))', gap: 12, marginBottom: 16 } },
|
|
220
220
|
h(StatCard, { label: 'Org Policies', value: policyCount, sub: mandatoryCount + ' mandatory', color: '#6366f1' }),
|
|
221
|
-
h(StatCard, { label: 'Agents Onboarded', value: onboarded + '/' + totalAgents, color: '#
|
|
221
|
+
h(StatCard, { label: 'Agents Onboarded', value: onboarded + '/' + totalAgents, color: '#15803d' }),
|
|
222
222
|
h(StatCard, { label: 'In Onboarding', value: inProgress, color: '#f59e0b' }),
|
|
223
223
|
h(StatCard, { label: 'Recent Interventions', value: recentInterventions, color: '#ef4444' })
|
|
224
224
|
),
|
|
@@ -234,7 +234,7 @@ function OverviewTab(props) {
|
|
|
234
234
|
))),
|
|
235
235
|
h('div', { className: 'card-body' },
|
|
236
236
|
onboardingData.slice(0, 8).map(function(ag) {
|
|
237
|
-
var statusColor = ag.overallStatus === 'completed' ? '#
|
|
237
|
+
var statusColor = ag.overallStatus === 'completed' ? '#15803d' : ag.overallStatus === 'in_progress' ? '#f59e0b' : ag.overallStatus === 'needs_renewal' ? '#ef4444' : '#64748b';
|
|
238
238
|
return h('div', { key: ag.agentId, style: { display: 'flex', alignItems: 'center', gap: 12, padding: '8px 0', borderBottom: '1px solid var(--border)' } },
|
|
239
239
|
h('div', { style: { minWidth: 120, fontWeight: 500, fontSize: 13 } }, renderAgentBadge(ag.agentId, agentData)),
|
|
240
240
|
h('div', { style: { flex: 1 } }, h(ProgressBar, { value: ag.acknowledgedPolicies || 0, total: ag.totalPolicies || 1, color: statusColor })),
|
|
@@ -475,7 +475,7 @@ function OnboardingTab(props) {
|
|
|
475
475
|
var needsRenewal = progress.filter(function(p) { return p.overallStatus === 'needs_renewal'; }).length;
|
|
476
476
|
var notStarted = progress.filter(function(p) { return p.overallStatus === 'not_started'; }).length;
|
|
477
477
|
|
|
478
|
-
var statusColor = function(s) { return s === 'completed' ? '#
|
|
478
|
+
var statusColor = function(s) { return s === 'completed' ? '#15803d' : s === 'in_progress' ? '#f59e0b' : s === 'needs_renewal' ? '#ef4444' : '#64748b'; };
|
|
479
479
|
|
|
480
480
|
return h(Fragment, null,
|
|
481
481
|
// Actions bar
|
|
@@ -490,7 +490,7 @@ function OnboardingTab(props) {
|
|
|
490
490
|
),
|
|
491
491
|
// Stats
|
|
492
492
|
h('div', { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(130px, 1fr))', gap: 12, marginBottom: 16 } },
|
|
493
|
-
h(StatCard, { label: 'Completed', value: completed, color: '#
|
|
493
|
+
h(StatCard, { label: 'Completed', value: completed, color: '#15803d' }),
|
|
494
494
|
h(StatCard, { label: 'In Progress', value: inProg, color: '#f59e0b' }),
|
|
495
495
|
h(StatCard, { label: 'Needs Renewal', value: needsRenewal, color: '#ef4444' }),
|
|
496
496
|
h(StatCard, { label: 'Not Started', value: notStarted, color: '#64748b' })
|
|
@@ -515,7 +515,7 @@ function OnboardingTab(props) {
|
|
|
515
515
|
h('table', { className: 'data-table', style: { fontSize: 12 } },
|
|
516
516
|
h('thead', null, h('tr', null, h('th', null, 'Policy'), h('th', null, 'Status'), h('th', null, 'Acknowledged'), h('th', null, 'Memory ID'))),
|
|
517
517
|
h('tbody', null, ag.records.map(function(r) {
|
|
518
|
-
var rColor = r.status === 'acknowledged' ? '#
|
|
518
|
+
var rColor = r.status === 'acknowledged' ? '#15803d' : r.status === 'failed' ? '#ef4444' : '#f59e0b';
|
|
519
519
|
return h('tr', { key: r.id },
|
|
520
520
|
h('td', null, r.policyId ? r.policyId.substring(0, 16) : '-'),
|
|
521
521
|
h('td', null, h(Badge, { color: rColor }, r.status)),
|
|
@@ -645,7 +645,7 @@ function MemoryTab(props) {
|
|
|
645
645
|
),
|
|
646
646
|
// Confidence bar
|
|
647
647
|
h('div', { style: { height: 3, background: 'var(--border)', borderRadius: 2, marginBottom: isExpanded ? 8 : 0 } },
|
|
648
|
-
h('div', { style: { width: ((m.confidence || 0) * 100) + '%', height: '100%', background: m.confidence > 0.7 ? '#
|
|
648
|
+
h('div', { style: { width: ((m.confidence || 0) * 100) + '%', height: '100%', background: m.confidence > 0.7 ? '#15803d' : m.confidence > 0.3 ? '#f59e0b' : '#ef4444', borderRadius: 2 } })
|
|
649
649
|
),
|
|
650
650
|
isExpanded && h(Fragment, null,
|
|
651
651
|
h('div', { style: { fontSize: 13, padding: '8px 12px', background: 'var(--bg)', borderRadius: 6, whiteSpace: 'pre-wrap', maxHeight: 200, overflow: 'auto', border: '1px solid var(--border)', marginBottom: 8 } }, m.content),
|
|
@@ -827,7 +827,7 @@ function RulesTab(props) {
|
|
|
827
827
|
|
|
828
828
|
var sevColor = function(s) { var f = SEVERITIES.find(function(x) { return x.value === s; }); return f ? f.color : '#64748b'; };
|
|
829
829
|
var actColor = function(a) { var f = RULE_ACTIONS.find(function(x) { return x.value === a; }); return f ? f.color : '#64748b'; };
|
|
830
|
-
var typeColor = function(t) { return t === 'kill' ? '#ef4444' : t === 'pause' ? '#f59e0b' : t === 'resume' ? '#
|
|
830
|
+
var typeColor = function(t) { return t === 'kill' ? '#ef4444' : t === 'pause' ? '#f59e0b' : t === 'resume' ? '#15803d' : '#0ea5e9'; };
|
|
831
831
|
|
|
832
832
|
return h(Fragment, null,
|
|
833
833
|
// Sub-tabs
|
|
@@ -860,7 +860,7 @@ function RulesTab(props) {
|
|
|
860
860
|
h('td', null, h(Badge, { color: sevColor(r.severity) }, r.severity)),
|
|
861
861
|
h('td', null, h(Badge, { color: actColor(r.action) }, r.action)),
|
|
862
862
|
h('td', { style: { textAlign: 'center' } }, r.triggerCount || 0),
|
|
863
|
-
h('td', null, r.enabled !== false ? h('span', { style: { color: '#
|
|
863
|
+
h('td', null, r.enabled !== false ? h('span', { style: { color: '#15803d' } }, 'Yes') : h('span', { style: { color: '#ef4444' } }, 'No')),
|
|
864
864
|
h('td', { style: { whiteSpace: 'nowrap' } },
|
|
865
865
|
h('button', { className: 'btn btn-ghost btn-sm', onClick: function() { openEditRule(r); } }, I.settings()),
|
|
866
866
|
h('button', { className: 'btn btn-ghost btn-sm', onClick: function() { deleteRule(r.id); } }, I.trash())
|
|
@@ -618,7 +618,7 @@ export function KnowledgeContributionsPage() {
|
|
|
618
618
|
useEffect(function() { if (tab === 'stats') loadTimeline(); }, [tab, loadTimeline]);
|
|
619
619
|
|
|
620
620
|
// SVG chart helpers — clean background, dark mode, hover tooltips
|
|
621
|
-
var CHART_COLORS = ['#6366f1', '#
|
|
621
|
+
var CHART_COLORS = ['#6366f1', '#15803d', '#f59e0b', '#ef4444', '#8b5cf6', '#06b6d4', '#ec4899', '#14b8a6'];
|
|
622
622
|
var [tooltip, setTooltip] = useState(null); // { x, y, lines: [] }
|
|
623
623
|
|
|
624
624
|
// Shared tooltip overlay (rendered once, positioned absolutely)
|
|
@@ -130,7 +130,7 @@ const PLATFORMS = [
|
|
|
130
130
|
sourceType: 'url',
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
|
-
id: 'upload', label: 'File Upload', color: '#
|
|
133
|
+
id: 'upload', label: 'File Upload', color: '#15803d',
|
|
134
134
|
desc: 'Upload files directly',
|
|
135
135
|
icon: () => h('svg', { viewBox: '0 0 24 24', width: 28, height: 28, fill: 'none', stroke: 'currentColor', strokeWidth: 1.5 },
|
|
136
136
|
h('path', { d: 'M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 3v12' })
|
|
@@ -257,7 +257,7 @@ export function KnowledgeImportWizard({ kbId, kbName, onClose, onDone }) {
|
|
|
257
257
|
h('div', { style: { position: 'relative', width: 100, height: 100, margin: '0 auto 20px' } },
|
|
258
258
|
h('svg', { viewBox: '0 0 100 100', width: 100, height: 100 },
|
|
259
259
|
h('circle', { cx: 50, cy: 50, r: 42, fill: 'none', stroke: 'var(--border)', strokeWidth: 6 }),
|
|
260
|
-
h('circle', { cx: 50, cy: 50, r: 42, fill: 'none', stroke: done ? (success ? 'var(--success, #
|
|
260
|
+
h('circle', { cx: 50, cy: 50, r: 42, fill: 'none', stroke: done ? (success ? 'var(--success, #15803d)' : 'var(--danger, #ef4444)') : 'var(--accent, #6366f1)', strokeWidth: 6, strokeLinecap: 'round', strokeDasharray: 2 * Math.PI * 42, strokeDashoffset: 2 * Math.PI * 42 * (1 - pct / 100), transform: 'rotate(-90 50 50)', style: { transition: 'stroke-dashoffset 0.5s' } })
|
|
261
261
|
),
|
|
262
262
|
h('div', { style: { position: 'absolute', inset: 0, display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center' } },
|
|
263
263
|
h('div', { style: { fontSize: 24, fontWeight: 700 } }, pct + '%'),
|
|
@@ -271,7 +271,7 @@ export function KnowledgeImportWizard({ kbId, kbName, onClose, onDone }) {
|
|
|
271
271
|
// Stats row
|
|
272
272
|
h('div', { style: { display: 'flex', justifyContent: 'center', gap: 20, marginBottom: 16 } },
|
|
273
273
|
stat('Discovered', prog.totalItems || 0),
|
|
274
|
-
stat('Imported', prog.importedItems || 0, 'var(--success, #
|
|
274
|
+
stat('Imported', prog.importedItems || 0, 'var(--success, #15803d)'),
|
|
275
275
|
prog.skippedItems > 0 && stat('Skipped', prog.skippedItems, 'var(--warning, #f59e0b)'),
|
|
276
276
|
prog.failedItems > 0 && stat('Failed', prog.failedItems, 'var(--danger, #ef4444)'),
|
|
277
277
|
),
|
|
@@ -425,7 +425,7 @@ export function OnboardingWizard({ onComplete }) {
|
|
|
425
425
|
onClick: doTestDb,
|
|
426
426
|
style: { fontSize: 13 }
|
|
427
427
|
}, dbTesting ? 'Testing...' : 'Test Connection'),
|
|
428
|
-
dbTestResult && dbTestResult.ok && h('span', { style: { color: 'var(--success, #
|
|
428
|
+
dbTestResult && dbTestResult.ok && h('span', { style: { color: 'var(--success, #15803d)', fontSize: 13 } }, 'Connection successful'),
|
|
429
429
|
dbTestResult && !dbTestResult.ok && h('span', { style: { color: 'var(--danger)', fontSize: 13 } }, dbTestResult.error)
|
|
430
430
|
),
|
|
431
431
|
errorBox,
|
|
@@ -46,7 +46,7 @@ export function MessagesPage() {
|
|
|
46
46
|
const dirBadge = (dir) => {
|
|
47
47
|
if (dir === 'internal') return h('span', { className: 'status-badge', style: { background: 'rgba(59,130,246,0.15)', color: '#3b82f6' } }, 'Internal');
|
|
48
48
|
if (dir === 'external_outbound') return h('span', { className: 'status-badge', style: { background: 'rgba(249,115,22,0.15)', color: '#f97316' } }, 'Ext Out');
|
|
49
|
-
if (dir === 'external_inbound') return h('span', { className: 'status-badge', style: { background: 'rgba(34,197,94,0.15)', color: '#
|
|
49
|
+
if (dir === 'external_inbound') return h('span', { className: 'status-badge', style: { background: 'rgba(34,197,94,0.15)', color: '#15803d' } }, 'Ext In');
|
|
50
50
|
return h('span', { className: 'status-badge' }, dir || 'unknown');
|
|
51
51
|
};
|
|
52
52
|
|
|
@@ -184,7 +184,7 @@ export function MessagesPage() {
|
|
|
184
184
|
const opacity = dimmed ? 0.25 : 1;
|
|
185
185
|
return h('g', { key: 'n' + i, style: { cursor: 'pointer', opacity: opacity }, onClick: () => setSelectedNode(n.id === selectedNode ? null : n.id) },
|
|
186
186
|
isAgent
|
|
187
|
-
? h('circle', { cx: n.x, cy: n.y, r: isSelected ? 18 : 14, fill: n.state === 'running' ? '#
|
|
187
|
+
? h('circle', { cx: n.x, cy: n.y, r: isSelected ? 18 : 14, fill: n.state === 'running' ? '#15803d' : '#9ca3af', stroke: isSelected ? '#fff' : 'none', strokeWidth: isSelected ? 3 : 0 })
|
|
188
188
|
: h('rect', { x: n.x - (isSelected ? 12 : 9), y: n.y - (isSelected ? 12 : 9), width: isSelected ? 24 : 18, height: isSelected ? 24 : 18, rx: 3, fill: '#f97316', stroke: isSelected ? '#fff' : 'none', strokeWidth: isSelected ? 3 : 0 }),
|
|
189
189
|
h('text', { x: n.x, y: n.y + (isAgent ? 28 : 26), textAnchor: 'middle', fontSize: 11, fill: 'var(--text-secondary)' }, n.name.length > 16 ? n.name.substring(0, 14) + '..' : n.name)
|
|
190
190
|
);
|
|
@@ -22,7 +22,7 @@ var H_GAP = 40;
|
|
|
22
22
|
var V_GAP = 80;
|
|
23
23
|
var PAD = 60;
|
|
24
24
|
|
|
25
|
-
var STATE_COLORS = { running: '#
|
|
25
|
+
var STATE_COLORS = { running: '#15803d', stopped: '#6b7394', error: '#ef4444', paused: '#f59e0b', deploying: '#06b6d4' };
|
|
26
26
|
var ACCENT = '#6366f1';
|
|
27
27
|
|
|
28
28
|
// ─── Tree Layout ─────────────────────────────────────────
|
|
@@ -117,7 +117,7 @@ function OrgSummary(props) {
|
|
|
117
117
|
}
|
|
118
118
|
return h('div', { style: { display: 'flex', alignItems: 'center', gap: 6, padding: '6px 16px', borderBottom: '1px solid var(--oc-border)', background: 'var(--oc-metrics)', flexShrink: 0, overflowX: 'auto', fontSize: 11 } },
|
|
119
119
|
chip('Agents', nodes.length - external, 'var(--oc-text)'),
|
|
120
|
-
chip('Running', running, '#
|
|
120
|
+
chip('Running', running, '#15803d'),
|
|
121
121
|
stopped > 0 && chip('Stopped', stopped, '#6b7394'),
|
|
122
122
|
errored > 0 && chip('Error', errored, '#ef4444'),
|
|
123
123
|
paused > 0 && chip('Paused', paused, '#f59e0b'),
|
|
@@ -229,7 +229,7 @@ export function OrgChartPage() {
|
|
|
229
229
|
),
|
|
230
230
|
h('div', { style: { color: 'var(--oc-dim)', fontSize: 12 } }, positioned.length + ' agents'),
|
|
231
231
|
h('div', { style: { flex: 1 } }),
|
|
232
|
-
legendDot('#
|
|
232
|
+
legendDot('#15803d', 'Running'), legendDot('#6b7394', 'Stopped'), legendDot('#ef4444', 'Error'), legendDot('#f59e0b', 'Paused'), legendDot('#8b5cf6', 'External'),
|
|
233
233
|
h('div', { style: { width: 1, height: 14, background: 'var(--oc-faint)', margin: '0 4px' } }),
|
|
234
234
|
h('button', { onClick: function() { setZoom(function(z) { return Math.min(3, z + 0.2); }); }, style: toolbarBtnStyle }, '+'),
|
|
235
235
|
h('div', { style: { color: 'var(--oc-dim)', fontSize: 11, minWidth: 36, textAlign: 'center' } }, Math.round(zoom * 100) + '%'),
|
|
@@ -325,7 +325,7 @@ export function OrgChartPage() {
|
|
|
325
325
|
),
|
|
326
326
|
h('div', { style: { display: 'flex', flexDirection: 'column', gap: 4 } },
|
|
327
327
|
tooltipRow('State', hoveredNode.state || 'unknown', STATE_COLORS[hoveredNode.state]),
|
|
328
|
-
!hoveredNode.isExternal && tooltipRow('Clocked In', hoveredNode.clockedIn ? 'Yes' : 'No', hoveredNode.clockedIn ? '#
|
|
328
|
+
!hoveredNode.isExternal && tooltipRow('Clocked In', hoveredNode.clockedIn ? 'Yes' : 'No', hoveredNode.clockedIn ? '#15803d' : '#6b7394'),
|
|
329
329
|
tooltipRow('Type', hoveredNode.isExternal ? 'External (Human)' : 'Internal (AI)'),
|
|
330
330
|
hoveredNode.managerName && tooltipRow('Reports To', hoveredNode.managerName),
|
|
331
331
|
hoveredNode.subordinateCount > 0 && tooltipRow('Direct Reports', String(hoveredNode.subordinateCount), ACCENT),
|
|
@@ -618,7 +618,7 @@ export function SettingsPage() {
|
|
|
618
618
|
h('div', { style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 16 } },
|
|
619
619
|
settings.smtpUser && h('div', { style: { padding: 12, background: 'var(--bg-success, rgba(34,197,94,0.08))', borderRadius: 'var(--radius)', border: '1px solid var(--border)' } },
|
|
620
620
|
h('div', { style: { display: 'flex', alignItems: 'center', gap: 8, marginBottom: 8 } },
|
|
621
|
-
h('span', { style: { color: '#
|
|
621
|
+
h('span', { style: { color: '#15803d', fontSize: 18 } }, '\u2713'),
|
|
622
622
|
h('strong', null, 'Relay Configured')
|
|
623
623
|
),
|
|
624
624
|
h('div', { style: { fontSize: 13, color: 'var(--text-secondary)' } },
|
|
@@ -629,7 +629,7 @@ export function SettingsPage() {
|
|
|
629
629
|
),
|
|
630
630
|
settings.cfApiToken && h('div', { style: { padding: 12, background: 'var(--bg-success, rgba(34,197,94,0.08))', borderRadius: 'var(--radius)', border: '1px solid var(--border)' } },
|
|
631
631
|
h('div', { style: { display: 'flex', alignItems: 'center', gap: 8, marginBottom: 8 } },
|
|
632
|
-
h('span', { style: { color: '#
|
|
632
|
+
h('span', { style: { color: '#15803d', fontSize: 18 } }, '\u2713'),
|
|
633
633
|
h('strong', null, 'Custom Domain Configured')
|
|
634
634
|
),
|
|
635
635
|
h('div', { style: { fontSize: 13, color: 'var(--text-secondary)' } },
|
|
@@ -2070,7 +2070,7 @@ function LLMProvidersTab(props) {
|
|
|
2070
2070
|
return h('div', { key: p.id, style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '12px 0', borderBottom: '1px solid var(--border)' } },
|
|
2071
2071
|
h('div', null,
|
|
2072
2072
|
h('span', { style: { fontWeight: 600, fontSize: 14 } }, p.name),
|
|
2073
|
-
h('span', { style: { marginLeft: 8, color: 'var(--success, #
|
|
2073
|
+
h('span', { style: { marginLeft: 8, color: 'var(--success, #15803d)', fontSize: 12 } }, '\u2713 Connected'),
|
|
2074
2074
|
h('div', { style: { fontSize: 12, color: 'var(--text-muted)', marginTop: 2 } }, meta.desc || '')
|
|
2075
2075
|
),
|
|
2076
2076
|
h('button', {
|
|
@@ -11,9 +11,9 @@ var H_GAP = 32; // horizontal gap (left→right flow)
|
|
|
11
11
|
var V_GAP = 12; // vertical gap between lanes
|
|
12
12
|
var PAD = 16;
|
|
13
13
|
|
|
14
|
-
var STATUS_COLORS = { created: '#6366f1', assigned: '#f59e0b', in_progress: '#06b6d4', completed: '#
|
|
14
|
+
var STATUS_COLORS = { created: '#6366f1', assigned: '#f59e0b', in_progress: '#06b6d4', completed: '#15803d', failed: '#ef4444', cancelled: '#6b7394' };
|
|
15
15
|
var PRIORITY_COLORS = { urgent: '#ef4444', high: '#f59e0b', normal: '#6366f1', low: '#6b7394' };
|
|
16
|
-
var DELEGATION_COLORS = { delegation: '#6366f1', review: '#f59e0b', revision: '#f97316', escalation: '#ef4444', return: '#
|
|
16
|
+
var DELEGATION_COLORS = { delegation: '#6366f1', review: '#f59e0b', revision: '#f97316', escalation: '#ef4444', return: '#15803d' };
|
|
17
17
|
var SOURCE_META = { telegram: { icon: '\u2708\uFE0F', label: 'Telegram', color: '#0088cc' }, whatsapp: { icon: '\uD83D\uDCAC', label: 'WhatsApp', color: '#25d366' }, email: { icon: '\u2709\uFE0F', label: 'Email', color: '#ea4335' }, google_chat: { icon: '\uD83D\uDDE8\uFE0F', label: 'Google Chat', color: '#1a73e8' }, internal: { icon: '\u2699\uFE0F', label: 'Internal', color: '#6b7394' }, api: { icon: '\uD83D\uDD17', label: 'API', color: '#8b5cf6' } };
|
|
18
18
|
function sourceBadge(src) { var m = SOURCE_META[src] || { icon: '\uD83D\uDCE8', label: src || 'Unknown', color: '#6b7394' }; return h('span', { style: { display: 'inline-flex', alignItems: 'center', gap: 3, fontSize: 9, padding: '1px 5px', borderRadius: 4, background: m.color + '18', color: m.color, fontWeight: 600, whiteSpace: 'nowrap', flexShrink: 0 } }, m.icon + ' ' + m.label); }
|
|
19
19
|
// Theme-aware: use CSS variables where possible, detect dark/light
|
|
@@ -329,7 +329,7 @@ function MetricsBar(props) {
|
|
|
329
329
|
|
|
330
330
|
return h('div', { style: { display: 'flex', alignItems: 'center', gap: 6, padding: '6px 16px', borderBottom: '1px solid var(--tp-border)', background: 'var(--tp-metrics)', flexShrink: 0, overflowX: 'auto', fontSize: 11 } },
|
|
331
331
|
h('span', { style: { fontSize: 9, color: 'var(--tp-text-faint)', fontWeight: 600, letterSpacing: '0.06em', marginRight: 2 } }, 'TODAY'),
|
|
332
|
-
chip('Done', s.todayCompleted || 0, '#
|
|
332
|
+
chip('Done', s.todayCompleted || 0, '#15803d'),
|
|
333
333
|
chip('Active', s.inProgress || 0, '#06b6d4'),
|
|
334
334
|
chip('New', s.todayCreated || 0, '#f59e0b'),
|
|
335
335
|
s.todayFailed > 0 && chip('Failed', s.todayFailed, '#ef4444'),
|
|
@@ -338,7 +338,7 @@ function MetricsBar(props) {
|
|
|
338
338
|
hasActivity && chip('Total', s.total, 'rgba(255,255,255,0.6)'),
|
|
339
339
|
s.avgDurationMs > 0 && chip('Avg', formatDuration(s.avgDurationMs), '#fff'),
|
|
340
340
|
s.totalTokens > 0 && chip('Tokens', s.totalTokens > 999999 ? (s.totalTokens / 1000000).toFixed(1) + 'M' : s.totalTokens > 999 ? (s.totalTokens / 1000).toFixed(1) + 'K' : s.totalTokens, '#a855f7'),
|
|
341
|
-
s.totalCost > 0 && chip('Cost', '$' + s.totalCost.toFixed(2), '#
|
|
341
|
+
s.totalCost > 0 && chip('Cost', '$' + s.totalCost.toFixed(2), '#15803d'),
|
|
342
342
|
s.topAgents && s.topAgents.length > 0 && h(Fragment, null,
|
|
343
343
|
h('div', { style: { width: 1, height: 14, background: 'var(--tp-border)' } }),
|
|
344
344
|
s.topAgents.slice(0, 3).map(function(a) {
|
|
@@ -582,7 +582,7 @@ export function TaskPipelinePage() {
|
|
|
582
582
|
)
|
|
583
583
|
),
|
|
584
584
|
h('div', { style: { display: 'flex', alignItems: 'center', gap: 4 } },
|
|
585
|
-
h('div', { style: { width: 8, height: 8, borderRadius: '50%', background: '#
|
|
585
|
+
h('div', { style: { width: 8, height: 8, borderRadius: '50%', background: '#15803d', animation: 'flowPulse 2s infinite' } }),
|
|
586
586
|
h('span', { style: { color: 'var(--tp-text-dim)', fontSize: 11 } }, 'Live')
|
|
587
587
|
),
|
|
588
588
|
h('div', { style: { color: 'var(--tp-text-dim)', fontSize: 11 } },
|
|
@@ -835,7 +835,7 @@ export function TaskPipelinePage() {
|
|
|
835
835
|
steps.map(function(step, i) {
|
|
836
836
|
var x = i * (STEP_W + STEP_GAP);
|
|
837
837
|
var sc = step.type === 'terminal'
|
|
838
|
-
? (STATUS_COLORS[step.status] || '#
|
|
838
|
+
? (STATUS_COLORS[step.status] || '#15803d')
|
|
839
839
|
: step.type === 'person' || step.isHuman
|
|
840
840
|
? '#f59e0b'
|
|
841
841
|
: step.status ? (STATUS_COLORS[step.status] || '#6366f1') : '#6366f1';
|
|
@@ -81,13 +81,13 @@ var catColor = function(cat) {
|
|
|
81
81
|
if (cat === 'deploy') return '#6366f1';
|
|
82
82
|
if (cat === 'cloud_storage') return '#0ea5e9';
|
|
83
83
|
if (cat === 'api_key') return '#f59e0b';
|
|
84
|
-
if (cat === 'skill_credential') return '#
|
|
84
|
+
if (cat === 'skill_credential') return '#15803d';
|
|
85
85
|
return '#6b7280';
|
|
86
86
|
};
|
|
87
87
|
|
|
88
88
|
var actionColor = function(action) {
|
|
89
89
|
if (action === 'read' || action === 'decrypt') return '#0ea5e9';
|
|
90
|
-
if (action === 'create' || action === 'encrypt') return '#
|
|
90
|
+
if (action === 'create' || action === 'encrypt') return '#15803d';
|
|
91
91
|
if (action === 'delete') return '#ef4444';
|
|
92
92
|
if (action === 'rotate') return '#f59e0b';
|
|
93
93
|
if (action === 'migrate') return '#8b5cf6';
|