@vendian/cli 0.0.43 → 0.0.45

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.
@@ -152,22 +152,10 @@ body { font-family: var(--font); background: var(--bg-page); color: var(--text);
152
152
  .serve-section-title { font-size: 11px; font-weight: 700; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.5px; }
153
153
  .serve-section-desc { font-size: 12.5px; color: var(--text-secondary); margin-top: 3px; }
154
154
  .serve-section-meta { font-size: 11.5px; color: var(--text-dim); white-space: nowrap; padding-top: 1px; }
155
- #workspace-picker { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px; margin-bottom: 6px; }
156
155
  .serve-select-bar { display: flex; align-items: center; gap: 9px; padding: 10px 14px; border-radius: 8px; background: var(--bg-card); border: 1px solid var(--border); box-shadow: var(--shadow); margin-bottom: 14px; font-size: 13px; font-weight: 600; cursor: pointer; user-select: none; }
157
156
  .serve-select-bar:hover { background: var(--bg-hover); }
158
157
  .serve-select-bar input { width: 16px; height: 16px; accent-color: var(--accent-solid); cursor: pointer; }
159
158
  .serve-select-bar .count { margin-left: auto; font-weight: 400; color: var(--text-dim); font-size: 12px; }
160
- .workspace-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 14px 16px; text-align: left; cursor: pointer; transition: all var(--transition); box-shadow: var(--shadow); font: inherit; color: inherit; }
161
- .workspace-card:hover { border-color: var(--border-hover); transform: translateY(-1px); box-shadow: var(--shadow-lg); }
162
- .workspace-card.selected { border-color: var(--accent); background: var(--accent-bg); }
163
- .workspace-card-title-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
164
- .workspace-card-title { font-size: 13.5px; font-weight: 650; color: var(--text); }
165
- .workspace-card-slug { font-size: 11px; color: var(--text-dim); margin-top: 2px; }
166
- .workspace-card-id { font-size: 11px; font-family: var(--mono); color: var(--text-dim); margin-top: 10px; overflow: hidden; text-overflow: ellipsis; }
167
- .workspace-card-badge { font-size: 10px; font-weight: 700; padding: 3px 8px; border-radius: 4px; border: 1px solid var(--border); color: var(--text-dim); background: var(--bg-elevated); white-space: nowrap; }
168
- .workspace-card.selected .workspace-card-badge { color: var(--accent); border-color: var(--accent-border); background: white; }
169
- .workspace-empty { padding: 14px 16px; border-radius: var(--radius); background: var(--bg-card); border: 1px dashed var(--border); color: var(--text-secondary); font-size: 12.5px; }
170
- .workspace-empty.workspace-error { color: var(--red); border-color: var(--red-border); background: var(--red-bg); }
171
159
  .serve-folder { margin-bottom: 20px; }
172
160
  .serve-folder-title { display: flex; align-items: center; gap: 6px; margin-bottom: 8px; font-size: 10.5px; font-weight: 700; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.5px; }
173
161
  .serve-folder-title svg { width: 12px; height: 12px; opacity: 0.5; }
package/dev-ui/index.html CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  <div class="layout">
25
25
  <aside class="sidebar">
26
- <div class="nav-label">Workspace</div>
26
+ <div class="nav-label">Agents</div>
27
27
  <div class="nav-item active" data-page="agents">
28
28
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="7" rx="2"/><rect x="14" y="3" width="7" height="7" rx="2"/><rect x="3" y="14" width="7" height="7" rx="2"/><rect x="14" y="14" width="7" height="7" rx="2"/></svg>
29
29
  <span>Agents</span>
@@ -95,18 +95,9 @@
95
95
 
96
96
  <div id="serve-picker-section">
97
97
  <div class="serve-section-head">
98
- <div>
99
- <div class="serve-section-title">Workspace</div>
100
- <div class="serve-section-desc">Choose the Vendian workspace that should own this daemon and its local runs.</div>
101
- </div>
102
- <div class="serve-section-meta" id="workspace-summary">Loading workspaces…</div>
103
- </div>
104
- <div id="workspace-picker"></div>
105
-
106
- <div class="serve-section-head" style="margin-top:20px">
107
98
  <div>
108
99
  <div class="serve-section-title">Agents</div>
109
- <div class="serve-section-desc">Pick which local agents this serve session should expose.</div>
100
+ <div class="serve-section-desc">Pick which local agents this Local Lab session should expose.</div>
110
101
  </div>
111
102
  </div>
112
103
  <div class="serve-select-bar" id="serve-select-bar">
package/dev-ui/js/app.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { state, api } from './state.js';
2
2
  import { renderAgents } from './agents.js';
3
3
  import { populateValidateGrid, runValidateAll, triggerValidateAgent } from './validate.js';
4
- import { populateServePicker, toggleAll, startServe, stopServe, setServing, clearLogs, loadWorkspaces } from './serve.js';
4
+ import { populateServePicker, toggleAll, startServe, stopServe, setServing, clearLogs } from './serve.js';
5
5
  import { loadAuth } from './settings.js';
6
6
 
7
7
  // ─── Navigation ───
@@ -20,10 +20,6 @@ window.addEventListener('navigate', (e) => {
20
20
  if (page === 'validate' && path) triggerValidateAgent(path);
21
21
  });
22
22
 
23
- window.addEventListener('auth-changed', () => {
24
- loadWorkspaces();
25
- });
26
-
27
23
  // ─── Load agents ───
