phaibel 4.0.38 → 4.0.39

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.
@@ -289,58 +289,7 @@
289
289
  flex-shrink: 0;
290
290
  }
291
291
 
292
- /* ── Content Types panel ────────────────────────────── */
293
292
 
294
- .ctype-item {
295
- padding: 6px 8px;
296
- border-bottom: 1px solid rgba(255,255,255,0.04);
297
- border-radius: 4px;
298
- cursor: pointer;
299
- transition: background 0.15s;
300
- }
301
-
302
- .ctype-item:last-child { border-bottom: none; }
303
- .ctype-item:hover { background: rgba(255,255,255,0.06); }
304
-
305
- .ctype-header {
306
- display: flex;
307
- align-items: center;
308
- gap: 6px;
309
- }
310
-
311
- .ctype-name {
312
- font-size: 12px;
313
- font-weight: 600;
314
- }
315
-
316
- .ctype-count {
317
- font-size: 10px;
318
- color: var(--dim);
319
- margin-left: auto;
320
- flex-shrink: 0;
321
- }
322
-
323
- .ctype-desc {
324
- font-size: 10px;
325
- color: var(--dim);
326
- line-height: 1.3;
327
- margin-top: 2px;
328
- }
329
-
330
- .ctype-fields {
331
- display: flex;
332
- flex-wrap: wrap;
333
- gap: 3px;
334
- margin-top: 4px;
335
- }
336
-
337
- .ctype-field {
338
- font-size: 9px;
339
- padding: 1px 5px;
340
- border-radius: 3px;
341
- background: rgba(255,255,255,0.06);
342
- color: var(--dim);
343
- }
344
293
 
345
294
  /* ── Insights panel ─────────────────────────────────── */
346
295
 
@@ -1189,10 +1138,6 @@
1189
1138
  <div id="timeline-body">
1190
1139
  <div class="empty-state">Loading…</div>
1191
1140
  </div>
1192
- <div class="panel-section-title" style="margin-top: 16px;">Content Types</div>
1193
- <div id="content-types-body">
1194
- <div class="empty-state">Loading…</div>
1195
- </div>
1196
1141
  <div class="panel-section-title" style="margin-top: 16px;">Insights</div>
1197
1142
  <div id="insights-body">
1198
1143
  <div class="empty-state">No insights yet</div>
@@ -1547,79 +1492,6 @@ async function markTaskDone(checkEl) {
1547
1492
  return days + 'd ago';
1548
1493
  }
1549
1494
 
1550
- // ── Content Types ────────────────────────────────────────
1551
- var contentTypesBody = document.getElementById('content-types-body');
1552
-
1553
- async function fetchContentTypes() {
1554
- try {
1555
- const [typesRes, calRes] = await Promise.all([
1556
- fetch('/api/types'),
1557
- fetch('/api/calendar'),
1558
- ]);
1559
- const types = await typesRes.json();
1560
- const calItems = await calRes.json();
1561
-
1562
- // Count entities per type from calendar data (which includes all dated entities)
1563
- // Also fetch entity counts per type via listing
1564
- const counts = {};
1565
- for (const item of calItems) {
1566
- var t = item.entityType || '';
1567
- counts[t] = (counts[t] || 0) + 1;
1568
- }
1569
-
1570
- renderContentTypes(types, counts);
1571
- } catch {
1572
- contentTypesBody.innerHTML = '<div class="empty-state">Failed to load.</div>';
1573
- }
1574
- }
1575
-
1576
- function renderContentTypes(types, counts) {
1577
- if (!types || types.length === 0) {
1578
- contentTypesBody.innerHTML = '<div class="empty-state">No content types.</div>';
1579
- return;
1580
- }
1581
-
1582
- var html = '';
1583
- for (var i = 0; i < types.length; i++) {
1584
- var t = types[i];
1585
- var count = counts[t.name] || '';
1586
- var countLabel = count ? count + '' : '';
1587
- var desc = t.description || '';
1588
- var fields = (t.fields || []).slice(0, 6);
1589
-
1590
- html += '<div class="ctype-item" onclick="chatContentType(\'' + esc(t.plural) + '\')">'
1591
- + '<div class="ctype-header">'
1592
- + '<span class="ctype-name">' + esc(t.plural) + '</span>'
1593
- + (countLabel ? '<span class="ctype-count">' + esc(countLabel) + '</span>' : '')
1594
- + '</div>';
1595
-
1596
- if (desc) {
1597
- html += '<div class="ctype-desc">' + esc(desc) + '</div>';
1598
- }
1599
-
1600
- if (fields.length > 0) {
1601
- html += '<div class="ctype-fields">';
1602
- for (var j = 0; j < fields.length; j++) {
1603
- html += '<span class="ctype-field">' + esc(fields[j].key) + '</span>';
1604
- }
1605
- if (t.fields.length > 6) {
1606
- html += '<span class="ctype-field">+' + (t.fields.length - 6) + '</span>';
1607
- }
1608
- html += '</div>';
1609
- }
1610
-
1611
- html += '</div>';
1612
- }
1613
-
1614
- contentTypesBody.innerHTML = html;
1615
- }
1616
-
1617
- window.chatContentType = function(plural) {
1618
- var msg = 'show me the content for ' + plural;
1619
- chatInput.value = msg;
1620
- chatForm.dispatchEvent(new Event('submit'));
1621
- };
1622
-
1623
1495
  async function fetchStatus() {
1624
1496
  try {
1625
1497
  const res = await fetch('/api/status');
@@ -2355,7 +2227,6 @@ async function markTaskDone(checkEl) {
2355
2227
  checkOnboarding().then(function(needsOnboarding) {
2356
2228
  if (!needsOnboarding) {
2357
2229
  fetchCalendarNames().then(function() { fetchTimeline(); });
2358
- fetchContentTypes();
2359
2230
  fetchScheduler();
2360
2231
  fetchInsights();
2361
2232
  connectWs();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phaibel",
3
- "version": "4.0.38",
3
+ "version": "4.0.39",
4
4
  "description": "AI personal agent that dynamically assembles executable processes from composable code blocks — powered by FeralCCF",
5
5
  "type": "module",
6
6
  "engines": {