@jterrazz/intelligence 2.0.0 → 3.0.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.
- package/README.md +56 -268
- package/dist/index.cjs +656 -2017
- package/dist/index.d.ts +5 -15
- package/dist/index.js +5 -33
- package/dist/index.js.map +1 -1
- package/dist/middleware/__tests__/logging.middleware.test.js +390 -0
- package/dist/middleware/__tests__/logging.middleware.test.js.map +1 -0
- package/dist/middleware/logging.middleware.d.ts +21 -0
- package/dist/middleware/logging.middleware.js +296 -0
- package/dist/middleware/logging.middleware.js.map +1 -0
- package/dist/parsing/__tests__/create-schema-prompt.test.js +53 -0
- package/dist/parsing/__tests__/create-schema-prompt.test.js.map +1 -0
- package/dist/parsing/__tests__/parse-object.test.d.ts +1 -0
- package/dist/parsing/__tests__/parse-object.test.js +193 -0
- package/dist/parsing/__tests__/parse-object.test.js.map +1 -0
- package/dist/parsing/__tests__/parse-text.test.d.ts +1 -0
- package/dist/parsing/__tests__/parse-text.test.js +159 -0
- package/dist/parsing/__tests__/parse-text.test.js.map +1 -0
- package/dist/parsing/create-schema-prompt.d.ts +28 -0
- package/dist/parsing/create-schema-prompt.js +42 -0
- package/dist/parsing/create-schema-prompt.js.map +1 -0
- package/dist/parsing/parse-object.d.ts +33 -0
- package/dist/parsing/parse-object.js +360 -0
- package/dist/parsing/parse-object.js.map +1 -0
- package/dist/parsing/parse-text.d.ts +14 -0
- package/dist/parsing/parse-text.js +80 -0
- package/dist/parsing/parse-text.js.map +1 -0
- package/dist/providers/openrouter.provider.d.ts +36 -0
- package/dist/providers/openrouter.provider.js +58 -0
- package/dist/providers/openrouter.provider.js.map +1 -0
- package/package.json +14 -15
- package/dist/adapters/agents/chat-agent.adapter.d.ts +0 -27
- package/dist/adapters/agents/chat-agent.adapter.js +0 -356
- package/dist/adapters/agents/chat-agent.adapter.js.map +0 -1
- package/dist/adapters/agents/resilient-agent.adapter.d.ts +0 -20
- package/dist/adapters/agents/resilient-agent.adapter.js +0 -263
- package/dist/adapters/agents/resilient-agent.adapter.js.map +0 -1
- package/dist/adapters/agents/tool-agent.adapter.d.ts +0 -30
- package/dist/adapters/agents/tool-agent.adapter.js +0 -400
- package/dist/adapters/agents/tool-agent.adapter.js.map +0 -1
- package/dist/adapters/models/openrouter-model.adapter.d.ts +0 -23
- package/dist/adapters/models/openrouter-model.adapter.js +0 -148
- package/dist/adapters/models/openrouter-model.adapter.js.map +0 -1
- package/dist/adapters/prompts/__tests__/__snapshots__/presets.test.ts.snap +0 -120
- package/dist/adapters/prompts/__tests__/presets.test.js +0 -31
- package/dist/adapters/prompts/__tests__/presets.test.js.map +0 -1
- package/dist/adapters/prompts/library/categories/domain.d.ts +0 -11
- package/dist/adapters/prompts/library/categories/domain.js +0 -12
- package/dist/adapters/prompts/library/categories/domain.js.map +0 -1
- package/dist/adapters/prompts/library/categories/format.d.ts +0 -10
- package/dist/adapters/prompts/library/categories/format.js +0 -11
- package/dist/adapters/prompts/library/categories/format.js.map +0 -1
- package/dist/adapters/prompts/library/categories/foundations.d.ts +0 -12
- package/dist/adapters/prompts/library/categories/foundations.js +0 -13
- package/dist/adapters/prompts/library/categories/foundations.js.map +0 -1
- package/dist/adapters/prompts/library/categories/language.d.ts +0 -11
- package/dist/adapters/prompts/library/categories/language.js +0 -12
- package/dist/adapters/prompts/library/categories/language.js.map +0 -1
- package/dist/adapters/prompts/library/categories/persona.d.ts +0 -13
- package/dist/adapters/prompts/library/categories/persona.js +0 -14
- package/dist/adapters/prompts/library/categories/persona.js.map +0 -1
- package/dist/adapters/prompts/library/categories/response.d.ts +0 -9
- package/dist/adapters/prompts/library/categories/response.js +0 -10
- package/dist/adapters/prompts/library/categories/response.js.map +0 -1
- package/dist/adapters/prompts/library/categories/tone.d.ts +0 -9
- package/dist/adapters/prompts/library/categories/tone.js +0 -10
- package/dist/adapters/prompts/library/categories/tone.js.map +0 -1
- package/dist/adapters/prompts/library/categories/verbosity.d.ts +0 -8
- package/dist/adapters/prompts/library/categories/verbosity.js +0 -9
- package/dist/adapters/prompts/library/categories/verbosity.js.map +0 -1
- package/dist/adapters/prompts/library/index.d.ts +0 -68
- package/dist/adapters/prompts/library/index.js +0 -26
- package/dist/adapters/prompts/library/index.js.map +0 -1
- package/dist/adapters/prompts/library/presets.d.ts +0 -17
- package/dist/adapters/prompts/library/presets.js +0 -45
- package/dist/adapters/prompts/library/presets.js.map +0 -1
- package/dist/adapters/prompts/system-prompt.adapter.d.ts +0 -9
- package/dist/adapters/prompts/system-prompt.adapter.js +0 -57
- package/dist/adapters/prompts/system-prompt.adapter.js.map +0 -1
- package/dist/adapters/prompts/user-prompt.adapter.d.ts +0 -9
- package/dist/adapters/prompts/user-prompt.adapter.js +0 -57
- package/dist/adapters/prompts/user-prompt.adapter.js.map +0 -1
- package/dist/adapters/providers/openrouter-provider.adapter.d.ts +0 -34
- package/dist/adapters/providers/openrouter-provider.adapter.js +0 -57
- package/dist/adapters/providers/openrouter-provider.adapter.js.map +0 -1
- package/dist/adapters/tools/safe-tool.adapter.d.ts +0 -27
- package/dist/adapters/tools/safe-tool.adapter.js +0 -283
- package/dist/adapters/tools/safe-tool.adapter.js.map +0 -1
- package/dist/adapters/utils/__tests__/structured-response-parser.test.js +0 -289
- package/dist/adapters/utils/__tests__/structured-response-parser.test.js.map +0 -1
- package/dist/adapters/utils/structured-response-parser-error.d.ts +0 -8
- package/dist/adapters/utils/structured-response-parser-error.js +0 -136
- package/dist/adapters/utils/structured-response-parser-error.js.map +0 -1
- package/dist/adapters/utils/structured-response-parser.d.ts +0 -60
- package/dist/adapters/utils/structured-response-parser.js +0 -347
- package/dist/adapters/utils/structured-response-parser.js.map +0 -1
- package/dist/ports/agent.port.d.ts +0 -17
- package/dist/ports/agent.port.js +0 -7
- package/dist/ports/agent.port.js.map +0 -1
- package/dist/ports/model.port.d.ts +0 -37
- package/dist/ports/model.port.js +0 -5
- package/dist/ports/model.port.js.map +0 -1
- package/dist/ports/prompt.port.d.ts +0 -9
- package/dist/ports/prompt.port.js +0 -5
- package/dist/ports/prompt.port.js.map +0 -1
- package/dist/ports/provider.port.d.ts +0 -13
- package/dist/ports/provider.port.js +0 -5
- package/dist/ports/provider.port.js.map +0 -1
- package/dist/ports/tool.port.d.ts +0 -11
- package/dist/ports/tool.port.js +0 -5
- package/dist/ports/tool.port.js.map +0 -1
- /package/dist/{adapters/prompts/__tests__/presets.test.d.ts → middleware/__tests__/logging.middleware.test.d.ts} +0 -0
- /package/dist/{adapters/utils/__tests__/structured-response-parser.test.d.ts → parsing/__tests__/create-schema-prompt.test.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/parsing/parse-object.ts"],"sourcesContent":["import { jsonrepair } from 'jsonrepair';\nimport { z } from 'zod/v4';\n\n/**\n * Error thrown when object parsing fails.\n * Contains the original text for debugging purposes.\n */\nexport class ParseObjectError extends Error {\n public readonly name = 'ParseObjectError';\n\n constructor(\n message: string,\n public readonly cause?: unknown,\n public readonly text?: string,\n ) {\n super(message);\n }\n}\n\n/**\n * Parses AI-generated text into structured data validated against a Zod schema.\n *\n * Handles common AI response formats:\n * - JSON wrapped in markdown code blocks\n * - JSON embedded in prose text\n * - Malformed JSON (auto-repaired)\n * - Escaped unicode and special characters\n *\n * @param text - The raw AI response text\n * @param schema - A Zod schema to validate and type the result\n * @returns The parsed and validated data\n * @throws {ParseObjectError} When parsing or validation fails\n *\n * @example\n * ```ts\n * const schema = z.object({ title: z.string(), tags: z.array(z.string()) });\n * const result = parseObject(aiResponse, schema);\n * // result is typed as { title: string; tags: string[] }\n * ```\n */\nexport function parseObject<T>(text: string, schema: z.ZodSchema<T>): T {\n try {\n const jsonString = extractJsonString(text);\n const extracted = extractBySchemaType(jsonString, schema, text);\n const unescaped = unescapeJsonValues(extracted);\n return schema.parse(unescaped);\n } catch (error) {\n if (error instanceof ParseObjectError) {\n throw error;\n }\n if (error instanceof z.ZodError) {\n throw new ParseObjectError('Failed to validate response against schema', error, text);\n }\n throw error;\n }\n}\n\nconst MARKDOWN_CODE_BLOCK_RE = /```(?:json)?\\r?\\n([^`]*?)\\r?\\n```/g;\n\nfunction convertToPrimitive(value: unknown, schema: z.ZodType): unknown {\n if (schema instanceof z.ZodBoolean) return Boolean(value);\n if (schema instanceof z.ZodNull) return null;\n if (schema instanceof z.ZodNumber) return Number(value);\n if (schema instanceof z.ZodString) return String(value);\n return value;\n}\n\nfunction extractArray(text: string, originalText: string): unknown {\n const start = text.indexOf('[');\n const end = text.lastIndexOf(']');\n\n if (start === -1 || end === -1) {\n throw new ParseObjectError('No array found in response', undefined, originalText);\n }\n\n try {\n const raw = text.slice(start, end + 1);\n return JSON.parse(jsonrepair(raw));\n } catch (error) {\n throw new ParseObjectError('Failed to parse array JSON', error, originalText);\n }\n}\n\nfunction extractBySchemaType(text: string, schema: z.ZodType, originalText: string): unknown {\n if (schema instanceof z.ZodArray) {\n return extractArray(text, originalText);\n }\n\n if (schema instanceof z.ZodObject) {\n return extractObject(text, originalText);\n }\n\n if (\n schema instanceof z.ZodBoolean ||\n schema instanceof z.ZodNull ||\n schema instanceof z.ZodNumber ||\n schema instanceof z.ZodString\n ) {\n return extractPrimitive(text, schema);\n }\n\n throw new ParseObjectError('Unsupported schema type', undefined, originalText);\n}\n\nfunction extractJsonFromCodeBlock(block: string): null | string {\n const content = block.replace(/```(?:json)?\\r?\\n([^`]*?)\\r?\\n```/, '$1').trim();\n try {\n JSON.parse(content);\n return content;\n } catch {\n return null;\n }\n}\n\nfunction extractJsonString(text: string): string {\n const codeBlocks = text.match(MARKDOWN_CODE_BLOCK_RE);\n if (codeBlocks && codeBlocks.length > 0) {\n const validBlocks = codeBlocks\n .map((block) => extractJsonFromCodeBlock(block))\n .filter((block): block is string => block !== null);\n\n if (validBlocks.length > 0) {\n return findLongestString(validBlocks);\n }\n }\n\n const structures = findJsonStructures(text);\n if (structures.length > 0) {\n return findLongestString(structures);\n }\n\n return text.replace(/\\s+/g, ' ').trim();\n}\n\nfunction extractObject(text: string, originalText: string): unknown {\n const start = text.indexOf('{');\n const end = text.lastIndexOf('}');\n\n if (start === -1 || end === -1) {\n throw new ParseObjectError('No object found in response', undefined, originalText);\n }\n\n try {\n const raw = text.slice(start, end + 1);\n return JSON.parse(jsonrepair(raw));\n } catch (error) {\n throw new ParseObjectError('Failed to parse object JSON', error, originalText);\n }\n}\n\nfunction extractPrimitive(text: string, schema: z.ZodType): unknown {\n const trimmed = text.trim();\n try {\n return convertToPrimitive(JSON.parse(trimmed), schema);\n } catch {\n return convertToPrimitive(trimmed, schema);\n }\n}\n\nfunction findJsonStructures(text: string): string[] {\n const matches: string[] = [];\n let depth = 0;\n let start = -1;\n\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n if (char === '{' || char === '[') {\n if (depth === 0) start = i;\n depth++;\n } else if (char === '}' || char === ']') {\n depth--;\n if (depth === 0 && start !== -1) {\n const candidate = text.slice(start, i + 1);\n try {\n JSON.parse(candidate);\n matches.push(candidate);\n } catch {\n // Invalid JSON, skip\n }\n }\n }\n }\n\n return matches;\n}\n\nfunction findLongestString(strings: string[]): string {\n return strings.reduce((longest, current) =>\n current.length > longest.length ? current : longest,\n );\n}\n\nfunction unescapeJsonValues(json: unknown): unknown {\n if (typeof json === 'string') {\n return unescapeString(json);\n }\n if (Array.isArray(json)) {\n return json.map(unescapeJsonValues);\n }\n if (typeof json === 'object' && json !== null) {\n return Object.fromEntries(\n Object.entries(json).map(([key, value]) => [key, unescapeJsonValues(value)]),\n );\n }\n return json;\n}\n\nfunction unescapeString(text: string): string {\n return text\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\\\\\/g, '\\\\')\n .replace(/\\\\u([0-9a-fA-F]{4})/g, (_, code) =>\n String.fromCharCode(Number.parseInt(code, 16)),\n );\n}\n"],"names":["jsonrepair","z","ParseObjectError","message","cause","text","name","Error","parseObject","schema","jsonString","extractJsonString","extracted","extractBySchemaType","unescaped","unescapeJsonValues","parse","error","ZodError","MARKDOWN_CODE_BLOCK_RE","convertToPrimitive","value","ZodBoolean","Boolean","ZodNull","ZodNumber","Number","ZodString","String","extractArray","originalText","start","indexOf","end","lastIndexOf","undefined","raw","slice","JSON","ZodArray","ZodObject","extractObject","extractPrimitive","extractJsonFromCodeBlock","block","content","replace","trim","codeBlocks","match","length","validBlocks","map","filter","findLongestString","structures","findJsonStructures","trimmed","matches","depth","i","char","candidate","push","strings","reduce","longest","current","json","unescapeString","Array","isArray","Object","fromEntries","entries","key","_","code","fromCharCode","parseInt"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ParseTextOptions {
|
|
2
|
+
/** Collapse multiple spaces into one (default: true) */
|
|
3
|
+
collapseSpaces?: boolean;
|
|
4
|
+
/** Convert em/en dashes with spaces to commas (default: true) */
|
|
5
|
+
normalizeEmDashesToCommas?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Parses and sanitizes text by removing AI artifacts and normalizing typography.
|
|
9
|
+
*
|
|
10
|
+
* @param text - The text to parse
|
|
11
|
+
* @param options - Parsing options
|
|
12
|
+
* @returns The cleaned text
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseText(text: string, options?: ParseTextOptions): string;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
var INVISIBLE_CHARS_RE = /[\u00AD\u180E\u200B-\u200C\u200E-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u2069\uFEFF]/g;
|
|
2
|
+
/* eslint-disable no-control-regex -- intentionally matching control characters */ // biome-ignore lint/suspicious/noControlCharactersInRegex: intentionally matching control characters for sanitization
|
|
3
|
+
var ASCII_CTRL_RE = /[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g;
|
|
4
|
+
/* eslint-enable no-control-regex */ var SPACE_LIKE_RE = /[\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]/g;
|
|
5
|
+
var MULTIPLE_SPACES_RE = / {2,}/g;
|
|
6
|
+
var CR_RE = /\r\n?/g;
|
|
7
|
+
var CITATION_RE = / *\(oaicite:\d+\)\{index=\d+\}/g;
|
|
8
|
+
var EM_DASH_SEPARATOR_RE = /(?:\s+[—–―‒]\s*|\s*[—–―‒]\s+)/g;
|
|
9
|
+
var TYPOGRAPHY_REPLACEMENTS = [
|
|
10
|
+
{
|
|
11
|
+
pattern: /[\u2018\u2019\u201A]/g,
|
|
12
|
+
replacement: "'"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
pattern: /[\u201C\u201D\u201E]/g,
|
|
16
|
+
replacement: '"'
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
pattern: /[\u2013\u2014]/g,
|
|
20
|
+
replacement: '-'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
pattern: /\u2026/g,
|
|
24
|
+
replacement: '...'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
pattern: /[\u2022\u25AA-\u25AB\u25B8-\u25B9\u25CF]/g,
|
|
28
|
+
replacement: '-'
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Parses and sanitizes text by removing AI artifacts and normalizing typography.
|
|
33
|
+
*
|
|
34
|
+
* @param text - The text to parse
|
|
35
|
+
* @param options - Parsing options
|
|
36
|
+
* @returns The cleaned text
|
|
37
|
+
*/ export function parseText(text) {
|
|
38
|
+
var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
39
|
+
var _options_normalizeEmDashesToCommas = options.normalizeEmDashesToCommas, normalizeEmDashesToCommas = _options_normalizeEmDashesToCommas === void 0 ? true : _options_normalizeEmDashesToCommas, _options_collapseSpaces = options.collapseSpaces, collapseSpaces = _options_collapseSpaces === void 0 ? true : _options_collapseSpaces;
|
|
40
|
+
if (!text) return '';
|
|
41
|
+
var result = text;
|
|
42
|
+
if (result.charCodeAt(0) === 0xfeff) {
|
|
43
|
+
result = result.slice(1);
|
|
44
|
+
}
|
|
45
|
+
result = result.replace(CR_RE, '\n');
|
|
46
|
+
result = result.replace(CITATION_RE, '');
|
|
47
|
+
result = result.normalize('NFKC');
|
|
48
|
+
result = result.replace(INVISIBLE_CHARS_RE, '');
|
|
49
|
+
result = result.replace(ASCII_CTRL_RE, '');
|
|
50
|
+
if (normalizeEmDashesToCommas) {
|
|
51
|
+
result = result.replace(EM_DASH_SEPARATOR_RE, ', ');
|
|
52
|
+
}
|
|
53
|
+
result = result.replace(SPACE_LIKE_RE, ' ');
|
|
54
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
55
|
+
try {
|
|
56
|
+
for(var _iterator = TYPOGRAPHY_REPLACEMENTS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
57
|
+
var _step_value = _step.value, pattern = _step_value.pattern, replacement = _step_value.replacement;
|
|
58
|
+
result = result.replace(pattern, replacement);
|
|
59
|
+
}
|
|
60
|
+
} catch (err) {
|
|
61
|
+
_didIteratorError = true;
|
|
62
|
+
_iteratorError = err;
|
|
63
|
+
} finally{
|
|
64
|
+
try {
|
|
65
|
+
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
|
|
66
|
+
_iterator["return"]();
|
|
67
|
+
}
|
|
68
|
+
} finally{
|
|
69
|
+
if (_didIteratorError) {
|
|
70
|
+
throw _iteratorError;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (collapseSpaces) {
|
|
75
|
+
result = result.replace(MULTIPLE_SPACES_RE, ' ').trim();
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=parse-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/parsing/parse-text.ts"],"sourcesContent":["const INVISIBLE_CHARS_RE =\n /[\\u00AD\\u180E\\u200B-\\u200C\\u200E-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u2069\\uFEFF]/g;\n\n/* eslint-disable no-control-regex -- intentionally matching control characters */\n// biome-ignore lint/suspicious/noControlCharactersInRegex: intentionally matching control characters for sanitization\nconst ASCII_CTRL_RE = /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F]/g;\n/* eslint-enable no-control-regex */\n\nconst SPACE_LIKE_RE = /[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g;\nconst MULTIPLE_SPACES_RE = / {2,}/g;\nconst CR_RE = /\\r\\n?/g;\nconst CITATION_RE = / *\\(oaicite:\\d+\\)\\{index=\\d+\\}/g;\nconst EM_DASH_SEPARATOR_RE = /(?:\\s+[—–―‒]\\s*|\\s*[—–―‒]\\s+)/g;\n\nconst TYPOGRAPHY_REPLACEMENTS: Array<{ pattern: RegExp; replacement: string }> = [\n { pattern: /[\\u2018\\u2019\\u201A]/g, replacement: \"'\" },\n { pattern: /[\\u201C\\u201D\\u201E]/g, replacement: '\"' },\n { pattern: /[\\u2013\\u2014]/g, replacement: '-' },\n { pattern: /\\u2026/g, replacement: '...' },\n { pattern: /[\\u2022\\u25AA-\\u25AB\\u25B8-\\u25B9\\u25CF]/g, replacement: '-' },\n];\n\nexport interface ParseTextOptions {\n /** Collapse multiple spaces into one (default: true) */\n collapseSpaces?: boolean;\n /** Convert em/en dashes with spaces to commas (default: true) */\n normalizeEmDashesToCommas?: boolean;\n}\n\n/**\n * Parses and sanitizes text by removing AI artifacts and normalizing typography.\n *\n * @param text - The text to parse\n * @param options - Parsing options\n * @returns The cleaned text\n */\nexport function parseText(text: string, options: ParseTextOptions = {}): string {\n const { normalizeEmDashesToCommas = true, collapseSpaces = true } = options;\n\n if (!text) return '';\n\n let result = text;\n\n if (result.charCodeAt(0) === 0xfeff) {\n result = result.slice(1);\n }\n\n result = result.replace(CR_RE, '\\n');\n result = result.replace(CITATION_RE, '');\n result = result.normalize('NFKC');\n result = result.replace(INVISIBLE_CHARS_RE, '');\n result = result.replace(ASCII_CTRL_RE, '');\n\n if (normalizeEmDashesToCommas) {\n result = result.replace(EM_DASH_SEPARATOR_RE, ', ');\n }\n\n result = result.replace(SPACE_LIKE_RE, ' ');\n\n for (const { pattern, replacement } of TYPOGRAPHY_REPLACEMENTS) {\n result = result.replace(pattern, replacement);\n }\n\n if (collapseSpaces) {\n result = result.replace(MULTIPLE_SPACES_RE, ' ').trim();\n }\n\n return result;\n}\n"],"names":["INVISIBLE_CHARS_RE","ASCII_CTRL_RE","SPACE_LIKE_RE","MULTIPLE_SPACES_RE","CR_RE","CITATION_RE","EM_DASH_SEPARATOR_RE","TYPOGRAPHY_REPLACEMENTS","pattern","replacement","parseText","text","options","normalizeEmDashesToCommas","collapseSpaces","result","charCodeAt","slice","replace","normalize","trim"],"mappings":"AAAA,IAAMA,qBACF;AAEJ,gFAAgF,GAChF,sHAAsH;AACtH,IAAMC,gBAAgB;AACtB,kCAAkC,GAElC,IAAMC,gBAAgB;AACtB,IAAMC,qBAAqB;AAC3B,IAAMC,QAAQ;AACd,IAAMC,cAAc;AACpB,IAAMC,uBAAuB;AAE7B,IAAMC,0BAA2E;IAC7E;QAAEC,SAAS;QAAyBC,aAAa;IAAI;IACrD;QAAED,SAAS;QAAyBC,aAAa;IAAI;IACrD;QAAED,SAAS;QAAmBC,aAAa;IAAI;IAC/C;QAAED,SAAS;QAAWC,aAAa;IAAM;IACzC;QAAED,SAAS;QAA6CC,aAAa;IAAI;CAC5E;AASD;;;;;;CAMC,GACD,OAAO,SAASC,UAAUC,IAAY;QAAEC,UAAAA,iEAA4B,CAAC;IACjE,yCAAoEA,QAA5DC,2BAAAA,4EAA4B,qEAAgCD,QAA1BE,gBAAAA,sDAAiB;IAE3D,IAAI,CAACH,MAAM,OAAO;IAElB,IAAII,SAASJ;IAEb,IAAII,OAAOC,UAAU,CAAC,OAAO,QAAQ;QACjCD,SAASA,OAAOE,KAAK,CAAC;IAC1B;IAEAF,SAASA,OAAOG,OAAO,CAACd,OAAO;IAC/BW,SAASA,OAAOG,OAAO,CAACb,aAAa;IACrCU,SAASA,OAAOI,SAAS,CAAC;IAC1BJ,SAASA,OAAOG,OAAO,CAAClB,oBAAoB;IAC5Ce,SAASA,OAAOG,OAAO,CAACjB,eAAe;IAEvC,IAAIY,2BAA2B;QAC3BE,SAASA,OAAOG,OAAO,CAACZ,sBAAsB;IAClD;IAEAS,SAASA,OAAOG,OAAO,CAAChB,eAAe;QAElC,kCAAA,2BAAA;;QAAL,QAAK,YAAkCK,4CAAlC,SAAA,6BAAA,QAAA,yBAAA,iCAA2D;YAA3D,kBAAA,aAAQC,sBAAAA,SAASC,0BAAAA;YAClBM,SAASA,OAAOG,OAAO,CAACV,SAASC;QACrC;;QAFK;QAAA;;;iBAAA,6BAAA;gBAAA;;;gBAAA;sBAAA;;;;IAIL,IAAIK,gBAAgB;QAChBC,SAASA,OAAOG,OAAO,CAACf,oBAAoB,KAAKiB,IAAI;IACzD;IAEA,OAAOL;AACX"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { LanguageModel } from 'ai';
|
|
2
|
+
export interface ModelOptions {
|
|
3
|
+
/** Maximum tokens to generate */
|
|
4
|
+
maxTokens?: number;
|
|
5
|
+
/** Reasoning configuration for supported models */
|
|
6
|
+
reasoning?: {
|
|
7
|
+
effort?: 'high' | 'low' | 'medium';
|
|
8
|
+
exclude?: boolean;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface OpenRouterConfig {
|
|
12
|
+
apiKey: string;
|
|
13
|
+
metadata?: OpenRouterMetadata;
|
|
14
|
+
}
|
|
15
|
+
export interface OpenRouterMetadata {
|
|
16
|
+
/** Application name for X-Title header */
|
|
17
|
+
application?: string;
|
|
18
|
+
/** Website URL for HTTP-Referer header */
|
|
19
|
+
website?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface OpenRouterProvider {
|
|
22
|
+
/** Get a language model instance */
|
|
23
|
+
model: (name: string, options?: ModelOptions) => LanguageModel;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Creates an OpenRouter provider for AI SDK models.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const provider = createOpenRouterProvider({ apiKey: process.env.OPENROUTER_API_KEY });
|
|
31
|
+
* const model = provider.model('anthropic/claude-sonnet-4-20250514');
|
|
32
|
+
*
|
|
33
|
+
* const { text } = await generateText({ model, prompt: 'Hello!' });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function createOpenRouterProvider(config: OpenRouterConfig): OpenRouterProvider;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _object_spread(target) {
|
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
17
|
+
var ownKeys = Object.keys(source);
|
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
ownKeys.forEach(function(key) {
|
|
24
|
+
_define_property(target, key, source[key]);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
import { createOpenRouter } from '@openrouter/ai-sdk-provider';
|
|
30
|
+
/**
|
|
31
|
+
* Creates an OpenRouter provider for AI SDK models.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* const provider = createOpenRouterProvider({ apiKey: process.env.OPENROUTER_API_KEY });
|
|
36
|
+
* const model = provider.model('anthropic/claude-sonnet-4-20250514');
|
|
37
|
+
*
|
|
38
|
+
* const { text } = await generateText({ model, prompt: 'Hello!' });
|
|
39
|
+
* ```
|
|
40
|
+
*/ export function createOpenRouterProvider(config) {
|
|
41
|
+
var openrouter = createOpenRouter({
|
|
42
|
+
apiKey: config.apiKey
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
model: function model(name) {
|
|
46
|
+
var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
47
|
+
return openrouter(name, _object_spread({}, options.maxTokens !== undefined && {
|
|
48
|
+
maxTokens: options.maxTokens
|
|
49
|
+
}, options.reasoning && {
|
|
50
|
+
extraBody: {
|
|
51
|
+
reasoning: options.reasoning
|
|
52
|
+
}
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=openrouter.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/providers/openrouter.provider.ts"],"sourcesContent":["import { createOpenRouter } from '@openrouter/ai-sdk-provider';\nimport type { LanguageModel } from 'ai';\n\nexport interface ModelOptions {\n /** Maximum tokens to generate */\n maxTokens?: number;\n /** Reasoning configuration for supported models */\n reasoning?: {\n effort?: 'high' | 'low' | 'medium';\n exclude?: boolean;\n };\n}\n\nexport interface OpenRouterConfig {\n apiKey: string;\n metadata?: OpenRouterMetadata;\n}\n\nexport interface OpenRouterMetadata {\n /** Application name for X-Title header */\n application?: string;\n /** Website URL for HTTP-Referer header */\n website?: string;\n}\n\nexport interface OpenRouterProvider {\n /** Get a language model instance */\n model: (name: string, options?: ModelOptions) => LanguageModel;\n}\n\n/**\n * Creates an OpenRouter provider for AI SDK models.\n *\n * @example\n * ```ts\n * const provider = createOpenRouterProvider({ apiKey: process.env.OPENROUTER_API_KEY });\n * const model = provider.model('anthropic/claude-sonnet-4-20250514');\n *\n * const { text } = await generateText({ model, prompt: 'Hello!' });\n * ```\n */\nexport function createOpenRouterProvider(config: OpenRouterConfig): OpenRouterProvider {\n const openrouter = createOpenRouter({ apiKey: config.apiKey });\n\n return {\n model(name: string, options: ModelOptions = {}): LanguageModel {\n return openrouter(name, {\n ...(options.maxTokens !== undefined && {\n maxTokens: options.maxTokens,\n }),\n ...(options.reasoning && {\n extraBody: { reasoning: options.reasoning },\n }),\n });\n },\n };\n}\n"],"names":["createOpenRouter","createOpenRouterProvider","config","openrouter","apiKey","model","name","options","maxTokens","undefined","reasoning","extraBody"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,gBAAgB,QAAQ,8BAA8B;AA8B/D;;;;;;;;;;CAUC,GACD,OAAO,SAASC,yBAAyBC,MAAwB;IAC7D,IAAMC,aAAaH,iBAAiB;QAAEI,QAAQF,OAAOE,MAAM;IAAC;IAE5D,OAAO;QACHC,OAAAA,SAAAA,MAAMC,IAAY;gBAAEC,UAAAA,iEAAwB,CAAC;YACzC,OAAOJ,WAAWG,MAAM,mBAChBC,QAAQC,SAAS,KAAKC,aAAa;gBACnCD,WAAWD,QAAQC,SAAS;YAChC,GACID,QAAQG,SAAS,IAAI;gBACrBC,WAAW;oBAAED,WAAWH,QAAQG,SAAS;gBAAC;YAC9C;QAER;IACJ;AACJ"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jterrazz/intelligence",
|
|
3
3
|
"author": "Jean-Baptiste Terrazzoni <contact@jterrazz.com>",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "3.0.0",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
7
7
|
"require": "./dist/index.cjs",
|
|
@@ -14,24 +14,23 @@
|
|
|
14
14
|
"type": "module",
|
|
15
15
|
"scripts": {
|
|
16
16
|
"build": "ts-build",
|
|
17
|
-
"
|
|
18
|
-
"lint": "
|
|
19
|
-
"
|
|
17
|
+
"lint": "ts-check",
|
|
18
|
+
"lint:fix": "ts-fix",
|
|
19
|
+
"test": "vitest"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@jterrazz/quality": "^
|
|
23
|
-
"@jterrazz/test": "^3.
|
|
24
|
-
"@jterrazz/typescript": "^3.
|
|
22
|
+
"@jterrazz/quality": "^5.0.1",
|
|
23
|
+
"@jterrazz/test": "^3.1.0",
|
|
24
|
+
"@jterrazz/typescript": "^3.1.0"
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"ai": ">=5.0.0",
|
|
28
|
+
"zod": ">=4.0.0"
|
|
25
29
|
},
|
|
26
30
|
"dependencies": {
|
|
27
|
-
"@jterrazz/logger": "^1.
|
|
28
|
-
"@
|
|
29
|
-
"
|
|
30
|
-
"@langchain/openai": "^0.5.15",
|
|
31
|
-
"@openrouter/ai-sdk-provider": "^0.7.3",
|
|
32
|
-
"ai": "^4.3.16",
|
|
33
|
-
"jsonrepair": "^3.13.0",
|
|
34
|
-
"zod": "^3.25.67"
|
|
31
|
+
"@jterrazz/logger": "^1.5.0",
|
|
32
|
+
"@openrouter/ai-sdk-provider": "^1.4.0",
|
|
33
|
+
"jsonrepair": "^3.13.1"
|
|
35
34
|
},
|
|
36
35
|
"publishConfig": {
|
|
37
36
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { type LoggerPort } from '@jterrazz/logger';
|
|
2
|
-
import { z } from 'zod/v4';
|
|
3
|
-
import { type AgentPort } from '../../ports/agent.port.js';
|
|
4
|
-
import type { ModelPort } from '../../ports/model.port.js';
|
|
5
|
-
import type { PromptPort } from '../../ports/prompt.port.js';
|
|
6
|
-
import type { SystemPrompt } from '../prompts/system-prompt.adapter.js';
|
|
7
|
-
export interface ChatAgentOptions<TOutput = string> {
|
|
8
|
-
logger?: LoggerPort;
|
|
9
|
-
model: ModelPort;
|
|
10
|
-
schema?: z.ZodSchema<TOutput>;
|
|
11
|
-
systemPrompt: SystemPrompt;
|
|
12
|
-
verbose?: boolean;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* A conversational agent for direct, one-shot interactions with a model.
|
|
16
|
-
* It supports optional response parsing against a Zod schema but does not use tools.
|
|
17
|
-
* @template TOutput - The TypeScript type of the output
|
|
18
|
-
*/
|
|
19
|
-
export declare class ChatAgent<TOutput = string> implements AgentPort<PromptPort, TOutput> {
|
|
20
|
-
readonly name: string;
|
|
21
|
-
private readonly options;
|
|
22
|
-
constructor(name: string, options: ChatAgentOptions<TOutput>);
|
|
23
|
-
run(input?: PromptPort): Promise<null | TOutput>;
|
|
24
|
-
private invokeModel;
|
|
25
|
-
private parseResponse;
|
|
26
|
-
private resolveUserInput;
|
|
27
|
-
}
|