@multiplayer-app/agent 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/attribution.d.ts +17 -0
  2. package/dist/attribution.d.ts.map +1 -0
  3. package/dist/attribution.js +37 -0
  4. package/dist/attribution.js.map +1 -0
  5. package/dist/config.d.ts +6 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +7 -2
  8. package/dist/config.js.map +1 -1
  9. package/dist/idle-checkpoint.test.d.ts +2 -0
  10. package/dist/idle-checkpoint.test.d.ts.map +1 -0
  11. package/dist/idle-checkpoint.test.js +57 -0
  12. package/dist/idle-checkpoint.test.js.map +1 -0
  13. package/dist/loop.d.ts.map +1 -1
  14. package/dist/loop.js +2 -1
  15. package/dist/loop.js.map +1 -1
  16. package/dist/model.d.ts +3 -1
  17. package/dist/model.d.ts.map +1 -1
  18. package/dist/model.js +4 -2
  19. package/dist/model.js.map +1 -1
  20. package/dist/protocol.d.ts +16 -6
  21. package/dist/protocol.d.ts.map +1 -1
  22. package/dist/protocol.js +5 -1
  23. package/dist/protocol.js.map +1 -1
  24. package/dist/research/filingramp-contract.d.ts +45 -0
  25. package/dist/research/filingramp-contract.d.ts.map +1 -0
  26. package/dist/research/filingramp-contract.js +277 -0
  27. package/dist/research/filingramp-contract.js.map +1 -0
  28. package/dist/research/filingramp-contract.test.d.ts +2 -0
  29. package/dist/research/filingramp-contract.test.d.ts.map +1 -0
  30. package/dist/research/filingramp-contract.test.js +76 -0
  31. package/dist/research/filingramp-contract.test.js.map +1 -0
  32. package/dist/research/filingramp-tools.d.ts.map +1 -1
  33. package/dist/research/filingramp-tools.js +171 -56
  34. package/dist/research/filingramp-tools.js.map +1 -1
  35. package/dist/research/filingramp-tools.test.d.ts +2 -0
  36. package/dist/research/filingramp-tools.test.d.ts.map +1 -0
  37. package/dist/research/filingramp-tools.test.js +99 -0
  38. package/dist/research/filingramp-tools.test.js.map +1 -0
  39. package/dist/research/prompt.d.ts +4 -0
  40. package/dist/research/prompt.d.ts.map +1 -1
  41. package/dist/research/prompt.js +15 -4
  42. package/dist/research/prompt.js.map +1 -1
  43. package/dist/research/scope.d.ts +22 -8
  44. package/dist/research/scope.d.ts.map +1 -1
  45. package/dist/research/scope.js +49 -15
  46. package/dist/research/scope.js.map +1 -1
  47. package/dist/research/scope.test.js +47 -6
  48. package/dist/research/scope.test.js.map +1 -1
  49. package/dist/session-storage-sync.d.ts +15 -0
  50. package/dist/session-storage-sync.d.ts.map +1 -0
  51. package/dist/session-storage-sync.js +159 -0
  52. package/dist/session-storage-sync.js.map +1 -0
  53. package/dist/session-storage-sync.test.d.ts +2 -0
  54. package/dist/session-storage-sync.test.d.ts.map +1 -0
  55. package/dist/session-storage-sync.test.js +98 -0
  56. package/dist/session-storage-sync.test.js.map +1 -0
  57. package/dist/session.d.ts +4 -1
  58. package/dist/session.d.ts.map +1 -1
  59. package/dist/session.js +85 -28
  60. package/dist/session.js.map +1 -1
  61. package/dist/tools/fs-tools.d.ts +1 -0
  62. package/dist/tools/fs-tools.d.ts.map +1 -1
  63. package/dist/tools/fs-tools.js +11 -2
  64. package/dist/tools/fs-tools.js.map +1 -1
  65. package/dist/tools/fs-tools.test.d.ts +2 -0
  66. package/dist/tools/fs-tools.test.d.ts.map +1 -0
  67. package/dist/tools/fs-tools.test.js +41 -0
  68. package/dist/tools/fs-tools.test.js.map +1 -0
  69. package/package.json +6 -1
