@kenkaiiii/ggcoder 4.3.204 → 4.3.206

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 (183) hide show
  1. package/dist/cli.js +38 -26
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.js +2 -2
  4. package/dist/core/compaction/compactor.d.ts.map +1 -1
  5. package/dist/core/compaction/compactor.js +6 -0
  6. package/dist/core/compaction/compactor.js.map +1 -1
  7. package/dist/core/compaction/compactor.test.js +16 -0
  8. package/dist/core/compaction/compactor.test.js.map +1 -1
  9. package/dist/core/goal-controller.d.ts +57 -0
  10. package/dist/core/goal-controller.d.ts.map +1 -0
  11. package/dist/core/goal-controller.js +285 -0
  12. package/dist/core/goal-controller.js.map +1 -0
  13. package/dist/core/goal-controller.test.d.ts +2 -0
  14. package/dist/core/goal-controller.test.d.ts.map +1 -0
  15. package/dist/core/goal-controller.test.js +377 -0
  16. package/dist/core/goal-controller.test.js.map +1 -0
  17. package/dist/core/goal-lifecycle-smoke.test.d.ts +2 -0
  18. package/dist/core/goal-lifecycle-smoke.test.d.ts.map +1 -0
  19. package/dist/core/goal-lifecycle-smoke.test.js +207 -0
  20. package/dist/core/goal-lifecycle-smoke.test.js.map +1 -0
  21. package/dist/core/goal-store.d.ts +164 -0
  22. package/dist/core/goal-store.d.ts.map +1 -0
  23. package/dist/core/goal-store.js +721 -0
  24. package/dist/core/goal-store.js.map +1 -0
  25. package/dist/core/goal-store.test.d.ts +2 -0
  26. package/dist/core/goal-store.test.d.ts.map +1 -0
  27. package/dist/core/goal-store.test.js +341 -0
  28. package/dist/core/goal-store.test.js.map +1 -0
  29. package/dist/core/goal-verifier.d.ts +17 -0
  30. package/dist/core/goal-verifier.d.ts.map +1 -0
  31. package/dist/core/goal-verifier.js +84 -0
  32. package/dist/core/goal-verifier.js.map +1 -0
  33. package/dist/core/goal-verifier.test.d.ts +2 -0
  34. package/dist/core/goal-verifier.test.d.ts.map +1 -0
  35. package/dist/core/goal-verifier.test.js +88 -0
  36. package/dist/core/goal-verifier.test.js.map +1 -0
  37. package/dist/core/goal-worker.d.ts +47 -0
  38. package/dist/core/goal-worker.d.ts.map +1 -0
  39. package/dist/core/goal-worker.js +329 -0
  40. package/dist/core/goal-worker.js.map +1 -0
  41. package/dist/core/goal-worker.test.d.ts +2 -0
  42. package/dist/core/goal-worker.test.d.ts.map +1 -0
  43. package/dist/core/goal-worker.test.js +206 -0
  44. package/dist/core/goal-worker.test.js.map +1 -0
  45. package/dist/core/oauth/gemini.d.ts.map +1 -1
  46. package/dist/core/oauth/gemini.js +138 -30
  47. package/dist/core/oauth/gemini.js.map +1 -1
  48. package/dist/core/oauth/gemini.test.d.ts +2 -0
  49. package/dist/core/oauth/gemini.test.d.ts.map +1 -0
  50. package/dist/core/oauth/gemini.test.js +154 -0
  51. package/dist/core/oauth/gemini.test.js.map +1 -0
  52. package/dist/core/prompt-commands.d.ts.map +1 -1
  53. package/dist/core/prompt-commands.js +124 -0
  54. package/dist/core/prompt-commands.js.map +1 -1
  55. package/dist/core/prompt-commands.test.js +36 -0
  56. package/dist/core/prompt-commands.test.js.map +1 -1
  57. package/dist/core/repomap.js +2 -0
  58. package/dist/core/repomap.js.map +1 -1
  59. package/dist/core/repomap.test.js +18 -0
  60. package/dist/core/repomap.test.js.map +1 -1
  61. package/dist/index.d.ts +1 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +1 -1
  64. package/dist/index.js.map +1 -1
  65. package/dist/interactive.d.ts.map +1 -1
  66. package/dist/interactive.js +20 -11
  67. package/dist/interactive.js.map +1 -1
  68. package/dist/system-prompt.d.ts.map +1 -1
  69. package/dist/system-prompt.js +18 -50
  70. package/dist/system-prompt.js.map +1 -1
  71. package/dist/system-prompt.test.js +124 -1
  72. package/dist/system-prompt.test.js.map +1 -1
  73. package/dist/tools/edit-diff.d.ts.map +1 -1
  74. package/dist/tools/edit-diff.js +71 -32
  75. package/dist/tools/edit-diff.js.map +1 -1
  76. package/dist/tools/edit-diff.test.js +14 -0
  77. package/dist/tools/edit-diff.test.js.map +1 -1
  78. package/dist/tools/edit.d.ts.map +1 -1
  79. package/dist/tools/edit.js +16 -6
  80. package/dist/tools/edit.js.map +1 -1
  81. package/dist/tools/edit.test.js +27 -0
  82. package/dist/tools/edit.test.js.map +1 -1
  83. package/dist/tools/enter-plan.d.ts.map +1 -1
  84. package/dist/tools/enter-plan.js +1 -0
  85. package/dist/tools/enter-plan.js.map +1 -1
  86. package/dist/tools/find.d.ts.map +1 -1
  87. package/dist/tools/find.js +2 -0
  88. package/dist/tools/find.js.map +1 -1
  89. package/dist/tools/goals.d.ts +110 -0
  90. package/dist/tools/goals.d.ts.map +1 -0
  91. package/dist/tools/goals.js +500 -0
  92. package/dist/tools/goals.js.map +1 -0
  93. package/dist/tools/goals.test.d.ts +2 -0
  94. package/dist/tools/goals.test.d.ts.map +1 -0
  95. package/dist/tools/goals.test.js +431 -0
  96. package/dist/tools/goals.test.js.map +1 -0
  97. package/dist/tools/grep.d.ts.map +1 -1
  98. package/dist/tools/grep.js +2 -0
  99. package/dist/tools/grep.js.map +1 -1
  100. package/dist/tools/index.d.ts +2 -0
  101. package/dist/tools/index.d.ts.map +1 -1
  102. package/dist/tools/index.js +6 -0
  103. package/dist/tools/index.js.map +1 -1
  104. package/dist/tools/prompt-hints.d.ts.map +1 -1
  105. package/dist/tools/prompt-hints.js +2 -0
  106. package/dist/tools/prompt-hints.js.map +1 -1
  107. package/dist/tools/source-path.d.ts +9 -0
  108. package/dist/tools/source-path.d.ts.map +1 -0
  109. package/dist/tools/source-path.js +119 -0
  110. package/dist/tools/source-path.js.map +1 -0
  111. package/dist/tools/source-path.test.d.ts +2 -0
  112. package/dist/tools/source-path.test.d.ts.map +1 -0
  113. package/dist/tools/source-path.test.js +80 -0
  114. package/dist/tools/source-path.test.js.map +1 -0
  115. package/dist/tools/subagent.js +16 -0
  116. package/dist/tools/subagent.js.map +1 -1
  117. package/dist/ui/App.d.ts +36 -3
  118. package/dist/ui/App.d.ts.map +1 -1
  119. package/dist/ui/App.js +879 -57
  120. package/dist/ui/App.js.map +1 -1
  121. package/dist/ui/activity-phrases.d.ts.map +1 -1
  122. package/dist/ui/activity-phrases.js +7 -3
  123. package/dist/ui/activity-phrases.js.map +1 -1
  124. package/dist/ui/app-state-persistence.test.d.ts +2 -0
  125. package/dist/ui/app-state-persistence.test.d.ts.map +1 -0
  126. package/dist/ui/app-state-persistence.test.js +56 -0
  127. package/dist/ui/app-state-persistence.test.js.map +1 -0
  128. package/dist/ui/components/BackgroundTasksBar.d.ts +16 -1
  129. package/dist/ui/components/BackgroundTasksBar.d.ts.map +1 -1
  130. package/dist/ui/components/BackgroundTasksBar.js +15 -2
  131. package/dist/ui/components/BackgroundTasksBar.js.map +1 -1
  132. package/dist/ui/components/Banner.d.ts +2 -1
  133. package/dist/ui/components/Banner.d.ts.map +1 -1
  134. package/dist/ui/components/Banner.js +3 -3
  135. package/dist/ui/components/Banner.js.map +1 -1
  136. package/dist/ui/components/GoalOverlay.d.ts +21 -0
  137. package/dist/ui/components/GoalOverlay.d.ts.map +1 -0
  138. package/dist/ui/components/GoalOverlay.js +336 -0
  139. package/dist/ui/components/GoalOverlay.js.map +1 -0
  140. package/dist/ui/components/GoalStatusBar.d.ts +24 -0
  141. package/dist/ui/components/GoalStatusBar.d.ts.map +1 -0
  142. package/dist/ui/components/GoalStatusBar.js +113 -0
  143. package/dist/ui/components/GoalStatusBar.js.map +1 -0
  144. package/dist/ui/components/InputArea.d.ts +2 -1
  145. package/dist/ui/components/InputArea.d.ts.map +1 -1
  146. package/dist/ui/components/InputArea.js +6 -1
  147. package/dist/ui/components/InputArea.js.map +1 -1
  148. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  149. package/dist/ui/components/ToolExecution.js +94 -1
  150. package/dist/ui/components/ToolExecution.js.map +1 -1
  151. package/dist/ui/footer-status-layout.test.d.ts +2 -0
  152. package/dist/ui/footer-status-layout.test.d.ts.map +1 -0
  153. package/dist/ui/footer-status-layout.test.js +56 -0
  154. package/dist/ui/footer-status-layout.test.js.map +1 -0
  155. package/dist/ui/goal-events.d.ts +20 -0
  156. package/dist/ui/goal-events.d.ts.map +1 -0
  157. package/dist/ui/goal-events.js +102 -0
  158. package/dist/ui/goal-events.js.map +1 -0
  159. package/dist/ui/goal-events.test.d.ts +2 -0
  160. package/dist/ui/goal-events.test.d.ts.map +1 -0
  161. package/dist/ui/goal-events.test.js +208 -0
  162. package/dist/ui/goal-events.test.js.map +1 -0
  163. package/dist/ui/goal-overlay.test.d.ts +2 -0
  164. package/dist/ui/goal-overlay.test.d.ts.map +1 -0
  165. package/dist/ui/goal-overlay.test.js +122 -0
  166. package/dist/ui/goal-overlay.test.js.map +1 -0
  167. package/dist/ui/goal-status-bar.test.d.ts +2 -0
  168. package/dist/ui/goal-status-bar.test.d.ts.map +1 -0
  169. package/dist/ui/goal-status-bar.test.js +143 -0
  170. package/dist/ui/goal-status-bar.test.js.map +1 -0
  171. package/dist/ui/live-item-flush.test.js +48 -0
  172. package/dist/ui/live-item-flush.test.js.map +1 -1
  173. package/dist/ui/render.d.ts +8 -3
  174. package/dist/ui/render.d.ts.map +1 -1
  175. package/dist/ui/render.js +10 -3
  176. package/dist/ui/render.js.map +1 -1
  177. package/dist/ui/scroll-stabilization.test.d.ts +2 -0
  178. package/dist/ui/scroll-stabilization.test.d.ts.map +1 -0
  179. package/dist/ui/scroll-stabilization.test.js +23 -0
  180. package/dist/ui/scroll-stabilization.test.js.map +1 -0
  181. package/dist/utils/format.js +44 -0
  182. package/dist/utils/format.js.map +1 -1
  183. package/package.json +5 -4
