next-anteater 0.2.21 → 0.2.23
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.
|
@@ -1 +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;AAkL9D,wBAAgB,WAAW,CAAC,EAC1B,WAA6B,EAC7B,IAAa,EACb,WAAoC,EACpC,MAAM,GACP,EAAE,gBAAgB,
|
|
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;AAkL9D,wBAAgB,WAAW,CAAC,EAC1B,WAA6B,EAC7B,IAAa,EACb,WAAoC,EACpC,MAAM,GACP,EAAE,gBAAgB,2CAsOlB"}
|
|
@@ -111,19 +111,18 @@ export function AnteaterBar({ apiEndpoint = "/api/anteater", mode = "prod", plac
|
|
|
111
111
|
const handleSubmit = async (e) => {
|
|
112
112
|
if (e)
|
|
113
113
|
e.preventDefault();
|
|
114
|
-
|
|
114
|
+
const text = prompt.trim();
|
|
115
|
+
if (!text || submitting)
|
|
115
116
|
return;
|
|
116
|
-
|
|
117
|
-
|
|
117
|
+
setPrompt("");
|
|
118
|
+
await submit({
|
|
119
|
+
prompt: text,
|
|
118
120
|
mode,
|
|
119
121
|
branch,
|
|
120
122
|
context: {
|
|
121
123
|
pathname: typeof window !== "undefined" ? window.location.pathname : undefined,
|
|
122
124
|
},
|
|
123
125
|
});
|
|
124
|
-
if (result) {
|
|
125
|
-
setPrompt("");
|
|
126
|
-
}
|
|
127
126
|
};
|
|
128
127
|
const handleButtonClick = () => {
|
|
129
128
|
if (!isExpanded) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anteater-bar.js","sourceRoot":"","sources":["../../src/components/anteater-bar.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"anteater-bar.js","sourceRoot":"","sources":["../../src/components/anteater-bar.tsx"],"names":[],"mappings":"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"}
|
package/lib/scaffold.mjs
CHANGED
|
@@ -682,7 +682,7 @@ export function generateClaudeSettings({ model, permissionsMode }) {
|
|
|
682
682
|
/**
|
|
683
683
|
* Generate the GitHub Actions workflow.
|
|
684
684
|
*/
|
|
685
|
-
export function generateWorkflow({ allowedGlobs, blockedGlobs, productionBranch, model, packageManager = "npm" }) {
|
|
685
|
+
export function generateWorkflow({ allowedGlobs, blockedGlobs, productionBranch, model, packageManager = "npm", permissionsMode = "sandboxed" }) {
|
|
686
686
|
const allowed = allowedGlobs.join(", ");
|
|
687
687
|
const blocked = blockedGlobs.join(", ");
|
|
688
688
|
|
|
@@ -761,7 +761,8 @@ jobs:
|
|
|
761
761
|
|
|
762
762
|
IMPORTANT: Always verify your changes compile by running the build command.
|
|
763
763
|
anthropic_api_key: \${{ secrets.ANTHROPIC_API_KEY }}
|
|
764
|
-
claude_args: "--allowedTools Edit,Read,Write,Bash,Glob,Grep --max-turns
|
|
764
|
+
claude_args: "${permissionsMode === "unrestricted" ? "--max-turns 50" : "--allowedTools Edit,Read,Write,Bash,Glob,Grep --max-turns 50"}"
|
|
765
|
+
show_full_output: true
|
|
765
766
|
|
|
766
767
|
- name: Check for changes
|
|
767
768
|
id: changes
|
package/lib/setup.mjs
CHANGED
|
@@ -1,330 +1,416 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* anteater setup — Interactive CLI to install and configure Anteater.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} from "./
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
// ───
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
info(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
let
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
203
|
-
blank();
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* anteater setup — Interactive CLI to install and configure Anteater.
|
|
3
|
+
*
|
|
4
|
+
* Supports CLI flags for non-interactive use:
|
|
5
|
+
* --anthropic-key <key> Anthropic API key
|
|
6
|
+
* --github-pat <pat> GitHub Personal Access Token
|
|
7
|
+
* --model <name> sonnet | opus | opus-1m | haiku
|
|
8
|
+
* --permissions <mode> sandboxed | unrestricted
|
|
9
|
+
* --yes / -y Accept all defaults and confirmations
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { execSync } from "node:child_process";
|
|
13
|
+
import {
|
|
14
|
+
bold, dim, green, red, yellow, cyan,
|
|
15
|
+
ok, fail, warn, info, heading, blank,
|
|
16
|
+
ask, confirm, select, spinner, closeRL,
|
|
17
|
+
} from "./ui.mjs";
|
|
18
|
+
import { detectProject } from "./detect.mjs";
|
|
19
|
+
import { scaffoldFiles } from "./scaffold.mjs";
|
|
20
|
+
import {
|
|
21
|
+
validateAnthropicKey, validateGitHubToken, setGitHubSecret, setVercelEnv,
|
|
22
|
+
writeEnvLocal, hasCommand,
|
|
23
|
+
} from "./secrets.mjs";
|
|
24
|
+
|
|
25
|
+
const cwd = process.cwd();
|
|
26
|
+
|
|
27
|
+
const MODEL_MAP = {
|
|
28
|
+
sonnet: "sonnet",
|
|
29
|
+
opus: "opus",
|
|
30
|
+
"opus-1m": "opus[1m]",
|
|
31
|
+
haiku: "haiku",
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
function parseFlags() {
|
|
35
|
+
const args = process.argv.slice(2);
|
|
36
|
+
const flags = {};
|
|
37
|
+
|
|
38
|
+
for (let i = 0; i < args.length; i++) {
|
|
39
|
+
switch (args[i]) {
|
|
40
|
+
case "--anthropic-key":
|
|
41
|
+
flags.anthropicKey = args[++i];
|
|
42
|
+
break;
|
|
43
|
+
case "--github-pat":
|
|
44
|
+
flags.githubPat = args[++i];
|
|
45
|
+
break;
|
|
46
|
+
case "--model":
|
|
47
|
+
flags.model = MODEL_MAP[args[++i]];
|
|
48
|
+
break;
|
|
49
|
+
case "--permissions":
|
|
50
|
+
flags.permissions = args[++i]; // "sandboxed" or "unrestricted"
|
|
51
|
+
break;
|
|
52
|
+
case "--yes":
|
|
53
|
+
case "-y":
|
|
54
|
+
flags.yes = true;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return flags;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export async function main() {
|
|
63
|
+
const flags = parseFlags();
|
|
64
|
+
|
|
65
|
+
console.log();
|
|
66
|
+
console.log(` ${bold("\u{1F41C} Anteater Setup")}`);
|
|
67
|
+
console.log(` ${"\u2500".repeat(17)}`);
|
|
68
|
+
blank();
|
|
69
|
+
|
|
70
|
+
// ─── Non-interactive hint ──────────────────────────────────
|
|
71
|
+
if (!process.stdin.isTTY && !flags.anthropicKey) {
|
|
72
|
+
console.log(` ${bold("Tip: use CLI flags for non-interactive setup:")}`);
|
|
73
|
+
console.log(` ${"─".repeat(52)}`);
|
|
74
|
+
console.log(` npx next-anteater setup \\`);
|
|
75
|
+
console.log(` --anthropic-key <key> \\`);
|
|
76
|
+
console.log(` --github-pat <pat> \\`);
|
|
77
|
+
console.log(` --model sonnet \\`);
|
|
78
|
+
console.log(` --permissions unrestricted \\`);
|
|
79
|
+
console.log(` --yes`);
|
|
80
|
+
console.log();
|
|
81
|
+
console.log(` Models: sonnet, opus, opus-1m, haiku`);
|
|
82
|
+
console.log(` Permissions: sandboxed, unrestricted`);
|
|
83
|
+
console.log(` ${"─".repeat(52)}`);
|
|
84
|
+
blank();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// ─── Security notice ───────────────────────────────────────
|
|
88
|
+
warn("SECURITY: Anteater lets users modify your app's code via AI.");
|
|
89
|
+
info("Only expose it to trusted users in a sandboxed environment.");
|
|
90
|
+
info("Users can make destructive changes and potentially access sensitive data.");
|
|
91
|
+
info(`Learn more: ${cyan("https://github.com/scottgriffinm/anteater#security-warning")}`);
|
|
92
|
+
blank();
|
|
93
|
+
|
|
94
|
+
// ─── Preflight checks ──────────────────────────────────────
|
|
95
|
+
heading("Preflight");
|
|
96
|
+
|
|
97
|
+
if (!hasCommand("gh")) {
|
|
98
|
+
fail("GitHub CLI (gh) is required. Install it: https://cli.github.com");
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
ok("GitHub CLI installed");
|
|
102
|
+
|
|
103
|
+
if (!hasCommand("vercel")) {
|
|
104
|
+
fail("Vercel CLI is required. Install it: npm i -g vercel");
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
ok("Vercel CLI installed");
|
|
108
|
+
|
|
109
|
+
// ─── Detect project ─────────────────────────────────────────
|
|
110
|
+
const project = await detectProject(cwd);
|
|
111
|
+
|
|
112
|
+
if (!project.isNextJs) {
|
|
113
|
+
fail("No Next.js project found. Run this from your Next.js project root.");
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
ok(`Next.js ${project.nextVersion ?? ""} ${project.isAppRouter ? "(App Router)" : "(Pages Router)"}`);
|
|
117
|
+
|
|
118
|
+
if (!project.hasGit || !project.gitRemote) {
|
|
119
|
+
fail("No GitHub remote found. Run: git remote add origin <url>");
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
ok(`Repo: ${project.gitRemote}`);
|
|
123
|
+
ok(`Branch: ${project.defaultBranch || "main"}`);
|
|
124
|
+
ok(`Package manager: ${project.packageManager}`);
|
|
125
|
+
blank();
|
|
126
|
+
|
|
127
|
+
// ─── Step 1: Anthropic API key ──────────────────────────────
|
|
128
|
+
heading("Step 1 of 4 \u2014 AI Provider");
|
|
129
|
+
|
|
130
|
+
let anthropicKey;
|
|
131
|
+
if (flags.anthropicKey) {
|
|
132
|
+
anthropicKey = flags.anthropicKey;
|
|
133
|
+
const valid = await spinner("Validating", () => validateAnthropicKey(anthropicKey));
|
|
134
|
+
if (!valid) {
|
|
135
|
+
fail("Invalid --anthropic-key. Check that it starts with sk-ant-.");
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
} else {
|
|
139
|
+
info(`Get a key at ${cyan("https://console.anthropic.com/keys")}`);
|
|
140
|
+
blank();
|
|
141
|
+
while (true) {
|
|
142
|
+
anthropicKey = await ask("Anthropic API key:", { mask: true });
|
|
143
|
+
if (!anthropicKey) { warn("Required."); continue; }
|
|
144
|
+
const valid = await spinner("Validating", () => validateAnthropicKey(anthropicKey));
|
|
145
|
+
if (valid) break;
|
|
146
|
+
fail("Invalid key. Check that it starts with sk-ant- and try again.");
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
blank();
|
|
150
|
+
|
|
151
|
+
// ─── Step 2: GitHub PAT ─────────────────────────────────────
|
|
152
|
+
heading("Step 2 of 4 \u2014 GitHub Access");
|
|
153
|
+
|
|
154
|
+
let githubToken;
|
|
155
|
+
if (flags.githubPat) {
|
|
156
|
+
githubToken = flags.githubPat;
|
|
157
|
+
} else {
|
|
158
|
+
info("Anteater needs a long-lived Personal Access Token (PAT) for the deployed API route.");
|
|
159
|
+
blank();
|
|
160
|
+
info(`${bold("Create a Fine-grained token:")} ${cyan("https://github.com/settings/tokens?type=beta")}`);
|
|
161
|
+
info(` 1. Click ${bold("Generate new token")}`);
|
|
162
|
+
info(` 2. Select ${bold("Only select repositories")} \u2192 pick your repo`);
|
|
163
|
+
info(` 3. Set permissions: ${bold("Contents")}, ${bold("Pull requests")}, ${bold("Actions")} \u2192 Read and write`);
|
|
164
|
+
info(` 4. Generate and copy the token`);
|
|
165
|
+
blank();
|
|
166
|
+
githubToken = await ask("Paste your GitHub PAT (ghp_... or github_pat_...):");
|
|
167
|
+
if (!githubToken) {
|
|
168
|
+
fail("A GitHub PAT is required.");
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const check = await spinner("Checking permissions", () =>
|
|
174
|
+
validateGitHubToken(githubToken, project.gitRemote)
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
if (!check.ok && check.missing.length > 0 && !check.missing.includes("unknown")) {
|
|
178
|
+
fail("Token is missing required scopes: " + check.missing.join(", "));
|
|
179
|
+
info(`Create a new Fine-grained PAT at ${cyan("https://github.com/settings/tokens?type=beta")}`);
|
|
180
|
+
info(`Set permissions: ${bold("Contents")}, ${bold("Pull requests")}, ${bold("Actions")} \u2192 Read and write`);
|
|
181
|
+
process.exit(1);
|
|
182
|
+
} else if (check.ok) {
|
|
183
|
+
ok("Token has required permissions");
|
|
184
|
+
}
|
|
185
|
+
blank();
|
|
186
|
+
|
|
187
|
+
// ─── Step 3: Configure paths ────────────────────────────────
|
|
188
|
+
heading("Step 3 of 4 \u2014 Editable Paths");
|
|
189
|
+
|
|
190
|
+
const defaultAllowed = [];
|
|
191
|
+
const defaultBlocked = ["lib/auth/**", "lib/billing/**", ".env*"];
|
|
192
|
+
|
|
193
|
+
if (project.isAppRouter) {
|
|
194
|
+
defaultAllowed.push("app/**", "components/**", "styles/**");
|
|
195
|
+
defaultBlocked.push("app/api/**");
|
|
196
|
+
} else {
|
|
197
|
+
defaultAllowed.push("pages/**", "components/**", "styles/**");
|
|
198
|
+
defaultBlocked.push("pages/api/**");
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
console.log(` ${green("Allowed:")} ${defaultAllowed.join(", ")}`);
|
|
202
|
+
console.log(` ${red("Blocked:")} ${defaultBlocked.join(", ")}`);
|
|
203
|
+
blank();
|
|
204
|
+
|
|
205
|
+
let allowedGlobs = defaultAllowed;
|
|
206
|
+
let blockedGlobs = defaultBlocked;
|
|
207
|
+
|
|
208
|
+
if (flags.yes) {
|
|
209
|
+
ok("Using default paths (--yes)");
|
|
210
|
+
} else {
|
|
211
|
+
const useDefaults = await confirm("Use these defaults?");
|
|
212
|
+
if (!useDefaults) {
|
|
213
|
+
const customAllowed = await ask("Allowed globs (comma-separated):");
|
|
214
|
+
const customBlocked = await ask("Blocked globs (comma-separated):");
|
|
215
|
+
if (customAllowed) allowedGlobs = customAllowed.split(",").map((s) => s.trim());
|
|
216
|
+
if (customBlocked) blockedGlobs = customBlocked.split(",").map((s) => s.trim());
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
blank();
|
|
220
|
+
|
|
221
|
+
// ─── Step 4: Agent configuration ─────────────────────────────
|
|
222
|
+
heading("Step 4 of 4 \u2014 Agent Configuration");
|
|
223
|
+
|
|
224
|
+
let model;
|
|
225
|
+
if (flags.model) {
|
|
226
|
+
model = flags.model;
|
|
227
|
+
ok(`Model: ${model} (--model)`);
|
|
228
|
+
} else {
|
|
229
|
+
model = await select("Select AI model:", [
|
|
230
|
+
{ label: "Sonnet (recommended)", hint: "fast, cost-effective, great for most changes", value: "sonnet" },
|
|
231
|
+
{ label: "Opus", hint: "most capable, higher cost", value: "opus" },
|
|
232
|
+
{ label: "Opus 1M", hint: "Opus with extended context (1M tokens)", value: "opus[1m]" },
|
|
233
|
+
{ label: "Haiku", hint: "fastest, lowest cost, best for simple changes", value: "haiku" },
|
|
234
|
+
]);
|
|
235
|
+
ok(`Model: ${model}`);
|
|
236
|
+
}
|
|
237
|
+
blank();
|
|
238
|
+
|
|
239
|
+
let permissionsMode;
|
|
240
|
+
if (flags.permissions) {
|
|
241
|
+
permissionsMode = flags.permissions;
|
|
242
|
+
if (permissionsMode === "unrestricted" && !flags.yes) {
|
|
243
|
+
warn("Unrestricted mode grants the AI agent full access to:");
|
|
244
|
+
info(" - Internet (web fetches, searches, curl)");
|
|
245
|
+
info(" - GitHub CLI (push, PR creation, issue management)");
|
|
246
|
+
info(" - Vercel CLI (deployments, env vars)");
|
|
247
|
+
info(" - All MCP tools (browser automation, etc.)");
|
|
248
|
+
info(" - File deletion and system commands");
|
|
249
|
+
blank();
|
|
250
|
+
const confirmed = await confirm("Confirm unrestricted mode?", false);
|
|
251
|
+
if (!confirmed) {
|
|
252
|
+
permissionsMode = "sandboxed";
|
|
253
|
+
ok("Falling back to Sandboxed mode");
|
|
254
|
+
} else {
|
|
255
|
+
ok("Unrestricted mode confirmed");
|
|
256
|
+
}
|
|
257
|
+
} else {
|
|
258
|
+
ok(`Permissions: ${permissionsMode} (--permissions)`);
|
|
259
|
+
}
|
|
260
|
+
} else {
|
|
261
|
+
permissionsMode = await select("Select agent permissions mode:", [
|
|
262
|
+
{ label: "Sandboxed (recommended)", hint: "full local access, no internet or external services", value: "sandboxed" },
|
|
263
|
+
{ label: "Unrestricted", hint: "full access including web, GitHub CLI, Vercel, and all MCP tools", value: "unrestricted" },
|
|
264
|
+
]);
|
|
265
|
+
|
|
266
|
+
if (permissionsMode === "unrestricted") {
|
|
267
|
+
blank();
|
|
268
|
+
warn("Unrestricted mode grants the AI agent full access to:");
|
|
269
|
+
info(" - Internet (web fetches, searches, curl)");
|
|
270
|
+
info(" - GitHub CLI (push, PR creation, issue management)");
|
|
271
|
+
info(" - Vercel CLI (deployments, env vars)");
|
|
272
|
+
info(" - All MCP tools (browser automation, etc.)");
|
|
273
|
+
info(" - File deletion and system commands");
|
|
274
|
+
blank();
|
|
275
|
+
warn("The agent will run with bypassPermissions \u2014 no confirmation prompts.");
|
|
276
|
+
warn("Only use this if you trust the prompts your users will submit.");
|
|
277
|
+
blank();
|
|
278
|
+
const confirmed = flags.yes || await confirm("Confirm unrestricted mode?", false);
|
|
279
|
+
if (!confirmed) {
|
|
280
|
+
permissionsMode = "sandboxed";
|
|
281
|
+
ok("Falling back to Sandboxed mode");
|
|
282
|
+
} else {
|
|
283
|
+
ok("Unrestricted mode confirmed");
|
|
284
|
+
}
|
|
285
|
+
} else {
|
|
286
|
+
ok("Sandboxed mode \u2014 agent cannot access internet or external services");
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
blank();
|
|
290
|
+
|
|
291
|
+
// ─── Install & scaffold ─────────────────────────────────────
|
|
292
|
+
heading("Installing");
|
|
293
|
+
|
|
294
|
+
const installCmd = {
|
|
295
|
+
pnpm: "pnpm add next-anteater",
|
|
296
|
+
yarn: "yarn add next-anteater",
|
|
297
|
+
npm: "npm install next-anteater",
|
|
298
|
+
}[project.packageManager];
|
|
299
|
+
|
|
300
|
+
await spinner("Installing next-anteater", () => {
|
|
301
|
+
execSync(installCmd, { cwd, stdio: "ignore" });
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
const productionBranch = project.defaultBranch || "main";
|
|
305
|
+
const scaffolded = await spinner("Creating files", () =>
|
|
306
|
+
scaffoldFiles(cwd, {
|
|
307
|
+
repo: project.gitRemote,
|
|
308
|
+
allowedGlobs,
|
|
309
|
+
blockedGlobs,
|
|
310
|
+
autoMerge: true,
|
|
311
|
+
productionBranch,
|
|
312
|
+
isTypeScript: project.isTypeScript,
|
|
313
|
+
isAppRouter: project.isAppRouter,
|
|
314
|
+
layoutFile: project.layoutFile,
|
|
315
|
+
model,
|
|
316
|
+
permissionsMode,
|
|
317
|
+
packageManager: project.packageManager,
|
|
318
|
+
})
|
|
319
|
+
);
|
|
320
|
+
|
|
321
|
+
for (const f of scaffolded) ok(`Created ${f}`);
|
|
322
|
+
|
|
323
|
+
// ─── Set secrets ────────────────────────────────────────────
|
|
324
|
+
heading("Configuring secrets");
|
|
325
|
+
|
|
326
|
+
// GitHub Actions secret
|
|
327
|
+
try {
|
|
328
|
+
await spinner("Setting ANTHROPIC_API_KEY in GitHub secrets", () => {
|
|
329
|
+
setGitHubSecret(project.gitRemote, "ANTHROPIC_API_KEY", anthropicKey);
|
|
330
|
+
});
|
|
331
|
+
} catch (err) {
|
|
332
|
+
warn(`Could not set secret: ${err.message}`);
|
|
333
|
+
info("Set manually: gh secret set ANTHROPIC_API_KEY --repo " + project.gitRemote);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// .env.local for local dev (only GITHUB_TOKEN needed)
|
|
337
|
+
await spinner("Writing .env.local", () =>
|
|
338
|
+
writeEnvLocal(cwd, { GITHUB_TOKEN: githubToken })
|
|
339
|
+
);
|
|
340
|
+
|
|
341
|
+
// Vercel: only GITHUB_TOKEN needed (repo auto-detected, deploy detection automatic)
|
|
342
|
+
await spinner("Setting GITHUB_TOKEN in Vercel", () => {
|
|
343
|
+
setVercelEnv("GITHUB_TOKEN", githubToken);
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
// ─── Push workflow ──────────────────────────────────────────
|
|
347
|
+
if (scaffolded.some((f) => f.includes("anteater.yml"))) {
|
|
348
|
+
await spinner("Pushing workflow to GitHub", () => {
|
|
349
|
+
execSync(`git add .github/workflows/anteater.yml`, { cwd, stdio: "ignore" });
|
|
350
|
+
execSync(`git commit -m "chore: add Anteater workflow"`, { cwd, stdio: "ignore" });
|
|
351
|
+
execSync(`git push origin ${productionBranch}`, { cwd, stdio: "ignore" });
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
// Verify
|
|
355
|
+
const activated = await spinner("Verifying workflow", async () => {
|
|
356
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
357
|
+
try {
|
|
358
|
+
const res = await fetch(
|
|
359
|
+
`https://api.github.com/repos/${project.gitRemote}/actions/workflows`,
|
|
360
|
+
{ headers: { Authorization: `Bearer ${githubToken}`, Accept: "application/vnd.github+json" } }
|
|
361
|
+
);
|
|
362
|
+
const data = await res.json();
|
|
363
|
+
return data.workflows?.some((w) => w.path === ".github/workflows/anteater.yml" && w.state === "active");
|
|
364
|
+
} catch { return false; }
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
if (activated) ok("Workflow active");
|
|
368
|
+
else warn(`Check: ${cyan(`https://github.com/${project.gitRemote}/actions`)}`);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// ─── Test ───────────────────────────────────────────────────
|
|
372
|
+
const dispatchOk = await spinner("Running test dispatch", async () => {
|
|
373
|
+
try {
|
|
374
|
+
const res = await fetch(
|
|
375
|
+
`https://api.github.com/repos/${project.gitRemote}/actions/workflows/anteater.yml/dispatches`,
|
|
376
|
+
{
|
|
377
|
+
method: "POST",
|
|
378
|
+
headers: {
|
|
379
|
+
Authorization: `Bearer ${githubToken}`,
|
|
380
|
+
Accept: "application/vnd.github+json",
|
|
381
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
382
|
+
},
|
|
383
|
+
body: JSON.stringify({
|
|
384
|
+
ref: productionBranch,
|
|
385
|
+
inputs: {
|
|
386
|
+
requestId: "setup-test",
|
|
387
|
+
prompt: "setup verification \u2014 no changes expected",
|
|
388
|
+
mode: "prod",
|
|
389
|
+
branch: "anteater/setup-test",
|
|
390
|
+
baseBranch: productionBranch,
|
|
391
|
+
autoMerge: "false",
|
|
392
|
+
},
|
|
393
|
+
}),
|
|
394
|
+
}
|
|
395
|
+
);
|
|
396
|
+
return res.status === 204;
|
|
397
|
+
} catch { return false; }
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
if (dispatchOk) ok("Pipeline is working");
|
|
401
|
+
else warn("Test dispatch failed \u2014 check GitHub Actions");
|
|
402
|
+
|
|
403
|
+
// ─── Done! ──────────────────────────────────────────────────
|
|
404
|
+
closeRL();
|
|
405
|
+
blank();
|
|
406
|
+
console.log(` ${bold(green("\u{1F41C} Anteater is ready."))}`);
|
|
407
|
+
blank();
|
|
408
|
+
info(`Deploy your app and look for the "${green("Edit this page")}" button.`);
|
|
409
|
+
info("Users can modify your app by typing changes in the Anteater bar.");
|
|
410
|
+
blank();
|
|
411
|
+
warn("Reminder: only expose Anteater to trusted users.");
|
|
412
|
+
info("Users with access to the prompt bar can make arbitrary code changes.");
|
|
413
|
+
info("Use a sandboxed environment without real credentials or production data.");
|
|
414
|
+
info(`Protect the prompt bar behind your own auth layer \u2014 Anteater does ${bold("not")} provide auth.`);
|
|
415
|
+
blank();
|
|
416
|
+
}
|
package/package.json
CHANGED
|
@@ -209,20 +209,19 @@ export function AnteaterBar({
|
|
|
209
209
|
|
|
210
210
|
const handleSubmit = async (e?: React.FormEvent) => {
|
|
211
211
|
if (e) e.preventDefault();
|
|
212
|
-
|
|
212
|
+
const text = prompt.trim();
|
|
213
|
+
if (!text || submitting) return;
|
|
213
214
|
|
|
214
|
-
|
|
215
|
-
|
|
215
|
+
setPrompt("");
|
|
216
|
+
|
|
217
|
+
await submit({
|
|
218
|
+
prompt: text,
|
|
216
219
|
mode,
|
|
217
220
|
branch,
|
|
218
221
|
context: {
|
|
219
222
|
pathname: typeof window !== "undefined" ? window.location.pathname : undefined,
|
|
220
223
|
},
|
|
221
224
|
});
|
|
222
|
-
|
|
223
|
-
if (result) {
|
|
224
|
-
setPrompt("");
|
|
225
|
-
}
|
|
226
225
|
};
|
|
227
226
|
|
|
228
227
|
const handleButtonClick = () => {
|