@getopencrawl/sdk 0.0.0-stage → 0.2.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/README.md +598 -2
- package/dist/agentPlatform.d.ts +146 -0
- package/dist/agentPlatform.d.ts.map +1 -0
- package/dist/agentPlatform.js +48 -0
- package/dist/agentPlatform.js.map +1 -0
- package/dist/agents.d.ts +237 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +279 -0
- package/dist/agents.js.map +1 -0
- package/dist/answerContract.d.ts +85 -0
- package/dist/answerContract.d.ts.map +1 -0
- package/dist/answerContract.js +112 -0
- package/dist/answerContract.js.map +1 -0
- package/dist/answerView.d.ts +40 -0
- package/dist/answerView.d.ts.map +1 -0
- package/dist/answerView.js +118 -0
- package/dist/answerView.js.map +1 -0
- package/dist/configuration.d.ts +5 -0
- package/dist/configuration.d.ts.map +1 -0
- package/dist/configuration.js +29 -0
- package/dist/configuration.js.map +1 -0
- package/dist/customers.d.ts +176 -0
- package/dist/customers.d.ts.map +1 -0
- package/dist/customers.js +286 -0
- package/dist/customers.js.map +1 -0
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +58 -0
- package/dist/errors.js.map +1 -0
- package/dist/eventEvidence.d.ts +10 -0
- package/dist/eventEvidence.d.ts.map +1 -0
- package/dist/eventEvidence.js +52 -0
- package/dist/eventEvidence.js.map +1 -0
- package/dist/index.d.ts +98 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +139 -0
- package/dist/index.js.map +1 -0
- package/dist/productMonitors.d.ts +258 -0
- package/dist/productMonitors.d.ts.map +1 -0
- package/dist/productMonitors.js +68 -0
- package/dist/productMonitors.js.map +1 -0
- package/dist/researchAnswerContract.d.ts +8 -0
- package/dist/researchAnswerContract.d.ts.map +1 -0
- package/dist/researchAnswerContract.js +23 -0
- package/dist/researchAnswerContract.js.map +1 -0
- package/dist/researchAnswerView.d.ts +8 -0
- package/dist/researchAnswerView.d.ts.map +1 -0
- package/dist/researchAnswerView.js +27 -0
- package/dist/researchAnswerView.js.map +1 -0
- package/dist/researchCompletion.d.ts +114 -0
- package/dist/researchCompletion.d.ts.map +1 -0
- package/dist/researchCompletion.js +94 -0
- package/dist/researchCompletion.js.map +1 -0
- package/dist/serviceTenants.d.ts +15 -0
- package/dist/serviceTenants.d.ts.map +1 -0
- package/dist/serviceTenants.js +58 -0
- package/dist/serviceTenants.js.map +1 -0
- package/dist/tools.d.ts +59 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +60 -0
- package/dist/tools.js.map +1 -0
- package/dist/transport.d.ts +34 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +227 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +399 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/webhooks.d.ts +38 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +73 -0
- package/dist/webhooks.js.map +1 -0
- package/examples/letter-customer-research-demo.mjs +54 -0
- package/examples/letter-customer-research-store.d.mts +38 -0
- package/examples/letter-customer-research-store.mjs +186 -0
- package/examples/letter-customer-research.d.mts +39 -0
- package/examples/letter-customer-research.mjs +194 -0
- package/examples/letter-event-receiver.d.mts +10 -0
- package/examples/letter-event-receiver.mjs +55 -0
- package/examples/letter-event-store.d.mts +35 -0
- package/examples/letter-event-store.mjs +84 -0
- package/examples/letter-seer.d.mts +31 -0
- package/examples/letter-seer.mjs +78 -0
- package/examples/letter-service-tenants.d.mts +12 -0
- package/examples/letter-service-tenants.mjs +49 -0
- package/examples/research-webhook-receiver.mjs +29 -0
- package/package.json +75 -4
package/dist/agents.js
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { readResearchCompletion } from './researchCompletion.js';
|
|
2
|
+
import { boundedInteger, idPath, idempotencyKey } from './transport.js';
|
|
3
|
+
import { OpenCrawlAbortError, OpenCrawlProtocolError, OpenCrawlTimeoutError, OpenCrawlValidationError } from './errors.js';
|
|
4
|
+
const ROOT = '/api/research/agents', active = new Set(['queued', 'running']);
|
|
5
|
+
const object = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
6
|
+
const text = (v, max, min = 0) => typeof v === 'string' && Array.from(v).length >= min && Array.from(v).length <= max && !/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u.test(v);
|
|
7
|
+
const integer = (v, min = 0, max = Number.MAX_SAFE_INTEGER) => typeof v === 'number' && Number.isSafeInteger(v) && v >= min && v <= max;
|
|
8
|
+
const stamp = (v) => typeof v === 'string' && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,6})?(?:Z|\+00:00)$/.test(v) && Number.isFinite(Date.parse(v)) && new Date(v).toISOString().slice(0, 19) === v.slice(0, 19);
|
|
9
|
+
function canonicalWebsite(value) { if (/[\\\s\u0000-\u001f\u007f]/.test(value) || /%(?![0-9a-f]{2})/i.test(value))
|
|
10
|
+
throw new OpenCrawlValidationError('Use a valid public website URL.'); const u = new URL(value); u.hash = ''; return new URL(u.href.replace(/%([0-9a-f]{2})/gi, (_all, hex) => { const ch = String.fromCharCode(parseInt(hex, 16)); return /^[A-Za-z0-9._~-]$/.test(ch) ? ch : '%' + hex.toUpperCase(); })).href; }
|
|
11
|
+
function url(v) { if (!text(v, 2048, 1))
|
|
12
|
+
return false; try {
|
|
13
|
+
const u = new URL(v);
|
|
14
|
+
return ['http:', 'https:'].includes(u.protocol) && !u.username && !u.password && !!u.hostname;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
} }
|
|
19
|
+
const fields = (value, keys) => Object.keys(value).every(key => keys.includes(key));
|
|
20
|
+
const historyCursor = (value) => typeof value === 'string' && /^[\x21-\x7e]{1,512}$/.test(value);
|
|
21
|
+
function pageEvidence(cite) {
|
|
22
|
+
if (cite.source_kind !== 'web_page')
|
|
23
|
+
return !Object.hasOwn(cite, 'page');
|
|
24
|
+
const p = cite.page;
|
|
25
|
+
return object(p) && fields(p, ['requested_url', 'final_url', 'body_sha256', 'start', 'end', 'total_chars', 'extractor']) && url(p.requested_url) && url(p.final_url) && p.final_url === cite.url && typeof p.body_sha256 === 'string' && /^[0-9a-f]{64}$/.test(p.body_sha256) && integer(p.start, 0, 131071) && integer(p.end, 1, 131072) && integer(p.total_chars, 1, 131072) && p.start < p.end && p.end <= p.total_chars && p.end - p.start <= 16000 && typeof cite.end === 'number' && cite.end <= p.end - p.start && p.extractor === 'public-static-v3';
|
|
26
|
+
}
|
|
27
|
+
function invalid() { throw new OpenCrawlProtocolError('OpenCrawl returned invalid or out-of-scope saved research findings. No result was assumed.'); }
|
|
28
|
+
const feedbackRatings = ['useful', 'irrelevant', 'incorrect', 'outdated'];
|
|
29
|
+
function feedbackNote(value) { return value === null || text(value, 1000) && !value.includes('\u0000') && new TextEncoder().encode(value).length <= 4096; }
|
|
30
|
+
export function validateAgentFeedbackInput(input) {
|
|
31
|
+
if (!object(input) || !fields(input, ['expected_revision', 'rating', 'note']) || !feedbackRatings.includes(input.rating) || !feedbackNote(input.note ?? null))
|
|
32
|
+
throw new OpenCrawlValidationError('Use one feedback rating and a valid note of at most 1000 Unicode characters, without NUL.');
|
|
33
|
+
boundedInteger(input.expected_revision, 'expected_revision', 0, Number.MAX_SAFE_INTEGER);
|
|
34
|
+
return { expected_revision: input.expected_revision, rating: input.rating, note: input.note ?? null };
|
|
35
|
+
}
|
|
36
|
+
export function validateAgentFeedback(value, agentId, runId, findingId) {
|
|
37
|
+
if (!object(value) || !fields(value, ['agent_id', 'run_id', 'finding_id', 'feedback']) || value.agent_id !== agentId || value.run_id !== runId || value.finding_id !== findingId || !object(value.feedback))
|
|
38
|
+
invalid();
|
|
39
|
+
const f = value.feedback;
|
|
40
|
+
if (!fields(f, ['version', 'revision', 'state', 'rating', 'note', 'updated_at']) || f.version !== 1 || !integer(f.revision) || !feedbackNote(f.note) || new TextEncoder().encode(JSON.stringify(value)).length > 8192)
|
|
41
|
+
invalid();
|
|
42
|
+
if (f.state === 'absent') {
|
|
43
|
+
if (f.revision !== 0 || f.rating !== null || f.note !== null || f.updated_at !== null)
|
|
44
|
+
invalid();
|
|
45
|
+
}
|
|
46
|
+
else if (f.state === 'deleted') {
|
|
47
|
+
if (f.revision < 1 || f.rating !== null || f.note !== null || !stamp(f.updated_at))
|
|
48
|
+
invalid();
|
|
49
|
+
}
|
|
50
|
+
else if (f.state === 'active') {
|
|
51
|
+
if (f.revision < 1 || !feedbackRatings.includes(f.rating) || !stamp(f.updated_at))
|
|
52
|
+
invalid();
|
|
53
|
+
}
|
|
54
|
+
else
|
|
55
|
+
invalid();
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
async function validateAgentSource(value, agentId, runId, sourceId) {
|
|
59
|
+
if (!object(value) || !fields(value, ['agent_id', 'run_id', 'source']) || value.agent_id !== agentId || value.run_id !== runId || !object(value.source))
|
|
60
|
+
invalid();
|
|
61
|
+
const source = value.source;
|
|
62
|
+
if (!fields(source, ['id', 'url', 'title', 'text', 'body_sha256', 'observed_at', 'published_at', 'source_kind', 'collection_id', 'document_id', 'version_id', 'page']) || source.id !== sourceId || !text(source.id, 80, 1) || !url(source.url) || !text(source.title, 2048, 1) || !text(source.text, 16000, 1) || !source.text.trim() || source.text.includes('\u0000') || !stamp(source.observed_at) || source.published_at !== null && !text(source.published_at, 100, 1) || !['indexed', 'web_page'].includes(source.source_kind) || !pageEvidence({ ...source, end: Array.from(source.text).length }) || typeof source.body_sha256 !== 'string' || !/^[0-9a-f]{64}$/.test(source.body_sha256))
|
|
63
|
+
invalid();
|
|
64
|
+
for (const key of ['collection_id', 'document_id', 'version_id'])
|
|
65
|
+
if (source.source_kind === 'indexed' ? !text(source[key], 200, 1) : source[key] !== null)
|
|
66
|
+
invalid();
|
|
67
|
+
if (source.source_kind === 'web_page' && object(source.page) && Number(source.page.end) - Number(source.page.start) !== Array.from(source.text).length)
|
|
68
|
+
invalid();
|
|
69
|
+
if (new TextEncoder().encode(JSON.stringify(value)).length > 131072)
|
|
70
|
+
invalid();
|
|
71
|
+
const hash = Array.from(new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(source.text))), byte => byte.toString(16).padStart(2, '0')).join('');
|
|
72
|
+
if (hash !== source.body_sha256)
|
|
73
|
+
invalid();
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
function validateResearchPolicy(value) { if (value !== undefined && value !== 'completion_v1' && value !== 'completion_v2' && value !== 'completion_v3')
|
|
77
|
+
throw new OpenCrawlValidationError('Use an explicit completion_v1, completion_v2 or completion_v3 research policy, or omit it.'); }
|
|
78
|
+
export function validateAgentInput(input) {
|
|
79
|
+
if (!object(input) || !fields(input, ['customer', 'goal', 'collection_ids', 'schedule_minutes', 'research_policy']) || !object(input.customer) || !fields(input.customer, ['name', 'website', 'context']) || !text(input.customer.name, 200, 1) || !input.customer.name.trim() || !url(input.customer.website) || !text(input.customer.context ?? '', 4000) || !text(input.goal, 4000, 1) || !input.goal.trim() || input.schedule_minutes !== undefined && input.schedule_minutes !== 0 || !Array.isArray(input.collection_ids ?? []) || (input.collection_ids ?? []).length > 8 || !(input.collection_ids ?? []).every(id => text(id, 200, 1)) || new Set(input.collection_ids ?? []).size !== (input.collection_ids ?? []).length)
|
|
80
|
+
throw new OpenCrawlValidationError('Supply a customer name and public website, a bounded goal, up to eight unique collection IDs, and schedule_minutes 0.');
|
|
81
|
+
validateResearchPolicy(input.research_policy);
|
|
82
|
+
const value = { customer: { name: input.customer.name.trim(), website: canonicalWebsite(input.customer.website), context: input.customer.context ?? '' }, goal: input.goal.trim(), collection_ids: input.collection_ids ?? [], schedule_minutes: 0, ...(input.research_policy === undefined ? {} : { research_policy: input.research_policy }) };
|
|
83
|
+
if (new TextEncoder().encode(JSON.stringify(value)).length > 32768)
|
|
84
|
+
throw new OpenCrawlValidationError('The research brief exceeds 32 KiB.');
|
|
85
|
+
return value;
|
|
86
|
+
}
|
|
87
|
+
export function validateAgentRun(value, agentId, runId) {
|
|
88
|
+
if (!object(value) || !fields(value, ['id', 'agent_id', 'agent_revision', 'status', 'phase', 'created_at', 'started_at', 'finished_at', 'outcome', 'findings', 'gaps', 'usage', 'error']) || !text(value.id, 200, 1) || runId !== undefined && value.id !== runId || !text(value.agent_id, 200, 1) || agentId !== undefined && value.agent_id !== agentId || !integer(value.agent_revision, 1) || !['queued', 'running', 'completed', 'partial', 'needs_input', 'failed', 'unknown', 'cancelled'].includes(value.status) || !['queued', 'researching', 'synthesizing', 'presenting', 'finished'].includes(value.phase) || !stamp(value.created_at) || value.started_at !== null && !stamp(value.started_at) || value.finished_at !== null && !stamp(value.finished_at) || !['findings', 'no_supported_findings', 'needs_input', null].includes(value.outcome) || !Array.isArray(value.findings) || value.findings.length > 5 || !Array.isArray(value.gaps) || value.gaps.length > 5 || !value.gaps.every(g => text(g, 500, 1)) || !object(value.usage) || value.error !== null && (!object(value.error) || !text(value.error.code, 100, 1) || !text(value.error.message, 1000, 1)))
|
|
89
|
+
invalid();
|
|
90
|
+
const ids = new Set();
|
|
91
|
+
for (const finding of value.findings) {
|
|
92
|
+
if (!object(finding) || !fields(finding, ['id', 'claim', 'relevance', 'qualifiers', 'citations']) || !text(finding.id, 200, 1) || ids.has(finding.id) || !text(finding.claim, 1500, 1) || !text(finding.relevance, 1500, 1) || !Array.isArray(finding.qualifiers) || finding.qualifiers.length > 5 || !finding.qualifiers.every(q => text(q, 300, 1)) || !Array.isArray(finding.citations) || finding.citations.length < 1 || finding.citations.length > 3)
|
|
93
|
+
invalid();
|
|
94
|
+
ids.add(finding.id);
|
|
95
|
+
for (const cite of finding.citations) {
|
|
96
|
+
if (!object(cite) || !fields(cite, ['id', 'url', 'title', 'quote', 'start', 'end', 'body_sha256', 'observed_at', 'published_at', 'source_kind', 'collection_id', 'document_id', 'version_id', 'page']) || !text(cite.id, 80, 1) || !url(cite.url) || !text(cite.title, 2048) || !text(cite.quote, 1200, 1) || !integer(cite.start, 0, 16000) || !integer(cite.end, 1, 16000) || cite.end - cite.start !== Array.from(cite.quote).length || typeof cite.body_sha256 !== 'string' || !/^[0-9a-f]{64}$/.test(cite.body_sha256) || !stamp(cite.observed_at) || cite.published_at !== null && !text(cite.published_at, 100, 1) || !['web_search', 'indexed', 'web_page'].includes(cite.source_kind) || !pageEvidence(cite))
|
|
97
|
+
invalid();
|
|
98
|
+
for (const key of ['collection_id', 'document_id', 'version_id'])
|
|
99
|
+
if (cite.source_kind === 'indexed' ? !text(cite[key], 200, 1) : cite[key] !== null)
|
|
100
|
+
invalid();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if ((value.outcome === 'findings') !== Boolean(value.findings.length) || active.has(String(value.status)) && (value.phase === 'finished' || value.outcome !== null || value.findings.length || value.finished_at !== null) || !active.has(String(value.status)) && value.phase !== 'finished' || new TextEncoder().encode(JSON.stringify({ findings: value.findings, gaps: value.gaps })).length > 32768 || new TextEncoder().encode(JSON.stringify(value.usage)).length > 16384)
|
|
104
|
+
invalid();
|
|
105
|
+
return value;
|
|
106
|
+
}
|
|
107
|
+
export function validateAgent(value, id) {
|
|
108
|
+
if (!object(value) || !fields(value, ['id', 'customer', 'goal', 'collection_ids', 'revision', 'status', 'schedule_minutes', 'created_at', 'updated_at', 'latest_run']) || !text(value.id, 200, 1) || id !== undefined && value.id !== id || !integer(value.revision, 1) || !['active', 'paused'].includes(value.status) || ![0, 1440].includes(value.schedule_minutes) || !stamp(value.created_at) || !stamp(value.updated_at) || !object(value.customer) || !text(value.customer.context, 4000))
|
|
109
|
+
invalid();
|
|
110
|
+
try {
|
|
111
|
+
validateAgentInput({ customer: value.customer, goal: value.goal, collection_ids: value.collection_ids, schedule_minutes: 0 });
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
invalid();
|
|
115
|
+
}
|
|
116
|
+
if (value.latest_run !== null)
|
|
117
|
+
validateAgentRun(value.latest_run, value.id);
|
|
118
|
+
return value;
|
|
119
|
+
}
|
|
120
|
+
export function validateAgentSchedule(value, agentId) {
|
|
121
|
+
if (!object(value) || !fields(value, ['agent_id', 'revision', 'enabled', 'schedule_minutes', 'next_scheduled_at', 'blocked_reason', 'blocked_run_id', 'deferred_reason']) || value.agent_id !== agentId || !integer(value.revision) || typeof value.enabled !== 'boolean' || value.schedule_minutes !== (value.enabled ? 1440 : 0) || !['unknown', 'failed', 'needs_input', 'cancelled', 'access_changed', 'agent_paused', null].includes(value.blocked_reason) || !['capacity', 'daily_budget', 'storage', 'run_active', 'history_capacity', null].includes(value.deferred_reason) || value.blocked_run_id !== null && !text(value.blocked_run_id, 200, 1) || value.next_scheduled_at !== null && !stamp(value.next_scheduled_at))
|
|
122
|
+
invalid();
|
|
123
|
+
if ((!value.enabled || value.blocked_reason !== null) && value.deferred_reason !== null || !value.enabled && (value.next_scheduled_at !== null || value.blocked_reason !== null || value.blocked_run_id !== null) || value.enabled && (value.revision === 0 || (value.blocked_reason === null) !== (value.next_scheduled_at !== null)) || value.blocked_reason === null && value.blocked_run_id !== null)
|
|
124
|
+
invalid();
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
export function validateAgentRepeats(value, agentId, runId) {
|
|
128
|
+
if (!object(value) || !fields(value, ['agent_id', 'run_id', 'status', 'items']) || value.agent_id !== agentId || value.run_id !== runId || !['available', 'not_assessed'].includes(value.status) || !Array.isArray(value.items) || value.items.length > 5 || value.status === 'not_assessed' && value.items.length)
|
|
129
|
+
invalid();
|
|
130
|
+
const seen = new Set();
|
|
131
|
+
for (const item of value.items) {
|
|
132
|
+
if (!object(item) || !fields(item, ['finding_id', 'classification', 'first_seen_run_id', 'first_seen_finding_id']) || !text(item.finding_id, 200, 1) || seen.has(item.finding_id) || !text(item.first_seen_run_id, 200, 1) || !text(item.first_seen_finding_id, 200, 1) || !['first_seen', 'exact_repeat'].includes(item.classification))
|
|
133
|
+
invalid();
|
|
134
|
+
const same = item.first_seen_run_id === runId && item.first_seen_finding_id === item.finding_id;
|
|
135
|
+
if ((item.classification === 'first_seen') !== same || item.classification === 'exact_repeat' && item.first_seen_run_id === runId)
|
|
136
|
+
invalid();
|
|
137
|
+
seen.add(item.finding_id);
|
|
138
|
+
}
|
|
139
|
+
return value;
|
|
140
|
+
}
|
|
141
|
+
class AgentSchedule {
|
|
142
|
+
transport;
|
|
143
|
+
constructor(transport) {
|
|
144
|
+
this.transport = transport;
|
|
145
|
+
}
|
|
146
|
+
async get(agentId, options = {}) { return validateAgentSchedule(await this.transport.request(`${ROOT}/${idPath(agentId)}/schedule`, options), agentId); }
|
|
147
|
+
/** Compare-and-set; on an uncertain response, read the schedule before any further write. */
|
|
148
|
+
async update(agentId, input, options = {}) {
|
|
149
|
+
if (!object(input) || !fields(input, ['expected_revision', 'enabled']) || typeof input.enabled !== 'boolean')
|
|
150
|
+
throw new OpenCrawlValidationError('Supply the reviewed schedule revision and an explicit enabled boolean.');
|
|
151
|
+
boundedInteger(input.expected_revision, 'expected_revision', 0, Number.MAX_SAFE_INTEGER);
|
|
152
|
+
const value = validateAgentSchedule(await this.transport.request(`${ROOT}/${idPath(agentId)}/schedule`, { ...options, method: 'PATCH', body: input, automaticRetry: false }), agentId);
|
|
153
|
+
if (value.enabled !== input.enabled || ![input.expected_revision, input.expected_revision + 1].includes(value.revision))
|
|
154
|
+
invalid();
|
|
155
|
+
return value;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function receipt(value, agentId) { if (!object(value) || !fields(value, ['agent', 'run', 'replayed']) || typeof value.replayed !== 'boolean')
|
|
159
|
+
invalid(); const agent = validateAgent(value.agent, agentId), run = validateAgentRun(value.run, agent.id); if (agent.revision !== run.agent_revision || agent.latest_run?.id !== run.id)
|
|
160
|
+
invalid(); return value; }
|
|
161
|
+
async function keyedAdmission(key, submit) { try {
|
|
162
|
+
return await submit();
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
if (error instanceof OpenCrawlProtocolError)
|
|
166
|
+
throw new OpenCrawlProtocolError('The admission response could not be verified. Recover with the original idempotency key before starting another run.', true, key);
|
|
167
|
+
throw error;
|
|
168
|
+
} }
|
|
169
|
+
function abort(signal) { if (signal?.aborted)
|
|
170
|
+
throw new OpenCrawlAbortError('Waiting for research was cancelled. The server run was not cancelled.'); }
|
|
171
|
+
async function delay(ms, signal) { await new Promise((resolve, reject) => { abort(signal); const cancel = () => { clearTimeout(timer); signal?.removeEventListener('abort', cancel); reject(new OpenCrawlAbortError('Waiting for research was cancelled. The server run was not cancelled.')); }, timer = setTimeout(() => { signal?.removeEventListener('abort', cancel); resolve(); }, ms); signal?.addEventListener('abort', cancel, { once: true }); }); }
|
|
172
|
+
class AgentFeedback {
|
|
173
|
+
transport;
|
|
174
|
+
constructor(transport) {
|
|
175
|
+
this.transport = transport;
|
|
176
|
+
}
|
|
177
|
+
path(agentId, runId, findingId) { return `${ROOT}/${idPath(agentId)}/runs/${idPath(runId)}/findings/${idPath(findingId)}/feedback`; }
|
|
178
|
+
async get(agentId, runId, findingId, options = {}) { return validateAgentFeedback(await this.transport.request(this.path(agentId, runId, findingId), options), agentId, runId, findingId); }
|
|
179
|
+
/** Compare-and-set only; read this same resource after an uncertain write. */
|
|
180
|
+
async set(agentId, runId, findingId, input, options = {}) {
|
|
181
|
+
const body = validateAgentFeedbackInput(input);
|
|
182
|
+
const value = validateAgentFeedback(await this.transport.request(this.path(agentId, runId, findingId), { ...options, method: 'PUT', body, automaticRetry: false }), agentId, runId, findingId), f = value.feedback;
|
|
183
|
+
if (f.state !== 'active' || f.rating !== body.rating || f.note !== body.note || ![body.expected_revision, body.expected_revision + 1].includes(f.revision))
|
|
184
|
+
invalid();
|
|
185
|
+
return value;
|
|
186
|
+
}
|
|
187
|
+
async delete(agentId, runId, findingId, expectedRevision, options = {}) {
|
|
188
|
+
boundedInteger(expectedRevision, 'expected_revision', 0, Number.MAX_SAFE_INTEGER);
|
|
189
|
+
const value = validateAgentFeedback(await this.transport.request(`${this.path(agentId, runId, findingId)}?expected_revision=${expectedRevision}`, { ...options, method: 'DELETE', automaticRetry: false }), agentId, runId, findingId);
|
|
190
|
+
if (value.feedback.state === 'active' || ![expectedRevision, expectedRevision + 1].includes(value.feedback.revision))
|
|
191
|
+
invalid();
|
|
192
|
+
return value;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
class AgentRuns {
|
|
196
|
+
transport;
|
|
197
|
+
feedback;
|
|
198
|
+
constructor(transport) {
|
|
199
|
+
this.transport = transport;
|
|
200
|
+
this.feedback = new AgentFeedback(transport);
|
|
201
|
+
}
|
|
202
|
+
/** Read one admission-ordered page. Persist pending IDs with the cursor; this is not an update feed. */
|
|
203
|
+
async list(agentId, options = {}) {
|
|
204
|
+
const limit = boundedInteger(options.limit ?? 25, 'limit', 1, 100), query = new URLSearchParams({ limit: String(limit) });
|
|
205
|
+
if (options.cursor !== undefined) {
|
|
206
|
+
if (!historyCursor(options.cursor))
|
|
207
|
+
throw new OpenCrawlValidationError('Use the returned opaque research history cursor.');
|
|
208
|
+
query.set('cursor', options.cursor);
|
|
209
|
+
}
|
|
210
|
+
const value = await this.transport.request(`${ROOT}/${idPath(agentId)}/runs?${query}`, options);
|
|
211
|
+
if (!object(value) || !fields(value, ['items', 'next_cursor', 'has_more']) || !Array.isArray(value.items) || value.items.length > limit || !historyCursor(value.next_cursor) || typeof value.has_more !== 'boolean' || value.has_more && !value.items.length || options.cursor !== undefined && (value.items.length ? value.next_cursor === options.cursor : value.next_cursor !== options.cursor) || new TextEncoder().encode(JSON.stringify(value)).length > 1048576)
|
|
212
|
+
invalid();
|
|
213
|
+
const seen = new Set();
|
|
214
|
+
for (const item of value.items) {
|
|
215
|
+
const run = validateAgentRun(item, agentId);
|
|
216
|
+
if (seen.has(run.id))
|
|
217
|
+
invalid();
|
|
218
|
+
seen.add(run.id);
|
|
219
|
+
}
|
|
220
|
+
return value;
|
|
221
|
+
}
|
|
222
|
+
async repeats(agentId, runId, options = {}) { return validateAgentRepeats(await this.transport.request(`${ROOT}/${idPath(agentId)}/runs/${idPath(runId)}/repeats`, options), agentId, runId); }
|
|
223
|
+
/** One exact admitted source window. No new search or automatic source fetching. */
|
|
224
|
+
async source(agentId, runId, sourceId, options = {}) { return validateAgentSource(await this.transport.request(`${ROOT}/${idPath(agentId)}/runs/${idPath(runId)}/sources/${idPath(sourceId)}`, options), agentId, runId, sourceId); }
|
|
225
|
+
async create(agentId, input, options) { idempotencyKey(options?.idempotencyKey); boundedInteger(input?.expected_revision, 'expected_revision', 1, Number.MAX_SAFE_INTEGER); validateResearchPolicy(input.research_policy); return keyedAdmission(options.idempotencyKey, async () => { const value = receipt(await this.transport.request(`${ROOT}/${idPath(agentId)}/runs`, { ...options, method: 'POST', body: input, automaticRetry: false }), agentId); if (value.run.agent_revision !== input.expected_revision)
|
|
226
|
+
invalid(); return value; }); }
|
|
227
|
+
async get(agentId, runId, options = {}) { return validateAgentRun(await this.transport.request(`${ROOT}/${idPath(agentId)}/runs/${idPath(runId)}`, options), agentId, runId); }
|
|
228
|
+
async wait(agentId, runId, options = {}) {
|
|
229
|
+
const started = Date.now(), maxWait = boundedInteger(options.maxWaitMs ?? 300000, 'maxWaitMs', 1, 3600000), interval = boundedInteger(options.pollIntervalMs ?? 1000, 'pollIntervalMs', 10, 60000);
|
|
230
|
+
let deadline = started + maxWait;
|
|
231
|
+
while (true) {
|
|
232
|
+
abort(options.signal);
|
|
233
|
+
const remaining = deadline - Date.now();
|
|
234
|
+
if (remaining <= 0)
|
|
235
|
+
throw new OpenCrawlTimeoutError('Research is still pending. Resume reading this same run.', runId);
|
|
236
|
+
let value;
|
|
237
|
+
try {
|
|
238
|
+
value = await this.get(agentId, runId, { signal: options.signal, timeoutMs: Math.min(options.timeoutMs ?? 30000, remaining) });
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
if (error instanceof OpenCrawlTimeoutError)
|
|
242
|
+
throw new OpenCrawlTimeoutError('Research status was not confirmed before the deadline. Resume reading this same run.', runId);
|
|
243
|
+
throw error;
|
|
244
|
+
}
|
|
245
|
+
// A validated presentation-policy receipt extends only the original wait, never each poll.
|
|
246
|
+
if (options.maxWaitMs === undefined && [2, 3].includes(readResearchCompletion(value).completion?.version ?? 0))
|
|
247
|
+
deadline = started + 540000;
|
|
248
|
+
options.onProgress?.(value);
|
|
249
|
+
if (!active.has(value.status))
|
|
250
|
+
return value;
|
|
251
|
+
await delay(Math.min(interval, Math.max(0, deadline - Date.now())), options.signal);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
export class ResearchAgents {
|
|
256
|
+
transport;
|
|
257
|
+
runs;
|
|
258
|
+
schedule;
|
|
259
|
+
constructor(transport) {
|
|
260
|
+
this.transport = transport;
|
|
261
|
+
this.runs = new AgentRuns(transport);
|
|
262
|
+
this.schedule = new AgentSchedule(transport);
|
|
263
|
+
}
|
|
264
|
+
async create(input, options) { idempotencyKey(options?.idempotencyKey); const body = validateAgentInput(input); return keyedAdmission(options.idempotencyKey, async () => { const value = receipt(await this.transport.request(ROOT, { ...options, method: 'POST', body, automaticRetry: false })); if (value.agent.revision !== 1 || value.agent.schedule_minutes !== 0 || value.agent.goal !== body.goal || ['name', 'website', 'context'].some(key => value.agent.customer[key] !== body.customer[key]) || JSON.stringify(value.agent.collection_ids) !== JSON.stringify(body.collection_ids))
|
|
265
|
+
invalid(); return value; }); }
|
|
266
|
+
async get(id, options = {}) { return validateAgent(await this.transport.request(`${ROOT}/${idPath(id)}`, options), id); }
|
|
267
|
+
async list(options = {}) { const limit = boundedInteger(options.limit ?? 25, 'limit', 1, 100), q = new URLSearchParams({ limit: String(limit) }); if (options.cursor !== undefined) {
|
|
268
|
+
if (!text(options.cursor, 512, 1))
|
|
269
|
+
throw new OpenCrawlValidationError('Use the returned bounded page cursor.');
|
|
270
|
+
q.set('cursor', options.cursor);
|
|
271
|
+
} const value = await this.transport.request(`${ROOT}?${q}`, options); if (!object(value) || !Array.isArray(value.items) || value.items.length > limit || value.next_cursor !== null && !text(value.next_cursor, 512, 1))
|
|
272
|
+
invalid(); value.items.forEach(item => validateAgent(item)); return value; }
|
|
273
|
+
async update(id, input, options = {}) { boundedInteger(input?.expected_revision, 'expected_revision', 1, Number.MAX_SAFE_INTEGER); if (!['active', 'paused'].includes(input?.status))
|
|
274
|
+
throw new OpenCrawlValidationError('Choose active or paused.'); const value = validateAgent(await this.transport.request(`${ROOT}/${idPath(id)}`, { ...options, method: 'PATCH', body: input, automaticRetry: false }), id); if (value.status !== input.status || ![input.expected_revision, input.expected_revision + 1].includes(value.revision))
|
|
275
|
+
invalid(); return value; }
|
|
276
|
+
async receipt(operation, options) { idempotencyKey(options?.idempotencyKey); if (operation !== 'create' && !/^run:ragent_[0-9a-f]{32}$/.test(operation))
|
|
277
|
+
throw new OpenCrawlValidationError('Choose create or run:<agent_id>.'); return receipt(await this.transport.request(`${ROOT}/receipts/by-key?operation=${encodeURIComponent(operation)}`, options), operation === 'create' ? undefined : operation.slice(4)); }
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export type AnswerSourceScope = {
|
|
2
|
+
evidence_id: string;
|
|
3
|
+
source_sha256: string;
|
|
4
|
+
window_text_sha256: string;
|
|
5
|
+
window_chars: number;
|
|
6
|
+
source_kind: 'indexed' | 'web_page';
|
|
7
|
+
page?: {
|
|
8
|
+
body_sha256: string;
|
|
9
|
+
start: number;
|
|
10
|
+
end: number;
|
|
11
|
+
total_chars: number;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export type AnswerFactRef = {
|
|
15
|
+
finding_id: string;
|
|
16
|
+
field: 'claim' | 'qualifier';
|
|
17
|
+
qualifier_ordinal: number;
|
|
18
|
+
literal_text_sha256: string;
|
|
19
|
+
};
|
|
20
|
+
export type AnswerComponent = {
|
|
21
|
+
component_id: string;
|
|
22
|
+
start: number;
|
|
23
|
+
end: number;
|
|
24
|
+
text: string;
|
|
25
|
+
status: 'literal_answer' | 'literal_negative_answer' | 'source_scoped_unknown_assessment' | 'available_but_not_delivered' | 'unassessed';
|
|
26
|
+
reason: null | 'linked_finding_rejected' | 'request_anchor_not_meaningful' | 'review_unassessed';
|
|
27
|
+
fact_refs: AnswerFactRef[];
|
|
28
|
+
evidence_ids: string[];
|
|
29
|
+
source_state: 'supported' | 'explicitly_contradicted' | 'not_established' | 'unassessed';
|
|
30
|
+
};
|
|
31
|
+
export type AnswerContract = {
|
|
32
|
+
version: 1;
|
|
33
|
+
state: 'assessed_nonexhaustive' | 'unassessed';
|
|
34
|
+
reason: null | 'component_contract_invalid' | 'component_review_empty' | 'goal_representation_bound' | 'optional_input_bound' | 'optional_output_bound' | 'input_binding_invalid' | 'review_skipped' | 'no_evidence' | 'legacy_receipt';
|
|
35
|
+
scope: 'admitted_retained_windows_only';
|
|
36
|
+
source_scope: AnswerSourceScope[];
|
|
37
|
+
inventory: 'nonexhaustive';
|
|
38
|
+
whole_request_completeness: 'not_certified';
|
|
39
|
+
goal_sha256: string;
|
|
40
|
+
components: AnswerComponent[];
|
|
41
|
+
notice_components_omitted: number;
|
|
42
|
+
gap_notice: null | {
|
|
43
|
+
index: number;
|
|
44
|
+
sha256: string;
|
|
45
|
+
component_ids: string[];
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
export type AnswerContractMarker = {
|
|
49
|
+
version: 1;
|
|
50
|
+
state: 'unassessed';
|
|
51
|
+
reason: 'optional_output_bound';
|
|
52
|
+
inventory: 'nonexhaustive';
|
|
53
|
+
whole_request_completeness: 'not_certified';
|
|
54
|
+
components_omitted: number;
|
|
55
|
+
};
|
|
56
|
+
export type AnswerContractView = {
|
|
57
|
+
state: 'absent' | 'invalid' | 'unassessed' | 'assessed_nonexhaustive';
|
|
58
|
+
contract: AnswerContract | AnswerContractMarker | null;
|
|
59
|
+
notices: {
|
|
60
|
+
id: string;
|
|
61
|
+
text: string;
|
|
62
|
+
}[];
|
|
63
|
+
};
|
|
64
|
+
export type AnswerContractRun = {
|
|
65
|
+
findings: {
|
|
66
|
+
id: string;
|
|
67
|
+
claim: string;
|
|
68
|
+
qualifiers: string[];
|
|
69
|
+
citations: {
|
|
70
|
+
id: string;
|
|
71
|
+
body_sha256: string;
|
|
72
|
+
source_kind: string;
|
|
73
|
+
page?: {
|
|
74
|
+
body_sha256: string;
|
|
75
|
+
start: number;
|
|
76
|
+
end: number;
|
|
77
|
+
total_chars: number;
|
|
78
|
+
};
|
|
79
|
+
}[];
|
|
80
|
+
}[];
|
|
81
|
+
gaps: string[];
|
|
82
|
+
usage: Record<string, unknown>;
|
|
83
|
+
};
|
|
84
|
+
export declare function readAnswerContract(run: AnswerContractRun, hash: (text: string) => string): AnswerContractView;
|
|
85
|
+
//# sourceMappingURL=answerContract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answerContract.d.ts","sourceRoot":"","sources":["../src/answerContract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// This optional reader never mutates a run or certifies whole-goal completion.
|
|
2
|
+
// Keep the validation/formatter body identical across the SDK, CLI and web.
|
|
3
|
+
const obj = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
4
|
+
const keys = (v, names) => Object.keys(v).length === names.length && names.every(k => Object.hasOwn(v, k));
|
|
5
|
+
const int = (v, min = 0, max = Number.MAX_SAFE_INTEGER) => typeof v === 'number' && Number.isSafeInteger(v) && v >= min && v <= max;
|
|
6
|
+
const text = (v, max, min = 1) => typeof v === 'string' && Array.from(v).length >= min && Array.from(v).length <= max && !/[\uD800-\uDFFF]/u.test(v) && !v.includes('\0');
|
|
7
|
+
const digest = (v) => typeof v === 'string' && /^[a-f0-9]{64}$/.test(v);
|
|
8
|
+
const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
9
|
+
const requireValue = (ok) => { if (!ok)
|
|
10
|
+
throw new Error('Invalid optional answer assessment'); };
|
|
11
|
+
const unknownNotice = (c) => `Research assessment for “${c.text}”: the saved source text used for this run does not establish an answer or its contradiction. Scope: ${c.evidence_ids.join(', ')}.`;
|
|
12
|
+
const undeliveredNotice = (c) => `Research assessment for “${c.text}”: answer material was found in the saved source text, but a complete answer was not retained in this result. Scope: ${c.evidence_ids.join(', ')}.`;
|
|
13
|
+
const unassessedNotice = 'Requested-answer coverage was not assessed for this run. The findings and coverage notes remain available.';
|
|
14
|
+
const invalidNotice = 'Requested-answer assessment could not be validated for this run. The findings and coverage notes remain available.';
|
|
15
|
+
const reasons = [null, 'component_contract_invalid', 'component_review_empty', 'goal_representation_bound', 'optional_input_bound', 'optional_output_bound', 'input_binding_invalid', 'review_skipped', 'no_evidence', 'legacy_receipt'];
|
|
16
|
+
function notice(c) { return c.status === 'source_scoped_unknown_assessment' ? unknownNotice(c) : c.status === 'available_but_not_delivered' ? undeliveredNotice(c) : null; }
|
|
17
|
+
export function readAnswerContract(run, hash) {
|
|
18
|
+
if (!Object.hasOwn(run.usage, 'answer_contract'))
|
|
19
|
+
return { state: 'absent', contract: null, notices: [] };
|
|
20
|
+
try {
|
|
21
|
+
const value = run.usage.answer_contract;
|
|
22
|
+
requireValue(new TextEncoder().encode(JSON.stringify(run.usage)).length <= 16384);
|
|
23
|
+
requireValue(obj(value));
|
|
24
|
+
const v = value;
|
|
25
|
+
requireValue(v.version === 1 && v.inventory === 'nonexhaustive' && v.whole_request_completeness === 'not_certified');
|
|
26
|
+
if (keys(v, ['version', 'state', 'reason', 'inventory', 'whole_request_completeness', 'components_omitted'])) {
|
|
27
|
+
requireValue(v.state === 'unassessed' && v.reason === 'optional_output_bound' && int(v.components_omitted, 0, 8));
|
|
28
|
+
return { state: 'unassessed', contract: structuredClone(v), notices: [{ id: 'unassessed', text: unassessedNotice }] };
|
|
29
|
+
}
|
|
30
|
+
requireValue(keys(v, ['version', 'state', 'reason', 'scope', 'source_scope', 'inventory', 'whole_request_completeness', 'goal_sha256', 'components', 'notice_components_omitted', 'gap_notice']));
|
|
31
|
+
requireValue(['assessed_nonexhaustive', 'unassessed'].includes(v.state) && reasons.includes(v.reason) && v.scope === 'admitted_retained_windows_only' && digest(v.goal_sha256));
|
|
32
|
+
requireValue(Array.isArray(v.source_scope) && v.source_scope.length <= 20 && Array.isArray(v.components) && v.components.length <= 8);
|
|
33
|
+
const scopes = new Map();
|
|
34
|
+
for (const s of v.source_scope) {
|
|
35
|
+
requireValue(obj(s) && keys(s, ['evidence_id', 'source_sha256', 'window_text_sha256', 'window_chars', 'source_kind', ...(s.source_kind === 'web_page' ? ['page'] : [])]));
|
|
36
|
+
requireValue(text(s.evidence_id, 80) && s.evidence_id.trim() === s.evidence_id && !/[\u0000-\u0020\u007f-\u009f\u061c\u200e\u200f\u202a-\u202e\u2066-\u2069]/u.test(s.evidence_id) && !scopes.has(s.evidence_id) && digest(s.source_sha256) && digest(s.window_text_sha256) && int(s.window_chars, 1, 16000) && ['indexed', 'web_page'].includes(s.source_kind));
|
|
37
|
+
if (s.source_kind === 'web_page') {
|
|
38
|
+
const p = s.page;
|
|
39
|
+
requireValue(obj(p) && keys(p, ['body_sha256', 'start', 'end', 'total_chars']) && digest(p.body_sha256) && int(p.start, 0, 131071) && int(p.end, 1, 131072) && int(p.total_chars, 1, 131072) && p.start < p.end && p.end <= p.total_chars && p.end - p.start === s.window_chars);
|
|
40
|
+
}
|
|
41
|
+
scopes.set(s.evidence_id, s);
|
|
42
|
+
}
|
|
43
|
+
// Available citations must agree, but uncited scope is retained too. No new
|
|
44
|
+
// source fetch or mutable agent.goal is substituted for the original run.
|
|
45
|
+
for (const f of run.findings)
|
|
46
|
+
for (const cite of f.citations) {
|
|
47
|
+
const s = scopes.get(cite.id);
|
|
48
|
+
requireValue(s && s.window_text_sha256 === cite.body_sha256 && s.source_kind === cite.source_kind);
|
|
49
|
+
if (s?.source_kind === 'web_page')
|
|
50
|
+
requireValue(cite.page && ['body_sha256', 'start', 'end', 'total_chars'].every(k => s.page[k] === cite.page[k]));
|
|
51
|
+
}
|
|
52
|
+
requireValue(v.state === 'unassessed' ? (v.components.length === 0 && v.reason !== null) : (v.components.length > 0 && v.reason === null));
|
|
53
|
+
const ids = new Set(), spans = [], eligible = [];
|
|
54
|
+
const allIds = [...scopes.keys()];
|
|
55
|
+
for (const c of v.components) {
|
|
56
|
+
requireValue(obj(c) && keys(c, ['component_id', 'start', 'end', 'text', 'status', 'reason', 'fact_refs', 'evidence_ids', 'source_state']));
|
|
57
|
+
requireValue(typeof c.component_id === 'string' && /^[CM][1-8]$/.test(c.component_id) && !ids.has(c.component_id));
|
|
58
|
+
ids.add(c.component_id);
|
|
59
|
+
requireValue(int(c.start, 0, 3999) && int(c.end, 1, 4000) && text(c.text, 256) && c.text.trim() && c.end - c.start === Array.from(c.text).length);
|
|
60
|
+
requireValue(['literal_answer', 'literal_negative_answer', 'source_scoped_unknown_assessment', 'available_but_not_delivered', 'unassessed'].includes(c.status));
|
|
61
|
+
requireValue([null, 'linked_finding_rejected', 'request_anchor_not_meaningful', 'review_unassessed'].includes(c.reason) && ['supported', 'explicitly_contradicted', 'not_established', 'unassessed'].includes(c.source_state));
|
|
62
|
+
requireValue(Array.isArray(c.evidence_ids) && c.evidence_ids.length <= 20 && same(c.evidence_ids, allIds.filter(id => c.evidence_ids.includes(id))) && Array.isArray(c.fact_refs) && c.fact_refs.length <= 10);
|
|
63
|
+
const refIds = new Set(), ownIds = new Set();
|
|
64
|
+
for (const r of c.fact_refs) {
|
|
65
|
+
requireValue(obj(r) && keys(r, ['finding_id', 'field', 'qualifier_ordinal', 'literal_text_sha256']) && digest(r.literal_text_sha256));
|
|
66
|
+
const f = run.findings.find(f => f.id === r.finding_id), key = JSON.stringify([r.finding_id, r.field, r.qualifier_ordinal]);
|
|
67
|
+
requireValue(f && !refIds.has(key) && ['claim', 'qualifier'].includes(r.field) && int(r.qualifier_ordinal, r.field === 'claim' ? 0 : 1, r.field === 'claim' ? 0 : f?.qualifiers.length));
|
|
68
|
+
refIds.add(key);
|
|
69
|
+
const literal = r.field === 'claim' ? f.claim : f.qualifiers[r.qualifier_ordinal - 1];
|
|
70
|
+
requireValue(hash(literal) === r.literal_text_sha256);
|
|
71
|
+
f.citations.forEach(cite => ownIds.add(cite.id));
|
|
72
|
+
}
|
|
73
|
+
if (c.status === 'unassessed')
|
|
74
|
+
requireValue(c.source_state === 'unassessed' && ['request_anchor_not_meaningful', 'review_unassessed'].includes(c.reason) && !c.fact_refs.length && !c.evidence_ids.length);
|
|
75
|
+
else if (c.status === 'source_scoped_unknown_assessment')
|
|
76
|
+
requireValue(c.source_state === 'not_established' && c.reason === null && !c.fact_refs.length && allIds.length > 0 && same(c.evidence_ids, allIds));
|
|
77
|
+
else {
|
|
78
|
+
requireValue(['supported', 'explicitly_contradicted'].includes(c.source_state) && c.evidence_ids.length > 0);
|
|
79
|
+
if (c.status === 'available_but_not_delivered')
|
|
80
|
+
requireValue(c.reason === null || c.reason === 'linked_finding_rejected');
|
|
81
|
+
else
|
|
82
|
+
requireValue(c.reason === null && c.fact_refs.length > 0 && c.status === (c.source_state === 'supported' ? 'literal_answer' : 'literal_negative_answer') && same(c.evidence_ids, allIds.filter(id => ownIds.has(id))));
|
|
83
|
+
}
|
|
84
|
+
if (c.reason !== 'request_anchor_not_meaningful') {
|
|
85
|
+
requireValue(spans.every(p => p.text !== c.text && (p.end <= c.start || p.start >= c.end)));
|
|
86
|
+
spans.push(c);
|
|
87
|
+
}
|
|
88
|
+
if (notice(c))
|
|
89
|
+
eligible.push(c);
|
|
90
|
+
}
|
|
91
|
+
requireValue(int(v.notice_components_omitted, 0, eligible.length));
|
|
92
|
+
let delivered = [];
|
|
93
|
+
if (v.gap_notice !== null) {
|
|
94
|
+
const g = v.gap_notice;
|
|
95
|
+
requireValue(obj(g) && keys(g, ['index', 'sha256', 'component_ids']) && int(g.index, 0, run.gaps.length - 1) && g.index === run.gaps.length - 1 && digest(g.sha256) && hash(run.gaps[g.index]) === g.sha256);
|
|
96
|
+
requireValue(Array.isArray(g.component_ids) && g.component_ids.length > 0 && same(g.component_ids, eligible.filter(c => g.component_ids.includes(c.component_id)).map(c => c.component_id)));
|
|
97
|
+
const suffix = ' ' + eligible.filter(c => g.component_ids.includes(c.component_id)).map(c => notice(c)).join(' ');
|
|
98
|
+
requireValue(run.gaps[g.index].endsWith(suffix));
|
|
99
|
+
delivered = g.component_ids;
|
|
100
|
+
}
|
|
101
|
+
requireValue(v.notice_components_omitted === eligible.length - delivered.length);
|
|
102
|
+
const notices = v.state === 'unassessed' ? [{ id: 'unassessed', text: unassessedNotice }] : v.components.flatMap((c) => {
|
|
103
|
+
const n = notice(c);
|
|
104
|
+
return n && !delivered.includes(c.component_id) ? [{ id: c.component_id, text: n }] : c.status === 'unassessed' ? [{ id: c.component_id, text: `Research assessment for “${c.text}”: requested-answer coverage was not assessed.` }] : [];
|
|
105
|
+
});
|
|
106
|
+
return { state: v.state, contract: structuredClone(v), notices };
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return { state: 'invalid', contract: null, notices: [{ id: 'invalid', text: invalidNotice }] };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=answerContract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answerContract.js","sourceRoot":"","sources":["../src/answerContract.ts"],"names":[],"mappings":"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"}
|