@multiplayer-app/agent 0.1.9 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -0
- package/dist/agent/definition.d.ts +22 -0
- package/dist/agent/definition.d.ts.map +1 -0
- package/dist/agent/definition.js +3 -0
- package/dist/agent/definition.js.map +1 -0
- package/dist/agent/definition.test.d.ts +2 -0
- package/dist/agent/definition.test.d.ts.map +1 -0
- package/dist/agent/definition.test.js +40 -0
- package/dist/agent/definition.test.js.map +1 -0
- package/dist/agent/profiles/coding.d.ts +4 -0
- package/dist/agent/profiles/coding.d.ts.map +1 -0
- package/dist/agent/profiles/coding.js +17 -0
- package/dist/agent/profiles/coding.js.map +1 -0
- package/dist/agent/profiles/index.d.ts +4 -0
- package/dist/agent/profiles/index.d.ts.map +1 -0
- package/dist/agent/profiles/index.js +9 -0
- package/dist/agent/profiles/index.js.map +1 -0
- package/dist/agent/profiles/research.d.ts +4 -0
- package/dist/agent/profiles/research.d.ts.map +1 -0
- package/dist/agent/profiles/research.js +43 -0
- package/dist/agent/profiles/research.js.map +1 -0
- package/dist/agent/turn-runner.d.ts +37 -0
- package/dist/agent/turn-runner.d.ts.map +1 -0
- package/dist/agent/turn-runner.js +94 -0
- package/dist/agent/turn-runner.js.map +1 -0
- package/dist/agent/turn-runner.test.d.ts +2 -0
- package/dist/agent/turn-runner.test.d.ts.map +1 -0
- package/dist/agent/turn-runner.test.js +181 -0
- package/dist/agent/turn-runner.test.js.map +1 -0
- package/dist/index.d.ts +11 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -10
- package/dist/index.js.map +1 -1
- package/dist/models/attribution.d.ts.map +1 -0
- package/dist/models/attribution.js.map +1 -0
- package/dist/{model.d.ts → models/resolve-model.d.ts} +2 -2
- package/dist/models/resolve-model.d.ts.map +1 -0
- package/dist/{model.js → models/resolve-model.js} +1 -1
- package/dist/models/resolve-model.js.map +1 -0
- package/dist/models/usage.d.ts +7 -0
- package/dist/models/usage.d.ts.map +1 -0
- package/dist/models/usage.js +13 -0
- package/dist/models/usage.js.map +1 -0
- package/dist/{git-sync.d.ts → persistence/git-sync.d.ts} +1 -1
- package/dist/persistence/git-sync.d.ts.map +1 -0
- package/dist/persistence/git-sync.js.map +1 -0
- package/dist/persistence/git-sync.test.d.ts.map +1 -0
- package/dist/{git-sync.test.js → persistence/git-sync.test.js} +2 -2
- package/dist/persistence/git-sync.test.js.map +1 -0
- package/dist/{session-storage-sync.d.ts → persistence/snapshot-sync.d.ts} +2 -2
- package/dist/persistence/snapshot-sync.d.ts.map +1 -0
- package/dist/{session-storage-sync.js → persistence/snapshot-sync.js} +1 -1
- package/dist/persistence/snapshot-sync.js.map +1 -0
- package/dist/persistence/snapshot-sync.test.d.ts +2 -0
- package/dist/persistence/snapshot-sync.test.d.ts.map +1 -0
- package/dist/{session-storage-sync.test.js → persistence/snapshot-sync.test.js} +3 -3
- package/dist/persistence/snapshot-sync.test.js.map +1 -0
- package/dist/persistence/workspace.d.ts +17 -0
- package/dist/persistence/workspace.d.ts.map +1 -0
- package/dist/persistence/workspace.js +26 -0
- package/dist/persistence/workspace.js.map +1 -0
- package/dist/persistence/workspace.test.d.ts +2 -0
- package/dist/persistence/workspace.test.d.ts.map +1 -0
- package/dist/persistence/workspace.test.js +38 -0
- package/dist/persistence/workspace.test.js.map +1 -0
- package/dist/research/extraction-tool.d.ts +6 -0
- package/dist/research/extraction-tool.d.ts.map +1 -0
- package/dist/research/extraction-tool.js +67 -0
- package/dist/research/extraction-tool.js.map +1 -0
- package/dist/research/extraction-tool.test.d.ts +2 -0
- package/dist/research/extraction-tool.test.d.ts.map +1 -0
- package/dist/research/extraction-tool.test.js +100 -0
- package/dist/research/extraction-tool.test.js.map +1 -0
- package/dist/research/filingramp/attachment-tools.d.ts +4 -0
- package/dist/research/filingramp/attachment-tools.d.ts.map +1 -0
- package/dist/research/filingramp/attachment-tools.js +99 -0
- package/dist/research/filingramp/attachment-tools.js.map +1 -0
- package/dist/research/filingramp/document-search-tool.d.ts +4 -0
- package/dist/research/filingramp/document-search-tool.d.ts.map +1 -0
- package/dist/research/filingramp/document-search-tool.js +173 -0
- package/dist/research/filingramp/document-search-tool.js.map +1 -0
- package/dist/research/filingramp/filing-detail-tool.d.ts +4 -0
- package/dist/research/filingramp/filing-detail-tool.d.ts.map +1 -0
- package/dist/research/filingramp/filing-detail-tool.js +114 -0
- package/dist/research/filingramp/filing-detail-tool.js.map +1 -0
- package/dist/research/filingramp/filing-search-tools.d.ts +4 -0
- package/dist/research/filingramp/filing-search-tools.d.ts.map +1 -0
- package/dist/research/filingramp/filing-search-tools.js +207 -0
- package/dist/research/filingramp/filing-search-tools.js.map +1 -0
- package/dist/research/filingramp/shared.d.ts +48 -0
- package/dist/research/filingramp/shared.d.ts.map +1 -0
- package/dist/research/filingramp/shared.js +58 -0
- package/dist/research/filingramp/shared.js.map +1 -0
- package/dist/research/filingramp-client.d.ts +1 -1
- package/dist/research/filingramp-client.d.ts.map +1 -1
- package/dist/research/filingramp-tools.d.ts +3 -8
- package/dist/research/filingramp-tools.d.ts.map +1 -1
- package/dist/research/filingramp-tools.js +14 -597
- package/dist/research/filingramp-tools.js.map +1 -1
- package/dist/research/filingramp-tools.test.js +45 -2
- package/dist/research/filingramp-tools.test.js.map +1 -1
- package/dist/research/prompt.d.ts +1 -1
- package/dist/research/prompt.d.ts.map +1 -1
- package/dist/research/scope.d.ts +1 -1
- package/dist/research/scope.d.ts.map +1 -1
- package/dist/runtime/cli.d.ts.map +1 -0
- package/dist/{cli.js → runtime/cli.js} +3 -3
- package/dist/runtime/cli.js.map +1 -0
- package/dist/{config.d.ts → runtime/config.d.ts} +1 -1
- package/dist/runtime/config.d.ts.map +1 -0
- package/dist/{config.js → runtime/config.js} +1 -1
- package/dist/runtime/config.js.map +1 -0
- package/dist/{runtime.d.ts → runtime/index.d.ts} +2 -2
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/{runtime.js → runtime/index.js} +7 -7
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/lambda-microvm.d.ts +3 -0
- package/dist/runtime/lambda-microvm.d.ts.map +1 -0
- package/dist/{lambda-microvm-entrypoint.js → runtime/lambda-microvm.js} +4 -4
- package/dist/runtime/lambda-microvm.js.map +1 -0
- package/dist/runtime/lifecycle.test.d.ts.map +1 -0
- package/dist/{lifecycle.test.js → runtime/lifecycle.test.js} +5 -5
- package/dist/runtime/lifecycle.test.js.map +1 -0
- package/dist/session/checkpoint-timer.test.d.ts.map +1 -0
- package/dist/{checkpoint-timer.test.js → session/checkpoint-timer.test.js} +8 -8
- package/dist/session/checkpoint-timer.test.js.map +1 -0
- package/dist/session/conversation.d.ts +15 -0
- package/dist/session/conversation.d.ts.map +1 -0
- package/dist/session/conversation.js +61 -0
- package/dist/session/conversation.js.map +1 -0
- package/dist/session/conversation.test.d.ts +2 -0
- package/dist/session/conversation.test.d.ts.map +1 -0
- package/dist/session/conversation.test.js +53 -0
- package/dist/session/conversation.test.js.map +1 -0
- package/dist/session/idle-checkpoint.test.d.ts.map +1 -0
- package/dist/{idle-checkpoint.test.js → session/idle-checkpoint.test.js} +8 -4
- package/dist/session/idle-checkpoint.test.js.map +1 -0
- package/dist/session/index.d.ts +7 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +16 -0
- package/dist/session/index.js.map +1 -0
- package/dist/{session.d.ts → session/runtime.d.ts} +20 -16
- package/dist/session/runtime.d.ts.map +1 -0
- package/dist/session/runtime.js +251 -0
- package/dist/session/runtime.js.map +1 -0
- package/dist/session/runtime.test.d.ts +2 -0
- package/dist/session/runtime.test.d.ts.map +1 -0
- package/dist/session/runtime.test.js +201 -0
- package/dist/session/runtime.test.js.map +1 -0
- package/dist/session/tool-context.d.ts +12 -0
- package/dist/session/tool-context.d.ts.map +1 -0
- package/dist/session/tool-context.js +3 -0
- package/dist/session/tool-context.js.map +1 -0
- package/dist/session/tools.d.ts +6 -0
- package/dist/session/tools.d.ts.map +1 -0
- package/dist/session/tools.js +97 -0
- package/dist/session/tools.js.map +1 -0
- package/dist/session/tools.test.d.ts +2 -0
- package/dist/session/tools.test.d.ts.map +1 -0
- package/dist/session/tools.test.js +55 -0
- package/dist/session/tools.test.js.map +1 -0
- package/dist/task/loop.d.ts +6 -0
- package/dist/task/loop.d.ts.map +1 -0
- package/dist/{loop.js → task/loop.js} +6 -6
- package/dist/task/loop.js.map +1 -0
- package/dist/transport/link.d.ts.map +1 -0
- package/dist/transport/link.js.map +1 -0
- package/dist/transport/protocol.d.ts.map +1 -0
- package/dist/transport/protocol.js.map +1 -0
- package/dist/transport/protocol.test.d.ts.map +1 -0
- package/dist/transport/protocol.test.js.map +1 -0
- package/dist/{report.d.ts → transport/reporter.d.ts} +1 -1
- package/dist/transport/reporter.d.ts.map +1 -0
- package/dist/{report.js → transport/reporter.js} +1 -1
- package/dist/transport/reporter.js.map +1 -0
- package/package.json +11 -11
- package/dist/attribution.d.ts.map +0 -1
- package/dist/attribution.js.map +0 -1
- package/dist/checkpoint-timer.test.d.ts.map +0 -1
- package/dist/checkpoint-timer.test.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/git-sync.d.ts.map +0 -1
- package/dist/git-sync.js.map +0 -1
- package/dist/git-sync.test.d.ts.map +0 -1
- package/dist/git-sync.test.js.map +0 -1
- package/dist/idle-checkpoint.test.d.ts.map +0 -1
- package/dist/idle-checkpoint.test.js.map +0 -1
- package/dist/lambda-microvm-entrypoint.d.ts +0 -3
- package/dist/lambda-microvm-entrypoint.d.ts.map +0 -1
- package/dist/lambda-microvm-entrypoint.js.map +0 -1
- package/dist/lifecycle.test.d.ts.map +0 -1
- package/dist/lifecycle.test.js.map +0 -1
- package/dist/link.d.ts.map +0 -1
- package/dist/link.js.map +0 -1
- package/dist/loop.d.ts +0 -6
- package/dist/loop.d.ts.map +0 -1
- package/dist/loop.js.map +0 -1
- package/dist/model.d.ts.map +0 -1
- package/dist/model.js.map +0 -1
- package/dist/protocol.d.ts.map +0 -1
- package/dist/protocol.js.map +0 -1
- package/dist/protocol.test.d.ts.map +0 -1
- package/dist/protocol.test.js.map +0 -1
- package/dist/report.d.ts.map +0 -1
- package/dist/report.js.map +0 -1
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js.map +0 -1
- package/dist/session-storage-sync.d.ts.map +0 -1
- package/dist/session-storage-sync.js.map +0 -1
- package/dist/session-storage-sync.test.d.ts +0 -2
- package/dist/session-storage-sync.test.d.ts.map +0 -1
- package/dist/session-storage-sync.test.js.map +0 -1
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -512
- package/dist/session.js.map +0 -1
- /package/dist/{attribution.d.ts → models/attribution.d.ts} +0 -0
- /package/dist/{attribution.js → models/attribution.js} +0 -0
- /package/dist/{git-sync.js → persistence/git-sync.js} +0 -0
- /package/dist/{git-sync.test.d.ts → persistence/git-sync.test.d.ts} +0 -0
- /package/dist/{cli.d.ts → runtime/cli.d.ts} +0 -0
- /package/dist/{lifecycle.test.d.ts → runtime/lifecycle.test.d.ts} +0 -0
- /package/dist/{checkpoint-timer.test.d.ts → session/checkpoint-timer.test.d.ts} +0 -0
- /package/dist/{idle-checkpoint.test.d.ts → session/idle-checkpoint.test.d.ts} +0 -0
- /package/dist/{link.d.ts → transport/link.d.ts} +0 -0
- /package/dist/{link.js → transport/link.js} +0 -0
- /package/dist/{protocol.d.ts → transport/protocol.d.ts} +0 -0
- /package/dist/{protocol.js → transport/protocol.js} +0 -0
- /package/dist/{protocol.test.d.ts → transport/protocol.test.d.ts} +0 -0
- /package/dist/{protocol.test.js → transport/protocol.test.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.test.js","sourceRoot":"","sources":["../../src/persistence/workspace.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAuC;AACvC,yCAA8B;AAE9B,yCAAoC;AACpC,mDAAoD;AACpD,2CAAwD;AAExD,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,UAAU,CAAU,EAAE,CAAC;IAChD,IAAA,cAAE,EAAC,UAAU,IAAI,oEAAoE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjG,MAAM,MAAM,GAAG;YACb,GAAG,CAAC,IAAI,KAAK,KAAK;gBAChB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACxG,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;SACrD,CAAA;QACvB,MAAM,SAAS,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAO,CAAC,SAAS,CAAC,CAAC,CAAC,kCAAkB,CAAC,SAAS,CAAA;QACnF,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAA;QACrD,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;YAC1D,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;YACxC,OAAO,IAAI,CAAC,CAAA;YACZ,IAAI,OAAO,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;YACpD,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;QAC/C,CAAC,CAAC,CAAA;QACF,MAAM,WAAW,GAAG,IAAA,sCAA0B,EAAC,MAAM,CAAE,CAAA;QACvD,gBAAM,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAA;QAC/C,gBAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QACvE,MAAM,gBAAM,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,gBAAgB,CAAC,CAAA;QAClF,gBAAM,CAAC,SAAS,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,IAAI,KAAK,KAAK;YAC/E,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QACjF,gBAAM,CAAC,SAAS,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,IAAI,KAAK,KAAK;YAC/E,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Tool } from 'ai';
|
|
2
|
+
import type { AgentModel } from '../agent/definition';
|
|
3
|
+
import type { SessionToolContext } from '../session/tool-context';
|
|
4
|
+
/** Bulk extraction on the cheaper model: one call per file, structured rows appended to a JSONL file. */
|
|
5
|
+
export declare function createExtractionTool(context: SessionToolContext, modelConfig: AgentModel): Tool;
|
|
6
|
+
//# sourceMappingURL=extraction-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraction-tool.d.ts","sourceRoot":"","sources":["../../src/research/extraction-tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,IAAI,EAAE,MAAM,IAAI,CAAA;AAGlD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAKjE,yGAAyG;AACzG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,GAAG,IAAI,CAiD/F"}
|
|
@@ -0,0 +1,67 @@
|
|
|
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.createExtractionTool = createExtractionTool;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const ai_1 = require("ai");
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
const resolve_model_1 = require("../models/resolve-model");
|
|
12
|
+
const usage_1 = require("../models/usage");
|
|
13
|
+
const MAX_EXTRACTION_CHARS = 60000;
|
|
14
|
+
/** Bulk extraction on the cheaper model: one call per file, structured rows appended to a JSONL file. */
|
|
15
|
+
function createExtractionTool(context, modelConfig) {
|
|
16
|
+
const { workspaceDir, abortSignal, recordUsage } = context;
|
|
17
|
+
return (0, ai_1.tool)({
|
|
18
|
+
description: 'Extract the same facts from many extracted-text files with a cheaper model, one file at a time, appending one JSON row per file to outputPath (JSONL). Use after search_documents/download_attachment saved texts under data/text/. Each row has the requested fields plus `quote` (the supporting span) and `source`.',
|
|
19
|
+
inputSchema: zod_1.z.object({
|
|
20
|
+
paths: zod_1.z.array(zod_1.z.string().min(1).max(500)).min(1).max(50),
|
|
21
|
+
question: zod_1.z.string().min(1).max(2000).describe('What to look for, precisely'),
|
|
22
|
+
fields: zod_1.z.array(zod_1.z.string().min(1).max(60)).min(1).max(15).describe('Field names each row must contain'),
|
|
23
|
+
outputPath: zod_1.z.string().min(1).max(300).describe('e.g. data/extracted/water-valve.jsonl'),
|
|
24
|
+
}),
|
|
25
|
+
execute: async ({ paths, question, fields, outputPath }, { toolCallId }) => {
|
|
26
|
+
const model = (0, resolve_model_1.resolveLanguageModel)(modelConfig.provider, modelConfig.id, modelConfig.attribution);
|
|
27
|
+
const output = node_path_1.default.resolve(workspaceDir, outputPath);
|
|
28
|
+
await node_fs_1.promises.mkdir(node_path_1.default.dirname(output), { recursive: true });
|
|
29
|
+
let rows = 0;
|
|
30
|
+
const failures = [];
|
|
31
|
+
const report = (index) => {
|
|
32
|
+
context.reportProgress([
|
|
33
|
+
{ key: 'extract', label: 'Extracting facts', status: index < paths.length ? 'active' : 'done', detail: `${index}/${paths.length} documents` },
|
|
34
|
+
], toolCallId);
|
|
35
|
+
};
|
|
36
|
+
report(0);
|
|
37
|
+
for (const [index, relative] of paths.entries()) {
|
|
38
|
+
if (abortSignal.aborted)
|
|
39
|
+
break;
|
|
40
|
+
if (index > 0 && index % 3 === 0)
|
|
41
|
+
report(index);
|
|
42
|
+
try {
|
|
43
|
+
const text = (await node_fs_1.promises.readFile(node_path_1.default.resolve(workspaceDir, relative), 'utf8')).slice(0, MAX_EXTRACTION_CHARS);
|
|
44
|
+
const result = await (0, ai_1.generateText)({
|
|
45
|
+
model,
|
|
46
|
+
abortSignal,
|
|
47
|
+
system: 'You extract facts from one insurance filing document. Answer with a single JSON object only — no prose. Use null for a field the document does not state. Always include "quote": the exact supporting text (max 300 characters) or null, and "found": true|false.',
|
|
48
|
+
prompt: `Question: ${question}\nFields: ${fields.join(', ')}\n\nDocument (${relative}):\n${text}`,
|
|
49
|
+
});
|
|
50
|
+
const usage = (0, usage_1.usageOf)(result);
|
|
51
|
+
if (usage)
|
|
52
|
+
recordUsage(usage, modelConfig.id);
|
|
53
|
+
const match = result.text.match(/\{[\s\S]*\}/);
|
|
54
|
+
const parsed = match ? JSON.parse(match[0]) : { found: false };
|
|
55
|
+
await node_fs_1.promises.appendFile(output, `${JSON.stringify({ source: relative, ...parsed })}\n`);
|
|
56
|
+
rows += 1;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
failures.push({ path: relative, reason: error.message });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
report(paths.length);
|
|
63
|
+
return { outputPath, rows, failures, model: modelConfig.id };
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=extraction-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraction-tool.js","sourceRoot":"","sources":["../../src/research/extraction-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraction-tool.test.d.ts","sourceRoot":"","sources":["../../src/research/extraction-tool.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
40
|
+
const node_fs_1 = require("node:fs");
|
|
41
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
42
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
43
|
+
const node_test_1 = require("node:test");
|
|
44
|
+
const test_1 = require("ai/test");
|
|
45
|
+
const modelProvider = __importStar(require("../models/resolve-model"));
|
|
46
|
+
const attribution_1 = require("../models/attribution");
|
|
47
|
+
const extraction_tool_1 = require("./extraction-tool");
|
|
48
|
+
for (const cancelAfterFirst of [false, true]) {
|
|
49
|
+
(0, node_test_1.it)(`bulk extraction ${cancelAfterFirst ? 'stops after cancellation' : 'records usage and continues past missing files'}`, async (t) => {
|
|
50
|
+
const dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'agent-extraction-'));
|
|
51
|
+
t.after(() => node_fs_1.promises.rm(dir, { recursive: true, force: true }));
|
|
52
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'first.txt'), 'A water valve is required.');
|
|
53
|
+
await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'second.txt'), 'Another filing.');
|
|
54
|
+
const model = new test_1.MockLanguageModelV3({
|
|
55
|
+
doGenerate: async () => ({
|
|
56
|
+
content: [{ type: 'text', text: '{"found":true,"quote":"A water valve is required."}' }],
|
|
57
|
+
finishReason: { unified: 'stop', raw: 'stop' },
|
|
58
|
+
usage: {
|
|
59
|
+
inputTokens: { total: 10, noCache: 10, cacheRead: 0, cacheWrite: 0 },
|
|
60
|
+
outputTokens: { total: 5, text: 5, reasoning: 0 },
|
|
61
|
+
},
|
|
62
|
+
warnings: [],
|
|
63
|
+
}),
|
|
64
|
+
});
|
|
65
|
+
t.mock.method(modelProvider, 'resolveLanguageModel', (_provider, modelId, app) => {
|
|
66
|
+
strict_1.default.equal(modelId, 'extraction-model');
|
|
67
|
+
strict_1.default.equal(app, attribution_1.OPENROUTER_APPS.DEEP_RESEARCH);
|
|
68
|
+
return model;
|
|
69
|
+
});
|
|
70
|
+
const turn = { messageId: 'extract-turn', abort: new AbortController(), askedUser: false };
|
|
71
|
+
const events = [];
|
|
72
|
+
let usedTokens = 0;
|
|
73
|
+
const context = {
|
|
74
|
+
workspaceDir: dir,
|
|
75
|
+
abortSignal: turn.abort.signal,
|
|
76
|
+
reportProgress: (steps, toolCallId) => events.push({ type: 'progress', messageId: turn.messageId, toolCallId, steps }),
|
|
77
|
+
requestClarification() { },
|
|
78
|
+
publishFiles() { },
|
|
79
|
+
recordUsage(usage, modelId) {
|
|
80
|
+
usedTokens += usage.totalTokens;
|
|
81
|
+
strict_1.default.equal(modelId, 'extraction-model');
|
|
82
|
+
if (cancelAfterFirst)
|
|
83
|
+
turn.abort.abort();
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
const result = await (0, extraction_tool_1.createExtractionTool)(context, { id: 'extraction-model', provider: {}, attribution: attribution_1.OPENROUTER_APPS.DEEP_RESEARCH }).execute({
|
|
87
|
+
paths: ['missing.txt', 'first.txt', 'second.txt'], question: 'Is a valve required?', fields: ['found'], outputPath: 'results/rows.jsonl',
|
|
88
|
+
}, { toolCallId: 'extract', messages: [] });
|
|
89
|
+
const expectedRows = cancelAfterFirst ? 1 : 2;
|
|
90
|
+
strict_1.default.equal(result.rows, expectedRows);
|
|
91
|
+
strict_1.default.deepEqual(result.failures.map((failure) => failure.path), ['missing.txt']);
|
|
92
|
+
strict_1.default.equal(model.doGenerateCalls.length, expectedRows);
|
|
93
|
+
strict_1.default.equal(usedTokens, 15 * expectedRows);
|
|
94
|
+
const rows = (await node_fs_1.promises.readFile(node_path_1.default.join(dir, 'results/rows.jsonl'), 'utf8')).trim().split('\n').map((line) => JSON.parse(line));
|
|
95
|
+
strict_1.default.equal(rows.length, expectedRows);
|
|
96
|
+
strict_1.default.deepEqual(rows[0], { source: 'first.txt', found: true, quote: 'A water valve is required.' });
|
|
97
|
+
strict_1.default.ok(events.every((event) => event.type === 'progress' && event.messageId === 'extract-turn' && event.toolCallId === 'extract'));
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=extraction-tool.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraction-tool.test.js","sourceRoot":"","sources":["../../src/research/extraction-tool.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-tools.d.ts","sourceRoot":"","sources":["../../../src/research/filingramp/attachment-tools.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,IAAI,CAAA;AAEpC,OAAO,EAAgC,KAAK,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAuBpF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAgE3F"}
|
|
@@ -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
|
+
exports.createAttachmentTools = createAttachmentTools;
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const node_util_1 = require("node:util");
|
|
11
|
+
const ai_1 = require("ai");
|
|
12
|
+
const zod_1 = require("zod");
|
|
13
|
+
const shared_1 = require("./shared");
|
|
14
|
+
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
15
|
+
const MAX_INLINE_TEXT_CHARS = 4000;
|
|
16
|
+
/** PDF → text with whatever the image has (mupdf first, poppler second). Empty text = scanned or protected. */
|
|
17
|
+
async function extractPdfText(file, output) {
|
|
18
|
+
const attempts = [
|
|
19
|
+
['mutool', ['draw', '-F', 'txt', '-o', output, file]],
|
|
20
|
+
['pdftotext', ['-layout', file, output]],
|
|
21
|
+
];
|
|
22
|
+
for (const [bin, args] of attempts) {
|
|
23
|
+
try {
|
|
24
|
+
await execFileAsync(bin, args, { timeout: 120000 });
|
|
25
|
+
const stat = await node_fs_1.promises.stat(output);
|
|
26
|
+
return stat.size;
|
|
27
|
+
}
|
|
28
|
+
catch (_a) {
|
|
29
|
+
/* try the next extractor */
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
function createAttachmentTools(options) {
|
|
35
|
+
const { client, workspaceDir } = options;
|
|
36
|
+
const downloadAttachment = (0, ai_1.tool)({
|
|
37
|
+
description: 'Download one attachment by key into data/attachments/<trackingNumber>/<name> and, for PDFs, extract its text to data/text/<trackingNumber>/<name>.txt. Use when search_documents has no text for a document (large or scanned PDFs) or you need the original file. Returns paths and sizes, never the content.',
|
|
38
|
+
inputSchema: zod_1.z.object({
|
|
39
|
+
key: zod_1.z.string().min(1).max(2000),
|
|
40
|
+
trackingNumber: zod_1.z.string().max(100).optional(),
|
|
41
|
+
name: zod_1.z.string().max(300).optional(),
|
|
42
|
+
extractText: zod_1.z.boolean().optional().describe('default true for PDFs'),
|
|
43
|
+
}),
|
|
44
|
+
execute: async (input) => {
|
|
45
|
+
var _a, _b, _c;
|
|
46
|
+
const bytes = await client.downloadAttachment(input.key);
|
|
47
|
+
const folder = (0, shared_1.safeName)((_a = input.trackingNumber) !== null && _a !== void 0 ? _a : 'misc');
|
|
48
|
+
const fileName = (0, shared_1.safeName)((_c = (_b = input.name) !== null && _b !== void 0 ? _b : input.key.split('/').pop()) !== null && _c !== void 0 ? _c : 'attachment');
|
|
49
|
+
const filePath = `data/attachments/${folder}/${fileName}`;
|
|
50
|
+
const written = await (0, shared_1.writeWorkspaceFile)(workspaceDir, filePath, bytes);
|
|
51
|
+
const isPdf = /\.pdf$/i.test(fileName) || bytes.subarray(0, 4).toString() === '%PDF';
|
|
52
|
+
let textPath;
|
|
53
|
+
let textChars = 0;
|
|
54
|
+
if (isPdf && input.extractText !== false) {
|
|
55
|
+
textPath = `data/text/${folder}/${fileName.replace(/\.pdf$/i, '')}.txt`;
|
|
56
|
+
const absoluteText = node_path_1.default.resolve(workspaceDir, textPath);
|
|
57
|
+
await node_fs_1.promises.mkdir(node_path_1.default.dirname(absoluteText), { recursive: true });
|
|
58
|
+
textChars = await extractPdfText(node_path_1.default.resolve(workspaceDir, filePath), absoluteText);
|
|
59
|
+
if (textChars === 0)
|
|
60
|
+
textPath = undefined;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
path: written.path,
|
|
64
|
+
bytes: written.bytes,
|
|
65
|
+
textPath,
|
|
66
|
+
textChars,
|
|
67
|
+
note: isPdf && textChars === 0 ? 'No extractable text (scanned or protected PDF) — record it as unreadable in findings.' : undefined,
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
const readText = (0, ai_1.tool)({
|
|
72
|
+
description: 'Read a slice of an extracted text file in the workspace (data/text/…). Prefer run_command with rg/grep to locate the passage first, then read only the lines around it. Hard cap per call keeps the conversation small.',
|
|
73
|
+
inputSchema: zod_1.z.object({
|
|
74
|
+
path: zod_1.z.string().min(1).max(500),
|
|
75
|
+
startLine: zod_1.z.number().int().min(1).optional(),
|
|
76
|
+
endLine: zod_1.z.number().int().min(1).optional(),
|
|
77
|
+
}),
|
|
78
|
+
execute: async (input) => {
|
|
79
|
+
var _a, _b;
|
|
80
|
+
const target = node_path_1.default.resolve(workspaceDir, input.path);
|
|
81
|
+
if (!target.startsWith(node_path_1.default.resolve(workspaceDir) + node_path_1.default.sep))
|
|
82
|
+
throw new Error('path escapes the workspace');
|
|
83
|
+
const content = await node_fs_1.promises.readFile(target, 'utf8');
|
|
84
|
+
const lines = content.split('\n');
|
|
85
|
+
const start = Math.max(1, (_a = input.startLine) !== null && _a !== void 0 ? _a : 1);
|
|
86
|
+
const end = Math.min(lines.length, (_b = input.endLine) !== null && _b !== void 0 ? _b : start + 80);
|
|
87
|
+
const slice = lines.slice(start - 1, end).join('\n');
|
|
88
|
+
return {
|
|
89
|
+
path: input.path,
|
|
90
|
+
totalLines: lines.length,
|
|
91
|
+
startLine: start,
|
|
92
|
+
endLine: end,
|
|
93
|
+
text: slice.length > MAX_INLINE_TEXT_CHARS ? `${slice.slice(0, MAX_INLINE_TEXT_CHARS)}…[truncated — narrow the line range]` : slice,
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
return { download_attachment: downloadAttachment, read_text: readText };
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=attachment-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-tools.js","sourceRoot":"","sources":["../../../src/research/filingramp/attachment-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-search-tool.d.ts","sourceRoot":"","sources":["../../../src/research/filingramp/document-search-tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,IAAI,CAAA;AAKpC,OAAO,EAAiE,KAAK,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAKrH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CA2K9E"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDocumentSearchTool = createDocumentSearchTool;
|
|
4
|
+
// Document indexes have different filter vocabularies. Search each group independently so
|
|
5
|
+
// an unavailable index does not discard successful results from the other groups.
|
|
6
|
+
const ai_1 = require("ai");
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
const filingramp_client_1 = require("../filingramp-client");
|
|
9
|
+
const filingramp_contract_1 = require("../filingramp-contract");
|
|
10
|
+
const scope_1 = require("../scope");
|
|
11
|
+
const shared_1 = require("./shared");
|
|
12
|
+
const MAX_DOC_HITS = 100;
|
|
13
|
+
const MAX_HIGHLIGHTS = 3;
|
|
14
|
+
function createDocumentSearchTool(options) {
|
|
15
|
+
const { client, workspaceDir, scope } = options;
|
|
16
|
+
const industryData = client.industryData;
|
|
17
|
+
// Document search matches typeOfInsurance exactly, while the scope holds names or codes
|
|
18
|
+
// ("Homeowners", "04.0"); the filings summary says which exact labels those stand for in this
|
|
19
|
+
// account. Resolved once per process.
|
|
20
|
+
let lineLabels;
|
|
21
|
+
const scopeLineLabels = (searchType) => {
|
|
22
|
+
var _a;
|
|
23
|
+
if (!((_a = scope === null || scope === void 0 ? void 0 : scope.lines) === null || _a === void 0 ? void 0 : _a.length))
|
|
24
|
+
return Promise.resolve({ lines: [], subLines: [] });
|
|
25
|
+
lineLabels !== null && lineLabels !== void 0 ? lineLabels : (lineLabels = client
|
|
26
|
+
.request('/v2/search/filings/summary', {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
body: { filters: (0, scope_1.scopeFilingsFilters)(scope), groupBy: ['typeOfInsurance', 'subTypeOfInsurance'], limit: 1000, searchType },
|
|
29
|
+
})
|
|
30
|
+
.then((payload) => {
|
|
31
|
+
var _a;
|
|
32
|
+
const keys = ((_a = payload === null || payload === void 0 ? void 0 : payload.items) !== null && _a !== void 0 ? _a : []).map((row) => { var _a; return (_a = row.key) !== null && _a !== void 0 ? _a : {}; });
|
|
33
|
+
const labels = (field) => [...new Set(keys.map((key) => key[field]).filter((value) => typeof value === 'string' && value.length > 0))];
|
|
34
|
+
return { lines: labels('typeOfInsurance'), subLines: labels('subTypeOfInsurance') };
|
|
35
|
+
})
|
|
36
|
+
.catch((error) => {
|
|
37
|
+
lineLabels = undefined;
|
|
38
|
+
throw error;
|
|
39
|
+
}));
|
|
40
|
+
return lineLabels;
|
|
41
|
+
};
|
|
42
|
+
const requestDocuments = async (body) => {
|
|
43
|
+
try {
|
|
44
|
+
// ramp-web-api mounts the OpenSearch router at /content-search (POST /global).
|
|
45
|
+
const payload = await client.request('/v1/content-search/global', {
|
|
46
|
+
method: 'POST',
|
|
47
|
+
body,
|
|
48
|
+
timeoutMs: 120000,
|
|
49
|
+
});
|
|
50
|
+
return Array.isArray(payload) ? payload : (0, shared_1.asRecordList)(payload);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (error instanceof filingramp_client_1.FilingRampHttpError && error.status === 403) {
|
|
54
|
+
throw new Error(`Document search is not enabled for this account (FilingRamp "searchV2" feature): ${error.message}. Report it in the findings; filing metadata tools still work.`);
|
|
55
|
+
}
|
|
56
|
+
if (error instanceof filingramp_client_1.FilingRampHttpError && error.status === 400 && /must be|is not a valid|not allowed|required|invalid/i.test(error.message)) {
|
|
57
|
+
throw new Error(`Document search rejected the request: ${error.message}. Fix the filter (the tool description lists the fields and operators) and call again.`);
|
|
58
|
+
}
|
|
59
|
+
// FilingRamp hides OpenSearch failures (e.g. a missing document index) behind a generic
|
|
60
|
+
// "An error occurred": rephrasing the query will not help, falling back will.
|
|
61
|
+
if (error instanceof filingramp_client_1.FilingRampHttpError && (error.status === 400 || error.status >= 500)) {
|
|
62
|
+
throw new Error(`Document search is unavailable (FilingRamp ${error.status}: ${error.message}). Do not retry it with other wording. ` +
|
|
63
|
+
'Find candidate filings with search_filings / summarize_filings, then read their documents with get_filing and download_attachment (extracted text lands in the workspace for grep). Note the gap in the findings.');
|
|
64
|
+
}
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
return (0, ai_1.tool)({
|
|
69
|
+
description: 'Full-text or semantic search INSIDE documents (extracted PDF text of forms, rate and supporting documents, objection letters, responses, library forms and rates, circulars). This is how you find which filings contain a clause. Returns hits with highlights; set saveText=true to write each hit\'s full extracted text to data/text/<trackingNumber>/<name>.txt for grep and analysis — never read whole documents into the chat. Filters use OpenSearch\'s vocabulary: states, typeOfInsurance, subTypeOfInsurance, filingTypes, statuses, resourceTypes, productIds, projectIds take exact string arrays ("in"); authors, contacts, reviewers match a substring ("cn"); dateSubmitted, createdAt, updatedAt take one date (eq/gt/gte/lt/lte). The session scope is added for you. Library and circular indexes accept only their own fields (resourceTypes, formNumbers, editionDates, circularNumbers…), so neither the scope nor filing filters apply to them; the result reports what was not applied.',
|
|
70
|
+
inputSchema: zod_1.z.object({
|
|
71
|
+
query: zod_1.z.string().min(1).max(2000),
|
|
72
|
+
searchType: zod_1.z.enum(['KEYWORD', 'SEMANTIC', 'HYBRID']).optional().describe('KEYWORD for exact phrases (default), SEMANTIC for meaning, HYBRID for both'),
|
|
73
|
+
indexes: zod_1.z
|
|
74
|
+
.array(zod_1.z.enum(filingramp_contract_1.DOCUMENT_INDEXES))
|
|
75
|
+
.min(1)
|
|
76
|
+
.optional()
|
|
77
|
+
.describe('Which document collections; default ["filings"]. A collection this deployment has no index for fails on its own (requests[].failed) while the others still answer.'),
|
|
78
|
+
matchMode: zod_1.z.enum(['EXACT', 'ANY_WORD', 'PROXIMITY', 'PREFIX', 'FUZZY', 'BOOLEAN']).optional(),
|
|
79
|
+
filters: zod_1.z.array(shared_1.filterInputSchema).max(20).optional().describe('See the tool description for fields and operators'),
|
|
80
|
+
scope: zod_1.z.enum(['ACCOUNT', 'INDUSTRY']).optional(),
|
|
81
|
+
limit: zod_1.z.number().int().min(1).max(1000).optional(),
|
|
82
|
+
saveText: zod_1.z.boolean().optional(),
|
|
83
|
+
}),
|
|
84
|
+
execute: async (input) => {
|
|
85
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
|
|
86
|
+
const searchType = (_a = input.searchType) !== null && _a !== void 0 ? _a : 'KEYWORD';
|
|
87
|
+
const suffix = searchType === 'KEYWORD' ? 'keyword_index' : 'semantic_index';
|
|
88
|
+
const matchMode = (_b = input.matchMode) !== null && _b !== void 0 ? _b : (searchType === 'KEYWORD' ? 'EXACT' : 'ANY_WORD');
|
|
89
|
+
const scopeValue = (0, scope_1.resolveSearchType)(scope, industryData, input.scope);
|
|
90
|
+
const labels = await scopeLineLabels(scopeValue);
|
|
91
|
+
const requests = [];
|
|
92
|
+
const hits = [];
|
|
93
|
+
const failures = [];
|
|
94
|
+
let answered = 0;
|
|
95
|
+
// One request per index group: each group has its own filter vocabulary, and one filter
|
|
96
|
+
// outside it fails the whole request. A group whose indexes an environment does not have
|
|
97
|
+
// (circulars on most deployments) fails alone; the other groups still answer.
|
|
98
|
+
for (const group of (0, filingramp_contract_1.documentIndexGroups)((_c = input.indexes) !== null && _c !== void 0 ? _c : ['filings'])) {
|
|
99
|
+
const own = (0, filingramp_contract_1.normalizeDocumentFilters)(input.filters, group);
|
|
100
|
+
const scoped = (0, scope_1.scopeDocumentFilters)(scope, own.filters, group.fields, labels);
|
|
101
|
+
const entry = { indexes: group.indexes, filters: scoped.filters, unscoped: scoped.unscoped, ignoredFilters: own.ignored };
|
|
102
|
+
if (scoped.emptyByLines) {
|
|
103
|
+
requests.push({ ...entry, skipped: "no filing in scope carries the scope's lines, so no document in these indexes can match" });
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const payload = await requestDocuments({
|
|
108
|
+
searchType,
|
|
109
|
+
searchText: input.query,
|
|
110
|
+
matchMode,
|
|
111
|
+
indexNames: group.indexes.map((index) => `${index}_${suffix}`),
|
|
112
|
+
scope: scopeValue,
|
|
113
|
+
limit: (_d = input.limit) !== null && _d !== void 0 ? _d : 50,
|
|
114
|
+
filters: scoped.filters,
|
|
115
|
+
});
|
|
116
|
+
hits.push(...payload);
|
|
117
|
+
requests.push(entry);
|
|
118
|
+
answered += 1;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const failure = error instanceof Error ? error : new Error(String(error));
|
|
122
|
+
failures.push(failure);
|
|
123
|
+
requests.push({ ...entry, failed: failure.message });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Every group failed: the first failure carries the right instruction (fix the filter,
|
|
127
|
+
// or fall back to downloads). A partial failure is reported per group instead.
|
|
128
|
+
if (answered === 0 && failures.length > 0)
|
|
129
|
+
throw failures[0];
|
|
130
|
+
hits.sort((a, b) => { var _a, _b; return Number((_a = b._score) !== null && _a !== void 0 ? _a : 0) - Number((_b = a._score) !== null && _b !== void 0 ? _b : 0); });
|
|
131
|
+
const results = [];
|
|
132
|
+
for (const hit of hits.slice(0, MAX_DOC_HITS)) {
|
|
133
|
+
const source = ((_e = hit._source) !== null && _e !== void 0 ? _e : {});
|
|
134
|
+
const highlight = ((_f = hit.highlight) !== null && _f !== void 0 ? _f : {});
|
|
135
|
+
const fragments = Object.values(highlight).flat().slice(0, MAX_HIGHLIGHTS);
|
|
136
|
+
// An indexed document is the filing's metadata at the top level plus one sub-object
|
|
137
|
+
// for the document itself (form, rate, supporting, attachment, disposition …) that
|
|
138
|
+
// carries attachmentKey / attachmentText; objection letters keep their text top-level.
|
|
139
|
+
const document = Object.values(source).find((value) => !!value && typeof value === 'object' && !Array.isArray(value) && ('attachmentText' in value || 'attachmentKey' in value));
|
|
140
|
+
const textValue = (_h = (_g = document === null || document === void 0 ? void 0 : document.attachmentText) !== null && _g !== void 0 ? _g : source.attachmentText) !== null && _h !== void 0 ? _h : source.allMetadataText;
|
|
141
|
+
const text = typeof textValue === 'string' && textValue.length > 0 ? textValue : undefined;
|
|
142
|
+
const keyValue = (_k = (_j = document === null || document === void 0 ? void 0 : document.attachmentKey) !== null && _j !== void 0 ? _j : source.attachmentKey) !== null && _k !== void 0 ? _k : source.key;
|
|
143
|
+
const attachmentKey = typeof keyValue === 'string' ? keyValue : undefined;
|
|
144
|
+
const trackingNumber = String((_p = (_o = (_m = (_l = source.trackingNumber) !== null && _l !== void 0 ? _l : source.filingTrackingNumber) !== null && _m !== void 0 ? _m : source.resourceId) !== null && _o !== void 0 ? _o : hit._id) !== null && _p !== void 0 ? _p : 'unknown');
|
|
145
|
+
const name = String((_w = (_v = (_u = (_t = (_s = (_r = (_q = (attachmentKey ? decodeURIComponent(attachmentKey.slice(attachmentKey.lastIndexOf('/') + 1)) : undefined)) !== null && _q !== void 0 ? _q : document === null || document === void 0 ? void 0 : document.formNumber) !== null && _r !== void 0 ? _r : source.name) !== null && _s !== void 0 ? _s : source.attachmentName) !== null && _t !== void 0 ? _t : source.formNumber) !== null && _u !== void 0 ? _u : source.title) !== null && _v !== void 0 ? _v : hit._id) !== null && _w !== void 0 ? _w : 'document');
|
|
146
|
+
let textPath;
|
|
147
|
+
if (input.saveText && text) {
|
|
148
|
+
textPath = `data/text/${(0, shared_1.safeName)(trackingNumber)}/${(0, shared_1.safeName)(name)}.txt`;
|
|
149
|
+
await (0, shared_1.writeWorkspaceFile)(workspaceDir, textPath, text);
|
|
150
|
+
}
|
|
151
|
+
results.push({
|
|
152
|
+
id: hit._id,
|
|
153
|
+
index: hit._index,
|
|
154
|
+
score: hit._score,
|
|
155
|
+
resourceType: source.resourceType,
|
|
156
|
+
filingId: source.filingId,
|
|
157
|
+
trackingNumber,
|
|
158
|
+
state: source.state,
|
|
159
|
+
filingType: source.filingType,
|
|
160
|
+
dateSubmitted: source.dateSubmitted,
|
|
161
|
+
name,
|
|
162
|
+
formNumber: (_x = document === null || document === void 0 ? void 0 : document.formNumber) !== null && _x !== void 0 ? _x : source.formNumber,
|
|
163
|
+
attachmentKey,
|
|
164
|
+
textChars: (_y = text === null || text === void 0 ? void 0 : text.length) !== null && _y !== void 0 ? _y : 0,
|
|
165
|
+
textPath,
|
|
166
|
+
highlights: fragments.map((fragment) => fragment.replace(/<\/?em>/g, '**').slice(0, 300)),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return { hits: results, total: hits.length, truncated: hits.length > MAX_DOC_HITS, requests };
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=document-search-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-search-tool.js","sourceRoot":"","sources":["../../../src/research/filingramp/document-search-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filing-detail-tool.d.ts","sourceRoot":"","sources":["../../../src/research/filingramp/filing-detail-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,IAAI,CAAA;AAGpC,OAAO,EAAoC,KAAK,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAuCxF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAmE5E"}
|