@estebanforge/pi-antigravity-bridge 1.7.13 → 1.8.0

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/CHANGELOG.md CHANGED
@@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.8.0] - 2026-10-12
8
+
9
+ ### Changed
10
+ - The `/agy` settings picker now renders on the shared `@estebanforge/pi-tui-dialogs` framed dialog kit instead of the bare pi-tui `SettingsList`: bordered rows, a help panel per setting, type-to-search, and the config file path under the title. Same eleven rows, same stage-then-save-on-close behavior.
11
+
7
12
  ## [1.7.13] - 2026-10-12
8
13
 
9
14
  ### Changed
@@ -26,14 +26,9 @@ import {
26
26
  createBashToolDefinition,
27
27
  createEditToolDefinition,
28
28
  createWriteToolDefinition,
29
- getSettingsListTheme,
30
29
  } from "@earendil-works/pi-coding-agent";
31
- import {
32
- Container,
33
- SettingsList,
34
- Text,
35
- type SettingItem,
36
- } from "@earendil-works/pi-tui";
30
+ import { Text } from "@earendil-works/pi-tui";
31
+ import { DIALOG_OPTIONS, DialogMenu, type DialogRow } from "@estebanforge/pi-tui-dialogs";
37
32
  import {
38
33
  entriesFromRaw,
39
34
  FALLBACK_MODELS,
@@ -1806,7 +1801,7 @@ async function openAgyPicker(ui: ExtensionUIContext, ctx: AgyCommandCtx): Promis
1806
1801
  const config = loadConfig();
1807
1802
  const pending: PendingConfig = {};
1808
1803
 
1809
- const items: SettingItem[] = [
1804
+ const rows: DialogRow[] = [
1810
1805
  {
1811
1806
  id: "mode",
1812
1807
  label: "Execution mode",
@@ -1897,53 +1892,55 @@ async function openAgyPicker(ui: ExtensionUIContext, ctx: AgyCommandCtx): Promis
1897
1892
  },
1898
1893
  ];
1899
1894
 
1900
- await ui.custom((tui, theme, _kb, done) => {
1901
- const container = new Container();
1902
- container.addChild(
1903
- new Text(theme.fg("accent", theme.bold("Antigravity provider")), 1, 1),
1904
- );
1905
- const settingsList = new SettingsList(
1906
- items,
1907
- Math.min(items.length + 4, 15),
1908
- getSettingsListTheme(),
1909
- (id, newValue) => {
1910
- if (id === "mode") {
1911
- pending.mode = newValue as AgyMode;
1912
- } else if (id === "readonly") {
1913
- pending.readOnly = newValue === "on";
1914
- } else if (id === "permissions") {
1915
- pending.skipPermissions = newValue === "auto-approved";
1916
- } else if (id === "model") {
1917
- pending.defaultModel = newValue;
1918
- } else if (id === "thinking") {
1919
- pending.defaultThinking = newValue as ThinkingTier;
1920
- } else if (id === "ask") {
1921
- pending.askTool = newValue === "on";
1922
- } else if (id === "web") {
1923
- pending.webTools = newValue === "on";
1924
- } else if (id === "bridge") {
1925
- pending.bridgeTools = newValue as BridgeTools;
1926
- } else if (id === "turn-cap") {
1927
- pending.turnTimeoutMin = Number(newValue);
1928
- } else if (id === "digest") {
1929
- pending.digest = newValue === "on";
1930
- } else if (id === "system-prompt") {
1931
- pending.systemPrompt = newValue === "on";
1932
- }
1933
- },
1934
- () => done(undefined),
1935
- );
1936
- container.addChild(settingsList);
1937
-
1938
- return {
1939
- render: (w: number) => container.render(w),
1940
- invalidate: () => container.invalidate(),
1941
- handleInput: (data: string) => {
1942
- settingsList.handleInput?.(data);
1943
- tui.requestRender();
1944
- },
1945
- };
1946
- });
1895
+ await ui.custom<void>(
1896
+ (host, theme, _kb, done) => {
1897
+ const menu = new DialogMenu(
1898
+ host,
1899
+ theme,
1900
+ {
1901
+ title: "Antigravity provider",
1902
+ subtitle: `Config file: ${CONFIG_PATH} — changes save when the dialog closes`,
1903
+ rows,
1904
+ footer: "↑↓ navigate · Enter/Space cycle · Type to search · Esc close",
1905
+ onChange: (id, newValue) => {
1906
+ if (id === "mode") {
1907
+ pending.mode = newValue as AgyMode;
1908
+ } else if (id === "readonly") {
1909
+ pending.readOnly = newValue === "on";
1910
+ } else if (id === "permissions") {
1911
+ pending.skipPermissions = newValue === "auto-approved";
1912
+ } else if (id === "model") {
1913
+ pending.defaultModel = newValue;
1914
+ } else if (id === "thinking") {
1915
+ pending.defaultThinking = newValue as ThinkingTier;
1916
+ } else if (id === "ask") {
1917
+ pending.askTool = newValue === "on";
1918
+ } else if (id === "web") {
1919
+ pending.webTools = newValue === "on";
1920
+ } else if (id === "bridge") {
1921
+ pending.bridgeTools = newValue as BridgeTools;
1922
+ } else if (id === "turn-cap") {
1923
+ pending.turnTimeoutMin = Number(newValue);
1924
+ } else if (id === "digest") {
1925
+ pending.digest = newValue === "on";
1926
+ } else if (id === "system-prompt") {
1927
+ pending.systemPrompt = newValue === "on";
1928
+ }
1929
+ },
1930
+ },
1931
+ () => done(),
1932
+ );
1933
+ return {
1934
+ render: (w: number) => menu.render(w),
1935
+ invalidate: () => menu.invalidate(),
1936
+ handleInput: (data: string) => {
1937
+ menu.handleInput(data);
1938
+ host.requestRender();
1939
+ },
1940
+ };
1941
+ },
1942
+ DIALOG_OPTIONS,
1943
+ );
1947
1944
 
1948
1945
  if (Object.keys(pending).length === 0) return;
1949
1946
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@estebanforge/pi-antigravity-bridge",
3
- "version": "1.7.13",
3
+ "version": "1.8.0",
4
4
  "description": "Gemini provider for Pi on the Antigravity ACP server (official Google ACP) or the stream-json agy CLI. Use antigravity/* models in Pi. Full /model picker support. Models runs Pi's tools. ToS safe to use.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -55,6 +55,7 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@estebanforge/pi-ask-shared": "^0.1.2",
58
+ "@estebanforge/pi-tui-dialogs": "^0.1.1",
58
59
  "@modelcontextprotocol/sdk": "^1.29.0"
59
60
  }
60
61
  }