@@ -0,0 +1,336 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useCallback, useEffect, useRef, useState } from "react";
3
+ import { Box, Text, useInput } from "ink";
4
+ import { randomUUID } from "node:crypto";
5
+ import { basename } from "node:path";
6
+ import { createGoalRun, formatGoalPrerequisiteInstruction, goalHasBlockingPrerequisites, isBlockingGoalPrerequisite, loadGoalRuns, saveGoalRuns, summarizeGoalCountsFromRuns, } from "../../core/goal-store.js";
7
+ import { useTerminalSize } from "../hooks/useTerminalSize.js";
8
+ import { useTheme } from "../theme/theme.js";
9
+ const GOAL_LOGO = [" ▄▀▀▀ ▄▀▀▀", " █ ▀█ █ ▀█", " ▀▄▄▀ ▀▄▄▀"];
10
+ const GRADIENT = [
11
+ "#4ade80",
12
+ "#5ad89a",
13
+ "#6fd2b4",
14
+ "#85ccce",
15
+ "#60a5fa",
16
+ "#85ccce",
17
+ "#6fd2b4",
18
+ "#5ad89a",
19
+ ];
20
+ const GOAL_SUCCESS = "#4ade80";
21
+ const GOAL_ACTIVE = "#fbbf24";
22
+ const GAP = " ";
23
+ const LOGO_WIDTH = 9;
24
+ const SIDE_BY_SIDE_MIN = LOGO_WIDTH + GAP.length + 20;
25
+ export function clampGoalSelectedIndex(index, length) {
26
+ if (length <= 0)
27
+ return 0;
28
+ return Math.min(Math.max(0, index), length - 1);
29
+ }
30
+ export function formatGoalPrerequisiteSummary(run) {
31
+ if (run.prerequisites.length === 0)
32
+ return "no prereqs";
33
+ const met = run.prerequisites.filter((item) => item.status === "met").length;
34
+ const missing = run.prerequisites.filter((item) => item.status === "missing").length;
35
+ const unknown = run.prerequisites.filter((item) => item.status === "unknown").length;
36
+ const suffix = [missing > 0 ? `${missing} missing` : "", unknown > 0 ? `${unknown} unknown` : ""]
37
+ .filter(Boolean)
38
+ .join(", ");
39
+ return `${met}/${run.prerequisites.length} prereqs met${suffix ? ` (${suffix})` : ""}`;
40
+ }
41
+ export function formatGoalTaskSummary(run) {
42
+ if (run.tasks.length === 0)
43
+ return "no tasks";
44
+ const done = run.tasks.filter((item) => item.status === "done").length;
45
+ const running = run.tasks.filter((item) => item.status === "running" || item.status === "verifying").length;
46
+ const failed = run.tasks.filter((item) => item.status === "failed").length;
47
+ const blocked = run.tasks.filter((item) => item.status === "blocked").length;
48
+ const suffix = [
49
+ running > 0 ? `${running} running` : "",
50
+ failed > 0 ? `${failed} failed` : "",
51
+ blocked > 0 ? `${blocked} blocked` : "",
52
+ ]
53
+ .filter(Boolean)
54
+ .join(", ");
55
+ return `${done}/${run.tasks.length} tasks done${suffix ? ` (${suffix})` : ""}`;
56
+ }
57
+ export function formatGoalVerifierSummary(run) {
58
+ if (run.verifier?.lastResult)
59
+ return `verifier ${run.verifier.lastResult.status}`;
60
+ if (run.verifier?.command)
61
+ return "verifier command ready";
62
+ if (run.verifier?.description)
63
+ return "verifier described";
64
+ return "no verifier";
65
+ }
66
+ export function getGoalStatusCountsText(runs) {
67
+ const counts = summarizeGoalCountsFromRuns(runs);
68
+ return `${counts.passed} passed · ${counts.running} running · ${counts.pending} pending · ${counts.blocked} blocked`;
69
+ }
70
+ export function sortGoalRunsForOverlay(runs) {
71
+ return [...runs].sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
72
+ }
73
+ export function shouldPersistGoalOverlayRuns(previousRuns, nextRuns) {
74
+ if (nextRuns.length > 0)
75
+ return true;
76
+ if (previousRuns.length === 0)
77
+ return true;
78
+ return !previousRuns.some((run) => run.status === "running" ||
79
+ run.status === "verifying" ||
80
+ run.activeWorkerId !== undefined ||
81
+ run.tasks.some((task) => task.status === "running" || task.status === "verifying"));
82
+ }
83
+ function GoalGradientText({ text }) {
84
+ const chars = [];
85
+ let colorIdx = 0;
86
+ for (let i = 0; i < text.length; i++) {
87
+ const ch = text[i];
88
+ if (ch === " ") {
89
+ chars.push(ch);
90
+ }
91
+ else {
92
+ const color = GRADIENT[colorIdx % GRADIENT.length];
93
+ chars.push(_jsx(Text, { color: color, children: ch }, i));
94
+ colorIdx++;
95
+ }
96
+ }
97
+ return _jsx(Text, { children: chars });
98
+ }
99
+ function formatDisplayPath(cwd) {
100
+ const home = process.env.HOME ?? "";
101
+ return home && cwd.startsWith(home) ? `~${cwd.slice(home.length)}` : cwd;
102
+ }
103
+ function statusColor(status) {
104
+ switch (status) {
105
+ case "passed":
106
+ return GOAL_SUCCESS;
107
+ case "running":
108
+ case "verifying":
109
+ case "blocked":
110
+ return GOAL_ACTIVE;
111
+ case "failed":
112
+ return "red";
113
+ case "paused":
114
+ case "draft":
115
+ case "ready":
116
+ return "";
117
+ }
118
+ }
119
+ function taskStatusColor(status) {
120
+ switch (status) {
121
+ case "done":
122
+ return "green";
123
+ case "failed":
124
+ return "red";
125
+ case "blocked":
126
+ return "yellow";
127
+ case "running":
128
+ case "verifying":
129
+ return "cyan";
130
+ case "pending":
131
+ return "blue";
132
+ }
133
+ }
134
+ function prerequisiteStatusColor(status) {
135
+ switch (status) {
136
+ case "met":
137
+ return "green";
138
+ case "missing":
139
+ return "yellow";
140
+ case "unknown":
141
+ return "cyan";
142
+ }
143
+ }
144
+ export function getGoalDetailTaskHeading(run) {
145
+ return run.prerequisites.length > 0 ? "2. Worker tasks" : "Worker tasks";
146
+ }
147
+ export function getGoalUserPrerequisiteHeading(run) {
148
+ return run.prerequisites.length > 0 ? "1. User prerequisites" : null;
149
+ }
150
+ export function formatGoalTaskDetailSummary(summary) {
151
+ const firstLine = summary
152
+ .split("\n")
153
+ .map((line) => line.trim())
154
+ .find((line) => line.length > 0);
155
+ if (!firstLine)
156
+ return "";
157
+ return firstLine.length > 180 ? `${firstLine.slice(0, 177)}…` : firstLine;
158
+ }
159
+ function GoalHeader({ cwd, runs, agentRunning, }) {
160
+ const theme = useTheme();
161
+ const { columns } = useTerminalSize();
162
+ const displayPath = formatDisplayPath(cwd);
163
+ const counts = summarizeGoalCountsFromRuns(runs);
164
+ if (columns < SIDE_BY_SIDE_MIN) {
165
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, marginBottom: 1, width: columns, children: [_jsx(GoalGradientText, { text: GOAL_LOGO[0] }), _jsx(GoalGradientText, { text: GOAL_LOGO[1] }), _jsx(GoalGradientText, { text: GOAL_LOGO[2] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: GOAL_SUCCESS, bold: true, children: "Goal Pane" }), agentRunning && _jsx(Text, { color: GOAL_ACTIVE, children: " (agent running)" }), _jsxs(Text, { color: theme.textDim, children: [" \u00B7 ", basename(cwd)] })] }), _jsx(Text, { color: theme.textDim, wrap: "truncate", children: displayPath }), _jsxs(Text, { children: [_jsxs(Text, { color: GOAL_SUCCESS, children: [counts.passed, " passed"] }), _jsx(Text, { color: theme.textDim, children: " \u00B7 " }), _jsxs(Text, { color: GOAL_ACTIVE, children: [counts.running, " active"] }), _jsx(Text, { color: theme.textDim, children: " \u00B7 " }), _jsxs(Text, { color: theme.text, children: [counts.pending, " pending"] }), _jsx(Text, { color: theme.textDim, children: " \u00B7 " }), _jsxs(Text, { color: GOAL_ACTIVE, children: [counts.blocked, " blocked"] })] })] }));
166
+ }
167
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, marginBottom: 1, width: columns, children: [_jsxs(Box, { children: [_jsx(GoalGradientText, { text: GOAL_LOGO[0] }), _jsx(Text, { children: GAP }), _jsx(Text, { color: GOAL_SUCCESS, bold: true, children: "Goal Pane" }), agentRunning && _jsx(Text, { color: GOAL_ACTIVE, children: " (agent running)" })] }), _jsxs(Box, { children: [_jsx(GoalGradientText, { text: GOAL_LOGO[1] }), _jsx(Text, { children: GAP }), _jsx(Text, { color: theme.textDim, wrap: "truncate", children: displayPath })] }), _jsxs(Box, { children: [_jsx(GoalGradientText, { text: GOAL_LOGO[2] }), _jsx(Text, { children: GAP }), _jsxs(Text, { children: [_jsxs(Text, { color: GOAL_SUCCESS, children: [counts.passed, " passed"] }), _jsx(Text, { color: theme.textDim, children: " \u00B7 " }), _jsxs(Text, { color: GOAL_ACTIVE, children: [counts.running, " active"] }), _jsx(Text, { color: theme.textDim, children: " \u00B7 " }), _jsxs(Text, { color: theme.text, children: [counts.pending, " pending"] }), _jsx(Text, { color: theme.textDim, children: " \u00B7 " }), _jsxs(Text, { color: GOAL_ACTIVE, children: [counts.blocked, " blocked"] })] })] })] }));
168
+ }
169
+ function GoalDetail({ run }) {
170
+ const theme = useTheme();
171
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, paddingLeft: 2, children: [run.prerequisites.length > 0 ? (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: theme.textDim, bold: true, children: getGoalUserPrerequisiteHeading(run) }), run.prerequisites.map((prerequisite) => (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsxs(Text, { color: prerequisiteStatusColor(prerequisite.status), children: ["[", prerequisite.status, "]"] }), _jsxs(Text, { color: theme.text, children: [" ", prerequisite.label] }), isBlockingGoalPrerequisite(prerequisite) ? (_jsx(Text, { color: theme.warning, children: " \u00B7 required from user" })) : null] }), isBlockingGoalPrerequisite(prerequisite) ? (_jsxs(Text, { color: theme.textDim, wrap: "wrap", children: [" ", formatGoalPrerequisiteInstruction(prerequisite)] })) : prerequisite.evidence ? (_jsxs(Text, { color: theme.textDim, wrap: "wrap", children: [" ", prerequisite.evidence] })) : null] }, prerequisite.id)))] })) : null, _jsx(Text, { color: theme.textDim, bold: true, children: getGoalDetailTaskHeading(run) }), run.tasks.length === 0 ? (_jsx(Text, { color: theme.textDim, children: goalHasBlockingPrerequisites(run)
172
+ ? "Waiting for user prerequisites before worker tasks can begin."
173
+ : "No worker tasks yet." })) : (run.tasks.map((task) => (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsxs(Text, { color: taskStatusColor(task.status), children: ["[", task.status, "]"] }), _jsxs(Text, { color: theme.text, children: [" ", task.title] }), _jsxs(Text, { color: theme.textDim, children: [" \u00B7 attempts ", task.attempts] }), task.workerId ? _jsxs(Text, { color: theme.textDim, children: [" \u00B7 worker ", task.workerId] }) : null] }), task.lastSummary ? (_jsxs(Text, { color: theme.textDim, children: [" ", formatGoalTaskDetailSummary(task.lastSummary)] })) : null] }, task.id))))] }));
174
+ }
175
+ export function GoalOverlay({ cwd, onClose, onRunGoal, onVerifyGoal, onPauseGoal, agentRunning, }) {
176
+ const theme = useTheme();
177
+ const [runs, setRuns] = useState([]);
178
+ const [selectedIndex, setSelectedIndex] = useState(0);
179
+ const [loaded, setLoaded] = useState(false);
180
+ const [expandedRunId, setExpandedRunId] = useState(null);
181
+ const [mode, setMode] = useState("normal");
182
+ const [inputText, setInputText] = useState("");
183
+ const [status, setStatus] = useState("");
184
+ const statusTimer = useRef(null);
185
+ const saveTimer = useRef(null);
186
+ const lastPersistedRunsRef = useRef([]);
187
+ const showStatus = useCallback((message) => {
188
+ setStatus(message);
189
+ if (statusTimer.current)
190
+ clearTimeout(statusTimer.current);
191
+ statusTimer.current = setTimeout(() => setStatus(""), 2500);
192
+ }, []);
193
+ useEffect(() => {
194
+ let cancelled = false;
195
+ const load = () => {
196
+ void loadGoalRuns(cwd).then((nextRuns) => {
197
+ if (cancelled)
198
+ return;
199
+ setRuns((previousRuns) => {
200
+ const sorted = sortGoalRunsForOverlay(nextRuns);
201
+ if (!shouldPersistGoalOverlayRuns(previousRuns, sorted)) {
202
+ showStatus("Goal store reload looked empty while work is active; preserving local state.");
203
+ return previousRuns;
204
+ }
205
+ return JSON.stringify(previousRuns) === JSON.stringify(sorted) ? previousRuns : sorted;
206
+ });
207
+ setLoaded(true);
208
+ });
209
+ };
210
+ load();
211
+ const interval = setInterval(load, 1000);
212
+ return () => {
213
+ cancelled = true;
214
+ clearInterval(interval);
215
+ if (statusTimer.current)
216
+ clearTimeout(statusTimer.current);
217
+ if (saveTimer.current)
218
+ clearTimeout(saveTimer.current);
219
+ };
220
+ }, [cwd]);
221
+ useEffect(() => {
222
+ setSelectedIndex((index) => clampGoalSelectedIndex(index, runs.length));
223
+ }, [runs.length]);
224
+ useEffect(() => {
225
+ if (!loaded)
226
+ return;
227
+ if (saveTimer.current)
228
+ clearTimeout(saveTimer.current);
229
+ saveTimer.current = setTimeout(() => {
230
+ if (!shouldPersistGoalOverlayRuns(lastPersistedRunsRef.current, runs)) {
231
+ showStatus("Refusing to save an empty Goal list while work is active.");
232
+ return;
233
+ }
234
+ lastPersistedRunsRef.current = runs;
235
+ void saveGoalRuns(cwd, runs);
236
+ }, 100);
237
+ }, [cwd, loaded, runs]);
238
+ const selectedRun = runs[selectedIndex];
239
+ const expandedRun = selectedRun && selectedRun.id === expandedRunId ? selectedRun : null;
240
+ useInput((input, key) => {
241
+ if (mode === "adding") {
242
+ if (key.escape) {
243
+ setMode("normal");
244
+ setInputText("");
245
+ return;
246
+ }
247
+ if (key.return) {
248
+ const text = inputText.trim();
249
+ if (text) {
250
+ const run = createGoalRun(cwd, {
251
+ id: randomUUID(),
252
+ title: text.slice(0, 80),
253
+ goal: text,
254
+ status: "draft",
255
+ successCriteria: [],
256
+ prerequisites: [],
257
+ harness: [],
258
+ tasks: [],
259
+ evidence: [],
260
+ blockers: [],
261
+ });
262
+ setRuns((previousRuns) => sortGoalRunsForOverlay([run, ...previousRuns]));
263
+ setSelectedIndex(0);
264
+ showStatus("Draft goal added");
265
+ }
266
+ setMode("normal");
267
+ setInputText("");
268
+ return;
269
+ }
270
+ if (key.backspace || key.delete) {
271
+ setInputText((previous) => previous.slice(0, -1));
272
+ return;
273
+ }
274
+ if (input && !key.ctrl && !key.meta)
275
+ setInputText((previous) => previous + input);
276
+ return;
277
+ }
278
+ if (mode === "confirmDelete") {
279
+ if (key.escape || input === "n") {
280
+ setMode("normal");
281
+ showStatus("Archive cancelled");
282
+ return;
283
+ }
284
+ if (input === "y" && selectedRun) {
285
+ setRuns((previousRuns) => previousRuns.filter((run) => run.id !== selectedRun.id));
286
+ setExpandedRunId(null);
287
+ setMode("normal");
288
+ showStatus("Goal archived");
289
+ }
290
+ return;
291
+ }
292
+ if (key.escape) {
293
+ onClose();
294
+ return;
295
+ }
296
+ if (key.upArrow || input === "k") {
297
+ setSelectedIndex((index) => clampGoalSelectedIndex(index - 1, runs.length));
298
+ return;
299
+ }
300
+ if (key.downArrow || input === "j") {
301
+ setSelectedIndex((index) => clampGoalSelectedIndex(index + 1, runs.length));
302
+ return;
303
+ }
304
+ if ((key.return || input === "d") && selectedRun) {
305
+ setExpandedRunId((current) => (current === selectedRun.id ? null : selectedRun.id));
306
+ return;
307
+ }
308
+ if (input === "r" && selectedRun) {
309
+ onRunGoal(selectedRun);
310
+ return;
311
+ }
312
+ if (input === "v" && selectedRun) {
313
+ onVerifyGoal(selectedRun);
314
+ return;
315
+ }
316
+ if (input === "p" && selectedRun) {
317
+ onPauseGoal(selectedRun);
318
+ return;
319
+ }
320
+ if (input === "a") {
321
+ setMode("adding");
322
+ setInputText("");
323
+ return;
324
+ }
325
+ if (input === "x" && selectedRun) {
326
+ setMode("confirmDelete");
327
+ showStatus("Archive goal? y/n");
328
+ }
329
+ });
330
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(GoalHeader, { cwd: cwd, runs: runs, agentRunning: agentRunning }), agentRunning ? (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: theme.textDim, children: "Agent is running; Goal pane stays available without resetting chat." }) })) : null, !loaded ? (_jsx(Text, { color: theme.textDim, children: "Loading goals\u2026" })) : runs.length === 0 ? (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: theme.textDim, children: "No goals. Run /goal <objective> or press (a)dd." }), mode === "adding" ? _jsxs(Text, { color: theme.primary, children: ["New goal: ", inputText] }) : null] })) : (_jsxs(Box, { flexDirection: "column", children: [runs.map((run, index) => {
331
+ const selected = index === selectedIndex;
332
+ const blocked = goalHasBlockingPrerequisites(run);
333
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { children: [_jsx(Text, { color: selected ? theme.primary : theme.textDim, children: selected ? "❯ " : " " }), _jsxs(Text, { color: statusColor(run.status) || (selected ? theme.primary : theme.text), children: ["[", run.status, "]"] }), _jsxs(Text, { color: selected ? theme.primary : theme.text, bold: selected, children: [" ", run.title] }), _jsxs(Text, { color: theme.textDim, children: [" \u00B7 ", run.id.slice(0, 8)] }), blocked ? _jsx(Text, { color: theme.warning, children: " \u00B7 blocked" }) : null] }), _jsxs(Text, { color: theme.textDim, children: [" ", formatGoalPrerequisiteSummary(run), " \u00B7 ", formatGoalTaskSummary(run), " \u00B7", " ", formatGoalVerifierSummary(run)] }), run.blockers.length > 0 ? (_jsxs(Text, { color: theme.warning, children: [" ", "blocker: ", run.blockers[0]] })) : null, expandedRun?.id === run.id ? _jsx(GoalDetail, { run: run }) : null] }, run.id));
334
+ }), mode === "adding" ? _jsxs(Text, { color: theme.primary, children: ["New goal: ", inputText] }) : null] })), _jsx(Box, { marginTop: 1, children: mode === "confirmDelete" ? (_jsx(Text, { color: theme.warning, children: "Confirm archive selected goal: y/n" })) : mode === "adding" ? (_jsxs(Text, { color: theme.textDim, children: [_jsx(Text, { color: theme.primary, children: "Enter" }), " add · ", _jsx(Text, { color: theme.primary, children: "ESC" }), " cancel"] })) : (_jsxs(Text, { color: theme.textDim, children: [_jsx(Text, { color: theme.primary, children: "\u2191\u2193" }), " move · (", _jsx(Text, { color: theme.primary, children: "d" }), ")etail · (", _jsx(Text, { color: theme.primary, children: "r" }), ")un · (", _jsx(Text, { color: theme.primary, children: "v" }), ")erify · (", _jsx(Text, { color: theme.primary, children: "p" }), ")ause · (", _jsx(Text, { color: theme.primary, children: "a" }), ")dd · (", _jsx(Text, { color: theme.primary, children: "x" }), ")archive · ", _jsx(Text, { color: theme.primary, children: "ESC" }), " close"] })) }), status ? (_jsx(Box, { children: _jsx(Text, { color: theme.secondary, children: status }) })) : null] }));
335
+ }
336
+ //# sourceMappingURL=GoalOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoalOverlay.js","sourceRoot":"","sources":["../../../src/ui/components/GoalOverlay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { GoalRun } from "../../core/goal-store.js";
2
+ export type GoalStatusPhase = "worker" | "verifier" | "reviewing" | "orchestrating" | "failed";
3
+ export interface GoalStatusEntry {
4
+ runId: string;
5
+ label: string;
6
+ phase: GoalStatusPhase;
7
+ startedAt: number;
8
+ detail?: string;
9
+ workerId?: string;
10
+ goalNumber?: number;
11
+ }
12
+ export declare function formatGoalElapsed(ms: number): string;
13
+ export declare function formatGoalStatusActiveText(entry: GoalStatusEntry): string;
14
+ export declare function syncGoalStatusEntries(previous: readonly GoalStatusEntry[], entry: GoalStatusEntry): GoalStatusEntry[];
15
+ export declare function removeGoalStatusEntry(previous: readonly GoalStatusEntry[], runId: string): GoalStatusEntry[];
16
+ export interface ReconcileGoalStatusEntriesOptions {
17
+ isWorkerActive?: (workerId: string, run: GoalRun) => boolean;
18
+ isVerifierActive?: (run: GoalRun) => boolean;
19
+ }
20
+ export declare function reconcileGoalStatusEntriesWithRuns(previous: readonly GoalStatusEntry[], runs: readonly GoalRun[], options?: ReconcileGoalStatusEntriesOptions): GoalStatusEntry[];
21
+ export declare function GoalStatusBar({ entries }: {
22
+ entries: readonly GoalStatusEntry[];
23
+ }): import("react/jsx-runtime").JSX.Element | null;
24
+ //# sourceMappingURL=GoalStatusBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoalStatusBar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/GoalStatusBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKxD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,eAAe,GAAG,QAAQ,CAAC;AAE/F,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKpD;AA4CD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAEzE;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,KAAK,EAAE,eAAe,GACrB,eAAe,EAAE,CAKnB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,KAAK,EAAE,MAAM,GACZ,eAAe,EAAE,CAEnB;AAED,MAAM,WAAW,iCAAiC;IAChD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;IAC7D,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;CAC9C;AAqBD,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,OAAO,GAAE,iCAAsC,GAC9C,eAAe,EAAE,CAQnB;AA6BD,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,kDA0BjF"}
@@ -0,0 +1,113 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { Box, Text } from "ink";
4
+ import { useTerminalSize } from "../hooks/useTerminalSize.js";
5
+ import { useTheme } from "../theme/theme.js";
6
+ import { useAnimationTick, useAnimationActive } from "./AnimationContext.js";
7
+ const SHIMMER_WIDTH = 3;
8
+ const PHASE_LABELS = {
9
+ worker: "working",
10
+ verifier: "verifying",
11
+ reviewing: "reviewing",
12
+ orchestrating: "orchestrating",
13
+ failed: "failed",
14
+ };
15
+ export function formatGoalElapsed(ms) {
16
+ const total = Math.max(0, Math.floor(ms / 1000));
17
+ const minutes = Math.floor(total / 60);
18
+ const seconds = total % 60;
19
+ return `${minutes}:${seconds.toString().padStart(2, "0")}`;
20
+ }
21
+ function truncateLabel(label, maxLength) {
22
+ if (label.length <= maxLength)
23
+ return label;
24
+ if (maxLength <= 1)
25
+ return "…";
26
+ return `${label.slice(0, maxLength - 1)}…`;
27
+ }
28
+ function GoalAnimationSentinel() {
29
+ useAnimationActive();
30
+ return null;
31
+ }
32
+ function ShimmerText({ text, color, tick }) {
33
+ const cycle = text.length + SHIMMER_WIDTH * 2;
34
+ const shimmerPos = (tick % cycle) - SHIMMER_WIDTH;
35
+ return (_jsx(Text, { children: text.split("").map((character, index) => {
36
+ const isBright = Math.abs(index - shimmerPos) <= SHIMMER_WIDTH;
37
+ return (_jsx(Text, { color: color, bold: isBright, dimColor: !isBright, children: character }, index));
38
+ }) }));
39
+ }
40
+ function getPhaseColor(phase, theme) {
41
+ switch (phase) {
42
+ case "worker":
43
+ return theme.primary;
44
+ case "verifier":
45
+ return theme.accent;
46
+ case "reviewing":
47
+ case "orchestrating":
48
+ return theme.secondary;
49
+ case "failed":
50
+ return theme.warning;
51
+ }
52
+ }
53
+ export function formatGoalStatusActiveText(entry) {
54
+ return `Goal ${PHASE_LABELS[entry.phase]} · ${truncateLabel(entry.label, 42)}`;
55
+ }
56
+ export function syncGoalStatusEntries(previous, entry) {
57
+ const withoutRun = previous.filter((item) => item.runId !== entry.runId);
58
+ const existingGoalNumber = previous.findIndex((item) => item.runId === entry.runId) + 1;
59
+ const goalNumber = entry.goalNumber ?? (existingGoalNumber || withoutRun.length + 1);
60
+ return [...withoutRun, { ...entry, goalNumber }];
61
+ }
62
+ export function removeGoalStatusEntry(previous, runId) {
63
+ return previous.filter((entry) => entry.runId !== runId);
64
+ }
65
+ function hasActiveGoalProcess(entry, run, options) {
66
+ if (entry.phase === "worker") {
67
+ if (entry.workerId && options.isWorkerActive?.(entry.workerId, run))
68
+ return true;
69
+ if (run.activeWorkerId && options.isWorkerActive?.(run.activeWorkerId, run))
70
+ return true;
71
+ return run.tasks.some((task) => (task.status === "running" || task.status === "verifying") &&
72
+ task.workerId !== undefined &&
73
+ options.isWorkerActive?.(task.workerId, run) === true);
74
+ }
75
+ if (entry.phase === "verifier")
76
+ return options.isVerifierActive?.(run) === true;
77
+ return false;
78
+ }
79
+ export function reconcileGoalStatusEntriesWithRuns(previous, runs, options = {}) {
80
+ const runsById = new Map(runs.map((run) => [run.id, run]));
81
+ return previous.filter((entry) => {
82
+ const run = runsById.get(entry.runId);
83
+ if (!run)
84
+ return false;
85
+ if (hasActiveGoalProcess(entry, run, options))
86
+ return true;
87
+ return run.status === "running" || run.status === "verifying";
88
+ });
89
+ }
90
+ function GoalStatusSlot({ entry, tick }) {
91
+ const theme = useTheme();
92
+ const phaseColor = getPhaseColor(entry.phase, theme);
93
+ const phaseLabel = PHASE_LABELS[entry.phase];
94
+ const elapsed = formatGoalElapsed(Date.now() - entry.startedAt);
95
+ const label = truncateLabel(entry.label, 42);
96
+ if (entry.phase === "failed") {
97
+ return (_jsxs(Text, { children: [_jsxs(Text, { color: phaseColor, children: ["\u2717 Goal ", phaseLabel] }), _jsxs(Text, { color: theme.textDim, children: [" \u00B7 ", label] }), _jsxs(Text, { color: theme.textDim, children: [" ", elapsed] })] }));
98
+ }
99
+ return (_jsxs(Text, { children: [_jsx(ShimmerText, { text: `Goal ${phaseLabel}`, color: phaseColor, tick: tick }), _jsx(Text, { color: theme.textDim, children: " \u00B7 " }), _jsx(Text, { color: theme.text, children: label }), _jsxs(Text, { color: theme.textDim, children: [" ", elapsed] })] }));
100
+ }
101
+ export function GoalStatusBar({ entries }) {
102
+ const theme = useTheme();
103
+ const { columns } = useTerminalSize();
104
+ const tick = useAnimationTick(entries.some((entry) => entry.phase !== "failed"));
105
+ if (entries.length === 0)
106
+ return null;
107
+ const activeEntries = entries.filter((entry) => entry.phase !== "failed");
108
+ const failedEntries = entries.filter((entry) => entry.phase === "failed");
109
+ const visibleEntries = [...activeEntries, ...failedEntries].slice(0, 3);
110
+ const hiddenCount = entries.length - visibleEntries.length;
111
+ return (_jsxs(Box, { paddingX: 1, width: columns, flexShrink: 1, children: [activeEntries.length > 0 && _jsx(GoalAnimationSentinel, {}), _jsxs(Text, { wrap: "truncate", children: [visibleEntries.map((entry, index) => (_jsxs(React.Fragment, { children: [index > 0 ? _jsx(Text, { color: theme.border, children: " │ " }) : null, _jsx(GoalStatusSlot, { entry: entry, tick: tick })] }, entry.runId))), hiddenCount > 0 ? _jsxs(Text, { color: theme.textDim, children: [" \u2502 +", hiddenCount, " more"] }) : null] })] }));
112
+ }
113
+ //# sourceMappingURL=GoalStatusBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoalStatusBar.js","sourceRoot":"","sources":["../../../src/ui/components/GoalStatusBar.tsx"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ interface InputAreaProps {
14
14
  onDownAtEnd?: () => void;
