@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.
@@ -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: '#10b981' }),
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: '#22c55e', stroke: 'none' }),
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: '#22c55e', stroke: 'none' }),
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: '#22c55e', strokeWidth: 1.5 }),
786
- h('path', { d: 'M16 6v16', stroke: '#22c55e', strokeWidth: 1.5 }),
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: '#4ade80', strokeWidth: 2, fill: 'none', strokeLinecap: 'round', strokeLinejoin: 'round' }),
890
- h('line', { x1: 12, y1: 16, x2: 18, y2: 16, stroke: '#4ade80', strokeWidth: 2, strokeLinecap: 'round' })
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: #22c55e;
34
- --success-soft: rgba(34,197,94,0.12);
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: '#10b981', processed_email: '#6366f1', org_knowledge: '#f59e0b', procedure: '#14b8a6', relationship: '#f43f5e', reflection: '#a855f7', domain_expertise: '#0ea5e9', error_pattern: '#ef4444' };
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: '#10b981' },
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', '#10b981', '#8b5cf6', '#ef4444', '#06b6d4', '#84cc16'];
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: '#10b981' },
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' ? '#10b981' : '#0ea5e9'; };
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: '#10b981' }),
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' ? '#10b981' : ag.overallStatus === 'in_progress' ? '#f59e0b' : ag.overallStatus === 'needs_renewal' ? '#ef4444' : '#64748b';
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' ? '#10b981' : s === 'in_progress' ? '#f59e0b' : s === 'needs_renewal' ? '#ef4444' : '#64748b'; };
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: '#10b981' }),
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' ? '#10b981' : r.status === 'failed' ? '#ef4444' : '#f59e0b';
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 ? '#10b981' : m.confidence > 0.3 ? '#f59e0b' : '#ef4444', borderRadius: 2 } })
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' ? '#10b981' : '#0ea5e9'; };
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: '#10b981' } }, 'Yes') : h('span', { style: { color: '#ef4444' } }, 'No')),
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', '#22c55e', '#f59e0b', '#ef4444', '#8b5cf6', '#06b6d4', '#ec4899', '#14b8a6'];
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: '#22c55e',
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, #22c55e)' : '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' } })
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, #22c55e)'),
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, #22c55e)', fontSize: 13 } }, 'Connection successful'),
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: '#22c55e' } }, 'Ext In');
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' ? '#22c55e' : '#9ca3af', stroke: isSelected ? '#fff' : 'none', strokeWidth: isSelected ? 3 : 0 })
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: '#22c55e', stopped: '#6b7394', error: '#ef4444', paused: '#f59e0b', deploying: '#06b6d4' };
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, '#22c55e'),
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('#22c55e', 'Running'), legendDot('#6b7394', 'Stopped'), legendDot('#ef4444', 'Error'), legendDot('#f59e0b', 'Paused'), legendDot('#8b5cf6', 'External'),
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 ? '#22c55e' : '#6b7394'),
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: '#22c55e', fontSize: 18 } }, '\u2713'),
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: '#22c55e', fontSize: 18 } }, '\u2713'),
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, #22c55e)', fontSize: 12 } }, '\u2713 Connected'),
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: '#22c55e', failed: '#ef4444', cancelled: '#6b7394' };
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: '#22c55e' };
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, '#22c55e'),
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), '#22c55e'),
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: '#22c55e', animation: 'flowPulse 2s infinite' } }),
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] || '#22c55e')
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 '#10b981';
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 '#10b981';
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticmail/enterprise",
3
- "version": "0.5.227",
3
+ "version": "0.5.228",
4
4
  "description": "AgenticMail Enterprise — cloud-hosted AI agent identity, email, auth & compliance for organizations",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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: '#10b981' }),
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: '#22c55e', stroke: 'none' }),
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: '#22c55e', stroke: 'none' }),
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: '#22c55e', strokeWidth: 1.5 }),
786
- h('path', { d: 'M16 6v16', stroke: '#22c55e', strokeWidth: 1.5 }),
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: '#4ade80', strokeWidth: 2, fill: 'none', strokeLinecap: 'round', strokeLinejoin: 'round' }),
890
- h('line', { x1: 12, y1: 16, x2: 18, y2: 16, stroke: '#4ade80', strokeWidth: 2, strokeLinecap: 'round' })
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: #22c55e;
34
- --success-soft: rgba(34,197,94,0.12);
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: '#10b981', processed_email: '#6366f1', org_knowledge: '#f59e0b', procedure: '#14b8a6', relationship: '#f43f5e', reflection: '#a855f7', domain_expertise: '#0ea5e9', error_pattern: '#ef4444' };
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: '#10b981' },
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', '#10b981', '#8b5cf6', '#ef4444', '#06b6d4', '#84cc16'];
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: '#10b981' },
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' ? '#10b981' : '#0ea5e9'; };
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: '#10b981' }),
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' ? '#10b981' : ag.overallStatus === 'in_progress' ? '#f59e0b' : ag.overallStatus === 'needs_renewal' ? '#ef4444' : '#64748b';
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' ? '#10b981' : s === 'in_progress' ? '#f59e0b' : s === 'needs_renewal' ? '#ef4444' : '#64748b'; };
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: '#10b981' }),
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' ? '#10b981' : r.status === 'failed' ? '#ef4444' : '#f59e0b';
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 ? '#10b981' : m.confidence > 0.3 ? '#f59e0b' : '#ef4444', borderRadius: 2 } })
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' ? '#10b981' : '#0ea5e9'; };
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: '#10b981' } }, 'Yes') : h('span', { style: { color: '#ef4444' } }, 'No')),
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', '#22c55e', '#f59e0b', '#ef4444', '#8b5cf6', '#06b6d4', '#ec4899', '#14b8a6'];
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: '#22c55e',
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, #22c55e)' : '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' } })
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, #22c55e)'),
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, #22c55e)', fontSize: 13 } }, 'Connection successful'),
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: '#22c55e' } }, 'Ext In');
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' ? '#22c55e' : '#9ca3af', stroke: isSelected ? '#fff' : 'none', strokeWidth: isSelected ? 3 : 0 })
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: '#22c55e', stopped: '#6b7394', error: '#ef4444', paused: '#f59e0b', deploying: '#06b6d4' };
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, '#22c55e'),
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('#22c55e', 'Running'), legendDot('#6b7394', 'Stopped'), legendDot('#ef4444', 'Error'), legendDot('#f59e0b', 'Paused'), legendDot('#8b5cf6', 'External'),
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 ? '#22c55e' : '#6b7394'),
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: '#22c55e', fontSize: 18 } }, '\u2713'),
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: '#22c55e', fontSize: 18 } }, '\u2713'),
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, #22c55e)', fontSize: 12 } }, '\u2713 Connected'),
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: '#22c55e', failed: '#ef4444', cancelled: '#6b7394' };
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: '#22c55e' };
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, '#22c55e'),
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), '#22c55e'),
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: '#22c55e', animation: 'flowPulse 2s infinite' } }),
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] || '#22c55e')
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 '#10b981';
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 '#10b981';
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';