@kenkaiiii/ggcoder 4.3.205 → 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.
- package/dist/cli.js +38 -26
- package/dist/cli.js.map +1 -1
- package/dist/config.js +2 -2
- package/dist/core/compaction/compactor.d.ts.map +1 -1
- package/dist/core/compaction/compactor.js +6 -0
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +16 -0
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/goal-controller.d.ts +57 -0
- package/dist/core/goal-controller.d.ts.map +1 -0
- package/dist/core/goal-controller.js +285 -0
- package/dist/core/goal-controller.js.map +1 -0
- package/dist/core/goal-controller.test.d.ts +2 -0
- package/dist/core/goal-controller.test.d.ts.map +1 -0
- package/dist/core/goal-controller.test.js +377 -0
- package/dist/core/goal-controller.test.js.map +1 -0
- package/dist/core/goal-lifecycle-smoke.test.d.ts +2 -0
- package/dist/core/goal-lifecycle-smoke.test.d.ts.map +1 -0
- package/dist/core/goal-lifecycle-smoke.test.js +207 -0
- package/dist/core/goal-lifecycle-smoke.test.js.map +1 -0
- package/dist/core/goal-store.d.ts +164 -0
- package/dist/core/goal-store.d.ts.map +1 -0
- package/dist/core/goal-store.js +721 -0
- package/dist/core/goal-store.js.map +1 -0
- package/dist/core/goal-store.test.d.ts +2 -0
- package/dist/core/goal-store.test.d.ts.map +1 -0
- package/dist/core/goal-store.test.js +341 -0
- package/dist/core/goal-store.test.js.map +1 -0
- package/dist/core/goal-verifier.d.ts +17 -0
- package/dist/core/goal-verifier.d.ts.map +1 -0
- package/dist/core/goal-verifier.js +84 -0
- package/dist/core/goal-verifier.js.map +1 -0
- package/dist/core/goal-verifier.test.d.ts +2 -0
- package/dist/core/goal-verifier.test.d.ts.map +1 -0
- package/dist/core/goal-verifier.test.js +88 -0
- package/dist/core/goal-verifier.test.js.map +1 -0
- package/dist/core/goal-worker.d.ts +47 -0
- package/dist/core/goal-worker.d.ts.map +1 -0
- package/dist/core/goal-worker.js +329 -0
- package/dist/core/goal-worker.js.map +1 -0
- package/dist/core/goal-worker.test.d.ts +2 -0
- package/dist/core/goal-worker.test.d.ts.map +1 -0
- package/dist/core/goal-worker.test.js +206 -0
- package/dist/core/goal-worker.test.js.map +1 -0
- package/dist/core/oauth/gemini.d.ts.map +1 -1
- package/dist/core/oauth/gemini.js +138 -30
- package/dist/core/oauth/gemini.js.map +1 -1
- package/dist/core/oauth/gemini.test.d.ts +2 -0
- package/dist/core/oauth/gemini.test.d.ts.map +1 -0
- package/dist/core/oauth/gemini.test.js +154 -0
- package/dist/core/oauth/gemini.test.js.map +1 -0
- package/dist/core/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +124 -0
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/prompt-commands.test.js +36 -0
- package/dist/core/prompt-commands.test.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +20 -11
- package/dist/interactive.js.map +1 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +18 -50
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +124 -1
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/edit-diff.d.ts.map +1 -1
- package/dist/tools/edit-diff.js +71 -32
- package/dist/tools/edit-diff.js.map +1 -1
- package/dist/tools/edit-diff.test.js +14 -0
- package/dist/tools/edit-diff.test.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +16 -6
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.js +27 -0
- package/dist/tools/edit.test.js.map +1 -1
- package/dist/tools/enter-plan.d.ts.map +1 -1
- package/dist/tools/enter-plan.js +1 -0
- package/dist/tools/enter-plan.js.map +1 -1
- package/dist/tools/goals.d.ts +110 -0
- package/dist/tools/goals.d.ts.map +1 -0
- package/dist/tools/goals.js +500 -0
- package/dist/tools/goals.js.map +1 -0
- package/dist/tools/goals.test.d.ts +2 -0
- package/dist/tools/goals.test.d.ts.map +1 -0
- package/dist/tools/goals.test.js +431 -0
- package/dist/tools/goals.test.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/prompt-hints.d.ts.map +1 -1
- package/dist/tools/prompt-hints.js +2 -0
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/source-path.d.ts +9 -0
- package/dist/tools/source-path.d.ts.map +1 -0
- package/dist/tools/source-path.js +119 -0
- package/dist/tools/source-path.js.map +1 -0
- package/dist/tools/source-path.test.d.ts +2 -0
- package/dist/tools/source-path.test.d.ts.map +1 -0
- package/dist/tools/source-path.test.js +80 -0
- package/dist/tools/source-path.test.js.map +1 -0
- package/dist/tools/subagent.js +16 -0
- package/dist/tools/subagent.js.map +1 -1
- package/dist/ui/App.d.ts +36 -3
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +879 -57
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/activity-phrases.d.ts.map +1 -1
- package/dist/ui/activity-phrases.js +7 -3
- package/dist/ui/activity-phrases.js.map +1 -1
- package/dist/ui/app-state-persistence.test.d.ts +2 -0
- package/dist/ui/app-state-persistence.test.d.ts.map +1 -0
- package/dist/ui/app-state-persistence.test.js +56 -0
- package/dist/ui/app-state-persistence.test.js.map +1 -0
- package/dist/ui/components/BackgroundTasksBar.d.ts +16 -1
- package/dist/ui/components/BackgroundTasksBar.d.ts.map +1 -1
- package/dist/ui/components/BackgroundTasksBar.js +15 -2
- package/dist/ui/components/BackgroundTasksBar.js.map +1 -1
- package/dist/ui/components/Banner.d.ts +2 -1
- package/dist/ui/components/Banner.d.ts.map +1 -1
- package/dist/ui/components/Banner.js +3 -3
- package/dist/ui/components/Banner.js.map +1 -1
- package/dist/ui/components/GoalOverlay.d.ts +21 -0
- package/dist/ui/components/GoalOverlay.d.ts.map +1 -0
- package/dist/ui/components/GoalOverlay.js +336 -0
- package/dist/ui/components/GoalOverlay.js.map +1 -0
- package/dist/ui/components/GoalStatusBar.d.ts +24 -0
- package/dist/ui/components/GoalStatusBar.d.ts.map +1 -0
- package/dist/ui/components/GoalStatusBar.js +113 -0
- package/dist/ui/components/GoalStatusBar.js.map +1 -0
- package/dist/ui/components/InputArea.d.ts +2 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +6 -1
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.js +94 -1
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/footer-status-layout.test.d.ts +2 -0
- package/dist/ui/footer-status-layout.test.d.ts.map +1 -0
- package/dist/ui/footer-status-layout.test.js +56 -0
- package/dist/ui/footer-status-layout.test.js.map +1 -0
- package/dist/ui/goal-events.d.ts +20 -0
- package/dist/ui/goal-events.d.ts.map +1 -0
- package/dist/ui/goal-events.js +102 -0
- package/dist/ui/goal-events.js.map +1 -0
- package/dist/ui/goal-events.test.d.ts +2 -0
- package/dist/ui/goal-events.test.d.ts.map +1 -0
- package/dist/ui/goal-events.test.js +208 -0
- package/dist/ui/goal-events.test.js.map +1 -0
- package/dist/ui/goal-overlay.test.d.ts +2 -0
- package/dist/ui/goal-overlay.test.d.ts.map +1 -0
- package/dist/ui/goal-overlay.test.js +122 -0
- package/dist/ui/goal-overlay.test.js.map +1 -0
- package/dist/ui/goal-status-bar.test.d.ts +2 -0
- package/dist/ui/goal-status-bar.test.d.ts.map +1 -0
- package/dist/ui/goal-status-bar.test.js +143 -0
- package/dist/ui/goal-status-bar.test.js.map +1 -0
- package/dist/ui/live-item-flush.test.js +48 -0
- package/dist/ui/live-item-flush.test.js.map +1 -1
- package/dist/ui/render.d.ts +8 -3
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +10 -3
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/scroll-stabilization.test.d.ts +2 -0
- package/dist/ui/scroll-stabilization.test.d.ts.map +1 -0
- package/dist/ui/scroll-stabilization.test.js +23 -0
- package/dist/ui/scroll-stabilization.test.js.map +1 -0
- package/dist/utils/format.js +44 -0
- package/dist/utils/format.js.map +1 -1
- package/package.json +6 -5
|
@@ -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":";AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EACL,aAAa,EACb,iCAAiC,EACjC,4BAA4B,EAC5B,0BAA0B,EAC1B,YAAY,EACZ,YAAY,EACZ,2BAA2B,GAK5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,SAAS,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG;IACf,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AACF,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,GAAG,GAAG,KAAK,CAAC;AAClB,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,gBAAgB,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;AAWtD,MAAM,UAAU,sBAAsB,CAAC,KAAa,EAAE,MAAc;IAClE,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAAY;IACxD,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IACxD,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACrF,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACrF,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9F,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,eAAe,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACvE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAC9B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CACnE,CAAC,MAAM,CAAC;IACT,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC3E,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,MAAM,GAAG;QACb,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE;QACvC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE;QACpC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE;KACxC;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,GAAG,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,cAAc,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU;QAAE,OAAO,YAAY,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAClF,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO;QAAE,OAAO,wBAAwB,CAAC;IAC3D,IAAI,GAAG,CAAC,QAAQ,EAAE,WAAW;QAAE,OAAO,oBAAoB,CAAC;IAC3D,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAwB;IAC9D,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,GAAG,MAAM,CAAC,MAAM,aAAa,MAAM,CAAC,OAAO,cAAc,MAAM,CAAC,OAAO,cAAc,MAAM,CAAC,OAAO,UAAU,CAAC;AACvH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAwB;IAC7D,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,YAAgC,EAChC,QAA4B;IAE5B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,CAAC,YAAY,CAAC,IAAI,CACvB,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,MAAM,KAAK,SAAS;QACxB,GAAG,CAAC,MAAM,KAAK,WAAW;QAC1B,GAAG,CAAC,cAAc,KAAK,SAAS;QAChC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CACrF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAE,IAAI,EAAoB;IAClD,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnD,KAAK,CAAC,IAAI,CACR,KAAC,IAAI,IAAS,KAAK,EAAE,KAAK,YACvB,EAAE,IADM,CAAC,CAEL,CACR,CAAC;YACF,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAC,IAAI,cAAE,KAAK,GAAQ,CAAC;AAC9B,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,OAAO,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3E,CAAC;AAED,SAAS,WAAW,CAAC,MAAqB;IACxC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC;QACtB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAA0B;IACjD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,OAAO,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAkC;IACjE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,OAAO,OAAO,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,OAAO,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,GAAY;IACzD,OAAO,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAe;IACzD,MAAM,SAAS,GAAG,OAAO;SACtB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5E,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,GAAG,EACH,IAAI,EACJ,YAAY,GAKb;IACC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,OAAO,GAAG,gBAAgB,EAAE,CAAC;QAC/B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,aACvE,KAAC,gBAAgB,IAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAI,EACxC,KAAC,gBAAgB,IAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAI,EACxC,KAAC,gBAAgB,IAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAI,EACxC,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,KAAK,EAAE,YAAY,EAAE,IAAI,gCAExB,EACN,YAAY,IAAI,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,iCAAyB,EAClE,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,yBAAM,QAAQ,CAAC,GAAG,CAAC,IAAQ,IACjD,EACN,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAC,UAAU,YACxC,WAAW,GACP,EACP,MAAC,IAAI,eACH,MAAC,IAAI,IAAC,KAAK,EAAE,YAAY,aAAG,MAAM,CAAC,MAAM,eAAe,EACxD,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,yBAAY,EACtC,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,aAAG,MAAM,CAAC,OAAO,eAAe,EACxD,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,yBAAY,EACtC,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,aAAG,MAAM,CAAC,OAAO,gBAAgB,EACxD,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,yBAAY,EACtC,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,aAAG,MAAM,CAAC,OAAO,gBAAgB,IACpD,IACH,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,aACvE,MAAC,GAAG,eACF,KAAC,gBAAgB,IAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAI,EACxC,KAAC,IAAI,cAAE,GAAG,GAAQ,EAClB,KAAC,IAAI,IAAC,KAAK,EAAE,YAAY,EAAE,IAAI,gCAExB,EACN,YAAY,IAAI,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,iCAAyB,IAC9D,EACN,MAAC,GAAG,eACF,KAAC,gBAAgB,IAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAI,EACxC,KAAC,IAAI,cAAE,GAAG,GAAQ,EAClB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAC,UAAU,YACxC,WAAW,GACP,IACH,EACN,MAAC,GAAG,eACF,KAAC,gBAAgB,IAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAI,EACxC,KAAC,IAAI,cAAE,GAAG,GAAQ,EAClB,MAAC,IAAI,eACH,MAAC,IAAI,IAAC,KAAK,EAAE,YAAY,aAAG,MAAM,CAAC,MAAM,eAAe,EACxD,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,yBAAY,EACtC,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,aAAG,MAAM,CAAC,OAAO,eAAe,EACxD,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,yBAAY,EACtC,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,aAAG,MAAM,CAAC,OAAO,gBAAgB,EACxD,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,yBAAY,EACtC,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,aAAG,MAAM,CAAC,OAAO,gBAAgB,IACpD,IACH,IACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,GAAG,EAAoB;IAC3C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,aACrD,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC9B,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,kBAC7B,8BAA8B,CAAC,GAAG,CAAC,GAC/B,EACN,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CACvC,MAAC,GAAG,IAAuB,aAAa,EAAC,QAAQ,aAC/C,MAAC,IAAI,eACH,MAAC,IAAI,IAAC,KAAK,EAAE,uBAAuB,CAAC,YAAY,CAAC,MAAM,CAAC,kBACrD,YAAY,CAAC,MAAM,SAChB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,kBAAI,YAAY,CAAC,KAAK,IAAQ,EACpD,0BAA0B,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAC1C,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,2CAA8B,CACzD,CAAC,CAAC,CAAC,IAAI,IACH,EACN,0BAA0B,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAC1C,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAC,MAAM,aACpC,IAAI,EACJ,iCAAiC,CAAC,YAAY,CAAC,IAC3C,CACR,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC1B,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAC,MAAM,aACpC,IAAI,EACJ,YAAY,CAAC,QAAQ,IACjB,CACR,CAAC,CAAC,CAAC,IAAI,KApBA,YAAY,CAAC,EAAE,CAqBnB,CACP,CAAC,IACE,CACP,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,kBAC7B,wBAAwB,CAAC,GAAG,CAAC,GACzB,EACN,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACxB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,YACvB,4BAA4B,CAAC,GAAG,CAAC;oBAChC,CAAC,CAAC,+DAA+D;oBACjE,CAAC,CAAC,sBAAsB,GACrB,CACR,CAAC,CAAC,CAAC,CACF,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACtB,MAAC,GAAG,IAAe,aAAa,EAAC,QAAQ,aACvC,MAAC,IAAI,eACH,MAAC,IAAI,IAAC,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAI,IAAI,CAAC,MAAM,SAAS,EACjE,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,kBAAI,IAAI,CAAC,KAAK,IAAQ,EAC7C,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,kCAAe,IAAI,CAAC,QAAQ,IAAQ,EAC7D,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,gCAAa,IAAI,CAAC,QAAQ,IAAQ,CAAC,CAAC,CAAC,IAAI,IAC/E,EACN,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAClB,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAI,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC,IAAQ,CACpF,CAAC,CAAC,CAAC,IAAI,KATA,IAAI,CAAC,EAAE,CAUX,CACP,CAAC,CACH,IACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,GAAG,EACH,OAAO,EACP,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,GACK;IACjB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAY,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAwC,QAAQ,CAAC,CAAC;IAClF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IACrE,MAAM,oBAAoB,GAAG,MAAM,CAAY,EAAE,CAAC,CAAC;IAEnD,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,OAAe,EAAE,EAAE;QACjD,SAAS,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,WAAW,CAAC,OAAO;YAAE,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3D,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACvC,IAAI,SAAS;oBAAE,OAAO;gBACtB,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;oBACvB,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;oBAChD,IAAI,CAAC,4BAA4B,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC;wBACxD,UAAU,CACR,8EAA8E,CAC/E,CAAC;wBACF,OAAO,YAAY,CAAC;oBACtB,CAAC;oBACD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;gBACzF,CAAC,CAAC,CAAC;gBACH,SAAS,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;QACP,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,WAAW,CAAC,OAAO;gBAAE,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC3D,IAAI,SAAS,CAAC,OAAO;gBAAE,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACzD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAElB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,SAAS,CAAC,OAAO;YAAE,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACvD,SAAS,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;gBACtE,UAAU,CAAC,2DAA2D,CAAC,CAAC;gBACxE,OAAO;YACT,CAAC;YACD,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAC;YACpC,KAAK,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAExB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,WAAW,IAAI,WAAW,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAEzF,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAClB,YAAY,CAAC,EAAE,CAAC,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE;wBAC7B,EAAE,EAAE,UAAU,EAAE;wBAChB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;wBACxB,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,OAAO;wBACf,eAAe,EAAE,EAAE;wBACnB,aAAa,EAAE,EAAE;wBACjB,OAAO,EAAE,EAAE;wBACX,KAAK,EAAE,EAAE;wBACT,QAAQ,EAAE,EAAE;wBACZ,QAAQ,EAAE,EAAE;qBACb,CAAC,CAAC;oBACH,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC1E,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBACpB,UAAU,CAAC,kBAAkB,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAClB,YAAY,CAAC,EAAE,CAAC,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAChC,YAAY,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI;gBAAE,YAAY,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YAC7B,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBAChC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAClB,UAAU,CAAC,mBAAmB,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YACD,IAAI,KAAK,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;gBACjC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnF,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAClB,UAAU,CAAC,eAAe,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACjC,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5E,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACnC,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5E,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;YACjD,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;YACjC,SAAS,CAAC,WAAW,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;YACjC,YAAY,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;YACjC,WAAW,CAAC,WAAW,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClB,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;YACjC,OAAO,CAAC,eAAe,CAAC,CAAC;YACzB,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,UAAU,IAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,GAAI,EAE/D,YAAY,CAAC,CAAC,CAAC,CACd,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,oFAEnB,GACH,CACP,CAAC,CAAC,CAAC,IAAI,EAEP,CAAC,MAAM,CAAC,CAAC,CAAC,CACT,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,oCAAuB,CAClD,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,gEAA8D,EACvF,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,2BAAa,SAAS,IAAQ,CAAC,CAAC,CAAC,IAAI,IAChF,CACP,CAAC,CAAC,CAAC,CACF,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;wBACvB,MAAM,QAAQ,GAAG,KAAK,KAAK,aAAa,CAAC;wBACzC,MAAM,OAAO,GAAG,4BAA4B,CAAC,GAAG,CAAC,CAAC;wBAClD,OAAO,CACL,MAAC,GAAG,IAAc,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACtD,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,YAClD,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAClB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,kBAC3E,GAAG,CAAC,MAAM,SACP,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,aAC/D,GAAG,EACH,GAAG,CAAC,KAAK,IACL,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,yBAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAQ,EACzD,OAAO,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,gCAAmB,CAAC,CAAC,CAAC,IAAI,IAC1D,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,aACvB,MAAM,EACN,6BAA6B,CAAC,GAAG,CAAC,cAAK,qBAAqB,CAAC,GAAG,CAAC,aAAI,GAAG,EACxE,yBAAyB,CAAC,GAAG,CAAC,IAC1B,EACN,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACzB,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,aACvB,MAAM,eAAW,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAC5B,CACR,CAAC,CAAC,CAAC,IAAI,EACP,WAAW,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,GAAG,EAAE,GAAG,GAAI,CAAC,CAAC,CAAC,IAAI,KAzBrD,GAAG,CAAC,EAAE,CA0BV,CACP,CAAC;oBACJ,CAAC,CAAC,EACD,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,2BAAa,SAAS,IAAQ,CAAC,CAAC,CAAC,IAAI,IAChF,CACP,EAED,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACd,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,CAC1B,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,mDAA2C,CACtE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CACtB,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,aACxB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,sBAAc,EACvC,SAAS,EACV,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,oBAAY,EACrC,SAAS,IACL,CACR,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,aACxB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,6BAAW,EACpC,WAAW,EACZ,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAU,EACnC,YAAY,EACb,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAU,EACnC,SAAS,EACV,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAU,EACnC,YAAY,EACb,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAU,EACnC,WAAW,EACZ,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAU,EACnC,SAAS,EACV,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAU,EACnC,aAAa,EACd,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,oBAAY,EACrC,QAAQ,IACJ,CACR,GACG,EACL,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,YAAG,MAAM,GAAQ,GACzC,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -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,
|
|
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?.();
|