@coldtea/abide 0.0.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/LICENSE +21 -0
- package/README.md +10 -0
- package/dist/abide-hook.d.ts +2 -0
- package/dist/abide-hook.d.ts.map +1 -0
- package/dist/abide-hook.js +23 -0
- package/dist/abide-hook.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +64 -0
- package/dist/bin.js.map +1 -0
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +79 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/bench.d.ts +3 -0
- package/dist/commands/bench.d.ts.map +1 -0
- package/dist/commands/bench.js +206 -0
- package/dist/commands/bench.js.map +1 -0
- package/dist/commands/calibrate.d.ts +3 -0
- package/dist/commands/calibrate.d.ts.map +1 -0
- package/dist/commands/calibrate.js +159 -0
- package/dist/commands/calibrate.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +106 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/compile.d.ts +3 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +116 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +93 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +58 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/replay.d.ts +4 -0
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/commands/replay.js +118 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/report.d.ts +5 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +78 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/rubric.d.ts +3 -0
- package/dist/commands/rubric.d.ts.map +1 -0
- package/dist/commands/rubric.js +40 -0
- package/dist/commands/rubric.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +31 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/hooks/postToolUse.d.ts +3 -0
- package/dist/hooks/postToolUse.d.ts.map +1 -0
- package/dist/hooks/postToolUse.js +145 -0
- package/dist/hooks/postToolUse.js.map +1 -0
- package/dist/hooks/sessionStart.d.ts +11 -0
- package/dist/hooks/sessionStart.d.ts.map +1 -0
- package/dist/hooks/sessionStart.js +83 -0
- package/dist/hooks/sessionStart.js.map +1 -0
- package/dist/hooks/stop.d.ts +26 -0
- package/dist/hooks/stop.d.ts.map +1 -0
- package/dist/hooks/stop.js +227 -0
- package/dist/hooks/stop.js.map +1 -0
- package/dist/hooks/turnStart.d.ts +8 -0
- package/dist/hooks/turnStart.d.ts.map +1 -0
- package/dist/hooks/turnStart.js +40 -0
- package/dist/hooks/turnStart.js.map +1 -0
- package/dist/lib/applyPatch.d.ts +22 -0
- package/dist/lib/applyPatch.d.ts.map +1 -0
- package/dist/lib/applyPatch.js +63 -0
- package/dist/lib/applyPatch.js.map +1 -0
- package/dist/lib/audit.d.ts +40 -0
- package/dist/lib/audit.d.ts.map +1 -0
- package/dist/lib/audit.js +215 -0
- package/dist/lib/audit.js.map +1 -0
- package/dist/lib/band.d.ts +20 -0
- package/dist/lib/band.d.ts.map +1 -0
- package/dist/lib/band.js +40 -0
- package/dist/lib/band.js.map +1 -0
- package/dist/lib/calibration.d.ts +13 -0
- package/dist/lib/calibration.d.ts.map +1 -0
- package/dist/lib/calibration.js +25 -0
- package/dist/lib/calibration.js.map +1 -0
- package/dist/lib/checkRunner.d.ts +34 -0
- package/dist/lib/checkRunner.d.ts.map +1 -0
- package/dist/lib/checkRunner.js +76 -0
- package/dist/lib/checkRunner.js.map +1 -0
- package/dist/lib/claude.d.ts +4 -0
- package/dist/lib/claude.d.ts.map +1 -0
- package/dist/lib/claude.js +28 -0
- package/dist/lib/claude.js.map +1 -0
- package/dist/lib/compilePrompt.d.ts +22 -0
- package/dist/lib/compilePrompt.d.ts.map +1 -0
- package/dist/lib/compilePrompt.js +33 -0
- package/dist/lib/compilePrompt.js.map +1 -0
- package/dist/lib/constants.d.ts +33 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +33 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/coverage.d.ts +7 -0
- package/dist/lib/coverage.d.ts.map +1 -0
- package/dist/lib/coverage.js +17 -0
- package/dist/lib/coverage.js.map +1 -0
- package/dist/lib/credentials.d.ts +27 -0
- package/dist/lib/credentials.d.ts.map +1 -0
- package/dist/lib/credentials.js +89 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/diff.d.ts +30 -0
- package/dist/lib/diff.d.ts.map +1 -0
- package/dist/lib/diff.js +139 -0
- package/dist/lib/diff.js.map +1 -0
- package/dist/lib/events.d.ts +5 -0
- package/dist/lib/events.d.ts.map +1 -0
- package/dist/lib/events.js +38 -0
- package/dist/lib/events.js.map +1 -0
- package/dist/lib/git.d.ts +37 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +163 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/hookRunner.d.ts +10 -0
- package/dist/lib/hookRunner.d.ts.map +1 -0
- package/dist/lib/hookRunner.js +52 -0
- package/dist/lib/hookRunner.js.map +1 -0
- package/dist/lib/hosts.d.ts +20 -0
- package/dist/lib/hosts.d.ts.map +1 -0
- package/dist/lib/hosts.js +101 -0
- package/dist/lib/hosts.js.map +1 -0
- package/dist/lib/jev.d.ts +24 -0
- package/dist/lib/jev.d.ts.map +1 -0
- package/dist/lib/jev.js +169 -0
- package/dist/lib/jev.js.map +1 -0
- package/dist/lib/lintConfig.d.ts +3 -0
- package/dist/lib/lintConfig.d.ts.map +1 -0
- package/dist/lib/lintConfig.js +55 -0
- package/dist/lib/lintConfig.js.map +1 -0
- package/dist/lib/loadRules.d.ts +12 -0
- package/dist/lib/loadRules.d.ts.map +1 -0
- package/dist/lib/loadRules.js +31 -0
- package/dist/lib/loadRules.js.map +1 -0
- package/dist/lib/opencodePlugin.d.ts +10 -0
- package/dist/lib/opencodePlugin.d.ts.map +1 -0
- package/dist/lib/opencodePlugin.js +36 -0
- package/dist/lib/opencodePlugin.js.map +1 -0
- package/dist/lib/output.d.ts +6 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +35 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/packageRoot.d.ts +12 -0
- package/dist/lib/packageRoot.d.ts.map +1 -0
- package/dist/lib/packageRoot.js +50 -0
- package/dist/lib/packageRoot.js.map +1 -0
- package/dist/lib/paths.d.ts +24 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +75 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/reason.d.ts +11 -0
- package/dist/lib/reason.d.ts.map +1 -0
- package/dist/lib/reason.js +31 -0
- package/dist/lib/reason.js.map +1 -0
- package/dist/lib/regularFile.d.ts +26 -0
- package/dist/lib/regularFile.d.ts.map +1 -0
- package/dist/lib/regularFile.js +77 -0
- package/dist/lib/regularFile.js.map +1 -0
- package/dist/lib/replay.d.ts +74 -0
- package/dist/lib/replay.d.ts.map +1 -0
- package/dist/lib/replay.js +250 -0
- package/dist/lib/replay.js.map +1 -0
- package/dist/lib/replayCodex.d.ts +6 -0
- package/dist/lib/replayCodex.d.ts.map +1 -0
- package/dist/lib/replayCodex.js +132 -0
- package/dist/lib/replayCodex.js.map +1 -0
- package/dist/lib/replayOpencode.d.ts +15 -0
- package/dist/lib/replayOpencode.d.ts.map +1 -0
- package/dist/lib/replayOpencode.js +154 -0
- package/dist/lib/replayOpencode.js.map +1 -0
- package/dist/lib/rubricFile.d.ts +31 -0
- package/dist/lib/rubricFile.d.ts.map +1 -0
- package/dist/lib/rubricFile.js +75 -0
- package/dist/lib/rubricFile.js.map +1 -0
- package/dist/lib/scope.d.ts +4 -0
- package/dist/lib/scope.d.ts.map +1 -0
- package/dist/lib/scope.js +14 -0
- package/dist/lib/scope.js.map +1 -0
- package/dist/lib/session.d.ts +48 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +182 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/settings.d.ts +26 -0
- package/dist/lib/settings.d.ts.map +1 -0
- package/dist/lib/settings.js +104 -0
- package/dist/lib/settings.js.map +1 -0
- package/dist/lib/sources.d.ts +28 -0
- package/dist/lib/sources.d.ts.map +1 -0
- package/dist/lib/sources.js +137 -0
- package/dist/lib/sources.js.map +1 -0
- package/dist/lib/stdin.d.ts +3 -0
- package/dist/lib/stdin.d.ts.map +1 -0
- package/dist/lib/stdin.js +24 -0
- package/dist/lib/stdin.js.map +1 -0
- package/dist/lib/transcript.d.ts +3 -0
- package/dist/lib/transcript.d.ts.map +1 -0
- package/dist/lib/transcript.js +57 -0
- package/dist/lib/transcript.js.map +1 -0
- package/dist/lib/ui.d.ts +8 -0
- package/dist/lib/ui.d.ts.map +1 -0
- package/dist/lib/ui.js +34 -0
- package/dist/lib/ui.js.map +1 -0
- package/dist/ui/components/Buckets.d.ts +6 -0
- package/dist/ui/components/Buckets.d.ts.map +1 -0
- package/dist/ui/components/Buckets.js +11 -0
- package/dist/ui/components/Buckets.js.map +1 -0
- package/dist/ui/components/Callout.d.ts +11 -0
- package/dist/ui/components/Callout.d.ts.map +1 -0
- package/dist/ui/components/Callout.js +10 -0
- package/dist/ui/components/Callout.js.map +1 -0
- package/dist/ui/components/Checklist.d.ts +10 -0
- package/dist/ui/components/Checklist.d.ts.map +1 -0
- package/dist/ui/components/Checklist.js +8 -0
- package/dist/ui/components/Checklist.js.map +1 -0
- package/dist/ui/components/Columns.d.ts +28 -0
- package/dist/ui/components/Columns.d.ts.map +1 -0
- package/dist/ui/components/Columns.js +20 -0
- package/dist/ui/components/Columns.js.map +1 -0
- package/dist/ui/components/Header.d.ts +9 -0
- package/dist/ui/components/Header.d.ts.map +1 -0
- package/dist/ui/components/Header.js +7 -0
- package/dist/ui/components/Header.js.map +1 -0
- package/dist/ui/components/Live.d.ts +16 -0
- package/dist/ui/components/Live.d.ts.map +1 -0
- package/dist/ui/components/Live.js +40 -0
- package/dist/ui/components/Live.js.map +1 -0
- package/dist/ui/components/RuleTable.d.ts +15 -0
- package/dist/ui/components/RuleTable.d.ts.map +1 -0
- package/dist/ui/components/RuleTable.js +81 -0
- package/dist/ui/components/RuleTable.js.map +1 -0
- package/dist/ui/components/Section.d.ts +10 -0
- package/dist/ui/components/Section.d.ts.map +1 -0
- package/dist/ui/components/Section.js +8 -0
- package/dist/ui/components/Section.js.map +1 -0
- package/dist/ui/components/Verdicts.d.ts +9 -0
- package/dist/ui/components/Verdicts.d.ts.map +1 -0
- package/dist/ui/components/Verdicts.js +12 -0
- package/dist/ui/components/Verdicts.js.map +1 -0
- package/dist/ui/render.d.ts +20 -0
- package/dist/ui/render.d.ts.map +1 -0
- package/dist/ui/render.js +32 -0
- package/dist/ui/render.js.map +1 -0
- package/dist/ui/theme.d.ts +37 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +63 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/views/AuditView.d.ts +18 -0
- package/dist/ui/views/AuditView.d.ts.map +1 -0
- package/dist/ui/views/AuditView.js +48 -0
- package/dist/ui/views/AuditView.js.map +1 -0
- package/dist/ui/views/BenchView.d.ts +33 -0
- package/dist/ui/views/BenchView.d.ts.map +1 -0
- package/dist/ui/views/BenchView.js +19 -0
- package/dist/ui/views/BenchView.js.map +1 -0
- package/dist/ui/views/CalibrateView.d.ts +26 -0
- package/dist/ui/views/CalibrateView.d.ts.map +1 -0
- package/dist/ui/views/CalibrateView.js +42 -0
- package/dist/ui/views/CalibrateView.js.map +1 -0
- package/dist/ui/views/CheckView.d.ts +19 -0
- package/dist/ui/views/CheckView.d.ts.map +1 -0
- package/dist/ui/views/CheckView.js +15 -0
- package/dist/ui/views/CheckView.js.map +1 -0
- package/dist/ui/views/ErrorView.d.ts +4 -0
- package/dist/ui/views/ErrorView.d.ts.map +1 -0
- package/dist/ui/views/ErrorView.js +26 -0
- package/dist/ui/views/ErrorView.js.map +1 -0
- package/dist/ui/views/HelpView.d.ts +2 -0
- package/dist/ui/views/HelpView.d.ts.map +1 -0
- package/dist/ui/views/HelpView.js +25 -0
- package/dist/ui/views/HelpView.js.map +1 -0
- package/dist/ui/views/InitView.d.ts +27 -0
- package/dist/ui/views/InitView.d.ts.map +1 -0
- package/dist/ui/views/InitView.js +24 -0
- package/dist/ui/views/InitView.js.map +1 -0
- package/dist/ui/views/ReplayView.d.ts +16 -0
- package/dist/ui/views/ReplayView.d.ts.map +1 -0
- package/dist/ui/views/ReplayView.js +44 -0
- package/dist/ui/views/ReplayView.js.map +1 -0
- package/dist/ui/views/ReportView.d.ts +14 -0
- package/dist/ui/views/ReportView.d.ts.map +1 -0
- package/dist/ui/views/ReportView.js +86 -0
- package/dist/ui/views/ReportView.js.map +1 -0
- package/dist/ui/views/RubricView.d.ts +18 -0
- package/dist/ui/views/RubricView.d.ts.map +1 -0
- package/dist/ui/views/RubricView.js +18 -0
- package/dist/ui/views/RubricView.js.map +1 -0
- package/opencode/abide.mjs +246 -0
- package/package.json +50 -0
- package/skills/abide-compile/SKILL.md +173 -0
- package/src/abide-hook.ts +23 -0
- package/src/bin.ts +64 -0
- package/src/commands/audit.ts +97 -0
- package/src/commands/bench.ts +226 -0
- package/src/commands/calibrate.ts +165 -0
- package/src/commands/check.ts +114 -0
- package/src/commands/compile.ts +127 -0
- package/src/commands/init.ts +109 -0
- package/src/commands/login.ts +61 -0
- package/src/commands/replay.ts +148 -0
- package/src/commands/report.ts +83 -0
- package/src/commands/rubric.ts +45 -0
- package/src/commands/uninstall.ts +33 -0
- package/src/hooks/postToolUse.ts +171 -0
- package/src/hooks/sessionStart.ts +100 -0
- package/src/hooks/stop.ts +275 -0
- package/src/hooks/turnStart.ts +36 -0
- package/src/lib/applyPatch.ts +75 -0
- package/src/lib/audit.ts +265 -0
- package/src/lib/band.ts +49 -0
- package/src/lib/calibration.ts +35 -0
- package/src/lib/checkRunner.ts +124 -0
- package/src/lib/claude.ts +35 -0
- package/src/lib/compilePrompt.ts +67 -0
- package/src/lib/constants.ts +39 -0
- package/src/lib/coverage.ts +21 -0
- package/src/lib/credentials.ts +104 -0
- package/src/lib/diff.ts +209 -0
- package/src/lib/events.ts +34 -0
- package/src/lib/git.ts +206 -0
- package/src/lib/hookRunner.ts +55 -0
- package/src/lib/hosts.ts +112 -0
- package/src/lib/jev.ts +223 -0
- package/src/lib/lintConfig.ts +53 -0
- package/src/lib/loadRules.ts +39 -0
- package/src/lib/opencodePlugin.ts +38 -0
- package/src/lib/output.ts +44 -0
- package/src/lib/packageRoot.ts +48 -0
- package/src/lib/paths.ts +96 -0
- package/src/lib/reason.ts +46 -0
- package/src/lib/regularFile.ts +96 -0
- package/src/lib/replay.ts +314 -0
- package/src/lib/replayCodex.ts +130 -0
- package/src/lib/replayOpencode.ts +186 -0
- package/src/lib/rubricFile.ts +99 -0
- package/src/lib/scope.ts +18 -0
- package/src/lib/session.ts +223 -0
- package/src/lib/settings.ts +112 -0
- package/src/lib/sources.ts +154 -0
- package/src/lib/stdin.ts +23 -0
- package/src/lib/transcript.ts +49 -0
- package/src/lib/ui.ts +38 -0
- package/src/ui/components/Buckets.tsx +30 -0
- package/src/ui/components/Callout.tsx +26 -0
- package/src/ui/components/Checklist.tsx +29 -0
- package/src/ui/components/Columns.tsx +62 -0
- package/src/ui/components/Header.tsx +35 -0
- package/src/ui/components/Live.tsx +73 -0
- package/src/ui/components/RuleTable.tsx +94 -0
- package/src/ui/components/Section.tsx +24 -0
- package/src/ui/components/Verdicts.tsx +40 -0
- package/src/ui/render.tsx +51 -0
- package/src/ui/theme.ts +65 -0
- package/src/ui/views/AuditView.tsx +140 -0
- package/src/ui/views/BenchView.tsx +87 -0
- package/src/ui/views/CalibrateView.tsx +108 -0
- package/src/ui/views/CheckView.tsx +56 -0
- package/src/ui/views/ErrorView.tsx +32 -0
- package/src/ui/views/HelpView.tsx +51 -0
- package/src/ui/views/InitView.tsx +103 -0
- package/src/ui/views/ReplayView.tsx +100 -0
- package/src/ui/views/ReportView.tsx +225 -0
- package/src/ui/views/RubricView.tsx +82 -0
package/dist/lib/ui.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const say = (line = "") => {
|
|
2
|
+
process.stdout.write(`${line}\n`);
|
|
3
|
+
};
|
|
4
|
+
export const warn = (line) => {
|
|
5
|
+
process.stderr.write(`${line}\n`);
|
|
6
|
+
};
|
|
7
|
+
export const table = (rows) => {
|
|
8
|
+
const widths = [];
|
|
9
|
+
for (const row of rows)
|
|
10
|
+
row.forEach((cell, i) => (widths[i] = Math.max(widths[i] ?? 0, cell.length)));
|
|
11
|
+
return rows
|
|
12
|
+
.map((row) => row.map((cell, i) => (i === row.length - 1 ? cell : cell.padEnd(widths[i] ?? 0))).join(" "))
|
|
13
|
+
.join("\n");
|
|
14
|
+
};
|
|
15
|
+
export const ms = (n) => n >= 1000 ? `${(n / 1000).toFixed(1)}s` : `${Math.round(n)}ms`;
|
|
16
|
+
export const usd = (n) => (n < 0.01 ? `$${n.toFixed(5)}` : `$${n.toFixed(3)}`);
|
|
17
|
+
export const median = (values) => {
|
|
18
|
+
if (values.length === 0)
|
|
19
|
+
return undefined;
|
|
20
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
21
|
+
const mid = Math.floor(sorted.length / 2);
|
|
22
|
+
const a = sorted[mid];
|
|
23
|
+
const b = sorted[mid - 1];
|
|
24
|
+
if (a === undefined)
|
|
25
|
+
return undefined;
|
|
26
|
+
return sorted.length % 2 === 1 || b === undefined ? a : (a + b) / 2;
|
|
27
|
+
};
|
|
28
|
+
export const percentile = (values, p) => {
|
|
29
|
+
if (values.length === 0)
|
|
30
|
+
return undefined;
|
|
31
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
32
|
+
return sorted[Math.min(sorted.length - 1, Math.ceil((p / 100) * sorted.length) - 1)];
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/lib/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Buckets.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Buckets.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAIlD,8DAA8D;AAC9D,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,IAAI,EAAE,CAAA;CAAE,+BAuB5D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { bucketCounts } from "../../lib/rubricFile.js";
|
|
4
|
+
import { glyph, palette } from "../theme.js";
|
|
5
|
+
/** One line: how many rules, and how each one is enforced. */
|
|
6
|
+
export function Buckets({ rules }) {
|
|
7
|
+
const c = bucketCounts(rules);
|
|
8
|
+
const part = (n, label, color) => (_jsxs(_Fragment, { children: [_jsxs(Text, { color: palette.mist, children: [" ", glyph.dotSep, " "] }), _jsx(Text, { color: n > 0 ? color : palette.ash, bold: n > 0, children: n }), _jsxs(Text, { color: n > 0 ? palette.cloud : palette.ash, children: [" ", label] })] }));
|
|
9
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: palette.cloud, bold: true, children: c.total }), _jsx(Text, { color: palette.cloud, children: " rules" }), part(c.model, "checked by Jev", palette.indigo), part(c.lint, "for your linter", palette.sage), part(c.deferred, "deferred", palette.ceramicWarm), part(c.unenforceable, "unenforceable", palette.ash)] }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=Buckets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Buckets.js","sourceRoot":"","sources":["../../../src/ui/components/Buckets.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7C,8DAA8D;AAC9D,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAA8B;IAC3D,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE,CAAC,CACxD,8BACE,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,kBAAI,KAAK,CAAC,MAAM,SAAS,EAClD,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,YAClD,CAAC,GACG,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,kBAAI,KAAK,IAAQ,IAChE,CACJ,CAAC;IACF,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,kBAC7B,CAAC,CAAC,KAAK,GACH,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,uBAAe,EACxC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,EAC/C,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,EAC7C,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,EACjD,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,IAChD,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import { type Tone } from "../theme.js";
|
|
3
|
+
type CalloutProps = {
|
|
4
|
+
tone: Tone;
|
|
5
|
+
title: string;
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
};
|
|
8
|
+
/** Something the reader should act on, boxed so it is not lost in a table. */
|
|
9
|
+
export declare function Callout({ tone, title, children }: CalloutProps): import("react").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=Callout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Callout.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Callout.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAoB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAE1D,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAExE,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,+BAkB9D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { glyph, toneColor } from "../theme.js";
|
|
4
|
+
/** Something the reader should act on, boxed so it is not lost in a table. */
|
|
5
|
+
export function Callout({ tone, title, children }) {
|
|
6
|
+
const color = toneColor[tone];
|
|
7
|
+
const mark = tone === "ok" ? glyph.check : tone === "bad" ? glyph.cross : glyph.dot;
|
|
8
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: color, paddingX: 1, marginBottom: 1, alignSelf: "flex-start", children: [_jsxs(Text, { color: color, bold: true, children: [mark, " ", title] }), children ? _jsx(Box, { flexDirection: "column", children: children }) : null] }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=Callout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Callout.js","sourceRoot":"","sources":["../../../src/ui/components/Callout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAa,MAAM,aAAa,CAAC;AAI1D,8EAA8E;AAC9E,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAgB;IAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IACpF,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,KAAK,EAClB,QAAQ,EAAE,CAAC,EACX,YAAY,EAAE,CAAC,EACf,SAAS,EAAC,YAAY,aAEtB,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,mBACrB,IAAI,OAAG,KAAK,IACR,EACN,QAAQ,CAAC,CAAC,CAAC,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YAAE,QAAQ,GAAO,CAAC,CAAC,CAAC,IAAI,IAC3D,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type Step = {
|
|
2
|
+
ok: boolean;
|
|
3
|
+
text: string;
|
|
4
|
+
detail?: string;
|
|
5
|
+
};
|
|
6
|
+
/** What happened, one line per step, so a person can see where an install stopped. */
|
|
7
|
+
export declare function Checklist({ steps }: {
|
|
8
|
+
steps: readonly Step[];
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=Checklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checklist.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Checklist.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,IAAI,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,IAAI,EAAE,CAAA;CAAE,+BAsB9D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { glyph, palette } from "../theme.js";
|
|
4
|
+
/** What happened, one line per step, so a person can see where an install stopped. */
|
|
5
|
+
export function Checklist({ steps }) {
|
|
6
|
+
return (_jsx(Box, { flexDirection: "column", children: steps.map((step, i) => (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: step.ok ? palette.sage : palette.rose, children: step.ok ? glyph.check : glyph.cross }), _jsxs(Text, { color: palette.cloud, children: [" ", step.text] })] }), step.detail ? (_jsx(Box, { paddingLeft: 2, children: _jsx(Text, { color: palette.ash, wrap: "truncate-end", children: step.detail }) })) : null] }, i))) }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=Checklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checklist.js","sourceRoot":"","sources":["../../../src/ui/components/Checklist.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI7C,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAA8B;IAC7D,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,MAAC,GAAG,IAAS,aAAa,EAAC,QAAQ,aACjC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,YAC/C,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAC/B,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,kBAAI,IAAI,CAAC,IAAI,IAAQ,IAC3C,EACL,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACb,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,YACjB,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAC,cAAc,YAC1C,IAAI,CAAC,MAAM,GACP,GACH,CACP,CAAC,CAAC,CAAC,IAAI,KAbA,CAAC,CAcL,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type Column = {
|
|
2
|
+
key: string;
|
|
3
|
+
label: string;
|
|
4
|
+
/** Fixed width, or omitted for the one column that takes what is left. */
|
|
5
|
+
width?: number;
|
|
6
|
+
align?: "left" | "right";
|
|
7
|
+
keep?: "head" | "tail";
|
|
8
|
+
};
|
|
9
|
+
export type Cell = {
|
|
10
|
+
text: string;
|
|
11
|
+
color?: string;
|
|
12
|
+
bold?: boolean;
|
|
13
|
+
dim?: boolean;
|
|
14
|
+
};
|
|
15
|
+
export type Row = Record<string, Cell>;
|
|
16
|
+
type ColumnsProps = {
|
|
17
|
+
columns: Column[];
|
|
18
|
+
rows: Row[];
|
|
19
|
+
indent?: number;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* A table that fits the terminal. Fixed columns keep their width whatever
|
|
23
|
+
* happens, the flexible one takes what is left, and every cell is cut with an
|
|
24
|
+
* ellipsis rather than wrapped, so a row is always one line.
|
|
25
|
+
*/
|
|
26
|
+
export declare function Columns({ columns, rows, indent }: ColumnsProps): import("react").JSX.Element;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=Columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Columns.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Columns.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AACnF,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAEvC,KAAK,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAKxE;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAU,EAAE,EAAE,YAAY,+BAoClE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useStdout } from "ink";
|
|
3
|
+
import { palette, truncate } from "../theme.js";
|
|
4
|
+
const GAP = 2;
|
|
5
|
+
const MIN_FLEX = 10;
|
|
6
|
+
/**
|
|
7
|
+
* A table that fits the terminal. Fixed columns keep their width whatever
|
|
8
|
+
* happens, the flexible one takes what is left, and every cell is cut with an
|
|
9
|
+
* ellipsis rather than wrapped, so a row is always one line.
|
|
10
|
+
*/
|
|
11
|
+
export function Columns({ columns, rows, indent = 0 }) {
|
|
12
|
+
const { stdout } = useStdout();
|
|
13
|
+
const available = Math.max(60, (stdout?.columns ?? 100) - indent - 1);
|
|
14
|
+
const fixed = columns.reduce((sum, c) => sum + (c.width ?? 0), 0) + GAP * (columns.length - 1);
|
|
15
|
+
const flexWidth = Math.max(MIN_FLEX, available - fixed);
|
|
16
|
+
const widthOf = (c) => c.width ?? flexWidth;
|
|
17
|
+
const cell = (c, content, header, last) => (_jsx(Box, { width: widthOf(c), flexShrink: 0, marginRight: last ? 0 : GAP, justifyContent: c.align === "right" ? "flex-end" : "flex-start", children: _jsx(Text, { color: header ? palette.ash : (content.color ?? palette.cloud), bold: content.bold, dimColor: content.dim, wrap: "truncate", children: truncate(content.text, widthOf(c), c.keep ?? "head") }) }, c.key));
|
|
18
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { children: columns.map((c, i) => cell(c, { text: c.label }, true, i === columns.length - 1)) }), rows.map((row, r) => (_jsx(Box, { children: columns.map((c, i) => cell(c, row[c.key] ?? { text: "" }, false, i === columns.length - 1)) }, r)))] }));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=Columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Columns.js","sourceRoot":"","sources":["../../../src/ui/components/Columns.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAgBhD,MAAM,GAAG,GAAG,CAAC,CAAC;AACd,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAgB;IACjE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,IAAI,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/F,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;IAC5D,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,OAAa,EAAE,MAAe,EAAE,IAAa,EAAE,EAAE,CAAC,CACzE,KAAC,GAAG,IAEF,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EACjB,UAAU,EAAE,CAAC,EACb,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAC3B,cAAc,EAAE,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,YAE/D,KAAC,IAAI,IACH,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,EAC9D,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,QAAQ,EAAE,OAAO,CAAC,GAAG,EACrB,IAAI,EAAC,UAAU,YAEd,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,GAChD,IAbF,CAAC,CAAC,GAAG,CAcN,CACP,CAAC;IACF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,cAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAO,EAC7F,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,KAAC,GAAG,cACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACpB,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CACrE,IAHO,CAAC,CAIL,CACP,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type HeaderProps = {
|
|
2
|
+
command: string;
|
|
3
|
+
/** Where this ran, on its own line: a person switching between repos should not have to guess. */
|
|
4
|
+
where?: string;
|
|
5
|
+
note?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function Header({ command, where, note }: HeaderProps): import("react").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Header.tsx"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kGAAkG;IAClG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,WAAW,+BAwB3D"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { glyph, palette } from "../theme.js";
|
|
4
|
+
export function Header({ command, where, note }) {
|
|
5
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: palette.teal, bold: true, children: "abide" }), _jsxs(Text, { color: palette.mist, children: [" ", glyph.dotSep, " "] }), _jsx(Text, { color: palette.cloud, bold: true, children: command })] }), where ? (_jsx(Text, { color: palette.ash, wrap: "truncate-start", children: where })) : null, note ? (_jsx(Text, { color: palette.mist, wrap: "wrap", children: note })) : null] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/ui/components/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAS7C,MAAM,UAAU,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAe;IAC1D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,4BAExB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,kBAAI,KAAK,CAAC,MAAM,SAAS,EAClD,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,kBAC7B,OAAO,GACH,IACH,EACL,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAC,gBAAgB,YAC5C,KAAK,GACD,CACR,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAC,MAAM,YACnC,IAAI,GACA,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export type Progress = (label: string) => void;
|
|
3
|
+
type LiveProps<T> = {
|
|
4
|
+
/** Shown above the spinner while `run` is going. */
|
|
5
|
+
header: ReactNode;
|
|
6
|
+
run: (progress: Progress) => Promise<T>;
|
|
7
|
+
done: (result: T) => ReactNode;
|
|
8
|
+
failed: (error: unknown) => ReactNode;
|
|
9
|
+
onExit?: (code: number) => void;
|
|
10
|
+
/** Redraw the progress line. Off on a pipe, where every frame would be printed as a new line. */
|
|
11
|
+
animate?: boolean;
|
|
12
|
+
};
|
|
13
|
+
/** Runs a job and draws its progress, then its result, then leaves. */
|
|
14
|
+
export declare function Live<T>({ header, run, done, failed, onExit, animate }: LiveProps<T>): import("react").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=Live.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Live.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Live.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5D,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAE/C,KAAK,SAAS,CAAC,CAAC,IAAI;IAClB,oDAAoD;IACpD,MAAM,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,CAAC;IAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,iGAAiG;IACjG,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAOF,uEAAuE;AACvE,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAc,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,+BAgD1F"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useApp } from "ink";
|
|
3
|
+
import Spinner from "ink-spinner";
|
|
4
|
+
import { useEffect, useState } from "react";
|
|
5
|
+
import { palette } from "../theme.js";
|
|
6
|
+
/** Runs a job and draws its progress, then its result, then leaves. */
|
|
7
|
+
export function Live({ header, run, done, failed, onExit, animate = true }) {
|
|
8
|
+
const { exit } = useApp();
|
|
9
|
+
const [state, setState] = useState({ kind: "running", label: "starting" });
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
let alive = true;
|
|
12
|
+
run((label) => {
|
|
13
|
+
if (alive && animate)
|
|
14
|
+
setState({ kind: "running", label });
|
|
15
|
+
})
|
|
16
|
+
.then((result) => {
|
|
17
|
+
if (alive)
|
|
18
|
+
setState({ kind: "done", result });
|
|
19
|
+
})
|
|
20
|
+
.catch((error) => {
|
|
21
|
+
if (alive)
|
|
22
|
+
setState({ kind: "failed", error });
|
|
23
|
+
});
|
|
24
|
+
return () => {
|
|
25
|
+
alive = false;
|
|
26
|
+
};
|
|
27
|
+
// The job runs once for the life of the view.
|
|
28
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29
|
+
}, []);
|
|
30
|
+
// Leave only after the final frame has been drawn, not in the same tick it was asked for.
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (state.kind === "running")
|
|
33
|
+
return;
|
|
34
|
+
onExit?.(state.kind === "done" ? 0 : 1);
|
|
35
|
+
exit();
|
|
36
|
+
}, [state.kind, exit, onExit]);
|
|
37
|
+
// The result view draws its own header, so the wrapper shows one only while there is nothing else to show.
|
|
38
|
+
return (_jsxs(Box, { flexDirection: "column", children: [state.kind === "running" ? header : null, state.kind === "running" ? (animate ? (_jsxs(Box, { children: [_jsx(Text, { color: palette.teal, children: _jsx(Spinner, { type: "dots" }) }), _jsxs(Text, { color: palette.mist, children: [" ", state.label] })] })) : (_jsx(Text, { color: palette.mist, children: "working" }))) : state.kind === "done" ? (done(state.result)) : (failed(state.error))] }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=Live.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Live.js","sourceRoot":"","sources":["../../../src/ui/components/Live.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAoBtC,uEAAuE;AACvE,MAAM,UAAU,IAAI,CAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,EAAgB;IACzF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAW,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACrF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,IAAI,KAAK,IAAI,OAAO;gBAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC;aACC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,KAAK;gBAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,KAAK;gBAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC,CAAC;QACF,8CAA8C;QAC9C,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,0FAA0F;IAC1F,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO;QACrC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,EAAE,CAAC;IACT,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/B,2GAA2G;IAC3G,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EACxC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAC1B,OAAO,CAAC,CAAC,CAAC,CACR,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,YACvB,KAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,GAClB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,kBAAI,KAAK,CAAC,KAAK,IAAQ,IAC5C,CACP,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,wBAAgB,CAC1C,CACF,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CACnB,CAAC,CAAC,CAAC,CACF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CACpB,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Rule } from "@coldtea/abide-schema";
|
|
2
|
+
export type RuleStats = {
|
|
3
|
+
checks: number;
|
|
4
|
+
fired: number;
|
|
5
|
+
flagged: number;
|
|
6
|
+
};
|
|
7
|
+
type RuleTableProps = {
|
|
8
|
+
rules: readonly Rule[];
|
|
9
|
+
stats?: ReadonlyMap<string, RuleStats>;
|
|
10
|
+
/** Only rules abide checks: the model ones. */
|
|
11
|
+
runnableOnly?: boolean;
|
|
12
|
+
};
|
|
13
|
+
export declare function RuleTable({ rules, stats, runnableOnly }: RuleTableProps): import("react").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=RuleTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuleTable.d.ts","sourceRoot":"","sources":["../../../src/ui/components/RuleTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,uBAAuB,CAAC;AAK9D,MAAM,MAAM,SAAS,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA8C3E,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,YAAoB,EAAE,EAAE,cAAc,+BAmC/E"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { assertNever } from "@coldtea/abide-schema";
|
|
3
|
+
import { Columns } from "./Columns.js";
|
|
4
|
+
import { glyph, meter, palette, scopeLabel } from "../theme.js";
|
|
5
|
+
const statusCell = (status) => {
|
|
6
|
+
switch (status) {
|
|
7
|
+
case "active":
|
|
8
|
+
return { text: `${glyph.dot} active`, color: palette.sage };
|
|
9
|
+
case "weak":
|
|
10
|
+
return { text: `${glyph.dot} weak`, color: palette.amber, bold: true };
|
|
11
|
+
case "noisy":
|
|
12
|
+
return { text: `${glyph.dot} noisy`, color: palette.rose, bold: true };
|
|
13
|
+
case "disabled":
|
|
14
|
+
return { text: `${glyph.ring} off`, color: palette.ash };
|
|
15
|
+
default:
|
|
16
|
+
return assertNever(status);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const checkCell = (rule) => {
|
|
20
|
+
switch (rule.check.type) {
|
|
21
|
+
case "lint":
|
|
22
|
+
return { text: "linter", color: palette.sage };
|
|
23
|
+
case "model":
|
|
24
|
+
return { text: `jev ${rule.check.question.type}`, color: palette.indigo };
|
|
25
|
+
case "deferred":
|
|
26
|
+
return { text: "deferred", color: palette.ceramicWarm };
|
|
27
|
+
case "unenforceable":
|
|
28
|
+
return { text: "unenforceable", color: palette.ash };
|
|
29
|
+
default:
|
|
30
|
+
return assertNever(rule.check);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const whenCell = (rule) => {
|
|
34
|
+
if (rule.check.type === "model")
|
|
35
|
+
return { text: rule.when ?? "", color: rule.when === "turn" ? palette.plum : palette.mist };
|
|
36
|
+
return { text: "", color: palette.ash };
|
|
37
|
+
};
|
|
38
|
+
const calibrationCell = (rule) => {
|
|
39
|
+
const c = rule.calibration;
|
|
40
|
+
if (!c || c.verdict === "skipped")
|
|
41
|
+
return { text: c ? "skipped" : "", color: palette.ash };
|
|
42
|
+
const color = c.verdict === "decisive" ? palette.mist : c.verdict === "weak" ? palette.amber : palette.rose;
|
|
43
|
+
return { text: `${meter(c.median, 6)} ${c.median.toFixed(2)}`, color };
|
|
44
|
+
};
|
|
45
|
+
export function RuleTable({ rules, stats, runnableOnly = false }) {
|
|
46
|
+
const shown = runnableOnly ? rules.filter((r) => r.check.type === "model") : rules;
|
|
47
|
+
const columns = [
|
|
48
|
+
{ key: "id", label: "rule", width: 30 },
|
|
49
|
+
{ key: "check", label: "check", width: 12 },
|
|
50
|
+
{ key: "when", label: "when", width: 4 },
|
|
51
|
+
{ key: "status", label: "status", width: 9 },
|
|
52
|
+
...(stats
|
|
53
|
+
? [{ key: "fired", label: "fired / checks", width: 14, align: "right" }]
|
|
54
|
+
: []),
|
|
55
|
+
{ key: "cal", label: "calibration", width: 12 },
|
|
56
|
+
{ key: "scope", label: "scope" },
|
|
57
|
+
];
|
|
58
|
+
const rows = shown.map((rule) => {
|
|
59
|
+
const s = stats?.get(rule.id);
|
|
60
|
+
return {
|
|
61
|
+
id: {
|
|
62
|
+
text: rule.id,
|
|
63
|
+
color: rule.status === "active" ? palette.cloud : palette.mist,
|
|
64
|
+
bold: rule.status === "active",
|
|
65
|
+
},
|
|
66
|
+
check: checkCell(rule),
|
|
67
|
+
when: whenCell(rule),
|
|
68
|
+
status: statusCell(rule.status),
|
|
69
|
+
fired: s
|
|
70
|
+
? {
|
|
71
|
+
text: `${s.fired} / ${s.checks}`,
|
|
72
|
+
color: s.fired > 0 ? palette.rose : s.checks > 0 ? palette.mist : palette.ash,
|
|
73
|
+
}
|
|
74
|
+
: { text: "", color: palette.ash },
|
|
75
|
+
cal: calibrationCell(rule),
|
|
76
|
+
scope: { text: scopeLabel(rule.scope), color: rule.scope ? palette.mist : palette.ash },
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
return _jsx(Columns, { columns: columns, rows: rows, indent: 2 });
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=RuleTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuleTable.js","sourceRoot":"","sources":["../../../src/ui/components/RuleTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
type SectionProps = {
|
|
3
|
+
title: string;
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
aside?: string;
|
|
6
|
+
};
|
|
7
|
+
/** A titled block with a thin teal rule down its left, so a long report scans in pieces. */
|
|
8
|
+
export declare function Section({ title, aside, children }: SectionProps): import("react").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=Section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Section.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,4FAA4F;AAC5F,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,+BAgB/D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { glyph, palette } from "../theme.js";
|
|
4
|
+
/** A titled block with a thin teal rule down its left, so a long report scans in pieces. */
|
|
5
|
+
export function Section({ title, aside, children }) {
|
|
6
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: palette.teal, children: glyph.bar }), _jsxs(Text, { color: palette.cloud, bold: true, children: [" ", title] }), aside ? _jsxs(Text, { color: palette.mist, children: [" ", aside] }) : null] }), _jsx(Box, { flexDirection: "column", paddingLeft: 2, children: children })] }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=Section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Section.js","sourceRoot":"","sources":["../../../src/ui/components/Section.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI7C,4FAA4F;AAC5F,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAgB;IAC9D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,YAAG,KAAK,CAAC,GAAG,GAAQ,EAC7C,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,mBAC7B,GAAG,EACH,KAAK,IACD,EACN,KAAK,CAAC,CAAC,CAAC,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,kBAAI,KAAK,IAAQ,CAAC,CAAC,CAAC,IAAI,IACtD,EACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,YACvC,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Verdict } from "@coldtea/abide-schema";
|
|
2
|
+
type VerdictsProps = {
|
|
3
|
+
verdicts: readonly Verdict[];
|
|
4
|
+
all?: boolean;
|
|
5
|
+
};
|
|
6
|
+
/** Verdicts as meters, loudest first. Clear ones fold into one quiet line unless asked for. */
|
|
7
|
+
export declare function Verdicts({ verdicts, all }: VerdictsProps): import("react").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=Verdicts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Verdicts.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Verdicts.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAMrD,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAErE,+FAA+F;AAC/F,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAW,EAAE,EAAE,aAAa,+BA6BhE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { glyph, meter, palette } from "../theme.js";
|
|
4
|
+
const bandColor = (band) => band === "act" ? palette.rose : band === "flag" ? palette.amber : palette.mist;
|
|
5
|
+
/** Verdicts as meters, loudest first. Clear ones fold into one quiet line unless asked for. */
|
|
6
|
+
export function Verdicts({ verdicts, all = false }) {
|
|
7
|
+
const sorted = [...verdicts].sort((a, b) => b.probability - a.probability);
|
|
8
|
+
const shown = all ? sorted : sorted.filter((v) => v.band !== "clear");
|
|
9
|
+
const hidden = sorted.length - shown.length;
|
|
10
|
+
return (_jsxs(Box, { flexDirection: "column", children: [shown.map((v) => (_jsxs(Box, { children: [_jsx(Text, { color: bandColor(v.band), children: meter(v.probability) }), _jsxs(Text, { color: bandColor(v.band), bold: v.band === "act", children: [" ", v.probability.toFixed(2)] }), _jsxs(Text, { color: v.band === "clear" ? palette.mist : palette.cloud, bold: v.band === "act", children: [" ", v.ruleId] }), v.answer ? _jsxs(Text, { color: palette.ash, children: [" ", v.answer] }) : null] }, v.ruleId))), hidden > 0 ? (_jsxs(Text, { color: palette.ash, children: [glyph.check, " ", hidden, " ", hidden === 1 ? "rule" : "rules", " clear"] })) : shown.length === 0 ? (_jsxs(Text, { color: palette.sage, children: [glyph.check, " nothing to report"] })) : null] }));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=Verdicts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Verdicts.js","sourceRoot":"","sources":["../../../src/ui/components/Verdicts.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,SAAS,GAAG,CAAC,IAAqB,EAAU,EAAE,CAClD,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;AAIjF,+FAA+F;AAC/F,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,KAAK,EAAiB;IAC/D,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5C,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAQ,EAC7D,MAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,aACnD,GAAG,EACH,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IACpB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,aACnF,IAAI,EACJ,CAAC,CAAC,MAAM,IACJ,EACN,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,GAAG,kBAAI,CAAC,CAAC,MAAM,IAAQ,CAAC,CAAC,CAAC,IAAI,KAVvD,CAAC,CAAC,MAAM,CAWZ,CACP,CAAC,EACD,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACZ,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,GAAG,aACrB,KAAK,CAAC,KAAK,OAAG,MAAM,OAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,cAClD,CACR,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvB,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,aAAG,KAAK,CAAC,KAAK,0BAA0B,CAClE,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ReactElement, ReactNode } from "react";
|
|
2
|
+
import { type Progress } from "./components/Live.js";
|
|
3
|
+
/**
|
|
4
|
+
* Draws a finished view once and leaves. Ink prints the final frame on a pipe
|
|
5
|
+
* too, so `abide report | less` still reads well. Nothing in the hooks goes
|
|
6
|
+
* through here: their stdout belongs to the host.
|
|
7
|
+
*/
|
|
8
|
+
export declare const showStatic: (element: ReactElement) => Promise<void>;
|
|
9
|
+
type LiveJob<T> = {
|
|
10
|
+
header: ReactNode;
|
|
11
|
+
run: (progress: Progress) => Promise<T>;
|
|
12
|
+
done: (result: T) => ReactNode;
|
|
13
|
+
/** Exit code once the result is drawn. */
|
|
14
|
+
code?: (result: T) => number;
|
|
15
|
+
};
|
|
16
|
+
/** Runs a job under a spinner, draws its result, and resolves to the exit code. */
|
|
17
|
+
export declare const showLive: <T>(job: LiveJob<T>) => Promise<number>;
|
|
18
|
+
export declare const showError: (error: unknown) => Promise<void>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/ui/render.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG3D;;;;GAIG;AACH,eAAO,MAAM,UAAU,YAAmB,YAAY,KAAG,OAAO,CAAC,IAAI,CAIpE,CAAC;AAEF,KAAK,OAAO,CAAC,CAAC,IAAI;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,CAAC;IAC/B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;CAC9B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,QAAQ,GAAU,CAAC,OAAQ,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,MAAM,CAqBlE,CAAC;AAEF,eAAO,MAAM,SAAS,UAAiB,OAAO,KAAG,OAAO,CAAC,IAAI,CAE5D,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { render } from "ink";
|
|
3
|
+
import { Live } from "./components/Live.js";
|
|
4
|
+
import { ErrorView } from "./views/ErrorView.js";
|
|
5
|
+
/**
|
|
6
|
+
* Draws a finished view once and leaves. Ink prints the final frame on a pipe
|
|
7
|
+
* too, so `abide report | less` still reads well. Nothing in the hooks goes
|
|
8
|
+
* through here: their stdout belongs to the host.
|
|
9
|
+
*/
|
|
10
|
+
export const showStatic = async (element) => {
|
|
11
|
+
const instance = render(element, { patchConsole: false, exitOnCtrlC: true });
|
|
12
|
+
instance.unmount();
|
|
13
|
+
await instance.waitUntilExit();
|
|
14
|
+
};
|
|
15
|
+
/** Runs a job under a spinner, draws its result, and resolves to the exit code. */
|
|
16
|
+
export const showLive = async (job) => {
|
|
17
|
+
const outcome = { code: 0 };
|
|
18
|
+
const instance = render(_jsx(Live, { header: job.header, run: job.run, done: (result) => {
|
|
19
|
+
outcome.result = { value: result };
|
|
20
|
+
return job.done(result);
|
|
21
|
+
}, failed: (error) => _jsx(ErrorView, { error: error }), onExit: (exitCode) => {
|
|
22
|
+
outcome.code = exitCode;
|
|
23
|
+
}, animate: Boolean(process.stdout.isTTY) }), { patchConsole: false, exitOnCtrlC: true });
|
|
24
|
+
await instance.waitUntilExit();
|
|
25
|
+
if (outcome.result !== undefined && job.code)
|
|
26
|
+
return job.code(outcome.result.value);
|
|
27
|
+
return outcome.code;
|
|
28
|
+
};
|
|
29
|
+
export const showError = async (error) => {
|
|
30
|
+
await showStatic(_jsx(ErrorView, { error: error }));
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/ui/render.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAiB,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,OAAqB,EAAiB,EAAE;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC;AACjC,CAAC,CAAC;AAUF,mFAAmF;AACnF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAM,GAAe,EAAmB,EAAE;IACrE,MAAM,OAAO,GAA4C,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACrE,MAAM,QAAQ,GAAG,MAAM,CACrB,KAAC,IAAI,IACH,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,GAAG,EAAE,GAAG,CAAC,GAAG,EACZ,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;YACf,OAAO,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YACnC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,EACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,GAAI,EAC9C,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;YACnB,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC1B,CAAC,EACD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GACtC,EACF,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAC3C,CAAC;IACF,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpF,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,KAAc,EAAiB,EAAE;IAC/D,MAAM,UAAU,CAAC,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC,CAAC;AAChD,CAAC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** Coldtea's palette, as a terminal can show it. Truecolor where available; chalk degrades the rest. */
|
|
2
|
+
export declare const palette: {
|
|
3
|
+
readonly teal: "#3da5a8";
|
|
4
|
+
readonly tealLight: "#58c4c8";
|
|
5
|
+
readonly sage: "#5cbd68";
|
|
6
|
+
readonly ceramic: "#d8c4a0";
|
|
7
|
+
readonly ceramicWarm: "#c4a46e";
|
|
8
|
+
readonly amber: "#d49a50";
|
|
9
|
+
readonly amberBright: "#e0ac62";
|
|
10
|
+
readonly rose: "#c9627d";
|
|
11
|
+
readonly plum: "#a468c2";
|
|
12
|
+
readonly indigo: "#6876d8";
|
|
13
|
+
readonly copper: "#b97b47";
|
|
14
|
+
readonly mist: "#8d96a3";
|
|
15
|
+
readonly ash: "#5a6370";
|
|
16
|
+
readonly cloud: "#cdd3dc";
|
|
17
|
+
readonly paper: "#f0ece6";
|
|
18
|
+
};
|
|
19
|
+
export type Tone = "accent" | "ok" | "warn" | "bad" | "info" | "muted" | "text" | "highlight";
|
|
20
|
+
export declare const toneColor: Record<Tone, string>;
|
|
21
|
+
export declare const glyph: {
|
|
22
|
+
readonly dot: "●";
|
|
23
|
+
readonly ring: "○";
|
|
24
|
+
readonly check: "✓";
|
|
25
|
+
readonly cross: "✗";
|
|
26
|
+
readonly arrow: "→";
|
|
27
|
+
readonly bar: "▎";
|
|
28
|
+
readonly dotSep: "·";
|
|
29
|
+
readonly ellipsis: "…";
|
|
30
|
+
};
|
|
31
|
+
/** Cuts a string to fit, keeping the tail readable when the head is the boring part. */
|
|
32
|
+
export declare const truncate: (value: string, max: number, keep?: "head" | "tail") => string;
|
|
33
|
+
/** A probability as a small bar: filled tenths, in the band's colour. */
|
|
34
|
+
export declare const meter: (probability: number, width?: number) => string;
|
|
35
|
+
/** Globs as a person reads them: a list of whole-tree extension globs becomes `ts, tsx`; anything else stays a glob. */
|
|
36
|
+
export declare const scopeLabel: (scope: readonly string[] | undefined) => string;
|
|
37
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,eAAO,MAAM,OAAO;aAClB,IAAI,EAAE,SAAS;aACf,SAAS,EAAE,SAAS;aACpB,IAAI,EAAE,SAAS;aACf,OAAO,EAAE,SAAS;aAClB,WAAW,EAAE,SAAS;aACtB,KAAK,EAAE,SAAS;aAChB,WAAW,EAAE,SAAS;aACtB,IAAI,EAAE,SAAS;aACf,IAAI,EAAE,SAAS;aACf,MAAM,EAAE,SAAS;aACjB,MAAM,EAAE,SAAS;aACjB,IAAI,EAAE,SAAS;aACf,GAAG,EAAE,SAAS;aACd,KAAK,EAAE,SAAS;aAChB,KAAK,EAAE,SAAS;CACR,CAAC;AAEX,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9F,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAS1C,CAAC;AAEF,eAAO,MAAM,KAAK;aAChB,GAAG,EAAE,GAAG;aACR,IAAI,EAAE,GAAG;aACT,KAAK,EAAE,GAAG;aACV,KAAK,EAAE,GAAG;aACV,KAAK,EAAE,GAAG;aACV,GAAG,EAAE,GAAG;aACR,MAAM,EAAE,GAAG;aACX,QAAQ,EAAE,GAAG;CACL,CAAC;AAEX,wFAAwF;AACxF,eAAO,MAAM,QAAQ,UAAW,MAAM,OAAO,MAAM,SAAQ,MAAM,GAAG,MAAM,KAAY,MAMrF,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,KAAK,gBAAiB,MAAM,qBAAe,MAGvD,CAAC;AAEF,wHAAwH;AACxH,eAAO,MAAM,UAAU,UAAW,SAAS,MAAM,EAAE,GAAG,SAAS,KAAG,MAKjE,CAAC"}
|