@mantra-ai/core 0.4.14 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/ai/claude/client.d.ts +24 -0
  2. package/dist/ai/claude/client.d.ts.map +1 -0
  3. package/dist/ai/claude/client.js +71 -0
  4. package/dist/ai/claude/client.js.map +1 -0
  5. package/dist/ai/{openai → claude}/generate.d.ts +6 -3
  6. package/dist/ai/claude/generate.d.ts.map +1 -0
  7. package/dist/ai/claude/generate.js +188 -0
  8. package/dist/ai/claude/generate.js.map +1 -0
  9. package/dist/ai/claude/index.d.ts +3 -0
  10. package/dist/ai/claude/index.d.ts.map +1 -0
  11. package/dist/ai/claude/index.js +3 -0
  12. package/dist/ai/claude/index.js.map +1 -0
  13. package/dist/ai/google/types.js +1 -1
  14. package/dist/ai/google/types.js.map +1 -1
  15. package/dist/ai/index.d.ts +1 -1
  16. package/dist/ai/index.js +1 -1
  17. package/dist/ai/{openai/types.d.ts → types.d.ts} +4 -24
  18. package/dist/ai/types.d.ts.map +1 -0
  19. package/dist/ai/{openai/types.js → types.js} +2 -4
  20. package/dist/ai/types.js.map +1 -0
  21. package/dist/analysis/extract-findings.d.ts +1 -1
  22. package/dist/analysis/extract-findings.d.ts.map +1 -1
  23. package/dist/analysis/extract-findings.js +2 -2
  24. package/dist/analysis/generate-hypotheses.d.ts +1 -1
  25. package/dist/analysis/generate-hypotheses.d.ts.map +1 -1
  26. package/dist/analysis/generate-hypotheses.js +2 -2
  27. package/dist/analysis/prompts.d.ts +1 -1
  28. package/dist/analysis/prompts.d.ts.map +1 -1
  29. package/dist/works/adapters/crossref.d.ts +2 -0
  30. package/dist/works/adapters/crossref.d.ts.map +1 -1
  31. package/dist/works/adapters/crossref.js +9 -1
  32. package/dist/works/adapters/crossref.js.map +1 -1
  33. package/dist/works/id/resolveIds/index.d.ts.map +1 -1
  34. package/dist/works/id/resolveIds/index.js +12 -1
  35. package/dist/works/id/resolveIds/index.js.map +1 -1
  36. package/dist/works/types.d.ts +6 -0
  37. package/dist/works/types.d.ts.map +1 -1
  38. package/dist/works/util/paper-metadata.d.ts +2 -1
  39. package/dist/works/util/paper-metadata.d.ts.map +1 -1
  40. package/dist/works/util/paper-metadata.js +2 -1
  41. package/dist/works/util/paper-metadata.js.map +1 -1
  42. package/dist/works/util/source.d.ts +1 -0
  43. package/dist/works/util/source.d.ts.map +1 -1
  44. package/dist/works/util/source.js +4 -1
  45. package/dist/works/util/source.js.map +1 -1
  46. package/package.json +9 -9
  47. package/dist/ai/openai/client.d.ts +0 -22
  48. package/dist/ai/openai/client.d.ts.map +0 -1
  49. package/dist/ai/openai/client.js +0 -49
  50. package/dist/ai/openai/client.js.map +0 -1
  51. package/dist/ai/openai/generate.d.ts.map +0 -1
  52. package/dist/ai/openai/generate.js +0 -178
  53. package/dist/ai/openai/generate.js.map +0 -1
  54. package/dist/ai/openai/index.d.ts +0 -4
  55. package/dist/ai/openai/index.d.ts.map +0 -1
  56. package/dist/ai/openai/index.js +0 -4
  57. package/dist/ai/openai/index.js.map +0 -1
  58. package/dist/ai/openai/types.d.ts.map +0 -1
  59. package/dist/ai/openai/types.js.map +0 -1
