@wrenautomation/birdwatch 0.29.0 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +36 -53
  2. package/dist/app/cli.js +2 -2
  3. package/dist/app/cli.js.map +1 -1
  4. package/dist/app/engine-cli.d.ts +2 -8
  5. package/dist/app/engine-cli.js +18 -160
  6. package/dist/app/engine-cli.js.map +1 -1
  7. package/dist/app/index.d.ts +3 -3
  8. package/dist/app/index.js +3 -3
  9. package/dist/app/index.js.map +1 -1
  10. package/dist/document/extract.d.ts +1 -1
  11. package/dist/document/types.d.ts +2 -2
  12. package/dist/document/types.js +2 -2
  13. package/dist/engine/agent.d.ts +12 -10
  14. package/dist/engine/agent.js +21 -20
  15. package/dist/engine/agent.js.map +1 -1
  16. package/dist/engine/context.d.ts +9 -0
  17. package/dist/engine/{runner.js → context.js} +10 -78
  18. package/dist/engine/context.js.map +1 -0
  19. package/dist/engine/index.d.ts +2 -2
  20. package/dist/engine/index.js +2 -2
  21. package/dist/engine/index.js.map +1 -1
  22. package/dist/engine/judge.d.ts +1 -1
  23. package/dist/engine/plan.d.ts +4 -4
  24. package/dist/engine/plan.js +4 -4
  25. package/dist/engine/plan.js.map +1 -1
  26. package/dist/{plan → engine}/plans/index.d.ts +4 -2
  27. package/dist/engine/plans/index.js +104 -0
  28. package/dist/engine/plans/index.js.map +1 -0
  29. package/dist/engine/ports.d.ts +9 -57
  30. package/dist/engine/ports.js +3 -3
  31. package/dist/engine/ports.js.map +1 -1
  32. package/dist/engine/recall.d.ts +1 -1
  33. package/dist/engine/state.d.ts +0 -3
  34. package/dist/engine/state.js +1 -25
  35. package/dist/engine/state.js.map +1 -1
  36. package/dist/engine/steps.d.ts +20 -20
  37. package/dist/engine/steps.js +42 -167
  38. package/dist/engine/steps.js.map +1 -1
  39. package/dist/engine/tree.d.ts +1 -1
  40. package/dist/engine/tree.js.map +1 -1
  41. package/dist/{plan → engine}/types.d.ts +14 -165
  42. package/dist/{plan → engine}/types.js +18 -73
  43. package/dist/engine/types.js.map +1 -0
  44. package/dist/index.d.ts +9 -9
  45. package/dist/index.js +9 -9
  46. package/dist/ledger/files.d.ts +1 -1
  47. package/dist/ledger/files.js +1 -1
  48. package/dist/ledger/files.js.map +1 -1
  49. package/dist/ledger/ledger.d.ts +2 -2
  50. package/dist/ledger/records.d.ts +139 -139
  51. package/dist/ledger/records.js +6 -6
  52. package/dist/ledger/records.js.map +1 -1
  53. package/dist/sources/arxiv.d.ts +1 -1
  54. package/dist/sources/google.d.ts +1 -1
  55. package/dist/sources/paste.d.ts +1 -1
  56. package/dist/sources/sites.d.ts +1 -1
  57. package/package.json +4 -8
  58. package/dist/engine/runner.d.ts +0 -30
  59. package/dist/engine/runner.js.map +0 -1
  60. package/dist/plan/index.d.ts +0 -7
  61. package/dist/plan/index.js +0 -8
  62. package/dist/plan/index.js.map +0 -1
  63. package/dist/plan/model.d.ts +0 -6
  64. package/dist/plan/model.js +0 -7
  65. package/dist/plan/model.js.map +0 -1
  66. package/dist/plan/plan.d.ts +0 -31
  67. package/dist/plan/plan.js +0 -87
  68. package/dist/plan/plan.js.map +0 -1
  69. package/dist/plan/plans/index.js +0 -236
  70. package/dist/plan/plans/index.js.map +0 -1
  71. package/dist/plan/render.d.ts +0 -41
  72. package/dist/plan/render.js +0 -75
  73. package/dist/plan/render.js.map +0 -1
  74. package/dist/plan/review.d.ts +0 -11
  75. package/dist/plan/review.js +0 -39
  76. package/dist/plan/review.js.map +0 -1
  77. package/dist/plan/triage.d.ts +0 -18
  78. package/dist/plan/triage.js +0 -65
  79. package/dist/plan/triage.js.map +0 -1
  80. package/dist/plan/types.js.map +0 -1