15
15
  onShiftTab?: () => void;
16
16
  onToggleTasks?: () => void;
17
+ onToggleGoal?: () => void;
17
18
  onToggleSkills?: () => void;
18
19
  onTogglePixel?: () => void;
19
20
  onTogglePlanMode?: () => void;
@@ -45,6 +46,6 @@ interface InputAreaProps {
45
46
  */
46
47
  onTab?: () => void;
47
48
  }
48
- export declare function InputArea({ onSubmit, onAbort, disabled, isActive, onDownAtEnd, onShiftTab, onToggleTasks, onToggleSkills, onTogglePixel, onTogglePlanMode, cwd, commands, eyesCount, scopeBadge, disableMouseTracking, onTab, }: InputAreaProps): import("react/jsx-runtime").JSX.Element;
49
+ export declare function InputArea({ onSubmit, onAbort, disabled, isActive, onDownAtEnd, onShiftTab, onToggleTasks, onToggleGoal, onToggleSkills, onTogglePixel, onTogglePlanMode, cwd, commands, eyesCount, scopeBadge, disableMouseTracking, onTab, }: InputAreaProps): import("react/jsx-runtime").JSX.Element;
49
50
  export {};
50
51
  //# sourceMappingURL=InputArea.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputArea.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAMpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAuLhG,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B;qEACiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAkDD,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,QAAgB,EAChB,QAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,GAAG,EACH,QAAa,EACb,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,KAAK,GACN,EAAE,cAAc,2CA+0ChB"}
