@rackbops/docket-types 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/research-answer.d.ts +76 -2
- package/dist/research-answer.d.ts.map +1 -1
- package/dist/research-answer.js +69 -2
- package/dist/research-answer.js.map +1 -1
- package/dist/research-sources.d.ts +81 -4
- package/dist/research-sources.d.ts.map +1 -1
- package/dist/research-sources.js +235 -15
- package/dist/research-sources.js.map +1 -1
- package/dist/research.d.ts +65 -6
- package/dist/research.d.ts.map +1 -1
- package/dist/research.js +397 -33
- package/dist/research.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -50,6 +50,115 @@ The tracker's task types, built on `@rackbops/docket-core`'s contract. Shipped s
|
|
|
50
50
|
failed run. The intake lists the new `sources` option, which a host without a store should not
|
|
51
51
|
offer.
|
|
52
52
|
|
|
53
|
+
**A fuller pass on blocked pages** (0.9.0): the research run may list in `blocked` (at most 6,
|
|
54
|
+
each `{site, url?, why}`, never shown in the answer) the pages it needed and could not open:
|
|
55
|
+
refused, a 403, a CAPTCHA, a sign-in wall. When the review passes, the research run's own draft
|
|
56
|
+
lists any, the request is a `web` one (a `sent` request already had the person's browser and runs
|
|
57
|
+
as in 0.8.0) and the host has a store (`readSources`), the owner gets one DM: the reviewed answer
|
|
58
|
+
and a "Couldn't open:" list. With at least an hour (`MIN_SOURCES_WAIT_MS`) before
|
|
59
|
+
`sourcesExpiry(now, deadline)` -- 14 days (`SOURCES_WAIT_DAYS`), or 10 minutes
|
|
60
|
+
(`SOURCES_DEADLINE_MARGIN_MINUTES`) before a sooner deadline -- the DM also asks the owner to have
|
|
61
|
+
Claude in Chrome gather pages for the request before the expiry, and the task waits in phase
|
|
62
|
+
`awaiting-pages` (state `pass`, `blocked`, `earlier`) on a follow-up due at the expiry; with less,
|
|
63
|
+
the task ends there. The findings are saved either way. The wait sends nothing, runs nothing and
|
|
64
|
+
charges nothing.
|
|
65
|
+
|
|
66
|
+
**The host's `ready`** for such a task, run under the task's lock like any edit:
|
|
67
|
+
1. Only while `researchState(task.state).phase === "awaiting-pages"`; otherwise answer
|
|
68
|
+
"started".
|
|
69
|
+
2. If the task's queued `followup:` row has fired (`hasFired`) or has its Job out
|
|
70
|
+
(`hasJobOut`), answer "started".
|
|
71
|
+
3. `reschedule` the once task to now (a `ScheduleError`, which a Job out raises, is "started").
|
|
72
|
+
4. Then delete the queued `followup:` row, only if `!hasFired(o) && !(await hasJobOut(store, o))`.
|
|
73
|
+
Core's `reschedule` cancels scheduled runs only, never a follow-up, so a row left in place
|
|
74
|
+
fires at the expiry too: a second pass still waiting on its first run then, or retrying, is
|
|
75
|
+
started a second time (one that has ended answers "already answered" and stops).
|
|
76
|
+
|
|
77
|
+
The host accepts pages for the request only while it is `awaiting-pages`, and freezes them once
|
|
78
|
+
the second pass's run starts: its research run and its reviewer each read the pages, and must
|
|
79
|
+
read the same ones.
|
|
80
|
+
|
|
81
|
+
The second pass's research run gets the pages and the earlier answer (escaped, between markers)
|
|
82
|
+
and answers with only new or corrected findings, under `SENT_DISALLOWED_TOOLS`. Its reviewer gets
|
|
83
|
+
the update, the earlier answer and the pages, and checks it as an update: each new claim is
|
|
84
|
+
supported by its source, a "Correction:" claim really corrects the earlier answer and is
|
|
85
|
+
supported, and nothing is repeated. The owner gets an "Update to <title>:" DM of those findings
|
|
86
|
+
(a claim the first answer already made, case and spacing aside, is dropped), or one line when
|
|
87
|
+
there are none; they are saved tagged `["research", verdict, "update"]` beside the first pass's.
|
|
88
|
+
With no pages by the expiry, past the deadline, on a rejected update or on a second failure, the
|
|
89
|
+
task ends with one line: the first answer stands. With no store, a `sent` request, or nothing
|
|
90
|
+
blocked, a request runs exactly as in 0.8.0; the answer schema gains the optional field (and with
|
|
91
|
+
it the reviewer's schema, which embeds it, for every request) and the research prompt one sentence
|
|
92
|
+
asking for it. A second pass that is never readied, with one retry in
|
|
93
|
+
every phase, is a chain of eight runs, inside core's `MAX_FOLLOW_UPS` (9 from 0.9.0).
|
|
94
|
+
|
|
95
|
+
**Every part of the question** (0.10.0): before searching, the research run splits the question
|
|
96
|
+
into the parts it needs answered, including any list the question takes for granted, and
|
|
97
|
+
settles a part another depends on first: "the best game of 2026 in each major category" is the
|
|
98
|
+
major categories, then the best in each. It answers every part, in the summary and the findings,
|
|
99
|
+
and names in `uncertain` any part it could not settle and why. The reviewer works out the same
|
|
100
|
+
parts before its other checks, and never approves an answer that silently skips one: `revise`
|
|
101
|
+
(fill the part from the sources, or name it in `uncertain` when they cannot settle it) or
|
|
102
|
+
`reject`. The second pass asks the same of an update: a part the earlier answer left unsettled
|
|
103
|
+
that the pages settle is a new finding, and an update that skips it is revised or rejected. The
|
|
104
|
+
split is prompt-only, with no `parts` field: the summary and the findings already carry each
|
|
105
|
+
part's answer, a separate list would repeat them inside the DM's 1,900 characters, and each of
|
|
106
|
+
its lines would be a claim with no source of its own. So the schemas (but for the wider
|
|
107
|
+
`blocked` description, below), the DM, stored states and the 0.9.0 flows are as they were.
|
|
108
|
+
|
|
109
|
+
**The best source** (0.10.0): before searching, the research run names each part's reference
|
|
110
|
+
site -- BoardGameGeek for board games, eBay for listings and sold prices, otherwise the maker,
|
|
111
|
+
the standards body or the official record -- and rests the answer on it. A `web` first pass and
|
|
112
|
+
its reviewer open BoardGameGeek like any site (an ordinary read, nothing to get round a
|
|
113
|
+
refusal). eBay is never opened by any run (eBay's User Agreement, section 3 (automated access)):
|
|
114
|
+
a web first pass and its reviewer deny its fetches (`WEB_DISALLOWED_TOOLS`, new; before 0.10.0 a
|
|
115
|
+
web run had no eBay denial), and a run on gathered pages (a `sent` request, a second pass) never
|
|
116
|
+
opens either site (`SENT_DISALLOWED_TOOLS`, now built from `BARRED_SITES`). Only fetches are
|
|
117
|
+
denied: WebSearch has no domain filter, so a search can still list their pages.
|
|
118
|
+
|
|
119
|
+
`researchJob` and `reviewJob` take `ResearchJobOptions` as a new last argument; called directly
|
|
120
|
+
they default to `canWait: false`. The answer schema's `blocked` description now also covers the best source for a part that the
|
|
121
|
+
run could not or may not open. What the run does with a best source it could not open depends on whether a fuller pass can
|
|
122
|
+
follow (`ResearchJobOptions.canWait`, which `prepare` sets for a `web` first pass whose host has
|
|
123
|
+
`readSources`):
|
|
124
|
+
- **It can:** the source goes in `blocked` -- a refused page (a 403, a CAPTCHA or challenge
|
|
125
|
+
page, an empty or blocked body, a sign-in wall) or eBay -- with its URL only when that is the
|
|
126
|
+
page's real address (such as BoardGameGeek's ranking or browse page), never a guessed one, and
|
|
127
|
+
never as "I didn't check" in the summary or `uncertain`. The reviewer revises an answer that
|
|
128
|
+
leans on secondary sources while the best source is neither cited nor in `blocked`, adding it
|
|
129
|
+
there, and moves a "didn't check" line to `blocked`.
|
|
130
|
+
- **It cannot** (no store, a `sent` request, a second pass): `blocked` is never shown, so the run
|
|
131
|
+
names the missing source in one short `uncertain` line ("BoardGameGeek was not among the pages
|
|
132
|
+
read"), and a web reviewer revises an answer to add that line.
|
|
133
|
+
- A web reviewer moves a claim resting only on an eBay address (a search listing, never an opened
|
|
134
|
+
page) to `uncertain`.
|
|
135
|
+
|
|
136
|
+
The wait's list is the research run's own, then on a revise any the reviewer added (an approve
|
|
137
|
+
sends the stored draft, so it adds none; no reviewer drops one), one entry per page
|
|
138
|
+
(`uniqueBlocked`, keyed by `blockedKey`: host and path, without query or end slash, for an entry
|
|
139
|
+
with a URL; the site's name for one without, which merges into any entry on its site, so
|
|
140
|
+
"BoardGameGeek" and a boardgamegeek.com page are one entry and two BoardGameGeek pages are two;
|
|
141
|
+
only the known aliases merge -- BGG/BoardGameGeek/geekdo.com and eBay/ebay.* -- so amazon.de and
|
|
142
|
+
amazon.co.uk stay two), then the belt's: `withBarredSites` adds `{site,
|
|
143
|
+
why: NOT_OPENED_WHY}` (no URL) for a site of `BARRED_SITES` that a sentence of the summary or an
|
|
144
|
+
uncertain line names as not read -- the outgoing answer's, or the research run's own draft's, so
|
|
145
|
+
a reviewer that rewords "I didn't check BoardGameGeek" into "No rating-based ranking was
|
|
146
|
+
available" still leaves the wait. "Not read" must be tied to the site (straight or curly
|
|
147
|
+
apostrophe): a negated reading verb with the site as its object, at most three words apart
|
|
148
|
+
("didn't check BoardGameGeek", "unable to load the BGG page", "without opening BGG"); the site
|
|
149
|
+
as the subject of a failure, at most three words apart ("BGG refused the request", "the
|
|
150
|
+
BoardGameGeek ranking was not checked", "eBay could not be opened", "returned 403", "required
|
|
151
|
+
sign-in"); or "no <site> data/ratings/rankings/results". "e.g." and "i.e." do not end a
|
|
152
|
+
sentence. A negation about something else does not count: "not common on eBay", "the game is
|
|
153
|
+
not in print", "BGG users do not agree". eBay also counts when a finding of the outgoing answer
|
|
154
|
+
or of the draft rests only on eBay addresses, so a reviewer that moves such a claim to
|
|
155
|
+
`uncertain`, as told, keeps the wait. A passing mention counts for neither, so a question that
|
|
156
|
+
only mentions eBay starts no 14-day wait. An entry on the site by name or by URL host stops the
|
|
157
|
+
belt (a "BoardGameGeek" entry with an archive.org URL counts). BoardGameGeek is left alone when a finding of the
|
|
158
|
+
outgoing answer cites one of its pages; eBay, never opened, has no such exemption. At most 6 in
|
|
159
|
+
all. Nothing the model wrote is stripped from the DM; the "Couldn't open:" list and the queued
|
|
160
|
+
line say what was not opened.
|
|
161
|
+
|
|
53
162
|
- `scout` (category 1, E9): execute lane, `calendar` every N days at the owner's hour (the host bounds N; the tracker
|
|
54
163
|
plugin allows 1 to 30). One
|
|
55
164
|
`claude -p` Job a run (WebSearch and WebFetch; 30 turns, 1.50 USD, 10 minutes, item 61 proposed)
|
package/dist/index.d.ts
CHANGED
|
@@ -15,9 +15,9 @@ export { money } from "./money.js";
|
|
|
15
15
|
export { BASELINE_RULES, type BaselineRule, DEFAULT_BASELINE, DEFAULT_DROP_PERCENT, MISSES_BEFORE_TELLING, type PriceConfig, type PriceState, price, reference, } from "./price.js";
|
|
16
16
|
export { DEFAULT_SNOOZE_MS, type ReminderConfig, reminder, snoozeUntil } from "./reminder.js";
|
|
17
17
|
export { decisionOf, isRenewalDecision, RENEWAL_DECISIONS, type RenewalConfig, type RenewalDecision, type RenewalState, renewal, } from "./renewal.js";
|
|
18
|
-
export { AUTH_RETRY_MS, deadlineOf, draftJson, MAX_CONTEXT_CHARS, MAX_QUESTION_CHARS, MAX_TRIES, RESEARCH_MAX_BUDGET_USD, RESEARCH_MAX_TURNS, RESEARCH_TIMEOUT_MS, REVIEW_MAX_BUDGET_USD, REVIEW_MAX_TURNS, REVIEW_TIMEOUT_MS, type ResearchConfig, type ResearchOptions, type ResearchPhase, type ResearchState, research, researchJob, researchState, researchType, reviewJob, usesSentSources, } from "./research.js";
|
|
19
|
-
export { ANSWER_SCHEMA, clean, fitMessage, MAX_MESSAGE_CHARS, parseAnswer, parseReview, REVIEW_SCHEMA, type ResearchAnswer, type ResearchFinding, type Review, renderAnswer, safeUrl, VERDICTS, type Verdict, ZWSP, } from "./research-answer.js";
|
|
20
|
-
export { type GatheredPage, gatheredPages, MAX_GATHERED_CHARS, MAX_GATHERED_PAGES, MAX_PAGE_CHARS, MAX_PAGE_TITLE_CHARS, MIN_PAGE_CHARS, pagesBlock, pagesJson, type ReadSources, SENT_DISALLOWED_TOOLS, } from "./research-sources.js";
|
|
18
|
+
export { AUTH_RETRY_MS, deadlineOf, draftJson, MAX_CONTEXT_CHARS, MAX_QUESTION_CHARS, MAX_TRIES, MIN_SOURCES_WAIT_MS, RESEARCH_MAX_BUDGET_USD, RESEARCH_MAX_TURNS, RESEARCH_TIMEOUT_MS, REVIEW_MAX_BUDGET_USD, REVIEW_MAX_TURNS, REVIEW_TIMEOUT_MS, type ResearchConfig, type ResearchJobOptions, type ResearchOptions, type ResearchPhase, type ResearchState, research, researchJob, researchState, researchType, reviewJob, usesSentSources, } from "./research.js";
|
|
19
|
+
export { ANSWER_SCHEMA, type BlockedPage, clean, fitMessage, MAX_BLOCKED, MAX_MESSAGE_CHARS, parseAnswer, parseBlocked, parseReview, REVIEW_SCHEMA, type ResearchAnswer, type ResearchFinding, type Review, renderAnswer, renderUpdate, safeUrl, VERDICTS, type Verdict, ZWSP, } from "./research-answer.js";
|
|
20
|
+
export { BARRED_SITES, blockedKey, type GatheredPage, gatheredPages, MAX_GATHERED_CHARS, MAX_GATHERED_PAGES, MAX_PAGE_CHARS, MAX_PAGE_TITLE_CHARS, MIN_PAGE_CHARS, NOT_OPENED_WHY, pagesBlock, pagesJson, type ReadSources, SENT_DISALLOWED_TOOLS, SOURCES_DEADLINE_MARGIN_MINUTES, SOURCES_DEADLINE_MARGIN_MS, SOURCES_WAIT_DAYS, SOURCES_WAIT_MS, sourcesExpiry, uniqueBlocked, WEB_DISALLOWED_TOOLS, withBarredSites, } from "./research-sources.js";
|
|
21
21
|
export { itemKey, LENS_TEXT, LENSES, type Lens, lensOf, MAX_FOR_CHARS, MAX_INTEREST_CHARS, MAX_INTERESTS, MAX_ITEMS, MAX_SCOUT_NOTES, MAX_SHOWN, MIN_ITEMS, PROMPT_SHOWN, parseScout, renderScout, SCOUT_MAX_BUDGET_USD, SCOUT_MAX_TURNS, SCOUT_SCHEMA, SCOUT_TIMEOUT_MS, type ScoutConfig, type ScoutItem, type ScoutState, type ShownItem, scout, scoutJob, scoutState, } from "./scout.js";
|
|
22
22
|
export { BGG_ATTRIBUTION, BGG_HOST, BGG_SPACING_MS, type BggOptions, bggSource, bggThingUrl, MAX_SCANNED, parseBggThingId, parseMarketplace, } from "./want-bgg.js";
|
|
23
23
|
export { inboxSource, isEbayHost, type Listing, listingKey, listingsFromJsonLd, MAX_LISTINGS, NEVER_EBAY, pageSource, type ReadInbox, readListings, SOURCE_IDS, type Source, type SourceId, SourceMiss, SourceUnavailableError, type Submitted, submittedListing, } from "./want-sources.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAUrD,YAAY,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EACL,KAAK,cAAc,EACnB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EACL,cAAc,EACd,KAAK,YAAY,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,EACL,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC7F,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,OAAO,GACR,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACZ,SAAS,EACT,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EACb,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,KAAK,OAAO,EACZ,IAAI,GACL,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,KAAK,YAAY,EACjB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,SAAS,EACT,KAAK,WAAW,EAChB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -21,9 +21,9 @@ export { money } from "./money.js";
|
|
|
21
21
|
export { BASELINE_RULES, DEFAULT_BASELINE, DEFAULT_DROP_PERCENT, MISSES_BEFORE_TELLING, price, reference, } from "./price.js";
|
|
22
22
|
export { DEFAULT_SNOOZE_MS, reminder, snoozeUntil } from "./reminder.js";
|
|
23
23
|
export { decisionOf, isRenewalDecision, RENEWAL_DECISIONS, renewal, } from "./renewal.js";
|
|
24
|
-
export { AUTH_RETRY_MS, deadlineOf, draftJson, MAX_CONTEXT_CHARS, MAX_QUESTION_CHARS, MAX_TRIES, RESEARCH_MAX_BUDGET_USD, RESEARCH_MAX_TURNS, RESEARCH_TIMEOUT_MS, REVIEW_MAX_BUDGET_USD, REVIEW_MAX_TURNS, REVIEW_TIMEOUT_MS, research, researchJob, researchState, researchType, reviewJob, usesSentSources, } from "./research.js";
|
|
25
|
-
export { ANSWER_SCHEMA, clean, fitMessage, MAX_MESSAGE_CHARS, parseAnswer, parseReview, REVIEW_SCHEMA, renderAnswer, safeUrl, VERDICTS, ZWSP, } from "./research-answer.js";
|
|
26
|
-
export { gatheredPages, MAX_GATHERED_CHARS, MAX_GATHERED_PAGES, MAX_PAGE_CHARS, MAX_PAGE_TITLE_CHARS, MIN_PAGE_CHARS, pagesBlock, pagesJson, SENT_DISALLOWED_TOOLS, } from "./research-sources.js";
|
|
24
|
+
export { AUTH_RETRY_MS, deadlineOf, draftJson, MAX_CONTEXT_CHARS, MAX_QUESTION_CHARS, MAX_TRIES, MIN_SOURCES_WAIT_MS, RESEARCH_MAX_BUDGET_USD, RESEARCH_MAX_TURNS, RESEARCH_TIMEOUT_MS, REVIEW_MAX_BUDGET_USD, REVIEW_MAX_TURNS, REVIEW_TIMEOUT_MS, research, researchJob, researchState, researchType, reviewJob, usesSentSources, } from "./research.js";
|
|
25
|
+
export { ANSWER_SCHEMA, clean, fitMessage, MAX_BLOCKED, MAX_MESSAGE_CHARS, parseAnswer, parseBlocked, parseReview, REVIEW_SCHEMA, renderAnswer, renderUpdate, safeUrl, VERDICTS, ZWSP, } from "./research-answer.js";
|
|
26
|
+
export { BARRED_SITES, blockedKey, gatheredPages, MAX_GATHERED_CHARS, MAX_GATHERED_PAGES, MAX_PAGE_CHARS, MAX_PAGE_TITLE_CHARS, MIN_PAGE_CHARS, NOT_OPENED_WHY, pagesBlock, pagesJson, SENT_DISALLOWED_TOOLS, SOURCES_DEADLINE_MARGIN_MINUTES, SOURCES_DEADLINE_MARGIN_MS, SOURCES_WAIT_DAYS, SOURCES_WAIT_MS, sourcesExpiry, uniqueBlocked, WEB_DISALLOWED_TOOLS, withBarredSites, } from "./research-sources.js";
|
|
27
27
|
export { itemKey, LENS_TEXT, LENSES, lensOf, MAX_FOR_CHARS, MAX_INTEREST_CHARS, MAX_INTERESTS, MAX_ITEMS, MAX_SCOUT_NOTES, MAX_SHOWN, MIN_ITEMS, PROMPT_SHOWN, parseScout, renderScout, SCOUT_MAX_BUDGET_USD, SCOUT_MAX_TURNS, SCOUT_SCHEMA, SCOUT_TIMEOUT_MS, scout, scoutJob, scoutState, } from "./scout.js";
|
|
28
28
|
export { BGG_ATTRIBUTION, BGG_HOST, BGG_SPACING_MS, bggSource, bggThingUrl, MAX_SCANNED, parseBggThingId, parseMarketplace, } from "./want-bgg.js";
|
|
29
29
|
export { inboxSource, isEbayHost, listingKey, listingsFromJsonLd, MAX_LISTINGS, NEVER_EBAY, pageSource, readListings, SOURCE_IDS, SourceMiss, SourceUnavailableError, submittedListing, } from "./want-sources.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,OAAO,EAEL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EACL,cAAc,EAEd,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EAGrB,KAAK,EACL,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,iBAAiB,EAAuB,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC7F,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EAIjB,OAAO,GACR,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,OAAO,EAEL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EACL,cAAc,EAEd,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EAGrB,KAAK,EACL,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,iBAAiB,EAAuB,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC7F,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EAIjB,OAAO,GACR,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAMjB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACZ,SAAS,EACT,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EAEb,KAAK,EACL,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EAIb,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,QAAQ,EAER,IAAI,GACL,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,YAAY,EACZ,UAAU,EAEV,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,UAAU,EACV,SAAS,EAET,qBAAqB,EACrB,+BAA+B,EAC/B,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,OAAO,EACP,SAAS,EACT,MAAM,EAEN,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,eAAe,EACf,SAAS,EACT,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAKhB,KAAK,EACL,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,eAAe,EACf,QAAQ,EACR,cAAc,EAEd,SAAS,EACT,WAAW,EACX,WAAW,EACX,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,WAAW,EACX,UAAU,EAEV,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,UAAU,EAEV,YAAY,EACZ,UAAU,EAGV,UAAU,EACV,sBAAsB,EAEtB,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,IAAI,EAEJ,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAIhB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,IAAI,EACJ,KAAK,EACL,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,IAAI,EAEJ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EAGX,YAAY,EACZ,SAAS,EACT,YAAY,GACb,MAAM,eAAe,CAAA;AAEtB;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,UAAU;IACV,SAAS;IACT,OAAO;IACP,UAAU;IACV,OAAO;IACP,UAAU;IACV,WAAW;CACH,CAAA;AAIV,2FAA2F;AAC3F,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAQ,QAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACxD,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,UAAU,GAAgD,MAAM,CAAC,MAAM,CAAC;IACnF,QAAQ,EAAE,QAA6B;IACvC,OAAO,EAAE,OAA4B;IACrC,KAAK,EAAE,KAA0B;IACjC,QAAQ,EAAE,QAA6B;IACvC,KAAK,EAAE,KAA0B;IACjC,0FAA0F;IAC1F,QAAQ,EAAE,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAsB;IACjE,SAAS,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAsB;CACpE,CAAC,CAAA"}
|
|
@@ -14,11 +14,23 @@ export interface ResearchFinding {
|
|
|
14
14
|
/** http(s) URLs the run says it opened. */
|
|
15
15
|
sources: string[];
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* A page the run needed but could not open (0.9.0): refused, a 403, a CAPTCHA, a sign-in wall.
|
|
19
|
+
* What the person's own browser could gather for a fuller pass.
|
|
20
|
+
*/
|
|
21
|
+
export interface BlockedPage {
|
|
22
|
+
site: string;
|
|
23
|
+
/** An http(s) URL, when the run had one. */
|
|
24
|
+
url?: string;
|
|
25
|
+
why: string;
|
|
26
|
+
}
|
|
17
27
|
/** The shape both runs return (the reviewer inside its verdict). */
|
|
18
28
|
export interface ResearchAnswer {
|
|
19
29
|
summary: string;
|
|
20
30
|
findings: ResearchFinding[];
|
|
21
31
|
uncertain: string[];
|
|
32
|
+
/** Pages the run needed but could not open; absent when there were none. Never rendered. */
|
|
33
|
+
blocked?: BlockedPage[];
|
|
22
34
|
}
|
|
23
35
|
export declare const MAX_SUMMARY_CHARS = 1200;
|
|
24
36
|
export declare const MAX_CLAIM_CHARS = 400;
|
|
@@ -27,6 +39,9 @@ export declare const MAX_FINDINGS = 12;
|
|
|
27
39
|
export declare const MAX_SOURCES_PER_FINDING = 4;
|
|
28
40
|
export declare const MAX_UNCERTAIN = 6;
|
|
29
41
|
export declare const MAX_UNCERTAIN_CHARS = 300;
|
|
42
|
+
export declare const MAX_BLOCKED = 6;
|
|
43
|
+
export declare const MAX_BLOCKED_SITE_CHARS = 100;
|
|
44
|
+
export declare const MAX_BLOCKED_WHY_CHARS = 200;
|
|
30
45
|
/** Discord's DM limit is 2000 characters; the rest is headroom for the host's own framing. */
|
|
31
46
|
export declare const MAX_MESSAGE_CHARS = 1900;
|
|
32
47
|
/** The JSON schema the research run answers in: the spike's (docket-runner spike/cases.json). */
|
|
@@ -62,6 +77,28 @@ export declare const ANSWER_SCHEMA: {
|
|
|
62
77
|
readonly type: "string";
|
|
63
78
|
};
|
|
64
79
|
};
|
|
80
|
+
readonly blocked: {
|
|
81
|
+
readonly type: "array";
|
|
82
|
+
readonly description: string;
|
|
83
|
+
readonly items: {
|
|
84
|
+
readonly type: "object";
|
|
85
|
+
readonly properties: {
|
|
86
|
+
readonly site: {
|
|
87
|
+
readonly type: "string";
|
|
88
|
+
readonly description: "The site, such as boardgamegeek.com.";
|
|
89
|
+
};
|
|
90
|
+
readonly url: {
|
|
91
|
+
readonly type: "string";
|
|
92
|
+
readonly description: "The page's URL, if you had one.";
|
|
93
|
+
};
|
|
94
|
+
readonly why: {
|
|
95
|
+
readonly type: "string";
|
|
96
|
+
readonly description: "What stopped you, in a few words.";
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
readonly required: readonly ["site", "why"];
|
|
100
|
+
};
|
|
101
|
+
};
|
|
65
102
|
};
|
|
66
103
|
readonly required: readonly ["summary", "findings", "uncertain"];
|
|
67
104
|
};
|
|
@@ -73,6 +110,11 @@ export declare function safeUrl(value: unknown): string | null;
|
|
|
73
110
|
* on needs a source the run opened.
|
|
74
111
|
*/
|
|
75
112
|
export declare function parseAnswer(value: unknown): ResearchAnswer | null;
|
|
113
|
+
/**
|
|
114
|
+
* The blocked pages in `value`, cleaned: a one-line site and reason, the URL only when `safeUrl`
|
|
115
|
+
* takes it, at most `MAX_BLOCKED`. An entry with no site is dropped; anything not a list is none.
|
|
116
|
+
*/
|
|
117
|
+
export declare function parseBlocked(value: unknown): BlockedPage[];
|
|
76
118
|
/** The reviewer's three verdicts. */
|
|
77
119
|
export declare const VERDICTS: readonly ["approve", "revise", "reject"];
|
|
78
120
|
export type Verdict = (typeof VERDICTS)[number];
|
|
@@ -133,6 +175,28 @@ export declare const REVIEW_SCHEMA: {
|
|
|
133
175
|
readonly type: "string";
|
|
134
176
|
};
|
|
135
177
|
};
|
|
178
|
+
readonly blocked: {
|
|
179
|
+
readonly type: "array";
|
|
180
|
+
readonly description: string;
|
|
181
|
+
readonly items: {
|
|
182
|
+
readonly type: "object";
|
|
183
|
+
readonly properties: {
|
|
184
|
+
readonly site: {
|
|
185
|
+
readonly type: "string";
|
|
186
|
+
readonly description: "The site, such as boardgamegeek.com.";
|
|
187
|
+
};
|
|
188
|
+
readonly url: {
|
|
189
|
+
readonly type: "string";
|
|
190
|
+
readonly description: "The page's URL, if you had one.";
|
|
191
|
+
};
|
|
192
|
+
readonly why: {
|
|
193
|
+
readonly type: "string";
|
|
194
|
+
readonly description: "What stopped you, in a few words.";
|
|
195
|
+
};
|
|
196
|
+
};
|
|
197
|
+
readonly required: readonly ["site", "why"];
|
|
198
|
+
};
|
|
199
|
+
};
|
|
136
200
|
};
|
|
137
201
|
readonly required: readonly ["summary", "findings", "uncertain"];
|
|
138
202
|
readonly description: "The answer to send: the draft unchanged on approve, corrected on revise.";
|
|
@@ -146,7 +210,17 @@ export declare function parseReview(value: unknown): Review | null;
|
|
|
146
210
|
export declare function fitMessage(lines: string[]): string;
|
|
147
211
|
/**
|
|
148
212
|
* The DM a reviewed answer goes out as, at most `MAX_MESSAGE_CHARS`. Every piece of it was
|
|
149
|
-
* cleaned by `parseAnswer`; the title is the owner's own and is cleaned here.
|
|
213
|
+
* cleaned by `parseAnswer`; the title is the owner's own and is cleaned here. `tail`, when given,
|
|
214
|
+
* goes after the reviewer's note and is kept whole: the caller bounds it (the "couldn't open" list
|
|
215
|
+
* and the queued line, 0.9.0). Without it the DM is what it was before 0.9.0.
|
|
216
|
+
*/
|
|
217
|
+
export declare function renderAnswer(title: string, answer: ResearchAnswer, review: Review, tail?: string): string;
|
|
218
|
+
/** Lines fitted into at most `max` characters, whole lines dropped from the end. */
|
|
219
|
+
export declare function fitLines(lines: string[], max: number): string;
|
|
220
|
+
/**
|
|
221
|
+
* The DM a reviewed second pass goes out as (0.9.0): what the gathered pages added to an answer
|
|
222
|
+
* already sent, its new and corrected findings only, or one line when it adds nothing. At most
|
|
223
|
+
* `MAX_MESSAGE_CHARS`; every piece was cleaned by `parseAnswer`, the title is cleaned here.
|
|
150
224
|
*/
|
|
151
|
-
export declare function
|
|
225
|
+
export declare function renderUpdate(title: string, update: ResearchAnswer, review: Review): string;
|
|
152
226
|
//# sourceMappingURL=research-answer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research-answer.d.ts","sourceRoot":"","sources":["../src/research-answer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAEnD,gGAAgG;AAChG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;AAEtB,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,2CAA2C;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,oEAAoE;AACpE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"research-answer.d.ts","sourceRoot":"","sources":["../src/research-answer.ts"],"names":[],"mappings":"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"}
|
package/dist/research-answer.js
CHANGED
|
@@ -15,6 +15,9 @@ export const MAX_FINDINGS = 12;
|
|
|
15
15
|
export const MAX_SOURCES_PER_FINDING = 4;
|
|
16
16
|
export const MAX_UNCERTAIN = 6;
|
|
17
17
|
export const MAX_UNCERTAIN_CHARS = 300;
|
|
18
|
+
export const MAX_BLOCKED = 6;
|
|
19
|
+
export const MAX_BLOCKED_SITE_CHARS = 100;
|
|
20
|
+
export const MAX_BLOCKED_WHY_CHARS = 200;
|
|
18
21
|
/** Discord's DM limit is 2000 characters; the rest is headroom for the host's own framing. */
|
|
19
22
|
export const MAX_MESSAGE_CHARS = 1900;
|
|
20
23
|
/** The JSON schema the research run answers in: the spike's (docket-runner spike/cases.json). */
|
|
@@ -37,6 +40,21 @@ export const ANSWER_SCHEMA = {
|
|
|
37
40
|
},
|
|
38
41
|
},
|
|
39
42
|
uncertain: { type: "array", items: { type: "string" } },
|
|
43
|
+
blocked: {
|
|
44
|
+
type: "array",
|
|
45
|
+
description: "Pages you needed but could not open (refused, 403, CAPTCHA, sign-in wall), and the " +
|
|
46
|
+
"best source for a part that you could not or may not open; leave it out or empty " +
|
|
47
|
+
"when there were none.",
|
|
48
|
+
items: {
|
|
49
|
+
type: "object",
|
|
50
|
+
properties: {
|
|
51
|
+
site: { type: "string", description: "The site, such as boardgamegeek.com." },
|
|
52
|
+
url: { type: "string", description: "The page's URL, if you had one." },
|
|
53
|
+
why: { type: "string", description: "What stopped you, in a few words." },
|
|
54
|
+
},
|
|
55
|
+
required: ["site", "why"],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
40
58
|
},
|
|
41
59
|
required: ["summary", "findings", "uncertain"],
|
|
42
60
|
};
|
|
@@ -110,12 +128,36 @@ export function parseAnswer(value) {
|
|
|
110
128
|
if (line.length > 0)
|
|
111
129
|
uncertain.push(line);
|
|
112
130
|
}
|
|
131
|
+
const blocked = parseBlocked(value.blocked);
|
|
113
132
|
return {
|
|
114
133
|
summary,
|
|
115
134
|
findings: findings.slice(0, MAX_FINDINGS),
|
|
116
135
|
uncertain: uncertain.slice(0, MAX_UNCERTAIN),
|
|
136
|
+
...(blocked.length > 0 ? { blocked } : {}),
|
|
117
137
|
};
|
|
118
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* The blocked pages in `value`, cleaned: a one-line site and reason, the URL only when `safeUrl`
|
|
141
|
+
* takes it, at most `MAX_BLOCKED`. An entry with no site is dropped; anything not a list is none.
|
|
142
|
+
*/
|
|
143
|
+
export function parseBlocked(value) {
|
|
144
|
+
if (!Array.isArray(value))
|
|
145
|
+
return [];
|
|
146
|
+
const out = [];
|
|
147
|
+
for (const b of value) {
|
|
148
|
+
if (out.length >= MAX_BLOCKED)
|
|
149
|
+
break;
|
|
150
|
+
if (!isObj(b) || typeof b.site !== "string")
|
|
151
|
+
continue;
|
|
152
|
+
const site = clean(b.site, MAX_BLOCKED_SITE_CHARS, true);
|
|
153
|
+
if (site.length === 0)
|
|
154
|
+
continue;
|
|
155
|
+
const why = typeof b.why === "string" ? clean(b.why, MAX_BLOCKED_WHY_CHARS, true) : "";
|
|
156
|
+
const url = safeUrl(b.url);
|
|
157
|
+
out.push({ site, ...(url ? { url } : {}), why });
|
|
158
|
+
}
|
|
159
|
+
return out;
|
|
160
|
+
}
|
|
119
161
|
/** The reviewer's three verdicts. */
|
|
120
162
|
export const VERDICTS = ["approve", "revise", "reject"];
|
|
121
163
|
export const MAX_PROBLEMS = 5;
|
|
@@ -187,9 +229,11 @@ export function fitMessage(lines) {
|
|
|
187
229
|
}
|
|
188
230
|
/**
|
|
189
231
|
* The DM a reviewed answer goes out as, at most `MAX_MESSAGE_CHARS`. Every piece of it was
|
|
190
|
-
* cleaned by `parseAnswer`; the title is the owner's own and is cleaned here.
|
|
232
|
+
* cleaned by `parseAnswer`; the title is the owner's own and is cleaned here. `tail`, when given,
|
|
233
|
+
* goes after the reviewer's note and is kept whole: the caller bounds it (the "couldn't open" list
|
|
234
|
+
* and the queued line, 0.9.0). Without it the DM is what it was before 0.9.0.
|
|
191
235
|
*/
|
|
192
|
-
export function renderAnswer(title, answer, review) {
|
|
236
|
+
export function renderAnswer(title, answer, review, tail = "") {
|
|
193
237
|
const lines = [`Research: ${clean(title, 200, true)}`, "", answer.summary];
|
|
194
238
|
if (answer.findings.length > 0) {
|
|
195
239
|
lines.push("", "Findings:");
|
|
@@ -202,6 +246,29 @@ export function renderAnswer(title, answer, review) {
|
|
|
202
246
|
for (const u of answer.uncertain)
|
|
203
247
|
lines.push(`- ${u}`);
|
|
204
248
|
}
|
|
249
|
+
const note = review.verdict === "approve"
|
|
250
|
+
? "Checked by a reviewer run."
|
|
251
|
+
: `Checked and corrected by a reviewer run (${review.problems.length} problem(s) fixed).`;
|
|
252
|
+
const after = tail.length > 0 ? `${note}\n\n${tail}` : note;
|
|
253
|
+
return `${fit(lines, MAX_MESSAGE_CHARS - after.length - 2)}\n\n${after}`;
|
|
254
|
+
}
|
|
255
|
+
/** Lines fitted into at most `max` characters, whole lines dropped from the end. */
|
|
256
|
+
export function fitLines(lines, max) {
|
|
257
|
+
return fit(lines, max);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* The DM a reviewed second pass goes out as (0.9.0): what the gathered pages added to an answer
|
|
261
|
+
* already sent, its new and corrected findings only, or one line when it adds nothing. At most
|
|
262
|
+
* `MAX_MESSAGE_CHARS`; every piece was cleaned by `parseAnswer`, the title is cleaned here.
|
|
263
|
+
*/
|
|
264
|
+
export function renderUpdate(title, update, review) {
|
|
265
|
+
const head = `Update to ${clean(title, 200, true)}:`;
|
|
266
|
+
if (update.findings.length === 0) {
|
|
267
|
+
return `${head} the pages added nothing new, so the first answer stands.`;
|
|
268
|
+
}
|
|
269
|
+
const lines = [head, "", update.summary, "", "New or corrected:"];
|
|
270
|
+
for (const f of update.findings)
|
|
271
|
+
lines.push(`- ${f.claim} <${f.sources[0]}>`);
|
|
205
272
|
const note = review.verdict === "approve"
|
|
206
273
|
? "Checked by a reviewer run."
|
|
207
274
|
: `Checked and corrected by a reviewer run (${review.problems.length} problem(s) fixed).`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research-answer.js","sourceRoot":"","sources":["../src/research-answer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAEnD,gGAAgG;AAChG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"research-answer.js","sourceRoot":"","sources":["../src/research-answer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { type BlockedPage, type ResearchAnswer } from "./research-answer.js";
|
|
1
2
|
/**
|
|
2
3
|
* Pages gathered for a research request by the person's own browser (rackbops-bot-plugins#125,
|
|
3
|
-
* E9): the research half of the Claude in Chrome route. BoardGameGeek refuses the runner's
|
|
4
|
-
* and declined API access, and eBay is never opened by the tracker (Rod, 2026-10-05
|
|
4
|
+
* E9): the research half of the Claude in Chrome route. BoardGameGeek often refuses the runner's
|
|
5
|
+
* reads and declined API access, and eBay is never opened by the tracker (Rod, 2026-10-05; eBay's
|
|
6
|
+
* User Agreement, section 3 (automated access)), so a request
|
|
5
7
|
* made with `sources: "sent"` waits until the person's browser -- Claude in Chrome, when they ask
|
|
6
8
|
* it to -- has read pages for it and the host has stored them. The research run and its reviewer
|
|
7
9
|
* then work from those pages' text, quoted into their prompts as data; neither run may fetch
|
|
@@ -27,8 +29,28 @@ export declare const MAX_PAGE_CHARS = 12000;
|
|
|
27
29
|
/** Text kept from all of a request's pages together; a page past it is cut, the rest dropped. */
|
|
28
30
|
export declare const MAX_GATHERED_CHARS = 100000;
|
|
29
31
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
+
* The sites a run on gathered pages never opens (0.10.0, one list for the tool denials, the
|
|
33
|
+
* de-duplication of `blocked` and the belt): BoardGameGeek, whose pages there come from the
|
|
34
|
+
* person's browser, and eBay, which the tracker never opens (eBay's User Agreement, section 3
|
|
35
|
+
* (automated access)). A first pass on the web opens BoardGameGeek like any site (Rod, 2026-10-16)
|
|
36
|
+
* and lists a refused page in `blocked`; it never opens eBay (`everywhere`). Each is the best
|
|
37
|
+
* source for its field (board games; listings and prices). Only fetches are denied: WebSearch has
|
|
38
|
+
* no domain filter, so a search may still list their pages. `domains` are the permission-rule
|
|
39
|
+
* hosts (each also as `*.host`); `host` tells a URL's hostname on the site; `names` are the ways
|
|
40
|
+
* text names it, as a pattern source.
|
|
41
|
+
*/
|
|
42
|
+
export declare const BARRED_SITES: readonly {
|
|
43
|
+
site: string;
|
|
44
|
+
domains: readonly string[];
|
|
45
|
+
host: RegExp;
|
|
46
|
+
names: string;
|
|
47
|
+
/** Never opened by any run, a web first pass included: eBay. */
|
|
48
|
+
everywhere: boolean;
|
|
49
|
+
}[];
|
|
50
|
+
/**
|
|
51
|
+
* What a run on gathered pages may not fetch: BoardGameGeek, whose pages there come from the
|
|
52
|
+
* person's browser, and eBay, which the tracker never opens (eBay's User Agreement, section 3
|
|
53
|
+
* (automated access)). Claude Code permission rules (code.claude.com/docs/en/permissions,
|
|
32
54
|
* read 2026-10-13): `domain:host` matches that host only, `domain:*.host` any subdomain at any
|
|
33
55
|
* depth, and a `*` elsewhere one label, so `ebay.*` is `ebay.fr` and `ebay.co.*` is `ebay.co.uk`.
|
|
34
56
|
* Whether `*.ebay.*` (a leading and a later `*`) is accepted is inferred from that wording. Deny
|
|
@@ -37,6 +59,41 @@ export declare const MAX_GATHERED_CHARS = 100000;
|
|
|
37
59
|
* them: not covered).
|
|
38
60
|
*/
|
|
39
61
|
export declare const SENT_DISALLOWED_TOOLS: string[];
|
|
62
|
+
/**
|
|
63
|
+
* What a web first pass, and its reviewer, may not fetch (0.10.0): eBay only (eBay's User
|
|
64
|
+
* Agreement, section 3 (automated access)). BoardGameGeek they open like any site, and list a page
|
|
65
|
+
* that refuses them in `blocked`.
|
|
66
|
+
*/
|
|
67
|
+
export declare const WEB_DISALLOWED_TOOLS: string[];
|
|
68
|
+
/**
|
|
69
|
+
* The key one entry of `blocked` is told apart by (0.10.0): its page (`pageOf`) when it has a
|
|
70
|
+
* URL, so two pages on one site are two entries; its site (`siteOf`) when it has none.
|
|
71
|
+
*/
|
|
72
|
+
export declare function blockedKey(entry: BlockedPage): string;
|
|
73
|
+
/**
|
|
74
|
+
* `entries` with one entry per page, at most `MAX_BLOCKED` (0.10.0). Two entries with one page
|
|
75
|
+
* (`blockedKey`) are one, the first kept. An entry with no URL merges into any entry on its site
|
|
76
|
+
* (`sitesOf`): after one, it is dropped; before one, the entry with the URL takes its place. So
|
|
77
|
+
* "BoardGameGeek" and a boardgamegeek.com page are one entry, and two BoardGameGeek pages are two.
|
|
78
|
+
*/
|
|
79
|
+
export declare function uniqueBlocked(entries: readonly BlockedPage[]): BlockedPage[];
|
|
80
|
+
/** What the belt says of a barred site the answer leaves unread and unlisted. */
|
|
81
|
+
export declare const NOT_OPENED_WHY = "not opened by the research run";
|
|
82
|
+
/**
|
|
83
|
+
* The belt under the prompts (0.10.0): `blocked` with an entry `{site, why: NOT_OPENED_WHY}`, no
|
|
84
|
+
* URL, added for each site of `BARRED_SITES` the answer leaves unread without listing it. It reads
|
|
85
|
+
* the outgoing `answer` and the research run's own `draft`, so a reviewer's rewording or a claim
|
|
86
|
+
* moved to `uncertain` cannot hide it. A site counts as unread when a sentence of a summary or an
|
|
87
|
+
* uncertain line says so in one of `unreadShapes` ("I didn't check BoardGameGeek", "BGG refused
|
|
88
|
+
* the request", "no BGG ratings"); eBay, which no run opens, also when a finding of either rests
|
|
89
|
+
* only on eBay addresses (a search listing, never an opened page). A passing mention, or a
|
|
90
|
+
* negation that is not about the site, counts for neither. BoardGameGeek is left alone when a
|
|
91
|
+
* finding of the outgoing answer cites one of its pages (a web first pass may open it); eBay has
|
|
92
|
+
* no such exemption. An entry on the site, by its site's name or its URL's host (`sitesOf`: a
|
|
93
|
+
* "BoardGameGeek" entry with an archive.org URL counts), stops it; past `MAX_BLOCKED` nothing is
|
|
94
|
+
* added.
|
|
95
|
+
*/
|
|
96
|
+
export declare function withBarredSites(answer: ResearchAnswer, blocked: readonly BlockedPage[], draft?: ResearchAnswer | null): BlockedPage[];
|
|
40
97
|
/** A page whose text would be cut shorter than this to fit the whole is dropped instead. */
|
|
41
98
|
export declare const MIN_PAGE_CHARS = 200;
|
|
42
99
|
/**
|
|
@@ -54,4 +111,24 @@ export declare function gatheredPages(raw: readonly unknown[]): GatheredPage[];
|
|
|
54
111
|
export declare function pagesJson(pages: readonly GatheredPage[]): string;
|
|
55
112
|
/** The prompt lines that carry the pages, for the research run and the reviewer alike. */
|
|
56
113
|
export declare function pagesBlock(pages: readonly GatheredPage[]): string[];
|
|
114
|
+
/** The longest a request waits for gathered pages, in days. */
|
|
115
|
+
export declare const SOURCES_WAIT_DAYS = 14;
|
|
116
|
+
export declare const SOURCES_WAIT_MS: number;
|
|
117
|
+
/**
|
|
118
|
+
* How long before its deadline a wait for pages ends when the deadline comes first: a research run
|
|
119
|
+
* makes no call once it starts past the deadline, and the execute tick picks a due run up within a
|
|
120
|
+
* minute or two, so a run queued at the deadline itself would always miss it.
|
|
121
|
+
*/
|
|
122
|
+
export declare const SOURCES_DEADLINE_MARGIN_MINUTES = 10;
|
|
123
|
+
export declare const SOURCES_DEADLINE_MARGIN_MS: number;
|
|
124
|
+
/**
|
|
125
|
+
* When a wait for gathered pages begun at `now` ends if the pages never come: `SOURCES_WAIT_DAYS`
|
|
126
|
+
* out, or `SOURCES_DEADLINE_MARGIN_MINUTES` before the deadline when that is sooner (never before
|
|
127
|
+
* `now`). `byDeadline` says which. The tracker plugin's own copy (rackbops-bot-plugins
|
|
128
|
+
* `research-sources.ts`) moves here (0.9.0).
|
|
129
|
+
*/
|
|
130
|
+
export declare function sourcesExpiry(now: Date, deadline: Date | null): {
|
|
131
|
+
at: Date;
|
|
132
|
+
byDeadline: boolean;
|
|
133
|
+
};
|
|
57
134
|
//# sourceMappingURL=research-sources.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research-sources.d.ts","sourceRoot":"","sources":["../src/research-sources.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"research-sources.d.ts","sourceRoot":"","sources":["../src/research-sources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAe,KAAK,cAAc,EAAW,MAAM,sBAAsB,CAAA;AAElG;;;;;;;;;;;;;GAaG;AAEH,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,mGAAmG;AACnG,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAA;AAE9E,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,KAAK,CAAA;AACpC,eAAO,MAAM,oBAAoB,MAAM,CAAA;AACvC,+BAA+B;AAC/B,eAAO,MAAM,cAAc,QAAS,CAAA;AACpC,iGAAiG;AACjG,eAAO,MAAM,kBAAkB,SAAU,CAAA;AAEzC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,gEAAgE;IAChE,UAAU,EAAE,OAAO,CAAA;CACpB,EAeA,CAAA;AA0ED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,UAA4D,CAAA;AAE9F;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,UAAgE,CAAA;AAkCjG;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAErD;AASD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,WAAW,EAAE,CAoB5E;AAED,iFAAiF;AACjF,eAAO,MAAM,cAAc,mCAAmC,CAAA;AAE9D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAC5B,WAAW,EAAE,CAkBf;AAED,4FAA4F;AAC5F,eAAO,MAAM,cAAc,MAAM,CAAA;AAEjC;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,OAAO,EAAE,GAAG,YAAY,EAAE,CAoBrE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAEhE;AAED,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,EAAE,CAanE;AAED,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,KAAK,CAAA;AACnC,eAAO,MAAM,eAAe,QAA0C,CAAA;AAEtE;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,KAAK,CAAA;AACjD,eAAO,MAAM,0BAA0B,QAA8C,CAAA;AAErF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CASjG"}
|