@@ -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. A count of 0 inside the scope is a finding, not a dead end: report exactly which filters were applied and call ask_user 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).
23
- 3. Confirm. If the population is large (more than ~300 filings or ~1,000 documents) or the question is ambiguous, call ask_user with the counts and the choice to make. Stop and wait for the answer.
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 ask_user 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.
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":";;;AAUA,8DA8BC;AAvCD,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,SAAgB,yBAAyB,CAAC,OAA+E;IACvH,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,kCAAkC,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3H,OAAO;;;EAGP,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;;;;;;IAMjC,MAAM;;;2CAGiC,6BAAqB,CAAC,KAAK,2EAA2E,CAAA;AACjJ,CAAC"}
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"}
@@ -1,9 +1,6 @@
1
1
  import type { ResearchScope } from '../config';
2
- export interface FilingsFilter {
3
- field: string;
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
- * Same idea for POST /v1/search/global (OpenSearch): its filter vocabulary differs (singular
18
- * typeOfInsurance / subTypeOfInsurance, exact "in" matches only).
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?: FilingsFilter[]): FilingsFilter[];
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;AAE9C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,kBAAkB,EAAE,MAAM,CAAA;IAC1B,KAAK,EAAE,OAAO,CAAA;CACf;AAED,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,CAkCtH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,SAAS,GAAE,aAAa,EAAO,GAAG,aAAa,EAAE,CAwBvH;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"}
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"}
@@ -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): its filter vocabulary differs (singular
53
- * typeOfInsurance / subTypeOfInsurance, exact "in" matches only).
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
- if (((_a = scope === null || scope === void 0 ? void 0 : scope.states) === null || _a === void 0 ? void 0 : _a.length) && !has('states')) {
60
- filters.push({ field: 'states', comparisonOperator: 'in', value: scope.states.map((state) => state.toUpperCase()) });
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 (subLines.length && !has('subTypeOfInsurance')) {
66
- filters.push({ field: 'subTypeOfInsurance', comparisonOperator: 'in', value: subLines });
80
+ if (!can('typeOfInsurance')) {
81
+ unscoped.push('lines');
67
82
  }
68
- if (lines.length && !has('typeOfInsurance')) {
69
- filters.push({ field: 'typeOfInsurance', comparisonOperator: 'in', value: lines });
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) && !has('dateSubmitted')) {
73
- filters.push({ field: 'dateSubmitted', comparisonOperator: 'gte', value: scope.dateFrom });
74
- }
75
- if ((scope === null || scope === void 0 ? void 0 : scope.dateTo) && !requested.some((f) => f.field === 'dateSubmitted' && ['lte', 'lt'].includes(f.comparisonOperator))) {
76
- filters.push({ field: 'dateSubmitted', comparisonOperator: 'lte', value: scope.dateTo });
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":";;AAYA,sCAEC;AAQD,kDAkCC;AAMD,oDAwBC;AAGD,8CAUC;AAED,sCAUC;AApGD,6FAA6F;AAC7F,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,KAAgC,EAAE,YAA6B,EAAE;;IACnG,MAAM,OAAO,GAAoB,EAAE,CAAA;IACnC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAEnF,IAAI,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,MAAM,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QACxE,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,CAAC;YACxC,CAAC,CAAE,GAAI,CAAC,KAAkB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACrF,CAAC,CAAC,EAAE,CAAA;QACN,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;QAC5G,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED,IAAI,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAE,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;QAChE,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC3F,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IAED,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,eAAe,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;QAC3H,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC5F,CAAC;IACD,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,eAAe,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;QACzH,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1F,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpE,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,KAAgC,EAAE,YAA6B,EAAE;;IACpG,MAAM,OAAO,GAAoB,EAAE,CAAA;IACnC,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;IAEjF,IAAI,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,MAAM,KAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAA;IACtH,CAAC;IACD,IAAI,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAE,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;QAChE,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC1F,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QACpF,CAAC;IACH,CAAC;IACD,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,KAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC5F,CAAC;IACD,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,eAAe,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;QACzH,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1F,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,CAAC,CAAA;AACnC,CAAC;AAED,yGAAyG;AACzG,SAAgB,iBAAiB,CAC/B,KAAgC,EAChC,YAAqB,EACrB,SAAkC;IAElC,MAAM,MAAM,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,MAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACvF,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAA;IACnG,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAgB,aAAa,CAAC,KAAgC;;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,kDAAkD,CAAA;IACrE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,wBAAwB,GAAG,CAAC,CAAA;IACvH,IAAI,MAAA,KAAK,CAAC,MAAM,0CAAE,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3E,IAAI,MAAA,KAAK,CAAC,KAAK,0CAAE,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpF,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;IAC3I,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC"}
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)('uses the singular OpenSearch vocabulary for document search', () => {
33
- strict_1.default.deepEqual((0, scope_1.scopeDocumentFilters)({ states: ['tx'], lines: ['17.0001'] }), [
34
- { field: 'states', comparisonOperator: 'in', value: ['TX'] },
35
- { field: 'subTypeOfInsurance', comparisonOperator: 'in', value: ['17.0001'] },
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":"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"}
1
+ {"version":3,"file":"scope.test.js","sourceRoot":"","sources":["../../src/research/scope.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAuC;AACvC,yCAAwC;AACxC,+DAAgF;AAChF,mCAAsF;AAEtF,MAAM,CAAC,aAAa,CAAC,GAAG,IAAA,yCAAmB,EAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AACxD,MAAM,CAAC,aAAa,CAAC,GAAG,IAAA,yCAAmB,EAAC,CAAC,eAAe,CAAC,CAAC,CAAA;AAE9D,IAAA,oBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAA,cAAE,EAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;QAChG,gBAAM,CAAC,KAAK,CAAC,IAAA,2BAAmB,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;QACnF,gBAAM,CAAC,KAAK,CAAC,IAAA,yCAAmB,EAAC,kBAAkB,CAAC,EAAE,iBAAiB,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,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,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,SAAS,GAAG;YAChB,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YACjE,EAAE,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE;SACxE,CAAA;QACD,gBAAM,CAAC,SAAS,CAAC,IAAA,2BAAmB,EAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE;YAC1F,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5D,EAAE,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE;SACzE,CAAC,CAAA;QACF,gBAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACzC,gBAAM,CAAC,SAAS,CAAC,IAAA,2BAAmB,EAAC,SAAS,EAAE;YAC9C,EAAE,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;SAC9E,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;IACvF,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,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;IACnI,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAA;QAC1F,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAA;QAC7E,gBAAM,CAAC,SAAS,CAAC,IAAA,4BAAoB,EAAC,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YAC9E,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC5D,EAAE,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,kBAAkB,CAAC,EAAE;gBACtF,EAAE,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,iBAAiB,CAAC,EAAE;gBAClF,EAAE,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE;aAC3E;YACD,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,KAAK;SACpB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,uFAAuF,EAAE,GAAG,EAAE;QAC/F,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA;QAC7E,gBAAM,CAAC,SAAS,CAAC,IAAA,4BAAoB,EAAC,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE;YACpH,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;YACtC,YAAY,EAAE,KAAK;SACpB,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,IAAA,4BAAoB,EAAC,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;QAChG,gBAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;QACtC,gBAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAA;IAC5F,CAAC,CAAC,CAAA;IAEF,IAAA,cAAE,EAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,gBAAM,CAAC,KAAK,CAAC,IAAA,yBAAiB,EAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,CAAA;QAC7E,gBAAM,CAAC,KAAK,CAAC,IAAA,yBAAiB,EAAC,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,CAAA;QAC5D,gBAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,yBAAiB,EAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,EAAE,aAAa,CAAC,CAAA;QACxF,gBAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,yBAAiB,EAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,aAAa,CAAC,CAAA;IACrF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ import type { SessionStorageConfig } from './config';
2
+ export declare const MAX_SESSION_SNAPSHOT_BYTES: number;
3
+ export declare class SessionStorageSync {
4
+ private readonly config;
5
+ private lastHash?;
6
+ private busy;
7
+ constructor(config: SessionStorageConfig);
8
+ get dir(): string;
9
+ private serialize;
10
+ private request;
11
+ private writeFile;
12
+ restore(): Promise<boolean>;
13
+ commit(_reason: string): Promise<string | undefined>;
14
+ }
15
+ //# sourceMappingURL=session-storage-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage-sync.d.ts","sourceRoot":"","sources":["../src/session-storage-sync.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAEpD,eAAO,MAAM,0BAA0B,QAAmB,CAAA;AAiB1D,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,CAAQ;IACzB,OAAO,CAAC,IAAI,CAAsC;gBACrB,MAAM,EAAE,oBAAoB;IACzD,IAAI,GAAG,IAAI,MAAM,CAA2B;IAE5C,OAAO,CAAC,SAAS;YAMH,OAAO;YAYP,SAAS;IAmBvB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAqC3B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAkCrD"}
@@ -0,0 +1,159 @@
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
+ exports.SessionStorageSync = exports.MAX_SESSION_SNAPSHOT_BYTES = void 0;
7
+ // Standalone sessions persist snapshots to S3 through the authenticated storage service.
8
+ // No Git repository is created in the guest or in the session's bucket folder.
9
+ const node_crypto_1 = require("node:crypto");
10
+ const node_fs_1 = require("node:fs");
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ exports.MAX_SESSION_SNAPSHOT_BYTES = 64 * 1024 * 1024;
13
+ const MARKER = '.builder/session-storage.json';
14
+ const TIMEOUT_MS = 60000;
15
+ function validPath(value) {
16
+ return typeof value === 'string' && !/[\\\x00-\x1f]/.test(value)
17
+ && value !== MARKER && value.split('/').every((part) => !['', '.', '..', '.git'].includes(part));
18
+ }
19
+ function excluded(relative) {
20
+ return relative === MARKER || relative === 'data/attachments' || relative.startsWith('data/attachments/')
21
+ || relative.split('/').some((part) => ['.git', 'node_modules', '.venv'].includes(part))
22
+ || /\.sqlite(?:-journal)?$/.test(relative);
23
+ }
24
+ class SessionStorageSync {
25
+ constructor(config) {
26
+ this.config = config;
27
+ this.busy = Promise.resolve();
28
+ }
29
+ get dir() { return this.config.dir; }
30
+ serialize(work) {
31
+ const next = this.busy.then(work, work);
32
+ this.busy = next.catch(() => undefined);
33
+ return next;
34
+ }
35
+ async request(method, body) {
36
+ var _a;
37
+ const response = await fetch(this.config.url, {
38
+ method, body, redirect: 'error', signal: AbortSignal.timeout(TIMEOUT_MS),
39
+ headers: { Authorization: `Bearer ${this.config.token}`, 'Content-Type': 'application/json' },
40
+ });
41
+ if (!response.ok && !(method === 'GET' && response.status === 404)) {
42
+ await ((_a = response.body) === null || _a === void 0 ? void 0 : _a.cancel());
43
+ throw new Error(`Session storage ${method} failed (${response.status})`);
44
+ }
45
+ return response;
46
+ }
47
+ async writeFile(relative, data, executable = false) {
48
+ // Never follow a workspace symlink while restoring a file (including parent directories).
49
+ let parent = this.dir;
50
+ for (const part of relative.split('/').slice(0, -1)) {
51
+ parent = node_path_1.default.join(parent, part);
52
+ await node_fs_1.promises.mkdir(parent).catch((error) => {
53
+ if (error.code !== 'EEXIST')
54
+ throw error;
55
+ });
56
+ if (!(await node_fs_1.promises.lstat(parent)).isDirectory())
57
+ throw new Error('Snapshot parent is not a directory');
58
+ }
59
+ const file = await node_fs_1.promises.open(node_path_1.default.join(this.dir, relative), node_fs_1.constants.O_WRONLY | node_fs_1.constants.O_CREAT | node_fs_1.constants.O_TRUNC | node_fs_1.constants.O_NOFOLLOW, 0o600);
60
+ try {
61
+ await file.writeFile(data);
62
+ await file.chmod(executable ? 0o755 : 0o644);
63
+ }
64
+ finally {
65
+ await file.close();
66
+ }
67
+ }
68
+ restore() {
69
+ return this.serialize(async () => {
70
+ var _a;
71
+ await node_fs_1.promises.mkdir(this.dir, { recursive: true });
72
+ // A process restart on a retained disk must preserve uncheckpointed local edits/deletions.
73
+ const marker = await node_fs_1.promises.readFile(node_path_1.default.join(this.dir, MARKER), 'utf8').catch((error) => {
74
+ if (error.code !== 'ENOENT')
75
+ throw error;
76
+ return undefined;
77
+ });
78
+ if (marker && JSON.parse(marker).url === this.config.url)
79
+ return true;
80
+ const response = await this.request('GET');
81
+ const found = response.status !== 404;
82
+ if (found) {
83
+ const chunks = [];
84
+ let size = 0;
85
+ if (response.body)
86
+ for await (const chunk of response.body) {
87
+ size += chunk.byteLength;
88
+ if (size > exports.MAX_SESSION_SNAPSHOT_BYTES)
89
+ throw new Error('Session snapshot exceeds size limit');
90
+ chunks.push(chunk);
91
+ }
92
+ const snapshot = JSON.parse(Buffer.concat(chunks).toString('utf8'));
93
+ const seen = new Set();
94
+ if (snapshot.version !== 1 || !Array.isArray(snapshot.files))
95
+ throw new Error('Invalid session snapshot');
96
+ // Validate the complete manifest before writing anything.
97
+ for (const file of snapshot.files) {
98
+ if (!file || !validPath(file.path) || seen.has(file.path) || typeof file.content !== 'string'
99
+ || typeof file.executable !== 'boolean' || Buffer.from(file.content, 'base64').toString('base64') !== file.content) {
100
+ throw new Error('Invalid session snapshot file');
101
+ }
102
+ seen.add(file.path);
103
+ }
104
+ for (const file of snapshot.files)
105
+ await this.writeFile(file.path, Buffer.from(file.content, 'base64'), file.executable);
106
+ }
107
+ else
108
+ await ((_a = response.body) === null || _a === void 0 ? void 0 : _a.cancel());
109
+ await this.writeFile(MARKER, JSON.stringify({ url: this.config.url }));
110
+ return found;
111
+ });
112
+ }
113
+ commit(_reason) {
114
+ return this.serialize(async () => {
115
+ var _a;
116
+ const files = [];
117
+ let size = 0;
118
+ const walk = async (relative) => {
119
+ const entries = await node_fs_1.promises.readdir(node_path_1.default.join(this.dir, relative), { withFileTypes: true });
120
+ entries.sort((a, b) => a.name.localeCompare(b.name));
121
+ for (const entry of entries) {
122
+ const name = relative ? `${relative}/${entry.name}` : entry.name;
123
+ if (excluded(name))
124
+ continue;
125
+ if (!validPath(name))
126
+ throw new Error(`Unsupported snapshot path: ${name}`);
127
+ if (entry.isDirectory())
128
+ await walk(name);
129
+ else if (entry.isFile()) {
130
+ const handle = await node_fs_1.promises.open(node_path_1.default.join(this.dir, name), node_fs_1.constants.O_RDONLY | node_fs_1.constants.O_NOFOLLOW);
131
+ try {
132
+ const stat = await handle.stat();
133
+ size += Math.ceil(stat.size / 3) * 4 + name.length + 100;
134
+ if (size > exports.MAX_SESSION_SNAPSHOT_BYTES)
135
+ throw new Error('Session snapshot exceeds size limit');
136
+ files.push({ path: name, content: (await handle.readFile()).toString('base64'), executable: Boolean(stat.mode & 0o111) });
137
+ }
138
+ finally {
139
+ await handle.close();
140
+ }
141
+ }
142
+ }
143
+ };
144
+ await walk('');
145
+ const body = JSON.stringify({ version: 1, files });
146
+ if (Buffer.byteLength(body) > exports.MAX_SESSION_SNAPSHOT_BYTES)
147
+ throw new Error('Session snapshot exceeds size limit');
148
+ const hash = (0, node_crypto_1.createHash)('sha256').update(body).digest('hex');
149
+ if (hash === this.lastHash)
150
+ return undefined;
151
+ const response = await this.request('PUT', body);
152
+ await ((_a = response.body) === null || _a === void 0 ? void 0 : _a.cancel());
153
+ this.lastHash = hash; // A failed upload must be retried even when files have not changed.
154
+ return hash;
155
+ });
156
+ }
157
+ }
158
+ exports.SessionStorageSync = SessionStorageSync;
159
+ //# sourceMappingURL=session-storage-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage-sync.js","sourceRoot":"","sources":["../src/session-storage-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-storage-sync.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage-sync.test.d.ts","sourceRoot":"","sources":["../src/session-storage-sync.test.ts"],"names":[],"mappings":""}