@domandigital/craft 0.22.1 → 0.23.1
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 +12 -0
- package/CHARACTER.md +5 -3
- package/COPY.md +25 -6
- package/dist/{audit-CDMZ6JHT.js → audit-DESBVHQJ.js} +3 -3
- package/dist/audit.cjs +112 -6
- package/dist/audit.js +112 -6
- package/dist/{chunk-IAU4ZAIU.js → chunk-7DPB5G4G.js} +2 -2
- package/dist/{chunk-NV6FKMID.js → chunk-EHMEMSM2.js} +106 -5
- package/dist/{chunk-MLYHSPF7.js → chunk-GA3AJN67.js} +7 -2
- package/dist/{chunk-KH56TEFK.js → chunk-GDDBCHQR.js} +5 -5
- package/dist/{chunk-ICEG4S56.js → chunk-LRWKKJIW.js} +5 -5
- package/dist/{chunk-JT2NLOQI.js → chunk-M5QSMIT6.js} +4 -4
- package/dist/{chunk-WTR77PEM.js → chunk-V3GJSISR.js} +14 -14
- package/dist/{chunk-D6TAYXOS.js → chunk-ZV3FPQPM.js} +1 -1
- package/dist/{cli-4PXDNTZX.js → cli-36YQA6BP.js} +4 -4
- package/dist/{cli-3QV4FKM4.js → cli-3PFEOEQI.js} +6 -6
- package/dist/{cli-223CUNU3.js → cli-7IBKMUMM.js} +9 -9
- package/dist/{cli-7PPDBN6N.js → cli-FCFRPPHZ.js} +5 -5
- package/dist/{cli-CQUORKMC.js → cli-RXXGSKD6.js} +6 -6
- package/dist/{cli-FKWJF4V4.js → cli-SOH4QMMW.js} +3 -3
- package/dist/{cli-IQ5U76AZ.js → cli-TP5ZMJOL.js} +5 -5
- package/dist/{cli-6SMNHOCJ.js → cli-YOSHHLIV.js} +1 -1
- package/dist/cli.js +3 -3
- package/dist/index.cjs +112 -6
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +112 -6
- package/dist/{viewports-cli-H6UIUMBC.js → viewports-cli-ET664I2Y.js} +3 -3
- package/package.json +1 -1
- package/word-lists.json +1 -1
|
@@ -723,8 +723,35 @@ var NEGATION = [
|
|
|
723
723
|
/\b(?:is|are|was|were)(?:n’t|n't)\b[^.;]{2,60},\s*(?:it|they|that|this)(?:’s|'s|’re|'re)\b/i,
|
|
724
724
|
/\bless\s+about\b[^.;]{2,50}\bmore\s+about\b/i,
|
|
725
725
|
// parallel participle, no repeated subject: "dispatched from here, not shipped in from Seoul"
|
|
726
|
-
/\b\w{3,}ed\b[^,.;:]{0,40},\s*not\s+\w{3,}ed\b/i
|
|
726
|
+
/\b\w{3,}ed\b[^,.;:]{0,40},\s*not\s+\w{3,}ed\b/i,
|
|
727
|
+
// parallel gerund: "renting Microsoft's services, not running servers". The
|
|
728
|
+
// -thing pronouns and the -ing prepositions are not verbs.
|
|
729
|
+
/\b(?!(?:some|no|any|every)thing\b)\w{3,}ing\b[^,.;:]{0,40},\s*not\s+(?!(?:some|no|any|every)thing\b|(?:during|according|including|regarding|morning|evening)\b)\w{3,}ing\b/i
|
|
727
730
|
];
|
|
731
|
+
var SOFT_CONTRAST = [
|
|
732
|
+
// ", not registration." closing the sentence. Not when "not" negates what follows.
|
|
733
|
+
/,\s*not\s+(?!(?:yet|least|only|just|merely|simply|to|all|always|even|ever|necessarily|really|quite|exactly|enough|sure|that|because|so|much|many|once|often|every|including|counting|unlike|until|if|when|unless|though|although|or|and|but)\b)(?:(?:a|an|the|your|our|their|its|his|her|my|any)\s+)?[\w'’-]+(?:\s+[\w'’-]+){0,3}(?=\s*(?:[.!?)"”]|$))/im,
|
|
734
|
+
// "the league's own threshold, not a legal one"
|
|
735
|
+
/,\s*not\s+(?:a|an|the)\s+(?:[\w'’-]+\s+)?one\b/i,
|
|
736
|
+
// "renting computing over the internet instead of owning it"
|
|
737
|
+
/\b(?!(?:some|no|any|every)thing\b)\w{3,}ing\b[^.;:!?]{0,60}?\binstead\s+of\s+(?!(?:some|no|any|every)thing\b)\w{3,}ing\b/i
|
|
738
|
+
];
|
|
739
|
+
var PAIR_TOKEN = String.raw`(?:[£$€]?\d[\d,.]*%?|[\w'’£$€-]+)`;
|
|
740
|
+
var PAIR_NUMBER = String.raw`(?:one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|\d[\d,]*)`;
|
|
741
|
+
var PARALLEL_PAIR = [
|
|
742
|
+
// anaphora: "same site, same £8,000", "per user, per month". "No X, no Y" is no-x-no-y's.
|
|
743
|
+
new RegExp(String.raw`\b(?!no\b)(\w+)[ \t]+${PAIR_TOKEN},[ \t]+\1[ \t]+${PAIR_TOKEN}(?=[ \t]*(?:[.!?]|$))`, "im"),
|
|
744
|
+
// isocolon on its own line: "One form, seven workflows"
|
|
745
|
+
new RegExp(String.raw`^[ \t]*(?:#{1,6}[ \t]+)?${PAIR_NUMBER}[ \t]+[\w'’-]+,[ \t]+${PAIR_NUMBER}[ \t]+[\w'’-]+[.!]?[ \t]*$`, "im"),
|
|
746
|
+
// a verbless list as a tagline: "Service account, match-day reminders, analytics."
|
|
747
|
+
/^[ \t]*(?:#{1,6}[ \t]+)?[A-Z][\w'’-]*(?:[ \t]+(?!(?:and|or)\b)[\w'’-]+){0,2}(?:,[ \t]+(?!(?:and|or)\b)[\w'’-]+(?:[ \t]+(?!(?:and|or)\b)[\w'’-]+){0,2}){2,3}\.[ \t]*$/m
|
|
748
|
+
];
|
|
749
|
+
var alreadyBlocked = (block, match, index) => {
|
|
750
|
+
const before = block.text.slice(0, index);
|
|
751
|
+
const start = Math.max(before.search(/[^.!?\n]*$/), 0);
|
|
752
|
+
const sentence = block.text.slice(start, index + match.length);
|
|
753
|
+
return NEGATION.some((pattern) => pattern.test(sentence));
|
|
754
|
+
};
|
|
728
755
|
var DATA_ABSENCE = /\b(?:yet|found|available|configured|selected|assigned|scheduled|recorded|on file|to show|to display|results|match|matches|matching|data|in this period)\b/i;
|
|
729
756
|
var SIGNED_IN = /(?:^|\/)(?:admin|portal|dashboard|embedded)\//;
|
|
730
757
|
function lineAround(text, index) {
|
|
@@ -1105,7 +1132,7 @@ var COPY_TELLS = [
|
|
|
1105
1132
|
generation: 2,
|
|
1106
1133
|
severity: "warn",
|
|
1107
1134
|
surface: "copy",
|
|
1108
|
-
why: "'It's not just a haircut, it's an experience', 'dispatched from here, not shipped in': the contrast-and-reveal template is the most recognisable construction in generated copy.",
|
|
1135
|
+
why: "'It's not just a haircut, it's an experience', 'dispatched from here, not shipped in': the contrast-and-reveal template (correctio, antithesis: see COPY.md) is the most recognisable construction in generated copy.",
|
|
1109
1136
|
fix: "Say the positive claim and drop the contrast.",
|
|
1110
1137
|
detect: phrases(NEGATION, quoted, allText),
|
|
1111
1138
|
fixtures: {
|
|
@@ -1116,12 +1143,56 @@ var COPY_TELLS = [
|
|
|
1116
1143
|
f("content/home.md", "Hairdressing isn't a job, it's art."),
|
|
1117
1144
|
f("content/home.md", "It is less about the tools and more about the eye."),
|
|
1118
1145
|
f("content/home.md", "Order today and it's dispatched from here, not shipped in from Seoul."),
|
|
1119
|
-
f("app/offer.tsx", `export const outcome = "The whole path, not just the ads.";`)
|
|
1146
|
+
f("app/offer.tsx", `export const outcome = "The whole path, not just the ads.";`),
|
|
1147
|
+
// From a 92EL report that passed the gate, October 2026.
|
|
1148
|
+
f("content/report.md", "These are reported, not assumed to pass."),
|
|
1149
|
+
f("content/report.md", "The deletion is proposed, not automated."),
|
|
1150
|
+
f("content/report.md", "For 92EL, that means renting Microsoft's services, not running servers."),
|
|
1151
|
+
f("content/home.md", "Your team should spend time delivering services, not managing bookings.")
|
|
1120
1152
|
],
|
|
1121
1153
|
pass: [
|
|
1122
1154
|
f("content/home.md", "A haircut, a hot towel and a straight-razor finish."),
|
|
1123
1155
|
f("content/home.md", "They are cosmetics, not medicines."),
|
|
1124
|
-
f("content/home.md", "The box arrived red, not led astray by a dented corner.")
|
|
1156
|
+
f("content/home.md", "The box arrived red, not led astray by a dented corner."),
|
|
1157
|
+
f("content/home.md", "We fix boilers in the morning, not in the evening."),
|
|
1158
|
+
f("content/report.md", "Players never open the lists."),
|
|
1159
|
+
f("content/report.md", "It is not tested at national scale."),
|
|
1160
|
+
f("content/report.md", "Do not invent anything."),
|
|
1161
|
+
f("content/report.md", "Nothing is copied by hand."),
|
|
1162
|
+
f("content/report.md", "Results are checked by a person and not yet automated.")
|
|
1163
|
+
]
|
|
1164
|
+
}
|
|
1165
|
+
},
|
|
1166
|
+
{
|
|
1167
|
+
id: "trailing-contrast",
|
|
1168
|
+
name: "Trailing contrast",
|
|
1169
|
+
generation: 2,
|
|
1170
|
+
severity: "warn",
|
|
1171
|
+
surface: "copy",
|
|
1172
|
+
why: "'Edge matters for game servers, not registration', 'the league's own threshold, not a legal one', 'renting computing instead of owning it': the contrast template (correctio, antithesis: see COPY.md) in its softer forms. A genuine disclaimer has the same shape, so a person decides.",
|
|
1173
|
+
fix: "Say the positive claim on its own: 'Edge matters for game servers.' Keep the contrast only where the reader would otherwise assume the other thing, such as a legal disclaimer.",
|
|
1174
|
+
detect: phrases(SOFT_CONTRAST, quoted, allText, alreadyBlocked),
|
|
1175
|
+
fixtures: {
|
|
1176
|
+
flag: [
|
|
1177
|
+
// From a 92EL report that passed the gate, October 2026.
|
|
1178
|
+
f("content/report.md", "Edge matters for game servers, not registration."),
|
|
1179
|
+
f("content/report.md", "Age 18 is the league's own threshold, not a legal one."),
|
|
1180
|
+
f("content/report.md", "Cloud computing means renting computing over the internet instead of owning it."),
|
|
1181
|
+
f("content/home.md", "Real Square data, not a vanity metric."),
|
|
1182
|
+
// Reported even straight after a sentence the blocking rule reports.
|
|
1183
|
+
f("content/report.md", "That means renting services, not running servers.\n\nEdge matters for game servers, not registration.")
|
|
1184
|
+
],
|
|
1185
|
+
pass: [
|
|
1186
|
+
f("content/home.md", "Rewire, retile and replumb a bathroom in five days."),
|
|
1187
|
+
f("content/report.md", "Players never open the lists."),
|
|
1188
|
+
f("content/report.md", "It is not tested at national scale."),
|
|
1189
|
+
f("content/report.md", "Do not invent anything."),
|
|
1190
|
+
f("content/report.md", "Nothing is copied by hand."),
|
|
1191
|
+
f("content/report.md", "Results are checked by a person and not yet automated."),
|
|
1192
|
+
f("content/home.md", "Pay by card, not to mention Apple Pay."),
|
|
1193
|
+
f("content/home.md", "Card instead of cash is fine."),
|
|
1194
|
+
// The blocking rule reports this one; it is not reported twice.
|
|
1195
|
+
f("content/report.md", "The deletion is proposed, not automated.")
|
|
1125
1196
|
]
|
|
1126
1197
|
}
|
|
1127
1198
|
},
|
|
@@ -1171,7 +1242,7 @@ var COPY_TELLS = [
|
|
|
1171
1242
|
generation: 2,
|
|
1172
1243
|
severity: "warn",
|
|
1173
1244
|
surface: "copy",
|
|
1174
|
-
why: "Three fragments in a row ('Fast. Friendly. Local.' or 'No fuss. No jargon. Just results.') is the second wave's favourite rhythm.",
|
|
1245
|
+
why: "Three fragments in a row ('Fast. Friendly. Local.' or 'No fuss. No jargon. Just results.') (a tricolon in asyndeton: see COPY.md) is the second wave's favourite rhythm.",
|
|
1175
1246
|
fix: "Write one sentence that says which of the three is true, and how you know.",
|
|
1176
1247
|
// The fragments share one paragraph: "You don't. Again.", a blank line, then "It's frustrating." is two beats, not three.
|
|
1177
1248
|
detect: phrases([/(?:\b[A-Z][\w'’-]*(?:[ \t]+[\w'’-]+){0,2}[.!](?:[ \t]+|[ \t]*\n(?![ \t]*\n)[ \t]*)){2}[A-Z][\w'’-]*(?:[ \t]+[\w'’-]+){0,2}[.!](?=\s|$)/], quoted),
|
|
@@ -1183,6 +1254,36 @@ var COPY_TELLS = [
|
|
|
1183
1254
|
]
|
|
1184
1255
|
}
|
|
1185
1256
|
},
|
|
1257
|
+
{
|
|
1258
|
+
id: "parallel-pair",
|
|
1259
|
+
name: "Verbless parallel pair",
|
|
1260
|
+
generation: 2,
|
|
1261
|
+
severity: "warn",
|
|
1262
|
+
surface: "copy",
|
|
1263
|
+
why: "'One form, seven workflows', 'Same site, same \xA38,000': two matched fragments with no verb (isocolon, often with anaphora or asyndeton: see COPY.md), the staccato triplet's two-part cousin. It sounds decided and says less than a sentence would.",
|
|
1264
|
+
fix: "Write the sentence the pair stands for: 'One form and seven workflows replace the spreadsheets.' A short label on a slide can stay if a person reads it and it earns its place.",
|
|
1265
|
+
detect: phrases(PARALLEL_PAIR, quoted),
|
|
1266
|
+
fixtures: {
|
|
1267
|
+
flag: [
|
|
1268
|
+
// From 92EL deliverables, October 2026.
|
|
1269
|
+
f("content/deck.md", "# One form, seven workflows"),
|
|
1270
|
+
f("content/deck.md", "One form, seven workflows."),
|
|
1271
|
+
f("content/deck.md", "Same site, same \xA38,000."),
|
|
1272
|
+
f("content/deck.md", "Pay per user, per month"),
|
|
1273
|
+
f("content/deck.md", "Service account, match-day reminders, analytics.")
|
|
1274
|
+
],
|
|
1275
|
+
pass: [
|
|
1276
|
+
f("content/deck.md", "Forms, SharePoint, Outlook and Teams"),
|
|
1277
|
+
f("content/deck.md", "One form and seven workflows replace 92EL's spreadsheets and email chains."),
|
|
1278
|
+
f("content/deck.md", "PulseCloud Technologies, for 92EL senior management"),
|
|
1279
|
+
f("content/deck.md", "41 of 50 passed, 12 after a fix."),
|
|
1280
|
+
f("content/deck.md", "Pay monthly for each user"),
|
|
1281
|
+
f("content/home.md", "We fix boilers the same day, and we tell you the price before we start."),
|
|
1282
|
+
// The blocking no-x-no-y reports this one.
|
|
1283
|
+
f("content/home.md", "We reply within a day. No obligation, no spam.")
|
|
1284
|
+
]
|
|
1285
|
+
}
|
|
1286
|
+
},
|
|
1186
1287
|
{
|
|
1187
1288
|
id: "where-x-meets-y",
|
|
1188
1289
|
name: "'Where X meets Y'",
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
parseFile,
|
|
10
10
|
sentencesOf,
|
|
11
11
|
specificity
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-EHMEMSM2.js";
|
|
13
13
|
import {
|
|
14
14
|
SNAPSHOT_VERSION
|
|
15
15
|
} from "./chunk-QYBAVU3P.js";
|
|
@@ -2568,6 +2568,11 @@ var HOUSE = {
|
|
|
2568
2568
|
"matey-register": { tier: "review", label: "matey register, write plain and complete British English" },
|
|
2569
2569
|
// New 2026-10-20 (founder, from Eunice Ordor's review): review first, like every new tell.
|
|
2570
2570
|
"confession-line": { tier: "review", label: "confession line, scope the work by saying precisely what is true" },
|
|
2571
|
+
// New 2026-10-23 (a 92EL report passed the gate with three): review, because a
|
|
2572
|
+
// genuine disclaimer has the same shape. The gerund pair joined not-just-but.
|
|
2573
|
+
// New 2026-10-23 (founder, from 92EL deliverables): review, since a short slide label is often fine.
|
|
2574
|
+
"parallel-pair": { tier: "review", label: "verbless parallel pair, write the sentence it stands for" },
|
|
2575
|
+
"trailing-contrast": { tier: "review", label: "trailing contrast. Say the positive claim, unless it is a disclaimer the reader needs" },
|
|
2571
2576
|
"ai-vocabulary": { tier: "review", label: "AI vocabulary" },
|
|
2572
2577
|
"stock-phrase": { tier: "review", label: "stock phrase" },
|
|
2573
2578
|
"hollow-imperative": { tier: "review", label: "hollow imperative" },
|
|
@@ -3190,7 +3195,7 @@ var IMAGERY_TELLS = [
|
|
|
3190
3195
|
];
|
|
3191
3196
|
|
|
3192
3197
|
// src/character/check.ts
|
|
3193
|
-
var CATALOGUE_VERSION = "2026.10.
|
|
3198
|
+
var CATALOGUE_VERSION = "2026.10.8";
|
|
3194
3199
|
var CATALOGUE = [
|
|
3195
3200
|
...[...SOURCE_TELLS, ...COPY_TELLS, ...RESEARCH_TELLS, ...DENSITY_TELLS].map((t) => RENDERED_PATHS[t.id] ? { ...t, rendered: RENDERED_PATHS[t.id] } : t),
|
|
3196
3201
|
...SPECIFICITY_COPY_TELLS,
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-OQXTQQAU.js";
|
|
4
4
|
import {
|
|
5
5
|
parseFlags
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-V3GJSISR.js";
|
|
7
7
|
import {
|
|
8
8
|
toJson
|
|
9
9
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -22,10 +22,10 @@ import {
|
|
|
22
22
|
hueSwatch,
|
|
23
23
|
nullPrompt,
|
|
24
24
|
scanSource
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-GA3AJN67.js";
|
|
26
26
|
import {
|
|
27
27
|
extractStrings
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-EHMEMSM2.js";
|
|
29
29
|
|
|
30
30
|
// src/null/cli.ts
|
|
31
31
|
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from "fs";
|
|
@@ -120,7 +120,7 @@ async function build(flags, io) {
|
|
|
120
120
|
const toShoot = ids.filter((id) => existsSync(join(pages, `${id}.html`)) && !existsSync(join(shots, `${id}.json`)));
|
|
121
121
|
if (toShoot.length) {
|
|
122
122
|
io.out(`craft null: snapshotting ${toShoot.length} page${toShoot.length === 1 ? "" : "s"}`);
|
|
123
|
-
const { snapshotUrls } = await import("./audit-
|
|
123
|
+
const { snapshotUrls } = await import("./audit-DESBVHQJ.js");
|
|
124
124
|
const results = await snapshotUrls(toShoot.map((id) => pathToFileURL(join(pages, `${id}.html`)).href));
|
|
125
125
|
results.forEach((r, i) => {
|
|
126
126
|
const id = toShoot[i];
|
|
@@ -241,7 +241,7 @@ async function importPages(flags, io) {
|
|
|
241
241
|
const toShoot = pages.filter((p) => !existsSync(join(shots, `${p.id}.json`)));
|
|
242
242
|
if (toShoot.length) {
|
|
243
243
|
io.out(`craft null: snapshotting ${toShoot.length} page${toShoot.length === 1 ? "" : "s"} from ${flags.builder}`);
|
|
244
|
-
const { snapshotUrls } = await import("./audit-
|
|
244
|
+
const { snapshotUrls } = await import("./audit-DESBVHQJ.js");
|
|
245
245
|
const servers = /* @__PURE__ */ new Map();
|
|
246
246
|
try {
|
|
247
247
|
for (const p of toShoot) if (!servers.has(p.root)) servers.set(p.root, await serveDir(p.root));
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
formatDirectionMatches,
|
|
5
5
|
summariseDirection,
|
|
6
6
|
validateDirection
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7DPB5G4G.js";
|
|
8
8
|
import {
|
|
9
9
|
loadNull
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-GDDBCHQR.js";
|
|
11
11
|
import {
|
|
12
12
|
parseFlags
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-V3GJSISR.js";
|
|
14
14
|
import {
|
|
15
15
|
toJson
|
|
16
16
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
rhythmOf,
|
|
31
31
|
shapeName,
|
|
32
32
|
temperatureName
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-GA3AJN67.js";
|
|
34
34
|
|
|
35
35
|
// src/estate/cli.ts
|
|
36
36
|
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
@@ -133,7 +133,7 @@ async function snapshotOf(target, cwd) {
|
|
|
133
133
|
return snap;
|
|
134
134
|
}
|
|
135
135
|
if (!/^https?:\/\//.test(target)) throw new Error(`${target} is neither a URL, a snapshot file, nor a site in the register`);
|
|
136
|
-
const { snapshotUrl } = await import("./audit-
|
|
136
|
+
const { snapshotUrl } = await import("./audit-DESBVHQJ.js");
|
|
137
137
|
return snapshotUrl(target);
|
|
138
138
|
}
|
|
139
139
|
var line = (distance, sibling, shared) => `${distance.toFixed(2)}${sibling ? " SIBLING" : ""}${shared.length ? ` shares ${shared.join(", ")}` : ""}`;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
snapshotUrl,
|
|
3
3
|
snapshotUrls
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZV3FPQPM.js";
|
|
5
5
|
import {
|
|
6
6
|
describeTypicality,
|
|
7
7
|
loadNull
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-GDDBCHQR.js";
|
|
9
9
|
import {
|
|
10
10
|
SOURCE_FILE,
|
|
11
11
|
finish,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
parseFlags,
|
|
15
15
|
prepareReport,
|
|
16
16
|
readPaths
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-V3GJSISR.js";
|
|
18
18
|
import {
|
|
19
19
|
toJson
|
|
20
20
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
rhythmOf,
|
|
29
29
|
scanSource,
|
|
30
30
|
typicality
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-GA3AJN67.js";
|
|
32
32
|
|
|
33
33
|
// src/audit/cli.ts
|
|
34
34
|
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
holdHouseBlocks,
|
|
11
11
|
houseRule,
|
|
12
12
|
scanSource
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-GA3AJN67.js";
|
|
14
14
|
import {
|
|
15
15
|
compareCompetitor,
|
|
16
16
|
compareFacts,
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
pageCopy,
|
|
22
22
|
protectedFacts,
|
|
23
23
|
visibleText
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-EHMEMSM2.js";
|
|
25
25
|
|
|
26
26
|
// src/character/config.ts
|
|
27
27
|
var DEFAULT_IGNORE = [".claude", ".agents", ".cursor"];
|
|
@@ -622,7 +622,7 @@ async function pageSnapshot(target, cwd) {
|
|
|
622
622
|
return readSnapshot(JSON.parse(readFileSync(local, "utf8")), target);
|
|
623
623
|
}
|
|
624
624
|
if (!/^https?:\/\//.test(target)) throw new Error(`${target} is neither a URL nor a snapshot file`);
|
|
625
|
-
const { snapshotUrl } = await import("./audit-
|
|
625
|
+
const { snapshotUrl } = await import("./audit-DESBVHQJ.js");
|
|
626
626
|
return snapshotUrl(target);
|
|
627
627
|
}
|
|
628
628
|
async function briefFor(flags, cwd) {
|
|
@@ -633,7 +633,7 @@ async function briefFor(flags, cwd) {
|
|
|
633
633
|
if (typeof brief === "string" && brief.trim()) return brief;
|
|
634
634
|
} else if (flags.direction) throw new Error(`no such file: ${flags.direction}`);
|
|
635
635
|
if (flags.null) {
|
|
636
|
-
const { loadNull } = await import("./cli-
|
|
636
|
+
const { loadNull } = await import("./cli-36YQA6BP.js");
|
|
637
637
|
return loadNull(flags.null, cwd).brief;
|
|
638
638
|
}
|
|
639
639
|
return void 0;
|
|
@@ -659,37 +659,37 @@ async function compareWithCompetitor(flags, io) {
|
|
|
659
659
|
function run(argv, io) {
|
|
660
660
|
const [command, ...rest] = argv;
|
|
661
661
|
if (command === "direction") {
|
|
662
|
-
return import("./cli-
|
|
662
|
+
return import("./cli-TP5ZMJOL.js").then((m) => m.runDirection(rest, io));
|
|
663
663
|
}
|
|
664
664
|
if (command === "report" || command === "retrofit") {
|
|
665
|
-
return import("./cli-
|
|
665
|
+
return import("./cli-7IBKMUMM.js").then((m) => m.runReport(command, rest, io));
|
|
666
666
|
}
|
|
667
667
|
if (command === "register") {
|
|
668
|
-
return import("./cli-
|
|
668
|
+
return import("./cli-YOSHHLIV.js").then((m) => m.runRegister(rest, io));
|
|
669
669
|
}
|
|
670
670
|
if (command === "estate") {
|
|
671
|
-
return import("./cli-
|
|
671
|
+
return import("./cli-RXXGSKD6.js").then((m) => m.runEstate(rest, io));
|
|
672
672
|
}
|
|
673
673
|
if (command === "null") {
|
|
674
|
-
return import("./cli-
|
|
674
|
+
return import("./cli-36YQA6BP.js").then((m) => m.runNull(rest, io));
|
|
675
675
|
}
|
|
676
676
|
if (command === "calibrate") {
|
|
677
|
-
return import("./cli-
|
|
677
|
+
return import("./cli-FCFRPPHZ.js").then((m) => m.runCalibrate(rest, io));
|
|
678
678
|
}
|
|
679
679
|
if (command === "tells" && rest[0] === "harvest") {
|
|
680
|
-
return import("./cli-
|
|
680
|
+
return import("./cli-36YQA6BP.js").then((m) => m.runHarvest(rest, io)).catch((error) => {
|
|
681
681
|
io.err(`craft: ${error.message}`);
|
|
682
682
|
return 2;
|
|
683
683
|
});
|
|
684
684
|
}
|
|
685
685
|
if (command === "phone-first") {
|
|
686
|
-
return import("./cli-
|
|
686
|
+
return import("./cli-SOH4QMMW.js").then((m) => m.runPhoneFirst(rest, io));
|
|
687
687
|
}
|
|
688
688
|
if (command === "viewports") {
|
|
689
|
-
return import("./viewports-cli-
|
|
689
|
+
return import("./viewports-cli-ET664I2Y.js").then((m) => m.runViewports(rest, io));
|
|
690
690
|
}
|
|
691
691
|
if (command === "snapshot" || command === "audit") {
|
|
692
|
-
return import("./cli-
|
|
692
|
+
return import("./cli-3PFEOEQI.js").then((m) => m.runAudit(command, rest, io));
|
|
693
693
|
}
|
|
694
694
|
if (!command || command === "help" || command === "--help" || command === "-h") {
|
|
695
695
|
io.out(HELP);
|
|
@@ -9,13 +9,13 @@ import {
|
|
|
9
9
|
runHarvest,
|
|
10
10
|
runNull,
|
|
11
11
|
serveDir
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GDDBCHQR.js";
|
|
13
13
|
import "./chunk-OQXTQQAU.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-V3GJSISR.js";
|
|
15
15
|
import "./chunk-QIEDBL4J.js";
|
|
16
16
|
import "./chunk-WUACK2HX.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-GA3AJN67.js";
|
|
18
|
+
import "./chunk-EHMEMSM2.js";
|
|
19
19
|
import "./chunk-QYBAVU3P.js";
|
|
20
20
|
export {
|
|
21
21
|
describeTypicality,
|
|
@@ -4,16 +4,16 @@ import {
|
|
|
4
4
|
merge,
|
|
5
5
|
resolvePages,
|
|
6
6
|
runAudit
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-M5QSMIT6.js";
|
|
8
|
+
import "./chunk-ZV3FPQPM.js";
|
|
9
9
|
import "./chunk-JYNXGCYZ.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-GDDBCHQR.js";
|
|
11
11
|
import "./chunk-OQXTQQAU.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-V3GJSISR.js";
|
|
13
13
|
import "./chunk-QIEDBL4J.js";
|
|
14
14
|
import "./chunk-WUACK2HX.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-GA3AJN67.js";
|
|
16
|
+
import "./chunk-EHMEMSM2.js";
|
|
17
17
|
import "./chunk-QYBAVU3P.js";
|
|
18
18
|
export {
|
|
19
19
|
describeComponents,
|
|
@@ -3,21 +3,21 @@ import {
|
|
|
3
3
|
} from "./chunk-OKVHWXYV.js";
|
|
4
4
|
import {
|
|
5
5
|
merge
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-M5QSMIT6.js";
|
|
7
|
+
import "./chunk-ZV3FPQPM.js";
|
|
8
8
|
import "./chunk-JYNXGCYZ.js";
|
|
9
9
|
import {
|
|
10
10
|
SIBLING_AT,
|
|
11
11
|
compareToEstate,
|
|
12
12
|
loadEstate
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-LRWKKJIW.js";
|
|
14
14
|
import {
|
|
15
15
|
PAGE_TYPES,
|
|
16
16
|
validateDirection
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-7DPB5G4G.js";
|
|
18
18
|
import {
|
|
19
19
|
loadNull
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-GDDBCHQR.js";
|
|
21
21
|
import "./chunk-OQXTQQAU.js";
|
|
22
22
|
import {
|
|
23
23
|
COPY_FILE,
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
loadExceptions,
|
|
29
29
|
parseFlags,
|
|
30
30
|
readPaths
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-V3GJSISR.js";
|
|
32
32
|
import {
|
|
33
33
|
toJson
|
|
34
34
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -42,8 +42,8 @@ import {
|
|
|
42
42
|
fingerprint,
|
|
43
43
|
scanSource,
|
|
44
44
|
typicality
|
|
45
|
-
} from "./chunk-
|
|
46
|
-
import "./chunk-
|
|
45
|
+
} from "./chunk-GA3AJN67.js";
|
|
46
|
+
import "./chunk-EHMEMSM2.js";
|
|
47
47
|
import "./chunk-QYBAVU3P.js";
|
|
48
48
|
|
|
49
49
|
// src/report/cli.ts
|
|
@@ -126,7 +126,7 @@ async function runReport(command, args, io) {
|
|
|
126
126
|
if (/\.json$/i.test(target2) && existsSync(local)) {
|
|
127
127
|
snap = readSnapshot(JSON.parse(readFileSync(local, "utf8")), target2);
|
|
128
128
|
} else {
|
|
129
|
-
const { snapshotUrl } = await import("./audit-
|
|
129
|
+
const { snapshotUrl } = await import("./audit-DESBVHQJ.js");
|
|
130
130
|
snap = await snapshotUrl(target2);
|
|
131
131
|
}
|
|
132
132
|
const fp = fingerprint(snap);
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
expandNullTargets,
|
|
6
6
|
loadNull
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-GDDBCHQR.js";
|
|
8
8
|
import "./chunk-OQXTQQAU.js";
|
|
9
9
|
import {
|
|
10
10
|
parseFlags
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-V3GJSISR.js";
|
|
12
12
|
import {
|
|
13
13
|
toJson
|
|
14
14
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -21,8 +21,8 @@ import {
|
|
|
21
21
|
fingerprint,
|
|
22
22
|
scanSource,
|
|
23
23
|
typicality
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import "./chunk-
|
|
24
|
+
} from "./chunk-GA3AJN67.js";
|
|
25
|
+
import "./chunk-EHMEMSM2.js";
|
|
26
26
|
import {
|
|
27
27
|
SNAPSHOT_VERSION
|
|
28
28
|
} from "./chunk-QYBAVU3P.js";
|
|
@@ -188,7 +188,7 @@ async function runCalibrate(args, io) {
|
|
|
188
188
|
if (toTake.length) {
|
|
189
189
|
io.err(`craft calibrate: taking ${toTake.length} snapshot${toTake.length === 1 ? "" : "s"}`);
|
|
190
190
|
try {
|
|
191
|
-
const { snapshotUrls } = await import("./audit-
|
|
191
|
+
const { snapshotUrls } = await import("./audit-DESBVHQJ.js");
|
|
192
192
|
const results = await snapshotUrls(toTake.map((t) => t.url));
|
|
193
193
|
results.forEach((r, i) => {
|
|
194
194
|
const { entry, keep } = toTake[i];
|
|
@@ -4,15 +4,15 @@ import {
|
|
|
4
4
|
formatPairs,
|
|
5
5
|
loadEstate,
|
|
6
6
|
runEstate
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-LRWKKJIW.js";
|
|
8
|
+
import "./chunk-7DPB5G4G.js";
|
|
9
|
+
import "./chunk-GDDBCHQR.js";
|
|
10
10
|
import "./chunk-OQXTQQAU.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-V3GJSISR.js";
|
|
12
12
|
import "./chunk-QIEDBL4J.js";
|
|
13
13
|
import "./chunk-WUACK2HX.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-GA3AJN67.js";
|
|
15
|
+
import "./chunk-EHMEMSM2.js";
|
|
16
16
|
import "./chunk-QYBAVU3P.js";
|
|
17
17
|
export {
|
|
18
18
|
formatComponentPairs,
|
|
@@ -16,12 +16,12 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
SOURCE_FILE,
|
|
18
18
|
readPaths
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-V3GJSISR.js";
|
|
20
20
|
import {
|
|
21
21
|
toJson
|
|
22
22
|
} from "./chunk-QIEDBL4J.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-GA3AJN67.js";
|
|
24
|
+
import "./chunk-EHMEMSM2.js";
|
|
25
25
|
import "./chunk-QYBAVU3P.js";
|
|
26
26
|
|
|
27
27
|
// src/phone/cli.ts
|
|
@@ -19,10 +19,10 @@ import {
|
|
|
19
19
|
checkReason,
|
|
20
20
|
researchPrompt,
|
|
21
21
|
validateDirection
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-7DPB5G4G.js";
|
|
23
23
|
import {
|
|
24
24
|
parseFlags
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-V3GJSISR.js";
|
|
26
26
|
import {
|
|
27
27
|
toJson
|
|
28
28
|
} from "./chunk-QIEDBL4J.js";
|
|
@@ -38,8 +38,8 @@ import {
|
|
|
38
38
|
isCream,
|
|
39
39
|
oklchToRgb,
|
|
40
40
|
parseColour
|
|
41
|
-
} from "./chunk-
|
|
42
|
-
import "./chunk-
|
|
41
|
+
} from "./chunk-GA3AJN67.js";
|
|
42
|
+
import "./chunk-EHMEMSM2.js";
|
|
43
43
|
import "./chunk-QYBAVU3P.js";
|
|
44
44
|
|
|
45
45
|
// src/direction/cli.ts
|
|
@@ -484,7 +484,7 @@ var readJson = (path) => JSON.parse(readFileSync(path, "utf8"));
|
|
|
484
484
|
async function snapshotFrom(target, cwd) {
|
|
485
485
|
if (!target) return void 0;
|
|
486
486
|
if (/^https?:\/\//.test(target)) {
|
|
487
|
-
const { snapshotUrl } = await import("./audit-
|
|
487
|
+
const { snapshotUrl } = await import("./audit-DESBVHQJ.js");
|
|
488
488
|
return snapshotUrl(target);
|
|
489
489
|
}
|
|
490
490
|
return readSnapshot(readJson(resolve(cwd, target)), target);
|
package/dist/cli.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
run
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-V3GJSISR.js";
|
|
5
5
|
import "./chunk-QIEDBL4J.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-GA3AJN67.js";
|
|
7
|
+
import "./chunk-EHMEMSM2.js";
|
|
8
8
|
import "./chunk-QYBAVU3P.js";
|
|
9
9
|
|
|
10
10
|
// src/cli.ts
|