next-anteater 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/anteater-bar.d.ts +3 -0
- package/dist/components/anteater-bar.d.ts.map +1 -0
- package/dist/components/anteater-bar.js +186 -0
- package/dist/components/anteater-bar.js.map +1 -0
- package/dist/hooks/use-anteater-runs.d.ts +9 -0
- package/dist/hooks/use-anteater-runs.d.ts.map +1 -0
- package/dist/hooks/use-anteater-runs.js +99 -0
- package/dist/hooks/use-anteater-runs.js.map +1 -0
- package/dist/hooks/use-anteater.d.ts +14 -0
- package/dist/hooks/use-anteater.d.ts.map +1 -0
- package/dist/hooks/use-anteater.js +143 -0
- package/dist/hooks/use-anteater.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/lib/scaffold.mjs +4 -4
- package/lib/setup.mjs +12 -6
- package/lib/uninstall.mjs +5 -5
- package/package.json +22 -2
- package/src/components/anteater-bar.tsx +322 -0
- package/src/hooks/use-anteater-runs.ts +120 -0
- package/src/hooks/use-anteater.ts +171 -0
- package/src/index.ts +12 -0
- package/src/types.ts +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anteater-bar.d.ts","sourceRoot":"","sources":["../../src/components/anteater-bar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,UAAU,CAAC;AAsF9D,wBAAgB,WAAW,CAAC,EAC1B,WAA6B,EAC7B,IAAa,EACb,WAAoC,EACpC,MAAM,GACP,EAAE,gBAAgB,2CAkOlB"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useRef, useEffect } from "react";
|
|
4
|
+
import { useAnteaterRuns } from "../hooks/use-anteater-runs";
|
|
5
|
+
const BUTTON_SIZE = 48;
|
|
6
|
+
const STEP_EMOJI = {
|
|
7
|
+
initializing: "\u{1F680}",
|
|
8
|
+
working: "\u{1F528}",
|
|
9
|
+
merging: "\u{1F500}",
|
|
10
|
+
redeploying: "\u{2699}\uFE0F",
|
|
11
|
+
done: "\u{2705}",
|
|
12
|
+
error: "\u{274C}",
|
|
13
|
+
};
|
|
14
|
+
function AnteaterLogo({ size = 22, color = "#888" }) {
|
|
15
|
+
return (_jsx("svg", { width: size, height: size, viewBox: "0 0 3815 2340", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("g", { transform: "translate(3814.6667, 0) scale(-1, 1)", children: _jsx("path", { fill: color, d: "m 182.30276,2338.6321 c -25.23821,-3.9691 -53.21149,-19.3932 -71.53764,-39.4449 -13.958656,-15.273 -31.281076,-45.4993 -43.329612,-75.6069 C 52.348006,2185.8788 29.948821,2089.765 18.127022,2012 7.3503548,1941.11 0.73193799,1854.4643 0.8640631,1786 1.0197659,1705.3183 11.290219,1581.6276 24.113397,1506 30.594022,1467.7791 50.859424,1371.4946 59.192438,1339.3333 96.466833,1195.4729 140.26877,1078.0772 204.82439,949.01802 234.917,888.85707 267.6281,829.37112 289.33502,795.33333 c 4.20902,-6.6 13.23217,-21 20.05146,-32 C 383.13932,644.36468 486.57803,519.01711 592.66668,420.05291 707.66832,312.77428 808.75523,240.06773 940.66669,169.75465 1053.8863,109.40491 1197.5613,57.586132 1326.6667,30.537289 1389.3841,17.397383 1444.5277,9.6398893 1522,3.0581926 c 40.3889,-3.43125434 165.6731,-3.43383441 208,-0.00428 86.5824,7.0153529 144.3217,15.3103319 224.6667,32.2762279 46.2392,9.764011 48.2291,10.254819 84.6667,20.883785 89.2233,26.026725 181.5133,59.145248 240,86.124668 148.7124,68.59982 251.3358,128.12635 387.3333,224.67201 42.4068,30.10491 111.1713,84.97179 169.3334,135.11039 94.3341,81.32076 147.4322,130.97142 199.1713,186.24012 26.4556,28.26029 38.5537,36.88163 51.8413,36.94294 7.2142,0.0333 5.685,1.70153 22.5745,-24.62685 11.8797,-18.51872 26.3758,-33.27502 38.4129,-39.10256 21.0954,-10.21294 36.9789,-10.09015 58.0843,0.44904 32.0231,15.99101 52.1473,47.14976 59.404,91.97632 2.5551,15.78384 2.0125,50.89765 -1.4836,96 -2.7234,35.13499 -2.9004,41.61027 -1.4552,53.23957 1.791,14.41207 6.4964,30.93707 11.7961,41.4271 7.3083,14.46577 35.5048,61.76003 62.7562,105.26143 5.4879,8.7605 20.7702,33.9605 33.9604,56 13.1903,22.0395 26.7921,44.2719 30.2262,49.4052 23.9784,35.8436 78.5028,134.7578 125.3127,227.3334 9.6618,19.1081 57.4784,121.0759 69.7155,148.6666 18.2937,41.2466 52.8121,125.6082 70.3775,172 2.7766,7.3334 10.2659,27.1334 16.6428,44 20.2143,53.4658 59.5797,173.6147 77.3228,236 21.7424,76.4472 33.8635,125.4051 45.225,182.6667 12.3599,62.293 11.6558,91.916 -2.8836,121.3333 -11.3715,23.0076 -34.9808,40.9392 -64.3504,48.8753 -16.36,4.4207 -44.053,4.3897 -59.3174,-0.066 -22.7272,-6.6345 -41.0676,-18.1321 -61.6208,-38.63 -19.7205,-19.6675 -35.9701,-48.2657 -56.1645,-98.8456 -23.7503,-59.4865 -62.7745,-141.33 -99.4954,-208.6667 -19.372,-35.5234 -47.4287,-82.7649 -70.476,-118.6667 -80.6181,-125.5823 -149.8956,-212.5934 -244.7823,-307.4418 -67.7099,-67.6825 -115.4814,-109.3553 -173.5361,-151.3819 -72.1222,-52.2103 -125.5361,-82.0843 -185.2585,-103.6139 -46.372,-16.7169 -74.0174,-22.5684 -106.6664,-22.5772 -30.3448,-0.01 -50.7167,4.3738 -73.8901,15.8939 -35.4623,17.6292 -60.7334,41.8224 -75.7704,72.5383 -7.6337,15.5933 -10.9677,27.6339 -13.8214,49.916 -1.8862,14.7272 -1.9861,19.7356 -0.6641,33.3115 3.8149,39.1788 15.2694,75.2852 38.7847,122.2554 13.9901,27.9443 45.5244,81.9949 68.7074,117.7664 29.3149,45.2329 65.1262,102.2906 92.8946,148.0076 40.7262,67.0504 77.6292,149.3023 97.0141,216.2314 11.2209,38.7419 16.0654,69.2928 17.0107,107.2753 1.0563,42.4406 -2.4824,66.343 -13.6816,92.412 -12.7939,29.7815 -31.6056,49.7294 -59.8662,63.4822 -39.6598,19.3002 -84.8134,17.0969 -119.0616,-5.8097 -23.407,-15.6555 -40.5848,-35.6295 -75.3361,-87.5988 -30.0517,-44.9414 -46.1877,-67.9888 -63.4778,-90.6667 -43.4808,-57.0299 -91.4949,-111.2316 -147.0681,-166.0207 -63.3788,-62.4845 -111.4374,-102.9115 -300.4087,-252.7041 -12.449,-9.868 -29.249,-23.2776 -37.3333,-29.7991 -67.985,-54.8425 -108.8275,-86.783 -143.1167,-111.9229 -74.1598,-54.3719 -153.9841,-97.1415 -232.1162,-124.3668 -87.7162,-30.565 -183.514,-45.1992 -266.4136,-40.6976 -147.2011,7.9933 -289.3273,57.5801 -425.34015,148.3982 -77.33395,51.6372 -160.45976,129.6244 -229.28678,215.113 -11.78586,14.639 -33.01899,43.8999 -71.11349,98 -13.68395,19.4334 -30.45614,43.1334 -37.27153,52.6667 -6.81539,9.5333 -21.07762,30.5333 -31.69385,46.6667 -26.09105,39.6502 -71.55779,105.6268 -113.23957,164.3214 -37.90541,53.3769 -91.58196,110.1984 -136.14021,144.1165 -23.84606,18.1519 -50.91697,33.7338 -74.81857,43.0654 -22.03271,8.6019 -54.52798,13.2904 -72.51209,10.4621 z" }) }) }));
|
|
16
|
+
}
|
|
17
|
+
function SendIcon({ size = 20, color = "#fff" }) {
|
|
18
|
+
return (_jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("line", { x1: "22", y1: "2", x2: "11", y2: "13" }), _jsx("polygon", { points: "22 2 15 22 11 13 2 9 22 2" })] }));
|
|
19
|
+
}
|
|
20
|
+
function RunsList({ runs }) {
|
|
21
|
+
if (runs.length === 0)
|
|
22
|
+
return null;
|
|
23
|
+
return (_jsx("div", { style: { padding: "10px 14px", display: "flex", flexDirection: "column", gap: "6px" }, children: runs.map((run) => (_jsxs("div", { style: {
|
|
24
|
+
display: "flex",
|
|
25
|
+
alignItems: "center",
|
|
26
|
+
gap: "8px",
|
|
27
|
+
}, children: [_jsx("span", { style: { fontSize: "14px", flexShrink: 0 }, children: STEP_EMOJI[run.step] || STEP_EMOJI.working }), _jsx("span", { style: {
|
|
28
|
+
fontSize: "13px",
|
|
29
|
+
color: run.step === "done" ? "#888" : "#ccc",
|
|
30
|
+
overflow: "hidden",
|
|
31
|
+
textOverflow: "ellipsis",
|
|
32
|
+
whiteSpace: "nowrap",
|
|
33
|
+
flex: 1,
|
|
34
|
+
minWidth: 0,
|
|
35
|
+
}, children: run.prompt })] }, run.branch))) }));
|
|
36
|
+
}
|
|
37
|
+
export function AnteaterBar({ apiEndpoint = "/api/anteater", mode = "prod", placeholder = "Describe a change...", branch, }) {
|
|
38
|
+
const [prompt, setPrompt] = useState("");
|
|
39
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
40
|
+
const inputRef = useRef(null);
|
|
41
|
+
const { runs, submitting, error, canSubmit, submit } = useAnteaterRuns(apiEndpoint);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (isExpanded && inputRef.current) {
|
|
44
|
+
const isMobile = window.matchMedia("(max-width: 768px)").matches;
|
|
45
|
+
if (!isMobile) {
|
|
46
|
+
inputRef.current.focus();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}, [isExpanded]);
|
|
50
|
+
const handleSubmit = async (e) => {
|
|
51
|
+
if (e)
|
|
52
|
+
e.preventDefault();
|
|
53
|
+
if (!prompt.trim() || submitting)
|
|
54
|
+
return;
|
|
55
|
+
const result = await submit({
|
|
56
|
+
prompt: prompt.trim(),
|
|
57
|
+
mode,
|
|
58
|
+
branch,
|
|
59
|
+
context: {
|
|
60
|
+
pathname: typeof window !== "undefined" ? window.location.pathname : undefined,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
if (result) {
|
|
64
|
+
setPrompt("");
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const handleButtonClick = () => {
|
|
68
|
+
if (!isExpanded) {
|
|
69
|
+
setIsExpanded(true);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (prompt.trim() && canSubmit) {
|
|
73
|
+
handleSubmit();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (runs.length === 0) {
|
|
77
|
+
setIsExpanded(false);
|
|
78
|
+
setPrompt("");
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const hasRuns = runs.length > 0;
|
|
82
|
+
const hasText = prompt.trim().length > 0;
|
|
83
|
+
const canSend = hasText && canSubmit;
|
|
84
|
+
return (_jsxs(_Fragment, { children: [_jsx("style", { children: `
|
|
85
|
+
@keyframes anteater-pulse {
|
|
86
|
+
0%, 100% { opacity: 1; transform: scale(1); }
|
|
87
|
+
50% { opacity: 0.5; transform: scale(0.75); }
|
|
88
|
+
}
|
|
89
|
+
@keyframes anteater-slide-up {
|
|
90
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
91
|
+
to { opacity: 1; transform: translateY(0); }
|
|
92
|
+
}
|
|
93
|
+
` }), _jsx("div", { style: {
|
|
94
|
+
position: "fixed",
|
|
95
|
+
bottom: "24px",
|
|
96
|
+
right: "24px",
|
|
97
|
+
zIndex: 9999,
|
|
98
|
+
display: "flex",
|
|
99
|
+
flexDirection: "column",
|
|
100
|
+
alignItems: "flex-end",
|
|
101
|
+
}, children: _jsxs("div", { style: { position: "relative" }, children: [isExpanded && (_jsxs("div", { style: {
|
|
102
|
+
position: "absolute",
|
|
103
|
+
bottom: 0,
|
|
104
|
+
left: "40px",
|
|
105
|
+
right: `${BUTTON_SIZE / 2 + 40}px`,
|
|
106
|
+
zIndex: 0,
|
|
107
|
+
background: "#111",
|
|
108
|
+
border: "1px solid #444",
|
|
109
|
+
borderRadius: "12px",
|
|
110
|
+
overflow: "hidden",
|
|
111
|
+
boxShadow: "0 -4px 16px rgba(0, 0, 0, 0.3)",
|
|
112
|
+
animation: "anteater-slide-up 0.25s ease-out",
|
|
113
|
+
paddingBottom: `${BUTTON_SIZE + 4}px`,
|
|
114
|
+
}, children: [hasRuns && _jsx(RunsList, { runs: runs }), !hasRuns && !error && (_jsx("div", { style: {
|
|
115
|
+
padding: "12px 16px",
|
|
116
|
+
fontSize: "13px",
|
|
117
|
+
color: "#555",
|
|
118
|
+
}, children: "No active changes" })), error && (_jsx("div", { style: {
|
|
119
|
+
padding: "10px 16px",
|
|
120
|
+
fontSize: "13px",
|
|
121
|
+
color: "#ef4444",
|
|
122
|
+
}, children: error }))] })), _jsxs("div", { style: { position: "relative", zIndex: 1 }, children: [_jsx("form", { onSubmit: handleSubmit, style: {
|
|
123
|
+
overflow: "hidden",
|
|
124
|
+
width: isExpanded ? "min(360px, calc(100vw - 100px))" : "0px",
|
|
125
|
+
opacity: isExpanded ? 1 : 0,
|
|
126
|
+
marginRight: `${BUTTON_SIZE / 2}px`,
|
|
127
|
+
transition: "width 0.3s ease, opacity 0.2s ease",
|
|
128
|
+
}, children: _jsx("div", { style: {
|
|
129
|
+
display: "flex",
|
|
130
|
+
alignItems: "center",
|
|
131
|
+
background: "#111",
|
|
132
|
+
border: "1px solid #333",
|
|
133
|
+
borderRadius: "12px",
|
|
134
|
+
padding: "8px 16px",
|
|
135
|
+
height: `${BUTTON_SIZE}px`,
|
|
136
|
+
boxSizing: "border-box",
|
|
137
|
+
boxShadow: "0 4px 24px rgba(0, 0, 0, 0.4)",
|
|
138
|
+
}, children: _jsx("input", { ref: inputRef, type: "text", value: prompt, onChange: (e) => setPrompt(e.target.value), placeholder: submitting
|
|
139
|
+
? "Sending..."
|
|
140
|
+
: !canSubmit && runs.length >= 5
|
|
141
|
+
? "Max 5 runs at once"
|
|
142
|
+
: placeholder, disabled: submitting || runs.length >= 5, style: {
|
|
143
|
+
flex: 1,
|
|
144
|
+
background: "transparent",
|
|
145
|
+
border: "none",
|
|
146
|
+
outline: "none",
|
|
147
|
+
color: error ? "#ef4444" : "#fff",
|
|
148
|
+
fontSize: "16px",
|
|
149
|
+
fontFamily: "inherit",
|
|
150
|
+
minWidth: 0,
|
|
151
|
+
}, onKeyDown: (e) => {
|
|
152
|
+
if (e.key === "Escape" && !hasRuns) {
|
|
153
|
+
setIsExpanded(false);
|
|
154
|
+
setPrompt("");
|
|
155
|
+
}
|
|
156
|
+
} }) }) }), _jsx("button", { type: "button", onClick: handleButtonClick, style: {
|
|
157
|
+
position: "absolute",
|
|
158
|
+
right: 0,
|
|
159
|
+
bottom: 0,
|
|
160
|
+
zIndex: 2,
|
|
161
|
+
width: `${BUTTON_SIZE}px`,
|
|
162
|
+
height: `${BUTTON_SIZE}px`,
|
|
163
|
+
borderRadius: "50%",
|
|
164
|
+
border: "none",
|
|
165
|
+
background: canSend ? "#888" : "#fff",
|
|
166
|
+
cursor: "pointer",
|
|
167
|
+
display: "flex",
|
|
168
|
+
alignItems: "center",
|
|
169
|
+
justifyContent: "center",
|
|
170
|
+
boxShadow: canSend
|
|
171
|
+
? "0 4px 24px rgba(0, 0, 0, 0.4)"
|
|
172
|
+
: "0 4px 24px rgba(0, 0, 0, 0.3)",
|
|
173
|
+
transition: "all 0.2s ease",
|
|
174
|
+
}, onMouseEnter: (e) => {
|
|
175
|
+
e.currentTarget.style.transform = "scale(1.08)";
|
|
176
|
+
e.currentTarget.style.boxShadow = canSend
|
|
177
|
+
? "0 4px 32px rgba(0, 0, 0, 0.5)"
|
|
178
|
+
: "0 4px 32px rgba(0, 0, 0, 0.4)";
|
|
179
|
+
}, onMouseLeave: (e) => {
|
|
180
|
+
e.currentTarget.style.transform = "scale(1)";
|
|
181
|
+
e.currentTarget.style.boxShadow = canSend
|
|
182
|
+
? "0 4px 24px rgba(0, 0, 0, 0.4)"
|
|
183
|
+
: "0 4px 24px rgba(0, 0, 0, 0.3)";
|
|
184
|
+
}, children: canSend ? (_jsx(SendIcon, { size: 20, color: "#000" })) : (_jsx("span", { style: { marginTop: "-3px" }, children: _jsx(AnteaterLogo, { size: 34, color: "#111" }) })) })] })] }) })] }));
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=anteater-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anteater-bar.js","sourceRoot":"","sources":["../../src/components/anteater-bar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AnteaterRequest, AnteaterResponse, AnteaterRun } from "../types";
|
|
2
|
+
export declare function useAnteaterRuns(apiEndpoint?: string): {
|
|
3
|
+
runs: AnteaterRun[];
|
|
4
|
+
submitting: boolean;
|
|
5
|
+
error: string | null;
|
|
6
|
+
canSubmit: boolean;
|
|
7
|
+
submit: (request: AnteaterRequest) => Promise<AnteaterResponse | null>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=use-anteater-runs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-anteater-runs.d.ts","sourceRoot":"","sources":["../../src/hooks/use-anteater-runs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAwB,MAAM,UAAU,CAAC;AAKrG,wBAAgB,eAAe,CAAC,WAAW,GAAE,MAAwB;;;;;sBAkEjD,eAAe;EA6ClC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useCallback, useRef, useEffect } from "react";
|
|
3
|
+
const POLL_ACTIVE = 3000; // 3s when runs are active
|
|
4
|
+
const POLL_IDLE = 30000; // 30s when no runs (discover others' runs)
|
|
5
|
+
export function useAnteaterRuns(apiEndpoint = "/api/anteater") {
|
|
6
|
+
const [runs, setRuns] = useState([]);
|
|
7
|
+
const [submitting, setSubmitting] = useState(false);
|
|
8
|
+
const [error, setError] = useState(null);
|
|
9
|
+
const pollingRef = useRef(null);
|
|
10
|
+
const initialDeploymentIdRef = useRef(null);
|
|
11
|
+
const mountedRef = useRef(true);
|
|
12
|
+
const pollRuns = useCallback(async () => {
|
|
13
|
+
try {
|
|
14
|
+
const res = await fetch(`${apiEndpoint}/runs`, { cache: "no-store" });
|
|
15
|
+
if (!res.ok)
|
|
16
|
+
return;
|
|
17
|
+
const data = await res.json();
|
|
18
|
+
if (!mountedRef.current)
|
|
19
|
+
return;
|
|
20
|
+
setRuns(data.runs);
|
|
21
|
+
// Track deployment ID for reload detection
|
|
22
|
+
if (data.deploymentId && !initialDeploymentIdRef.current) {
|
|
23
|
+
initialDeploymentIdRef.current = data.deploymentId;
|
|
24
|
+
}
|
|
25
|
+
// Detect new deployment — a run completed and Vercel redeployed
|
|
26
|
+
if (data.deploymentId &&
|
|
27
|
+
initialDeploymentIdRef.current &&
|
|
28
|
+
data.deploymentId !== initialDeploymentIdRef.current) {
|
|
29
|
+
console.log("[anteater] New deployment detected, reloading...");
|
|
30
|
+
// Prefetch to warm CDN, then reload
|
|
31
|
+
try {
|
|
32
|
+
await fetch(window.location.href, { cache: "no-store" });
|
|
33
|
+
}
|
|
34
|
+
catch { }
|
|
35
|
+
window.location.reload();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Network error — will retry on next interval
|
|
41
|
+
}
|
|
42
|
+
}, [apiEndpoint]);
|
|
43
|
+
// Start/restart polling with the appropriate interval
|
|
44
|
+
const startPolling = useCallback((interval) => {
|
|
45
|
+
if (pollingRef.current)
|
|
46
|
+
clearInterval(pollingRef.current);
|
|
47
|
+
pollingRef.current = setInterval(pollRuns, interval);
|
|
48
|
+
}, [pollRuns]);
|
|
49
|
+
// Adjust poll frequency based on active runs
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
const interval = runs.length > 0 ? POLL_ACTIVE : POLL_IDLE;
|
|
52
|
+
startPolling(interval);
|
|
53
|
+
}, [runs.length, startPolling]);
|
|
54
|
+
// Poll immediately on mount, clean up on unmount
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
mountedRef.current = true;
|
|
57
|
+
pollRuns();
|
|
58
|
+
return () => {
|
|
59
|
+
mountedRef.current = false;
|
|
60
|
+
if (pollingRef.current)
|
|
61
|
+
clearInterval(pollingRef.current);
|
|
62
|
+
};
|
|
63
|
+
}, [pollRuns]);
|
|
64
|
+
const submit = useCallback(async (request) => {
|
|
65
|
+
if (runs.length >= 5) {
|
|
66
|
+
setError("Maximum 5 concurrent runs");
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
setSubmitting(true);
|
|
70
|
+
setError(null);
|
|
71
|
+
try {
|
|
72
|
+
const res = await fetch(apiEndpoint, {
|
|
73
|
+
method: "POST",
|
|
74
|
+
headers: { "Content-Type": "application/json" },
|
|
75
|
+
body: JSON.stringify(request),
|
|
76
|
+
});
|
|
77
|
+
const data = await res.json();
|
|
78
|
+
if (!res.ok || data.status === "error") {
|
|
79
|
+
setError(data.error || `Request failed (${res.status})`);
|
|
80
|
+
setSubmitting(false);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
setSubmitting(false);
|
|
84
|
+
// Immediately poll to pick up the new run
|
|
85
|
+
await pollRuns();
|
|
86
|
+
// Switch to fast polling
|
|
87
|
+
startPolling(POLL_ACTIVE);
|
|
88
|
+
return data;
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
setError(err instanceof Error ? err.message : "Unknown error");
|
|
92
|
+
setSubmitting(false);
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
}, [apiEndpoint, runs.length, pollRuns, startPolling]);
|
|
96
|
+
const canSubmit = !submitting && runs.length < 5;
|
|
97
|
+
return { runs, submitting, error, canSubmit, submit };
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=use-anteater-runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-anteater-runs.js","sourceRoot":"","sources":["../../src/hooks/use-anteater-runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AnteaterRequest, AnteaterResponse } from "../types";
|
|
2
|
+
type Status = "idle" | "submitting" | "success" | "error";
|
|
3
|
+
export type PipelineStep = "initializing" | "working" | "merging" | "redeploying" | "done";
|
|
4
|
+
export declare function useAnteater(apiEndpoint?: string): {
|
|
5
|
+
status: Status;
|
|
6
|
+
response: AnteaterResponse | null;
|
|
7
|
+
error: string | null;
|
|
8
|
+
pipelineStep: PipelineStep | null;
|
|
9
|
+
pipelineSteps: PipelineStep[];
|
|
10
|
+
submit: (request: AnteaterRequest) => Promise<AnteaterResponse | null>;
|
|
11
|
+
reset: () => void;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=use-anteater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-anteater.d.ts","sourceRoot":"","sources":["../../src/hooks/use-anteater.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAA0B,MAAM,UAAU,CAAC;AAE1F,KAAK,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAO3F,wBAAgB,WAAW,CAAC,WAAW,GAAE,MAAwB;;;;;;sBAwG7C,eAAe;;EAoDlC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useCallback, useRef, useEffect } from "react";
|
|
3
|
+
const PIPELINE_STEPS = ["initializing", "working", "merging", "redeploying"];
|
|
4
|
+
const POLL_INTERVAL = 3000;
|
|
5
|
+
const POLL_TIMEOUT = 6 * 60 * 60 * 1000; // 6 hours
|
|
6
|
+
export function useAnteater(apiEndpoint = "/api/anteater") {
|
|
7
|
+
const [status, setStatus] = useState("idle");
|
|
8
|
+
const [response, setResponse] = useState(null);
|
|
9
|
+
const [error, setError] = useState(null);
|
|
10
|
+
const [pipelineStep, setPipelineStep] = useState(null);
|
|
11
|
+
const pollingRef = useRef(null);
|
|
12
|
+
const branchRef = useRef(null);
|
|
13
|
+
const pollingStartRef = useRef(0);
|
|
14
|
+
const initialDeploymentIdRef = useRef(null);
|
|
15
|
+
const stopPolling = useCallback(() => {
|
|
16
|
+
if (pollingRef.current) {
|
|
17
|
+
clearInterval(pollingRef.current);
|
|
18
|
+
pollingRef.current = null;
|
|
19
|
+
}
|
|
20
|
+
}, []);
|
|
21
|
+
// Clean up on unmount
|
|
22
|
+
useEffect(() => stopPolling, [stopPolling]);
|
|
23
|
+
const triggerReload = useCallback(() => {
|
|
24
|
+
console.log(`[anteater] New deployment detected, reloading...`);
|
|
25
|
+
stopPolling();
|
|
26
|
+
setPipelineStep("done");
|
|
27
|
+
// Wait for CDN propagation, then reload with a cache-busted prefetch
|
|
28
|
+
// so the browser picks up fresh content without a visible query param
|
|
29
|
+
setTimeout(async () => {
|
|
30
|
+
if (typeof window === "undefined")
|
|
31
|
+
return;
|
|
32
|
+
try {
|
|
33
|
+
await fetch(window.location.href, { cache: "no-store" });
|
|
34
|
+
}
|
|
35
|
+
catch { }
|
|
36
|
+
window.location.reload();
|
|
37
|
+
}, 4000);
|
|
38
|
+
}, [stopPolling]);
|
|
39
|
+
const pollStatus = useCallback(async () => {
|
|
40
|
+
const branch = branchRef.current;
|
|
41
|
+
if (!branch)
|
|
42
|
+
return;
|
|
43
|
+
// Timeout after 5 minutes of polling
|
|
44
|
+
const elapsed = Date.now() - pollingStartRef.current;
|
|
45
|
+
if (pollingStartRef.current > 0 && elapsed > POLL_TIMEOUT) {
|
|
46
|
+
console.error(`[anteater] Polling timed out after ${Math.round(elapsed / 1000)}s`, { branch });
|
|
47
|
+
stopPolling();
|
|
48
|
+
setStatus("error");
|
|
49
|
+
setError("Request timed out — check GitHub Actions for details");
|
|
50
|
+
setPipelineStep(null);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const res = await fetch(`${apiEndpoint}?branch=${encodeURIComponent(branch)}`, {
|
|
55
|
+
cache: "no-store",
|
|
56
|
+
});
|
|
57
|
+
if (!res.ok) {
|
|
58
|
+
console.warn(`[anteater] Poll failed: ${res.status} ${res.statusText}`, { branch });
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const data = await res.json();
|
|
62
|
+
console.log(`[anteater] Poll: step=${data.step}, deployId=${data.deploymentId ?? "n/a"}`, { branch });
|
|
63
|
+
// Track the initial deployment ID from the first response
|
|
64
|
+
if (data.deploymentId && !initialDeploymentIdRef.current) {
|
|
65
|
+
initialDeploymentIdRef.current = data.deploymentId;
|
|
66
|
+
console.log(`[anteater] Initial deployment ID: ${data.deploymentId}`);
|
|
67
|
+
}
|
|
68
|
+
if (data.step === "error") {
|
|
69
|
+
console.error(`[anteater] Pipeline error: ${data.error}`, { branch });
|
|
70
|
+
stopPolling();
|
|
71
|
+
setStatus("error");
|
|
72
|
+
setError(data.error || "Workflow failed");
|
|
73
|
+
setPipelineStep(null);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Detect new deployment: if deployment ID changed, new code is live
|
|
77
|
+
if (data.deploymentId &&
|
|
78
|
+
initialDeploymentIdRef.current &&
|
|
79
|
+
data.deploymentId !== initialDeploymentIdRef.current) {
|
|
80
|
+
console.log(`[anteater] New deployment detected: ${initialDeploymentIdRef.current} → ${data.deploymentId}`);
|
|
81
|
+
triggerReload();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
setPipelineStep(data.step);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
console.warn(`[anteater] Poll network error (will retry):`, err);
|
|
88
|
+
}
|
|
89
|
+
}, [apiEndpoint, stopPolling, triggerReload]);
|
|
90
|
+
const startPolling = useCallback(() => {
|
|
91
|
+
stopPolling();
|
|
92
|
+
pollingStartRef.current = Date.now();
|
|
93
|
+
initialDeploymentIdRef.current = null;
|
|
94
|
+
pollStatus();
|
|
95
|
+
pollingRef.current = setInterval(pollStatus, POLL_INTERVAL);
|
|
96
|
+
}, [stopPolling, pollStatus]);
|
|
97
|
+
const submit = useCallback(async (request) => {
|
|
98
|
+
console.log(`[anteater] Submitting: prompt="${request.prompt}", mode=${request.mode}`);
|
|
99
|
+
setStatus("submitting");
|
|
100
|
+
setError(null);
|
|
101
|
+
setResponse(null);
|
|
102
|
+
setPipelineStep("initializing");
|
|
103
|
+
try {
|
|
104
|
+
const res = await fetch(apiEndpoint, {
|
|
105
|
+
method: "POST",
|
|
106
|
+
headers: { "Content-Type": "application/json" },
|
|
107
|
+
body: JSON.stringify(request),
|
|
108
|
+
});
|
|
109
|
+
const data = await res.json();
|
|
110
|
+
if (!res.ok || data.status === "error") {
|
|
111
|
+
console.error(`[anteater] Submit failed: ${data.error}`, { status: res.status, data });
|
|
112
|
+
setStatus("error");
|
|
113
|
+
setError(data.error || `Request failed (${res.status})`);
|
|
114
|
+
setPipelineStep(null);
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
console.log(`[anteater] Queued: requestId=${data.requestId}, branch=${data.branch}`);
|
|
118
|
+
setStatus("success");
|
|
119
|
+
setResponse(data);
|
|
120
|
+
branchRef.current = data.branch;
|
|
121
|
+
startPolling();
|
|
122
|
+
return data;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
console.error(`[anteater] Submit error:`, err);
|
|
126
|
+
setStatus("error");
|
|
127
|
+
setError(err instanceof Error ? err.message : "Unknown error");
|
|
128
|
+
setPipelineStep(null);
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
}, [apiEndpoint, startPolling]);
|
|
132
|
+
const reset = useCallback(() => {
|
|
133
|
+
setStatus("idle");
|
|
134
|
+
setResponse(null);
|
|
135
|
+
setError(null);
|
|
136
|
+
setPipelineStep(null);
|
|
137
|
+
branchRef.current = null;
|
|
138
|
+
initialDeploymentIdRef.current = null;
|
|
139
|
+
stopPolling();
|
|
140
|
+
}, [stopPolling]);
|
|
141
|
+
return { status, response, error, pipelineStep, pipelineSteps: PIPELINE_STEPS, submit, reset };
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=use-anteater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-anteater.js","sourceRoot":"","sources":["../../src/hooks/use-anteater.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { AnteaterBar } from "./components/anteater-bar";
|
|
2
|
+
export { useAnteater } from "./hooks/use-anteater";
|
|
3
|
+
export { useAnteaterRuns } from "./hooks/use-anteater-runs";
|
|
4
|
+
export type { AnteaterConfig, AnteaterRequest, AnteaterResponse, AnteaterStatusResponse, AnteaterRun, AnteaterRunsResponse, AnteaterBarProps, } from "./types";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export interface AnteaterConfig {
|
|
2
|
+
/** GitHub repo in "owner/repo" format */
|
|
3
|
+
repo: string;
|
|
4
|
+
/** Branch to target for production changes */
|
|
5
|
+
productionBranch?: string;
|
|
6
|
+
/** Enabled modes */
|
|
7
|
+
modes?: Array<"prod" | "copy">;
|
|
8
|
+
/** Auto-merge safe PRs */
|
|
9
|
+
autoMerge?: boolean;
|
|
10
|
+
/** Glob patterns the AI may edit */
|
|
11
|
+
allowedGlobs?: string[];
|
|
12
|
+
/** Glob patterns the AI must never edit */
|
|
13
|
+
blockedGlobs?: string[];
|
|
14
|
+
/** Keywords that require human review */
|
|
15
|
+
requireReviewFor?: string[];
|
|
16
|
+
/** Max files the AI can change in one run */
|
|
17
|
+
maxFilesChanged?: number;
|
|
18
|
+
/** Max diff size in bytes */
|
|
19
|
+
maxDiffBytes?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface AnteaterRequest {
|
|
22
|
+
prompt: string;
|
|
23
|
+
mode: "prod" | "copy";
|
|
24
|
+
route?: string;
|
|
25
|
+
branch?: string;
|
|
26
|
+
context?: {
|
|
27
|
+
pathname?: string;
|
|
28
|
+
userId?: string;
|
|
29
|
+
role?: string;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export interface AnteaterResponse {
|
|
33
|
+
requestId: string;
|
|
34
|
+
branch: string;
|
|
35
|
+
status: "queued" | "error";
|
|
36
|
+
error?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface AnteaterStatusResponse {
|
|
39
|
+
/** Current pipeline step */
|
|
40
|
+
step: "initializing" | "working" | "merging" | "redeploying" | "done" | "error";
|
|
41
|
+
/** Whether the workflow has completed */
|
|
42
|
+
completed: boolean;
|
|
43
|
+
/** Error message if failed */
|
|
44
|
+
error?: string;
|
|
45
|
+
/** Vercel deployment ID — changes when new code is deployed */
|
|
46
|
+
deploymentId?: string;
|
|
47
|
+
}
|
|
48
|
+
/** A single active run in the multi-run list */
|
|
49
|
+
export interface AnteaterRun {
|
|
50
|
+
branch: string;
|
|
51
|
+
requestId: string;
|
|
52
|
+
prompt: string;
|
|
53
|
+
step: AnteaterStatusResponse["step"];
|
|
54
|
+
mode: "prod" | "copy";
|
|
55
|
+
}
|
|
56
|
+
/** Response from GET /api/anteater/runs */
|
|
57
|
+
export interface AnteaterRunsResponse {
|
|
58
|
+
runs: AnteaterRun[];
|
|
59
|
+
deploymentId?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface AnteaterBarProps {
|
|
62
|
+
/** API endpoint to submit prompts to */
|
|
63
|
+
apiEndpoint?: string;
|
|
64
|
+
/** Default mode */
|
|
65
|
+
mode?: "prod" | "copy";
|
|
66
|
+
/** Placeholder text */
|
|
67
|
+
placeholder?: string;
|
|
68
|
+
/** Branch override (for invite/copy mode) */
|
|
69
|
+
branch?: string;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC/B,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;IAChF,yCAAyC;IACzC,SAAS,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,gDAAgD;AAChD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,2CAA2C;AAC3C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|