taste-lint 0.1.0 → 0.2.0
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/README.md +16 -14
- package/data/config.schema.json +0 -44
- package/data/rules/schema/rule.schema.json +1 -5
- package/data/rules/typography/typography-straight-quotes.yaml +0 -1
- package/dist/cli.js +707 -2304
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +47 -128
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +424 -1171
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
- package/data/audit/SKILL.md +0 -22
- package/data/audit/capture.js +0 -111
- package/data/audit/example.json +0 -75
- package/data/rules/copywriting/copywriting-announced-honesty.yaml +0 -43
- package/data/rules/copywriting/copywriting-changed-supplied-facts.yaml +0 -31
- package/data/rules/copywriting/copywriting-drafting-instruction-echo.yaml +0 -31
- package/data/rules/copywriting/copywriting-profile-register-mismatch.yaml +0 -31
- package/data/rules/copywriting/copywriting-unraised-objection.yaml +0 -43
- package/data/rules/copywriting/copywriting-vague-personal-request.yaml +0 -43
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
//#region src/analysis/html.d.ts
|
|
2
|
-
interface HtmlElement {
|
|
3
|
-
tag: string;
|
|
4
|
-
attrs: Record<string, string>;
|
|
5
|
-
text: string;
|
|
6
|
-
offset: number;
|
|
7
|
-
inHead: boolean;
|
|
8
|
-
}
|
|
9
|
-
//#endregion
|
|
10
1
|
//#region src/analysis/repository.d.ts
|
|
11
2
|
interface DocumentNode {
|
|
12
3
|
type: string;
|
|
@@ -31,7 +22,6 @@ interface ImportFact {
|
|
|
31
22
|
typeOnly: boolean;
|
|
32
23
|
}
|
|
33
24
|
interface SourceFacts {
|
|
34
|
-
html?: HtmlElement[];
|
|
35
25
|
images?: {
|
|
36
26
|
offset: number;
|
|
37
27
|
attributes: string[];
|
|
@@ -40,13 +30,12 @@ interface SourceFacts {
|
|
|
40
30
|
document?: DocumentNode;
|
|
41
31
|
imports?: ImportFact[];
|
|
42
32
|
parseError?: string;
|
|
43
|
-
repository: Pick<Repository, "root" | "read" | "resolve" | "exists" | "manifest"
|
|
33
|
+
repository: Pick<Repository, "root" | "read" | "resolve" | "exists" | "manifest">;
|
|
44
34
|
}
|
|
45
35
|
declare class Repository {
|
|
46
36
|
readonly root: string;
|
|
47
37
|
private readonly contents;
|
|
48
|
-
|
|
49
|
-
constructor(root: string, policy?: ArchitecturePolicy);
|
|
38
|
+
constructor(root: string);
|
|
50
39
|
resolve(file: string, target: string): string | undefined;
|
|
51
40
|
read(file: string): string | undefined;
|
|
52
41
|
exists(file: string): boolean;
|
|
@@ -56,25 +45,10 @@ declare class Repository {
|
|
|
56
45
|
} | undefined;
|
|
57
46
|
}
|
|
58
47
|
//#endregion
|
|
59
|
-
//#region src/audit/types.d.ts
|
|
60
|
-
interface AuditUnitContext {
|
|
61
|
-
lens: string;
|
|
62
|
-
proposalId?: string;
|
|
63
|
-
region: string;
|
|
64
|
-
missing?: string;
|
|
65
|
-
}
|
|
66
|
-
//#endregion
|
|
67
|
-
//#region src/lib/writing-context.d.ts
|
|
68
|
-
interface WritingContext {
|
|
69
|
-
facts?: string;
|
|
70
|
-
profile?: string;
|
|
71
|
-
instructions?: string;
|
|
72
|
-
}
|
|
73
|
-
//#endregion
|
|
74
48
|
//#region src/types.d.ts
|
|
75
|
-
declare const DOMAINS: readonly ["typography", "craft", "copywriting", "interaction", "motion", "product", "
|
|
49
|
+
declare const DOMAINS: readonly ["typography", "craft", "copywriting", "interaction", "motion", "product", "authoring"];
|
|
76
50
|
type Domain = (typeof DOMAINS)[number];
|
|
77
|
-
declare const UNIT_KINDS: readonly ["paragraph", "heading", "jsx-text", "attr-string", "class-list", "element",
|
|
51
|
+
declare const UNIT_KINDS: readonly ["paragraph", "heading", "jsx-text", "attr-string", "class-list", "element",
|
|
78
52
|
/** The whole file, for mechanical-only regex rules over raw source. */
|
|
79
53
|
"source",
|
|
80
54
|
/** A file that did not parse; carries the error and nothing else. */
|
|
@@ -90,11 +64,11 @@ type Severity = (typeof SEVERITIES)[number];
|
|
|
90
64
|
declare const SEVERITY_RANK: Record<Severity, number>;
|
|
91
65
|
declare const RULE_STATUSES: readonly ["active", "draft", "review-only"];
|
|
92
66
|
type RuleStatus = (typeof RULE_STATUSES)[number];
|
|
93
|
-
declare const DOC_TYPES: readonly ["tutorial", "howto", "reference", "explanation", "agent-instructions", "lesson", "marketing", "ui", "readme", "skill", "plan", "
|
|
67
|
+
declare const DOC_TYPES: readonly ["tutorial", "howto", "reference", "explanation", "agent-instructions", "lesson", "marketing", "ui", "readme", "skill", "plan", "unknown"];
|
|
94
68
|
type DocType = (typeof DOC_TYPES)[number];
|
|
95
69
|
declare const ROLES: readonly ["heading", "body", "list-item", "cell", "button", "link", "label", "placeholder", "aria", "literal-copy", "caption", "unknown"];
|
|
96
70
|
type Role = (typeof ROLES)[number];
|
|
97
|
-
declare const CONTEXT_KEYS: readonly ["section", "headingAbove", "docType", "element", "role", "neighbours"
|
|
71
|
+
declare const CONTEXT_KEYS: readonly ["section", "headingAbove", "docType", "element", "role", "neighbours"];
|
|
98
72
|
type ContextKey = (typeof CONTEXT_KEYS)[number];
|
|
99
73
|
type Band = "act" | "review" | "silent";
|
|
100
74
|
interface RuleSource {
|
|
@@ -208,13 +182,9 @@ interface NeighbourSummary {
|
|
|
208
182
|
typography?: ResolvedTypography;
|
|
209
183
|
}
|
|
210
184
|
interface UnitContext {
|
|
211
|
-
audit?: AuditUnitContext;
|
|
212
185
|
/** Explicit font-size tokens from taste-lint.config.json, never inferred defaults. */
|
|
213
186
|
fontScale?: Record<string, string>;
|
|
214
187
|
section?: string;
|
|
215
|
-
writingFacts?: string;
|
|
216
|
-
writingProfile?: string;
|
|
217
|
-
writingInstructions?: string;
|
|
218
188
|
headingAbove?: string;
|
|
219
189
|
docType: DocType;
|
|
220
190
|
element?: string;
|
|
@@ -446,17 +416,7 @@ interface CorpusItem {
|
|
|
446
416
|
};
|
|
447
417
|
split: "dev" | "holdout";
|
|
448
418
|
}
|
|
449
|
-
interface ArchitecturePolicy {
|
|
450
|
-
boundaries?: {
|
|
451
|
-
from: string;
|
|
452
|
-
disallow: string;
|
|
453
|
-
reason: string;
|
|
454
|
-
}[];
|
|
455
|
-
deprecatedImports?: Record<string, string>;
|
|
456
|
-
generated?: string[];
|
|
457
|
-
}
|
|
458
419
|
interface Config {
|
|
459
|
-
architecture?: ArchitecturePolicy;
|
|
460
420
|
root: string;
|
|
461
421
|
docTypes: {
|
|
462
422
|
glob: string;
|
|
@@ -473,46 +433,72 @@ interface Config {
|
|
|
473
433
|
exclude: string[];
|
|
474
434
|
}
|
|
475
435
|
//#endregion
|
|
436
|
+
//#region src/scan/profiles.d.ts
|
|
437
|
+
declare const PROFILE_NAMES: readonly ["product", "writing", "instructions", "all"];
|
|
438
|
+
type ProfileName = (typeof PROFILE_NAMES)[number];
|
|
439
|
+
//#endregion
|
|
476
440
|
//#region src/lib/config.d.ts
|
|
477
441
|
declare const loadConfig: (root: string, defaults?: Config["docTypes"]) => Config;
|
|
478
442
|
//#endregion
|
|
479
443
|
//#region src/lint.d.ts
|
|
444
|
+
/**
|
|
445
|
+
* Options for one lint run. Every field is optional: `runLint()` lints the
|
|
446
|
+
* current directory with every rule, no Jev calls until a key is present.
|
|
447
|
+
*/
|
|
480
448
|
interface LintOptions {
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
449
|
+
/** Project root that globs, `taste-lint.config.json` and reports resolve against. Default `process.cwd()`. */
|
|
450
|
+
root?: string;
|
|
451
|
+
/** Files or directories relative to `root`. Default `["."]`. */
|
|
452
|
+
targets?: string[];
|
|
453
|
+
/** Scope files and rule domains (`product`, `writing`, `instructions`, `all`); rules keep their own status. */
|
|
454
|
+
profile?: ProfileName;
|
|
455
|
+
/** Report only findings on lines changed since this Git revision. */
|
|
456
|
+
since?: string;
|
|
457
|
+
/** Rules directory. Default: the packaged `data/rules`. */
|
|
489
458
|
rulesDir?: string;
|
|
459
|
+
/** Rule ids to run; wins over `profile`. */
|
|
490
460
|
only?: string[];
|
|
461
|
+
/** Globs to skip, added to the config file's `exclude`. */
|
|
491
462
|
exclude?: string[];
|
|
463
|
+
/** Plan and estimate cost without calling Jev. */
|
|
492
464
|
dryRun?: boolean;
|
|
465
|
+
/** With `dryRun`, write each planned Jev request as JSONL through `ctx.stdout`. */
|
|
493
466
|
printRequests?: boolean;
|
|
467
|
+
/** Ignore cached answers; new answers are still recorded. */
|
|
494
468
|
noCache?: boolean;
|
|
495
|
-
|
|
469
|
+
/** Lowest severity that fails the run. Default `minor`. */
|
|
496
470
|
failOn?: Severity;
|
|
471
|
+
/** Apply the deterministic fixes to act-band findings in place. */
|
|
497
472
|
fix?: boolean;
|
|
473
|
+
/** Where the answer cache and run logs live. Default `<cwd>/results`. */
|
|
498
474
|
resultsDir?: string;
|
|
475
|
+
/** Jev model id. Default `jev-latest`. */
|
|
499
476
|
model?: string;
|
|
477
|
+
/** Vercel AI Gateway key. Default: `AI_GATEWAY_API_KEY` from the environment. */
|
|
500
478
|
apiKey?: string;
|
|
501
|
-
/** Extra units supplied by the caller
|
|
479
|
+
/** Extra units supplied by the caller, such as a rendered page capture. */
|
|
502
480
|
extraUnits?: Unit[];
|
|
503
481
|
}
|
|
482
|
+
/** Hooks for embedding: inject an evaluator, redirect output, observe progress. */
|
|
504
483
|
interface LintContext {
|
|
484
|
+
/** Answers Jev questions. Tests inject a fake; the default reads the key from `options.apiKey` or the environment. */
|
|
505
485
|
evaluate?: Evaluate;
|
|
486
|
+
/** Receives request JSONL from `printRequests`. Default `process.stdout`. */
|
|
506
487
|
stdout?: (text: string) => void;
|
|
488
|
+
/** Receives fix notices. Default `process.stderr`. */
|
|
507
489
|
stderr?: (text: string) => void;
|
|
490
|
+
/** Called at most every request with counts and elapsed time. */
|
|
508
491
|
onProgress?: (progress: Progress) => void;
|
|
509
|
-
|
|
492
|
+
/** Called once with every unit, the Jev answers and the mechanical negatives, before findings are banded. */
|
|
493
|
+
onEvidence?: (units: Unit[], answers: Map<string, Record<string, number>>, negatives: Map<string, Set<string>>, rules: Rule[]) => void;
|
|
510
494
|
}
|
|
511
|
-
|
|
495
|
+
/** What `runLint` resolves with: a report where the fields renderers treat as optional are always present. */
|
|
496
|
+
type LintRun = LintResult & Required<Pick<LintResult, "summary" | "ruleFindings" | "ruleScorecard" | "scope">> & {
|
|
512
497
|
rulesLoaded: Rule[];
|
|
513
498
|
units: number;
|
|
514
499
|
manifest: Record<string, unknown>;
|
|
515
|
-
}
|
|
500
|
+
};
|
|
501
|
+
declare const runLint: (options?: LintOptions, ctx?: LintContext) => Promise<LintRun>;
|
|
516
502
|
//#endregion
|
|
517
503
|
//#region src/rules/load.d.ts
|
|
518
504
|
declare const resolveRulesDir: (explicit?: string) => string;
|
|
@@ -524,9 +510,6 @@ interface LoadOptions {
|
|
|
524
510
|
}
|
|
525
511
|
declare const loadRules: (rulesDir: string, options?: LoadOptions) => Rule[];
|
|
526
512
|
//#endregion
|
|
527
|
-
//#region src/rules/validate.d.ts
|
|
528
|
-
declare const validateRule: (raw: unknown, file: string, expectedId: string) => Rule;
|
|
529
|
-
//#endregion
|
|
530
513
|
//#region src/rules/taxonomy.d.ts
|
|
531
514
|
interface Category {
|
|
532
515
|
id: string;
|
|
@@ -534,7 +517,6 @@ interface Category {
|
|
|
534
517
|
label: string;
|
|
535
518
|
}
|
|
536
519
|
declare const CATEGORIES: readonly Category[];
|
|
537
|
-
declare const CATEGORY_BY_ID: ReadonlyMap<string, Category>;
|
|
538
520
|
//#endregion
|
|
539
521
|
//#region src/extract/index.d.ts
|
|
540
522
|
declare const extractFile: (config: Config, relativeFile: string) => Unit[];
|
|
@@ -546,56 +528,6 @@ interface TsxExtractOptions {
|
|
|
546
528
|
}
|
|
547
529
|
declare const extractTsx: (file: string, source: string, options: TsxExtractOptions) => Unit[];
|
|
548
530
|
//#endregion
|
|
549
|
-
//#region src/extract/capture.d.ts
|
|
550
|
-
interface BoundingBox {
|
|
551
|
-
bottom: number;
|
|
552
|
-
height: number;
|
|
553
|
-
left: number;
|
|
554
|
-
right: number;
|
|
555
|
-
top: number;
|
|
556
|
-
width: number;
|
|
557
|
-
x: number;
|
|
558
|
-
y: number;
|
|
559
|
-
}
|
|
560
|
-
interface ElementSnapshot {
|
|
561
|
-
attributes: Record<string, string>;
|
|
562
|
-
boundingBox: BoundingBox;
|
|
563
|
-
children: string[];
|
|
564
|
-
classList: string[];
|
|
565
|
-
id: string;
|
|
566
|
-
parentId: string | null;
|
|
567
|
-
selector: string;
|
|
568
|
-
styles: Record<string, string>;
|
|
569
|
-
tagName: string;
|
|
570
|
-
text?: string;
|
|
571
|
-
visible?: boolean;
|
|
572
|
-
}
|
|
573
|
-
interface CaptureResult {
|
|
574
|
-
elements: Record<string, ElementSnapshot>;
|
|
575
|
-
metadata: {
|
|
576
|
-
url: string;
|
|
577
|
-
title?: string;
|
|
578
|
-
capturedAt?: string;
|
|
579
|
-
state?: string;
|
|
580
|
-
viewport?: {
|
|
581
|
-
width: number;
|
|
582
|
-
height: number;
|
|
583
|
-
};
|
|
584
|
-
};
|
|
585
|
-
order: string[];
|
|
586
|
-
rootElementId: string;
|
|
587
|
-
rootOuterHtml: string;
|
|
588
|
-
settings?: unknown;
|
|
589
|
-
version: 1;
|
|
590
|
-
}
|
|
591
|
-
//#endregion
|
|
592
|
-
//#region src/extract/rendered.d.ts
|
|
593
|
-
declare const extractCapture: (raw: CaptureResult, label: string) => Unit[];
|
|
594
|
-
declare const runStyleCapture: (url: string, selector: string) => Promise<CaptureResult>;
|
|
595
|
-
//#endregion
|
|
596
|
-
//#region src/extract/style-capture-text.d.ts
|
|
597
|
-
declare const parseCaptureInput: (raw: string) => CaptureResult;
|
|
598
|
-
//#endregion
|
|
599
531
|
//#region src/map/jev.d.ts
|
|
600
532
|
type Transport = "typesafe" | "gateway";
|
|
601
533
|
declare class ProviderError extends Error {
|
|
@@ -665,7 +597,7 @@ declare const corpusCoverage: (items: CorpusItem[], rules: Rule[]) => {
|
|
|
665
597
|
negative: number;
|
|
666
598
|
positive: number;
|
|
667
599
|
};
|
|
668
|
-
documentTypes: ("agent-instructions" | "explanation" | "howto" | "lesson" | "marketing" | "
|
|
600
|
+
documentTypes: ("agent-instructions" | "explanation" | "howto" | "lesson" | "marketing" | "plan" | "readme" | "reference" | "skill" | "tutorial" | "ui" | "unknown")[];
|
|
669
601
|
holdout: {
|
|
670
602
|
negative: number;
|
|
671
603
|
positive: number;
|
|
@@ -771,19 +703,6 @@ declare const runTune: (options: TuneOptions, ctx?: TuneContext) => Promise<{
|
|
|
771
703
|
exitCode: number;
|
|
772
704
|
decisions: TuneDecision[];
|
|
773
705
|
}>;
|
|
774
|
-
interface TuneAbOptions {
|
|
775
|
-
ruleId: string;
|
|
776
|
-
variantFile: string;
|
|
777
|
-
corpusDir?: string;
|
|
778
|
-
rulesDir?: string;
|
|
779
|
-
resultsDir?: string;
|
|
780
|
-
model?: string;
|
|
781
|
-
apiKey?: string;
|
|
782
|
-
}
|
|
783
|
-
declare const runTuneAb: (options: TuneAbOptions, ctx?: TuneContext) => Promise<{
|
|
784
|
-
report: string;
|
|
785
|
-
exitCode: number;
|
|
786
|
-
}>;
|
|
787
706
|
//#endregion
|
|
788
|
-
export { type
|
|
707
|
+
export { type Band, CATEGORIES, type CONTEXT_KEYS, type Config, type ContextKey, type CorpusItem, type Coverage, type CriterionSide, type DOC_TYPES, type DOMAINS, type DocType, type Domain, type EntryValue, type Evaluate, type Finding, type Fix, type LintContext, type LintOptions, type LintResult, type LintRun, type Mechanical, type MechanicalHit, type NeighbourSummary, type Preconditions, type Progress, ProviderError, type Question, type ROLES, type RULE_STATUSES, type RecorderHandle, type ResolvedTypography, type ReviewProcedure, type Role, type Rule, type RuleSource, type RuleStatus, type RunStatus, type RunSummary, type SEVERITIES, type SEVERITY_RANK, type STRUCTURAL_KINDS, type ScanScope, type Scorecard, type Severity, type SystemOneNoul, type SystemOneRequest, type SystemOneResponse, type TIERS, type Thresholds, type Tier, type Tuning, type TuningEntry, type UNIT_KINDS, type Unit, type UnitContext, type UnitKind, type Unknown, type Usage, extractFile, extractTsx, loadConfig, loadRules, makeFetchEvaluate, renderJson, renderSarif, renderTty, resolveRulesDir, runEval, runLint, runTune, splitFor };
|
|
789
708
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/analysis/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/analysis/repository.ts","../src/types.ts","../src/scan/profiles.ts","../src/lib/config.ts","../src/lint.ts","../src/rules/load.ts","../src/rules/taxonomy.ts","../src/extract/index.ts","../src/extract/tsx.ts","../src/map/jev.ts","../src/report/json.ts","../src/report/sarif.ts","../src/report/tty.ts","../src/lib/stats.ts","../src/eval/coverage.ts","../src/eval/metrics.ts","../src/eval/corpus.ts","../src/eval/promotion.ts","../src/eval/tune.ts"],"mappings":"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"}
|