@memtensor/memos-local-openclaw-plugin 0.1.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/.env.example +11 -0
- package/README.md +251 -0
- package/SKILL.md +43 -0
- package/dist/capture/index.d.ts +16 -0
- package/dist/capture/index.d.ts.map +1 -0
- package/dist/capture/index.js +80 -0
- package/dist/capture/index.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +96 -0
- package/dist/config.js.map +1 -0
- package/dist/embedding/index.d.ts +12 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +75 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/embedding/local.d.ts +3 -0
- package/dist/embedding/local.d.ts.map +1 -0
- package/dist/embedding/local.js +65 -0
- package/dist/embedding/local.js.map +1 -0
- package/dist/embedding/providers/cohere.d.ts +4 -0
- package/dist/embedding/providers/cohere.d.ts.map +1 -0
- package/dist/embedding/providers/cohere.js +57 -0
- package/dist/embedding/providers/cohere.js.map +1 -0
- package/dist/embedding/providers/gemini.d.ts +3 -0
- package/dist/embedding/providers/gemini.d.ts.map +1 -0
- package/dist/embedding/providers/gemini.js +31 -0
- package/dist/embedding/providers/gemini.js.map +1 -0
- package/dist/embedding/providers/mistral.d.ts +3 -0
- package/dist/embedding/providers/mistral.d.ts.map +1 -0
- package/dist/embedding/providers/mistral.js +25 -0
- package/dist/embedding/providers/mistral.js.map +1 -0
- package/dist/embedding/providers/openai.d.ts +3 -0
- package/dist/embedding/providers/openai.d.ts.map +1 -0
- package/dist/embedding/providers/openai.js +35 -0
- package/dist/embedding/providers/openai.js.map +1 -0
- package/dist/embedding/providers/voyage.d.ts +3 -0
- package/dist/embedding/providers/voyage.d.ts.map +1 -0
- package/dist/embedding/providers/voyage.js +25 -0
- package/dist/embedding/providers/voyage.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/chunker.d.ts +15 -0
- package/dist/ingest/chunker.d.ts.map +1 -0
- package/dist/ingest/chunker.js +193 -0
- package/dist/ingest/chunker.js.map +1 -0
- package/dist/ingest/dedup.d.ts +11 -0
- package/dist/ingest/dedup.d.ts.map +1 -0
- package/dist/ingest/dedup.js +29 -0
- package/dist/ingest/dedup.js.map +1 -0
- package/dist/ingest/providers/anthropic.d.ts +3 -0
- package/dist/ingest/providers/anthropic.d.ts.map +1 -0
- package/dist/ingest/providers/anthropic.js +33 -0
- package/dist/ingest/providers/anthropic.js.map +1 -0
- package/dist/ingest/providers/bedrock.d.ts +8 -0
- package/dist/ingest/providers/bedrock.d.ts.map +1 -0
- package/dist/ingest/providers/bedrock.js +41 -0
- package/dist/ingest/providers/bedrock.js.map +1 -0
- package/dist/ingest/providers/gemini.d.ts +3 -0
- package/dist/ingest/providers/gemini.d.ts.map +1 -0
- package/dist/ingest/providers/gemini.js +31 -0
- package/dist/ingest/providers/gemini.js.map +1 -0
- package/dist/ingest/providers/index.d.ts +9 -0
- package/dist/ingest/providers/index.d.ts.map +1 -0
- package/dist/ingest/providers/index.js +68 -0
- package/dist/ingest/providers/index.js.map +1 -0
- package/dist/ingest/providers/openai.d.ts +3 -0
- package/dist/ingest/providers/openai.d.ts.map +1 -0
- package/dist/ingest/providers/openai.js +41 -0
- package/dist/ingest/providers/openai.js.map +1 -0
- package/dist/ingest/worker.d.ts +21 -0
- package/dist/ingest/worker.d.ts.map +1 -0
- package/dist/ingest/worker.js +111 -0
- package/dist/ingest/worker.js.map +1 -0
- package/dist/recall/engine.d.ts +23 -0
- package/dist/recall/engine.d.ts.map +1 -0
- package/dist/recall/engine.js +153 -0
- package/dist/recall/engine.js.map +1 -0
- package/dist/recall/mmr.d.ts +17 -0
- package/dist/recall/mmr.d.ts.map +1 -0
- package/dist/recall/mmr.js +51 -0
- package/dist/recall/mmr.js.map +1 -0
- package/dist/recall/recency.d.ts +20 -0
- package/dist/recall/recency.d.ts.map +1 -0
- package/dist/recall/recency.js +26 -0
- package/dist/recall/recency.js.map +1 -0
- package/dist/recall/rrf.d.ts +16 -0
- package/dist/recall/rrf.d.ts.map +1 -0
- package/dist/recall/rrf.js +15 -0
- package/dist/recall/rrf.js.map +1 -0
- package/dist/storage/sqlite.d.ts +34 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +274 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/storage/vector.d.ts +13 -0
- package/dist/storage/vector.d.ts.map +1 -0
- package/dist/storage/vector.js +33 -0
- package/dist/storage/vector.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +10 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory-get.d.ts +4 -0
- package/dist/tools/memory-get.d.ts.map +1 -0
- package/dist/tools/memory-get.js +59 -0
- package/dist/tools/memory-get.js.map +1 -0
- package/dist/tools/memory-search.d.ts +4 -0
- package/dist/tools/memory-search.d.ts.map +1 -0
- package/dist/tools/memory-search.js +36 -0
- package/dist/tools/memory-search.js.map +1 -0
- package/dist/tools/memory-timeline.d.ts +4 -0
- package/dist/tools/memory-timeline.d.ts.map +1 -0
- package/dist/tools/memory-timeline.js +64 -0
- package/dist/tools/memory-timeline.js.map +1 -0
- package/dist/types.d.ts +158 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/dist/viewer/html.d.ts +2 -0
- package/dist/viewer/html.d.ts.map +1 -0
- package/dist/viewer/html.js +686 -0
- package/dist/viewer/html.js.map +1 -0
- package/dist/viewer/server.d.ts +48 -0
- package/dist/viewer/server.d.ts.map +1 -0
- package/dist/viewer/server.js +470 -0
- package/dist/viewer/server.js.map +1 -0
- package/index.ts +357 -0
- package/openclaw.plugin.json +57 -0
- package/package.json +57 -0
- package/src/capture/index.ts +92 -0
- package/src/config.ts +67 -0
- package/src/embedding/index.ts +76 -0
- package/src/embedding/local.ts +35 -0
- package/src/embedding/providers/cohere.ts +69 -0
- package/src/embedding/providers/gemini.ts +41 -0
- package/src/embedding/providers/mistral.ts +32 -0
- package/src/embedding/providers/openai.ts +42 -0
- package/src/embedding/providers/voyage.ts +32 -0
- package/src/index.ts +106 -0
- package/src/ingest/chunker.ts +217 -0
- package/src/ingest/dedup.ts +37 -0
- package/src/ingest/providers/anthropic.ts +41 -0
- package/src/ingest/providers/bedrock.ts +50 -0
- package/src/ingest/providers/gemini.ts +41 -0
- package/src/ingest/providers/index.ts +67 -0
- package/src/ingest/providers/openai.ts +48 -0
- package/src/ingest/worker.ts +130 -0
- package/src/recall/engine.ts +182 -0
- package/src/recall/mmr.ts +60 -0
- package/src/recall/recency.ts +27 -0
- package/src/recall/rrf.ts +31 -0
- package/src/storage/sqlite.ts +305 -0
- package/src/storage/vector.ts +39 -0
- package/src/tools/index.ts +3 -0
- package/src/tools/memory-get.ts +68 -0
- package/src/tools/memory-search.ts +36 -0
- package/src/tools/memory-timeline.ts +73 -0
- package/src/types.ts +214 -0
- package/src/viewer/html.ts +682 -0
- package/src/viewer/server.ts +464 -0
- package/www/index.html +606 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chunkText = chunkText;
|
|
4
|
+
const MAX_CHUNK_CHARS = 3000;
|
|
5
|
+
const MIN_CHUNK_CHARS = 40;
|
|
6
|
+
const IDEAL_CHUNK_CHARS = 1500;
|
|
7
|
+
const FENCED_CODE_RE = /^(`{3,})[^\n]*\n[\s\S]*?^\1\s*$/gm;
|
|
8
|
+
const FUNC_OPEN_RE = /^[ \t]*(?:(?:export\s+)?(?:async\s+)?(?:function|class|const\s+\w+\s*=\s*(?:\([^)]*\)|[^=])*=>)|(?:def |class )|(?:func |fn |pub\s+fn )|(?:public |private |protected |static )+.*\{)\s*$/;
|
|
9
|
+
const BLOCK_CLOSE_RE = /^[ \t]*[}\]]\s*;?\s*$/;
|
|
10
|
+
const ERROR_STACK_RE = /(?:(?:Error|Exception|Traceback)[^\n]*\n(?:\s+at\s+[^\n]+\n?|.*File "[^\n]+\n?|.*line \d+[^\n]*\n?){2,})/gm;
|
|
11
|
+
const LIST_BLOCK_RE = /(?:^[\s]*[-*•]\s+.+\n?){3,}/gm;
|
|
12
|
+
const COMMAND_LINE_RE = /^(?:\$|>|#)\s+.+$/gm;
|
|
13
|
+
/**
|
|
14
|
+
* Semantic-aware chunking:
|
|
15
|
+
* 1. Extract fenced code blocks as whole units (never split inside)
|
|
16
|
+
* 2. Detect unfenced code regions by brace-matching (functions/classes kept intact)
|
|
17
|
+
* 3. Extract error stacks, list blocks, command lines
|
|
18
|
+
* 4. Split remaining prose at paragraph boundaries (double newline)
|
|
19
|
+
* 5. Merge short adjacent chunks of the same kind
|
|
20
|
+
*/
|
|
21
|
+
function chunkText(text) {
|
|
22
|
+
let remaining = text;
|
|
23
|
+
const slots = [];
|
|
24
|
+
let counter = 0;
|
|
25
|
+
function ph(content, kind) {
|
|
26
|
+
const tag = `\x00SLOT_${counter++}\x00`;
|
|
27
|
+
slots.push({ placeholder: tag, chunk: { content: content.trim(), kind } });
|
|
28
|
+
return tag;
|
|
29
|
+
}
|
|
30
|
+
remaining = remaining.replace(FENCED_CODE_RE, (m) => ph(m, "code_block"));
|
|
31
|
+
remaining = extractBraceBlocks(remaining, ph);
|
|
32
|
+
const structural = [
|
|
33
|
+
{ re: ERROR_STACK_RE, kind: "error_stack" },
|
|
34
|
+
{ re: LIST_BLOCK_RE, kind: "list" },
|
|
35
|
+
{ re: COMMAND_LINE_RE, kind: "command" },
|
|
36
|
+
];
|
|
37
|
+
for (const { re, kind } of structural) {
|
|
38
|
+
remaining = remaining.replace(re, (m) => ph(m, kind));
|
|
39
|
+
}
|
|
40
|
+
const raw = [];
|
|
41
|
+
const sections = remaining.split(/\n{2,}/);
|
|
42
|
+
for (const sec of sections) {
|
|
43
|
+
const trimmed = sec.trim();
|
|
44
|
+
if (!trimmed)
|
|
45
|
+
continue;
|
|
46
|
+
if (trimmed.includes("\x00SLOT_")) {
|
|
47
|
+
const parts = trimmed.split(/(\x00SLOT_\d+\x00)/);
|
|
48
|
+
for (const part of parts) {
|
|
49
|
+
const slot = slots.find((s) => s.placeholder === part);
|
|
50
|
+
if (slot) {
|
|
51
|
+
raw.push(slot.chunk);
|
|
52
|
+
}
|
|
53
|
+
else if (part.trim().length >= MIN_CHUNK_CHARS) {
|
|
54
|
+
raw.push({ content: part.trim(), kind: "paragraph" });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (trimmed.length >= MIN_CHUNK_CHARS) {
|
|
59
|
+
raw.push({ content: trimmed, kind: "paragraph" });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
for (const s of slots) {
|
|
63
|
+
if (!raw.some((c) => c.content === s.chunk.content)) {
|
|
64
|
+
raw.push(s.chunk);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const merged = mergeSmallChunks(raw);
|
|
68
|
+
const final = splitOversized(merged);
|
|
69
|
+
return final.length > 0 ? final : [{ content: text.trim(), kind: "paragraph" }];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Detect function/class bodies that aren't inside fenced blocks.
|
|
73
|
+
* Tracks brace depth to keep complete blocks together.
|
|
74
|
+
*/
|
|
75
|
+
function extractBraceBlocks(text, ph) {
|
|
76
|
+
const lines = text.split("\n");
|
|
77
|
+
const result = [];
|
|
78
|
+
let blockLines = [];
|
|
79
|
+
let depth = 0;
|
|
80
|
+
let inBlock = false;
|
|
81
|
+
for (let i = 0; i < lines.length; i++) {
|
|
82
|
+
const line = lines[i];
|
|
83
|
+
if (line.includes("\x00SLOT_")) {
|
|
84
|
+
if (inBlock) {
|
|
85
|
+
blockLines.push(line);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
result.push(line);
|
|
89
|
+
}
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (!inBlock && FUNC_OPEN_RE.test(line)) {
|
|
93
|
+
inBlock = true;
|
|
94
|
+
blockLines = [line];
|
|
95
|
+
depth = countBraces(line);
|
|
96
|
+
if (depth <= 0)
|
|
97
|
+
depth = 1;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (inBlock) {
|
|
101
|
+
blockLines.push(line);
|
|
102
|
+
depth += countBraces(line);
|
|
103
|
+
if (depth <= 0 || (BLOCK_CLOSE_RE.test(line) && depth <= 0)) {
|
|
104
|
+
const block = blockLines.join("\n");
|
|
105
|
+
if (block.trim().length >= MIN_CHUNK_CHARS) {
|
|
106
|
+
result.push(ph(block, "code_block"));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
result.push(block);
|
|
110
|
+
}
|
|
111
|
+
inBlock = false;
|
|
112
|
+
blockLines = [];
|
|
113
|
+
depth = 0;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
result.push(line);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (blockLines.length > 0) {
|
|
121
|
+
const block = blockLines.join("\n");
|
|
122
|
+
if (block.trim().length >= MIN_CHUNK_CHARS) {
|
|
123
|
+
result.push(ph(block, "code_block"));
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
result.push(block);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return result.join("\n");
|
|
130
|
+
}
|
|
131
|
+
function countBraces(line) {
|
|
132
|
+
let d = 0;
|
|
133
|
+
for (const ch of line) {
|
|
134
|
+
if (ch === "{" || ch === "(")
|
|
135
|
+
d++;
|
|
136
|
+
else if (ch === "}" || ch === ")")
|
|
137
|
+
d--;
|
|
138
|
+
}
|
|
139
|
+
return d;
|
|
140
|
+
}
|
|
141
|
+
function mergeSmallChunks(chunks) {
|
|
142
|
+
if (chunks.length <= 1)
|
|
143
|
+
return chunks;
|
|
144
|
+
const merged = [];
|
|
145
|
+
let buf = null;
|
|
146
|
+
for (const c of chunks) {
|
|
147
|
+
if (!buf) {
|
|
148
|
+
buf = { ...c };
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
const sameKind = buf.kind === c.kind;
|
|
152
|
+
const bothSmall = buf.content.length < IDEAL_CHUNK_CHARS && c.content.length < IDEAL_CHUNK_CHARS;
|
|
153
|
+
const mergedLen = buf.content.length + c.content.length + 2;
|
|
154
|
+
if (sameKind && bothSmall && mergedLen <= MAX_CHUNK_CHARS) {
|
|
155
|
+
buf.content = buf.content + "\n\n" + c.content;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
merged.push(buf);
|
|
159
|
+
buf = { ...c };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (buf)
|
|
163
|
+
merged.push(buf);
|
|
164
|
+
return merged;
|
|
165
|
+
}
|
|
166
|
+
function splitOversized(chunks) {
|
|
167
|
+
const result = [];
|
|
168
|
+
for (const c of chunks) {
|
|
169
|
+
if (c.content.length <= MAX_CHUNK_CHARS || c.kind === "code_block") {
|
|
170
|
+
result.push(c);
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
result.push(...splitAtSentenceBoundary(c.content, c.kind));
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
function splitAtSentenceBoundary(text, kind) {
|
|
178
|
+
const sentences = text.match(/[^.!?。!?\n]+(?:[.!?。!?]+|\n{2,})/g) ?? [text];
|
|
179
|
+
const result = [];
|
|
180
|
+
let buf = "";
|
|
181
|
+
for (const s of sentences) {
|
|
182
|
+
if (buf.length + s.length > MAX_CHUNK_CHARS && buf.length > 0) {
|
|
183
|
+
result.push({ content: buf.trim(), kind });
|
|
184
|
+
buf = "";
|
|
185
|
+
}
|
|
186
|
+
buf += s;
|
|
187
|
+
}
|
|
188
|
+
if (buf.trim().length >= MIN_CHUNK_CHARS) {
|
|
189
|
+
result.push({ content: buf.trim(), kind });
|
|
190
|
+
}
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=chunker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../src/ingest/chunker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SqliteStore } from "../storage/sqlite";
|
|
2
|
+
import type { Logger } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* Check if a new summary embedding is a near-duplicate of any
|
|
5
|
+
* existing embedding. If similarity >= threshold, return the
|
|
6
|
+
* existing chunk ID to merge/update instead of creating a new entry.
|
|
7
|
+
*
|
|
8
|
+
* PRD §4.4: dedup threshold 0.92–0.95
|
|
9
|
+
*/
|
|
10
|
+
export declare function findDuplicate(store: SqliteStore, newVec: number[], threshold: number, log: Logger): string | null;
|
|
11
|
+
//# sourceMappingURL=dedup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../../src/ingest/dedup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAoBf"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findDuplicate = findDuplicate;
|
|
4
|
+
const vector_1 = require("../storage/vector");
|
|
5
|
+
/**
|
|
6
|
+
* Check if a new summary embedding is a near-duplicate of any
|
|
7
|
+
* existing embedding. If similarity >= threshold, return the
|
|
8
|
+
* existing chunk ID to merge/update instead of creating a new entry.
|
|
9
|
+
*
|
|
10
|
+
* PRD §4.4: dedup threshold 0.92–0.95
|
|
11
|
+
*/
|
|
12
|
+
function findDuplicate(store, newVec, threshold, log) {
|
|
13
|
+
const all = store.getAllEmbeddings();
|
|
14
|
+
let bestId = null;
|
|
15
|
+
let bestScore = 0;
|
|
16
|
+
for (const { chunkId, vector } of all) {
|
|
17
|
+
const sim = (0, vector_1.cosineSimilarity)(newVec, vector);
|
|
18
|
+
if (sim > bestScore) {
|
|
19
|
+
bestScore = sim;
|
|
20
|
+
bestId = chunkId;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (bestId && bestScore >= threshold) {
|
|
24
|
+
log.debug(`Dedup: found duplicate chunk=${bestId} sim=${bestScore.toFixed(4)}`);
|
|
25
|
+
return bestId;
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=dedup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedup.js","sourceRoot":"","sources":["../../src/ingest/dedup.ts"],"names":[],"mappings":";;AAWA,sCAyBC;AApCD,8CAAqD;AAIrD;;;;;;GAMG;AACH,SAAgB,aAAa,CAC3B,KAAkB,EAClB,MAAgB,EAChB,SAAiB,EACjB,GAAW;IAEX,MAAM,GAAG,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAErC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,IAAA,yBAAgB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;YACpB,SAAS,GAAG,GAAG,CAAC;YAChB,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;QACrC,GAAG,CAAC,KAAK,CAAC,gCAAgC,MAAM,QAAQ,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI5D,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAgCjB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.summarizeAnthropic = summarizeAnthropic;
|
|
4
|
+
const SYSTEM_PROMPT = `Summarize the text in ONE concise sentence (max 60 tokens). Preserve exact names, commands, error codes. No bullet points, no preamble — output only the sentence.`;
|
|
5
|
+
async function summarizeAnthropic(text, cfg, log) {
|
|
6
|
+
const endpoint = cfg.endpoint ?? "https://api.anthropic.com/v1/messages";
|
|
7
|
+
const model = cfg.model ?? "claude-3-haiku-20240307";
|
|
8
|
+
const headers = {
|
|
9
|
+
"Content-Type": "application/json",
|
|
10
|
+
"x-api-key": cfg.apiKey ?? "",
|
|
11
|
+
"anthropic-version": "2023-06-01",
|
|
12
|
+
...cfg.headers,
|
|
13
|
+
};
|
|
14
|
+
const resp = await fetch(endpoint, {
|
|
15
|
+
method: "POST",
|
|
16
|
+
headers,
|
|
17
|
+
body: JSON.stringify({
|
|
18
|
+
model,
|
|
19
|
+
max_tokens: 100,
|
|
20
|
+
temperature: cfg.temperature ?? 0,
|
|
21
|
+
system: SYSTEM_PROMPT,
|
|
22
|
+
messages: [{ role: "user", content: text }],
|
|
23
|
+
}),
|
|
24
|
+
signal: AbortSignal.timeout(cfg.timeoutMs ?? 30_000),
|
|
25
|
+
});
|
|
26
|
+
if (!resp.ok) {
|
|
27
|
+
const body = await resp.text();
|
|
28
|
+
throw new Error(`Anthropic summarize failed (${resp.status}): ${body}`);
|
|
29
|
+
}
|
|
30
|
+
const json = (await resp.json());
|
|
31
|
+
return json.content.find((c) => c.type === "text")?.text?.trim() ?? "";
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/ingest/providers/anthropic.ts"],"names":[],"mappings":";;AAIA,gDAoCC;AAtCD,MAAM,aAAa,GAAG,oKAAoK,CAAC;AAEpL,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,GAAqB,EACrB,GAAW;IAEX,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,uCAAuC,CAAC;IACzE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,yBAAyB,CAAC;IACrD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,WAAW,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;QAC7B,mBAAmB,EAAE,YAAY;QACjC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACjC,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,UAAU,EAAE,GAAG;YACf,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;YACjC,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SAC5C,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SummarizerConfig, Logger } from "../../types";
|
|
2
|
+
/**
|
|
3
|
+
* AWS Bedrock Converse API adapter.
|
|
4
|
+
* Expects cfg.endpoint to be the full Bedrock invoke URL and
|
|
5
|
+
* authentication handled via AWS SDK credential chain (env vars / IAM role).
|
|
6
|
+
*/
|
|
7
|
+
export declare function summarizeBedrock(text: string, cfg: SummarizerConfig, log: Logger): Promise<string>;
|
|
8
|
+
//# sourceMappingURL=bedrock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/bedrock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI5D;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAoCjB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.summarizeBedrock = summarizeBedrock;
|
|
4
|
+
const SYSTEM_PROMPT = `Summarize the text in ONE concise sentence (max 60 tokens). Preserve exact names, commands, error codes. No bullet points, no preamble — output only the sentence.`;
|
|
5
|
+
/**
|
|
6
|
+
* AWS Bedrock Converse API adapter.
|
|
7
|
+
* Expects cfg.endpoint to be the full Bedrock invoke URL and
|
|
8
|
+
* authentication handled via AWS SDK credential chain (env vars / IAM role).
|
|
9
|
+
*/
|
|
10
|
+
async function summarizeBedrock(text, cfg, log) {
|
|
11
|
+
const model = cfg.model ?? "anthropic.claude-3-haiku-20240307-v1:0";
|
|
12
|
+
const endpoint = cfg.endpoint;
|
|
13
|
+
if (!endpoint) {
|
|
14
|
+
throw new Error("Bedrock summarizer requires 'endpoint' to be set (e.g. https://bedrock-runtime.us-east-1.amazonaws.com)");
|
|
15
|
+
}
|
|
16
|
+
const url = `${endpoint}/model/${model}/converse`;
|
|
17
|
+
const headers = {
|
|
18
|
+
"Content-Type": "application/json",
|
|
19
|
+
...cfg.headers,
|
|
20
|
+
};
|
|
21
|
+
const resp = await fetch(url, {
|
|
22
|
+
method: "POST",
|
|
23
|
+
headers,
|
|
24
|
+
body: JSON.stringify({
|
|
25
|
+
system: [{ text: SYSTEM_PROMPT }],
|
|
26
|
+
messages: [{ role: "user", content: [{ text }] }],
|
|
27
|
+
inferenceConfig: {
|
|
28
|
+
temperature: cfg.temperature ?? 0,
|
|
29
|
+
maxTokens: 100,
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
signal: AbortSignal.timeout(cfg.timeoutMs ?? 30_000),
|
|
33
|
+
});
|
|
34
|
+
if (!resp.ok) {
|
|
35
|
+
const body = await resp.text();
|
|
36
|
+
throw new Error(`Bedrock summarize failed (${resp.status}): ${body}`);
|
|
37
|
+
}
|
|
38
|
+
const json = (await resp.json());
|
|
39
|
+
return json.output?.message?.content?.[0]?.text?.trim() ?? "";
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=bedrock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrock.js","sourceRoot":"","sources":["../../../src/ingest/providers/bedrock.ts"],"names":[],"mappings":";;AASA,4CAwCC;AA/CD,MAAM,aAAa,GAAG,oKAAoK,CAAC;AAE3L;;;;GAIG;AACI,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,GAAqB,EACrB,GAAW;IAEX,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,wCAAwC,CAAC;IACpE,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC,CAAC;IAC7H,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,QAAQ,UAAU,KAAK,WAAW,CAAC;IAClD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;YACjC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjD,eAAe,EAAE;gBACf,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;gBACjC,SAAS,EAAE,GAAG;aACf;SACF,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI5D,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAgCjB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.summarizeGemini = summarizeGemini;
|
|
4
|
+
const SYSTEM_PROMPT = `Summarize the text in ONE concise sentence (max 60 tokens). Preserve exact names, commands, error codes. No bullet points, no preamble — output only the sentence.`;
|
|
5
|
+
async function summarizeGemini(text, cfg, log) {
|
|
6
|
+
const model = cfg.model ?? "gemini-1.5-flash";
|
|
7
|
+
const endpoint = cfg.endpoint ??
|
|
8
|
+
`https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent`;
|
|
9
|
+
const url = `${endpoint}?key=${cfg.apiKey}`;
|
|
10
|
+
const headers = {
|
|
11
|
+
"Content-Type": "application/json",
|
|
12
|
+
...cfg.headers,
|
|
13
|
+
};
|
|
14
|
+
const resp = await fetch(url, {
|
|
15
|
+
method: "POST",
|
|
16
|
+
headers,
|
|
17
|
+
body: JSON.stringify({
|
|
18
|
+
systemInstruction: { parts: [{ text: SYSTEM_PROMPT }] },
|
|
19
|
+
contents: [{ parts: [{ text }] }],
|
|
20
|
+
generationConfig: { temperature: cfg.temperature ?? 0, maxOutputTokens: 100 },
|
|
21
|
+
}),
|
|
22
|
+
signal: AbortSignal.timeout(cfg.timeoutMs ?? 30_000),
|
|
23
|
+
});
|
|
24
|
+
if (!resp.ok) {
|
|
25
|
+
const body = await resp.text();
|
|
26
|
+
throw new Error(`Gemini summarize failed (${resp.status}): ${body}`);
|
|
27
|
+
}
|
|
28
|
+
const json = (await resp.json());
|
|
29
|
+
return json.candidates?.[0]?.content?.parts?.[0]?.text?.trim() ?? "";
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/ingest/providers/gemini.ts"],"names":[],"mappings":";;AAIA,0CAoCC;AAtCD,MAAM,aAAa,GAAG,oKAAoK,CAAC;AAEpL,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,GAAqB,EACrB,GAAW;IAEX,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,kBAAkB,CAAC;IAC9C,MAAM,QAAQ,GACZ,GAAG,CAAC,QAAQ;QACZ,2DAA2D,KAAK,kBAAkB,CAAC;IAErF,MAAM,GAAG,GAAG,GAAG,QAAQ,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;IAC5C,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE;YACvD,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjC,gBAAgB,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE;SAC9E,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SummarizerConfig, Logger } from "../../types";
|
|
2
|
+
export declare class Summarizer {
|
|
3
|
+
private cfg;
|
|
4
|
+
private log;
|
|
5
|
+
constructor(cfg: SummarizerConfig | undefined, log: Logger);
|
|
6
|
+
summarize(text: string): Promise<string>;
|
|
7
|
+
private callProvider;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAM5D,qBAAa,UAAU;IAEnB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,GAAG;gBADH,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,GAAG,EAAE,MAAM;IAGf,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAahC,YAAY;CAkB3B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Summarizer = void 0;
|
|
4
|
+
const openai_1 = require("./openai");
|
|
5
|
+
const anthropic_1 = require("./anthropic");
|
|
6
|
+
const gemini_1 = require("./gemini");
|
|
7
|
+
const bedrock_1 = require("./bedrock");
|
|
8
|
+
class Summarizer {
|
|
9
|
+
cfg;
|
|
10
|
+
log;
|
|
11
|
+
constructor(cfg, log) {
|
|
12
|
+
this.cfg = cfg;
|
|
13
|
+
this.log = log;
|
|
14
|
+
}
|
|
15
|
+
async summarize(text) {
|
|
16
|
+
if (!this.cfg) {
|
|
17
|
+
return ruleFallback(text);
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
return await this.callProvider(text);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
this.log.warn(`Summarizer provider failed, using rule fallback: ${err}`);
|
|
24
|
+
return ruleFallback(text);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async callProvider(text) {
|
|
28
|
+
const cfg = this.cfg;
|
|
29
|
+
switch (cfg.provider) {
|
|
30
|
+
case "openai":
|
|
31
|
+
case "openai_compatible":
|
|
32
|
+
return (0, openai_1.summarizeOpenAI)(text, cfg, this.log);
|
|
33
|
+
case "anthropic":
|
|
34
|
+
return (0, anthropic_1.summarizeAnthropic)(text, cfg, this.log);
|
|
35
|
+
case "gemini":
|
|
36
|
+
return (0, gemini_1.summarizeGemini)(text, cfg, this.log);
|
|
37
|
+
case "azure_openai":
|
|
38
|
+
return (0, openai_1.summarizeOpenAI)(text, cfg, this.log);
|
|
39
|
+
case "bedrock":
|
|
40
|
+
return (0, bedrock_1.summarizeBedrock)(text, cfg, this.log);
|
|
41
|
+
default:
|
|
42
|
+
throw new Error(`Unknown summarizer provider: ${cfg.provider}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.Summarizer = Summarizer;
|
|
47
|
+
/**
|
|
48
|
+
* Rule-based fallback: produce a single short sentence from the first
|
|
49
|
+
* meaningful line, appending any key entities found in the text.
|
|
50
|
+
*/
|
|
51
|
+
function ruleFallback(text) {
|
|
52
|
+
const lines = text.split("\n").filter((l) => l.trim().length > 10);
|
|
53
|
+
const first = (lines[0] ?? text).trim();
|
|
54
|
+
const entityRe = [/`[^`]+`/g, /\b(?:error|Error|ERROR)\s*[::]\s*.{5,60}/g];
|
|
55
|
+
const entities = [];
|
|
56
|
+
for (const re of entityRe) {
|
|
57
|
+
for (const m of text.matchAll(re)) {
|
|
58
|
+
if (entities.length < 3)
|
|
59
|
+
entities.push(m[0].slice(0, 50));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
let summary = first.length > 120 ? first.slice(0, 117) + "..." : first;
|
|
63
|
+
if (entities.length > 0) {
|
|
64
|
+
summary += ` (${entities.join(", ")})`;
|
|
65
|
+
}
|
|
66
|
+
return summary.slice(0, 200);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ingest/providers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ingest/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI5D,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAgCjB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.summarizeOpenAI = summarizeOpenAI;
|
|
4
|
+
const SYSTEM_PROMPT = `Summarize the text in ONE concise sentence (max 60 tokens). Preserve exact names, commands, error codes. No bullet points, no preamble — output only the sentence.`;
|
|
5
|
+
async function summarizeOpenAI(text, cfg, log) {
|
|
6
|
+
const endpoint = normalizeChatEndpoint(cfg.endpoint ?? "https://api.openai.com/v1/chat/completions");
|
|
7
|
+
const model = cfg.model ?? "gpt-4o-mini";
|
|
8
|
+
const headers = {
|
|
9
|
+
"Content-Type": "application/json",
|
|
10
|
+
Authorization: `Bearer ${cfg.apiKey}`,
|
|
11
|
+
...cfg.headers,
|
|
12
|
+
};
|
|
13
|
+
const resp = await fetch(endpoint, {
|
|
14
|
+
method: "POST",
|
|
15
|
+
headers,
|
|
16
|
+
body: JSON.stringify({
|
|
17
|
+
model,
|
|
18
|
+
temperature: cfg.temperature ?? 0,
|
|
19
|
+
messages: [
|
|
20
|
+
{ role: "system", content: SYSTEM_PROMPT },
|
|
21
|
+
{ role: "user", content: text },
|
|
22
|
+
],
|
|
23
|
+
}),
|
|
24
|
+
signal: AbortSignal.timeout(cfg.timeoutMs ?? 30_000),
|
|
25
|
+
});
|
|
26
|
+
if (!resp.ok) {
|
|
27
|
+
const body = await resp.text();
|
|
28
|
+
throw new Error(`OpenAI summarize failed (${resp.status}): ${body}`);
|
|
29
|
+
}
|
|
30
|
+
const json = (await resp.json());
|
|
31
|
+
return json.choices[0]?.message?.content?.trim() ?? "";
|
|
32
|
+
}
|
|
33
|
+
function normalizeChatEndpoint(url) {
|
|
34
|
+
const stripped = url.replace(/\/+$/, "");
|
|
35
|
+
if (stripped.endsWith("/chat/completions"))
|
|
36
|
+
return stripped;
|
|
37
|
+
if (stripped.endsWith("/completions"))
|
|
38
|
+
return stripped;
|
|
39
|
+
return `${stripped}/chat/completions`;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/ingest/providers/openai.ts"],"names":[],"mappings":";;AAIA,0CAoCC;AAtCD,MAAM,aAAa,GAAG,oKAAoK,CAAC;AAEpL,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,GAAqB,EACrB,GAAW;IAEX,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,QAAQ,IAAI,4CAA4C,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,aAAa,CAAC;IACzC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE;QACrC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACjC,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;YACjC,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;gBAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;aAChC;SACF,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC5D,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvD,OAAO,GAAG,QAAQ,mBAAmB,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ConversationMessage, PluginContext } from "../types";
|
|
2
|
+
import type { SqliteStore } from "../storage/sqlite";
|
|
3
|
+
import type { Embedder } from "../embedding";
|
|
4
|
+
export declare class IngestWorker {
|
|
5
|
+
private store;
|
|
6
|
+
private embedder;
|
|
7
|
+
private ctx;
|
|
8
|
+
private summarizer;
|
|
9
|
+
private queue;
|
|
10
|
+
private processing;
|
|
11
|
+
private flushResolvers;
|
|
12
|
+
constructor(store: SqliteStore, embedder: Embedder, ctx: PluginContext);
|
|
13
|
+
enqueue(messages: ConversationMessage[]): void;
|
|
14
|
+
/** Wait until all queued messages have been processed. */
|
|
15
|
+
flush(): Promise<void>;
|
|
16
|
+
private processQueue;
|
|
17
|
+
private ingestMessage;
|
|
18
|
+
private ingestToolResult;
|
|
19
|
+
private storeChunk;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/ingest/worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAS,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAK7C,qBAAa,YAAY;IAOrB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,GAAG;IARb,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAyB;gBAGrC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,aAAa;IAK5B,OAAO,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,IAAI;IAU9C,0DAA0D;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAOd,YAAY;YAiBZ,aAAa;YAeb,gBAAgB;YAKhB,UAAU;CAoDzB"}
|