ugly-app 0.1.148 → 0.1.150
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/feedbackResolve.d.ts +7 -0
- package/dist/cli/feedbackResolve.d.ts.map +1 -0
- package/dist/cli/feedbackResolve.js +40 -0
- package/dist/cli/feedbackResolve.js.map +1 -0
- package/dist/cli/feedbackSubmit.d.ts +12 -0
- package/dist/cli/feedbackSubmit.d.ts.map +1 -0
- package/dist/cli/feedbackSubmit.js +75 -0
- package/dist/cli/feedbackSubmit.js.map +1 -0
- package/dist/cli/index.js +61 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/url.d.ts +2 -0
- package/dist/cli/url.d.ts.map +1 -0
- package/dist/cli/url.js +7 -0
- package/dist/cli/url.js.map +1 -0
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/shared/FrameworkRequests.d.ts +5 -0
- package/dist/shared/FrameworkRequests.d.ts.map +1 -1
- package/dist/shared/FrameworkRequests.js +5 -1
- package/dist/shared/FrameworkRequests.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/feedbackResolve.ts +57 -0
- package/src/cli/feedbackSubmit.ts +102 -0
- package/src/cli/index.ts +68 -0
- package/src/cli/url.ts +7 -0
- package/src/cli/version.ts +1 -1
- package/src/shared/FrameworkRequests.ts +6 -1
- package/templates/.claude/skills/bot-swarm/SKILL.md +175 -67
- package/templates/CLAUDE.md +3 -0
- package/templates/bots/feedback/active/.gitkeep +0 -0
- package/templates/bots/feedback/retired/.gitkeep +0 -0
- package/templates/bots/journal/README.md +0 -0
- package/templates/bots/journal/cycles/.gitkeep +0 -0
- package/templates/bots/journal/cycles/screenshots/.gitkeep +0 -0
- package/templates/bots/maintain/memory.md +0 -0
- package/templates/bots/manager/memory.md +0 -0
- package/templates/gitignore +3 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackResolve.d.ts","sourceRoot":"","sources":["../../src/cli/feedbackResolve.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAuBD,wBAAsB,eAAe,CACnC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { getLocalUrl } from './url.js';
|
|
4
|
+
function readTokenFromEnv() {
|
|
5
|
+
let envContent = '';
|
|
6
|
+
try {
|
|
7
|
+
envContent = fs.readFileSync(path.join(process.cwd(), '.env'), 'utf-8');
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
throw new Error('No .env file found. Run "npx ugly-app login" first to set up UGLY_BOT_TOKEN.');
|
|
11
|
+
}
|
|
12
|
+
const match = envContent.match(/^UGLY_BOT_TOKEN=(.+)$/m);
|
|
13
|
+
if (!match?.[1]) {
|
|
14
|
+
throw new Error('UGLY_BOT_TOKEN not found in .env. Run "npx ugly-app login" first.');
|
|
15
|
+
}
|
|
16
|
+
return match[1];
|
|
17
|
+
}
|
|
18
|
+
export async function resolveFeedback(opts) {
|
|
19
|
+
const baseUrl = getLocalUrl(process.cwd());
|
|
20
|
+
const token = readTokenFromEnv();
|
|
21
|
+
const res = await fetch(`${baseUrl}/api/resolveFeedback`, {
|
|
22
|
+
method: 'POST',
|
|
23
|
+
headers: {
|
|
24
|
+
'Authorization': `Bearer ${token}`,
|
|
25
|
+
'Content-Type': 'application/json',
|
|
26
|
+
},
|
|
27
|
+
body: JSON.stringify({
|
|
28
|
+
input: {
|
|
29
|
+
feedbackId: opts.feedbackId,
|
|
30
|
+
status: opts.status,
|
|
31
|
+
resolution: opts.resolution,
|
|
32
|
+
},
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
if (!res.ok) {
|
|
36
|
+
const body = await res.text().catch(() => '');
|
|
37
|
+
throw new Error(`Failed to resolve feedback: ${res.status} ${body}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=feedbackResolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackResolve.js","sourceRoot":"","sources":["../../src/cli/feedbackResolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAQvC,SAAS,gBAAgB;IACvB,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,UAAU,GAAG,EAAE,CAAC,YAAY,CAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAChC,OAAO,CACR,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAA4B;IAE5B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IAEjC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,sBAAsB,EAAE;QACxD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,KAAK,EAAE;YAClC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE;gBACL,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B;SACF,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface FeedbackSubmitOptions {
|
|
2
|
+
type: 'bug' | 'feature' | 'design';
|
|
3
|
+
message: string;
|
|
4
|
+
url?: string;
|
|
5
|
+
screenshot?: string;
|
|
6
|
+
token: string;
|
|
7
|
+
logs?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function submitFeedback(opts: FeedbackSubmitOptions): Promise<{
|
|
10
|
+
id: string;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=feedbackSubmit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackSubmit.d.ts","sourceRoot":"","sources":["../../src/cli/feedbackSubmit.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAgDD,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAwCzB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { getLocalUrl } from './url.js';
|
|
4
|
+
async function uploadScreenshot(baseUrl, token, filePath) {
|
|
5
|
+
const ext = path.extname(filePath).slice(1) || 'png';
|
|
6
|
+
const key = `feedback/${Date.now()}.${ext}`;
|
|
7
|
+
// Check file exists before requesting upload URL
|
|
8
|
+
if (!fs.existsSync(filePath)) {
|
|
9
|
+
throw new Error(`Screenshot file not found: ${filePath}`);
|
|
10
|
+
}
|
|
11
|
+
// Get presigned upload URL
|
|
12
|
+
const presignRes = await fetch(`${baseUrl}/api/uploadUrl`, {
|
|
13
|
+
method: 'POST',
|
|
14
|
+
headers: {
|
|
15
|
+
'Authorization': `Bearer ${token}`,
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
},
|
|
18
|
+
body: JSON.stringify({
|
|
19
|
+
input: { key, contentType: `image/${ext}` },
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
if (!presignRes.ok) {
|
|
23
|
+
throw new Error(`Failed to get upload URL: ${presignRes.status}`);
|
|
24
|
+
}
|
|
25
|
+
const { uploadUrl, resultUrl } = (await presignRes.json());
|
|
26
|
+
// Upload the file
|
|
27
|
+
const fileBuffer = fs.readFileSync(filePath);
|
|
28
|
+
const uploadRes = await fetch(uploadUrl, {
|
|
29
|
+
method: 'PUT',
|
|
30
|
+
headers: { 'Content-Type': `image/${ext}` },
|
|
31
|
+
body: fileBuffer,
|
|
32
|
+
});
|
|
33
|
+
if (!uploadRes.ok) {
|
|
34
|
+
throw new Error(`Failed to upload screenshot: ${uploadRes.status}`);
|
|
35
|
+
}
|
|
36
|
+
return resultUrl;
|
|
37
|
+
}
|
|
38
|
+
export async function submitFeedback(opts) {
|
|
39
|
+
const baseUrl = getLocalUrl(process.cwd());
|
|
40
|
+
let screenshotUri;
|
|
41
|
+
if (opts.screenshot) {
|
|
42
|
+
screenshotUri = await uploadScreenshot(baseUrl, opts.token, opts.screenshot);
|
|
43
|
+
}
|
|
44
|
+
let previousLogs;
|
|
45
|
+
if (opts.logs) {
|
|
46
|
+
try {
|
|
47
|
+
previousLogs = JSON.parse(opts.logs);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
throw new Error(`--logs must be valid JSON: ${opts.logs.slice(0, 100)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const res = await fetch(`${baseUrl}/api/submitFeedback`, {
|
|
54
|
+
method: 'POST',
|
|
55
|
+
headers: {
|
|
56
|
+
'Authorization': `Bearer ${opts.token}`,
|
|
57
|
+
'Content-Type': 'application/json',
|
|
58
|
+
},
|
|
59
|
+
body: JSON.stringify({
|
|
60
|
+
input: {
|
|
61
|
+
type: opts.type,
|
|
62
|
+
message: opts.message,
|
|
63
|
+
url: opts.url ?? baseUrl,
|
|
64
|
+
screenshotUri,
|
|
65
|
+
previousLogs,
|
|
66
|
+
},
|
|
67
|
+
}),
|
|
68
|
+
});
|
|
69
|
+
if (!res.ok) {
|
|
70
|
+
const body = await res.text().catch(() => '');
|
|
71
|
+
throw new Error(`Failed to submit feedback: ${res.status} ${body}`);
|
|
72
|
+
}
|
|
73
|
+
return (await res.json());
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=feedbackSubmit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedbackSubmit.js","sourceRoot":"","sources":["../../src/cli/feedbackSubmit.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -283,6 +283,54 @@ program
|
|
|
283
283
|
process.exit(1);
|
|
284
284
|
}
|
|
285
285
|
});
|
|
286
|
+
program
|
|
287
|
+
.command('feedback:submit')
|
|
288
|
+
.description('Submit feedback to the local dev server')
|
|
289
|
+
.requiredOption('--type <type>', 'Feedback type: bug, feature, or design')
|
|
290
|
+
.requiredOption('--message <message>', 'Feedback description')
|
|
291
|
+
.requiredOption('--token <token>', 'Bot auth token (Bearer)')
|
|
292
|
+
.option('--url <url>', 'Page URL the feedback is about')
|
|
293
|
+
.option('--screenshot <path>', 'Path to screenshot image file')
|
|
294
|
+
.option('--logs <json>', 'Console logs as JSON array of {timestamp, level, message}')
|
|
295
|
+
.action(async (opts) => {
|
|
296
|
+
try {
|
|
297
|
+
const { submitFeedback } = await import('./feedbackSubmit.js');
|
|
298
|
+
const result = await submitFeedback({
|
|
299
|
+
type: opts.type,
|
|
300
|
+
message: opts.message,
|
|
301
|
+
token: opts.token,
|
|
302
|
+
url: opts.url,
|
|
303
|
+
screenshot: opts.screenshot,
|
|
304
|
+
logs: opts.logs,
|
|
305
|
+
});
|
|
306
|
+
console.log(JSON.stringify(result, null, 2));
|
|
307
|
+
}
|
|
308
|
+
catch (e) {
|
|
309
|
+
console.error(e.message);
|
|
310
|
+
process.exit(1);
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
program
|
|
314
|
+
.command('feedback:resolve')
|
|
315
|
+
.description('Resolve or decline a feedback item on the local dev server')
|
|
316
|
+
.requiredOption('--id <feedbackId>', 'Feedback report ID')
|
|
317
|
+
.requiredOption('--status <status>', 'New status: resolved or declined')
|
|
318
|
+
.requiredOption('--resolution <text>', 'Resolution message')
|
|
319
|
+
.action(async (opts) => {
|
|
320
|
+
try {
|
|
321
|
+
const { resolveFeedback } = await import('./feedbackResolve.js');
|
|
322
|
+
await resolveFeedback({
|
|
323
|
+
feedbackId: opts.id,
|
|
324
|
+
status: opts.status,
|
|
325
|
+
resolution: opts.resolution,
|
|
326
|
+
});
|
|
327
|
+
console.log('Feedback resolved.');
|
|
328
|
+
}
|
|
329
|
+
catch (e) {
|
|
330
|
+
console.error(e.message);
|
|
331
|
+
process.exit(1);
|
|
332
|
+
}
|
|
333
|
+
});
|
|
286
334
|
program
|
|
287
335
|
.command('dev-logs')
|
|
288
336
|
.description('Show local dev logs from JSONL files')
|
|
@@ -387,6 +435,19 @@ program
|
|
|
387
435
|
process.exit(1);
|
|
388
436
|
}
|
|
389
437
|
});
|
|
438
|
+
program
|
|
439
|
+
.command('url')
|
|
440
|
+
.description('Print the local dev server URL (from .uglyapp config)')
|
|
441
|
+
.action(async () => {
|
|
442
|
+
try {
|
|
443
|
+
const { getLocalUrl } = await import('./url.js');
|
|
444
|
+
console.log(getLocalUrl(process.cwd()));
|
|
445
|
+
}
|
|
446
|
+
catch (e) {
|
|
447
|
+
console.error(e.message);
|
|
448
|
+
process.exit(1);
|
|
449
|
+
}
|
|
450
|
+
});
|
|
390
451
|
program
|
|
391
452
|
.command('upgrade')
|
|
392
453
|
.description('Upgrade framework config files to the current ugly-app version')
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/cli/url.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C"}
|
package/dist/cli/url.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { computePorts, readUglyAppConfig } from './uglyappConfig.js';
|
|
2
|
+
export function getLocalUrl(cwd) {
|
|
3
|
+
const config = readUglyAppConfig(cwd);
|
|
4
|
+
const port = config ? computePorts(config.portStart).PORT : 3000;
|
|
5
|
+
return `http://localhost:${port}`;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/cli/url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,OAAO,oBAAoB,IAAI,EAAE,CAAC;AACpC,CAAC"}
|
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.150";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -28,6 +28,11 @@ export declare const frameworkRequests: {
|
|
|
28
28
|
}, {
|
|
29
29
|
id: string;
|
|
30
30
|
}>;
|
|
31
|
+
resolveFeedback: import("./Api.js").AuthRequestDef<{
|
|
32
|
+
feedbackId: string;
|
|
33
|
+
status: "resolved" | "declined";
|
|
34
|
+
resolution: string;
|
|
35
|
+
}, Record<string, never>>;
|
|
31
36
|
initSession: import("./Api.js").RequestDef<{
|
|
32
37
|
sessionId: string;
|
|
33
38
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameworkRequests.d.ts","sourceRoot":"","sources":["../../src/shared/FrameworkRequests.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"FrameworkRequests.d.ts","sourceRoot":"","sources":["../../src/shared/FrameworkRequests.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkJ5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { authReq, defineRequests, req, z } from './Api.js';
|
|
2
|
-
import { SubmitFeedbackInput } from './FeedbackReport.js';
|
|
2
|
+
import { ResolveFeedbackInput, SubmitFeedbackInput } from './FeedbackReport.js';
|
|
3
3
|
export const frameworkRequests = defineRequests({
|
|
4
4
|
textGen: authReq({
|
|
5
5
|
input: z.object({
|
|
@@ -25,6 +25,10 @@ export const frameworkRequests = defineRequests({
|
|
|
25
25
|
output: z.object({ id: z.string() }),
|
|
26
26
|
rateLimit: { max: 20, window: 60 },
|
|
27
27
|
}),
|
|
28
|
+
resolveFeedback: authReq({
|
|
29
|
+
input: ResolveFeedbackInput,
|
|
30
|
+
output: z.object({}),
|
|
31
|
+
}),
|
|
28
32
|
initSession: req({
|
|
29
33
|
input: z.object({ sessionId: z.string() }),
|
|
30
34
|
output: z.object({ branches: z.record(z.string(), z.string()) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameworkRequests.js","sourceRoot":"","sources":["../../src/shared/FrameworkRequests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"FrameworkRequests.js","sourceRoot":"","sources":["../../src/shared/FrameworkRequests.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { getLocalUrl } from './url.js';
|
|
4
|
+
|
|
5
|
+
export interface FeedbackResolveOptions {
|
|
6
|
+
feedbackId: string;
|
|
7
|
+
status: 'resolved' | 'declined';
|
|
8
|
+
resolution: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function readTokenFromEnv(): string {
|
|
12
|
+
let envContent = '';
|
|
13
|
+
try {
|
|
14
|
+
envContent = fs.readFileSync(
|
|
15
|
+
path.join(process.cwd(), '.env'),
|
|
16
|
+
'utf-8',
|
|
17
|
+
);
|
|
18
|
+
} catch {
|
|
19
|
+
throw new Error(
|
|
20
|
+
'No .env file found. Run "npx ugly-app login" first to set up UGLY_BOT_TOKEN.',
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
const match = envContent.match(/^UGLY_BOT_TOKEN=(.+)$/m);
|
|
24
|
+
if (!match?.[1]) {
|
|
25
|
+
throw new Error(
|
|
26
|
+
'UGLY_BOT_TOKEN not found in .env. Run "npx ugly-app login" first.',
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
return match[1];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export async function resolveFeedback(
|
|
33
|
+
opts: FeedbackResolveOptions,
|
|
34
|
+
): Promise<void> {
|
|
35
|
+
const baseUrl = getLocalUrl(process.cwd());
|
|
36
|
+
const token = readTokenFromEnv();
|
|
37
|
+
|
|
38
|
+
const res = await fetch(`${baseUrl}/api/resolveFeedback`, {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: {
|
|
41
|
+
'Authorization': `Bearer ${token}`,
|
|
42
|
+
'Content-Type': 'application/json',
|
|
43
|
+
},
|
|
44
|
+
body: JSON.stringify({
|
|
45
|
+
input: {
|
|
46
|
+
feedbackId: opts.feedbackId,
|
|
47
|
+
status: opts.status,
|
|
48
|
+
resolution: opts.resolution,
|
|
49
|
+
},
|
|
50
|
+
}),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
if (!res.ok) {
|
|
54
|
+
const body = await res.text().catch(() => '');
|
|
55
|
+
throw new Error(`Failed to resolve feedback: ${res.status} ${body}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { getLocalUrl } from './url.js';
|
|
4
|
+
|
|
5
|
+
export interface FeedbackSubmitOptions {
|
|
6
|
+
type: 'bug' | 'feature' | 'design';
|
|
7
|
+
message: string;
|
|
8
|
+
url?: string;
|
|
9
|
+
screenshot?: string; // file path to a PNG
|
|
10
|
+
token: string;
|
|
11
|
+
logs?: string; // JSON string of FeedbackLogEntry[]
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async function uploadScreenshot(
|
|
15
|
+
baseUrl: string,
|
|
16
|
+
token: string,
|
|
17
|
+
filePath: string,
|
|
18
|
+
): Promise<string> {
|
|
19
|
+
const ext = path.extname(filePath).slice(1) || 'png';
|
|
20
|
+
const key = `feedback/${Date.now()}.${ext}`;
|
|
21
|
+
|
|
22
|
+
// Check file exists before requesting upload URL
|
|
23
|
+
if (!fs.existsSync(filePath)) {
|
|
24
|
+
throw new Error(`Screenshot file not found: ${filePath}`);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Get presigned upload URL
|
|
28
|
+
const presignRes = await fetch(`${baseUrl}/api/uploadUrl`, {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: {
|
|
31
|
+
'Authorization': `Bearer ${token}`,
|
|
32
|
+
'Content-Type': 'application/json',
|
|
33
|
+
},
|
|
34
|
+
body: JSON.stringify({
|
|
35
|
+
input: { key, contentType: `image/${ext}` },
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
if (!presignRes.ok) {
|
|
39
|
+
throw new Error(`Failed to get upload URL: ${presignRes.status}`);
|
|
40
|
+
}
|
|
41
|
+
const { uploadUrl, resultUrl } = (await presignRes.json()) as {
|
|
42
|
+
uploadUrl: string;
|
|
43
|
+
resultUrl: string;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// Upload the file
|
|
47
|
+
const fileBuffer = fs.readFileSync(filePath);
|
|
48
|
+
const uploadRes = await fetch(uploadUrl, {
|
|
49
|
+
method: 'PUT',
|
|
50
|
+
headers: { 'Content-Type': `image/${ext}` },
|
|
51
|
+
body: fileBuffer,
|
|
52
|
+
});
|
|
53
|
+
if (!uploadRes.ok) {
|
|
54
|
+
throw new Error(`Failed to upload screenshot: ${uploadRes.status}`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return resultUrl;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export async function submitFeedback(
|
|
61
|
+
opts: FeedbackSubmitOptions,
|
|
62
|
+
): Promise<{ id: string }> {
|
|
63
|
+
const baseUrl = getLocalUrl(process.cwd());
|
|
64
|
+
|
|
65
|
+
let screenshotUri: string | undefined;
|
|
66
|
+
if (opts.screenshot) {
|
|
67
|
+
screenshotUri = await uploadScreenshot(baseUrl, opts.token, opts.screenshot);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
let previousLogs: unknown[] | undefined;
|
|
71
|
+
if (opts.logs) {
|
|
72
|
+
try {
|
|
73
|
+
previousLogs = JSON.parse(opts.logs);
|
|
74
|
+
} catch {
|
|
75
|
+
throw new Error(`--logs must be valid JSON: ${opts.logs.slice(0, 100)}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const res = await fetch(`${baseUrl}/api/submitFeedback`, {
|
|
80
|
+
method: 'POST',
|
|
81
|
+
headers: {
|
|
82
|
+
'Authorization': `Bearer ${opts.token}`,
|
|
83
|
+
'Content-Type': 'application/json',
|
|
84
|
+
},
|
|
85
|
+
body: JSON.stringify({
|
|
86
|
+
input: {
|
|
87
|
+
type: opts.type,
|
|
88
|
+
message: opts.message,
|
|
89
|
+
url: opts.url ?? baseUrl,
|
|
90
|
+
screenshotUri,
|
|
91
|
+
previousLogs,
|
|
92
|
+
},
|
|
93
|
+
}),
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
if (!res.ok) {
|
|
97
|
+
const body = await res.text().catch(() => '');
|
|
98
|
+
throw new Error(`Failed to submit feedback: ${res.status} ${body}`);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return (await res.json()) as { id: string };
|
|
102
|
+
}
|
package/src/cli/index.ts
CHANGED
|
@@ -296,6 +296,61 @@ program
|
|
|
296
296
|
}
|
|
297
297
|
});
|
|
298
298
|
|
|
299
|
+
program
|
|
300
|
+
.command('feedback:submit')
|
|
301
|
+
.description('Submit feedback to the local dev server')
|
|
302
|
+
.requiredOption('--type <type>', 'Feedback type: bug, feature, or design')
|
|
303
|
+
.requiredOption('--message <message>', 'Feedback description')
|
|
304
|
+
.requiredOption('--token <token>', 'Bot auth token (Bearer)')
|
|
305
|
+
.option('--url <url>', 'Page URL the feedback is about')
|
|
306
|
+
.option('--screenshot <path>', 'Path to screenshot image file')
|
|
307
|
+
.option('--logs <json>', 'Console logs as JSON array of {timestamp, level, message}')
|
|
308
|
+
.action(async (opts: {
|
|
309
|
+
type: string;
|
|
310
|
+
message: string;
|
|
311
|
+
token: string;
|
|
312
|
+
url?: string;
|
|
313
|
+
screenshot?: string;
|
|
314
|
+
logs?: string;
|
|
315
|
+
}) => {
|
|
316
|
+
try {
|
|
317
|
+
const { submitFeedback } = await import('./feedbackSubmit.js');
|
|
318
|
+
const result = await submitFeedback({
|
|
319
|
+
type: opts.type as 'bug' | 'feature' | 'design',
|
|
320
|
+
message: opts.message,
|
|
321
|
+
token: opts.token,
|
|
322
|
+
url: opts.url,
|
|
323
|
+
screenshot: opts.screenshot,
|
|
324
|
+
logs: opts.logs,
|
|
325
|
+
});
|
|
326
|
+
console.log(JSON.stringify(result, null, 2));
|
|
327
|
+
} catch (e) {
|
|
328
|
+
console.error((e as Error).message);
|
|
329
|
+
process.exit(1);
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
program
|
|
334
|
+
.command('feedback:resolve')
|
|
335
|
+
.description('Resolve or decline a feedback item on the local dev server')
|
|
336
|
+
.requiredOption('--id <feedbackId>', 'Feedback report ID')
|
|
337
|
+
.requiredOption('--status <status>', 'New status: resolved or declined')
|
|
338
|
+
.requiredOption('--resolution <text>', 'Resolution message')
|
|
339
|
+
.action(async (opts: { id: string; status: string; resolution: string }) => {
|
|
340
|
+
try {
|
|
341
|
+
const { resolveFeedback } = await import('./feedbackResolve.js');
|
|
342
|
+
await resolveFeedback({
|
|
343
|
+
feedbackId: opts.id,
|
|
344
|
+
status: opts.status as 'resolved' | 'declined',
|
|
345
|
+
resolution: opts.resolution,
|
|
346
|
+
});
|
|
347
|
+
console.log('Feedback resolved.');
|
|
348
|
+
} catch (e) {
|
|
349
|
+
console.error((e as Error).message);
|
|
350
|
+
process.exit(1);
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
|
|
299
354
|
program
|
|
300
355
|
.command('dev-logs')
|
|
301
356
|
.description('Show local dev logs from JSONL files')
|
|
@@ -414,6 +469,19 @@ program
|
|
|
414
469
|
}
|
|
415
470
|
});
|
|
416
471
|
|
|
472
|
+
program
|
|
473
|
+
.command('url')
|
|
474
|
+
.description('Print the local dev server URL (from .uglyapp config)')
|
|
475
|
+
.action(async () => {
|
|
476
|
+
try {
|
|
477
|
+
const { getLocalUrl } = await import('./url.js');
|
|
478
|
+
console.log(getLocalUrl(process.cwd()));
|
|
479
|
+
} catch (e) {
|
|
480
|
+
console.error((e as Error).message);
|
|
481
|
+
process.exit(1);
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
|
|
417
485
|
program
|
|
418
486
|
.command('upgrade')
|
|
419
487
|
.description('Upgrade framework config files to the current ugly-app version')
|
package/src/cli/url.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { computePorts, readUglyAppConfig } from './uglyappConfig.js';
|
|
2
|
+
|
|
3
|
+
export function getLocalUrl(cwd: string): string {
|
|
4
|
+
const config = readUglyAppConfig(cwd);
|
|
5
|
+
const port = config ? computePorts(config.portStart).PORT : 3000;
|
|
6
|
+
return `http://localhost:${port}`;
|
|
7
|
+
}
|
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.150";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { authReq, defineRequests, req, z } from './Api.js';
|
|
2
|
-
import { SubmitFeedbackInput } from './FeedbackReport.js';
|
|
2
|
+
import { ResolveFeedbackInput, SubmitFeedbackInput } from './FeedbackReport.js';
|
|
3
3
|
import type { ImageGenModel } from './ImageGen.js';
|
|
4
4
|
import type { TextGenModel } from './TextGen.js';
|
|
5
5
|
|
|
@@ -33,6 +33,11 @@ export const frameworkRequests = defineRequests({
|
|
|
33
33
|
rateLimit: { max: 20, window: 60 },
|
|
34
34
|
}),
|
|
35
35
|
|
|
36
|
+
resolveFeedback: authReq({
|
|
37
|
+
input: ResolveFeedbackInput,
|
|
38
|
+
output: z.object({}),
|
|
39
|
+
}),
|
|
40
|
+
|
|
36
41
|
initSession: req({
|
|
37
42
|
input: z.object({ sessionId: z.string() }),
|
|
38
43
|
output: z.object({ branches: z.record(z.string(), z.string()) }),
|
|
@@ -12,22 +12,34 @@ Run one full autonomous cycle. No human input. No clarifying questions. Make the
|
|
|
12
12
|
|
|
13
13
|
## About the Website
|
|
14
14
|
|
|
15
|
-
This website
|
|
15
|
+
This website is a **blank canvas**. It is a full-stack app with AI capabilities, real-time data, and a complete UI component library — but it has no content, no pages, no purpose yet. The swarm decides what it becomes.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
- **Audio Test** (`/audio-test`) — text-to-speech (TTS) and speech-to-text (STT)
|
|
19
|
-
- **Kagi Test** (`/kagi-test`) — Kagi search API integration
|
|
20
|
-
- **UI Components** (`/ui-components`) — suite of common UI controls (buttons, cards, inputs, selects, modals, etc.)
|
|
21
|
-
- **Todo Demo** (`/todo-demo`) — real-time CRUD with live sync
|
|
22
|
-
- **Auth Demo** (`/auth-demo`) — OAuth login/logout
|
|
23
|
-
- **Path Params** (`/user/:userId`) and **Query Params** (`/search`) — routing demos
|
|
17
|
+
The template includes demo/test pages (todo demo, UI components, auth demo, etc.) that exist only to show developers what the framework can do. **These test pages are not the website. Ignore them entirely.** Do not iterate on them, redesign them, or treat them as features. They are documentation, not product.
|
|
24
18
|
|
|
25
|
-
|
|
19
|
+
On the **first cycle**, the manager should:
|
|
20
|
+
|
|
21
|
+
1. Browse the site to understand the framework's capabilities (what components, APIs, and tools are available)
|
|
22
|
+
|
|
23
|
+
2. Invent a **completely original concept** for what this website should be — a real product with a clear purpose, target audience, and identity
|
|
24
|
+
|
|
25
|
+
3. Create personas that fit the invented product concept
|
|
26
|
+
|
|
27
|
+
4. The feedback bots should then request the foundational pages, features, and design that bring this concept to life from scratch
|
|
28
|
+
|
|
29
|
+
On **subsequent cycles**, the swarm evolves the product they invented — adding depth, polish, and new capabilities. The site's identity emerges from the swarm's collective vision, not from any pre-existing content.
|
|
30
|
+
|
|
31
|
+
There are no limits on what can be built. New pages, endpoints, collections, migrations, AI integrations, real-time features, image generation — everything is available.
|
|
32
|
+
|
|
33
|
+
## Base URL
|
|
34
|
+
|
|
35
|
+
Run `npx ugly-app url` to get the local server URL. Use this value everywhere (browsing, API calls, polling). Store it as `BASE_URL` for the cycle.
|
|
26
36
|
|
|
27
37
|
## Prerequisites
|
|
28
38
|
|
|
29
39
|
- The dev server must be running **without** `--watch` (see below)
|
|
40
|
+
|
|
30
41
|
- `.env` must have `UGLY_BOT_TOKEN` (from `npx ugly-app login`)
|
|
42
|
+
|
|
31
43
|
- Playwright must be installed (`npx playwright install chromium`)
|
|
32
44
|
|
|
33
45
|
### Starting the dev server (no watchers)
|
|
@@ -40,30 +52,6 @@ npx ugly-app dev
|
|
|
40
52
|
|
|
41
53
|
This starts Docker, MongoDB, and the server but **without** tsx watch, tsc --watch, or eslint --watch. Do **not** use `npm run dev` (which adds `--watch`) or `npx ugly-app dev --watch`. After the maintain bot finishes and commits, the restart step (Step 5) will kill and restart the server to pick up changes.
|
|
42
54
|
|
|
43
|
-
## First Run Bootstrap
|
|
44
|
-
|
|
45
|
-
If `bots/` directory does not exist:
|
|
46
|
-
|
|
47
|
-
1. Create the directory structure:
|
|
48
|
-
```
|
|
49
|
-
bots/
|
|
50
|
-
manager/memory.md (empty)
|
|
51
|
-
feedback/active/ (empty dir)
|
|
52
|
-
feedback/retired/ (empty dir)
|
|
53
|
-
maintain/memory.md (empty)
|
|
54
|
-
journal/README.md (empty)
|
|
55
|
-
journal/cycles/
|
|
56
|
-
journal/cycles/screenshots/
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
2. Add to `.gitignore`:
|
|
60
|
-
```
|
|
61
|
-
bots/feedback/active/*/.env
|
|
62
|
-
bots/feedback/retired/*/.env
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
3. Commit: `[bot] init: create bots directory structure`
|
|
66
|
-
|
|
67
55
|
---
|
|
68
56
|
|
|
69
57
|
## Step 1 — Manager (create/update feedback bots)
|
|
@@ -71,66 +59,110 @@ If `bots/` directory does not exist:
|
|
|
71
59
|
### If first cycle (no personas in `bots/feedback/active/`):
|
|
72
60
|
|
|
73
61
|
1. Launch Playwright (headless Chromium)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
62
|
+
|
|
63
|
+
2. Navigate to `$BASE_URL`, browse all pages to understand the **framework's capabilities** (available components, APIs, patterns)
|
|
64
|
+
|
|
65
|
+
3. **Ignore all existing demo/test pages** — they are developer documentation, not the website
|
|
66
|
+
|
|
67
|
+
4. **Invent an original product concept**: decide what this website should become. Pick something specific and interesting — not a generic portfolio or landing page. Think: a real product someone would use. Write the concept into `bots/manager/memory.md`.
|
|
68
|
+
|
|
69
|
+
5. Decide on 5-13 initial personas that fit the invented product. Each should have a distinct perspective that will generate useful, non-overlapping feedback. Consider:
|
|
77
70
|
- Different user types (power user, newcomer, accessibility-focused, mobile-first)
|
|
71
|
+
|
|
78
72
|
- Different concerns (design, performance, features, content, UX flow)
|
|
73
|
+
|
|
79
74
|
- Different temperaments (critical, enthusiastic, minimalist, maximalist)
|
|
80
|
-
|
|
75
|
+
|
|
76
|
+
6. For each persona:
|
|
81
77
|
- Run: `npx ugly-app auth:create-bot --slug {slug} --name "{Name}"`
|
|
78
|
+
|
|
82
79
|
- Save the JSON output to `bots/feedback/active/{slug}/.env`:
|
|
80
|
+
|
|
83
81
|
```
|
|
84
82
|
BOT_SLUG={slug}
|
|
85
83
|
BOT_USER_ID={userId from output}
|
|
86
84
|
BOT_TOKEN={token from output}
|
|
87
85
|
```
|
|
86
|
+
|
|
88
87
|
- Write `bots/feedback/active/{slug}/persona.md`:
|
|
88
|
+
|
|
89
89
|
```markdown
|
|
90
90
|
---
|
|
91
91
|
name: Display Name
|
|
92
92
|
slug: slug-name
|
|
93
93
|
---
|
|
94
|
+
|
|
94
95
|
# Display Name
|
|
96
|
+
|
|
95
97
|
## Who You Are
|
|
98
|
+
|
|
96
99
|
[Personality, perspective, what they care about]
|
|
100
|
+
|
|
97
101
|
## What You Notice
|
|
102
|
+
|
|
98
103
|
[Types of observations this persona makes]
|
|
104
|
+
|
|
99
105
|
## Feedback Style
|
|
106
|
+
|
|
100
107
|
[Tone, specificity, format of their feedback]
|
|
101
108
|
```
|
|
109
|
+
|
|
102
110
|
- Write empty `bots/feedback/active/{slug}/memory.md`
|
|
103
|
-
|
|
104
|
-
7.
|
|
111
|
+
|
|
112
|
+
7. Write `bots/manager/memory.md` with the invented product concept, initial roster, and site hypothesis
|
|
113
|
+
|
|
114
|
+
8. Commit: `[bot] manager: initial roster — {comma-separated persona names}`
|
|
105
115
|
|
|
106
116
|
### If subsequent cycle:
|
|
107
117
|
|
|
108
118
|
1. Read `bots/manager/memory.md`
|
|
119
|
+
|
|
109
120
|
2. Read each active persona's `memory.md`
|
|
121
|
+
|
|
110
122
|
3. Run `npm run feedback` to see recent feedback and resolutions
|
|
123
|
+
|
|
111
124
|
4. Browse the site with Playwright to see current state
|
|
125
|
+
|
|
112
126
|
5. For each persona decide: **keep** / **revise** / **retire**
|
|
113
127
|
- Keep: no changes needed
|
|
128
|
+
|
|
114
129
|
- Revise: rewrite their `persona.md` to sharpen or shift focus
|
|
130
|
+
|
|
115
131
|
- Retire: `mv bots/feedback/active/{slug} bots/feedback/retired/{slug}`
|
|
132
|
+
|
|
116
133
|
6. Create new personas if coverage gaps exist (same account creation flow as first run)
|
|
134
|
+
|
|
117
135
|
7. Update `bots/manager/memory.md`:
|
|
136
|
+
|
|
118
137
|
```markdown
|
|
119
138
|
# Feedback Manager Memory
|
|
139
|
+
|
|
120
140
|
## Last Updated
|
|
141
|
+
|
|
121
142
|
[date]
|
|
143
|
+
|
|
122
144
|
## Site Hypothesis
|
|
145
|
+
|
|
123
146
|
[What is this site becoming?]
|
|
147
|
+
|
|
124
148
|
## Active Roster
|
|
149
|
+
|
|
125
150
|
[list with one-line descriptions]
|
|
151
|
+
|
|
126
152
|
## Coverage Assessment
|
|
153
|
+
|
|
127
154
|
Well-covered: [list]
|
|
128
155
|
Missing: [list]
|
|
156
|
+
|
|
129
157
|
## Recent Decisions
|
|
158
|
+
|
|
130
159
|
[last 3 cycles of keep/revise/retire/create decisions with reasons]
|
|
160
|
+
|
|
131
161
|
## History
|
|
162
|
+
|
|
132
163
|
[compressed older entries when exceeding ~4000 tokens]
|
|
133
164
|
```
|
|
165
|
+
|
|
134
166
|
8. Commit changes: `[bot] manager: {summary of changes}`
|
|
135
167
|
|
|
136
168
|
---
|
|
@@ -140,43 +172,47 @@ If `bots/` directory does not exist:
|
|
|
140
172
|
Dispatch ALL active personas as **parallel subagents**. Each subagent does:
|
|
141
173
|
|
|
142
174
|
1. Read `bots/feedback/active/{slug}/persona.md` and `memory.md`
|
|
175
|
+
|
|
143
176
|
2. Read `bots/feedback/active/{slug}/.env` for `BOT_TOKEN`
|
|
144
177
|
- If `.env` is missing: run `npx ugly-app auth:create-bot --slug {slug} --name "{name}"` to regenerate
|
|
178
|
+
|
|
145
179
|
3. Launch Playwright (headless Chromium)
|
|
180
|
+
|
|
146
181
|
4. Set up console log capture: listen to `page.on('console')` events, buffer them
|
|
147
|
-
|
|
182
|
+
|
|
183
|
+
5. Authenticate: set auth cookie with the bot's token, navigate to `$BASE_URL`
|
|
148
184
|
- Cookie name: check the app's auth cookie name (typically set by the login flow)
|
|
185
|
+
|
|
149
186
|
- Alternative: make a POST to `/request` with `op: "userEmailLogin"` using the bot's token
|
|
187
|
+
|
|
150
188
|
6. Browse all available pages from the persona's perspective
|
|
189
|
+
|
|
151
190
|
7. For each observation worth reporting (1-5 total):
|
|
152
191
|
- Navigate to the relevant page
|
|
153
|
-
|
|
154
|
-
-
|
|
155
|
-
|
|
192
|
+
|
|
193
|
+
- Take a screenshot and save to a temp file: `await page.screenshot({ path: '/tmp/screenshot.png' })`
|
|
194
|
+
|
|
195
|
+
- Collect buffered console logs as JSON: `[{ "timestamp": ..., "level": "error", "message": "..." }]`
|
|
196
|
+
|
|
197
|
+
- Submit feedback via CLI:
|
|
198
|
+
|
|
156
199
|
```bash
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
"description": "...",
|
|
165
|
-
"screenshotBase64": "...",
|
|
166
|
-
"logs": [...],
|
|
167
|
-
"url": "http://localhost:3000/current-page",
|
|
168
|
-
"page": "pageName",
|
|
169
|
-
"userAgent": "BotSwarm/{slug}",
|
|
170
|
-
"screenWidth": 1280,
|
|
171
|
-
"screenHeight": 720
|
|
172
|
-
}
|
|
173
|
-
}'
|
|
200
|
+
npx ugly-app feedback:submit \
|
|
201
|
+
--type "bug|feature|design" \
|
|
202
|
+
--message "description of the feedback" \
|
|
203
|
+
--token "$BOT_TOKEN" \
|
|
204
|
+
--url "$BASE_URL/current-page" \
|
|
205
|
+
--screenshot /tmp/screenshot.png \
|
|
206
|
+
--logs '[{"timestamp":...,"level":"error","message":"..."}]'
|
|
174
207
|
```
|
|
208
|
+
|
|
175
209
|
**Feedback bots should be ambitious in what they request.** Don't just report cosmetic nits — request new features, suggest adding entire new pages, propose redesigns, ask for search/filter/sort capabilities, request animations, dark mode, better navigation, new data models. Think like a demanding product manager, not a passive observer. The feedback should push the site to evolve rapidly.
|
|
176
210
|
|
|
177
211
|
8. Update `bots/feedback/active/{slug}/memory.md`:
|
|
212
|
+
|
|
178
213
|
```markdown
|
|
179
214
|
## Cycle [YYYY-MM-DD]
|
|
215
|
+
|
|
180
216
|
**Submitted:** [list of feedback items with types]
|
|
181
217
|
**Previous feedback resolved:** [what changed since last visit]
|
|
182
218
|
**Previous feedback declined:** [what was not built and why]
|
|
@@ -196,48 +232,89 @@ Run sequentially in one session. No questions. Make autonomous decisions.
|
|
|
196
232
|
|
|
197
233
|
**AMBITION MANDATE: The maintain bot builds everything. There is no "too complex," "too risky," or "would require significant changes." If a feedback bot asked for it, you build it. New pages, new endpoints, new collections, migrations, full redesigns, multi-file refactors — all fair game. The only valid decline reason is a direct contradiction of a Critical Rule in CLAUDE.md. Everything else gets built, no matter how many files it touches or how large the change is.**
|
|
198
234
|
|
|
235
|
+
**BLANK CANVAS RULE: On the first cycle, the maintain bot should remove or replace the template's demo/test pages (TodoDemo, UIComponents, AuthDemo, AITest, AudioTest, ScrollTest, KagiTest, SearchPage, UserPage) with the new pages requested by the feedback bots. The demo pages are scaffolding — delete them as real pages are built. Update \*\***shared/pages.ts\***\*, \*\***client/allPages.ts\***\*, and remove unused page components.**
|
|
236
|
+
|
|
199
237
|
1. Read `bots/maintain/memory.md` for feature inventory and context
|
|
238
|
+
|
|
200
239
|
2. Mark all `new` feedback as `captured` to prevent double-processing:
|
|
201
240
|
- Run `npm run feedback --json` to get all feedback
|
|
202
|
-
|
|
241
|
+
|
|
242
|
+
- For each item with status `new`, resolve it:
|
|
243
|
+
|
|
203
244
|
```bash
|
|
204
|
-
|
|
205
|
-
-H "Authorization: Bearer $UGLY_BOT_TOKEN" \
|
|
206
|
-
-H "Content-Type: application/json" \
|
|
207
|
-
-d '{"op":"feedbackReportResolve","input":{"feedbackReportId":"...","status":"captured","resolution":""}}'
|
|
245
|
+
npx ugly-app feedback:resolve --id "<feedbackReportId>" --status resolved --resolution "captured for processing"
|
|
208
246
|
```
|
|
247
|
+
|
|
209
248
|
3. Invoke `/fix-feedback local` — run completely unattended:
|
|
210
249
|
- Do not ask which environment. Use `local`.
|
|
250
|
+
|
|
211
251
|
- For each feedback item: implement the fix or feature. **Build it, no matter how large.**
|
|
252
|
+
|
|
212
253
|
- **Never decline feedback because it's "complex" or "ambitious."** If you're unsure how, read existing code and the ugly-app API reference, then figure it out.
|
|
254
|
+
|
|
213
255
|
- If feedback requires new pages: add routes in `shared/pages.ts`, components in `client/pages/`, mappings in `client/allPages.ts`.
|
|
256
|
+
|
|
214
257
|
- If feedback requires new endpoints: add to `shared/api.ts` and `server/index.ts`.
|
|
258
|
+
|
|
215
259
|
- If feedback requires new collections: add to `shared/collections.ts`, run `npm run db:init`.
|
|
260
|
+
|
|
216
261
|
- If feedback requires images: use `npm run imageGen -- "prompt" --output client/assets/<name>.png`.
|
|
262
|
+
|
|
217
263
|
- If feedback requires schema changes: write a migration in `server/migrations/`.
|
|
218
|
-
|
|
264
|
+
|
|
265
|
+
- Resolve each item via CLI:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
npx ugly-app feedback:resolve --id "<id>" --status resolved --resolution "Built: description"
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Or decline (only for Critical Rule violations):
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
npx ugly-app feedback:resolve --id "<id>" --status declined --resolution "Reason"
|
|
275
|
+
```
|
|
276
|
+
|
|
219
277
|
- Commit each change: `[bot] fix: ...` or `[bot] feat: ...`
|
|
278
|
+
|
|
220
279
|
4. Invoke `/fix-code` — run completely unattended:
|
|
221
280
|
- Fix all TypeScript errors, lint warnings, test failures.
|
|
281
|
+
|
|
222
282
|
- Commit: `[bot] fix: build errors`
|
|
283
|
+
|
|
223
284
|
5. Invoke `/fix-perf local` — run completely unattended:
|
|
224
285
|
- Do not ask which environment. Use `local`.
|
|
286
|
+
|
|
225
287
|
- Fix any performance issues found.
|
|
288
|
+
|
|
226
289
|
- Commit: `[bot] perf: ...`
|
|
290
|
+
|
|
227
291
|
6. Update `bots/maintain/memory.md`:
|
|
292
|
+
|
|
228
293
|
```markdown
|
|
229
294
|
# Maintain Bot Memory
|
|
295
|
+
|
|
230
296
|
## Last Updated
|
|
297
|
+
|
|
231
298
|
[date]
|
|
299
|
+
|
|
232
300
|
## Feature Inventory
|
|
301
|
+
|
|
233
302
|
[what exists on the site now]
|
|
303
|
+
|
|
234
304
|
## Recent Feedback Themes
|
|
305
|
+
|
|
235
306
|
[what kinds of feedback are coming in]
|
|
307
|
+
|
|
236
308
|
## Recurring Issues
|
|
309
|
+
|
|
237
310
|
[errors or perf problems that keep appearing]
|
|
311
|
+
|
|
238
312
|
## Site Direction
|
|
313
|
+
|
|
239
314
|
[what is this site becoming?]
|
|
315
|
+
|
|
240
316
|
## Cycle History
|
|
317
|
+
|
|
241
318
|
[last 3 cycles, compress older entries when > ~4000 tokens]
|
|
242
319
|
```
|
|
243
320
|
|
|
@@ -246,35 +323,48 @@ Run sequentially in one session. No questions. Make autonomous decisions.
|
|
|
246
323
|
## Step 4 — Journal Bot
|
|
247
324
|
|
|
248
325
|
1. Count existing `.md` files in `bots/journal/cycles/` to determine cycle number (NNN, zero-padded to 3 digits)
|
|
326
|
+
|
|
249
327
|
2. Take Playwright screenshots of every accessible page, save to `bots/journal/cycles/screenshots/{NNN}-{page-slug}.png`
|
|
328
|
+
|
|
250
329
|
3. Gather cycle data:
|
|
251
330
|
- Manager decisions from Step 1
|
|
331
|
+
|
|
252
332
|
- Feedback bot results from Step 2 (which succeeded, what was submitted)
|
|
333
|
+
|
|
253
334
|
- Maintain bot changes from Step 3 (git log of `[bot]` commits since last cycle)
|
|
335
|
+
|
|
254
336
|
4. Write `bots/journal/cycles/YYYY-MM-DD-NNN.md`:
|
|
337
|
+
|
|
255
338
|
```markdown
|
|
256
339
|
# Cycle NNN — YYYY-MM-DD
|
|
257
340
|
|
|
258
341
|
## Outcomes
|
|
342
|
+
|
|
259
343
|
- Manager: [status] — [roster changes]
|
|
260
344
|
- Feedback: [N/M bots succeeded] — [top themes]
|
|
261
345
|
- Maintain: [status] — [N commits, N feedback resolved, N declined]
|
|
262
346
|
- Restart: [pending — filled in by Step 5]
|
|
263
347
|
|
|
264
348
|
## Feedback Submitted
|
|
349
|
+
|
|
265
350
|
[summary of all feedback items across all bots this cycle]
|
|
266
351
|
|
|
267
352
|
## Changes Deployed
|
|
353
|
+
|
|
268
354
|
[git log --oneline of [bot] commits from this cycle]
|
|
269
355
|
|
|
270
356
|
## Screenshots
|
|
357
|
+
|
|
271
358
|

|
|
272
359
|
[one per page]
|
|
273
360
|
|
|
274
361
|
## Observations
|
|
362
|
+
|
|
275
363
|
[patterns, emerging direction, concerns, what's working, what's not]
|
|
276
364
|
```
|
|
365
|
+
|
|
277
366
|
5. Update `bots/journal/README.md` — overwrite with a one-paragraph running summary of the project's evolution so far
|
|
367
|
+
|
|
278
368
|
6. Commit: `[bot] journal: cycle NNN`
|
|
279
369
|
|
|
280
370
|
---
|
|
@@ -282,24 +372,41 @@ Run sequentially in one session. No questions. Make autonomous decisions.
|
|
|
282
372
|
## Step 5 — Restart Loop
|
|
283
373
|
|
|
284
374
|
1. Stop the dev server (find and kill the `npx ugly-app dev` process group)
|
|
375
|
+
|
|
285
376
|
2. Run `npm install` (maintain bot may have added packages in Step 3)
|
|
377
|
+
|
|
286
378
|
3. Run `npm run build`
|
|
379
|
+
|
|
287
380
|
4. **If build fails:**
|
|
288
381
|
- Read the full error output
|
|
382
|
+
|
|
289
383
|
- Identify the root cause in the source code
|
|
384
|
+
|
|
290
385
|
- Fix it
|
|
386
|
+
|
|
291
387
|
- Commit: `[bot] fix: build errors`
|
|
388
|
+
|
|
292
389
|
- Run `npm run build` again
|
|
390
|
+
|
|
293
391
|
- **Repeat until build succeeds. Do not stop. Do not ask for help.**
|
|
392
|
+
|
|
294
393
|
5. Start `npx ugly-app dev` in the background (no `--watch`)
|
|
295
|
-
|
|
394
|
+
|
|
395
|
+
6. Wait for the server to be ready — poll `$(npx ugly-app url)` with up to 60 retries (1s apart)
|
|
396
|
+
|
|
296
397
|
7. **If server fails to start or crashes:**
|
|
297
398
|
- Read the error output and/or `npm run error`
|
|
399
|
+
|
|
298
400
|
- Fix the code
|
|
401
|
+
|
|
299
402
|
- Commit: `[bot] fix: startup errors`
|
|
403
|
+
|
|
300
404
|
- Kill and restart `npx ugly-app dev`
|
|
405
|
+
|
|
301
406
|
- **Repeat until server is healthy. Do not stop. Do not ask for help.**
|
|
407
|
+
|
|
302
408
|
8. Once healthy: update the journal cycle file's Restart outcome to `success` or note any fixes made
|
|
409
|
+
|
|
303
410
|
9. Commit any remaining changes: `[bot] fix: restart issues`
|
|
304
411
|
|
|
305
412
|
**The restart loop has no retry limit.** It runs until clean or until externally killed. If a human has to intervene, the bots have failed.
|
|
@@ -309,6 +416,7 @@ Run sequentially in one session. No questions. Make autonomous decisions.
|
|
|
309
416
|
## Completion
|
|
310
417
|
|
|
311
418
|
Output a one-line summary:
|
|
419
|
+
|
|
312
420
|
```
|
|
313
421
|
Cycle NNN complete. Manager: {status}. Bots: {N}/{M}. Maintain: {status}. Journal: {status}. Restart: {status}.
|
|
314
422
|
```
|
package/templates/CLAUDE.md
CHANGED
|
@@ -19,6 +19,9 @@ Full API reference: https://www.npmjs.com/package/ugly-app
|
|
|
19
19
|
- `npm run perf` / `npm run perf:server` — Query perf logs (local / production)
|
|
20
20
|
- `npm run feedback` / `npm run feedback:server` — Query feedback (local / production)
|
|
21
21
|
- `npm run dev-logs` — Show local dev logs from JSONL files
|
|
22
|
+
- `npx ugly-app url` — Print the local dev server URL (from `.uglyapp` config)
|
|
23
|
+
- `npx ugly-app feedback:submit` — Submit feedback to local server (use `--help` for flags)
|
|
24
|
+
- `npx ugly-app feedback:resolve` — Resolve/decline a feedback item (use `--help` for flags)
|
|
22
25
|
|
|
23
26
|
## Adding an endpoint
|
|
24
27
|
1. Define in `shared/api.ts` using `req()` (public) or `authReq()` (authenticated) + Zod schemas
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|