@@ -1,41 +0,0 @@
1
- /** Text the prompts take: what is known, what yielded, what a hit shows for free. */
2
- import type { HitView, YieldRow } from "./types.js";
3
- export declare const lines: (xs: readonly string[], none?: string) => string;
4
- /** A line with a URL or a ledger id on it: a fact someone can go and check. */
5
- export declare const sourced: (line: string) => boolean;
6
- /**
7
- * The ask with each known line that names no source moved to its premises. A run seeded with
8
- * "the buyer is X" plans inside X unless something tests X; a sourced line is looked past.
9
- */
10
- export declare function withPremises<A extends {
11
- known?: readonly string[];
12
- premises?: readonly string[];
13
- }>(ask: A): A & {
14
- known: string[];
15
- premises: string[];
16
- };
17
- /** The known lines, then the premises under their own heading, or nothing more. */
18
- export declare const renderKnown: (ask: {
19
- known: readonly string[];
20
- premises?: readonly string[];
21
- }) => string;
22
- /**
23
- * "The person says:" and their lines, then their tests of a good source, or nothing: a prompt
24
- * pays for a heading only when there is one. The tests ride the steer slot, so a stored plan file
25
- * shows them with no new mark.
26
- */
27
- export declare const renderSteer: (ask: {
28
- steer?: readonly string[];
29
- criteria?: readonly {
30
- name: string;
31
- question: string;
32
- }[];
33
- }) => string;
34
- /** What the last round left open, under its heading, or nothing. */
35
- export declare const renderOpen: (open: readonly string[] | undefined) => string;
36
- /** The plan file's word on age as one more rule line, or nothing. */
37
- export declare const renderAge: (age: string | undefined) => string;
38
- /** One line per row, the keys it has first: `source=exa channel=... hits=12 reads=4 proposed=9 kept=3`. */
39
- export declare function renderYield(rows: readonly YieldRow[]): string;
40
- /** Numbered, one hit per line, only the fields it has. */
41
- export declare function renderHits(hits: readonly HitView[]): string;
@@ -1,75 +0,0 @@
1
- export const lines = (xs, none = "(nothing)") => xs.length ? xs.map((x) => `- ${x}`).join("\n") : none;
2
- /** A line with a URL or a ledger id on it: a fact someone can go and check. */
3
- export const sourced = (line) => /https?:\/\/\S|\b[0-9A-HJKMNP-TV-Z]{26}\b/.test(line);
4
- /**
5
- * The ask with each known line that names no source moved to its premises. A run seeded with
6
- * "the buyer is X" plans inside X unless something tests X; a sourced line is looked past.
7
- */
8
- export function withPremises(ask) {
9
- const known = ask.known ?? [];
10
- return {
11
- ...ask,
12
- known: known.filter(sourced),
13
- premises: [...new Set([...(ask.premises ?? []), ...known.filter((l) => !sourced(l))])],
14
- };
15
- }
16
- /** The known lines, then the premises under their own heading, or nothing more. */
17
- export const renderKnown = (ask) => lines(ask.known) +
18
- (ask.premises?.length
19
- ? `\nTaken as given, with no source (test each one: it may be wrong):\n${lines(ask.premises)}`
20
- : "");
21
- /**
22
- * "The person says:" and their lines, then their tests of a good source, or nothing: a prompt
23
- * pays for a heading only when there is one. The tests ride the steer slot, so a stored plan file
24
- * shows them with no new mark.
25
- */
26
- export const renderSteer = (ask) => (ask.steer?.length ? `The person says:\n${lines(ask.steer)}\n` : "") +
27
- (ask.criteria?.length
28
- ? `The person's tests of a good source:\n${lines(ask.criteria.map((c) => `${c.name}: ${c.question}`))}\n`
29
- : "");
30
- /** What the last round left open, under its heading, or nothing. */
31
- export const renderOpen = (open) => open?.length ? `The last round left open (plan for these first):\n${lines(open)}\n` : "";
32
- /** The plan file's word on age as one more rule line, or nothing. */
33
- export const renderAge = (age) => (age ? `\n- Age: ${age}` : "");
34
- /** One line per row, the keys it has first: `source=exa channel=... hits=12 reads=4 proposed=9 kept=3`. */
35
- export function renderYield(rows) {
36
- if (!rows.length)
37
- return "(no history yet)";
38
- return rows
39
- .map((r) => {
40
- const who = ["by", "source", "channel", "kind"]
41
- .filter((k) => r[k] !== undefined)
42
- .map((k) => `${k}=${r[k]}`);
43
- return `- ${[...who, `hits=${r.hits}`, `reads=${r.reads}`, `proposed=${r.proposed}`, `kept=${r.kept}`].join(" ")}`;
44
- })
45
- .join("\n");
46
- }
47
- const oneLine = (s, max) => {
48
- const t = s.replace(/\s+/g, " ").trim();
49
- return t.length > max ? `${t.slice(0, max - 1)}…` : t;
50
- };
51
- /** Numbered, one hit per line, only the fields it has. */
52
- export function renderHits(hits) {
53
- return hits
54
- .map((h, i) => {
55
- const parts = [h.url];
56
- if (h.title)
57
- parts.push(`title: ${oneLine(h.title, 120)}`);
58
- if (h.channel)
59
- parts.push(`channel: ${h.channel}`);
60
- if (h.length !== undefined)
61
- parts.push(`length: ${Math.round(h.length)}s`);
62
- if (h.date)
63
- parts.push(`date: ${h.date}`);
64
- if (h.sources.length)
65
- parts.push(`sources: ${h.sources.join(",")}`);
66
- if (h.snippet)
67
- parts.push(`snippet: ${oneLine(h.snippet, 240)}`);
68
- const odds = Object.entries(h.odds ?? {});
69
- if (odds.length)
70
- parts.push(`judge (a cheap model's yes odds, a hint): ${odds.map(([k, v]) => `${k} ${v.toFixed(2)}`).join(", ")}`);
71
- return `${i + 1}. ${parts.join(" | ")}`;
72
- })
73
- .join("\n");
74
- }
75
- //# sourceMappingURL=render.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/plan/render.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * After a round: stop, go again from plan, or back to one step. The model decides and says why;
3
- * the round budget is a guard rail it sees (`{round}` of `{rounds}`), never a stop rule. The
4
- * runner takes the edge and parks past the budget; the planner never loops.
5
- */
6
- import type { Model } from "@wrenautomation/models";
7
- import { type Edge, type PlanFile, type Round } from "./types.js";
8
- export declare function reviewPrompt(round: Round, planFile: PlanFile): string;
9
- export declare function review(round: Round, model: Model, options?: {
10
- planFile?: PlanFile;
11
- }): Promise<Edge>;
@@ -1,39 +0,0 @@
1
- import { fill } from "./model.js";
2
- import { ageOf, defaultPlanFile } from "./plans/index.js";
3
- import { lines, renderAge, renderSteer } from "./render.js";
4
- import { Step, z } from "./types.js";
5
- const EdgeAnswer = z.object({
6
- next: z.enum(["stop", "again", "back"]),
7
- to: Step.optional(),
8
- why: z.string(),
9
- });
10
- const verdictLine = (v) => `${v.url}: ${v.quality}${v.gap ? `. ${v.gap}` : ""}`;
11
- /** A count with the earlier rounds' after it: rides the `{hits}` and `{kept}` slots, so a stored plan file shows it too. */
12
- const trend = (now, before) => before.length ? `${now} (earlier rounds: ${before.join(", ")})` : now;
13
- export function reviewPrompt(round, planFile) {
14
- return fill(planFile.review, {
15
- ask: round.ask.text,
16
- steer: renderSteer(round.ask),
17
- round: String(round.round),
18
- rounds: String(round.budget.rounds),
19
- hits: trend(`${round.hits} new`, round.earlier.map((e) => e.hits)),
20
- reads: String(round.reads),
21
- proposed: String(round.proposed),
22
- kept: trend(String(round.kept), round.earlier.map((e) => e.kept)),
23
- found: lines(round.found),
24
- notes: lines(round.notes, "(none)"),
25
- gaps: lines(round.gaps, "(none)"),
26
- checks: lines(round.checks, "(none)"),
27
- age: renderAge(ageOf(planFile)),
28
- verdicts: lines(round.verdicts.map(verdictLine), "(none)"),
29
- });
30
- }
31
- export async function review(round, model, options = {}) {
32
- const planFile = options.planFile ?? defaultPlanFile(round.ask.kind);
33
- const { value: out } = await model.ask(reviewPrompt(round, planFile), EdgeAnswer);
34
- const edge = { next: out.next, why: out.why, from: "ai", by: model.id };
35
- if (out.next === "back")
36
- edge.to = out.to ?? "fetch";
37
- return edge;
38
- }
39
- //# sourceMappingURL=review.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/plan/review.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * The filter before the read: for each hit, read or skip, from what the hit shows for free.
3
- * Hits dedupe by url and keep every source that returned them. The model picks; the read budget
4
- * caps it; a hit the model did not name is a skip, written down as one. The model writes a why
5
- * on a read only: a skip's why is fixed text, so the answer pays for the reads alone.
6
- */
7
- import type { Model } from "@wrenautomation/models";
8
- import { HitView, type HitViewIn, type Plan, type PlanFile, type Triage, type YieldRow } from "./types.js";
9
- /** What a skip says: the model named it and passed. */
10
- export declare const SKIPPED = "skipped by the model";
11
- /** One hit per url, sources merged, order of first sight. */
12
- export declare function dedupeHits(hits: readonly HitViewIn[]): HitView[];
13
- export declare function triagePrompt(hits: readonly HitView[], plan: Plan, planFile: PlanFile, yieldRows: readonly YieldRow[]): string;
14
- /** Read or skip per hit, with why. Reads over the plan's budget flip to skips, in the model's order. */
15
- export declare function triage(hits: readonly HitViewIn[], plan: Plan, model: Model, options?: {
16
- planFile?: PlanFile;
17
- yieldRows?: readonly YieldRow[];
18
- }): Promise<Triage[]>;
@@ -1,65 +0,0 @@
1
- import { fill } from "./model.js";
2
- import { ageOf, defaultPlanFile } from "./plans/index.js";
3
- import { renderAge, renderHits, renderKnown, renderOpen, renderSteer, renderYield, } from "./render.js";
4
- import { HitView, z, } from "./types.js";
5
- const TriageAnswer = z.object({
6
- hits: z.array(z.object({ url: z.string(), read: z.boolean(), why: z.string().nullable().optional() })),
7
- });
8
- /** What a skip says: the model named it and passed. */
9
- export const SKIPPED = "skipped by the model";
10
- /** One hit per url, sources merged, order of first sight. */
11
- export function dedupeHits(hits) {
12
- const byUrl = new Map();
13
- for (const h of hits.map((x) => HitView.parse(x))) {
14
- const url = h.url.trim();
15
- const have = byUrl.get(url);
16
- if (!have) {
17
- byUrl.set(url, { ...h, url, sources: [...new Set(h.sources)] });
18
- continue;
19
- }
20
- for (const s of h.sources)
21
- if (!have.sources.includes(s))
22
- have.sources.push(s);
23
- for (const k of ["title", "channel", "length", "date", "snippet"]) {
24
- if (have[k] === undefined && h[k] !== undefined)
25
- have[k] = h[k];
26
- }
27
- }
28
- return [...byUrl.values()];
29
- }
30
- export function triagePrompt(hits, plan, planFile, yieldRows) {
31
- return fill(planFile.triage, {
32
- n: String(plan.budget.reads),
33
- ask: plan.ask.text,
34
- site: plan.ask.site ?? "",
35
- steer: renderSteer(plan.ask),
36
- open: renderOpen(plan.ask.open),
37
- age: renderAge(ageOf(planFile)),
38
- known: renderKnown(plan.ask),
39
- yield: renderYield(yieldRows),
40
- hits: renderHits(hits),
41
- });
42
- }
43
- /** Read or skip per hit, with why. Reads over the plan's budget flip to skips, in the model's order. */
44
- export async function triage(hits, plan, model, options = {}) {
45
- const unique = dedupeHits(hits);
46
- if (!unique.length)
47
- return [];
48
- const planFile = options.planFile ?? defaultPlanFile(plan.ask.kind);
49
- const { value: out } = await model.ask(triagePrompt(unique, plan, planFile, options.yieldRows ?? []), TriageAnswer);
50
- const said = new Map(out.hits.map((h) => [h.url.trim(), h]));
51
- let reads = 0;
52
- return unique.map((h) => {
53
- const a = said.get(h.url);
54
- const base = { url: h.url, from: "ai", by: model.id };
55
- if (!a)
56
- return { ...base, read: false, why: "not named by the model" };
57
- if (!a.read)
58
- return { ...base, read: false, why: a.why?.trim() || SKIPPED };
59
- if (reads >= plan.budget.reads)
60
- return { ...base, read: false, why: `over the read budget (${plan.budget.reads})` };
61
- reads++;
62
- return { ...base, read: true, why: a.why?.trim() || "read" };
63
- });
64
- }
65
- //# sourceMappingURL=triage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../src/plan/triage.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plan/types.ts"],"names":[],"mappings":"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"}