ugly-app 0.1.484 → 0.1.486
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/configure.d.ts.map +1 -1
- package/dist/cli/configure.js +8 -41
- package/dist/cli/configure.js.map +1 -1
- package/dist/cli/dev.d.ts.map +1 -1
- package/dist/cli/dev.js +9 -25
- package/dist/cli/dev.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +2 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/ensureInfra.d.ts.map +1 -1
- package/dist/cli/ensureInfra.js +4 -4
- package/dist/cli/ensureInfra.js.map +1 -1
- package/dist/cli/feedbackResolve.d.ts +36 -0
- package/dist/cli/feedbackResolve.d.ts.map +1 -1
- package/dist/cli/feedbackResolve.js +92 -8
- package/dist/cli/feedbackResolve.js.map +1 -1
- package/dist/cli/feedbackSubmit.d.ts.map +1 -1
- package/dist/cli/feedbackSubmit.js +2 -6
- package/dist/cli/feedbackSubmit.js.map +1 -1
- package/dist/cli/index.js +27 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/scaffold.d.ts.map +1 -1
- package/dist/cli/scaffold.js +2 -4
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/cli/uglyappConfig.d.ts +4 -4
- package/dist/cli/uglyappConfig.d.ts.map +1 -1
- package/dist/cli/uglyappConfig.js +4 -39
- package/dist/cli/uglyappConfig.js.map +1 -1
- package/dist/cli/uglyappConfig.test.js +1 -3
- package/dist/cli/uglyappConfig.test.js.map +1 -1
- package/dist/cli/url.d.ts +1 -1
- package/dist/cli/url.d.ts.map +1 -1
- package/dist/cli/url.js +3 -5
- package/dist/cli/url.js.map +1 -1
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/shared/Defaults.d.ts +10 -8
- package/dist/shared/Defaults.d.ts.map +1 -1
- package/dist/shared/Defaults.js +18 -8
- package/dist/shared/Defaults.js.map +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/index.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/configure.ts +7 -46
- package/src/cli/dev.ts +9 -28
- package/src/cli/doctor.ts +2 -1
- package/src/cli/ensureInfra.ts +4 -3
- package/src/cli/feedbackResolve.ts +116 -10
- package/src/cli/feedbackSubmit.ts +2 -8
- package/src/cli/index.ts +65 -18
- package/src/cli/scaffold.ts +2 -4
- package/src/cli/uglyappConfig.test.ts +1 -3
- package/src/cli/uglyappConfig.ts +4 -55
- package/src/cli/url.ts +3 -5
- package/src/cli/version.ts +1 -1
- package/src/shared/Defaults.ts +18 -8
- package/src/shared/index.ts +1 -1
- package/templates/.claude/skills/bot-swarm/SKILL.md +64 -20
- package/templates/.claude/skills/fix-feedback/SKILL.md +22 -0
- package/templates/bots/feedback/run-bot.mjs +88 -43
- package/templates/playwright.config.ts +1 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../src/cli/configure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../src/cli/configure.ts"],"names":[],"mappings":"AAQA,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBjE"}
|
package/dist/cli/configure.js
CHANGED
|
@@ -1,52 +1,19 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import { nanoid } from 'nanoid';
|
|
3
3
|
import path from 'path';
|
|
4
|
-
import
|
|
5
|
-
import { readUglyAppConfig, validateLocalPort, writeUglyAppConfig, } from './uglyappConfig.js';
|
|
6
|
-
async function promptLocalPort(rl) {
|
|
7
|
-
return new Promise((resolve) => {
|
|
8
|
-
const ask = () => {
|
|
9
|
-
rl.question('Local port? [3000]: ', (answer) => {
|
|
10
|
-
const raw = answer.trim() || '3000';
|
|
11
|
-
const parsed = parseInt(raw, 10);
|
|
12
|
-
// String(parsed) !== raw catches "3000abc" → parseInt returns 3000 but string differs
|
|
13
|
-
if (!Number.isInteger(parsed) ||
|
|
14
|
-
parsed <= 0 ||
|
|
15
|
-
String(parsed) !== raw) {
|
|
16
|
-
console.error(`Invalid value "${raw}". Must be a positive integer. Try again.`);
|
|
17
|
-
ask();
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
resolve(parsed);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
ask();
|
|
25
|
-
});
|
|
26
|
-
}
|
|
4
|
+
import { readUglyAppConfig, writeUglyAppConfig, } from './uglyappConfig.js';
|
|
27
5
|
export async function configureProject(cwd) {
|
|
28
6
|
const configPath = path.join(cwd, '.uglyapp');
|
|
29
7
|
if (fs.existsSync(configPath)) {
|
|
30
8
|
const existing = readUglyAppConfig(cwd);
|
|
31
|
-
console.warn(`[uglyapp] .uglyapp already exists (projectId: ${existing?.projectId}
|
|
9
|
+
console.warn(`[uglyapp] .uglyapp already exists (projectId: ${existing?.projectId}). Remove it first to reconfigure.`);
|
|
32
10
|
return;
|
|
33
11
|
}
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
validateLocalPort(localPort); // warns on conflicts, does not throw
|
|
41
|
-
const projectId = nanoid(10);
|
|
42
|
-
writeUglyAppConfig(cwd, { projectId, localPort });
|
|
43
|
-
console.log(`\n[uglyapp] Created .uglyapp`);
|
|
44
|
-
console.log(` projectId: ${projectId}`);
|
|
45
|
-
console.log(` localPort: ${localPort}`);
|
|
46
|
-
console.log('Commit .uglyapp to share port assignments with your team.');
|
|
47
|
-
}
|
|
48
|
-
finally {
|
|
49
|
-
rl.close();
|
|
50
|
-
}
|
|
12
|
+
const projectId = nanoid(10);
|
|
13
|
+
writeUglyAppConfig(cwd, { projectId });
|
|
14
|
+
console.log(`\n[uglyapp] Created .uglyapp`);
|
|
15
|
+
console.log(` projectId: ${projectId}`);
|
|
16
|
+
console.log('Commit .uglyapp to share project identity with your team.');
|
|
17
|
+
console.log('Run with `PORT=<n> npx ugly-app dev` to bind a custom port.');
|
|
51
18
|
}
|
|
52
19
|
//# sourceMappingURL=configure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/cli/configure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/cli/configure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAE9C,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CACV,iDAAiD,QAAQ,EAAE,SAAS,oCAAoC,CACzG,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,kBAAkB,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;AAC7E,CAAC"}
|
package/dist/cli/dev.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAwCA,wBAAsB,MAAM,CAAC,IAAI,GAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAqC,GAAG,OAAO,CAAC,IAAI,CAAC,CAwLzH"}
|
package/dist/cli/dev.js
CHANGED
|
@@ -32,15 +32,10 @@ function findListenerPid(port) {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
import { runMigrations } from './migrate.js';
|
|
35
|
-
import {
|
|
35
|
+
import { getLocalPort } from '../shared/Defaults.js';
|
|
36
36
|
import { ensureInfra } from './ensureInfra.js';
|
|
37
37
|
import { runExportCollections } from './exportCollections.js';
|
|
38
|
-
import { readUglyAppConfig, validateLocalPort, } from './uglyappConfig.js';
|
|
39
38
|
export async function runDev(opts = { watch: false, verbose: false }) {
|
|
40
|
-
const config = readUglyAppConfig(process.cwd());
|
|
41
|
-
if (config !== null) {
|
|
42
|
-
validateLocalPort(config.localPort);
|
|
43
|
-
}
|
|
44
39
|
// ── Set universal dev env vars ─────────────────────────────────────────────
|
|
45
40
|
if (!process.env['NODE_ENV'])
|
|
46
41
|
process.env['NODE_ENV'] = 'development';
|
|
@@ -62,31 +57,20 @@ export async function runDev(opts = { watch: false, verbose: false }) {
|
|
|
62
57
|
}
|
|
63
58
|
// ── 1. Start infrastructure (sidecar tunnel) ─────────────────────────────
|
|
64
59
|
await ensureInfra();
|
|
65
|
-
const port =
|
|
60
|
+
const port = String(getLocalPort());
|
|
61
|
+
// Pin PORT in env so every spawned subprocess (tsx, tsc, scripts, child
|
|
62
|
+
// shells) sees the same resolved value as the server itself.
|
|
63
|
+
process.env['PORT'] = port;
|
|
66
64
|
// ── Check the port is free ────────────────────────────────────────────────
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
// and left an orphan Vite. In practice that silently killed unrelated
|
|
71
|
-
// processes — including ugly-studio subsystems that happened to bind near
|
|
72
|
-
// the same port — producing mystery `exit code=137` crashes with no hint
|
|
73
|
-
// that ugly-app was the trigger.
|
|
74
|
-
//
|
|
75
|
-
// Better: if the port is taken, print a clear error and exit. The user
|
|
76
|
-
// stops the offending process (or edits the localPort field in
|
|
77
|
-
// .uglyapp) and runs `ugly-app dev` again. No process on this machine
|
|
78
|
-
// gets signaled without human intent.
|
|
79
|
-
//
|
|
80
|
-
// The error spells "localPort" as a JSON field in `.uglyapp` rather
|
|
81
|
-
// than as a dotted path (`.uglyapp.localPort`) because coding-agent
|
|
82
|
-
// LLMs repeatedly misread that shape as a filename and tried to
|
|
83
|
-
// `write .uglyapp.localPort` instead of editing the JSON field.
|
|
65
|
+
// If the port is taken, print a clear error and exit. The user stops the
|
|
66
|
+
// offending process or re-runs with `PORT=<free>` set. No process gets
|
|
67
|
+
// signaled without human intent.
|
|
84
68
|
const existingPid = findListenerPid(port);
|
|
85
69
|
if (existingPid) {
|
|
86
70
|
console.error(`[ugly-app] Port ${port} is already in use by PID ${existingPid}.\n` +
|
|
87
71
|
`To fix, either:\n` +
|
|
88
72
|
` 1. Stop PID ${existingPid} (e.g. \`kill ${existingPid}\`) then re-run \`ugly-app dev\`.\n` +
|
|
89
|
-
` 2.
|
|
73
|
+
` 2. Re-run with a free port, e.g. \`PORT=5555 npx ugly-app dev\`.`);
|
|
90
74
|
process.exit(1);
|
|
91
75
|
}
|
|
92
76
|
// ── 2. Wait for data proxy ─────────────────────────────────────────────────
|
package/dist/cli/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,YAAY,MAAM,cAAc,CAAC;AACxC;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAAqB;IAC5C,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,QAAQ,CAClB,2BAA2B,IAAI,sBAAsB,EACrD,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAC3D,CAAC,IAAI,EAAE,CAAC;YACT,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAC;YAC5B,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;YAChD,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,IAAI,eAAe,EAAE;YACpD,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,QAAQ,IAAI,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkJ7E"}
|
package/dist/cli/doctor.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import fs from 'fs';
|
|
12
12
|
import os from 'os';
|
|
13
13
|
import path from 'path';
|
|
14
|
+
import { getLocalPort } from '../shared/Defaults.js';
|
|
14
15
|
import { stopDevTunnel } from './devTunnel.js';
|
|
15
16
|
import { readUglyAppConfig } from './uglyappConfig.js';
|
|
16
17
|
import { probeAuth } from './probeAuth.js';
|
|
@@ -35,7 +36,7 @@ export async function runDoctor(options = {}) {
|
|
|
35
36
|
lines.push({
|
|
36
37
|
status: 'ok',
|
|
37
38
|
label: '.uglyapp',
|
|
38
|
-
detail: `projectId=${config.projectId}
|
|
39
|
+
detail: `projectId=${config.projectId} port=${getLocalPort()}${config.domain ? ` domain=${config.domain}` : ''}`,
|
|
39
40
|
});
|
|
40
41
|
}
|
|
41
42
|
// 2. Auth tokens — global user identity + per-project cached tokens.
|
package/dist/cli/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAiB,MAAM,gBAAgB,CAAC;AAe1D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA4B,EAAE;IAC5D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;IACjD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,cAAc;IACd,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC;YACT,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,iDAAiD;SAC1D,CAAC,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC;YACT,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,aAAa,MAAM,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureInfra.d.ts","sourceRoot":"","sources":["../../src/cli/ensureInfra.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ensureInfra.d.ts","sourceRoot":"","sources":["../../src/cli/ensureInfra.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAiGjD"}
|
package/dist/cli/ensureInfra.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getLocalPort } from '../shared/Defaults.js';
|
|
1
2
|
import { getUglyBotUrl } from '../shared/uglyBotUrl.js';
|
|
2
3
|
import { readAuthToken, readLocalToken } from './authStore.js';
|
|
3
4
|
import { readUglyAppConfig } from './uglyappConfig.js';
|
|
@@ -15,8 +16,6 @@ export async function ensureInfra() {
|
|
|
15
16
|
const config = readUglyAppConfig(process.cwd());
|
|
16
17
|
// Inject basic config-derived env vars
|
|
17
18
|
if (config) {
|
|
18
|
-
if (!process.env['PORT'])
|
|
19
|
-
process.env['PORT'] = String(config.localPort);
|
|
20
19
|
if (!process.env['NATS_PREFIX'])
|
|
21
20
|
process.env['NATS_PREFIX'] = config.projectId;
|
|
22
21
|
if (!process.env['STORAGE_KEY_PREFIX'])
|
|
@@ -87,8 +86,9 @@ export async function ensureInfra() {
|
|
|
87
86
|
// Studio sessions set this so each session's proxy subdomain is unique;
|
|
88
87
|
// unset (regular `npm run dev`) keeps the legacy `proxy-{username}-{projectId}` URL.
|
|
89
88
|
const sessionId = process.env['UGLY_STUDIO_SESSION_ID'];
|
|
89
|
+
const vitePort = getLocalPort();
|
|
90
90
|
try {
|
|
91
|
-
const ports = await startDevTunnel({ projectId: config.projectId, token: auth.token, vitePort
|
|
91
|
+
const ports = await startDevTunnel({ projectId: config.projectId, token: auth.token, vitePort, sessionId });
|
|
92
92
|
process.env['NATS_URL'] = `nats://localhost:${ports.nats}`;
|
|
93
93
|
await requestDataProxyToken();
|
|
94
94
|
}
|
|
@@ -99,7 +99,7 @@ export async function ensureInfra() {
|
|
|
99
99
|
console.log('[ugly-app] Auth expired, re-authenticating...');
|
|
100
100
|
const { runUglyBotLogin } = await import('./uglyBotLogin.js');
|
|
101
101
|
const freshAuth = await runUglyBotLogin(getUglyBotUrl());
|
|
102
|
-
const ports = await startDevTunnel({ projectId: config.projectId, token: freshAuth.token, vitePort
|
|
102
|
+
const ports = await startDevTunnel({ projectId: config.projectId, token: freshAuth.token, vitePort, sessionId });
|
|
103
103
|
process.env['NATS_URL'] = `nats://localhost:${ports.nats}`;
|
|
104
104
|
process.env['MINIO_ENDPOINT'] = `http://localhost:${ports.s3}`;
|
|
105
105
|
await requestDataProxyToken();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureInfra.js","sourceRoot":"","sources":["../../src/cli/ensureInfra.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,SAAS,OAAO;IACd,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,GAAG,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEhD,uCAAuC;IACvC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"ensureInfra.js","sourceRoot":"","sources":["../../src/cli/ensureInfra.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,41 @@ export interface FeedbackResolveOptions {
|
|
|
3
3
|
status: 'resolved' | 'declined';
|
|
4
4
|
resolution: string;
|
|
5
5
|
}
|
|
6
|
+
export interface FeedbackResolveItem {
|
|
7
|
+
id: string;
|
|
8
|
+
status: 'resolved' | 'declined';
|
|
9
|
+
resolution: string;
|
|
10
|
+
}
|
|
6
11
|
export declare function resolveFeedback(opts: FeedbackResolveOptions): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Resolve many feedback items over a single auth context. Process each
|
|
14
|
+
* item even if earlier ones fail — partial failure is surfaced via the
|
|
15
|
+
* returned `failures` array AND a non-zero exit at the CLI layer, never
|
|
16
|
+
* silently swallowed (the bot-swarm cycle invariant is to fail loud, not
|
|
17
|
+
* leave items at `status: new` for a duplicate-process next cycle).
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveFeedbackBatch(items: FeedbackResolveItem[], onItem?: (item: FeedbackResolveItem, result: {
|
|
20
|
+
ok: true;
|
|
21
|
+
} | {
|
|
22
|
+
ok: false;
|
|
23
|
+
error: string;
|
|
24
|
+
}) => void): Promise<{
|
|
25
|
+
successes: number;
|
|
26
|
+
failures: {
|
|
27
|
+
id: string;
|
|
28
|
+
error: string;
|
|
29
|
+
}[];
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Parse a JSON batch payload — array of `{ id, status, resolution }`.
|
|
33
|
+
* Validates each entry; throws with a 1-line summary if any are
|
|
34
|
+
* malformed so the user sees the bad input immediately rather than
|
|
35
|
+
* the server rejecting opaque IDs.
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseBatchPayload(raw: string): FeedbackResolveItem[];
|
|
38
|
+
/**
|
|
39
|
+
* Read the entire process stdin to a string. Used to support
|
|
40
|
+
* `... | ugly-app feedback:resolve --batch -`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function readStdinToString(): Promise<string>;
|
|
7
43
|
//# sourceMappingURL=feedbackResolve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedbackResolve.d.ts","sourceRoot":"","sources":["../../src/cli/feedbackResolve.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"feedbackResolve.d.ts","sourceRoot":"","sources":["../../src/cli/feedbackResolve.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAiDD,wBAAsB,eAAe,CACnC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,EAAE,EAC5B,MAAM,CAAC,EAAE,CACP,IAAI,EAAE,mBAAmB,EACzB,MAAM,EAAE;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAChD,IAAI,GACR,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CAiB3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,EAAE,CA8BpE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CASzD"}
|
|
@@ -12,27 +12,111 @@ function readAuth() {
|
|
|
12
12
|
function getAppApiUrl() {
|
|
13
13
|
return getUglyBotUrl();
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
const appApiUrl = getAppApiUrl();
|
|
17
|
-
const auth = readAuth();
|
|
15
|
+
async function resolveOne(appApiUrl, token, item) {
|
|
18
16
|
const res = await fetch(`${appApiUrl}/request`, {
|
|
19
17
|
method: 'POST',
|
|
20
18
|
headers: {
|
|
21
|
-
'Authorization': `Bearer ${
|
|
19
|
+
'Authorization': `Bearer ${token}`,
|
|
22
20
|
'Content-Type': 'application/json',
|
|
23
21
|
},
|
|
24
22
|
body: JSON.stringify({
|
|
25
23
|
function: 'feedbackReportResolve',
|
|
26
24
|
input: {
|
|
27
|
-
feedbackReportId:
|
|
28
|
-
status:
|
|
29
|
-
resolution:
|
|
25
|
+
feedbackReportId: item.id,
|
|
26
|
+
status: item.status,
|
|
27
|
+
resolution: item.resolution,
|
|
30
28
|
},
|
|
31
29
|
}),
|
|
32
30
|
});
|
|
33
31
|
if (!res.ok) {
|
|
34
32
|
const body = await res.text().catch(() => '');
|
|
35
|
-
throw new Error(
|
|
33
|
+
throw new Error(`${res.status} ${body}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function resolveFeedback(opts) {
|
|
37
|
+
const appApiUrl = getAppApiUrl();
|
|
38
|
+
const auth = readAuth();
|
|
39
|
+
try {
|
|
40
|
+
await resolveOne(appApiUrl, auth.token, {
|
|
41
|
+
id: opts.feedbackId,
|
|
42
|
+
status: opts.status,
|
|
43
|
+
resolution: opts.resolution,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
throw new Error(`Failed to resolve feedback: ${e.message}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Resolve many feedback items over a single auth context. Process each
|
|
52
|
+
* item even if earlier ones fail — partial failure is surfaced via the
|
|
53
|
+
* returned `failures` array AND a non-zero exit at the CLI layer, never
|
|
54
|
+
* silently swallowed (the bot-swarm cycle invariant is to fail loud, not
|
|
55
|
+
* leave items at `status: new` for a duplicate-process next cycle).
|
|
56
|
+
*/
|
|
57
|
+
export async function resolveFeedbackBatch(items, onItem) {
|
|
58
|
+
const appApiUrl = getAppApiUrl();
|
|
59
|
+
const auth = readAuth();
|
|
60
|
+
const failures = [];
|
|
61
|
+
let successes = 0;
|
|
62
|
+
for (const item of items) {
|
|
63
|
+
try {
|
|
64
|
+
await resolveOne(appApiUrl, auth.token, item);
|
|
65
|
+
successes++;
|
|
66
|
+
onItem?.(item, { ok: true });
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
const error = e.message;
|
|
70
|
+
failures.push({ id: item.id, error });
|
|
71
|
+
onItem?.(item, { ok: false, error });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return { successes, failures };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Parse a JSON batch payload — array of `{ id, status, resolution }`.
|
|
78
|
+
* Validates each entry; throws with a 1-line summary if any are
|
|
79
|
+
* malformed so the user sees the bad input immediately rather than
|
|
80
|
+
* the server rejecting opaque IDs.
|
|
81
|
+
*/
|
|
82
|
+
export function parseBatchPayload(raw) {
|
|
83
|
+
let parsed;
|
|
84
|
+
try {
|
|
85
|
+
parsed = JSON.parse(raw);
|
|
36
86
|
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
throw new Error(`--batch payload is not valid JSON: ${e.message}`);
|
|
89
|
+
}
|
|
90
|
+
if (!Array.isArray(parsed)) {
|
|
91
|
+
throw new Error('--batch payload must be a JSON array');
|
|
92
|
+
}
|
|
93
|
+
return parsed.map((entry, i) => {
|
|
94
|
+
if (!entry ||
|
|
95
|
+
typeof entry !== 'object' ||
|
|
96
|
+
typeof entry.id !== 'string' ||
|
|
97
|
+
typeof entry.status !== 'string' ||
|
|
98
|
+
typeof entry.resolution !== 'string') {
|
|
99
|
+
throw new Error(`--batch entry ${i} missing required fields { id, status, resolution }`);
|
|
100
|
+
}
|
|
101
|
+
const e = entry;
|
|
102
|
+
if (e.status !== 'resolved' && e.status !== 'declined') {
|
|
103
|
+
throw new Error(`--batch entry ${i} (id=${e.id}) has invalid status "${e.status}" (must be "resolved" or "declined")`);
|
|
104
|
+
}
|
|
105
|
+
return { id: e.id, status: e.status, resolution: e.resolution };
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Read the entire process stdin to a string. Used to support
|
|
110
|
+
* `... | ugly-app feedback:resolve --batch -`.
|
|
111
|
+
*/
|
|
112
|
+
export async function readStdinToString() {
|
|
113
|
+
return new Promise((resolve, reject) => {
|
|
114
|
+
let buf = '';
|
|
115
|
+
process.stdin.setEncoding('utf-8');
|
|
116
|
+
process.stdin.on('data', (chunk) => { buf += chunk; });
|
|
117
|
+
process.stdin.on('end', () => resolve(buf));
|
|
118
|
+
process.stdin.on('error', reject);
|
|
119
|
+
process.stdin.resume();
|
|
120
|
+
});
|
|
37
121
|
}
|
|
38
122
|
//# sourceMappingURL=feedbackResolve.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedbackResolve.js","sourceRoot":"","sources":["../../src/cli/feedbackResolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"feedbackResolve.js","sourceRoot":"","sources":["../../src/cli/feedbackResolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedbackSubmit.d.ts","sourceRoot":"","sources":["../../src/cli/feedbackSubmit.ts"],"names":[],"mappings":"AAiBA,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,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"feedbackSubmit.d.ts","sourceRoot":"","sources":["../../src/cli/feedbackSubmit.ts"],"names":[],"mappings":"AAiBA,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,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAqEzB"}
|
|
@@ -13,13 +13,9 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import fs from 'node:fs';
|
|
15
15
|
import path from 'node:path';
|
|
16
|
-
import {
|
|
16
|
+
import { getLocalPort } from '../shared/Defaults.js';
|
|
17
17
|
function getLocalServerUrl() {
|
|
18
|
-
|
|
19
|
-
if (!config) {
|
|
20
|
-
throw new Error('Could not read .uglyapp — run `ugly-app feedback:submit` from inside a child app directory.');
|
|
21
|
-
}
|
|
22
|
-
return `http://localhost:${config.localPort}`;
|
|
18
|
+
return `http://localhost:${getLocalPort()}`;
|
|
23
19
|
}
|
|
24
20
|
export async function submitFeedback(opts) {
|
|
25
21
|
if (!opts.token) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedbackSubmit.js","sourceRoot":"","sources":["../../src/cli/feedbackSubmit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"feedbackSubmit.js","sourceRoot":"","sources":["../../src/cli/feedbackSubmit.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -319,13 +319,35 @@ program
|
|
|
319
319
|
});
|
|
320
320
|
program
|
|
321
321
|
.command('feedback:resolve')
|
|
322
|
-
.description('Resolve or decline
|
|
323
|
-
.
|
|
324
|
-
.
|
|
325
|
-
.
|
|
322
|
+
.description('Resolve or decline feedback. Single item: --id/--status/--resolution. Batch: --batch <file.json> (or --batch - for stdin) with an array of { id, status, resolution }.')
|
|
323
|
+
.option('--id <feedbackId>', 'Feedback report ID (single-item mode)')
|
|
324
|
+
.option('--status <status>', 'New status: resolved or declined (single-item mode)')
|
|
325
|
+
.option('--resolution <text>', 'Resolution message (single-item mode)')
|
|
326
|
+
.option('--batch <path>', 'Path to a JSON file with an array of { id, status, resolution }, or `-` to read from stdin')
|
|
326
327
|
.action(async (opts) => {
|
|
327
328
|
try {
|
|
328
|
-
const { resolveFeedback } = await import('./feedbackResolve.js');
|
|
329
|
+
const { parseBatchPayload, readStdinToString, resolveFeedback, resolveFeedbackBatch, } = await import('./feedbackResolve.js');
|
|
330
|
+
if (opts.batch) {
|
|
331
|
+
const raw = opts.batch === '-'
|
|
332
|
+
? await readStdinToString()
|
|
333
|
+
: await import('node:fs').then((fs) => fs.readFileSync(opts.batch, 'utf-8'));
|
|
334
|
+
const items = parseBatchPayload(raw);
|
|
335
|
+
const { successes, failures } = await resolveFeedbackBatch(items, (item, result) => {
|
|
336
|
+
if (result.ok) {
|
|
337
|
+
console.log(`✓ ${item.id} ${item.status}`);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
console.error(`✗ ${item.id} failed: ${result.error}`);
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
console.log(`feedback:resolve --batch: ${successes}/${items.length} ok, ${failures.length} failed`);
|
|
344
|
+
if (failures.length > 0)
|
|
345
|
+
process.exit(1);
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
if (!opts.id || !opts.status || !opts.resolution) {
|
|
349
|
+
throw new Error('feedback:resolve requires either --batch <path> or all of --id, --status, --resolution');
|
|
350
|
+
}
|
|
329
351
|
await resolveFeedback({
|
|
330
352
|
feedbackId: opts.id,
|
|
331
353
|
status: opts.status,
|