@multiplayer-app/agent 0.1.5 → 0.1.7
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/dist/checkpoint-timer.test.d.ts +2 -0
- package/dist/checkpoint-timer.test.d.ts.map +1 -0
- package/dist/checkpoint-timer.test.js +77 -0
- package/dist/checkpoint-timer.test.js.map +1 -0
- package/dist/cli.js +15 -6
- package/dist/cli.js.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/git-sync.d.ts +1 -1
- package/dist/git-sync.d.ts.map +1 -1
- package/dist/git-sync.js +17 -29
- package/dist/git-sync.js.map +1 -1
- package/dist/git-sync.test.d.ts +2 -0
- package/dist/git-sync.test.d.ts.map +1 -0
- package/dist/git-sync.test.js +181 -0
- package/dist/git-sync.test.js.map +1 -0
- package/dist/lambda-microvm-entrypoint.js +22 -8
- package/dist/lambda-microvm-entrypoint.js.map +1 -1
- package/dist/lifecycle.test.d.ts +2 -0
- package/dist/lifecycle.test.d.ts.map +1 -0
- package/dist/lifecycle.test.js +46 -0
- package/dist/lifecycle.test.js.map +1 -0
- package/dist/link.d.ts.map +1 -1
- package/dist/link.js +6 -4
- package/dist/link.js.map +1 -1
- package/dist/protocol.d.ts +14 -4
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +7 -1
- package/dist/protocol.js.map +1 -1
- package/dist/protocol.test.js +6 -0
- package/dist/protocol.test.js.map +1 -1
- package/dist/research/filingramp-contract.d.ts +45 -0
- package/dist/research/filingramp-contract.d.ts.map +1 -0
- package/dist/research/filingramp-contract.js +277 -0
- package/dist/research/filingramp-contract.js.map +1 -0
- package/dist/research/filingramp-contract.test.d.ts +2 -0
- package/dist/research/filingramp-contract.test.d.ts.map +1 -0
- package/dist/research/filingramp-contract.test.js +76 -0
- package/dist/research/filingramp-contract.test.js.map +1 -0
- package/dist/research/filingramp-tools.d.ts +1 -1
- package/dist/research/filingramp-tools.d.ts.map +1 -1
- package/dist/research/filingramp-tools.js +158 -47
- package/dist/research/filingramp-tools.js.map +1 -1
- package/dist/research/filingramp-tools.test.d.ts +2 -0
- package/dist/research/filingramp-tools.test.d.ts.map +1 -0
- package/dist/research/filingramp-tools.test.js +99 -0
- package/dist/research/filingramp-tools.test.js.map +1 -0
- package/dist/research/prompt.d.ts +4 -0
- package/dist/research/prompt.d.ts.map +1 -1
- package/dist/research/prompt.js +15 -4
- package/dist/research/prompt.js.map +1 -1
- package/dist/research/scope.d.ts +22 -8
- package/dist/research/scope.d.ts.map +1 -1
- package/dist/research/scope.js +49 -15
- package/dist/research/scope.js.map +1 -1
- package/dist/research/scope.test.js +47 -6
- package/dist/research/scope.test.js.map +1 -1
- package/dist/runtime.d.ts +2 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +20 -3
- package/dist/runtime.js.map +1 -1
- package/dist/session.d.ts +6 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +103 -47
- package/dist/session.js.map +1 -1
- package/dist/tools/fs-tools.d.ts +1 -0
- package/dist/tools/fs-tools.d.ts.map +1 -1
- package/dist/tools/fs-tools.js +11 -2
- package/dist/tools/fs-tools.js.map +1 -1
- package/dist/tools/fs-tools.test.d.ts +2 -0
- package/dist/tools/fs-tools.test.d.ts.map +1 -0
- package/dist/tools/fs-tools.test.js +41 -0
- package/dist/tools/fs-tools.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
7
|
+
const node_test_1 = require("node:test");
|
|
8
|
+
const filingramp_client_1 = require("./filingramp-client");
|
|
9
|
+
const filingramp_tools_1 = require("./filingramp-tools");
|
|
10
|
+
function tools() {
|
|
11
|
+
return (0, filingramp_tools_1.createFilingRampTools)({
|
|
12
|
+
client: new filingramp_client_1.FilingRampClient({ baseUrl: 'https://example.test', authToken: 'test', industryData: false }),
|
|
13
|
+
workspaceDir: '/unused',
|
|
14
|
+
scope: { states: ['TX', 'AZ'], lines: ['04.0'] },
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
(0, node_test_1.describe)('research filing requests', () => {
|
|
18
|
+
for (const name of ['count_filings', 'summarize_filings']) {
|
|
19
|
+
(0, node_test_1.it)(`${name} sends plural filters and keeps singular summary groups`, async (t) => {
|
|
20
|
+
let body;
|
|
21
|
+
t.mock.method(globalThis, 'fetch', async (_url, init) => {
|
|
22
|
+
body = JSON.parse(String(init.body));
|
|
23
|
+
return Response.json(name === 'count_filings' ? { count: 12 } : { items: [{ key: { typeOfInsurance: '04.0' }, filings: 12 }] });
|
|
24
|
+
});
|
|
25
|
+
const result = await tools()[name].execute({
|
|
26
|
+
filters: [
|
|
27
|
+
{ field: 'state', comparisonOperator: 'in', value: ['TX', 'AZ'] },
|
|
28
|
+
{ field: 'typeOfInsurance', comparisonOperator: 'cn', value: ['04.0'] },
|
|
29
|
+
],
|
|
30
|
+
...(name === 'summarize_filings' ? { groupBy: ['typeOfInsurance'] } : {}),
|
|
31
|
+
}, { toolCallId: 'test', messages: [] });
|
|
32
|
+
strict_1.default.deepEqual(body === null || body === void 0 ? void 0 : body.filters, [
|
|
33
|
+
{ field: 'states', comparisonOperator: 'in', value: ['TX', 'AZ'] },
|
|
34
|
+
{ field: 'typeOfInsurances', comparisonOperator: 'cn', value: ['04.0'] },
|
|
35
|
+
]);
|
|
36
|
+
if (name === 'summarize_filings')
|
|
37
|
+
strict_1.default.deepEqual(body === null || body === void 0 ? void 0 : body.groupBy, ['typeOfInsurance']);
|
|
38
|
+
strict_1.default.ok(result);
|
|
39
|
+
});
|
|
40
|
+
(0, node_test_1.it)(`${name} propagates validation failure instead of returning zero`, async (t) => {
|
|
41
|
+
t.mock.method(globalThis, 'fetch', async () => Response.json({ message: 'Invalid filter field' }, { status: 400 }));
|
|
42
|
+
await strict_1.default.rejects(async () => tools()[name].execute({}, { toolCallId: 'test', messages: [] }), (error) => error instanceof filingramp_client_1.FilingRampHttpError && error.status === 400);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
(0, node_test_1.it)('search_documents sends one scoped request per index group with the exact line labels', async (t) => {
|
|
46
|
+
const calls = [];
|
|
47
|
+
t.mock.method(globalThis, 'fetch', async (url, init) => {
|
|
48
|
+
const body = JSON.parse(String(init.body));
|
|
49
|
+
calls.push({ url: String(url), body });
|
|
50
|
+
if (String(url).endsWith('/v2/search/filings/summary')) {
|
|
51
|
+
return Response.json({ items: [{ key: { typeOfInsurance: '04.0 Homeowners', subTypeOfInsurance: '04.0000 Homeowners Sub-type' }, filings: 3 }] });
|
|
52
|
+
}
|
|
53
|
+
return Response.json([{ _id: `${body.indexNames[0]}-hit`, _index: body.indexNames[0], _score: body.indexNames[0].startsWith('library') ? 2 : 1, _source: { trackingNumber: 'TRK-1', name: 'HO 3' } }]);
|
|
54
|
+
});
|
|
55
|
+
const result = (await tools().search_documents.execute({ query: 'water shut-off valve', indexes: ['filings', 'library_forms'], filters: [{ field: 'filingType', value: 'Form' }] }, { toolCallId: 'test', messages: [] }));
|
|
56
|
+
const searches = calls.filter((call) => call.url.endsWith('/v1/content-search/global'));
|
|
57
|
+
strict_1.default.equal(searches.length, 2);
|
|
58
|
+
strict_1.default.deepEqual(searches[0].body.indexNames, ['filings_keyword_index']);
|
|
59
|
+
strict_1.default.deepEqual(searches[0].body.filters, [
|
|
60
|
+
{ field: 'states', comparisonOperator: 'in', value: ['TX', 'AZ'] },
|
|
61
|
+
{ field: 'typeOfInsurance', comparisonOperator: 'in', value: ['04.0 Homeowners'] },
|
|
62
|
+
{ field: 'filingTypes', comparisonOperator: 'in', value: ['Form'] },
|
|
63
|
+
]);
|
|
64
|
+
strict_1.default.deepEqual(searches[1].body.indexNames, ['library_forms_keyword_index']);
|
|
65
|
+
strict_1.default.deepEqual(searches[1].body.filters, []);
|
|
66
|
+
strict_1.default.deepEqual(result.requests[1].unscoped, ['states', 'lines']);
|
|
67
|
+
strict_1.default.deepEqual(result.requests[1].ignoredFilters, ['filingType']);
|
|
68
|
+
strict_1.default.deepEqual(result.hits.map((hit) => hit.id), ['library_forms_keyword_index-hit', 'filings_keyword_index-hit']);
|
|
69
|
+
});
|
|
70
|
+
(0, node_test_1.it)('search_documents skips filing indexes when no filing in scope carries the scope lines', async (t) => {
|
|
71
|
+
var _a;
|
|
72
|
+
const urls = [];
|
|
73
|
+
t.mock.method(globalThis, 'fetch', async (url) => {
|
|
74
|
+
urls.push(String(url));
|
|
75
|
+
return Response.json({ items: [] });
|
|
76
|
+
});
|
|
77
|
+
const result = (await tools().search_documents.execute({ query: 'leak detection' }, { toolCallId: 'test', messages: [] }));
|
|
78
|
+
strict_1.default.deepEqual(result.hits, []);
|
|
79
|
+
strict_1.default.match((_a = result.requests[0].skipped) !== null && _a !== void 0 ? _a : '', /no filing in scope/);
|
|
80
|
+
strict_1.default.ok(!urls.some((url) => url.endsWith('/v1/content-search/global')));
|
|
81
|
+
});
|
|
82
|
+
(0, node_test_1.it)('search_documents reports a validation failure as a fix, not an outage', async (t) => {
|
|
83
|
+
t.mock.method(globalThis, 'fetch', async (url) => {
|
|
84
|
+
if (String(url).endsWith('/v2/search/filings/summary'))
|
|
85
|
+
return Response.json({ items: [{ key: { typeOfInsurance: '04.0 Homeowners' }, filings: 1 }] });
|
|
86
|
+
return Response.json({ message: '"body.filters[0].field" must be [resourceTypes]' }, { status: 400 });
|
|
87
|
+
});
|
|
88
|
+
await strict_1.default.rejects(async () => tools().search_documents.execute({ query: 'x' }, { toolCallId: 'test', messages: [] }), /Document search rejected the request: .*must be \[resourceTypes\].*Fix the filter/s);
|
|
89
|
+
});
|
|
90
|
+
(0, node_test_1.it)('search_documents turns an opaque FilingRamp failure into a fallback instruction', async (t) => {
|
|
91
|
+
t.mock.method(globalThis, 'fetch', async (url) => {
|
|
92
|
+
if (String(url).endsWith('/v2/search/filings/summary'))
|
|
93
|
+
return Response.json({ items: [{ key: { typeOfInsurance: '04.0 Homeowners' }, filings: 1 }] });
|
|
94
|
+
return Response.json({ message: 'An error occurred. We are looking into it.' }, { status: 400 });
|
|
95
|
+
});
|
|
96
|
+
await strict_1.default.rejects(async () => tools().search_documents.execute({ query: 'water shut-off valve' }, { toolCallId: 'test', messages: [] }), /Document search is unavailable \(FilingRamp 400: .*Do not retry.*get_filing and download_attachment/s);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=filingramp-tools.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filingramp-tools.test.js","sourceRoot":"","sources":["../../src/research/filingramp-tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,13 @@ export declare const RESEARCH_OUTPUT_FILES: {
|
|
|
5
5
|
readonly evidence: "research/evidence.json";
|
|
6
6
|
readonly notes: "research/notes.md";
|
|
7
7
|
};
|
|
8
|
+
/** Directories the research profile guarantees exist in the workspace before the first turn. */
|
|
9
|
+
export declare const RESEARCH_WORKSPACE_DIRS: readonly ["research", "data", "data/text"];
|
|
8
10
|
export declare function buildResearchSystemPrompt(options: {
|
|
9
11
|
scope?: ResearchScope;
|
|
10
12
|
industryData: boolean;
|
|
11
13
|
tokenBudget?: number;
|
|
14
|
+
/** True when the workspace (files or conversation) was restored from a previous run of this session. */
|
|
15
|
+
restored?: boolean;
|
|
12
16
|
}): string;
|
|
13
17
|
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/research/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAG9C,eAAO,MAAM,qBAAqB;;;;;CAKxB,CAAA;AAEV,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/research/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAG9C,eAAO,MAAM,qBAAqB;;;;;CAKxB,CAAA;AAEV,gGAAgG;AAChG,eAAO,MAAM,uBAAuB,4CAA6C,CAAA;AAEjF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,YAAY,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wGAAwG;IACxG,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,MAAM,CAuCT"}
|
package/dist/research/prompt.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RESEARCH_OUTPUT_FILES = void 0;
|
|
3
|
+
exports.RESEARCH_WORKSPACE_DIRS = exports.RESEARCH_OUTPUT_FILES = void 0;
|
|
4
4
|
exports.buildResearchSystemPrompt = buildResearchSystemPrompt;
|
|
5
5
|
const scope_1 = require("./scope");
|
|
6
6
|
exports.RESEARCH_OUTPUT_FILES = {
|
|
@@ -9,19 +9,26 @@ exports.RESEARCH_OUTPUT_FILES = {
|
|
|
9
9
|
evidence: 'research/evidence.json',
|
|
10
10
|
notes: 'research/notes.md',
|
|
11
11
|
};
|
|
12
|
+
/** Directories the research profile guarantees exist in the workspace before the first turn. */
|
|
13
|
+
exports.RESEARCH_WORKSPACE_DIRS = ['research', 'data', 'data/text'];
|
|
12
14
|
function buildResearchSystemPrompt(options) {
|
|
13
15
|
const budget = options.tokenBudget ? `Token budget for this session: ${options.tokenBudget.toLocaleString()} tokens. ` : '';
|
|
16
|
+
const workspaceState = options.restored
|
|
17
|
+
? `This session was restored from a previous run: read ${exports.RESEARCH_OUTPUT_FILES.notes} first and continue from what it says is next.`
|
|
18
|
+
: 'This is a fresh session: the workspace holds only the empty research/ and data/ folders, so start with the plan rather than looking for earlier work.';
|
|
14
19
|
return `You are a deep research agent for insurance regulatory filings, running inside an isolated session workspace with a persistent disk. You answer one research question at a time by reading the actual filing documents, and you leave a verifiable trail.
|
|
15
20
|
|
|
21
|
+
Workspace layout: research/ holds everything you publish (findings, results, evidence, notes, codebook); data/ holds downloaded documents and intermediate tables, with extracted text under data/text/. ${workspaceState}
|
|
22
|
+
|
|
16
23
|
Scope of this session (enforced on every FilingRamp call; you may narrow, never widen):
|
|
17
24
|
${(0, scope_1.describeScope)(options.scope)}
|
|
18
25
|
${options.industryData ? 'Industry (public) filings are available with searchType/scope INDUSTRY.' : 'Only this account\'s own filings are available.'}
|
|
19
26
|
|
|
20
27
|
Method — plan, size, confirm, narrow, download, analyze, report:
|
|
21
28
|
1. Plan. Restate the question as concrete, checkable criteria (which document types, which clauses or values, which time range). Write the plan to ${exports.RESEARCH_OUTPUT_FILES.notes} and tell the user in two or three sentences.
|
|
22
|
-
2. Size. Use count_filings and summarize_filings (grouped by state, filingType, typeOfInsurance, submittedMonth) to see how big the population is before reading anything.
|
|
23
|
-
3. Confirm. If the population is large (more than ~300 filings or ~1,000 documents) or the question is ambiguous, call
|
|
24
|
-
3b. Codebook checkpoint (classification questions: "how do carriers treat X", "sort into categories", "which variants exist"). Discover the categories on a sample first — read 15–30 documents, write the candidate categories with one quoted example each to research/codebook.md and publish it — then call
|
|
29
|
+
2. Size. Use count_filings and summarize_filings (grouped by state, filingType, typeOfInsurance, submittedMonth) to see how big the population is before reading anything. A count of 0 inside the scope is a finding, not a dead end: report exactly which filters were applied and call request_clarification so the user can correct the scope (a line code such as "04.0000" is one SERFF sub-line, "Homeowners" or "04.0" is the whole line).
|
|
30
|
+
3. Confirm. If the population is large (more than ~300 filings or ~1,000 documents) or the question is ambiguous, call request_clarification with the counts and the choice to make (explicit options; allowFreeText when they may not cover it). Stop and wait for the answer.
|
|
31
|
+
3b. Codebook checkpoint (classification questions: "how do carriers treat X", "sort into categories", "which variants exist"). Discover the categories on a sample first — read 15–30 documents, write the candidate categories with one quoted example each to research/codebook.md and publish it — then call request_clarification to have the codebook approved or revised before extracting over the whole population. Never classify thousands of documents against categories the user has not seen.
|
|
25
32
|
4. Narrow. Use search_documents (KEYWORD with exact phrases first, SEMANTIC/HYBRID for concepts like "water shut-off valve requirement") to find the documents that matter. Pass saveText=true so the extracted text lands in data/text/ for grep.
|
|
26
33
|
5. Download only what search cannot answer: download_attachment extracts PDF text locally. Note documents with no text (scanned) — they go in the findings as "not readable".
|
|
27
34
|
6. Analyze locally. Use run_command with rg/grep, jq, python3 (pandas, sqlite3, openpyxl for Excel rate pages) and the files under data/. Keep intermediate tables in data/*.csv. Never paste whole documents into the conversation; read_text only the lines around a match. Normalize values before comparing (a credit on the water peril is not a credit on total premium; 30 vs 45 days must be read as numbers, not matched as text).
|
|
@@ -34,6 +41,10 @@ Method — plan, size, confirm, narrow, download, analyze, report:
|
|
|
34
41
|
Then call publish_results with those paths so they appear in the session, and finish with a short summary message.
|
|
35
42
|
|
|
36
43
|
Working rules:
|
|
44
|
+
- Filters are {field, comparisonOperator, value}. List fields (states, typeOfInsurances, subTypeOfInsurances, filingTypes, statusIds, companies, trackingNumbers, …) take a string array: "cn" matches part of the label ({field: "typeOfInsurances", comparisonOperator: "cn", value: ["04.0"]} covers the whole Homeowners line), "in" the exact label. Dates (dateSubmitted, createdAt, updatedAt) take one date string with eq/gt/gte/lt/lte; hasObjection takes ex with a boolean. The tools wrap a single value, choose the operator a field accepts and reject unknown fields before calling FilingRamp: a failure names the accepted fields, so fix the call rather than retry it. Summary groupBy uses singular names (state, typeOfInsurance, filingType, statusId, submittedMonth, …).
|
|
45
|
+
- To learn which lines, states or companies the account has, call summarize_filings grouped by that field with no filter on it. Never probe with fragments ("e", "a") or empty values. search_documents has its own vocabulary; its description lists it.
|
|
46
|
+
- A failed API call is not a zero count. Correct validation errors and retry; if the request still fails, report that the population could not be determined.
|
|
47
|
+
- Narrate: before each group of tool calls write one short line in plain language saying what you are about to do and why ("Counting TX and AZ homeowners filings to size the population."). The user watches these lines while you work; keep them to one sentence, no headings, no restating results the tool rows already show.
|
|
37
48
|
- Progress: call report_progress when a phase starts and finishes, so the user sees a checklist while you work. Post a short message every ~10 minutes of work with counts so far.
|
|
38
49
|
- ${budget}Prefer counts and summaries over listing rows; request only the fields you need; let files hold bulk data.
|
|
39
50
|
- Dates, states and lines you were given are the scope: always say when the data can not answer the question within it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/research/prompt.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/research/prompt.ts"],"names":[],"mappings":";;;AAaA,8DA6CC;AAzDD,mCAAuC;AAE1B,QAAA,qBAAqB,GAAG;IACnC,QAAQ,EAAE,sBAAsB;IAChC,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,wBAAwB;IAClC,KAAK,EAAE,mBAAmB;CAClB,CAAA;AAEV,gGAAgG;AACnF,QAAA,uBAAuB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAU,CAAA;AAEjF,SAAgB,yBAAyB,CAAC,OAMzC;IACC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,kCAAkC,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3H,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ;QACrC,CAAC,CAAC,uDAAuD,6BAAqB,CAAC,KAAK,gDAAgD;QACpI,CAAC,CAAC,uJAAuJ,CAAA;IAC3J,OAAO;;2MAEkM,cAAc;;;EAGvN,IAAA,qBAAa,EAAC,OAAO,CAAC,KAAK,CAAC;EAC5B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,yEAAyE,CAAC,CAAC,CAAC,iDAAiD;;;qJAGD,6BAAqB,CAAC,KAAK;;;;;;;;;OASzK,6BAAqB,CAAC,QAAQ;OAC9B,6BAAqB,CAAC,OAAO;OAC7B,6BAAqB,CAAC,QAAQ;;;;;;;;;;IAUjC,MAAM;;;2CAGiC,6BAAqB,CAAC,KAAK,2EAA2E,CAAA;AACjJ,CAAC"}
|
package/dist/research/scope.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import type { ResearchScope } from '../config';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
comparisonOperator: string;
|
|
5
|
-
value: unknown;
|
|
6
|
-
}
|
|
2
|
+
import { type FilingsFilter } from './filingramp-contract';
|
|
3
|
+
export type { FilingsFilter } from './filingramp-contract';
|
|
7
4
|
/** Four-decimal codes ("17.0001") are sub-lines; anything else is a broad line or a name. */
|
|
8
5
|
export declare function isSubLineCode(line: string): boolean;
|
|
9
6
|
/**
|
|
@@ -14,10 +11,27 @@ export declare function isSubLineCode(line: string): boolean;
|
|
|
14
11
|
*/
|
|
15
12
|
export declare function scopeFilingsFilters(scope: ResearchScope | undefined, requested?: FilingsFilter[]): FilingsFilter[];
|
|
16
13
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
14
|
+
* The exact type-of-insurance labels the scope's lines stand for, as the filings carry them
|
|
15
|
+
* ("04.0 Homeowners" for a scope line "Homeowners" or "04.0"). Document search matches these
|
|
16
|
+
* fields exactly, so the labels are resolved from the filings summary before searching.
|
|
17
|
+
*/
|
|
18
|
+
export interface ScopeLineLabels {
|
|
19
|
+
lines: string[];
|
|
20
|
+
subLines: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface ScopedDocumentFilters {
|
|
23
|
+
filters: FilingsFilter[];
|
|
24
|
+
/** Scope constraints this index group cannot express (its filter vocabulary lacks the field). */
|
|
25
|
+
unscoped: string[];
|
|
26
|
+
/** True when the scope names lines but no filing in scope carries them: nothing can match. */
|
|
27
|
+
emptyByLines: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Same idea for POST /v1/content-search/global (OpenSearch). Its vocabulary differs per index
|
|
31
|
+
* (singular typeOfInsurance, exact "in" matches only, no state field on library indexes), so
|
|
32
|
+
* the scope is applied field by field against what the group accepts and the rest reported.
|
|
19
33
|
*/
|
|
20
|
-
export declare function scopeDocumentFilters(scope: ResearchScope | undefined, requested
|
|
34
|
+
export declare function scopeDocumentFilters(scope: ResearchScope | undefined, requested: FilingsFilter[], accepted: readonly string[], lineLabels?: ScopeLineLabels): ScopedDocumentFilters;
|
|
21
35
|
/** 'INDUSTRY' only when the session asked for it and the account is entitled; otherwise account data. */
|
|
22
36
|
export declare function resolveSearchType(scope: ResearchScope | undefined, industryData: boolean, requested?: 'ACCOUNT' | 'INDUSTRY'): 'ACCOUNT' | 'INDUSTRY';
|
|
23
37
|
export declare function describeScope(scope: ResearchScope | undefined): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/research/scope.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/research/scope.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAEjF,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAE1D,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,SAAS,GAAE,aAAa,EAAO,GAAG,aAAa,EAAE,CAsCtH;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,iGAAiG;IACjG,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,8FAA8F;IAC9F,YAAY,EAAE,OAAO,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,SAAS,EAAE,aAAa,EAAE,EAC1B,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,UAAU,CAAC,EAAE,eAAe,GAC3B,qBAAqB,CAyCvB;AAED,yGAAyG;AACzG,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,YAAY,EAAE,OAAO,EACrB,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,GACjC,SAAS,GAAG,UAAU,CAMxB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAUtE"}
|
package/dist/research/scope.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.scopeFilingsFilters = scopeFilingsFilters;
|
|
|
5
5
|
exports.scopeDocumentFilters = scopeDocumentFilters;
|
|
6
6
|
exports.resolveSearchType = resolveSearchType;
|
|
7
7
|
exports.describeScope = describeScope;
|
|
8
|
+
const filingramp_contract_1 = require("./filingramp-contract");
|
|
8
9
|
/** Four-decimal codes ("17.0001") are sub-lines; anything else is a broad line or a name. */
|
|
9
10
|
function isSubLineCode(line) {
|
|
10
11
|
return /^\d{1,2}\.\d{4}$/.test(line.trim());
|
|
@@ -17,6 +18,13 @@ function isSubLineCode(line) {
|
|
|
17
18
|
*/
|
|
18
19
|
function scopeFilingsFilters(scope, requested = []) {
|
|
19
20
|
var _a, _b;
|
|
21
|
+
requested = requested.map((filter) => {
|
|
22
|
+
var _a;
|
|
23
|
+
return ({
|
|
24
|
+
...filter,
|
|
25
|
+
field: (_a = filingramp_contract_1.FILING_FILTER_ALIASES[filter.field]) !== null && _a !== void 0 ? _a : filter.field,
|
|
26
|
+
});
|
|
27
|
+
});
|
|
20
28
|
const filters = [];
|
|
21
29
|
const requestedByField = new Map(requested.map((filter) => [filter.field, filter]));
|
|
22
30
|
if ((_a = scope === null || scope === void 0 ? void 0 : scope.states) === null || _a === void 0 ? void 0 : _a.length) {
|
|
@@ -49,33 +57,59 @@ function scopeFilingsFilters(scope, requested = []) {
|
|
|
49
57
|
return filters;
|
|
50
58
|
}
|
|
51
59
|
/**
|
|
52
|
-
* Same idea for POST /v1/search/global (OpenSearch)
|
|
53
|
-
* typeOfInsurance
|
|
60
|
+
* Same idea for POST /v1/content-search/global (OpenSearch). Its vocabulary differs per index
|
|
61
|
+
* (singular typeOfInsurance, exact "in" matches only, no state field on library indexes), so
|
|
62
|
+
* the scope is applied field by field against what the group accepts and the rest reported.
|
|
54
63
|
*/
|
|
55
|
-
function scopeDocumentFilters(scope, requested
|
|
64
|
+
function scopeDocumentFilters(scope, requested, accepted, lineLabels) {
|
|
56
65
|
var _a, _b;
|
|
57
66
|
const filters = [];
|
|
67
|
+
const unscoped = [];
|
|
68
|
+
let emptyByLines = false;
|
|
58
69
|
const has = (field) => requested.some((filter) => filter.field === field);
|
|
59
|
-
|
|
60
|
-
|
|
70
|
+
const can = (field) => accepted.includes(field);
|
|
71
|
+
if ((_a = scope === null || scope === void 0 ? void 0 : scope.states) === null || _a === void 0 ? void 0 : _a.length) {
|
|
72
|
+
if (!can('states'))
|
|
73
|
+
unscoped.push('states');
|
|
74
|
+
else if (!has('states'))
|
|
75
|
+
filters.push({ field: 'states', comparisonOperator: 'in', value: scope.states.map((state) => state.toUpperCase()) });
|
|
61
76
|
}
|
|
62
77
|
if ((_b = scope === null || scope === void 0 ? void 0 : scope.lines) === null || _b === void 0 ? void 0 : _b.length) {
|
|
63
78
|
const subLines = scope.lines.filter(isSubLineCode);
|
|
64
79
|
const lines = scope.lines.filter((line) => !isSubLineCode(line));
|
|
65
|
-
if (
|
|
66
|
-
|
|
80
|
+
if (!can('typeOfInsurance')) {
|
|
81
|
+
unscoped.push('lines');
|
|
67
82
|
}
|
|
68
|
-
|
|
69
|
-
|
|
83
|
+
else {
|
|
84
|
+
const labels = lineLabels !== null && lineLabels !== void 0 ? lineLabels : { lines: [], subLines: [] };
|
|
85
|
+
if (subLines.length && !has('subTypeOfInsurance')) {
|
|
86
|
+
if (labels.subLines.length)
|
|
87
|
+
filters.push({ field: 'subTypeOfInsurance', comparisonOperator: 'in', value: labels.subLines });
|
|
88
|
+
else
|
|
89
|
+
emptyByLines = true;
|
|
90
|
+
}
|
|
91
|
+
if (lines.length && !has('typeOfInsurance')) {
|
|
92
|
+
if (labels.lines.length)
|
|
93
|
+
filters.push({ field: 'typeOfInsurance', comparisonOperator: 'in', value: labels.lines });
|
|
94
|
+
else
|
|
95
|
+
emptyByLines = true;
|
|
96
|
+
}
|
|
70
97
|
}
|
|
71
98
|
}
|
|
72
|
-
if ((scope === null || scope === void 0 ? void 0 : scope.dateFrom)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
99
|
+
if ((scope === null || scope === void 0 ? void 0 : scope.dateFrom) || (scope === null || scope === void 0 ? void 0 : scope.dateTo)) {
|
|
100
|
+
if (!can('dateSubmitted')) {
|
|
101
|
+
unscoped.push('dates');
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
if (scope.dateFrom && !requested.some((f) => f.field === 'dateSubmitted' && ['gte', 'gt'].includes(f.comparisonOperator))) {
|
|
105
|
+
filters.push({ field: 'dateSubmitted', comparisonOperator: 'gte', value: scope.dateFrom });
|
|
106
|
+
}
|
|
107
|
+
if (scope.dateTo && !requested.some((f) => f.field === 'dateSubmitted' && ['lte', 'lt'].includes(f.comparisonOperator))) {
|
|
108
|
+
filters.push({ field: 'dateSubmitted', comparisonOperator: 'lte', value: scope.dateTo });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
77
111
|
}
|
|
78
|
-
return [...filters, ...requested];
|
|
112
|
+
return { filters: [...filters, ...requested], unscoped, emptyByLines };
|
|
79
113
|
}
|
|
80
114
|
/** 'INDUSTRY' only when the session asked for it and the account is entitled; otherwise account data. */
|
|
81
115
|
function resolveSearchType(scope, industryData, requested) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/research/scope.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/research/scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
7
7
|
const node_test_1 = require("node:test");
|
|
8
|
+
const filingramp_contract_1 = require("./filingramp-contract");
|
|
8
9
|
const scope_1 = require("./scope");
|
|
10
|
+
const [FILINGS_GROUP] = (0, filingramp_contract_1.documentIndexGroups)(['filings']);
|
|
11
|
+
const [LIBRARY_GROUP] = (0, filingramp_contract_1.documentIndexGroups)(['library_forms']);
|
|
9
12
|
(0, node_test_1.describe)('research scope filters', () => {
|
|
13
|
+
(0, node_test_1.it)('normalizes singular and plural filter names per endpoint family', () => {
|
|
14
|
+
const singular = [{ field: 'typeOfInsurance', comparisonOperator: 'cn', value: ['Homeowners'] }];
|
|
15
|
+
strict_1.default.equal((0, scope_1.scopeFilingsFilters)(undefined, singular)[0].field, 'typeOfInsurances');
|
|
16
|
+
strict_1.default.equal((0, filingramp_contract_1.documentFilterField)('typeOfInsurances'), 'typeOfInsurance');
|
|
17
|
+
});
|
|
10
18
|
(0, node_test_1.it)('adds state, line and date filters the scope implies', () => {
|
|
11
19
|
const filters = (0, scope_1.scopeFilingsFilters)({ states: ['tx', 'AZ'], lines: ['17.0001', 'Homeowners'], dateFrom: '2024-01-01', dateTo: '2024-12-31' });
|
|
12
20
|
strict_1.default.deepEqual(filters, [
|
|
@@ -24,16 +32,49 @@ const scope_1 = require("./scope");
|
|
|
24
32
|
strict_1.default.deepEqual(widened[0], { field: 'states', comparisonOperator: 'in', value: ['TX'] });
|
|
25
33
|
strict_1.default.equal(widened.length, 1);
|
|
26
34
|
});
|
|
35
|
+
(0, node_test_1.it)('normalizes result-field aliases before merging the session scope', () => {
|
|
36
|
+
const requested = [
|
|
37
|
+
{ field: 'state', comparisonOperator: 'in', value: ['AZ', 'CA'] },
|
|
38
|
+
{ field: 'typeOfInsurance', comparisonOperator: 'cn', value: ['04.0'] },
|
|
39
|
+
];
|
|
40
|
+
strict_1.default.deepEqual((0, scope_1.scopeFilingsFilters)({ states: ['TX', 'AZ'], lines: ['04.0'] }, requested), [
|
|
41
|
+
{ field: 'states', comparisonOperator: 'in', value: ['AZ'] },
|
|
42
|
+
{ field: 'typeOfInsurances', comparisonOperator: 'cn', value: ['04.0'] },
|
|
43
|
+
]);
|
|
44
|
+
strict_1.default.equal(requested[0].field, 'state');
|
|
45
|
+
strict_1.default.deepEqual((0, scope_1.scopeFilingsFilters)(undefined, [
|
|
46
|
+
{ field: 'subTypeOfInsurance', comparisonOperator: 'cn', value: ['04.0000'] },
|
|
47
|
+
]), [{ field: 'subTypeOfInsurances', comparisonOperator: 'cn', value: ['04.0000'] }]);
|
|
48
|
+
});
|
|
27
49
|
(0, node_test_1.it)('keeps caller filters on other fields and passes through with no scope', () => {
|
|
28
50
|
const own = [{ field: 'filingTypes', comparisonOperator: 'in', value: ['Form'] }];
|
|
29
51
|
strict_1.default.deepEqual((0, scope_1.scopeFilingsFilters)(undefined, own), own);
|
|
30
|
-
strict_1.default.deepEqual((0, scope_1.scopeDocumentFilters)(undefined, own), own);
|
|
52
|
+
strict_1.default.deepEqual((0, scope_1.scopeDocumentFilters)(undefined, own, FILINGS_GROUP.fields), { filters: own, unscoped: [], emptyByLines: false });
|
|
31
53
|
});
|
|
32
|
-
(0, node_test_1.it)('
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
54
|
+
(0, node_test_1.it)('applies the scope to document search with the exact labels the filings carry', () => {
|
|
55
|
+
const scope = { states: ['tx'], lines: ['17.0001', 'Homeowners'], dateFrom: '2024-01-01' };
|
|
56
|
+
const labels = { lines: ['04.0 Homeowners'], subLines: ['17.0001 Sub-line'] };
|
|
57
|
+
strict_1.default.deepEqual((0, scope_1.scopeDocumentFilters)(scope, [], FILINGS_GROUP.fields, labels), {
|
|
58
|
+
filters: [
|
|
59
|
+
{ field: 'states', comparisonOperator: 'in', value: ['TX'] },
|
|
60
|
+
{ field: 'subTypeOfInsurance', comparisonOperator: 'in', value: ['17.0001 Sub-line'] },
|
|
61
|
+
{ field: 'typeOfInsurance', comparisonOperator: 'in', value: ['04.0 Homeowners'] },
|
|
62
|
+
{ field: 'dateSubmitted', comparisonOperator: 'gte', value: '2024-01-01' },
|
|
63
|
+
],
|
|
64
|
+
unscoped: [],
|
|
65
|
+
emptyByLines: false,
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
(0, node_test_1.it)('reports what an index group cannot express and when no filing carries the scope lines', () => {
|
|
69
|
+
const scope = { states: ['TX'], lines: ['Homeowners'], dateTo: '2024-12-31' };
|
|
70
|
+
strict_1.default.deepEqual((0, scope_1.scopeDocumentFilters)(scope, [], LIBRARY_GROUP.fields, { lines: ['04.0 Homeowners'], subLines: [] }), {
|
|
71
|
+
filters: [],
|
|
72
|
+
unscoped: ['states', 'lines', 'dates'],
|
|
73
|
+
emptyByLines: false,
|
|
74
|
+
});
|
|
75
|
+
const empty = (0, scope_1.scopeDocumentFilters)(scope, [], FILINGS_GROUP.fields, { lines: [], subLines: [] });
|
|
76
|
+
strict_1.default.equal(empty.emptyByLines, true);
|
|
77
|
+
strict_1.default.deepEqual(empty.filters.map((filter) => filter.field), ['states', 'dateSubmitted']);
|
|
37
78
|
});
|
|
38
79
|
(0, node_test_1.it)('refuses industry data when the account is not entitled', () => {
|
|
39
80
|
strict_1.default.equal((0, scope_1.resolveSearchType)({ dataSource: 'industry' }, true), 'INDUSTRY');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.test.js","sourceRoot":"","sources":["../../src/research/scope.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAuC;AACvC,yCAAwC;AACxC,mCAAsF;AAEtF,IAAA,oBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAA,cAAE,EAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,OAAO,GAAG,IAAA,2BAAmB,EAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;QAC7I,gBAAM,CAAC,SAAS,CAAC,OAAO,EAAE;YACxB,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YAClE,EAAE,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;YAC9E,EAAE,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE;YAC9E,EAAE,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE;YAC1E,EAAE,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE;SAC3E,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,QAAQ,GAAG,IAAA,2BAAmB,EAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9H,gBAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC3F,MAAM,OAAO,GAAG,IAAA,2BAAmB,EAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACvH,gBAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC1F,gBAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACjF,gBAAM,CAAC,SAAS,CAAC,IAAA,2BAAmB,EAAC,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;QAC1D,gBAAM,CAAC,SAAS,CAAC,IAAA,4BAAoB,EAAC,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"scope.test.js","sourceRoot":"","sources":["../../src/research/scope.test.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -6,5 +6,7 @@ export interface RunningAgent {
|
|
|
6
6
|
session?: SessionAgent;
|
|
7
7
|
close(): Promise<void>;
|
|
8
8
|
}
|
|
9
|
+
/** A lifecycle request can race startup; never acknowledge a freeze before restore finishes. */
|
|
10
|
+
export declare function checkpointBeforeFreeze(starting: Promise<RunningAgent> | undefined, reason: string): Promise<void>;
|
|
9
11
|
export declare function startAgent(env?: NodeJS.ProcessEnv): Promise<RunningAgent>;
|
|
10
12
|
//# sourceMappingURL=runtime.d.ts.map
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAIrE,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA;AAE9D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,kBAAkB,CAAA;IAC1B,oCAAoC;IACpC,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAIrE,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA;AAE9D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,kBAAkB,CAAA;IAC1B,oCAAoC;IACpC,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,gGAAgG;AAChG,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvH;AAED,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6B5F"}
|
package/dist/runtime.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkpointBeforeFreeze = checkpointBeforeFreeze;
|
|
3
4
|
exports.startAgent = startAgent;
|
|
4
5
|
// Mode dispatch shared by both entrypoints (cli.ts for engines that materialize env before
|
|
5
6
|
// start, lambda-microvm-entrypoint.ts for the /run hook): task mode runs once and resolves;
|
|
@@ -9,17 +10,33 @@ const link_1 = require("./link");
|
|
|
9
10
|
const loop_1 = require("./loop");
|
|
10
11
|
const report_1 = require("./report");
|
|
11
12
|
const session_1 = require("./session");
|
|
13
|
+
/** A lifecycle request can race startup; never acknowledge a freeze before restore finishes. */
|
|
14
|
+
async function checkpointBeforeFreeze(starting, reason) {
|
|
15
|
+
var _a;
|
|
16
|
+
if (!starting)
|
|
17
|
+
throw new Error('Agent has not started; cannot checkpoint before freezing');
|
|
18
|
+
const agent = await starting;
|
|
19
|
+
await ((_a = agent.session) === null || _a === void 0 ? void 0 : _a.checkpoint(reason));
|
|
20
|
+
}
|
|
12
21
|
async function startAgent(env = process.env) {
|
|
13
22
|
const config = (0, config_1.loadConfigFromEnv)(env);
|
|
14
23
|
if (config.mode === 'session') {
|
|
15
24
|
const link = (0, link_1.createSessionLink)(config.sessionId, config.socketUrl, config.socketToken);
|
|
16
|
-
const session = await (0, session_1.runSessionAgent)(config, link)
|
|
25
|
+
const session = await (0, session_1.runSessionAgent)(config, link).catch(async (error) => {
|
|
26
|
+
link.send({ type: 'error', message: `Workspace restore failed: ${error instanceof Error ? error.message : String(error)}` });
|
|
27
|
+
await link.close();
|
|
28
|
+
throw error;
|
|
29
|
+
});
|
|
17
30
|
return {
|
|
18
31
|
config,
|
|
19
32
|
session,
|
|
20
33
|
async close() {
|
|
21
|
-
|
|
22
|
-
|
|
34
|
+
try {
|
|
35
|
+
await session.stop();
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
await link.close();
|
|
39
|
+
}
|
|
23
40
|
},
|
|
24
41
|
};
|
|
25
42
|
}
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;AAiBA,wDAIC;AAED,gCA6BC;AApDD,2FAA2F;AAC3F,4FAA4F;AAC5F,6FAA6F;AAC7F,qCAAqE;AACrE,iCAA0C;AAC1C,iCAAqC;AACrC,qCAAyC;AACzC,uCAA8D;AAS9D,gGAAgG;AACzF,KAAK,UAAU,sBAAsB,CAAC,QAA2C,EAAE,MAAc;;IACtG,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC1F,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAA;IAC5B,MAAM,CAAA,MAAA,KAAK,CAAC,OAAO,0CAAE,UAAU,CAAC,MAAM,CAAC,CAAA,CAAA;AACzC,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,MAAM,MAAM,GAAG,IAAA,0BAAiB,EAAC,GAAG,CAAC,CAAA;IACrC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAA,wBAAiB,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QACtF,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAe,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;YACjF,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;YAC5H,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAClB,MAAM,KAAK,CAAA;QACb,CAAC,CAAC,CAAA;QACF,OAAO;YACL,MAAM;YACN,OAAO;YACP,KAAK,CAAC,KAAK;gBACT,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;gBACtB,CAAC;wBAAS,CAAC;oBACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;gBACpB,CAAC;YACH,CAAC;SACF,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;IACvF,IAAI,CAAC;QACH,MAAM,IAAA,mBAAY,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACtC,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,KAAI,CAAC,EAAE,CAAA;AACrC,CAAC"}
|
package/dist/session.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ModelMessage } from 'ai';
|
|
2
2
|
import type { AgentRuntimeConfig } from './config';
|
|
3
3
|
import type { SessionLink } from './link';
|
|
4
|
+
export declare const PERIODIC_CHECKPOINT_MS: number;
|
|
4
5
|
/** Drops the oldest turns (user message + everything up to the next user message) past the cap, keeping the first one. */
|
|
5
6
|
export declare function limitConversation(messages: ModelMessage[], charBudget?: number): ModelMessage[];
|
|
6
7
|
export declare class SessionAgent {
|
|
@@ -17,12 +18,16 @@ export declare class SessionAgent {
|
|
|
17
18
|
private systemPrompt;
|
|
18
19
|
private periodic?;
|
|
19
20
|
private stopped;
|
|
21
|
+
private turnTask?;
|
|
22
|
+
private checkpointTask;
|
|
23
|
+
private lastCheckpointAt;
|
|
20
24
|
constructor(config: AgentRuntimeConfig, link: SessionLink);
|
|
21
25
|
private get workspaceDir();
|
|
22
26
|
start(): Promise<void>;
|
|
23
27
|
/** Lifecycle hooks (suspend / terminate) call this; it is safe to call repeatedly. */
|
|
24
|
-
checkpoint(reason: string): Promise<void>;
|
|
28
|
+
checkpoint(reason: string, requestId?: string): Promise<void>;
|
|
25
29
|
stop(): Promise<void>;
|
|
30
|
+
private scheduleCheckpoint;
|
|
26
31
|
private handle;
|
|
27
32
|
private buildTools;
|
|
28
33
|
/** Bulk extraction on the cheaper model: one call per file, structured rows appended to a JSONL file. */
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAUA,OAAO,EAA+C,KAAK,YAAY,EAAa,MAAM,IAAI,CAAA;AAE9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAUA,OAAO,EAA+C,KAAK,YAAY,EAAa,MAAM,IAAI,CAAA;AAE9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAczC,eAAO,MAAM,sBAAsB,QAAa,CAAA;AAwBhD,0HAA0H;AAC1H,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,UAAU,SAAsB,GAAG,YAAY,EAAE,CAa5G;AAUD,qBAAa,YAAY;IAiBrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAjBvB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiD;IACvE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAS;IAClC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,gBAAgB,CAAI;gBAGT,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,WAAW;IAMpC,OAAO,KAAK,YAAY,GAEvB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B5B,sFAAsF;IACtF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,OAAO,CAAC,kBAAkB;YAeZ,MAAM;IAoBpB,OAAO,CAAC,UAAU;IAmGlB,yGAAyG;IACzG,OAAO,CAAC,cAAc;IAwDtB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,cAAc;YAIR,OAAO;IAuGrB,OAAO,CAAC,gBAAgB;YAIV,gBAAgB;YAkBhB,gBAAgB;CAO/B;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAI1G"}
|