privateboard 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "privateboard",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "PrivateBoard · your private board meeting, on call. Local-first, multi-agent thinking amplifier.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -238,7 +238,7 @@
238
238
  <div class="lock-icon">▰</div>
239
239
  <div class="lock-text">
240
240
  in-room notes are private to each thinker.
241
- <a href="prototype-dashboard.html" class="lock-link">sign in →</a>
241
+ <a href="/" class="lock-link">sign in →</a>
242
242
  to see what they have said and where their stance shifted.
243
243
  </div>
244
244
  </div>
@@ -248,8 +248,8 @@
248
248
  <footer class="agent-card-foot">
249
249
  <div class="meta private-only">tenure · <span class="lime agent-tenure"></span></div>
250
250
  <div class="meta public-only">first room · <span class="lime">free</span></div>
251
- <a href="prototype-dashboard.html#convene" class="agent-card-cta private-only">[ ◆ Convene with them ]</a>
252
- <a href="prototype-dashboard.html#convene" class="agent-card-cta public-only">[ → Sign in to convene ]</a>
251
+ <a href="/#convene" class="agent-card-cta private-only">[ ◆ Convene with them ]</a>
252
+ <a href="/#convene" class="agent-card-cta public-only">[ → Sign in to convene ]</a>
253
253
  </footer>
254
254
  </div>
255
255
  </div>
@@ -1063,7 +1063,8 @@
1063
1063
  cursor: pointer;
1064
1064
  transition: background 0.1s;
1065
1065
  }
1066
- .ap-id-menu-item:last-child { border-bottom: none; }
1066
+ .ap-id-menu-item:last-child,
1067
+ .ap-id-menu-item:has(+ .ap-id-menu-divider) { border-bottom: none; }
1067
1068
  .ap-id-menu-item:hover { background: var(--panel-2); }
1068
1069
  .ap-id-menu-mark { font-family: var(--mono); font-size: 11px; color: var(--lime); }
1069
1070
  /* Disabled state · used for the chair's locked-avatar row. Looks like
@@ -1315,7 +1316,7 @@
1315
1316
  }
1316
1317
 
1317
1318
  /* ─── Skills v2 · uploaded Skill.md files ────────────────────────────
1318
- Replaces the prototype inventory grid. Pattern · radar at top,
1319
+ Replaces the legacy inventory grid. Pattern · radar at top,
1319
1320
  per-skill rows below, drop-zone at the foot. PRD: docs/PRD-skills.md. */
1320
1321
  .ap-skills-v2 {
1321
1322
  display: flex;
@@ -1977,7 +1978,7 @@
1977
1978
  /* Popover — anchored under the trigger. Mirrors the room composer's
1978
1979
  .cmp-dd-pop dropdown: tight rows, mono micro-type hint inline with
1979
1980
  the label, provider section headers, hairline scrollbar. One
1980
- coherent dropdown vocabulary across the prototype. */
1981
+ coherent dropdown vocabulary across the app. */
1981
1982
  .ap-model-picker {
1982
1983
  position: fixed;
1983
1984
  z-index: 9100;
@@ -2813,7 +2814,7 @@
2813
2814
 
2814
2815
  .ap-memory-row.editing .ap-memory-actions { visibility: hidden; }
2815
2816
 
2816
- /* ─── Memory · legacy prototype tile gallery (kept for callers
2817
+ /* ─── Memory · legacy tile gallery (kept for callers
2817
2818
  that still pass `p.memory` shape). v1 profiles render the
2818
2819
  .ap-memory list above and never enter this block. */
2819
2820
  .ap-memory-gallery {
@@ -605,7 +605,7 @@
605
605
 
606
606
  function renderMetrics(p, slug) {
607
607
  const m = p.metrics || {};
608
- // Real model takes precedence over the prototype's hardcoded value.
608
+ // Real (live) model takes precedence over any hardcoded fallback.
609
609
  const model = liveModelFor(slug) || m.model || { name: "—", deck: "" };
610
610
  const cell = (lbl, vHTML, opts) => `
611
611
  <div class="cell">
@@ -1209,7 +1209,7 @@
1209
1209
  }
1210
1210
 
1211
1211
  /* ─── Skills v2 · uploaded Skill.md files ────────────────────────────
1212
- Replaces the prototype localStorage skill grid. Skills are real,
1212
+ Replaces the legacy localStorage skill grid. Skills are real,
1213
1213
  server-persisted, and feed both the ability radar and the Pass-1
1214
1214
  orchestrator router. PRD: docs/PRD-skills.md. */
1215
1215
 
@@ -2378,6 +2378,7 @@
2378
2378
  // through under the room view.
2379
2379
  if (v.reports) v.reports.setAttribute("hidden", "");
2380
2380
  document.querySelectorAll(".agent-row.active").forEach((r) => r.classList.remove("active"));
2381
+ currentlyOpenSlug = null;
2381
2382
  }
2382
2383
 
2383
2384
  /** Build a minimal profile object from a live /api/agents record so
@@ -2423,7 +2424,15 @@
2423
2424
  };
2424
2425
  }
2425
2426
 
2427
+ // Track the currently-open profile so other modules (user-settings)
2428
+ // can ask us to re-fetch skill state after they mutate keys. Without
2429
+ // this, the web-search toggle row keeps its `data-key-configured="0"`
2430
+ // attribute baked from the first render and the user gets the
2431
+ // "configure key" prompt forever after they actually configured it.
2432
+ let currentlyOpenSlug = null;
2433
+
2426
2434
  function open(slug) {
2435
+ currentlyOpenSlug = slug;
2427
2436
  let p = PROFILES[slug];
2428
2437
  // Live agent record (DB row · includes seeded directors too,
2429
2438
  // since they live in the agents table). Custom directors created
@@ -3320,6 +3329,13 @@
3320
3329
 
3321
3330
  window.openAgentProfile = open;
3322
3331
  window.closeAgentProfile = showRoom;
3332
+ // Re-fetch the open profile's skills (incl. per-skill keyConfigured
3333
+ // flags) so the web-search toggle row's cached `data-key-configured`
3334
+ // refreshes after the user adds a key in Preferences. No-op when no
3335
+ // profile is currently open.
3336
+ window.refreshAgentProfileSkills = function () {
3337
+ if (currentlyOpenSlug) loadSkillsForV2(currentlyOpenSlug);
3338
+ };
3323
3339
 
3324
3340
  if (document.readyState === "loading") {
3325
3341
  document.addEventListener("DOMContentLoaded", init);