@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
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { parseArgs } from "node:util";
|
|
2
|
+
import { readEvents } from "../lib/events.js";
|
|
3
|
+
import { loadRules } from "../lib/loadRules.js";
|
|
4
|
+
import { findRepoRoot } from "../lib/paths.js";
|
|
5
|
+
import { say } from "../lib/ui.js";
|
|
6
|
+
import { showStatic } from "../ui/render.js";
|
|
7
|
+
import { ReportView } from "../ui/views/ReportView.js";
|
|
8
|
+
import { InitView } from "../ui/views/InitView.js";
|
|
9
|
+
const statsFrom = (events) => {
|
|
10
|
+
const stats = new Map();
|
|
11
|
+
for (const event of events) {
|
|
12
|
+
if (event.kind !== "check")
|
|
13
|
+
continue;
|
|
14
|
+
for (const v of event.verdicts) {
|
|
15
|
+
const s = stats.get(v.ruleId) ?? { checks: 0, fired: 0, flagged: 0 };
|
|
16
|
+
s.checks += 1;
|
|
17
|
+
if (v.band === "act")
|
|
18
|
+
s.fired += 1;
|
|
19
|
+
if (v.band === "flag")
|
|
20
|
+
s.flagged += 1;
|
|
21
|
+
stats.set(v.ruleId, s);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return stats;
|
|
25
|
+
};
|
|
26
|
+
const MIN_CHECKS_TO_CALL_DEAD = 20;
|
|
27
|
+
export const collectReport = (root) => {
|
|
28
|
+
const loaded = loadRules(root);
|
|
29
|
+
if (loaded.rules.length === 0)
|
|
30
|
+
return undefined;
|
|
31
|
+
const events = readEvents(root);
|
|
32
|
+
const stats = statsFrom(events);
|
|
33
|
+
// Dead means it never answers: no fire, no flag, and a calibration that
|
|
34
|
+
// never cleared confidently either. A rule at 0.02 on every check is not
|
|
35
|
+
// dead, it is a rule nobody has broken yet.
|
|
36
|
+
const dead = loaded.rules.filter((rule) => {
|
|
37
|
+
const s = stats.get(rule.id);
|
|
38
|
+
const middling = rule.calibration === undefined || rule.calibration.median >= 0.25;
|
|
39
|
+
return (rule.status === "active" &&
|
|
40
|
+
rule.check.type === "model" &&
|
|
41
|
+
middling &&
|
|
42
|
+
s !== undefined &&
|
|
43
|
+
s.checks >= MIN_CHECKS_TO_CALL_DEAD &&
|
|
44
|
+
s.fired === 0 &&
|
|
45
|
+
s.flagged === 0);
|
|
46
|
+
});
|
|
47
|
+
return { root, rules: loaded.rules, events, stats, dead, problems: loaded.problems };
|
|
48
|
+
};
|
|
49
|
+
/** Rules, calibration, and what has fired so far in this repository. */
|
|
50
|
+
export const runReport = async (argv) => {
|
|
51
|
+
const { values } = parseArgs({
|
|
52
|
+
args: argv,
|
|
53
|
+
options: { json: { type: "boolean", default: false } },
|
|
54
|
+
});
|
|
55
|
+
const root = findRepoRoot(process.cwd());
|
|
56
|
+
const data = collectReport(root);
|
|
57
|
+
if (data === undefined) {
|
|
58
|
+
if (values.json) {
|
|
59
|
+
say(JSON.stringify({ root, rules: [], events: [] }));
|
|
60
|
+
return 1;
|
|
61
|
+
}
|
|
62
|
+
await showStatic(InitView({ data: { kind: "no-sources", root } }));
|
|
63
|
+
return 1;
|
|
64
|
+
}
|
|
65
|
+
if (values.json) {
|
|
66
|
+
say(JSON.stringify({
|
|
67
|
+
root: data.root,
|
|
68
|
+
rules: data.rules,
|
|
69
|
+
stats: Object.fromEntries(data.stats),
|
|
70
|
+
dead: data.dead.map((r) => r.id),
|
|
71
|
+
events: data.events.length,
|
|
72
|
+
}));
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
await showStatic(ReportView({ data }));
|
|
76
|
+
return 0;
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubric.d.ts","sourceRoot":"","sources":["../../src/commands/rubric.ts"],"names":[],"mappings":"AAOA,2FAA2F;AAC3F,eAAO,MAAM,SAAS,SAAgB,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,CAoC9D,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { parseArgs } from "node:util";
|
|
2
|
+
import { AbideError } from "@coldtea/abide-schema";
|
|
3
|
+
import { findRepoRoot, globalRubricPath, homeDir, rubricPath } from "../lib/paths.js";
|
|
4
|
+
import { fillSourceShas, readRubric, writeRubric } from "../lib/rubricFile.js";
|
|
5
|
+
import { showStatic } from "../ui/render.js";
|
|
6
|
+
import { RubricView } from "../ui/views/RubricView.js";
|
|
7
|
+
/** Parses the rubric the agent just wrote, fills in real source hashes, writes it back. */
|
|
8
|
+
export const runRubric = async (argv) => {
|
|
9
|
+
const { values, positionals } = parseArgs({
|
|
10
|
+
args: argv,
|
|
11
|
+
allowPositionals: true,
|
|
12
|
+
options: { global: { type: "boolean", default: false } },
|
|
13
|
+
});
|
|
14
|
+
const sub = positionals[0] ?? "validate";
|
|
15
|
+
if (sub !== "validate")
|
|
16
|
+
throw new AbideError("RUBRIC_INVALID", `unknown rubric command "${sub}"; try: abide rubric validate`);
|
|
17
|
+
const root = values.global ? homeDir() : findRepoRoot(process.cwd());
|
|
18
|
+
const file = values.global ? globalRubricPath() : rubricPath(root);
|
|
19
|
+
const read = readRubric(file);
|
|
20
|
+
switch (read.kind) {
|
|
21
|
+
case "missing":
|
|
22
|
+
throw new AbideError("RUBRIC_MISSING", `${file} does not exist yet`);
|
|
23
|
+
case "invalid":
|
|
24
|
+
await showStatic(RubricView({ data: { kind: "invalid", root, file, issues: read.issues } }));
|
|
25
|
+
return 1;
|
|
26
|
+
case "ok": {
|
|
27
|
+
const { rubric, missing } = fillSourceShas(read.rubric, root);
|
|
28
|
+
const listed = new Set(rubric.sources.map((s) => s.path));
|
|
29
|
+
const orphaned = rubric.rules
|
|
30
|
+
.filter((r) => !listed.has(r.source.path))
|
|
31
|
+
.map((r) => `${r.id} (${r.source.path})`);
|
|
32
|
+
writeRubric(file, rubric);
|
|
33
|
+
await showStatic(RubricView({ data: { kind: "ok", root, file, rules: rubric.rules, missing, orphaned } }));
|
|
34
|
+
return missing.length + orphaned.length > 0 ? 1 : 0;
|
|
35
|
+
}
|
|
36
|
+
default:
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=rubric.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubric.js","sourceRoot":"","sources":["../../src/commands/rubric.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,YAAY,SAAgB,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,CAyBjE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { parseArgs } from "node:util";
|
|
2
|
+
import { HOSTS } from "@coldtea/abide-schema";
|
|
3
|
+
import { hostLabel, parseHost, uninstallHost } from "../lib/hosts.js";
|
|
4
|
+
import { findRepoRoot } from "../lib/paths.js";
|
|
5
|
+
import { Callout } from "../ui/components/Callout.js";
|
|
6
|
+
import { showStatic } from "../ui/render.js";
|
|
7
|
+
export const runUninstall = async (argv) => {
|
|
8
|
+
const { values, positionals } = parseArgs({
|
|
9
|
+
args: argv,
|
|
10
|
+
allowPositionals: true,
|
|
11
|
+
options: { project: { type: "boolean", default: false } },
|
|
12
|
+
});
|
|
13
|
+
const root = findRepoRoot(process.cwd());
|
|
14
|
+
const hosts = positionals.length > 0 ? [...new Set(positionals.map(parseHost))] : [...HOSTS];
|
|
15
|
+
const removed = hosts.map((host) => ({
|
|
16
|
+
host,
|
|
17
|
+
count: uninstallHost(host, root, values.project),
|
|
18
|
+
}));
|
|
19
|
+
const touched = removed.filter((r) => r.count > 0);
|
|
20
|
+
await showStatic(touched.length === 0
|
|
21
|
+
? Callout({
|
|
22
|
+
tone: "muted",
|
|
23
|
+
title: "No abide entries found for " + hosts.map(hostLabel).join(", "),
|
|
24
|
+
})
|
|
25
|
+
: Callout({
|
|
26
|
+
tone: "ok",
|
|
27
|
+
title: `Removed abide from ${touched.map((r) => hostLabel(r.host)).join(", ")}. Your rubric files are untouched.`,
|
|
28
|
+
}));
|
|
29
|
+
return 0;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,IAAc,EAAmB,EAAE;IACpE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;QACxC,IAAI,EAAE,IAAI;QACV,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;KAC1D,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI;QACJ,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC;KACjD,CAAC,CAAC,CAAC;IACJ,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,UAAU,CACd,OAAO,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,CAAC,OAAO,CAAC;YACN,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,6BAA6B,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SACvE,CAAC;QACJ,CAAC,CAAC,OAAO,CAAC;YACN,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,sBAAsB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC;SAClH,CAAC,CACP,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postToolUse.d.ts","sourceRoot":"","sources":["../../src/hooks/postToolUse.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,UAAU,EAGhB,MAAM,uBAAuB,CAAC;AAyB/B,eAAO,MAAM,iBAAiB,QAAe,OAAO,KAAG,OAAO,CAAC,UAAU,CAwIxE,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { createBlobId, createBlockKey, isAbideError, postToolUseInputSchema, turnIdOf, } from "@coldtea/abide-schema";
|
|
2
|
+
import { runCheck } from "../lib/checkRunner.js";
|
|
3
|
+
import { EDIT_CHECK_TIMEOUT_MS, MAX_BLOCKS_PER_RULE_PER_TURN } from "../lib/constants.js";
|
|
4
|
+
import { hasApiKey } from "../lib/credentials.js";
|
|
5
|
+
import { boundState, editsFromPostToolUse } from "../lib/diff.js";
|
|
6
|
+
import { appendEvent } from "../lib/events.js";
|
|
7
|
+
import { loadRules } from "../lib/loadRules.js";
|
|
8
|
+
import { debug } from "../lib/output.js";
|
|
9
|
+
import { findRepoRoot, isExcludedPath, relativeToRoot } from "../lib/paths.js";
|
|
10
|
+
import { flagNotice, repairReason } from "../lib/reason.js";
|
|
11
|
+
import { blockCount, incrementBlock, readPrompt, recordBlockedFile, recordChecked, recordFileStart, turnDir, } from "../lib/session.js";
|
|
12
|
+
import { lastUserPrompt } from "../lib/transcript.js";
|
|
13
|
+
export const handlePostToolUse = async (raw) => {
|
|
14
|
+
const parsed = postToolUseInputSchema.safeParse(raw);
|
|
15
|
+
if (!parsed.success)
|
|
16
|
+
return { kind: "silent" };
|
|
17
|
+
const input = parsed.data;
|
|
18
|
+
const started = performance.now();
|
|
19
|
+
const at = new Date().toISOString();
|
|
20
|
+
const all = editsFromPostToolUse(input);
|
|
21
|
+
const root = findRepoRoot(all[0]?.filePath ?? input.cwd);
|
|
22
|
+
const edits = all.filter((e) => !isExcludedPath(relativeToRoot(root, e.filePath)));
|
|
23
|
+
if (edits.length === 0)
|
|
24
|
+
return { kind: "silent" };
|
|
25
|
+
const turn = turnDir(input.session_id, turnIdOf(input));
|
|
26
|
+
for (const edit of edits)
|
|
27
|
+
recordFileStart(turn, edit.filePath, edit.original);
|
|
28
|
+
const loaded = loadRules(root);
|
|
29
|
+
for (const problem of loaded.problems)
|
|
30
|
+
debug(problem);
|
|
31
|
+
if (loaded.rules.length === 0)
|
|
32
|
+
return { kind: "silent" };
|
|
33
|
+
const checkable = [];
|
|
34
|
+
for (const edit of edits) {
|
|
35
|
+
const relative = relativeToRoot(root, edit.filePath);
|
|
36
|
+
if (edit.text === undefined) {
|
|
37
|
+
appendEvent(root, {
|
|
38
|
+
kind: "skip",
|
|
39
|
+
at,
|
|
40
|
+
phase: "edit",
|
|
41
|
+
sessionId: input.session_id,
|
|
42
|
+
reason: "diff too large to compute in time",
|
|
43
|
+
files: [relative],
|
|
44
|
+
});
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const { text: diff } = boundState(edit.text);
|
|
48
|
+
if (diff.trim() !== "")
|
|
49
|
+
checkable.push({ edit, relative, diff });
|
|
50
|
+
}
|
|
51
|
+
if (checkable.length === 0)
|
|
52
|
+
return { kind: "silent" };
|
|
53
|
+
const files = checkable.map((c) => c.relative);
|
|
54
|
+
if (!hasApiKey(root)) {
|
|
55
|
+
appendEvent(root, {
|
|
56
|
+
kind: "skip",
|
|
57
|
+
at,
|
|
58
|
+
phase: "edit",
|
|
59
|
+
sessionId: input.session_id,
|
|
60
|
+
reason: "no api key",
|
|
61
|
+
files,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const task = lastUserPrompt(input.transcript_path ?? undefined) ?? readPrompt(turn);
|
|
65
|
+
let checked;
|
|
66
|
+
try {
|
|
67
|
+
checked = await Promise.all(checkable.map(async ({ edit, relative, diff }) => ({
|
|
68
|
+
edit,
|
|
69
|
+
relative,
|
|
70
|
+
outcome: await runCheck({
|
|
71
|
+
phase: "edit",
|
|
72
|
+
fileDiffs: [{ file: relative, text: diff }],
|
|
73
|
+
task,
|
|
74
|
+
rules: loaded.rules,
|
|
75
|
+
thresholds: loaded.thresholds,
|
|
76
|
+
timeoutMs: EDIT_CHECK_TIMEOUT_MS,
|
|
77
|
+
}),
|
|
78
|
+
})));
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
appendEvent(root, {
|
|
82
|
+
kind: "error",
|
|
83
|
+
at,
|
|
84
|
+
phase: "edit",
|
|
85
|
+
sessionId: input.session_id,
|
|
86
|
+
code: isAbideError(error) ? error.code : "CHECK_FAILED",
|
|
87
|
+
message: error instanceof Error ? error.message : String(error),
|
|
88
|
+
latencyMs: Math.round(performance.now() - started),
|
|
89
|
+
});
|
|
90
|
+
return { kind: "silent" };
|
|
91
|
+
}
|
|
92
|
+
for (const { edit, relative } of checked) {
|
|
93
|
+
if (edit.after === null)
|
|
94
|
+
continue;
|
|
95
|
+
recordChecked(turn, {
|
|
96
|
+
path: relative,
|
|
97
|
+
before: edit.original === null ? null : createBlobId(edit.original),
|
|
98
|
+
after: createBlobId(edit.after),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const byId = new Map(loaded.rules.map((r) => [r.id, r]));
|
|
102
|
+
const acting = [];
|
|
103
|
+
const flagged = [];
|
|
104
|
+
const actedOn = [];
|
|
105
|
+
for (const { relative, outcome } of checked) {
|
|
106
|
+
const pairs = (band) => outcome.verdicts.flatMap((verdict) => {
|
|
107
|
+
const rule = byId.get(verdict.ruleId);
|
|
108
|
+
return rule !== undefined && verdict.band === band ? [{ rule, verdict }] : [];
|
|
109
|
+
});
|
|
110
|
+
const actPairs = pairs("act");
|
|
111
|
+
const actingHere = actPairs.filter(({ rule }) => blockCount(turn, createBlockKey(rule.id, relative)) < MAX_BLOCKS_PER_RULE_PER_TURN);
|
|
112
|
+
for (const { rule } of actingHere)
|
|
113
|
+
incrementBlock(turn, createBlockKey(rule.id, relative));
|
|
114
|
+
if (actingHere.length > 0) {
|
|
115
|
+
actedOn.push(relative);
|
|
116
|
+
recordBlockedFile(turn, relative);
|
|
117
|
+
}
|
|
118
|
+
acting.push(...actingHere);
|
|
119
|
+
flagged.push(...pairs("flag"), ...actPairs.filter((p) => !actingHere.includes(p)));
|
|
120
|
+
appendEvent(root, {
|
|
121
|
+
kind: "check",
|
|
122
|
+
at,
|
|
123
|
+
phase: "edit",
|
|
124
|
+
sessionId: input.session_id,
|
|
125
|
+
promptId: turnIdOf(input),
|
|
126
|
+
files: [relative],
|
|
127
|
+
rules: outcome.modelRules.length,
|
|
128
|
+
latencyMs: Math.round(performance.now() - started),
|
|
129
|
+
modelLatencyMs: outcome.modelLatencyMs,
|
|
130
|
+
usage: outcome.usage,
|
|
131
|
+
verdicts: outcome.verdicts,
|
|
132
|
+
blocked: actingHere.length > 0,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
const systemMessage = flagged.length > 0 ? flagNotice("edit", flagged, files) : undefined;
|
|
136
|
+
if (acting.length > 0) {
|
|
137
|
+
return {
|
|
138
|
+
kind: "block",
|
|
139
|
+
reason: repairReason("edit", acting, actedOn),
|
|
140
|
+
...(systemMessage === undefined ? {} : { systemMessage }),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return systemMessage === undefined ? { kind: "silent" } : { kind: "notice", systemMessage };
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=postToolUse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postToolUse.js","sourceRoot":"","sources":["../../src/hooks/postToolUse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type HookOutput } from "@coldtea/abide-schema";
|
|
2
|
+
import { type CompileTarget } from "../lib/compilePrompt.js";
|
|
3
|
+
export type CompilePlan = {
|
|
4
|
+
targets: CompileTarget[];
|
|
5
|
+
invalid: string[];
|
|
6
|
+
noSources: boolean;
|
|
7
|
+
};
|
|
8
|
+
/** What, if anything, needs compiling for this repository and this machine. */
|
|
9
|
+
export declare const planCompile: (root: string) => CompilePlan;
|
|
10
|
+
export declare const handleSessionStart: (raw: unknown) => Promise<HookOutput>;
|
|
11
|
+
//# sourceMappingURL=sessionStart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionStart.d.ts","sourceRoot":"","sources":["../../src/hooks/sessionStart.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAU5E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,WA2C1C,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAe,OAAO,KAAG,OAAO,CAAC,UAAU,CAoCzE,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { sessionStartInputSchema } from "@coldtea/abide-schema";
|
|
2
|
+
import { compilePrompt } from "../lib/compilePrompt.js";
|
|
3
|
+
import { appendEvent } from "../lib/events.js";
|
|
4
|
+
import { hasApiKey } from "../lib/credentials.js";
|
|
5
|
+
import { findLintConfigs } from "../lib/lintConfig.js";
|
|
6
|
+
import { placeCompileSkill } from "../lib/packageRoot.js";
|
|
7
|
+
import { findRepoRoot, globalRubricPath, homeDir, rubricPath } from "../lib/paths.js";
|
|
8
|
+
import { readRubric } from "../lib/rubricFile.js";
|
|
9
|
+
import { pruneOldTurns } from "../lib/session.js";
|
|
10
|
+
import { checkStaleness, discoverGlobalSources, discoverProjectSources } from "../lib/sources.js";
|
|
11
|
+
/** What, if anything, needs compiling for this repository and this machine. */
|
|
12
|
+
export const planCompile = (root) => {
|
|
13
|
+
const targets = [];
|
|
14
|
+
const invalid = [];
|
|
15
|
+
const project = discoverProjectSources(root);
|
|
16
|
+
const projectRead = readRubric(rubricPath(root));
|
|
17
|
+
if (projectRead.kind === "invalid") {
|
|
18
|
+
invalid.push(`${projectRead.path}: ${projectRead.issues.slice(0, 3).join("; ")}`);
|
|
19
|
+
}
|
|
20
|
+
const projectRubric = projectRead.kind === "ok" ? projectRead.rubric : undefined;
|
|
21
|
+
const projectStale = checkStaleness(projectRubric, project, root);
|
|
22
|
+
if (project.some((c) => c.required) &&
|
|
23
|
+
projectStale.status !== "fresh" &&
|
|
24
|
+
projectRead.kind !== "invalid") {
|
|
25
|
+
targets.push({
|
|
26
|
+
which: "project",
|
|
27
|
+
root,
|
|
28
|
+
candidates: project,
|
|
29
|
+
staleness: projectStale,
|
|
30
|
+
lintConfigs: findLintConfigs(root),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const global = discoverGlobalSources();
|
|
34
|
+
const globalRead = readRubric(globalRubricPath());
|
|
35
|
+
if (globalRead.kind === "invalid") {
|
|
36
|
+
invalid.push(`${globalRead.path}: ${globalRead.issues.slice(0, 3).join("; ")}`);
|
|
37
|
+
}
|
|
38
|
+
const globalRubric = globalRead.kind === "ok" ? globalRead.rubric : undefined;
|
|
39
|
+
const globalStale = checkStaleness(globalRubric, global, homeDir());
|
|
40
|
+
if (global.length > 0 && globalStale.status !== "fresh" && globalRead.kind !== "invalid") {
|
|
41
|
+
targets.push({
|
|
42
|
+
which: "global",
|
|
43
|
+
root: homeDir(),
|
|
44
|
+
candidates: global,
|
|
45
|
+
staleness: globalStale,
|
|
46
|
+
lintConfigs: [],
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return { targets, invalid, noSources: project.length === 0 && global.length === 0 };
|
|
50
|
+
};
|
|
51
|
+
export const handleSessionStart = async (raw) => {
|
|
52
|
+
const parsed = sessionStartInputSchema.safeParse(raw);
|
|
53
|
+
if (!parsed.success)
|
|
54
|
+
return { kind: "silent" };
|
|
55
|
+
const input = parsed.data;
|
|
56
|
+
const root = findRepoRoot(input.cwd);
|
|
57
|
+
pruneOldTurns();
|
|
58
|
+
const plan = planCompile(root);
|
|
59
|
+
const notices = [];
|
|
60
|
+
if (!hasApiKey(root)) {
|
|
61
|
+
notices.push("Abide: no API key was found, so edits are not being checked. Run abide login, or put TYPESAFE_AI_API_KEY in the environment or a .env at the repo root, then start a new session.");
|
|
62
|
+
}
|
|
63
|
+
for (const problem of plan.invalid) {
|
|
64
|
+
notices.push(`Abide: rubric could not be read and is being ignored: ${problem}`);
|
|
65
|
+
}
|
|
66
|
+
const systemMessage = notices.length > 0 ? notices.join("\n") : undefined;
|
|
67
|
+
if (plan.targets.length === 0) {
|
|
68
|
+
return systemMessage === undefined ? { kind: "silent" } : { kind: "notice", systemMessage };
|
|
69
|
+
}
|
|
70
|
+
appendEvent(root, {
|
|
71
|
+
kind: "compile-needed",
|
|
72
|
+
at: new Date().toISOString(),
|
|
73
|
+
sessionId: input.session_id,
|
|
74
|
+
reason: plan.targets.map((t) => `${t.which}: ${t.staleness.status}`).join(", "),
|
|
75
|
+
sources: plan.targets.flatMap((t) => t.candidates.map((c) => c.path)),
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
kind: "session-context",
|
|
79
|
+
additionalContext: compilePrompt(placeCompileSkill(root), plan.targets),
|
|
80
|
+
...(systemMessage === undefined ? {} : { systemMessage }),
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=sessionStart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionStart.js","sourceRoot":"","sources":["../../src/hooks/sessionStart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type HookOutput } from "@coldtea/abide-schema";
|
|
2
|
+
import { type FileDiff } from "../lib/git.js";
|
|
3
|
+
export type TurnDiff = {
|
|
4
|
+
kind: "complete";
|
|
5
|
+
files: string[];
|
|
6
|
+
fileDiffs: FileDiff[];
|
|
7
|
+
source: "git" | "files";
|
|
8
|
+
/** Blob id at turn start per file; null if absent then, undefined if git could not say. */
|
|
9
|
+
startIds: Map<string, string | null> | undefined;
|
|
10
|
+
}
|
|
11
|
+
/** Part of the turn could not be read back in time. A judgment on the rest would be a judgment on a different change. */
|
|
12
|
+
| {
|
|
13
|
+
kind: "incomplete";
|
|
14
|
+
reason: string;
|
|
15
|
+
missing: string[];
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Everything the turn changed. With a baseline from turn-start it is the git
|
|
19
|
+
* diff between then and now, whichever tool made the change. Without one it
|
|
20
|
+
* is each file's start-of-turn content against the disk, which sees only what
|
|
21
|
+
* Edit and Write touched. Every diff here shares one budget, and a turn that
|
|
22
|
+
* did not fit in it is reported as incomplete rather than checked in part.
|
|
23
|
+
*/
|
|
24
|
+
export declare const turnDiff: (root: string, dir: string) => TurnDiff;
|
|
25
|
+
export declare const handleStop: (raw: unknown) => Promise<HookOutput>;
|
|
26
|
+
//# sourceMappingURL=stop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,UAAU,EAGhB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EAAiD,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAsB7F,MAAM,MAAM,QAAQ,GAChB;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC;IACxB,2FAA2F;IAC3F,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CAClD;AACH,yHAAyH;GACvH;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE9D;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,SAAU,MAAM,OAAO,MAAM,KAAG,QAoEpD,CAAC;AAIF,eAAO,MAAM,UAAU,QAAe,OAAO,KAAG,OAAO,CAAC,UAAU,CA4IjE,CAAC"}
|