@burdenoff/microfe-vibecontrols 2026.905.1 → 2026.905.3

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/dist/plugin.js CHANGED
@@ -1,102 +1,84 @@
1
- import { AIAssistantPanel as e } from "./components/assistant/AIAssistantPanel.js";
2
- import "./components/assistant/index.js";
3
- import { Bot as t, BotMessageSquare as n, Terminal as r, Zap as i } from "lucide-react";
4
- import { panelManagerStore as a } from "@burdenoff/fe-libs/chrome/PanelContainer";
1
+ import { Bot as e, BotMessageSquare as t, Terminal as n, Zap as r } from "lucide-react";
5
2
  //#region src/plugin.tsx
6
- var o = "vibecontrols.assistant", s = 420, c = {
3
+ var i = {
7
4
  manifest: {
8
5
  id: "vibecontrols",
9
6
  name: "VibeControls",
10
7
  version: "2026.328.1",
11
8
  description: "Development environment management — agents, sessions, tunnels, vibes",
12
9
  activationEvents: [{ type: "eager" }],
13
- contributes: {
14
- panels: [{
15
- id: o,
10
+ contributes: { commands: [
11
+ {
12
+ id: "vc:go-to-agents",
16
13
  pluginId: "vibecontrols",
17
- title: "AI Assistant",
14
+ label: "Go to Agents",
15
+ description: "View all connected agents",
16
+ icon: e,
17
+ keywords: [
18
+ "agents",
19
+ "vibecontrols",
20
+ "dev"
21
+ ],
22
+ shortcut: "g a",
23
+ section: "VibeControls",
24
+ execute: () => {}
25
+ },
26
+ {
27
+ id: "vc:go-to-vibes",
28
+ pluginId: "vibecontrols",
29
+ label: "Go to Vibes",
30
+ description: "View all vibes (dev environments)",
31
+ icon: r,
32
+ keywords: [
33
+ "vibes",
34
+ "environments",
35
+ "dev"
36
+ ],
37
+ shortcut: "g v",
38
+ section: "VibeControls",
39
+ execute: () => {}
40
+ },
41
+ {
42
+ id: "vc:go-to-sessions",
43
+ pluginId: "vibecontrols",
44
+ label: "Go to Sessions",
45
+ description: "View terminal sessions",
18
46
  icon: n,
19
- position: "right",
20
- component: e,
21
- defaultSize: s,
22
- minSize: 320,
23
- maxSize: 720,
24
- defaultVisible: !1
25
- }],
26
- commands: [
27
- {
28
- id: "vc:go-to-agents",
29
- pluginId: "vibecontrols",
30
- label: "Go to Agents",
31
- description: "View all connected agents",
32
- icon: t,
33
- keywords: [
34
- "agents",
35
- "vibecontrols",
36
- "dev"
37
- ],
38
- shortcut: "g a",
39
- section: "VibeControls",
40
- execute: () => {}
41
- },
42
- {
43
- id: "vc:go-to-vibes",
44
- pluginId: "vibecontrols",
45
- label: "Go to Vibes",
46
- description: "View all vibes (dev environments)",
47
- icon: i,
48
- keywords: [
49
- "vibes",
50
- "environments",
51
- "dev"
52
- ],
53
- shortcut: "g v",
54
- section: "VibeControls",
55
- execute: () => {}
56
- },
57
- {
58
- id: "vc:go-to-sessions",
59
- pluginId: "vibecontrols",
60
- label: "Go to Sessions",
61
- description: "View terminal sessions",
62
- icon: r,
63
- keywords: [
64
- "sessions",
65
- "terminal",
66
- "shell"
67
- ],
68
- section: "VibeControls",
69
- execute: () => {}
70
- },
71
- {
72
- id: "vc:toggle-ai-assistant",
73
- pluginId: "vibecontrols",
74
- label: "Toggle AI Assistant",
75
- description: "Open or close the AI assistant panel",
76
- icon: n,
77
- keywords: [
78
- "ai",
79
- "assistant",
80
- "chat",
81
- "help"
82
- ],
83
- shortcut: "Ctrl+Shift+A",
84
- section: "VibeControls",
85
- execute: () => {}
86
- }
87
- ]
88
- }
47
+ keywords: [
48
+ "sessions",
49
+ "terminal",
50
+ "shell"
51
+ ],
52
+ section: "VibeControls",
53
+ execute: () => {}
54
+ },
55
+ {
56
+ id: "vc:toggle-ai-assistant",
57
+ pluginId: "vibecontrols",
58
+ label: "Toggle AI Assistant",
59
+ description: "Open or close the AI assistant panel",
60
+ icon: t,
61
+ keywords: [
62
+ "ai",
63
+ "assistant",
64
+ "chat",
65
+ "help"
66
+ ],
67
+ shortcut: "Ctrl+Shift+A",
68
+ section: "VibeControls",
69
+ execute: () => {}
70
+ }
71
+ ] }
89
72
  },
90
73
  activate(e) {
91
74
  let t = e.commands.getByPlugin("vibecontrols");
92
75
  for (let n of t) n.id === "vc:go-to-agents" ? n.execute = () => e.shell.navigate("/vibecontrols/agents") : n.id === "vc:go-to-vibes" ? n.execute = () => e.shell.navigate("/vibecontrols/vibes") : n.id === "vc:go-to-sessions" ? n.execute = () => e.shell.navigate("/vibecontrols/sessions") : n.id === "vc:toggle-ai-assistant" && (n.execute = () => {
93
- let e = a.getState();
94
- e.panels[o] || e.initPanel(o, "right", s), a.getState().togglePanel(o);
76
+ window.dispatchEvent(new CustomEvent("vc:toggle-ai-assistant"));
95
77
  });
96
78
  e.events.on("context:workspace-changed", () => {});
97
79
  }
98
80
  };
99
81
  //#endregion
100
- export { c as vibeControlsPlugin };
82
+ export { i as vibeControlsPlugin };
101
83
 
102
84
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","names":[],"sources":["../src/plugin.tsx"],"sourcesContent":["/**\n * VibeControls UI Plugin.\n *\n * Exports the UIPlugin for the VibeControls microfrontend,\n * declaring its contributions to the app shell (navigation, commands,\n * settings, status bar indicators).\n *\n * This is the plugin counterpart to the VibeControlsRoot component.\n * Both can coexist — the Root handles rendering while the plugin\n * handles shell integration.\n *\n * @module @burdenoff/microfe-vibecontrols/plugin\n *\n * @example\n * ```tsx\n * // In vibecontrols-app/src/plugins/index.ts\n * import { vibeControlsPlugin } from '@burdenoff/microfe-vibecontrols/plugin';\n *\n * export const PLUGINS = [vibeControlsPlugin];\n * ```\n */\n\nimport type { UIPlugin } from '@burdenoff/fe-libs/shared/plugins';\nimport { Terminal, Bot, BotMessageSquare, Zap } from 'lucide-react';\n// ★★ This import specifier is LOAD-BEARING. `PanelContainer` re-exports the\n// panel-manager store precisely so external consumers reach the SAME Zustand\n// instance it renders from. Importing `usePanelManagerStore` by any other path\n// resolves to the same file but a DIFFERENT module instance under Vite dev, and\n// every toggle silently no-ops.\nimport { panelManagerStore } from '@burdenoff/fe-libs/chrome/PanelContainer';\nimport { AIAssistantPanel } from './components/assistant';\n\n/**\n * The assistant's panel id, shared by the contribution and the toggle command.\n *\n * ★ One constant, not two string literals: they must match exactly or the\n * command toggles a panel that was never registered — which fails silently,\n * because every mutator in the panel-manager store returns early on an unknown\n * id rather than throwing.\n */\nconst ASSISTANT_PANEL_ID = 'vibecontrols.assistant';\n\n/** Matches the contribution's `defaultSize`; see the toggle command below. */\nconst ASSISTANT_PANEL_SIZE = 420;\n\nexport const vibeControlsPlugin: UIPlugin = {\n manifest: {\n id: 'vibecontrols',\n name: 'VibeControls',\n version: '2026.328.1',\n description: 'Development environment management — agents, sessions, tunnels, vibes',\n activationEvents: [{ type: 'eager' }],\n\n contributes: {\n // Nav items are registered by the app shell (productNav.tsx) and\n // VibeControlsRoot; do not duplicate them here.\n\n /**\n * The AI assistant, mounted into the shell's right panel.\n *\n * ★★ `component` is VibeControls' OWN wrapper, not fe-libs'\n * `AIAssistantPanel` directly. The shared panel is deliberately exported\n * WITHOUT an `AssistantProductProvider` around it — a provider baked in\n * there could only carry one product's modes and page vocabulary, which is\n * exactly the coupling the shared assistant exists to avoid. Our wrapper\n * supplies the provider, the six seam fields and `writeAccess`. Passing\n * the shared panel here would typecheck (its extra props are optional) and\n * then render with no modes and English copy.\n *\n * ★ `pluginId` is required by the type but IGNORED — the runtime\n * overwrites it with the id it registered the plugin under.\n *\n * ★ `icon` is a component REFERENCE, not an element: `BotMessageSquare`,\n * never `<BotMessageSquare />`. It differs from `NavItem.icon`, which is a\n * ReactNode — a genuine inconsistency in the plugin API, and an easy\n * five-minute mistake.\n *\n * ★ `defaultVisible: false` — the assistant opens on demand. Open state is\n * never persisted (the store's `partialize` strips it), so panels always\n * start closed on reload regardless; this just declines the auto-open.\n */\n panels: [\n {\n id: ASSISTANT_PANEL_ID,\n pluginId: 'vibecontrols',\n title: 'AI Assistant',\n icon: BotMessageSquare,\n position: 'right',\n component: AIAssistantPanel,\n defaultSize: ASSISTANT_PANEL_SIZE,\n minSize: 320,\n maxSize: 720,\n defaultVisible: false,\n },\n ],\n\n // Commands for the command palette (Cmd+K)\n commands: [\n {\n id: 'vc:go-to-agents',\n pluginId: 'vibecontrols',\n label: 'Go to Agents',\n description: 'View all connected agents',\n icon: Bot,\n keywords: ['agents', 'vibecontrols', 'dev'],\n shortcut: 'g a',\n section: 'VibeControls',\n execute: () => {\n // Will be wired by shell navigate\n },\n },\n {\n id: 'vc:go-to-vibes',\n pluginId: 'vibecontrols',\n label: 'Go to Vibes',\n description: 'View all vibes (dev environments)',\n icon: Zap,\n keywords: ['vibes', 'environments', 'dev'],\n shortcut: 'g v',\n section: 'VibeControls',\n execute: () => {},\n },\n {\n id: 'vc:go-to-sessions',\n pluginId: 'vibecontrols',\n label: 'Go to Sessions',\n description: 'View terminal sessions',\n icon: Terminal,\n keywords: ['sessions', 'terminal', 'shell'],\n section: 'VibeControls',\n execute: () => {},\n },\n {\n id: 'vc:toggle-ai-assistant',\n pluginId: 'vibecontrols',\n label: 'Toggle AI Assistant',\n description: 'Open or close the AI assistant panel',\n icon: BotMessageSquare,\n keywords: ['ai', 'assistant', 'chat', 'help'],\n shortcut: 'Ctrl+Shift+A',\n section: 'VibeControls',\n execute: () => {},\n },\n ],\n },\n },\n\n activate(ctx) {\n // Wire command navigation to use shell.navigate\n const commands = ctx.commands.getByPlugin('vibecontrols');\n for (const cmd of commands) {\n if (cmd.id === 'vc:go-to-agents') {\n cmd.execute = () => ctx.shell.navigate('/vibecontrols/agents');\n } else if (cmd.id === 'vc:go-to-vibes') {\n cmd.execute = () => ctx.shell.navigate('/vibecontrols/vibes');\n } else if (cmd.id === 'vc:go-to-sessions') {\n cmd.execute = () => ctx.shell.navigate('/vibecontrols/sessions');\n } else if (cmd.id === 'vc:toggle-ai-assistant') {\n /**\n * ★★ This command was DEAD before the assistant became a panel.\n *\n * It dispatched a `vc:toggle-ai-assistant` DOM event for\n * `AssistantPanelContext` to catch — a file that no longer exists in\n * vibecontrols-app, removed when the legacy overlay was deleted as a\n * duplicate of the widget. Nothing listened, so the command and its\n * `Ctrl+Shift+A` shortcut did nothing at all, and said nothing about it.\n *\n * `togglePanel` returns early on an unknown id rather than throwing,\n * and the only caller of `initPanel` is `PanelContainer`'s mount effect.\n * A shortcut pressed before that effect has run would therefore be\n * another silent no-op so initialise first if we have to. Harmless\n * when the container already did it: `initPanel` is keyed by id.\n */\n cmd.execute = () => {\n const store = panelManagerStore.getState();\n if (!store.panels[ASSISTANT_PANEL_ID]) {\n store.initPanel(ASSISTANT_PANEL_ID, 'right', ASSISTANT_PANEL_SIZE);\n }\n // Re-read: initPanel replaced the state we captured above.\n panelManagerStore.getState().togglePanel(ASSISTANT_PANEL_ID);\n };\n }\n }\n\n // Listen for workspace changes to refresh data\n ctx.events.on('context:workspace-changed', () => {\n // Plugin can refresh agent list, session state, etc.\n });\n },\n};\n"],"mappings":";;;;;AAwCA,IAAM,IAAqB,0BAGrB,IAAuB,KAEhB,IAA+B;CAC1C,UAAU;EACR,IAAI;EACJ,MAAM;EACN,SAAS;EACT,aAAa;EACb,kBAAkB,CAAC,EAAE,MAAM,SAAS,CAAC;EAErC,aAAa;GA4BX,QAAQ,CACN;IACE,IAAI;IACJ,UAAU;IACV,OAAO;IACP,MAAM;IACN,UAAU;IACV,WAAW;IACX,aAAa;IACb,SAAS;IACT,SAAS;IACT,gBAAgB;IACjB,CACF;GAGD,UAAU;IACR;KACE,IAAI;KACJ,UAAU;KACV,OAAO;KACP,aAAa;KACb,MAAM;KACN,UAAU;MAAC;MAAU;MAAgB;MAAM;KAC3C,UAAU;KACV,SAAS;KACT,eAAe;KAGhB;IACD;KACE,IAAI;KACJ,UAAU;KACV,OAAO;KACP,aAAa;KACb,MAAM;KACN,UAAU;MAAC;MAAS;MAAgB;MAAM;KAC1C,UAAU;KACV,SAAS;KACT,eAAe;KAChB;IACD;KACE,IAAI;KACJ,UAAU;KACV,OAAO;KACP,aAAa;KACb,MAAM;KACN,UAAU;MAAC;MAAY;MAAY;MAAQ;KAC3C,SAAS;KACT,eAAe;KAChB;IACD;KACE,IAAI;KACJ,UAAU;KACV,OAAO;KACP,aAAa;KACb,MAAM;KACN,UAAU;MAAC;MAAM;MAAa;MAAQ;MAAO;KAC7C,UAAU;KACV,SAAS;KACT,eAAe;KAChB;IACF;GACF;EACF;CAED,SAAS,GAAK;EAEZ,IAAM,IAAW,EAAI,SAAS,YAAY,eAAe;AACzD,OAAK,IAAM,KAAO,EAChB,CAAI,EAAI,OAAO,oBACb,EAAI,gBAAgB,EAAI,MAAM,SAAS,uBAAuB,GACrD,EAAI,OAAO,mBACpB,EAAI,gBAAgB,EAAI,MAAM,SAAS,sBAAsB,GACpD,EAAI,OAAO,sBACpB,EAAI,gBAAgB,EAAI,MAAM,SAAS,yBAAyB,GACvD,EAAI,OAAO,6BAgBpB,EAAI,gBAAgB;GAClB,IAAM,IAAQ,EAAkB,UAAU;AAK1C,GAJK,EAAM,OAAO,MAChB,EAAM,UAAU,GAAoB,SAAS,EAAqB,EAGpE,EAAkB,UAAU,CAAC,YAAY,EAAmB;;AAMlE,IAAI,OAAO,GAAG,mCAAmC,GAE/C;;CAEL"}
1
+ {"version":3,"file":"plugin.js","names":[],"sources":["../src/plugin.tsx"],"sourcesContent":["/**\n * VibeControls UI Plugin.\n *\n * Exports the UIPlugin for the VibeControls microfrontend,\n * declaring its contributions to the app shell (navigation, commands,\n * settings, status bar indicators).\n *\n * This is the plugin counterpart to the VibeControlsRoot component.\n * Both can coexist — the Root handles rendering while the plugin\n * handles shell integration.\n *\n * @module @burdenoff/microfe-vibecontrols/plugin\n *\n * @example\n * ```tsx\n * // In vibecontrols-app/src/plugins/index.ts\n * import { vibeControlsPlugin } from '@burdenoff/microfe-vibecontrols/plugin';\n *\n * export const PLUGINS = [vibeControlsPlugin];\n * ```\n */\n\nimport type { UIPlugin } from '@burdenoff/fe-libs/shared/plugins';\nimport { Terminal, Bot, BotMessageSquare, Zap } from 'lucide-react';\nexport const vibeControlsPlugin: UIPlugin = {\n manifest: {\n id: 'vibecontrols',\n name: 'VibeControls',\n version: '2026.328.1',\n description: 'Development environment management — agents, sessions, tunnels, vibes',\n activationEvents: [{ type: 'eager' }],\n\n contributes: {\n // Nav items are registered by the app shell (productNav.tsx) and\n // VibeControlsRoot; do not duplicate them here.\n\n // Commands for the command palette (Cmd+K)\n commands: [\n {\n id: 'vc:go-to-agents',\n pluginId: 'vibecontrols',\n label: 'Go to Agents',\n description: 'View all connected agents',\n icon: Bot,\n keywords: ['agents', 'vibecontrols', 'dev'],\n shortcut: 'g a',\n section: 'VibeControls',\n execute: () => {\n // Will be wired by shell navigate\n },\n },\n {\n id: 'vc:go-to-vibes',\n pluginId: 'vibecontrols',\n label: 'Go to Vibes',\n description: 'View all vibes (dev environments)',\n icon: Zap,\n keywords: ['vibes', 'environments', 'dev'],\n shortcut: 'g v',\n section: 'VibeControls',\n execute: () => {},\n },\n {\n id: 'vc:go-to-sessions',\n pluginId: 'vibecontrols',\n label: 'Go to Sessions',\n description: 'View terminal sessions',\n icon: Terminal,\n keywords: ['sessions', 'terminal', 'shell'],\n section: 'VibeControls',\n execute: () => {},\n },\n {\n id: 'vc:toggle-ai-assistant',\n pluginId: 'vibecontrols',\n label: 'Toggle AI Assistant',\n description: 'Open or close the AI assistant panel',\n icon: BotMessageSquare,\n keywords: ['ai', 'assistant', 'chat', 'help'],\n shortcut: 'Ctrl+Shift+A',\n section: 'VibeControls',\n execute: () => {},\n },\n ],\n },\n },\n\n activate(ctx) {\n // Wire command navigation to use shell.navigate\n const commands = ctx.commands.getByPlugin('vibecontrols');\n for (const cmd of commands) {\n if (cmd.id === 'vc:go-to-agents') {\n cmd.execute = () => ctx.shell.navigate('/vibecontrols/agents');\n } else if (cmd.id === 'vc:go-to-vibes') {\n cmd.execute = () => ctx.shell.navigate('/vibecontrols/vibes');\n } else if (cmd.id === 'vc:go-to-sessions') {\n cmd.execute = () => ctx.shell.navigate('/vibecontrols/sessions');\n } else if (cmd.id === 'vc:toggle-ai-assistant') {\n /**\n * ★★ Dispatches to `AIAssistantOverlay` in vibecontrols-app.\n *\n * This command was DEAD for a long time: it fired this same event for\n * `AssistantPanelContext`, a shell component deleted when the legacy\n * overlay was removed. Nothing listened, so the command and its\n * Ctrl+Shift+A shortcut did nothing and said nothing about it.\n *\n * The listener now exists again. An event rather than a direct call\n * because the assistant is an overlay owned by the app shell the MFE\n * has no handle on it, and should not need one.\n */\n cmd.execute = () => {\n window.dispatchEvent(new CustomEvent('vc:toggle-ai-assistant'));\n };\n }\n }\n\n // Listen for workspace changes to refresh data\n ctx.events.on('context:workspace-changed', () => {\n // Plugin can refresh agent list, session state, etc.\n });\n },\n};\n"],"mappings":";;AAwBA,IAAa,IAA+B;CAC1C,UAAU;EACR,IAAI;EACJ,MAAM;EACN,SAAS;EACT,aAAa;EACb,kBAAkB,CAAC,EAAE,MAAM,SAAS,CAAC;EAErC,aAAa,EAKX,UAAU;GACR;IACE,IAAI;IACJ,UAAU;IACV,OAAO;IACP,aAAa;IACb,MAAM;IACN,UAAU;KAAC;KAAU;KAAgB;KAAM;IAC3C,UAAU;IACV,SAAS;IACT,eAAe;IAGhB;GACD;IACE,IAAI;IACJ,UAAU;IACV,OAAO;IACP,aAAa;IACb,MAAM;IACN,UAAU;KAAC;KAAS;KAAgB;KAAM;IAC1C,UAAU;IACV,SAAS;IACT,eAAe;IAChB;GACD;IACE,IAAI;IACJ,UAAU;IACV,OAAO;IACP,aAAa;IACb,MAAM;IACN,UAAU;KAAC;KAAY;KAAY;KAAQ;IAC3C,SAAS;IACT,eAAe;IAChB;GACD;IACE,IAAI;IACJ,UAAU;IACV,OAAO;IACP,aAAa;IACb,MAAM;IACN,UAAU;KAAC;KAAM;KAAa;KAAQ;KAAO;IAC7C,UAAU;IACV,SAAS;IACT,eAAe;IAChB;GACF,EACF;EACF;CAED,SAAS,GAAK;EAEZ,IAAM,IAAW,EAAI,SAAS,YAAY,eAAe;AACzD,OAAK,IAAM,KAAO,EAChB,CAAI,EAAI,OAAO,oBACb,EAAI,gBAAgB,EAAI,MAAM,SAAS,uBAAuB,GACrD,EAAI,OAAO,mBACpB,EAAI,gBAAgB,EAAI,MAAM,SAAS,sBAAsB,GACpD,EAAI,OAAO,sBACpB,EAAI,gBAAgB,EAAI,MAAM,SAAS,yBAAyB,GACvD,EAAI,OAAO,6BAapB,EAAI,gBAAgB;AAClB,UAAO,cAAc,IAAI,YAAY,yBAAyB,CAAC;;AAMrE,IAAI,OAAO,GAAG,mCAAmC,GAE/C;;CAEL"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-vibecontrols",
3
- "version": "2026.905.1",
3
+ "version": "2026.905.3",
4
4
  "description": "VibeControls microfrontend for Burdenoff products",
5
5
  "type": "module",
6
6
  "files": [