@estebanforge/pi-ask-antigravity 1.2.12 → 1.3.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
@@ -2,6 +2,19 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [Unreleased]
6
+
7
+ ## [1.3.0] - 2026-10-12
8
+
9
+ ### Changed
10
+ - Settings dialog 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 three rows, same stage-then-save-on-close behavior.
11
+
12
+ ## [1.2.13] - 2026-10-12
13
+
14
+ ### Changed
15
+
16
+ - Default `timeoutMinutes` is now 30 (was 10). Delegations carry feedback, research, review, and analysis work that legitimately runs long; a short default kills the run mid-task and the caller re-pays the whole prompt at a higher timeout. Callers still override per call, lower or higher.
17
+
5
18
  ## [1.2.12] - 2026-10-10
6
19
 
7
20
  ### Added
package/README.md CHANGED
@@ -113,7 +113,7 @@ Interactive picker for the default model and default thinking. If the project co
113
113
  | `mode` | no | `plan` (review-shaped; not enforced, see the modes table) or `accept-edits` (agy applies edits, default). |
114
114
  | `digest` | no | Prefix the prompt with `(Use compact digests, not full file contents.)`. Defaults on for `plan`, off for `accept-edits`. |
115
115
  | `conversationId` | no | Omit for a one-shot (agy starts fresh). Pass the id from a prior call's result (`details.conversationId`) to resume that agy conversation with full context. See [Two modes](#two-modes-one-shot-vs-continued-conversation). |
116
- | `timeoutMinutes` | no | Hard cap on the agy run in minutes. Default 10. Above 0, at most 35791 (fractional minutes allowed). The prompt carries a matching `[TIME BUDGET]` notice; rejected values return a tool error without spawning. |
116
+ | `timeoutMinutes` | no | Hard cap on the agy run in minutes. Default 30. Above 0, at most 35791 (fractional minutes allowed). The prompt carries a matching `[TIME BUDGET]` notice; rejected values return a tool error without spawning. |
117
117
 
118
118
  ## Environment
119
119
 
@@ -37,12 +37,12 @@ import {
37
37
  type AgentToolResult,
38
38
  buildSessionContext,
39
39
  getAgentDir,
40
- getSettingsListTheme,
41
40
  keyHint,
42
41
  type ExtensionAPI,
43
42
  } from "@earendil-works/pi-coding-agent";
44
43
 
45
- import { Container, SettingsList, Text, type SettingItem } from "@earendil-works/pi-tui";
44
+ import { Text } from "@earendil-works/pi-tui";
45
+ import { DIALOG_OPTIONS, DialogMenu, type DialogRow } from "@estebanforge/pi-tui-dialogs";
46
46
  import { contentText } from "@earendil-works/pi-ai";
47
47
  import { Type } from "typebox";
