code-data-ark 2.0.10__tar.gz → 2.0.11__tar.gz

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.
Files changed (36) hide show
  1. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/PKG-INFO +1 -1
  2. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/__init__.py +1 -1
  3. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/ui/web.py +27 -27
  4. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/pyproject.toml +1 -1
  5. code_data_ark-2.0.11/version +1 -0
  6. code_data_ark-2.0.10/version +0 -1
  7. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/.flake8 +0 -0
  8. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/.github/workflows/ci.yml +0 -0
  9. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/.gitignore +0 -0
  10. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/bin/release.py +0 -0
  11. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/__main__.py +0 -0
  12. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/kernel/__init__.py +0 -0
  13. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/kernel/control_db.py +0 -0
  14. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/kernel/paths.py +0 -0
  15. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/kernel/pmf_kernel.py +0 -0
  16. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/kernel/selfcheck.py +0 -0
  17. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/pipeline/__init__.py +0 -0
  18. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/pipeline/embed.py +0 -0
  19. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/pipeline/extract.py +0 -0
  20. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/pipeline/ingest.py +0 -0
  21. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/pipeline/parse_edits.py +0 -0
  22. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/pipeline/reconstruct.py +0 -0
  23. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/pipeline/watcher.py +0 -0
  24. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/ui/__init__.py +0 -0
  25. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/cda/ui/cli.py +0 -0
  26. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/changelog.md +0 -0
  27. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/contributing.md +0 -0
  28. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/docs/architecture.md +0 -0
  29. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/docs/examples/usage.md +0 -0
  30. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/docs/pmf_kernel.md +0 -0
  31. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/docs/roadmap.md +0 -0
  32. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/license +0 -0
  33. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/makefile +0 -0
  34. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/readme.md +0 -0
  35. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/tests/test_basic.py +0 -0
  36. {code_data_ark-2.0.10 → code_data_ark-2.0.11}/tests/test_selfcheck.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-data-ark
3
- Version: 2.0.10
3
+ Version: 2.0.11
4
4
  Summary: Code Data Ark — local observability and intelligence platform for VS Code + Copilot Chat sessions
5
5
  Project-URL: Homepage, https://github.com/goCosmix/cda
6
6
  Project-URL: Repository, https://github.com/goCosmix/cda.git
@@ -1,3 +1,3 @@
1
1
  """Code Data Ark — local observability and intelligence platform for VS Code + Copilot Chat sessions."""
2
2
 
