greptor 0.2.1

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 (67) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +365 -0
  3. package/dist/greptor.d.ts +7 -0
  4. package/dist/greptor.d.ts.map +1 -0
  5. package/dist/greptor.js +98 -0
  6. package/dist/greptor.js.map +1 -0
  7. package/dist/index.d.ts +4 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +3 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/llm/llm-factory.d.ts +7 -0
  12. package/dist/llm/llm-factory.d.ts.map +1 -0
  13. package/dist/llm/llm-factory.js +53 -0
  14. package/dist/llm/llm-factory.js.map +1 -0
  15. package/dist/metadata-schema/generate.d.ts +3 -0
  16. package/dist/metadata-schema/generate.d.ts.map +1 -0
  17. package/dist/metadata-schema/generate.js +43 -0
  18. package/dist/metadata-schema/generate.js.map +1 -0
  19. package/dist/metadata-schema/initialize.d.ts +5 -0
  20. package/dist/metadata-schema/initialize.d.ts.map +1 -0
  21. package/dist/metadata-schema/initialize.js +37 -0
  22. package/dist/metadata-schema/initialize.js.map +1 -0
  23. package/dist/metadata-schema/types.d.ts +34 -0
  24. package/dist/metadata-schema/types.d.ts.map +1 -0
  25. package/dist/metadata-schema/types.js +30 -0
  26. package/dist/metadata-schema/types.js.map +1 -0
  27. package/dist/processing/chunk.d.ts +3 -0
  28. package/dist/processing/chunk.d.ts.map +1 -0
  29. package/dist/processing/chunk.js +36 -0
  30. package/dist/processing/chunk.js.map +1 -0
  31. package/dist/processing/extract-metadata.d.ts +4 -0
  32. package/dist/processing/extract-metadata.d.ts.map +1 -0
  33. package/dist/processing/extract-metadata.js +39 -0
  34. package/dist/processing/extract-metadata.js.map +1 -0
  35. package/dist/processing/processor.d.ts +28 -0
  36. package/dist/processing/processor.d.ts.map +1 -0
  37. package/dist/processing/processor.js +112 -0
  38. package/dist/processing/processor.js.map +1 -0
  39. package/dist/skills/skill-generator.d.ts +16 -0
  40. package/dist/skills/skill-generator.d.ts.map +1 -0
  41. package/dist/skills/skill-generator.js +210 -0
  42. package/dist/skills/skill-generator.js.map +1 -0
  43. package/dist/storage/file-storage.d.ts +16 -0
  44. package/dist/storage/file-storage.d.ts.map +1 -0
  45. package/dist/storage/file-storage.js +162 -0
  46. package/dist/storage/file-storage.js.map +1 -0
  47. package/dist/storage/index.d.ts +3 -0
  48. package/dist/storage/index.d.ts.map +1 -0
  49. package/dist/storage/index.js +3 -0
  50. package/dist/storage/index.js.map +1 -0
  51. package/dist/storage/types.d.ts +16 -0
  52. package/dist/storage/types.d.ts.map +1 -0
  53. package/dist/storage/types.js +2 -0
  54. package/dist/storage/types.js.map +1 -0
  55. package/dist/types.d.ts +53 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +2 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/utils/file.d.ts +2 -0
  60. package/dist/utils/file.d.ts.map +1 -0
  61. package/dist/utils/file.js +11 -0
  62. package/dist/utils/file.js.map +1 -0
  63. package/dist/utils/hash.d.ts +2 -0
  64. package/dist/utils/hash.d.ts.map +1 -0
  65. package/dist/utils/hash.js +5 -0
  66. package/dist/utils/hash.js.map +1 -0
  67. package/package.json +63 -0