1
+ {"version":3,"file":"InputArea.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAMpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAuLhG,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B;qEACiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAkDD,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,QAAgB,EAChB,QAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,GAAG,EACH,QAAa,EACb,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,KAAK,GACN,EAAE,cAAc,2CAq1ChB"}
@@ -223,7 +223,7 @@ function getVisualLines(text, columns) {
223
223
  }
224
224
  return result;
225
225
  }
226
- export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true, onDownAtEnd, onShiftTab, onToggleTasks, onToggleSkills, onTogglePixel, onTogglePlanMode, cwd, commands = [], eyesCount, scopeBadge, disableMouseTracking, onTab, }) {
226
+ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true, onDownAtEnd, onShiftTab, onToggleTasks, onToggleGoal, onToggleSkills, onTogglePixel, onTogglePlanMode, cwd, commands = [], eyesCount, scopeBadge, disableMouseTracking, onTab, }) {
227
227
  const theme = useTheme();
228
228
  const eyesBadge = eyesCount && eyesCount > 0 ? (_jsx(Text, { color: theme.accent, bold: true, children: `[eyes: ${eyesCount}↗] ` })) : null;
229
229
  const [value, setValue] = useState("");
@@ -711,6 +711,11 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
711
711
  onToggleTasks?.();
712
712
  return;
713
713
  }
714
+ // Ctrl+G toggles goal overlay in normal input mode. In search mode it cancels search above.
715
+ if (key.ctrl && input === "g") {
716
+ onToggleGoal?.();
717
+ return;
718
+ }
714
719
  // Ctrl+S toggles skills overlay
715
720
  if (key.ctrl && input === "s") {
716
721
  onToggleSkills?.();