@enigmax/dashboard 0.1.54 → 0.1.56

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 (2) hide show
  1. package/assets/index.html +15 -13
  2. package/package.json +1 -1
package/assets/index.html CHANGED
@@ -2644,7 +2644,11 @@ export {
2644
2644
  }
2645
2645
 
2646
2646
  function memoryRow(g) {
2647
- const apps = (g.agents || []).map((a) => '<span class="tag">' + esc(a.label) + "</span>").join(" ");
2647
+ // Apps are shown as brand logos (see AGENT_ICONS), never text - the label is the tooltip.
2648
+ const apps = '<span class="aicons">' + (g.agents || []).map((a) => {
2649
+ const ic = agentSvg(a.name);
2650
+ return ic ? '<span class="aicon" title="' + esc(a.label) + '" aria-label="' + esc(a.label) + '">' + ic + "</span>" : esc(a.label);
2651
+ }).join("") + "</span>";
2648
2652
  const state = !g.deployed ? '<span class="tag">not deployed</span>'
2649
2653
  : g.edited ? '<span class="tag exp">edited</span>'
2650
2654
  : g.managed ? '<span class="tag meas">managed</span>' : '<span class="tag">custom</span>';
@@ -2888,16 +2892,16 @@ export {
2888
2892
  let skillScope = "global"; // "global" | "project" - the same rows render in both
2889
2893
  function skillRow(s) {
2890
2894
  const ver = s.version ? '<span class="tag">v' + esc(s.version) + "</span>" : "";
2891
- // Project scope: same row, but the per-app chips toggle deployment INTO this project
2892
- // (data-pskill, handled by the scope delegate) and the global-only controls are hidden.
2895
+ // Project scope: same row, but policy skills are managed globally - the per-app chips are
2896
+ // read-only here (show presence only) and the global-only controls are hidden.
2893
2897
  if (skillScope === "project") {
2894
- const chips = (s.agentStates || []).map((a) => {
2895
- // An app that is not installed on this machine can't be a deploy target - show
2896
- // its chip disabled rather than letting a click create a dir for an unused agent.
2897
- if (a.installed === false) return '<button type="button" class="achip" disabled aria-label="' + esc(a.label) + '" title="' + esc(a.label) + ' - not installed">' + (agentSvg(a.name) || esc(a.label)) + "</button>";
2898
- return '<button type="button" class="achip' + (a.deployed ? " on" : "") + '" data-pskill="' + esc(s.name) + '" data-pagent="' + esc(a.name) + '" data-poff="' + (a.deployed ? 1 : 0) + '" aria-label="' + esc(a.label) + '" title="'
2899
- + (a.deployed ? esc(a.label) + " - deployed, click to remove" : esc(a.label) + " - not deployed, click to deploy") + '">' + (agentSvg(a.name) || esc(a.label)) + "</button>";
2900
- }).join("");
2898
+ // Policy (enigma) skills are managed at GLOBAL scope - deploying one per-project is
2899
+ // redundant (an agent reads both global and project skills). So in project scope the
2900
+ // per-app chips are READ-ONLY: they show where the skill is present but never toggle
2901
+ // (no data-pskill). Switch Scope to Global to enable/disable a policy skill.
2902
+ const chips = (s.agentStates || []).map((a) =>
2903
+ '<button type="button" class="achip' + (a.deployed ? " on" : "") + '" disabled aria-label="' + esc(a.label) + '" title="'
2904
+ + esc(a.label) + (a.installed === false ? " - not installed" : " - policy skills are managed at Global scope") + '">' + (agentSvg(a.name) || esc(a.label)) + "</button>").join("");
2901
2905
  return '<div class="set-row"><div class="set-meta"><div class="set-name">' + esc(s.name) + ver + "</div>"
2902
2906
  + '<div class="set-hint">' + esc(s.description || "") + "</div>"
2903
2907
  + '<div class="set-agents">' + (chips || '<span class="tag">no agents</span>') + "</div></div></div>";
@@ -2958,7 +2962,7 @@ export {
2958
2962
  '<div class="panel"><div class="set-cat-h">Auto-detect skills by stack</div>'
2959
2963
  + '<div class="set-cat-b">Scan this project (packages, config files, gems) and install the matching community skills for its stack - hash-verified and kept separate from the policy skills below.</div>'
2960
2964
  + '<div class="ladd"><button type="button" class="toggle on with-icon" data-proj-autoskills><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m21 21-4.3-4.3"/></svg>Detect skills</button></div></div>'
2961
- + section("Policy skills", "Deploy enigma's policy skills into this project, per app. A green chip means the skill is in that app's project folder.", skills, "No skills.");
2965
+ + section("Policy skills", "enigma's policy skills are managed at Global scope (an agent reads them in every project). Shown here read-only - a green app logo means the skill is also present in this project's folder. Switch Scope to Global to enable or disable a policy skill.", skills, "No skills.");
2962
2966
  return;
2963
2967
  }
2964
2968
  const enigma = skills.filter((s) => s.source === "enigma");
@@ -3568,8 +3572,6 @@ export {
3568
3572
  function onProjectControlClick(e) {
3569
3573
  if (!isProjectScope()) return;
3570
3574
  if (e.target.closest("[data-proj-autoskills]")) { autoskillsFlow(); return; }
3571
- const chip = e.target.closest("[data-pskill]"); // per-app deploy chip in the Skills view
3572
- if (chip) { projAction({ op: "skill", name: chip.dataset.pskill, agent: chip.dataset.pagent, on: chip.dataset.poff !== "1" }); return; }
3573
3575
  const sk = e.target.closest("[data-proj-skill]");
3574
3576
  if (sk) { projAction({ op: "skill", name: sk.dataset.projSkill, on: sk.dataset.on !== "1" }); return; }
3575
3577
  const cb = e.target.closest("[data-proj-cfg-bool]");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enigmax/dashboard",
3
- "version": "0.1.54",
3
+ "version": "0.1.56",
4
4
  "description": "Local browser dashboard UI for enigma: the static page and chart assets enigma serves on its loopback dashboard (savings, real tool usage, in-browser settings). Installed on demand by enigma-cli; not a runtime dependency.",
5
5
  "type": "module",
6
6
  "files": [