@@ -0,0 +1,162 @@
1
+ import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import YAML from "yaml";
4
+ import { fileExists } from "../utils/file.js";
5
+ export function createFileStorage(baseDir) {
6
+ const rawContentPath = path.join(baseDir, "raw");
7
+ const processedContentPath = path.join(baseDir, "processed");
8
+ function resolveLayerPath(layer, ref) {
9
+ return path.join(baseDir, layer, ref);
10
+ }
11
+ function getYearMonthSegment(date) {
12
+ const year = String(date.getUTCFullYear());
13
+ const month = String(date.getUTCMonth() + 1).padStart(2, "0");
14
+ return `${year}-${month}`;
15
+ }
16
+ function sanitize(name, maxLength = 50, fallback = "unknown") {
17
+ const trimmed = name.trim();
18
+ let sanitized = trimmed.toLowerCase().replace(/[^a-z0-9]+/g, "-");
19
+ sanitized = sanitized.replace(/^-+/, "").replace(/-+$/, "");
20
+ sanitized = sanitized.replace(/-+/g, "-");
21
+ if (sanitized.length > maxLength) {
22
+ sanitized = sanitized.slice(0, maxLength);
23
+ }
24
+ return sanitized || fallback;
25
+ }
26
+ function generateDocumentRef(args) {
27
+ const effectiveTimestamp = args.timestamp ?? new Date();
28
+ const isoDate = effectiveTimestamp.toISOString().split("T")[0];
29
+ const safeTitle = sanitize(args.label, 50, "untitled");
30
+ const yearMonth = getYearMonthSegment(effectiveTimestamp);
31
+ const source = sanitize(args.source, 20, "unknown");
32
+ const publisher = args.publisher
33
+ ? sanitize(args.publisher, 50, "unknown")
34
+ : undefined;
35
+ const fileName = `${isoDate}-${safeTitle}.md`;
36
+ return path.posix.join(source, ...(publisher ? [publisher] : []), yearMonth, fileName);
37
+ }
38
+ function buildRawFileContent(input) {
39
+ const yamlHeader = {
40
+ id: input.id,
41
+ title: input.label,
42
+ created_at: input.creationDate
43
+ ? input.creationDate.toISOString()
44
+ : new Date().toISOString(),
45
+ ...input.metadata,
46
+ source: input.source,
47
+ ...(input.publisher ? { publisher: input.publisher } : {}),
48
+ };
49
+ const yamlHeaderString = YAML.stringify(yamlHeader);
50
+ const lines = ["---"];
51
+ lines.push(yamlHeaderString.trim());
52
+ lines.push("---");
53
+ lines.push("");
54
+ lines.push(input.content.trim());
55
+ return lines.join("\n");
56
+ }
57
+ async function listLayerRefs(layer) {
58
+ const rootFull = path.join(baseDir, layer);
59
+ const results = [];
60
+ const walk = async (dirFull, dirRelative) => {
61
+ let entries;
62
+ try {
63
+ entries = await readdir(dirFull, { withFileTypes: true });
64
+ }
65
+ catch {
66
+ return;
67
+ }
68
+ for (const entry of entries) {
69
+ const nextFull = path.join(dirFull, entry.name);
70
+ const nextRelative = path.posix.join(dirRelative, entry.name);
71
+ if (entry.isDirectory()) {
72
+ await walk(nextFull, nextRelative);
73
+ continue;
74
+ }
75
+ if (entry.isFile() && entry.name.toLowerCase().endsWith(".md")) {
76
+ results.push(nextRelative);
77
+ }
78
+ }
79
+ };
80
+ await walk(rootFull, "");
81
+ results.sort((a, b) => a.localeCompare(b));
82
+ return results;
83
+ }
84
+ async function saveRawContent(input) {
85
+ try {
86
+ const content = buildRawFileContent(input);
87
+ const ref = generateDocumentRef({
88
+ label: input.label,
89
+ source: input.source,
90
+ ...(input.publisher ? { publisher: input.publisher } : {}),
91
+ ...(input.creationDate ? { timestamp: input.creationDate } : {}),
92
+ });
93
+ const fullPath = resolveLayerPath("raw", ref);
94
+ if (await fileExists(fullPath)) {
95
+ if (!input.overwrite) {
96
+ return {
97
+ type: "duplicate",
98
+ ref,
99
+ };
100
+ }
101
+ }
102
+ else {
103
+ await mkdir(path.dirname(fullPath), { recursive: true });
104
+ }
105
+ await writeFile(fullPath, content, "utf8");
106
+ return {
107
+ type: "added",
108
+ ref,
109
+ };
110
+ }
111
+ catch (error) {
112
+ const errorMessage = error instanceof Error ? error.message : String(error);
113
+ return {
114
+ type: "error",
115
+ message: errorMessage,
116
+ };
117
+ }
118
+ }
119
+ async function readRawContent(ref) {
120
+ const fullPath = resolveLayerPath("raw", ref);
121
+ const content = await readFile(fullPath, "utf8");
122
+ if (!content.startsWith("---\n")) {
123
+ throw new Error(`Invalid raw file format. The file '${ref}' doesn't have yaml header.`);
124
+ }
125
+ const endIndex = content.indexOf("\n---", 4);
126
+ if (endIndex === -1) {
127
+ throw new Error(`Invalid raw file format. The file '${ref}' doesn't have yaml header.`);
128
+ }
129
+ const after = content.slice(endIndex + 4);
130
+ const body = after.startsWith("\n") ? after.slice(1) : after;
131
+ const yamlHeader = content.slice(4, endIndex).trimEnd();
132
+ const parsed = YAML.parse(yamlHeader);
133
+ if (typeof parsed !== "object" ||
134
+ parsed === null ||
135
+ Array.isArray(parsed)) {
136
+ throw new Error(`Invalid raw file format. The file '${ref}' has a non-object yaml header.`);
137
+ }
138
+ const metadata = parsed;
139
+ return { metadata, content: body };
140
+ }
141
+ async function getUnprocessedContents() {
142
+ const rawRefs = await listLayerRefs("raw");
143
+ const processedRefs = await listLayerRefs("processed");
144
+ const processedSet = new Set(processedRefs);
145
+ return rawRefs.filter((ref) => !processedSet.has(ref));
146
+ }
147
+ async function saveProcessedContent(ref, content) {
148
+ const processedFullPath = resolveLayerPath("processed", ref);
149
+ await mkdir(path.dirname(processedFullPath), { recursive: true });
150
+ await writeFile(processedFullPath, content, "utf8");
151
+ }
152
+ return {
153
+ baseDir,
154
+ rawContentPath,
155
+ processedContentPath,
156
+ saveRawContent,
157
+ readRawContent,
158
+ getUnprocessedContents,
159
+ saveProcessedContent,
160
+ };
161
+ }
162
+ //# sourceMappingURL=file-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-storage.js","sourceRoot":"","sources":["../../src/storage/file-storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAMxB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAe9C,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAChD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAE7D,SAAS,gBAAgB,CACxB,KAA0B,EAC1B,GAAgB;QAEhB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,SAAS,mBAAmB,CAAC,IAAU;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9D,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,SAAS,QAAQ,CAChB,IAAY,EACZ,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,SAAS;QAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAClE,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5D,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE1C,IAAI,SAAS,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAClC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,SAAS,IAAI,QAAQ,CAAC;IAC9B,CAAC;IAED,SAAS,mBAAmB,CAAC,IAK5B;QACA,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;YAC/B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC;YACzC,CAAC,CAAC,SAAS,CAAC;QACb,MAAM,QAAQ,GAAG,GAAG,OAAO,IAAI,SAAS,KAAK,CAAC;QAE9C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CACrB,MAAM,EACN,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACjC,SAAS,EACT,QAAQ,CACR,CAAC;IACH,CAAC;IAED,SAAS,mBAAmB,CAAC,KAAsB;QAClD,MAAM,UAAU,GAAG;YAClB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,KAAK,CAAC,YAAY;gBAC7B,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE;gBAClC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC3B,GAAG,KAAK,CAAC,QAAQ;YACjB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1D,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAEpD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,UAAU,aAAa,CAC3B,KAA0B;QAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,MAAM,IAAI,GAAG,KAAK,EACjB,OAAe,EACf,WAAmB,EACH,EAAE;YAClB,IAAI,OAAiB,CAAC;YACtB,IAAI,CAAC;gBACJ,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO;YACR,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9D,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACzB,MAAM,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;oBACnC,SAAS;gBACV,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC5B,CAAC;YACF,CAAC;QACF,CAAC,CAAC;QAEF,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,UAAU,cAAc,CAC5B,KAAsB;QAEtB,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,mBAAmB,CAAC;gBAC/B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;oBACtB,OAAO;wBACN,IAAI,EAAE,WAAW;wBACjB,GAAG;qBACH,CAAC;gBACH,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3C,OAAO;gBACN,IAAI,EAAE,OAAO;gBACb,GAAG;aACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,YAAY,GACjB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxD,OAAO;gBACN,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,YAAY;aACrB,CAAC;QACH,CAAC;IACF,CAAC;IAED,KAAK,UAAU,cAAc,CAC5B,GAAgB;QAEhB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACd,sCAAsC,GAAG,6BAA6B,CACtE,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACd,sCAAsC,GAAG,6BAA6B,CACtE,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAY,CAAC;QACjD,IACC,OAAO,MAAM,KAAK,QAAQ;YAC1B,MAAM,KAAK,IAAI;YACf,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACpB,CAAC;YACF,MAAM,IAAI,KAAK,CACd,sCAAsC,GAAG,iCAAiC,CAC1E,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAkB,CAAC;QAEpC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,UAAU,sBAAsB;QACpC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,UAAU,oBAAoB,CAClC,GAAgB,EAChB,OAAe;QAEf,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,SAAS,CAAC,iBAAiB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,OAAO;QACN,OAAO;QACP,cAAc;QACd,oBAAoB;QACpB,cAAc;QACd,cAAc;QACd,sBAAsB;QACtB,oBAAoB;KACpB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export * from "./file-storage.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export * from "./file-storage.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Reference to a stored document under Greptor's data directory.
3
+ * A relative path like `source/publisher/2025-12/2025-12-06-some-label.md`
4
+ */
5
+ export type DocumentRef = string;
6
+ export type DocumentAddResult = {
7
+ type: "added";
8
+ ref: DocumentRef;
9
+ } | {
10
+ type: "duplicate";
11
+ ref: DocumentRef;
12
+ } | {
13
+ type: "error";
14
+ message: string;
15
+ };
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,MAAM,MAAM,iBAAiB,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,WAAW,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,WAAW,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ import type { DocumentRef } from "./storage/types.js";
2
+ export interface Logger {
3
+ debug?: (message: string, ...meta: unknown[]) => void;
4
+ info?: (message: string, ...meta: unknown[]) => void;
5
+ warn?: (message: string, ...meta: unknown[]) => void;
6
+ error?: (message: string | Error, ...meta: unknown[]) => void;
7
+ }
8
+ export interface GreptorOptions {
9
+ baseDir: string;
10
+ topic: string;
11
+ llmModel: string;
12
+ workers?: number;
13
+ metadataSchema?: MetadataSchema;
14
+ logger?: Logger;
15
+ }
16
+ export type MetadataSchema = MetadataSchemaItem[];
17
+ export interface MetadataSchemaItem {
18
+ name: string;
19
+ type: "string" | "string[]" | "number" | "number[]" | "enum" | "enum[]" | "date" | "boolean";
20
+ description: string;
21
+ enumValues?: string[];
22
+ }
23
+ export type SupportedFormat = "text";
24
+ export type MetadataValueType = string | number | boolean | Date | string[] | number[] | boolean[];
25
+ export type Metadata = Record<string, MetadataValueType>;
26
+ export interface GreptorEatInput {
27
+ content: string;
28
+ format: SupportedFormat;
29
+ label: string;
30
+ source: string;
31
+ publisher?: string;
32
+ id?: string;
33
+ creationDate?: Date;
34
+ metadata?: Metadata;
35
+ overwrite?: boolean;
36
+ }
37
+ export type GreptorEatResult = {
38
+ success: true;
39
+ message: string;
40
+ ref: DocumentRef;
41
+ } | {
42
+ success: false;
43
+ message: string;
44
+ };
45
+ export type CreateSkillResult = {
46
+ success: true;
47
+ message: string;
48
+ skillPath: string;
49
+ } | {
50
+ success: false;
51
+ message: string;
52
+ };
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,MAAM;IACtB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACtD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CAC9D;AAED,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,EAAE,CAAC;AAElD,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EACD,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,UAAU,GACV,MAAM,GACN,QAAQ,GACR,MAAM,GACN,SAAS,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,MAAM,iBAAiB,GAC1B,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,MAAM,EAAE,GACR,MAAM,EAAE,GACR,OAAO,EAAE,CAAC;AAEb,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GACzB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,WAAW,CAAA;CAAE,GACpD;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,MAAM,MAAM,iBAAiB,GAC1B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare function fileExists(filePath: string): Promise<boolean>;
2
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAEA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE"}
@@ -0,0 +1,11 @@
1
+ import { access } from "node:fs/promises";
2
+ export async function fileExists(filePath) {
3
+ try {
4
+ await access(filePath);
5
+ return true;
6
+ }
7
+ catch {
8
+ return false;
9
+ }
10
+ }
11
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAChD,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function computeContentHash(content: string): string;
2
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,5 @@
1
+ import crypto from "node:crypto";
2
+ export function computeContentHash(content) {
3
+ return crypto.createHash("sha256").update(content, "utf8").digest("hex");
4
+ }
5
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,UAAU,kBAAkB,CAAC,OAAe;IACjD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "greptor",
3
+ "version": "0.2.1",
4
+ "type": "module",
5
+ "description": "Transform messy, unstructured text into clean, grep-friendly data for agentic search workflows.",
6
+ "license": "MIT",
7
+ "author": "Sergii Vashchyshchuk",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/sniko/greptor.git"
11
+ },
12
+ "keywords": [
13
+ "grep",
14
+ "search",
15
+ "ingestion",
16
+ "llm",
17
+ "rag",
18
+ "markdown",
19
+ "yaml"
20
+ ],
21
+ "main": "./dist/index.js",
22
+ "sideEffects": false,
23
+ "files": [
24
+ "dist",
25
+ "README.md",
26
+ "LICENSE"
27
+ ],
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js",
32
+ "default": "./dist/index.js"
33
+ },
34
+ "./package.json": "./package.json"
35
+ },
36
+ "types": "./dist/index.d.ts",
37
+ "scripts": {
38
+ "build": "rm -rf dist && tsc",
39
+ "prepublishOnly": "npm run build",
40
+ "demo": "bun run scripts/test.ts",
41
+ "typecheck": "tsc --noEmit -p tsconfig.json",
42
+ "lint": "biome check .",
43
+ "fix": "biome format --write",
44
+ "changeset": "bunx changeset",
45
+ "version": "bunx changeset version"
46
+ },
47
+ "engines": {
48
+ "node": ">=18.0.0",
49
+ "bun": ">=1.0.0"
50
+ },
51
+ "devDependencies": {
52
+ "@biomejs/biome": "^1.9.3",
53
+ "@changesets/cli": "^2.29.8",
54
+ "@types/bun": "latest",
55
+ "@types/node": "^22.10.2",
56
+ "typescript": "^5.6.3"
57
+ },
58
+ "dependencies": {
59
+ "openai": "^6.8.1",
60
+ "yaml": "^2.8.2",
61
+ "zod": "^4.1.12"
62
+ }
63
+ }