@@ -0,0 +1,24 @@
1
+ export interface ClaudeCliOptions {
2
+ model?: string;
3
+ maxTurns?: number;
4
+ /** Timeout in ms. Default: 5 minutes. */
5
+ timeout?: number;
6
+ }
7
+ export type ClaudeCliResult = {
8
+ ok: true;
9
+ text: string;
10
+ costUsd?: number;
11
+ durationMs?: number;
12
+ } | {
13
+ ok: false;
14
+ error: string;
15
+ code?: string;
16
+ };
17
+ /**
18
+ * Run the `claude` CLI in non-interactive print mode (`-p`).
19
+ *
20
+ * Expects `claude` to be on PATH. Uses `--output-format json` to get a
21
+ * structured envelope, then extracts the `.result` text.
22
+ */
23
+ export declare function runClaudeCli(prompt: string, opts?: ClaudeCliOptions): Promise<ClaudeCliResult>;
24
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/ai/claude/client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,eAAe,CAAC,CAsE1B"}
@@ -0,0 +1,71 @@
1
+ import { spawn } from "node:child_process";
2
+ /**
3
+ * Run the `claude` CLI in non-interactive print mode (`-p`).
4
+ *
5
+ * Expects `claude` to be on PATH. Uses `--output-format json` to get a
6
+ * structured envelope, then extracts the `.result` text.
7
+ */
8
+ export async function runClaudeCli(prompt, opts) {
9
+ const model = opts?.model ?? "sonnet";
10
+ const timeout = opts?.timeout ?? 300_000;
11
+ const args = [
12
+ "-p", prompt,
13
+ "--output-format", "json",
14
+ "--model", model,
15
+ "--max-turns", String(opts?.maxTurns ?? 1),
16
+ ];
17
+ return new Promise((resolve) => {
18
+ let stdout = "";
19
+ let stderr = "";
20
+ const child = spawn("claude", args, {
21
+ stdio: ["ignore", "pipe", "pipe"],
22
+ });
23
+ const timer = setTimeout(() => {
24
+ child.kill("SIGTERM");
25
+ resolve({ ok: false, error: "Claude CLI timed out", code: "timeout" });
26
+ }, timeout);
27
+ child.stdout.on("data", (d) => { stdout += d.toString(); });
28
+ child.stderr.on("data", (d) => { stderr += d.toString(); });
29
+ child.on("error", (err) => {
30
+ clearTimeout(timer);
31
+ resolve({
32
+ ok: false,
33
+ error: `Failed to spawn claude CLI: ${err.message}`,
34
+ code: "spawn_error",
35
+ });
36
+ });
37
+ child.on("close", (code) => {
38
+ clearTimeout(timer);
39
+ if (!stdout.trim()) {
40
+ resolve({
41
+ ok: false,
42
+ error: stderr || `claude exited with code ${code}`,
43
+ code: "empty_output",
44
+ });
45
+ return;
46
+ }
47
+ try {
48
+ const envelope = JSON.parse(stdout);
49
+ if (envelope.is_error || envelope.subtype === "error") {
50
+ resolve({
51
+ ok: false,
52
+ error: envelope.result || "Claude returned an error",
53
+ code: "claude_error",
54
+ });
55
+ return;
56
+ }
57
+ resolve({
58
+ ok: true,
59
+ text: envelope.result ?? "",
60
+ costUsd: envelope.cost_usd,
61
+ durationMs: envelope.duration_ms,
62
+ });
63
+ }
64
+ catch {
65
+ // Fallback: treat raw stdout as the response text
66
+ resolve({ ok: true, text: stdout.trim() });
67
+ }
68
+ });
69
+ });
70
+ }
71
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/ai/claude/client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { type ChatMessage, type LLMCallOptions, type LLMResult, type RetryOptions } from "./types";
2
+ import { type ChatMessage, type LLMCallOptions, type LLMResult, type RetryOptions } from "../types";
3
3
  export interface GenerateWithSchemaArgs<T> {
4
4
  messages: ChatMessage[];
5
5
  schema: z.ZodType<T>;
@@ -7,8 +7,11 @@ export interface GenerateWithSchemaArgs<T> {
7
7
  retry?: RetryOptions;
8
8
  }
9
9
  /**
10
- * Calls the OpenAI chat completions API, enforces JSON-only output, validates
11
- * it against a provided zod schema, and retries with targeted feedback when validation fails.
10
+ * Generate a validated JSON response from the Claude CLI.
11
+ *
12
+ * Mirrors the Google `generateWithSchema` contract: sends the prompt
13
+ * to Claude via `claude -p`, extracts JSON from the response, validates it
14
+ * against the Zod schema, and retries with targeted correction feedback.
12
15
  */
13
16
  export declare function generateWithSchema<T>(args: GenerateWithSchemaArgs<T>): Promise<LLMResult<T>>;
14
17
  //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/ai/claude/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,YAAY,EAGlB,MAAM,UAAU,CAAC;AAyClB,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AA+BD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CA+HlG"}
@@ -0,0 +1,188 @@
1
+ import { z } from "zod";
2
+ import { runClaudeCli } from "./client";
3
+ import { ChatMessagesSchema, describeZodObjectSchema, } from "../types";
4
+ const JSON_INSTRUCTIONS = [
5
+ "You are a precise JSON generator.",
6
+ "Respond with strictly valid JSON only.",
7
+ "No markdown, no code fences, no comments, no extra text.",
8
+ "If a field is optional, omit it entirely rather than using null.",
9
+ "Do not include trailing commas.",
10
+ ].join(" ");
11
+ function extractFirstJson(text) {
12
+ const trimmed = text.trim();
13
+ try {
14
+ JSON.parse(trimmed);
15
+ return { ok: true, jsonText: trimmed };
16
+ }
17
+ catch { }
18
+ const unfenced = trimmed.replace(/^```(json)?/i, "").replace(/```$/i, "").trim();
19
+ try {
20
+ JSON.parse(unfenced);
21
+ return { ok: true, jsonText: unfenced };
22
+ }
23
+ catch { }
24
+ const objStart = unfenced.indexOf("{");
25
+ const arrStart = unfenced.indexOf("[");
26
+ const start = objStart === -1 ? arrStart : arrStart === -1 ? objStart : Math.min(objStart, arrStart);
27
+ if (start === -1)
28
+ return { ok: false };
29
+ for (let end = unfenced.length; end > start; end--) {
30
+ const candidate = unfenced.slice(start, end).trim();
31
+ try {
32
+ JSON.parse(candidate);
33
+ return { ok: true, jsonText: candidate };
34
+ }
35
+ catch { }
36
+ }
37
+ return { ok: false };
38
+ }
39
+ function sleep(ms) {
40
+ return new Promise((res) => setTimeout(res, ms));
41
+ }
42
+ /**
43
+ * Flatten chat messages into a single prompt string for the Claude CLI.
44
+ *
45
+ * Since `-p` takes a single prompt, we combine the JSON preamble,
46
+ * system instructions, and user content into one string.
47
+ */
48
+ function messagesToPrompt(messages, schemaDescription) {
49
+ const parts = [];
50
+ parts.push(JSON_INSTRUCTIONS);
51
+ if (schemaDescription) {
52
+ parts.push(`Output shape: { ${schemaDescription} }`);
53
+ }
54
+ parts.push("");
55
+ for (const msg of messages) {
56
+ if (msg.role === "system") {
57
+ parts.push("## Instructions\n");
58
+ parts.push(msg.content);
59
+ }
60
+ else if (msg.role === "user") {
61
+ parts.push("\n## Input\n");
62
+ parts.push(msg.content);
63
+ }
64
+ parts.push("");
65
+ }
66
+ return parts.join("\n");
67
+ }
68
+ /**
69
+ * Generate a validated JSON response from the Claude CLI.
70
+ *
71
+ * Mirrors the Google `generateWithSchema` contract: sends the prompt
72
+ * to Claude via `claude -p`, extracts JSON from the response, validates it
73
+ * against the Zod schema, and retries with targeted correction feedback.
74
+ */
75
+ export async function generateWithSchema(args) {
76
+ const parsed = ChatMessagesSchema.safeParse(args.messages);
77
+ if (!parsed.success) {
78
+ return {
79
+ ok: false,
80
+ error: { code: "invalid_output", message: "Invalid messages", details: parsed.error.flatten() },
81
+ attempts: 0,
82
+ };
83
+ }
84
+ const { schema } = args;
85
+ const opts = args.options ?? {};
86
+ const retry = args.retry ?? {};
87
+ const maxAttempts = Math.max(1, retry.maxAttempts ?? 2);
88
+ const delayMs = Math.max(0, retry.delayMs ?? 250);
89
+ const schemaDescription = describeZodObjectSchema(schema);
90
+ let attempts = 0;
91
+ let correctionContext = "";
92
+ while (attempts < maxAttempts) {
93
+ attempts++;
94
+ const prompt = messagesToPrompt(parsed.data, schemaDescription) + correctionContext;
95
+ const cliResult = await runClaudeCli(prompt, {
96
+ model: opts.model ?? "sonnet",
97
+ });
98
+ if (!cliResult.ok) {
99
+ if (attempts >= maxAttempts) {
100
+ return {
101
+ ok: false,
102
+ error: { code: "api_error", message: cliResult.error },
103
+ attempts,
104
+ };
105
+ }
106
+ await sleep(delayMs);
107
+ continue;
108
+ }
109
+ const rawText = cliResult.text.trim();
110
+ if (!rawText) {
111
+ if (attempts >= maxAttempts) {
112
+ return {
113
+ ok: false,
114
+ error: { code: "empty_content", message: "Empty response from Claude CLI" },
115
+ attempts,
116
+ };
117
+ }
118
+ await sleep(delayMs);
119
+ continue;
120
+ }
121
+ const extracted = extractFirstJson(rawText);
122
+ if (!extracted.ok) {
123
+ correctionContext = [
124
+ "\n\n---\n[CORRECTION NEEDED]",
125
+ "Your previous response did not contain valid JSON.",
126
+ "Return strictly valid JSON only, matching the required shape. No prose.",
127
+ ].join("\n");
128
+ if (attempts >= maxAttempts) {
129
+ return {
130
+ ok: false,
131
+ error: { code: "parse_error", message: "Could not extract JSON from response" },
132
+ attempts,
133
+ rawText,
134
+ };
135
+ }
136
+ await sleep(delayMs);
137
+ continue;
138
+ }
139
+ let parsedJson;
140
+ try {
141
+ parsedJson = JSON.parse(extracted.jsonText);
142
+ }
143
+ catch (err) {
144
+ correctionContext = [
145
+ "\n\n---\n[CORRECTION NEEDED]",
146
+ `JSON parsing error: ${err?.message || String(err)}`,
147
+ "Return corrected JSON only.",
148
+ ].join("\n");
149
+ if (attempts >= maxAttempts) {
150
+ return {
151
+ ok: false,
152
+ error: { code: "parse_error", message: err?.message || String(err) },
153
+ attempts,
154
+ rawText,
155
+ };
156
+ }
157
+ await sleep(delayMs);
158
+ continue;
159
+ }
160
+ const safe = schema.safeParse(parsedJson);
161
+ if (safe.success) {
162
+ return { ok: true, value: safe.data, rawText, attempts };
163
+ }
164
+ const flattened = safe.error.flatten();
165
+ const errorSummary = JSON.stringify(flattened, null, 2);
166
+ correctionContext = [
167
+ "\n\n---\n[CORRECTION NEEDED]",
168
+ "The JSON does not match the required schema.",
169
+ schemaDescription ? `Schema shape: { ${schemaDescription} }` : "",
170
+ `Validation errors: ${errorSummary}`,
171
+ "Return corrected JSON only. Do not include markdown or explanations.",
172
+ `Previous JSON to correct: ${extracted.jsonText}`,
173
+ ]
174
+ .filter(Boolean)
175
+ .join("\n");
176
+ if (attempts >= maxAttempts) {
177
+ return {
178
+ ok: false,
179
+ error: { code: "invalid_output", message: "Output did not satisfy schema", details: flattened },
180
+ attempts,
181
+ rawText,
182
+ };
183
+ }
184
+ await sleep(delayMs);
185
+ }
186
+ return { ok: false, error: { code: "api_error", message: "Unexpected end of control flow" }, attempts };
187
+ }
188
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/ai/claude/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAKL,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAElB,MAAM,iBAAiB,GAAG;IACxB,mCAAmC;IACnC,wCAAwC;IACxC,0DAA0D;IAC1D,kEAAkE;IAClE,iCAAiC;CAClC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjF,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrG,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACvC,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AASD;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,QAAuB,EAAE,iBAAyB;IAC1E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,IAAI,iBAAiB,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,mBAAmB,iBAAiB,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAI,IAA+B;IACzE,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;YAC/F,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAElD,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAE1D,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,iBAAiB,GAAG,EAAE,CAAC;IAE3B,OAAO,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC9B,QAAQ,EAAE,CAAC;QAEX,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;QAEpF,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YAClB,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;gBAC5B,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE;oBACtD,QAAQ;iBACT,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;gBAC5B,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,gCAAgC,EAAE;oBAC3E,QAAQ;iBACT,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YAClB,iBAAiB,GAAG;gBAClB,8BAA8B;gBAC9B,oDAAoD;gBACpD,yEAAyE;aAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;gBAC5B,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,sCAAsC,EAAE;oBAC/E,QAAQ;oBACR,OAAO;iBACR,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,UAAmB,CAAC;QACxB,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,iBAAiB,GAAG;gBAClB,8BAA8B;gBAC9B,uBAAuB,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;gBACpD,6BAA6B;aAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;gBAC5B,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;oBACpE,QAAQ;oBACR,OAAO;iBACR,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC3D,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxD,iBAAiB,GAAG;YAClB,8BAA8B;YAC9B,8CAA8C;YAC9C,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,iBAAiB,IAAI,CAAC,CAAC,CAAC,EAAE;YACjE,sBAAsB,YAAY,EAAE;YACpC,sEAAsE;YACtE,6BAA6B,SAAS,CAAC,QAAQ,EAAE;SAClD;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;YAC5B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,+BAA+B,EAAE,OAAO,EAAE,SAAS,EAAE;gBAC/F,QAAQ;gBACR,OAAO;aACR,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gCAAgC,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC1G,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./client";
2
+ export * from "./generate";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/claude/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./client";
2
+ export * from "./generate";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/claude/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
@@ -9,7 +9,7 @@ export const ChatMessageSchema = z.object({
9
9
  export const ChatMessagesSchema = z.array(ChatMessageSchema).min(1);
10
10
  // Simple reusable example schema
11
11
  export const SimpleSummarySchema = z.object({ summary: z.string().min(1) });
12
- // Mirrors the helper in OpenAI impl; kept local to avoid coupling
12
+ // Local copy of schema description helper to avoid coupling
13
13
  export function describeZodObjectSchema(schema) {
14
14
  const parts = [];
15
15
  const root = schema._def;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ai/google/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ai/google/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export * as OpenAI from "./openai";
2
1
  export * as Google from "./google";
2
+ export * as Claude from "./claude";
3
3
  //# sourceMappingURL=index.d.ts.map
package/dist/ai/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export * as OpenAI from "./openai";
2
1
  export * as Google from "./google";
2
+ export * as Claude from "./claude";
3
3
  //# sourceMappingURL=index.js.map
@@ -4,27 +4,6 @@ export interface ChatMessage {
4
4
  role: ChatRole;
5
5
  content: string;
6
6
  }
7
- export interface OpenAIChatChoice {
8
- index: number;
9
- message: {
10
- role: ChatRole;
11
- content?: string | null;
12
- };
13
- finish_reason?: string | null;
14
- }
15
- export interface OpenAIChatUsage {
16
- prompt_tokens?: number;
17
- completion_tokens?: number;
18
- total_tokens?: number;
19
- }
20
- export interface OpenAIChatResponse {
21
- id?: string;
22
- object?: string;
23
- created?: number;
24
- model?: string;
25
- choices: OpenAIChatChoice[];
26
- usage?: OpenAIChatUsage;
27
- }
28
7
  export interface LLMCallOptions {
29
8
  model?: string;
30
9
  temperature?: number;
@@ -41,18 +20,18 @@ export type LLMResult<T> = {
41
20
  value: T;
42
21
  rawText: string;
43
22
  attempts: number;
44
- usage?: OpenAIChatUsage;
23
+ usage?: Record<string, number>;
45
24
  } | {
46
25
  ok: false;
47
26
  error: {
48
- code: "missing_api_key" | "http_error" | "api_error" | "no_choices" | "empty_content" | "parse_error" | "invalid_output";
27
+ code: "missing_api_key" | "http_error" | "api_error" | "no_choices" | "no_text" | "empty_content" | "parse_error" | "invalid_output";
49
28
  message: string;
50
29
  details?: unknown;
51
30
  status?: number;
52
31
  };
53
32
  rawText?: string;
54
33
  attempts: number;
55
- usage?: OpenAIChatUsage;
34
+ usage?: Record<string, number>;
56
35
  };
57
36
  export declare const ChatMessageSchema: z.ZodObject<{
58
37
  role: z.ZodUnion<[z.ZodLiteral<"system">, z.ZodLiteral<"user">, z.ZodLiteral<"assistant">]>;
@@ -82,5 +61,6 @@ export declare const SimpleSummarySchema: z.ZodObject<{
82
61
  summary: string;
83
62
  }>;
84
63
  export type SimpleSummary = z.infer<typeof SimpleSummarySchema>;
64
+ /** Describe a zod object schema in plain English for LLM prompts. */
85
65
  export declare function describeZodObjectSchema(schema: z.ZodTypeAny): string;
86
66
  //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IACnB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE;QACL,IAAI,EACA,iBAAiB,GACjB,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,SAAS,GACT,eAAe,GACf,aAAa,GACb,gBAAgB,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAAC;AAEN,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;WAAoC,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAIhE,qEAAqE;AACrE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,MAAM,CAUpE"}
@@ -1,16 +1,14 @@
1
1
  import { z } from "zod";
2
- // Common zod schemas to validate inputs and allow reuse elsewhere
3
2
  export const ChatMessageSchema = z.object({
4
3
  role: z.union([z.literal("system"), z.literal("user"), z.literal("assistant")]),
5
4
  content: z.string().min(1),
6
5
  });
7
6
  export const ChatMessagesSchema = z.array(ChatMessageSchema).min(1);
8
- // A small, generic example schema people can reuse for quick tasks
9
7
  export const SimpleSummarySchema = z.object({
10
8
  summary: z.string().min(1),
11
9
  });
12
- // Helper to describe a zod object schema in plain English for the model
13
- // Focused on common primitives for clarity; not a full serializer.
10
+ // ── Schema description helpers ───────────────────────────────────────
11
+ /** Describe a zod object schema in plain English for LLM prompts. */
14
12
  export function describeZodObjectSchema(schema) {
15
13
  const parts = [];
16
14
  const root = schema._def;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { NormalizedDoc } from "../normalization/normalized-doc-schema";
2
- import type { LLMResult } from "../ai/openai/types";
2
+ import type { LLMResult } from "../ai/types";
3
3
  import { type PaperDigest } from "./schemas";
4
4
  export interface ExtractFindingsOptions {
5
5
  model?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"extract-findings.d.ts","sourceRoot":"","sources":["../../src/analysis/extract-findings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AA+BhE,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAgDjC"}
1
+ {"version":3,"file":"extract-findings.d.ts","sourceRoot":"","sources":["../../src/analysis/extract-findings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AA+BhE,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAgDjC"}
@@ -1,4 +1,4 @@
1
- import { generateWithSchema } from "../ai/openai/generate";
1
+ import { generateWithSchema } from "../ai/claude/generate";
2
2
  import { getBlocksByCategory } from "./block-filter";
3
3
  import { PaperDigestSchema } from "./schemas";
4
4
  import { buildExtractionPrompt } from "./prompts";
@@ -68,7 +68,7 @@ export async function extractFindings(doc, opts) {
68
68
  messages,
69
69
  schema: PaperDigestSchema,
70
70
  options: {
71
- model: opts?.model ?? "gpt-4o",
71
+ model: opts?.model ?? "sonnet",
72
72
  temperature: opts?.temperature ?? 0.1,
73
73
  maxOutputTokens: opts?.maxOutputTokens ?? 4096,
74
74
  },
@@ -1,4 +1,4 @@
1
- import type { LLMResult } from "../ai/openai/types";
1
+ import type { LLMResult } from "../ai/types";
2
2
  import { type HypothesisSet, type PaperDigest } from "./schemas";
3
3
  export interface GenerateHypothesesOptions {
4
4
  model?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"generate-hypotheses.d.ts","sourceRoot":"","sources":["../../src/analysis/generate-hypotheses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAGtF,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,EAAE,EACtB,IAAI,CAAC,EAAE,yBAAyB,GAC/B,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAgBnC"}
1
+ {"version":3,"file":"generate-hypotheses.d.ts","sourceRoot":"","sources":["../../src/analysis/generate-hypotheses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAGtF,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,EAAE,EACtB,IAAI,CAAC,EAAE,yBAAyB,GAC/B,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAgBnC"}
@@ -1,4 +1,4 @@
1
- import { generateWithSchema } from "../ai/openai/generate";
1
+ import { generateWithSchema } from "../ai/claude/generate";
2
2
  import { HypothesisSetSchema } from "./schemas";
3
3
  import { buildHypothesisPrompt } from "./prompts";
4
4
  /**
@@ -13,7 +13,7 @@ export async function generateHypotheses(digests, opts) {
13
13
  messages,
14
14
  schema: HypothesisSetSchema,
15
15
  options: {
16
- model: opts?.model ?? "gpt-4o",
16
+ model: opts?.model ?? "sonnet",
17
17
  temperature: opts?.temperature ?? 0.4,
18
18
  maxOutputTokens: opts?.maxOutputTokens ?? 8192,
19
19
  },
@@ -1,4 +1,4 @@
1
- import type { ChatMessage } from "../ai/openai/types";
1
+ import type { ChatMessage } from "../ai/types";
2
2
  import type { FilteredBlock } from "./block-filter";
3
3
  import type { PaperDigest } from "./schemas";
4
4
  interface PaperMetadata {
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/analysis/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7C,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EAAE,GACtB,WAAW,EAAE,CAsEf;AAID,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,SAAI,GACb,WAAW,EAAE,CAwEf"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/analysis/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7C,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EAAE,GACtB,WAAW,EAAE,CAsEf;AAID,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,SAAI,GACb,WAAW,EAAE,CAwEf"}
@@ -7,6 +7,7 @@ export declare function enrichFromCrossref(doi: string): Promise<{
7
7
  publisher: undefined;
8
8
  journal: undefined;
9
9
  year: undefined;
10
+ authorsJson?: undefined;
10
11
  };
11
12
  adapterError: {
12
13
  ok: false;
@@ -22,6 +23,7 @@ export declare function enrichFromCrossref(doi: string): Promise<{
22
23
  publisher: string | undefined;
23
24
  journal: string | undefined;
24
25
  year: number | undefined;
26
+ authorsJson: string | undefined;
25
27
  };
26
28
  adapterError: undefined;
27
29
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"crossref.d.ts","sourceRoot":"","sources":["../../../src/works/adapters/crossref.ts"],"names":[],"mappings":"AAKA,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CnD"}
1
+ {"version":3,"file":"crossref.d.ts","sourceRoot":"","sources":["../../../src/works/adapters/crossref.ts"],"names":[],"mappings":"AAKA,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDnD"}
@@ -33,10 +33,18 @@ export async function enrichFromCrossref(doi) {
33
33
  yearFrom(cr?.["published-online"]) ||
34
34
  yearFrom(cr?.created) ||
35
35
  undefined;
36
+ // Authors: serialize CrossRef author array as JSON for storage
37
+ const authorsJson = Array.isArray(cr?.author) && cr.author.length > 0
38
+ ? JSON.stringify(cr.author.map((a) => ({
39
+ ...(a.given ? { given: a.given } : {}),
40
+ ...(a.family ? { family: a.family } : {}),
41
+ ...(a.name ? { name: a.name } : {}),
42
+ })))
43
+ : undefined;
36
44
  return {
37
45
  crossref: cr,
38
46
  doi: crDoi,
39
- enriched: { license, landingUrl, publisher, journal, year },
47
+ enriched: { license, landingUrl, publisher, journal, year, authorsJson },
40
48
  adapterError: undefined,
41
49
  };
42
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"crossref.js","sourceRoot":"","sources":["../../../src/works/adapters/crossref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAClD,uFAAuF;IACvF,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAEjD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,GAAG;YACH,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YAClH,YAAY,EAAE,MAAM;SACrB,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACvB,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC;IAClD,MAAM,OAAO,GAAuB,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC;QAC9D,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,UAAU,GAAuB,EAAE,EAAE,GAAG,IAAI,SAAS,CAAC;IAC5D,MAAM,SAAS,GAAuB,EAAE,EAAE,SAAS,IAAI,SAAS,CAAC;IACjE,MAAM,OAAO,GACX,eAAe,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;QACxC,eAAe,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC;QAC9C,SAAS,CAAC;IAEZ,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAsB,EAAE;QAChD,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC,CAAC;IACF,MAAM,IAAI,GACR,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;QACjC,QAAQ,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC;QAClC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC;IAEZ,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,GAAG,EAAE,KAAK;QACV,QAAQ,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;QAC3D,YAAY,EAAE,SAAS;KACxB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"crossref.js","sourceRoot":"","sources":["../../../src/works/adapters/crossref.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/works/id/resolveIds/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,mBAAmB,EAEnB,WAAW,EAEZ,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA+LnE,6BAA6B;AAC7B,wBAAsB,UAAU,CAC9B,cAAc,EAAE,mBAAmB,EACnC,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IACL,MAAM,CAAC,EAAE,UAAU,GAAG;QAAE,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GACA,OAAO,CAAC;IAAE,WAAW,EAAE,WAAW,CAAA;CAAE,CAAC,CA+avC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/works/id/resolveIds/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,mBAAmB,EAEnB,WAAW,EAEZ,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA+LnE,6BAA6B;AAC7B,wBAAsB,UAAU,CAC9B,cAAc,EAAE,mBAAmB,EACnC,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IACL,MAAM,CAAC,EAAE,UAAU,GAAG;QAAE,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GACA,OAAO,CAAC;IAAE,WAAW,EAAE,WAAW,CAAA;CAAE,CAAC,CA2bvC"}