48
48
  import {
@@ -81,7 +81,10 @@ import {
81
81
 
82
82
  // --- Constants -------------------------------------------------------------
83
83
 
84
- const DEFAULT_TIMEOUT_MIN = 10;
84
+ // Feedback, research, review, and analysis delegations legitimately run
85
+ // long; a short default kills the run mid-task and the caller re-pays the
86
+ // whole prompt at a higher timeout. Callers opt down per call.
87
+ const DEFAULT_TIMEOUT_MIN = 30;
85
88
  const STATUS_INTERVAL_MS = 1000;
86
89
  const STATUS_TAIL_CHARS = 160;
87
90
  const DISCOVERY_TIMEOUT_MS = 8_000;
@@ -101,7 +104,7 @@ const DEFAULT_SKIP_PERMISSIONS = true;
101
104
  // Per-family fallback tier, the pi->agy tier clamp (levelToTier), the static
102
105
  // alias overlay, and the line grammar now live in the shared peer adapter
103
106
  // (pi-ask-shared peers/antigravity.ts) alongside the argv builder and the
104
- // conversation-discovery technique, so pi-antigravity-bridge and pi-unblock
107
+ // conversation-discovery technique, so pi-antigravity-bridge and pi-peer-review
105
108
  // reuse the exact same resolution contract.
106
109
 
107
110
  // Mode = which agy tool-loop policy to apply. Distinct from the alias layer.
@@ -188,7 +191,7 @@ function saveConfig(patch: Partial<Config>): SaveResult {
188
191
  // --- Prompt assembly: shared peer adapter ----------------------------------
189
192
  // The plan-mode guards (PLAN_HEADLESS_GUARD / AGENT_REVIEW_GUARD) and the
190
193
  // prompt assembler (buildFinalPrompt) live in pi-ask-shared
191
- // (peers/antigravity.ts) so the bridge's ask-tool and pi-unblock consults
194
+ // (peers/antigravity.ts) so the bridge's ask-tool and pi-peer-review consults
192
195
  // inherit the identical guard discipline.
193
196
  export { AGENT_REVIEW_GUARD, PLAN_HEADLESS_GUARD } from "@estebanforge/pi-ask-shared";
194
197
 
@@ -778,7 +781,7 @@ export default async function (pi: ExtensionAPI) {
778
781
  const currentResolved =
779
782
  resolveAgyModel(config.defaultModel, discovered, config.defaultThinking)?.model ?? config.defaultModel;
780
783
 
781
- const items: SettingItem[] = [
784
+ const rows: DialogRow[] = [
782
785
  {
783
786
  id: "defaultModel",
784
787
  label: "Default model",
@@ -810,40 +813,41 @@ export default async function (pi: ExtensionAPI) {
810
813
 
811
814
  const pending: Partial<Config> = {};
812
815
 
813
- await ctx.ui.custom((tui, theme, _kb, done) => {
814
- const container = new Container();
815
- container.addChild(
816
- new Text(theme.fg("accent", theme.bold("AskAntigravity defaults")), 1, 1),
817
- );
818
-
819
- const settingsList = new SettingsList(
820
- items,
821
- Math.min(items.length + 4, 15),
822
- getSettingsListTheme(),
823
- (id, newValue) => {
824
- if (id === "defaultModel") {
825
- // Value is "alias → resolved"; keep the alias part.
826
- const alias = newValue.split("→")[0].trim();
827
- pending.defaultModel = alias;
828
- } else if (id === "defaultThinking") {
829
- pending.defaultThinking = newValue as ThinkingTier;
830
- } else if (id === "permissions") {
831
- pending.skipPermissions = newValue === "auto-approved";
832
- }
833
- },
834
- () => done(undefined),
835
- );
836
- container.addChild(settingsList);
837
-
838
- return {
839
- render: (w: number) => container.render(w),
840
- invalidate: () => container.invalidate(),
841
- handleInput: (data: string) => {
842
- settingsList.handleInput?.(data);
843
- tui.requestRender();
844
- },
845
- };
846
- });
816
+ await ctx.ui.custom<void>(
817
+ (host, theme, _kb, done) => {
818
+ const menu = new DialogMenu(
819
+ host,
820
+ theme,
821
+ {
822
+ title: "AskAntigravity defaults",
823
+ subtitle: `Project file: ${path.join(getAgentDir(), "ask-antigravity.json")} — changes save when the dialog closes`,
824
+ rows,
825
+ footer: "↑↓ navigate · Enter/Space cycle · Type to search · Esc close",
826
+ onChange: (id, newValue) => {
827
+ if (id === "defaultModel") {
828
+ // Value is "alias → resolved"; keep the alias part.
829
+ const alias = newValue.split("→")[0].trim();
830
+ pending.defaultModel = alias;
831
+ } else if (id === "defaultThinking") {
832
+ pending.defaultThinking = newValue as ThinkingTier;
833
+ } else if (id === "permissions") {
834
+ pending.skipPermissions = newValue === "auto-approved";
835
+ }
836
+ },
837
+ },
838
+ () => done(),
839
+ );
840
+ return {
841
+ render: (w: number) => menu.render(w),
842
+ invalidate: () => menu.invalidate(),
843
+ handleInput: (data: string) => {
844
+ menu.handleInput(data);
845
+ host.requestRender();
846
+ },
847
+ };
848
+ },
849
+ DIALOG_OPTIONS,
850
+ );
847
851
 
848
852
  if (Object.keys(pending).length === 0) return;
849
853
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@estebanforge/pi-ask-antigravity",
3
- "version": "1.2.12",
3
+ "version": "1.3.0",
4
4
  "description": "Pi tool that delegates a self-contained sub-task to Google Antigravity's agy CLI (the CLI for Gemini). Friendly model aliases (flash/pro/gemini), configurable default model + thinking, and the AskAntigravity delegation tool.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -28,7 +28,8 @@
28
28
  },
29
29
  "type": "module",
30
30
  "dependencies": {
31
- "@estebanforge/pi-ask-shared": "^0.1.2"
31
+ "@estebanforge/pi-ask-shared": "^0.1.2",
32
+ "@estebanforge/pi-tui-dialogs": "^0.1.1"
32
33
  },
33
34
  "files": [
34
35
  "extensions",