3
- __version__ = "2.0.10"
3
+ __version__ = "2.0.11"
@@ -1474,38 +1474,38 @@ INDEX_HTML = """
1474
1474
 
1475
1475
  <div class="nav-group">
1476
1476
  <div class="nav-group-title">Core</div>
1477
- <div class="nav-item active" data-page="dashboard"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="7" height="8" rx="1"/><rect x="14" y="3" width="7" height="5" rx="1"/><rect x="14" y="12" width="7" height="9" rx="1"/><rect x="3" y="14" width="7" height="6" rx="1"/></svg>Dashboard</div> # noqa: E501
1478
- <div class="nav-item" data-page="sessions"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><line x1="10" y1="9" x2="8" y2="9"/></svg>Sessions</div> # noqa: E501
1479
- <div class="nav-item" data-page="search"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>Search</div> # noqa: E501
1477
+ <div class="nav-item active" data-page="dashboard"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="7" height="8" rx="1"/><rect x="14" y="3" width="7" height="5" rx="1"/><rect x="14" y="12" width="7" height="9" rx="1"/><rect x="3" y="14" width="7" height="6" rx="1"/></svg>Dashboard</div>
1478
+ <div class="nav-item" data-page="sessions"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><line x1="10" y1="9" x2="8" y2="9"/></svg>Sessions</div>
1479
+ <div class="nav-item" data-page="search"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>Search</div>
1480
1480
  </div>
1481
1481
 
1482
1482
  <div class="nav-group">
1483
1483
  <div class="nav-group-title">Analysis</div>
1484
- <div class="nav-item" data-page="heat"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M8 14.5a4 4 0 0 1 8 0c0 2.2-2.5 5.5-4 7.5-1.5-2-4-5.3-4-7.5z"/><path d="M12 2.5c0 4.5-2 7.5-2 10.5a4 4 0 0 0 4 4c1.5 0 2-1 2-1s2 1 2-2c0-5-5-8-6-11.5z"/></svg>Heat Analysis</div> # noqa: E501
1485
- <div class="nav-item" data-page="keywords"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20.59 13.41 13.41 20.59a2 2 0 0 1-2.83 0L3.59 13.6a2 2 0 0 1 0-2.83L10.77 3.59a2 2 0 0 1 2.83 0l7.17 7.17a2 2 0 0 1 0 2.83z"/><path d="M7 7h.01"/></svg>Keywords</div> # noqa: E501
1486
- <div class="nav-item" data-page="signals"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12.55a11 11 0 0 1 14.08 0"/><path d="M8.5 16.5a6 6 0 0 1 7 0"/><path d="M12 20a2 2 0 0 1 2-2 2 2 0 0 1 2 2"/></svg>Signals</div> # noqa: E501
1487
- <div class="nav-item" data-page="behavior"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 22a4 4 0 0 0 4-4v-1.5a3.5 3.5 0 0 0-3.5-3.5H11.5A3.5 3.5 0 0 0 8 16.5V18a4 4 0 0 0 4 4z"/><path d="M8 2c-1.11 0-2 .9-2 2v3h12V4c0-1.1-.89-2-2-2H8z"/></svg>Behavior</div> # noqa: E501
1484
+ <div class="nav-item" data-page="heat"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M8 14.5a4 4 0 0 1 8 0c0 2.2-2.5 5.5-4 7.5-1.5-2-4-5.3-4-7.5z"/><path d="M12 2.5c0 4.5-2 7.5-2 10.5a4 4 0 0 0 4 4c1.5 0 2-1 2-1s2 1 2-2c0-5-5-8-6-11.5z"/></svg>Heat Analysis</div>
1485
+ <div class="nav-item" data-page="keywords"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20.59 13.41 13.41 20.59a2 2 0 0 1-2.83 0L3.59 13.6a2 2 0 0 1 0-2.83L10.77 3.59a2 2 0 0 1 2.83 0l7.17 7.17a2 2 0 0 1 0 2.83z"/><path d="M7 7h.01"/></svg>Keywords</div>
1486
+ <div class="nav-item" data-page="signals"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12.55a11 11 0 0 1 14.08 0"/><path d="M8.5 16.5a6 6 0 0 1 7 0"/><path d="M12 20a2 2 0 0 1 2-2 2 2 0 0 1 2 2"/></svg>Signals</div>
1487
+ <div class="nav-item" data-page="behavior"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 22a4 4 0 0 0 4-4v-1.5a3.5 3.5 0 0 0-3.5-3.5H11.5A3.5 3.5 0 0 0 8 16.5V18a4 4 0 0 0 4 4z"/><path d="M8 2c-1.11 0-2 .9-2 2v3h12V4c0-1.1-.89-2-2-2H8z"/></svg>Behavior</div>
1488
1488
  </div>
1489
1489
 
1490
1490
  <div class="nav-group">
1491
1491
  <div class="nav-group-title">Navigation</div>
1492
- <div class="nav-item" data-page="workspaces"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 5a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z"/></svg>Workspaces</div> # noqa: E501
1493
- <div class="nav-item" data-page="tools"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M14.7 10.3 13.4 11.6 14.1 12.3a2 2 0 0 1 0 2.83l-5.7 5.7a2 2 0 0 1-2.83 0L3.4 17.7a2 2 0 0 1 0-2.83l5.7-5.7a2 2 0 0 1 2.83 0l.7.7 1.3-1.3"/><path d="M9 14.6l-2-2"/></svg>Tool Calls</div> # noqa: E501
1494
- <div class="nav-item" data-page="memory"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="5" rx="8" ry="3"/><path d="M4 5v6c0 1.66 3.58 3 8 3s8-1.34 8-3V5"/><path d="M4 11v6c0 1.66 3.58 3 8 3s8-1.34 8-3v-6"/></svg>Memory</div> # noqa: E501
1495
- <div class="nav-item" data-page="tokens"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12h10"/><path d="M8 8h8"/><path d="M8 16h8"/><path d="M12 4v16"/></svg>Tokens</div> # noqa: E501
1492
+ <div class="nav-item" data-page="workspaces"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 5a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z"/></svg>Workspaces</div>
1493
+ <div class="nav-item" data-page="tools"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M14.7 10.3 13.4 11.6 14.1 12.3a2 2 0 0 1 0 2.83l-5.7 5.7a2 2 0 0 1-2.83 0L3.4 17.7a2 2 0 0 1 0-2.83l5.7-5.7a2 2 0 0 1 2.83 0l.7.7 1.3-1.3"/><path d="M9 14.6l-2-2"/></svg>Tool Calls</div>
1494
+ <div class="nav-item" data-page="memory"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="5" rx="8" ry="3"/><path d="M4 5v6c0 1.66 3.58 3 8 3s8-1.34 8-3V5"/><path d="M4 11v6c0 1.66 3.58 3 8 3s8-1.34 8-3v-6"/></svg>Memory</div>
1495
+ <div class="nav-item" data-page="tokens"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12h10"/><path d="M8 8h8"/><path d="M8 16h8"/><path d="M12 4v16"/></svg>Tokens</div>
1496
1496
  </div>
1497
1497
 
1498
1498
  <div class="nav-group">
1499
1499
  <div class="nav-group-title">Intelligence</div>
1500
- <div class="nav-item" data-page="alerts"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>Alerts</div> # noqa: E501
1501
- <div class="nav-item" data-page="recommendations"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M9 18h6"/><path d="M10 22h4"/><path d="M9 9a3 3 0 0 1 6 0c0 1.38-.56 2.63-1.5 3.5A3 3 0 0 0 12 17a3 3 0 0 0-1.5-4.5C9.56 11.63 9 10.38 9 9z"/></svg>Recommendations</div> # noqa: E501
1502
- <div class="nav-item" data-page="topics"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2 2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg>Topics</div> # noqa: E501
1500
+ <div class="nav-item" data-page="alerts"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>Alerts</div>
1501
+ <div class="nav-item" data-page="recommendations"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M9 18h6"/><path d="M10 22h4"/><path d="M9 9a3 3 0 0 1 6 0c0 1.38-.56 2.63-1.5 3.5A3 3 0 0 0 12 17a3 3 0 0 0-1.5-4.5C9.56 11.63 9 10.38 9 9z"/></svg>Recommendations</div>
1502
+ <div class="nav-item" data-page="topics"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2 2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg>Topics</div>
1503
1503
  </div>
1504
1504
 
1505
1505
  <div class="nav-group">
1506
1506
  <div class="nav-group-title">System</div>
1507
- <div class="nav-item" data-page="pipeline"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="6" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><circle cx="18" cy="6" r="3"/><path d="M6 9v6h12"/></svg>Pipeline</div> # noqa: E501
1508
- <div class="nav-item" data-page="query"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m8 9 4-4 4 4"/><path d="m8 15 4-4 4 4"/></svg>Raw Query</div> # noqa: E501
1507
+ <div class="nav-item" data-page="pipeline"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="6" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><circle cx="18" cy="6" r="3"/><path d="M6 9v6h12"/></svg>Pipeline</div>
1508
+ <div class="nav-item" data-page="query"><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m8 9 4-4 4 4"/><path d="m8 15 4-4 4 4"/></svg>Raw Query</div>
1509
1509
  </div>
1510
1510
  </div>
1511
1511
 
@@ -2086,7 +2086,7 @@ function openSessionDrawer(sessionId) {
2086
2086
  window.currentSessionDetail = data;
2087
2087
 
2088
2088
  titleEl.textContent = session.title || `Session ${session.session_id || sessionId}`;
2089
- subtitleEl.textContent = `Workspace ${session.workspace_id || '—'} · ${session.created_at ? new Date(session.created_at).toLocaleString() : 'Unknown date'}`; # noqa: E501
2089
+ subtitleEl.textContent = `Workspace ${session.workspace_id || '—'} · ${session.created_at ? new Date(session.created_at).toLocaleString() : 'Unknown date'}`;
2090
2090
 
2091
2091
  body.innerHTML = renderDrawerTabContent('overview', window.currentSessionDetail);
2092
2092
  }).catch(err => {
@@ -2129,7 +2129,7 @@ function renderDrawerTabContent(tab, data) {
2129
2129
  ['Requests', session.request_count || '—'],
2130
2130
  ['State', session.response_state || '—'],
2131
2131
  ['Location', session.initial_location || '—'],
2132
- ['Heat Score', `<span style="color: ${heatScore !== 'N/A' && heatScore >= 50 ? 'var(--danger)' : 'var(--accent)'};">${heatScore}</span>`], # noqa: E501
2132
+ ['Heat Score', `<span style="color: ${heatScore !== 'N/A' && heatScore >= 50 ? 'var(--danger)' : 'var(--accent)'};">${heatScore}</span>`],
2133
2133
  ['Created At', session.created_at ? new Date(session.created_at).toLocaleString() : 'Unknown']
2134
2134
  ].map(([label, value]) => `
2135
2135
  <div class="data-row">
@@ -2143,7 +2143,7 @@ function renderDrawerTabContent(tab, data) {
2143
2143
 
2144
2144
  const sanitize = text => String(text || '').replace(/</g, '&lt;').replace(/>/g, '&gt;');
2145
2145
  const sessionSummary = sanitize(session.summary || analysis.summary || '');
2146
- const turnPoint = analysis.turning_point_text ? sanitize(analysis.turning_point_text.substring(0, 300)) + (analysis.turning_point_text.length > 300 ? '…' : '') : ''; # noqa: E501
2146
+ const turnPoint = analysis.turning_point_text ? sanitize(analysis.turning_point_text.substring(0, 300)) + (analysis.turning_point_text.length > 300 ? '…' : '') : '';
2147
2147
 
2148
2148
  if (tab === 'overview') {
2149
2149
  const chatCount = exchanges.length;
@@ -2257,7 +2257,7 @@ function renderDrawerTabContent(tab, data) {
2257
2257
  }
2258
2258
  });
2259
2259
  const allToolCalls = toolCalls.length ? toolCalls : embeddedCalls;
2260
- const toolsHtml = allToolCalls.length ? `<table class="table"><thead><tr><th>#</th><th>Tool</th><th>Exchange</th><th>When</th></tr></thead><tbody>${allToolCalls.map((call, i) => `<tr><td>${i + 1}</td><td>${call.tool_name || call.name || 'Tool'}</td><td>${call.exchange_index || ''}</td><td>${call.created_at ? new Date(call.created_at).toLocaleString() : ''}</td></tr><tr><td colspan="4"><div class="code-block" style="margin: 0; padding: 12px;">${(call.arguments_json || call.arguments || call.args || 'No arguments').replace(/</g, '&lt;').replace(/>/g, '&gt;')}</div></td></tr>`).join('')}</tbody></table>` : '<div class="alert alert-info">No tool calls recorded for this session.</div>'; # noqa: E501
2260
+ const toolsHtml = allToolCalls.length ? `<table class="table"><thead><tr><th>#</th><th>Tool</th><th>Exchange</th><th>When</th></tr></thead><tbody>${allToolCalls.map((call, i) => `<tr><td>${i + 1}</td><td>${call.tool_name || call.name || 'Tool'}</td><td>${call.exchange_index || ''}</td><td>${call.created_at ? new Date(call.created_at).toLocaleString() : ''}</td></tr><tr><td colspan="4"><div class="code-block" style="margin: 0; padding: 12px;">${(call.arguments_json || call.arguments || call.args || 'No arguments').replace(/</g, '&lt;').replace(/>/g, '&gt;')}</div></td></tr>`).join('')}</tbody></table>` : '<div class="alert alert-info">No tool calls recorded for this session.</div>';
2261
2261
  return `
2262
2262
  ${metadataSection}
2263
2263
  <div class="drawer-section">
@@ -2281,7 +2281,7 @@ function renderDrawerTabContent(tab, data) {
2281
2281
  </table>
2282
2282
  </div>
2283
2283
  ` : '';
2284
- const signalsHtml = signals.length ? `<table class="table"><thead><tr><th>#</th><th>Signal</th><th>Created</th><th>Details</th></tr></thead><tbody>${signals.map((s, i) => `<tr><td>${i + 1}</td><td>${s.signal_type || s.matched_keyword || 'Signal'}</td><td>${s.created_at ? new Date(s.created_at).toLocaleString() : ''}</td><td>${(s.signal_text || s.user_message || s.matched_keyword || '').replace(/</g, '&lt;').replace(/>/g, '&gt;')}</td></tr>`).join('')}</tbody></table>` : '<div class="alert alert-info">No exchange signals available.</div>'; # noqa: E501
2284
+ const signalsHtml = signals.length ? `<table class="table"><thead><tr><th>#</th><th>Signal</th><th>Created</th><th>Details</th></tr></thead><tbody>${signals.map((s, i) => `<tr><td>${i + 1}</td><td>${s.signal_type || s.matched_keyword || 'Signal'}</td><td>${s.created_at ? new Date(s.created_at).toLocaleString() : ''}</td><td>${(s.signal_text || s.user_message || s.matched_keyword || '').replace(/</g, '&lt;').replace(/>/g, '&gt;')}</td></tr>`).join('')}</tbody></table>` : '<div class="alert alert-info">No exchange signals available.</div>';
2285
2285
  return `
2286
2286
  ${metadataSection}
2287
2287
  ${summaryHtml}
@@ -2293,7 +2293,7 @@ function renderDrawerTabContent(tab, data) {
2293
2293
  }
2294
2294
 
2295
2295
  if (tab === 'files') {
2296
- const fileHtml = vfsEntries.length ? `<table class="table"><thead><tr><th>#</th><th>File</th><th>Type</th><th>Size</th><th>Path</th></tr></thead><tbody>${vfsEntries.map((file, i) => `<tr><td>${i + 1}</td><td>${file.filename || file.source_path || file.source_type}</td><td>${file.content_type || 'unknown'}</td><td>${file.size_bytes ? (file.size_bytes / 1024).toFixed(2) + ' KB' : 'unknown'}</td><td class="truncate">${file.source_path || ''}</td></tr>`).join('')}</tbody></table>` : '<div class="alert alert-info">No session files found.</div>'; # noqa: E501
2296
+ const fileHtml = vfsEntries.length ? `<table class="table"><thead><tr><th>#</th><th>File</th><th>Type</th><th>Size</th><th>Path</th></tr></thead><tbody>${vfsEntries.map((file, i) => `<tr><td>${i + 1}</td><td>${file.filename || file.source_path || file.source_type}</td><td>${file.content_type || 'unknown'}</td><td>${file.size_bytes ? (file.size_bytes / 1024).toFixed(2) + ' KB' : 'unknown'}</td><td class="truncate">${file.source_path || ''}</td></tr>`).join('')}</tbody></table>` : '<div class="alert alert-info">No session files found.</div>';
2297
2297
  return `
2298
2298
  ${metadataSection}
2299
2299
  <div class="drawer-section">
@@ -2304,7 +2304,7 @@ function renderDrawerTabContent(tab, data) {
2304
2304
  }
2305
2305
 
2306
2306
  if (tab === 'alerts') {
2307
- const alertsHtml = alerts.length ? `<table class="table"><thead><tr><th>#</th><th>Alert</th><th>Severity</th><th>Created</th></tr></thead><tbody>${alerts.map((alert, i) => `<tr><td>${i + 1}</td><td>${alert.alert_type || 'Alert'}<div class="alert-text">${(alert.message || '').replace(/</g, '&lt;').replace(/>/g, '&gt;')}</div></td><td>${alert.severity || 'unknown'}</td><td>${alert.created_at ? new Date(alert.created_at).toLocaleString() : ''}</td></tr>`).join('')}</tbody></table>` : '<div class="alert alert-info">No alerts recorded for this session.</div>'; # noqa: E501
2307
+ const alertsHtml = alerts.length ? `<table class="table"><thead><tr><th>#</th><th>Alert</th><th>Severity</th><th>Created</th></tr></thead><tbody>${alerts.map((alert, i) => `<tr><td>${i + 1}</td><td>${alert.alert_type || 'Alert'}<div class="alert-text">${(alert.message || '').replace(/</g, '&lt;').replace(/>/g, '&gt;')}</div></td><td>${alert.severity || 'unknown'}</td><td>${alert.created_at ? new Date(alert.created_at).toLocaleString() : ''}</td></tr>`).join('')}</tbody></table>` : '<div class="alert alert-info">No alerts recorded for this session.</div>';
2308
2308
  return `
2309
2309
  ${metadataSection}
2310
2310
  <div class="drawer-section">
@@ -2554,14 +2554,14 @@ function initPipeline() {
2554
2554
  <tbody>
2555
2555
  ${data.services.map(s => `
2556
2556
  <tr>
2557
- <td><strong>${s.label}</strong><div class="truncate" style="font-size:12px;color:var(--text-tertiary);">${s.description}</div></td> # noqa: E501
2557
+ <td><strong>${s.label}</strong><div class="truncate" style="font-size:12px;color:var(--text-tertiary);">${s.description}</div></td>
2558
2558
  <td>${s.status}</td>
2559
2559
  <td>${s.pid || '—'}</td>
2560
2560
  <td>${s.updated_at || '—'}</td>
2561
2561
  <td>
2562
- ${s.allowed_actions.includes('start') ? `<button class="button button-secondary small" onclick="runPmfServiceAction('${s.service_id}','start')">Start</button>` : ''} # noqa: E501
2563
- ${s.allowed_actions.includes('stop') ? `<button class="button button-secondary small" onclick="runPmfServiceAction('${s.service_id}','stop')">Stop</button>` : ''} # noqa: E501
2564
- ${s.allowed_actions.includes('restart') ? `<button class="button button-secondary small" onclick="runPmfServiceAction('${s.service_id}','restart')">Restart</button>` : ''} # noqa: E501
2562
+ ${s.allowed_actions.includes('start') ? `<button class="button button-secondary small" onclick="runPmfServiceAction('${s.service_id}','start')">Start</button>` : ''}
2563
+ ${s.allowed_actions.includes('stop') ? `<button class="button button-secondary small" onclick="runPmfServiceAction('${s.service_id}','stop')">Stop</button>` : ''}
2564
+ ${s.allowed_actions.includes('restart') ? `<button class="button button-secondary small" onclick="runPmfServiceAction('${s.service_id}','restart')">Restart</button>` : ''}
2565
2565
  </td>
2566
2566
  </tr>
2567
2567
  `).join('')}
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-data-ark"
7
- version = "2.0.10"
7
+ version = "2.0.11"
8
8
  description = "Code Data Ark — local observability and intelligence platform for VS Code + Copilot Chat sessions"
9
9
  readme = "readme.md"
10
10
  license = "MIT"
@@ -0,0 +1 @@
1
+ 2.0.11
@@ -1 +0,0 @@
1
- 2.0.10
File without changes
File without changes
File without changes
File without changes