@polishd/next 0.2.3-dev.3 → 0.2.3-dev.4
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/CHANGELOG.md +39 -23
- package/README.md +5 -7
- package/bin/init.mjs +1 -4
- package/dist/ai/actions.d.ts +7 -1
- package/dist/ai/actions.d.ts.map +1 -1
- package/dist/ai/actions.js +10 -0
- package/dist/ai/actions.js.map +1 -1
- package/dist/ai/fix.d.ts +14 -0
- package/dist/ai/fix.d.ts.map +1 -0
- package/dist/ai/fix.js +254 -0
- package/dist/ai/fix.js.map +1 -0
- package/dist/ai/issues.d.ts +12 -0
- package/dist/ai/issues.d.ts.map +1 -1
- package/dist/ai/issues.js +16 -2
- package/dist/ai/issues.js.map +1 -1
- package/dist/ai/types.d.ts +49 -0
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +4 -2
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard/issue-list.d.ts +11 -0
- package/dist/dashboard/issue-list.d.ts.map +1 -0
- package/dist/dashboard/issue-list.js +159 -0
- package/dist/dashboard/issue-list.js.map +1 -0
- package/dist/dashboard/issues.d.ts +31 -2
- package/dist/dashboard/issues.d.ts.map +1 -1
- package/dist/dashboard/issues.js +4 -71
- package/dist/dashboard/issues.js.map +1 -1
- package/dist/dashboard/markdown-parse.d.ts +87 -0
- package/dist/dashboard/markdown-parse.d.ts.map +1 -0
- package/dist/dashboard/markdown-parse.js +244 -0
- package/dist/dashboard/markdown-parse.js.map +1 -0
- package/dist/dashboard/markdown.d.ts +5 -0
- package/dist/dashboard/markdown.d.ts.map +1 -0
- package/dist/dashboard/markdown.js +65 -0
- package/dist/dashboard/markdown.js.map +1 -0
- package/dist/dashboard/snapshot-actions.d.ts +5 -15
- package/dist/dashboard/snapshot-actions.d.ts.map +1 -1
- package/dist/dashboard/snapshot-actions.js +24 -64
- package/dist/dashboard/snapshot-actions.js.map +1 -1
- package/dist/dashboard/snapshots.d.ts.map +1 -1
- package/dist/dashboard/snapshots.js +8 -58
- package/dist/dashboard/snapshots.js.map +1 -1
- package/dist/dashboard.css +70 -18
- package/dist/server/snapshots.d.ts +6 -37
- package/dist/server/snapshots.d.ts.map +1 -1
- package/dist/server/snapshots.js +144 -271
- package/dist/server/snapshots.js.map +1 -1
- package/docs/SETUP.md +0 -10
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,29 +2,45 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
-
###
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
5
|
+
### Issues open in a drawer, rendered as the markdown they are
|
|
6
|
+
|
|
7
|
+
An issue body on the Issues tab used to be a raw `<pre>` dump behind a
|
|
8
|
+
"Show issue body" toggle — real GitHub-flavored markdown, displayed as if it
|
|
9
|
+
weren't. Clicking a row now opens a **right-side drawer** (the same pattern as
|
|
10
|
+
the sampled user journeys) with the full issue: title, state, the metadata
|
|
11
|
+
GitHub reports, the analytics evidence polishd kept, and the body **rendered
|
|
12
|
+
as markdown** — headings, code, linked file lists, tables, task lists,
|
|
13
|
+
screenshots.
|
|
14
|
+
|
|
15
|
+
- The renderer is written in-house (`src/dashboard/markdown-parse.ts` +
|
|
16
|
+
`markdown.tsx`): the package's zero-runtime-dependency rule rules out
|
|
17
|
+
`react-markdown`, and the GFM subset that actually appears in issues is
|
|
18
|
+
small enough to own. Single newlines are hard breaks, the way GitHub
|
|
19
|
+
renders issue comments, and anything unrecognized degrades to plain
|
|
20
|
+
paragraph text rather than ever crashing. The grammar is pinned down by
|
|
21
|
+
its own test file.
|
|
22
|
+
- Rows are still links to the tracker — the title goes to GitHub, the row
|
|
23
|
+
goes to the drawer.
|
|
24
|
+
|
|
25
|
+
### The drawer can suggest the fix, not just show the bug
|
|
26
|
+
|
|
27
|
+
With the GitHub codebase connected, every filed issue carries a **"Suggest a
|
|
28
|
+
fix"** button. One click asks the configured model to first **classify the
|
|
29
|
+
bug — an interaction issue (something users do fails) or a design issue
|
|
30
|
+
(something users see is wrong)** — and then design a fix on the published
|
|
31
|
+
practice for that class: Nielsen Norman's usability heuristics and the
|
|
32
|
+
WAI-ARIA Authoring Practices for interaction bugs; WCAG 2.2 contrast rules,
|
|
33
|
+
spacing rhythm, and layout-stability guidance for design bugs.
|
|
34
|
+
|
|
35
|
+
- The suggestion is grounded in the repository's real source: the pipeline
|
|
36
|
+
re-reads the files the issue body cites, code-searches the analytics
|
|
37
|
+
evidence, and answers with an **implementation path** — ordered,
|
|
38
|
+
file-by-file edits, each path linking to the file on GitHub — plus
|
|
39
|
+
"grounded in" chips naming the guidelines it leaned on, so the advice can
|
|
40
|
+
be judged by its sources.
|
|
41
|
+
- Suggestions are cached per issue in the store and load with the tab;
|
|
42
|
+
regenerating is one click. Nothing is offered without a model key, and an
|
|
43
|
+
issue polishd didn't file is refused — there's no evidence to ground.
|
|
28
44
|
|
|
29
45
|
### The dashboard streams instead of loading all at once
|
|
30
46
|
|
package/README.md
CHANGED
|
@@ -466,13 +466,11 @@ the whole setup: the `BLOB_READ_WRITE_TOKEN` it injects switches image storage
|
|
|
466
466
|
from disk to Blob, and the browser comes from `@sparticuz/chromium` (a
|
|
467
467
|
Chromium built for serverless sandboxes, installed automatically as an
|
|
468
468
|
optional dependency). The snapshot index rides in the same database the rest
|
|
469
|
-
of Polishd already requires in production, so no other wiring changes.
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
filesystem nor a Blob token, the button explains what's missing rather than
|
|
475
|
-
failing silently.
|
|
469
|
+
of Polishd already requires in production, so no other wiring changes. If a
|
|
470
|
+
capture of many routes brushes against your function's time limit, raise it
|
|
471
|
+
with `export const maxDuration = 300` in the dashboard's `page.tsx`. On hosts
|
|
472
|
+
with neither a writable filesystem nor a Blob token, the button explains what's
|
|
473
|
+
missing rather than failing silently.
|
|
476
474
|
|
|
477
475
|
## Component-level tracking
|
|
478
476
|
|
package/bin/init.mjs
CHANGED
|
@@ -140,10 +140,7 @@ export function runInit(argv, cwd) {
|
|
|
140
140
|
`import { createPolishdPage } from "@polishd/next/dashboard";\n\n` +
|
|
141
141
|
`// Next requires these to be declared inline in the page module.\n` +
|
|
142
142
|
`export const runtime = "nodejs";\n` +
|
|
143
|
-
`export const dynamic = "force-dynamic";\n` +
|
|
144
|
-
`// Server actions inherit this page's time limit; 300s gives\n` +
|
|
145
|
-
`// site-snapshot capture headroom on hosts with strict function limits.\n` +
|
|
146
|
-
`export const maxDuration = 300;\n\n` +
|
|
143
|
+
`export const dynamic = "force-dynamic";\n\n` +
|
|
147
144
|
`// In production the dashboard refuses to render until you either set\n` +
|
|
148
145
|
`// POLISHD_DASHBOARD_TOKEN, pass your own \`authenticate\`, or opt out\n` +
|
|
149
146
|
`// explicitly with POLISHD_DASHBOARD_PUBLIC=true. It can change your AI\n` +
|
package/dist/ai/actions.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ListModelsInput, type SaveAISettingsInput } from "./settings";
|
|
2
|
-
import type { PolishdAISettingsPublic, PolishdLossItem, CreateIssueResult, GenerateDesignReviewResult, GenerateProfileResult, GenerateSummaryResult, IgnoreLossResult, ListModelsResult, UnignoreLossResult, VerifyGithubResult } from "./types";
|
|
2
|
+
import type { PolishdAISettingsPublic, PolishdLossItem, CreateIssueResult, GenerateDesignReviewResult, GenerateProfileResult, GenerateSummaryResult, IgnoreLossResult, ListModelsResult, SuggestFixResult, UnignoreLossResult, VerifyGithubResult } from "./types";
|
|
3
3
|
/** Generate or refresh the narrative. `force` re-asks the model even if data is unchanged. */
|
|
4
4
|
export declare function generateSummaryAction(force?: boolean): Promise<GenerateSummaryResult>;
|
|
5
5
|
/**
|
|
@@ -31,6 +31,12 @@ export declare function verifyGithubAction(): Promise<VerifyGithubResult>;
|
|
|
31
31
|
* disproved report returns `not-a-bug` with the reasoning instead of filing.
|
|
32
32
|
*/
|
|
33
33
|
export declare function createIssueFromLossAction(loss: Pick<PolishdLossItem, "issue" | "evidence" | "location">): Promise<CreateIssueResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Classify one filed issue (interaction vs design) and propose a fix grounded
|
|
36
|
+
* in the repository's source and in published practice, with the file-by-file
|
|
37
|
+
* implementation path. Cached per issue; `force` regenerates.
|
|
38
|
+
*/
|
|
39
|
+
export declare function suggestIssueFixAction(issueNumber: number, force?: boolean): Promise<SuggestFixResult>;
|
|
34
40
|
/**
|
|
35
41
|
* The other verdict on a loss: dismiss it, with an optional reason. The loss
|
|
36
42
|
* leaves every summary from here on, and the dismissal — reason included — is
|
package/dist/ai/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/ai/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/ai/actions.ts"],"names":[],"mappings":"AAuBA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,8FAA8F;AAC9F,wBAAsB,qBAAqB,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAGzF;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,UAAQ,GACZ,OAAO,CAAC,0BAA0B,CAAC,CAGrC;AAED,mFAAmF;AACnF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CAGlC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAI5E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAGxF;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAGtE;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC,GAC7D,OAAO,CAAC,iBAAiB,CAAC,CAG5B;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,KAAK,UAAQ,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAG3B;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,UAAU,CAAC,EACjD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,CAM3B;AAED,kEAAkE;AAClE,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAKtF"}
|
package/dist/ai/actions.js
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { requirePolishdAuth } from "./guard";
|
|
16
16
|
import { generateDesignReview } from "./design";
|
|
17
|
+
import { suggestIssueFix } from "./fix";
|
|
17
18
|
import { verifyGithubConnection } from "./github";
|
|
18
19
|
import { ignoreLoss, unignoreLoss } from "./ignored";
|
|
19
20
|
import { createIssueFromLoss } from "./issues";
|
|
@@ -74,6 +75,15 @@ export async function createIssueFromLossAction(loss) {
|
|
|
74
75
|
await requirePolishdAuth();
|
|
75
76
|
return createIssueFromLoss(loss);
|
|
76
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Classify one filed issue (interaction vs design) and propose a fix grounded
|
|
80
|
+
* in the repository's source and in published practice, with the file-by-file
|
|
81
|
+
* implementation path. Cached per issue; `force` regenerates.
|
|
82
|
+
*/
|
|
83
|
+
export async function suggestIssueFixAction(issueNumber, force = false) {
|
|
84
|
+
await requirePolishdAuth();
|
|
85
|
+
return suggestIssueFix(issueNumber, force);
|
|
86
|
+
}
|
|
77
87
|
/**
|
|
78
88
|
* The other verdict on a loss: dismiss it, with an optional reason. The loss
|
|
79
89
|
* leaves every summary from here on, and the dismissal — reason included — is
|
package/dist/ai/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/ai/actions.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,qBAAqB,EACrB,cAAc,GAGf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/ai/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/fix.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PolishdFixSuggestion, SuggestFixResult } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Every cached suggestion, keyed by issue number — what the Issues tab loads
|
|
4
|
+
* up front so an already-answered issue opens with its fix in place.
|
|
5
|
+
*/
|
|
6
|
+
export declare function listFixSuggestions(): Promise<Record<number, PolishdFixSuggestion>>;
|
|
7
|
+
/**
|
|
8
|
+
* Propose (or re-propose, with `force`) a fix for one filed issue. Refuses
|
|
9
|
+
* cleanly when nothing is connected, no model key is set, or the number isn't
|
|
10
|
+
* an issue polishd filed; a model hiccup comes back as `provider-error`, and
|
|
11
|
+
* nothing is cached on failure.
|
|
12
|
+
*/
|
|
13
|
+
export declare function suggestIssueFix(issueNumber: number, force?: boolean): Promise<SuggestFixResult>;
|
|
14
|
+
//# sourceMappingURL=fix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/ai/fix.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAEV,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAwBjB;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAKxF;AAiHD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,KAAK,UAAQ,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAgG3B"}
|
package/dist/ai/fix.js
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polishd — filed issue → suggested fix (server only).
|
|
3
|
+
*
|
|
4
|
+
* The Issues tab shows what was reported; this module answers the next
|
|
5
|
+
* question: how would you actually fix it? Only meaningful when the GitHub
|
|
6
|
+
* codebase is connected — the whole point is that the suggestion is grounded
|
|
7
|
+
* in the repository's real source, not in the issue text alone:
|
|
8
|
+
*
|
|
9
|
+
* 1. Recover the analytics evidence behind the issue from the filed log —
|
|
10
|
+
* an issue polishd didn't file is refused, there's no evidence to ground.
|
|
11
|
+
* 2. Pull source: files the issue body already cites (the ones the original
|
|
12
|
+
* verification read), then code-search hits for the evidence.
|
|
13
|
+
* 3. Ask the model to first CLASSIFY the bug — an interaction issue
|
|
14
|
+
* (something users do fails) or a design issue (something users see is
|
|
15
|
+
* wrong) — and then design the fix on the published practice for that
|
|
16
|
+
* class: Nielsen Norman's usability heuristics and the WAI-ARIA
|
|
17
|
+
* Authoring Practices for interaction, WCAG 2.2 and spacing/type-scale
|
|
18
|
+
* rhythm for design. The reply names the guidelines it leaned on, so the
|
|
19
|
+
* owner can judge the advice by its sources.
|
|
20
|
+
* 4. The answer is an implementation path — ordered, file-by-file edits —
|
|
21
|
+
* not just prose, and it's cached per issue number: the issue and the
|
|
22
|
+
* source rarely change under it, and a regenerate is one click away.
|
|
23
|
+
*/
|
|
24
|
+
import { getMeta, setMeta } from "../server/store";
|
|
25
|
+
import { isGithubConnected, readGithubFile, readGithubIssue, searchGithubCode, } from "./github";
|
|
26
|
+
import { evidenceSearchTerms, findFiledIssue } from "./issues";
|
|
27
|
+
import { loadProjectProfile } from "./profile";
|
|
28
|
+
import { callModel } from "./providers";
|
|
29
|
+
import { resolveSettings } from "./settings";
|
|
30
|
+
const FIX_LOG_KEY = "issue_fix_suggestions";
|
|
31
|
+
const MAX_FILES = 4;
|
|
32
|
+
const MAX_CHARS_PER_FILE = 8_000;
|
|
33
|
+
const MAX_BODY_CHARS = 6_000;
|
|
34
|
+
/** The reply carries prose + steps, not one paragraph — give it headroom. */
|
|
35
|
+
const MAX_OUTPUT_TOKENS = 4_096;
|
|
36
|
+
async function loadFixLog() {
|
|
37
|
+
const raw = await getMeta(FIX_LOG_KEY);
|
|
38
|
+
if (!raw)
|
|
39
|
+
return {};
|
|
40
|
+
try {
|
|
41
|
+
return JSON.parse(raw);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return {};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Every cached suggestion, keyed by issue number — what the Issues tab loads
|
|
49
|
+
* up front so an already-answered issue opens with its fix in place.
|
|
50
|
+
*/
|
|
51
|
+
export async function listFixSuggestions() {
|
|
52
|
+
const log = await loadFixLog();
|
|
53
|
+
const out = {};
|
|
54
|
+
for (const s of Object.values(log))
|
|
55
|
+
out[s.issueNumber] = s;
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
// ── The prompt ───────────────────────────────────────────────────────────────
|
|
59
|
+
const FIX_PROMPT = "You are a senior product engineer proposing a concrete fix for a bug that " +
|
|
60
|
+
"a product-analytics tool filed from real user-behavior data. You receive " +
|
|
61
|
+
"the GitHub issue (title and body), the analytics identifier cited as " +
|
|
62
|
+
"evidence, and source files from the site's repository.\n\n" +
|
|
63
|
+
"First classify the bug, then design the fix on the widely adopted practice " +
|
|
64
|
+
"for that class:\n" +
|
|
65
|
+
"- interaction: something users DO fails or frustrates — rage/dead clicks, " +
|
|
66
|
+
"broken or missing handlers, unresponsive or inaccessible controls, " +
|
|
67
|
+
"confusing flows, runtime errors. Ground the fix in Nielsen Norman's " +
|
|
68
|
+
"usability heuristics (visibility of system status, error prevention and " +
|
|
69
|
+
"recovery), the WAI-ARIA Authoring Practices for correct interactive " +
|
|
70
|
+
"semantics and keyboard support, and touch-target guidance (WCAG 2.5.8 / " +
|
|
71
|
+
"the 44px platform minimums).\n" +
|
|
72
|
+
"- design: something users SEE is wrong — contrast, visual hierarchy, " +
|
|
73
|
+
"spacing, typography, layout shift. Ground the fix in WCAG 2.2 (1.4.3 text " +
|
|
74
|
+
"contrast, 1.4.11 non-text contrast), a consistent spacing rhythm and type " +
|
|
75
|
+
"scale, and the web-vitals guidance on layout stability (CLS).\n\n" +
|
|
76
|
+
"Respond with ONLY a JSON object (no markdown fences, no preamble):\n" +
|
|
77
|
+
'{ "bugType": "interaction" | "design", "classification": string, ' +
|
|
78
|
+
'"approach": string, "steps": [{ "path": string, "change": string }], ' +
|
|
79
|
+
'"practices": string[] }\n\n' +
|
|
80
|
+
"bugType: which class this bug falls into.\n" +
|
|
81
|
+
"classification: one sentence on why it's that class.\n" +
|
|
82
|
+
"approach: the fix in 2-5 sentences, written for the developer who will " +
|
|
83
|
+
"implement it, citing the code it changes. Inline markdown (backticked " +
|
|
84
|
+
"identifiers) is welcome; no headings.\n" +
|
|
85
|
+
"steps: the implementation path, in order. Each path MUST be a repository " +
|
|
86
|
+
"file path taken from the source files provided; each change describes the " +
|
|
87
|
+
"exact edit in 1-3 sentences. 1-5 steps.\n" +
|
|
88
|
+
"practices: 1-3 short names of the published guidelines the fix leans on, " +
|
|
89
|
+
'e.g. "WCAG 2.2 §1.4.3 contrast", "ARIA APG disclosure pattern", ' +
|
|
90
|
+
'"NN/g error prevention". Only ones that genuinely informed the fix.';
|
|
91
|
+
// ── Source gathering ─────────────────────────────────────────────────────────
|
|
92
|
+
/** Repo paths the issue body itself cites — `[`src/x.tsx`](…)` and the like. */
|
|
93
|
+
function citedPaths(body) {
|
|
94
|
+
const out = [];
|
|
95
|
+
for (const m of body.matchAll(/`([\w@./-]+\.[a-z]{2,4})`/gi)) {
|
|
96
|
+
if (m[1].includes("/") && !out.includes(m[1]))
|
|
97
|
+
out.push(m[1]);
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
/** The issue's own citations first, then code-search hits for the evidence. */
|
|
102
|
+
async function collectSource(evidence, body) {
|
|
103
|
+
const paths = citedPaths(body);
|
|
104
|
+
for (const p of await searchGithubCode(evidenceSearchTerms(evidence), MAX_FILES)) {
|
|
105
|
+
if (!paths.includes(p))
|
|
106
|
+
paths.push(p);
|
|
107
|
+
}
|
|
108
|
+
const out = [];
|
|
109
|
+
for (const path of paths.slice(0, MAX_FILES)) {
|
|
110
|
+
const content = await readGithubFile(path);
|
|
111
|
+
if (content)
|
|
112
|
+
out.push({ path, content: content.slice(0, MAX_CHARS_PER_FILE) });
|
|
113
|
+
}
|
|
114
|
+
return out;
|
|
115
|
+
}
|
|
116
|
+
// ── Parsing ──────────────────────────────────────────────────────────────────
|
|
117
|
+
/** Tolerant JSON extraction, same approach as the investigation parser. */
|
|
118
|
+
function parseSuggestion(text) {
|
|
119
|
+
let t = text.trim();
|
|
120
|
+
const fence = t.match(/```(?:json)?\s*([\s\S]*?)```/);
|
|
121
|
+
if (fence)
|
|
122
|
+
t = fence[1].trim();
|
|
123
|
+
const start = t.indexOf("{");
|
|
124
|
+
const end = t.lastIndexOf("}");
|
|
125
|
+
if (start < 0 || end <= start)
|
|
126
|
+
return null;
|
|
127
|
+
try {
|
|
128
|
+
const obj = JSON.parse(t.slice(start, end + 1));
|
|
129
|
+
const approach = typeof obj.approach === "string" ? obj.approach.trim() : "";
|
|
130
|
+
if (!approach)
|
|
131
|
+
return null;
|
|
132
|
+
const steps = Array.isArray(obj.steps)
|
|
133
|
+
? obj.steps
|
|
134
|
+
.flatMap((s) => {
|
|
135
|
+
if (typeof s !== "object" || s === null)
|
|
136
|
+
return [];
|
|
137
|
+
const { path, change } = s;
|
|
138
|
+
return typeof path === "string" && typeof change === "string" && path.trim()
|
|
139
|
+
? [{ path: path.trim(), change: change.trim() }]
|
|
140
|
+
: [];
|
|
141
|
+
})
|
|
142
|
+
.slice(0, 5)
|
|
143
|
+
: [];
|
|
144
|
+
return {
|
|
145
|
+
bugType: obj.bugType === "design" ? "design" : "interaction",
|
|
146
|
+
classification: typeof obj.classification === "string" ? obj.classification.trim() : "",
|
|
147
|
+
approach,
|
|
148
|
+
steps,
|
|
149
|
+
practices: Array.isArray(obj.practices)
|
|
150
|
+
? obj.practices
|
|
151
|
+
.filter((p) => typeof p === "string" && p.trim().length > 0)
|
|
152
|
+
.slice(0, 3)
|
|
153
|
+
: [],
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// ── The pipeline ─────────────────────────────────────────────────────────────
|
|
161
|
+
/**
|
|
162
|
+
* Propose (or re-propose, with `force`) a fix for one filed issue. Refuses
|
|
163
|
+
* cleanly when nothing is connected, no model key is set, or the number isn't
|
|
164
|
+
* an issue polishd filed; a model hiccup comes back as `provider-error`, and
|
|
165
|
+
* nothing is cached on failure.
|
|
166
|
+
*/
|
|
167
|
+
export async function suggestIssueFix(issueNumber, force = false) {
|
|
168
|
+
if (!(await isGithubConnected())) {
|
|
169
|
+
return {
|
|
170
|
+
ok: false,
|
|
171
|
+
error: "not-connected",
|
|
172
|
+
message: "Connect a GitHub repository in the settings first.",
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const { settings } = await resolveSettings();
|
|
176
|
+
if (!settings.apiKey) {
|
|
177
|
+
return {
|
|
178
|
+
ok: false,
|
|
179
|
+
error: "no-key",
|
|
180
|
+
message: "Configure a model API key in the settings first.",
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
const key = String(issueNumber);
|
|
184
|
+
if (!force) {
|
|
185
|
+
const cached = (await loadFixLog())[key];
|
|
186
|
+
if (cached)
|
|
187
|
+
return { ok: true, suggestion: cached, regenerated: false };
|
|
188
|
+
}
|
|
189
|
+
const filed = await findFiledIssue(issueNumber);
|
|
190
|
+
if (!filed) {
|
|
191
|
+
return {
|
|
192
|
+
ok: false,
|
|
193
|
+
error: "not-found",
|
|
194
|
+
message: `Issue #${issueNumber} isn't one polishd filed.`,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
// Live issue text when GitHub will still give it; the stored claim otherwise.
|
|
198
|
+
const detail = await readGithubIssue(issueNumber);
|
|
199
|
+
const title = detail?.title ?? filed.claim ?? `Issue #${issueNumber}`;
|
|
200
|
+
const body = (detail?.body ?? "").slice(0, MAX_BODY_CHARS);
|
|
201
|
+
const files = await collectSource(filed.evidence, body);
|
|
202
|
+
const profile = await loadProjectProfile();
|
|
203
|
+
const sections = [
|
|
204
|
+
`THE ISSUE (#${issueNumber}): ${title}`,
|
|
205
|
+
"",
|
|
206
|
+
"ISSUE BODY:",
|
|
207
|
+
body || filed.claim || "(no body available)",
|
|
208
|
+
"",
|
|
209
|
+
`EVIDENCE (identifier from the analytics data): ${filed.evidence}`,
|
|
210
|
+
];
|
|
211
|
+
if (profile) {
|
|
212
|
+
sections.push("", `PROJECT PROFILE (what this site and its components are):\n${profile.text}`);
|
|
213
|
+
}
|
|
214
|
+
if (files.length > 0) {
|
|
215
|
+
sections.push("", "SOURCE FILES (from the GitHub repository):", ...files.map((f) => `--- ${f.path} ---\n${f.content}`));
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
sections.push("", "SOURCE FILES: none could be located for this evidence — keep steps to " +
|
|
219
|
+
"the paths the issue body cites, or describe where the change belongs.");
|
|
220
|
+
}
|
|
221
|
+
try {
|
|
222
|
+
const reply = await callModel(settings, FIX_PROMPT, sections.join("\n"), {
|
|
223
|
+
maxTokens: MAX_OUTPUT_TOKENS,
|
|
224
|
+
});
|
|
225
|
+
const parsed = reply.text ? parseSuggestion(reply.text) : null;
|
|
226
|
+
if (!parsed) {
|
|
227
|
+
return {
|
|
228
|
+
ok: false,
|
|
229
|
+
error: "provider-error",
|
|
230
|
+
message: "The model's suggestion could not be parsed. Try again.",
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
const suggestion = {
|
|
234
|
+
...parsed,
|
|
235
|
+
issueNumber,
|
|
236
|
+
files: files.map((f) => f.path),
|
|
237
|
+
provider: settings.provider,
|
|
238
|
+
model: settings.model,
|
|
239
|
+
generatedAt: Date.now(),
|
|
240
|
+
};
|
|
241
|
+
const log = await loadFixLog();
|
|
242
|
+
log[key] = suggestion;
|
|
243
|
+
await setMeta(FIX_LOG_KEY, JSON.stringify(log));
|
|
244
|
+
return { ok: true, suggestion, regenerated: true };
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
return {
|
|
248
|
+
ok: false,
|
|
249
|
+
error: "provider-error",
|
|
250
|
+
message: err instanceof Error ? err.message : "The model call failed.",
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=fix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/ai/fix.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/issues.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import type { PolishdFiledIssue, PolishdLossItem, CreateIssueResult } from "./types";
|
|
2
2
|
/** The slice of a loss the pipeline needs. */
|
|
3
3
|
type Loss = Pick<PolishdLossItem, "issue" | "evidence" | "location">;
|
|
4
|
+
/**
|
|
5
|
+
* The local record behind one filed issue number — the analytics citation and
|
|
6
|
+
* claim GitHub was never told. The fix pipeline (`fix.ts`) uses it to search
|
|
7
|
+
* the source for the right element, and its absence is how a number that
|
|
8
|
+
* isn't ours gets refused.
|
|
9
|
+
*/
|
|
10
|
+
export declare function findFiledIssue(number: number): Promise<{
|
|
11
|
+
evidence: string;
|
|
12
|
+
claim?: string;
|
|
13
|
+
} | null>;
|
|
14
|
+
/** Terms specific enough to search code for (same spirit as citationTokens). */
|
|
15
|
+
export declare function evidenceSearchTerms(evidence: string): string[];
|
|
4
16
|
/**
|
|
5
17
|
* File a bug from one loss — after verifying it against the source (see the
|
|
6
18
|
* module doc for the pipeline). Returns the issue on success, the stored issue
|
package/dist/ai/issues.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/ai/issues.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,8CAA8C;AAC9C,KAAK,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/ai/issues.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,8CAA8C;AAC9C,KAAK,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;AA4FrE;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAOtD;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAY9D;AAiKD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiDhF;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAoB9F;AAoBD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA8BpE"}
|
package/dist/ai/issues.js
CHANGED
|
@@ -69,8 +69,22 @@ const INVESTIGATE_PROMPT = "You are a senior engineer verifying a suspected bug
|
|
|
69
69
|
"fixes: 1-3 concrete, code-level suggestions for fixing it.\n" +
|
|
70
70
|
"reasoning: one or two sentences on how you reached the verdict — shown to " +
|
|
71
71
|
"the site owner when the report is rejected or unverifiable.";
|
|
72
|
+
/**
|
|
73
|
+
* The local record behind one filed issue number — the analytics citation and
|
|
74
|
+
* claim GitHub was never told. The fix pipeline (`fix.ts`) uses it to search
|
|
75
|
+
* the source for the right element, and its absence is how a number that
|
|
76
|
+
* isn't ours gets refused.
|
|
77
|
+
*/
|
|
78
|
+
export async function findFiledIssue(number) {
|
|
79
|
+
for (const [evidence, entry] of Object.entries(await loadIssueLog())) {
|
|
80
|
+
if (!("rejected" in entry) && entry.number === number) {
|
|
81
|
+
return { evidence, claim: entry.issue };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
72
86
|
/** Terms specific enough to search code for (same spirit as citationTokens). */
|
|
73
|
-
function
|
|
87
|
+
export function evidenceSearchTerms(evidence) {
|
|
74
88
|
return [
|
|
75
89
|
...new Set(evidence
|
|
76
90
|
.split(/[^\w-]+/)
|
|
@@ -86,7 +100,7 @@ async function collectSource(loss) {
|
|
|
86
100
|
const paths = [];
|
|
87
101
|
if (loss.location)
|
|
88
102
|
paths.push(loss.location);
|
|
89
|
-
for (const p of await searchGithubCode(
|
|
103
|
+
for (const p of await searchGithubCode(evidenceSearchTerms(loss.evidence), MAX_FILES)) {
|
|
90
104
|
if (!paths.includes(p))
|
|
91
105
|
paths.push(p);
|
|
92
106
|
}
|
package/dist/ai/issues.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/ai/issues.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/ai/issues.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/types.d.ts
CHANGED
|
@@ -306,6 +306,55 @@ export interface PolishdFiledIssue {
|
|
|
306
306
|
url: string;
|
|
307
307
|
detail: PolishdGithubIssue | null;
|
|
308
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* The two failure classes a filed issue falls into, which decide the practice
|
|
311
|
+
* the fix leans on: an interaction issue (something users do fails — dead
|
|
312
|
+
* handlers, broken flows, errors) draws on usability and ARIA authoring
|
|
313
|
+
* practice; a design issue (something users see is wrong — contrast,
|
|
314
|
+
* hierarchy, spacing, layout shift) draws on WCAG and visual-rhythm practice.
|
|
315
|
+
*/
|
|
316
|
+
export type PolishdFixBugType = "interaction" | "design";
|
|
317
|
+
/** One ordered step of the implementation path: a file, and the edit to it. */
|
|
318
|
+
export interface PolishdFixStep {
|
|
319
|
+
/** Repository path of the file to change. */
|
|
320
|
+
path: string;
|
|
321
|
+
/** The edit, in one to three sentences. */
|
|
322
|
+
change: string;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* A model-proposed fix for one filed issue, grounded in the repository's
|
|
326
|
+
* actual source and in published practice. Cached per issue number — the
|
|
327
|
+
* source and the issue rarely change under it, and a regenerate is always one
|
|
328
|
+
* click away.
|
|
329
|
+
*/
|
|
330
|
+
export interface PolishdFixSuggestion {
|
|
331
|
+
issueNumber: number;
|
|
332
|
+
bugType: PolishdFixBugType;
|
|
333
|
+
/** Why the bug was classed the way it was, one sentence. */
|
|
334
|
+
classification: string;
|
|
335
|
+
/** The fix itself, written for the implementing developer. Markdown. */
|
|
336
|
+
approach: string;
|
|
337
|
+
/** The implementation path, in order. */
|
|
338
|
+
steps: PolishdFixStep[];
|
|
339
|
+
/** Named guidelines the fix leans on, e.g. "WCAG 2.2 §1.4.3 contrast". */
|
|
340
|
+
practices: string[];
|
|
341
|
+
/** Repo paths the model was shown. */
|
|
342
|
+
files: string[];
|
|
343
|
+
provider: PolishdAIProvider;
|
|
344
|
+
model: string;
|
|
345
|
+
generatedAt: number;
|
|
346
|
+
}
|
|
347
|
+
/** Result of asking for (or regenerating) a fix suggestion. */
|
|
348
|
+
export type SuggestFixResult = {
|
|
349
|
+
ok: true;
|
|
350
|
+
suggestion: PolishdFixSuggestion;
|
|
351
|
+
regenerated: boolean;
|
|
352
|
+
} | {
|
|
353
|
+
ok: false;
|
|
354
|
+
error: SuggestFixError;
|
|
355
|
+
message: string;
|
|
356
|
+
};
|
|
357
|
+
export type SuggestFixError = "not-connected" | "no-key" | "not-found" | "provider-error";
|
|
309
358
|
/** Result of asking a provider which models are available to the configured key. */
|
|
310
359
|
export type ListModelsResult = {
|
|
311
360
|
ok: true;
|