28
24
  async function loadAgents() {
29
25
  try {
@@ -96,8 +92,6 @@ document.getElementById('serve-select-bar').addEventListener('click', (e) => {
96
92
  // ─── Init ───
97
93
  loadAgents();
98
94
  loadAuth();
99
- loadWorkspaces();
100
95
  checkStatus();
101
96
  setInterval(checkStatus, 4000);
102
97
  setInterval(loadAgents, 8000);
103
- setInterval(loadWorkspaces, 15000);
@@ -1,80 +1,5 @@
1
1
  import { state, api, esc, groupByFolder, formatTime } from './state.js';
2
2
 
3
- export async function loadWorkspaces() {
4
- state.workspacesLoading = true;
5
- state.workspacesError = '';
6
- renderWorkspacePicker();
7
- try {
8
- const result = await api('/workspaces');
9
- state.workspaces = Array.isArray(result.workspaces) ? result.workspaces : [];
10
- const hasSelected = state.workspaces.some((workspace) => workspace.id === state.selectedWorkspaceId);
11
- if (!hasSelected) {
12
- state.selectedWorkspaceId = state.workspaces[0]?.id || '';
13
- }
14
- if (!result.ok) {
15
- state.workspacesError = result.error || 'Could not load workspaces.';
16
- }
17
- } catch (error) {
18
- state.workspaces = [];
19
- state.selectedWorkspaceId = '';
20
- state.workspacesError = error?.message || 'Could not load workspaces.';
21
- } finally {
22
- state.workspacesLoading = false;
23
- renderWorkspacePicker();
24
- }
25
- }
26
-
27
- export function renderWorkspacePicker() {
28
- const container = document.getElementById('workspace-picker');
29
- const summary = document.getElementById('workspace-summary');
30
- if (!container || !summary) return;
31
-
32
- if (state.workspacesLoading) {
33
- summary.textContent = 'Loading workspaces…';
34
- container.innerHTML = '<div class="workspace-empty">Loading workspaces from Vendian…</div>';
35
- return;
36
- }
37
-
38
- if (state.workspacesError) {
39
- summary.textContent = 'Workspace required';
40
- container.innerHTML = `<div class="workspace-empty workspace-error">${esc(state.workspacesError)}</div>`;
41
- return;
42
- }
43
-
44
- if (!state.workspaces.length) {
45
- summary.textContent = 'No workspace available';
46
- container.innerHTML = '<div class="workspace-empty">Sign in to a Vendian environment to load workspaces.</div>';
47
- return;
48
- }
49
-
50
- const selected = state.workspaces.find((workspace) => workspace.id === state.selectedWorkspaceId) || state.workspaces[0];
51
- if (selected && state.selectedWorkspaceId !== selected.id) {
52
- state.selectedWorkspaceId = selected.id || '';
53
- }
54
- summary.textContent = `${state.workspaces.length} workspace${state.workspaces.length === 1 ? '' : 's'}`;
55
- container.innerHTML = state.workspaces.map((workspace) => {
56
- const selectedClass = workspace.id === state.selectedWorkspaceId ? ' selected' : '';
57
- const slug = workspace.slug && workspace.slug !== workspace.name ? `<div class="workspace-card-slug">${esc(workspace.slug)}</div>` : '';
58
- return `<button type="button" class="workspace-card${selectedClass}" data-workspace-id="${esc(workspace.id)}">
59
- <div class="workspace-card-title-row">
60
- <div>
61
- <div class="workspace-card-title">${esc(workspace.name || workspace.id)}</div>
62
- ${slug}
63
- </div>
64
- <div class="workspace-card-badge">${workspace.id === state.selectedWorkspaceId ? 'Selected' : 'Choose'}</div>
65
- </div>
66
- <div class="workspace-card-id">${esc(workspace.id)}</div>
67
- </button>`;
68
- }).join('');
69
-
70
- container.querySelectorAll('[data-workspace-id]').forEach((button) => {
71
- button.addEventListener('click', () => {
72
- state.selectedWorkspaceId = button.dataset.workspaceId || '';
73
- renderWorkspacePicker();
74
- });
75
- });
76
- }
77
-
78
3
  // ─── Picker ───
79
4
  let userSelections = null; // null = all selected (default), Set = explicit selections
80
5
 
@@ -160,9 +85,8 @@ export function getSelectedPaths() {
160
85
  // ─── Controls ───
161
86
  export async function startServe() {
162
87
  const selected = getSelectedPaths();
163
- if (!state.selectedWorkspaceId) { alert('Choose a workspace before starting local serve.'); return; }
164
88
  if (!selected.length) { alert('Select at least one agent.'); return; }
165
- const body = { collectionId: state.selectedWorkspaceId };
89
+ const body = {};
166
90
  if (selected.length < state.agents.length) {
167
91
  body.agentsDir = commonParent(selected);
168
92
  }
@@ -2,10 +2,6 @@
2
2
  export const state = {
3
3
  agents: [],
4
4
  authData: {},
5
- workspaces: [],
6
- selectedWorkspaceId: '',
7
- workspacesLoading: false,
8
- workspacesError: '',
9
5
  logOffset: 0,
10
6
  pollTimer: null,
11
7
  isServing: false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vendian/cli",
3
- "version": "0.0.43",
3
+ "version": "0.0.45",
4
4
  "description": "Public Vendian CLI bootstrapper and launcher",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,