@fingerskier/augment 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/LICENSE +201 -0
- package/README.md +130 -0
- package/dist/bin/augment-daemon.d.ts +2 -0
- package/dist/bin/augment-daemon.js +5 -0
- package/dist/bin/augment-daemon.js.map +1 -0
- package/dist/bin/augment-mcp.d.ts +2 -0
- package/dist/bin/augment-mcp.js +5 -0
- package/dist/bin/augment-mcp.js.map +1 -0
- package/dist/bin/augment.d.ts +2 -0
- package/dist/bin/augment.js +5 -0
- package/dist/bin/augment.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +11 -0
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -0
- package/dist/daemon/client.d.ts +19 -0
- package/dist/daemon/client.js +146 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/http.d.ts +8 -0
- package/dist/daemon/http.js +142 -0
- package/dist/daemon/http.js.map +1 -0
- package/dist/daemon/main.d.ts +1 -0
- package/dist/daemon/main.js +16 -0
- package/dist/daemon/main.js.map +1 -0
- package/dist/db.d.ts +33 -0
- package/dist/db.js +338 -0
- package/dist/db.js.map +1 -0
- package/dist/embeddings.d.ts +20 -0
- package/dist/embeddings.js +35 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +91 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory/files.d.ts +11 -0
- package/dist/memory/files.js +107 -0
- package/dist/memory/files.js.map +1 -0
- package/dist/memory/project.d.ts +8 -0
- package/dist/memory/project.js +59 -0
- package/dist/memory/project.js.map +1 -0
- package/dist/memory/scan.d.ts +1 -0
- package/dist/memory/scan.js +29 -0
- package/dist/memory/scan.js.map +1 -0
- package/dist/service.d.ts +43 -0
- package/dist/service.js +339 -0
- package/dist/service.js.map +1 -0
- package/dist/types.d.ts +95 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/util/hash.d.ts +3 -0
- package/dist/util/hash.js +25 -0
- package/dist/util/hash.js.map +1 -0
- package/dist/util/text.d.ts +4 -0
- package/dist/util/text.js +42 -0
- package/dist/util/text.js.map +1 -0
- package/docs/FEATURES.md +245 -0
- package/integrations/claude/CLAUDE.md +28 -0
- package/integrations/codex/SKILL.md +29 -0
- package/integrations/examples/claude-mcp-config.json +11 -0
- package/integrations/examples/codex-mcp-config.json +11 -0
- package/package.json +45 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import * as z from "zod/v4";
|
|
4
|
+
import { LINK_TYPES, MEMORY_KINDS } from "../constants.js";
|
|
5
|
+
import { connectOrStartDaemon } from "../daemon/client.js";
|
|
6
|
+
import { inferProjectName } from "../memory/project.js";
|
|
7
|
+
export async function startMcpServer() {
|
|
8
|
+
const server = new McpServer({
|
|
9
|
+
name: "augment",
|
|
10
|
+
version: "0.1.0",
|
|
11
|
+
});
|
|
12
|
+
server.registerTool("init_project", {
|
|
13
|
+
description: "Infer or upsert the current project and return its local project record.",
|
|
14
|
+
inputSchema: {
|
|
15
|
+
project_name: z.string().optional(),
|
|
16
|
+
},
|
|
17
|
+
}, async ({ project_name }) => {
|
|
18
|
+
const client = await connectOrStartDaemon();
|
|
19
|
+
const resolved = project_name ?? (await inferProjectName());
|
|
20
|
+
return textResult(await client.initProject({ project_name: resolved }));
|
|
21
|
+
});
|
|
22
|
+
server.registerTool("list_projects", {
|
|
23
|
+
description: "List known Augment projects.",
|
|
24
|
+
inputSchema: {
|
|
25
|
+
name: z.string().optional(),
|
|
26
|
+
},
|
|
27
|
+
}, async ({ name }) => textResult(await (await connectOrStartDaemon()).listProjects(name)));
|
|
28
|
+
server.registerTool("search", {
|
|
29
|
+
description: "Search memories and return text suitable for direct context injection.",
|
|
30
|
+
inputSchema: {
|
|
31
|
+
project_name: z.string().optional(),
|
|
32
|
+
query: z.string(),
|
|
33
|
+
limit: z.number().int().positive().max(20).optional(),
|
|
34
|
+
max_chars: z.number().int().positive().max(50_000).optional(),
|
|
35
|
+
kinds: z.array(z.enum(MEMORY_KINDS)).optional(),
|
|
36
|
+
include_linked: z.boolean().optional(),
|
|
37
|
+
},
|
|
38
|
+
}, async (input) => {
|
|
39
|
+
const client = await connectOrStartDaemon();
|
|
40
|
+
const project_name = input.project_name ?? (await inferProjectName());
|
|
41
|
+
const output = (await client.search({ ...input, project_name }));
|
|
42
|
+
return {
|
|
43
|
+
content: [{ type: "text", text: output.text ?? JSON.stringify(output, null, 2) }],
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
server.registerTool("upsert", {
|
|
47
|
+
description: "Create or update a memory file and immediately reindex it.",
|
|
48
|
+
inputSchema: {
|
|
49
|
+
project_id: z.number().int().positive(),
|
|
50
|
+
memory_id: z.number().int().positive().optional(),
|
|
51
|
+
kind: z.enum(MEMORY_KINDS).optional(),
|
|
52
|
+
name: z.string(),
|
|
53
|
+
content: z.string(),
|
|
54
|
+
tags: z.array(z.string()).optional(),
|
|
55
|
+
},
|
|
56
|
+
}, async (input) => textResult(await (await connectOrStartDaemon()).upsert(input)));
|
|
57
|
+
server.registerTool("read", {
|
|
58
|
+
description: "Read a full memory record and body by local memory ID.",
|
|
59
|
+
inputSchema: {
|
|
60
|
+
id: z.number().int().positive(),
|
|
61
|
+
},
|
|
62
|
+
}, async ({ id }) => textResult(await (await connectOrStartDaemon()).read(id)));
|
|
63
|
+
server.registerTool("link", {
|
|
64
|
+
description: "Create a directional link between two local memories.",
|
|
65
|
+
inputSchema: {
|
|
66
|
+
from_memory_id: z.number().int().positive(),
|
|
67
|
+
to_memory_id: z.number().int().positive(),
|
|
68
|
+
type: z.enum(LINK_TYPES).optional(),
|
|
69
|
+
},
|
|
70
|
+
}, async (input) => textResult(await (await connectOrStartDaemon()).link(input)));
|
|
71
|
+
server.registerTool("list_links", {
|
|
72
|
+
description: "List inbound and outbound links involving a memory.",
|
|
73
|
+
inputSchema: {
|
|
74
|
+
memory_id: z.number().int().positive(),
|
|
75
|
+
},
|
|
76
|
+
}, async ({ memory_id }) => textResult(await (await connectOrStartDaemon()).listLinks(memory_id)));
|
|
77
|
+
server.registerTool("unlink", {
|
|
78
|
+
description: "Remove a link by local link ID.",
|
|
79
|
+
inputSchema: {
|
|
80
|
+
id: z.number().int().positive(),
|
|
81
|
+
},
|
|
82
|
+
}, async ({ id }) => textResult(await (await connectOrStartDaemon()).unlink(id)));
|
|
83
|
+
await server.connect(new StdioServerTransport());
|
|
84
|
+
}
|
|
85
|
+
function textResult(value) {
|
|
86
|
+
const text = typeof value === "object" && value !== null && "text" in value ? String(value.text) : JSON.stringify(value, null, 2);
|
|
87
|
+
return {
|
|
88
|
+
content: [{ type: "text", text }],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type LinkType, type MemoryKind } from "../constants.js";
|
|
2
|
+
import type { MemoryFrontmatter, ParsedMemory } from "../types.js";
|
|
3
|
+
export declare function normalizeKind(kind: string | undefined): MemoryKind;
|
|
4
|
+
export declare function normalizeLinkType(type: string | undefined): LinkType;
|
|
5
|
+
export declare function memoryRelativePath(projectName: string, kind: MemoryKind, name: string): string;
|
|
6
|
+
export declare function relativePathToMetadata(relativePath: string): Pick<MemoryFrontmatter, "project" | "kind" | "name">;
|
|
7
|
+
export declare function readMemory(memoryRoot: string, relativePath: string): Promise<ParsedMemory>;
|
|
8
|
+
export declare function writeMemory(memoryRoot: string, relativePath: string, frontmatter: MemoryFrontmatter, body: string): Promise<void>;
|
|
9
|
+
export declare function normalizeRelativePath(value: string): string;
|
|
10
|
+
export declare function normalizeFrontmatter(value: Record<string, unknown>, fallback: Pick<MemoryFrontmatter, "project" | "kind" | "name">): MemoryFrontmatter;
|
|
11
|
+
export declare function memoryToEmbeddingText(memory: Pick<ParsedMemory, "frontmatter" | "body" | "relativePath">): string;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import matter from "gray-matter";
|
|
4
|
+
import { LINK_TYPES, MEMORY_KINDS } from "../constants.js";
|
|
5
|
+
import { gzipDensity, sha256, stableJson } from "../util/hash.js";
|
|
6
|
+
import { projectParts, safeSegment } from "./project.js";
|
|
7
|
+
export function normalizeKind(kind) {
|
|
8
|
+
const normalized = (kind ?? "WORK").toUpperCase();
|
|
9
|
+
if (!MEMORY_KINDS.includes(normalized)) {
|
|
10
|
+
throw new Error(`Invalid memory kind: ${kind}`);
|
|
11
|
+
}
|
|
12
|
+
return normalized;
|
|
13
|
+
}
|
|
14
|
+
export function normalizeLinkType(type) {
|
|
15
|
+
const normalized = (type ?? "RELATED").toUpperCase();
|
|
16
|
+
if (!LINK_TYPES.includes(normalized)) {
|
|
17
|
+
throw new Error(`Invalid link type: ${type}`);
|
|
18
|
+
}
|
|
19
|
+
return normalized;
|
|
20
|
+
}
|
|
21
|
+
export function memoryRelativePath(projectName, kind, name) {
|
|
22
|
+
const parts = projectParts(projectName);
|
|
23
|
+
return path.posix.join(parts.org, parts.repo, kind, `${safeSegment(name)}.md`);
|
|
24
|
+
}
|
|
25
|
+
export function relativePathToMetadata(relativePath) {
|
|
26
|
+
const normalized = relativePath.replace(/\\/g, "/");
|
|
27
|
+
const parts = normalized.split("/");
|
|
28
|
+
if (parts.length < 4) {
|
|
29
|
+
throw new Error(`Memory path must be org/repo/kind/name.md: ${relativePath}`);
|
|
30
|
+
}
|
|
31
|
+
const [org, repo, kind, ...nameParts] = parts;
|
|
32
|
+
const filename = nameParts.join("/");
|
|
33
|
+
return {
|
|
34
|
+
project: `${safeSegment(org)}/${safeSegment(repo)}`,
|
|
35
|
+
kind: normalizeKind(kind),
|
|
36
|
+
name: safeSegment(path.posix.basename(filename, ".md")),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export async function readMemory(memoryRoot, relativePath) {
|
|
40
|
+
const normalizedRelativePath = normalizeRelativePath(relativePath);
|
|
41
|
+
const absolutePath = path.join(memoryRoot, normalizedRelativePath);
|
|
42
|
+
const raw = await readFile(absolutePath, "utf8");
|
|
43
|
+
const parsed = matter(raw);
|
|
44
|
+
const fallback = relativePathToMetadata(normalizedRelativePath);
|
|
45
|
+
const stats = await stat(absolutePath);
|
|
46
|
+
const frontmatter = normalizeFrontmatter(parsed.data, fallback);
|
|
47
|
+
const body = parsed.content.trim();
|
|
48
|
+
const frontmatterHash = sha256(stableJson(frontmatter));
|
|
49
|
+
return {
|
|
50
|
+
frontmatter,
|
|
51
|
+
body,
|
|
52
|
+
relativePath: normalizedRelativePath,
|
|
53
|
+
absolutePath,
|
|
54
|
+
contentHash: sha256(body),
|
|
55
|
+
frontmatterHash,
|
|
56
|
+
size: body.length,
|
|
57
|
+
density: gzipDensity(body),
|
|
58
|
+
mtime: stats.mtimeMs,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export async function writeMemory(memoryRoot, relativePath, frontmatter, body) {
|
|
62
|
+
const absolutePath = path.join(memoryRoot, normalizeRelativePath(relativePath));
|
|
63
|
+
await mkdir(path.dirname(absolutePath), { recursive: true });
|
|
64
|
+
const file = matter.stringify(`${body.trim()}\n`, frontmatter);
|
|
65
|
+
await writeFile(absolutePath, file, "utf8");
|
|
66
|
+
}
|
|
67
|
+
export function normalizeRelativePath(value) {
|
|
68
|
+
const normalized = value.replace(/\\/g, "/").replace(/^\/+/, "");
|
|
69
|
+
const parts = normalized.split("/").filter(Boolean);
|
|
70
|
+
if (parts.some((part) => part === "." || part === "..")) {
|
|
71
|
+
throw new Error(`Invalid relative memory path: ${value}`);
|
|
72
|
+
}
|
|
73
|
+
return parts.join("/");
|
|
74
|
+
}
|
|
75
|
+
export function normalizeFrontmatter(value, fallback) {
|
|
76
|
+
const now = new Date().toISOString();
|
|
77
|
+
const tags = Array.isArray(value.tags) ? value.tags.map(String).filter(Boolean) : [];
|
|
78
|
+
const rawLinks = Array.isArray(value.links) ? value.links : [];
|
|
79
|
+
return {
|
|
80
|
+
kind: normalizeKind(String(value.kind ?? fallback.kind)),
|
|
81
|
+
project: String(value.project ?? fallback.project),
|
|
82
|
+
name: safeSegment(String(value.name ?? fallback.name)),
|
|
83
|
+
tags,
|
|
84
|
+
links: rawLinks.map(normalizeLink),
|
|
85
|
+
created_at: String(value.created_at ?? now),
|
|
86
|
+
updated_at: String(value.updated_at ?? now),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export function memoryToEmbeddingText(memory) {
|
|
90
|
+
return [
|
|
91
|
+
memory.frontmatter.project,
|
|
92
|
+
memory.frontmatter.kind,
|
|
93
|
+
memory.frontmatter.name,
|
|
94
|
+
memory.relativePath,
|
|
95
|
+
memory.frontmatter.tags.join(" "),
|
|
96
|
+
"",
|
|
97
|
+
memory.body,
|
|
98
|
+
].join("\n");
|
|
99
|
+
}
|
|
100
|
+
function normalizeLink(value) {
|
|
101
|
+
const input = value;
|
|
102
|
+
return {
|
|
103
|
+
to: normalizeRelativePath(String(input.to ?? "")),
|
|
104
|
+
type: normalizeLinkType(String(input.type ?? "RELATED")),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/memory/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ProjectParts {
|
|
2
|
+
org: string;
|
|
3
|
+
repo: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function parseGitRemote(remote: string): string | undefined;
|
|
6
|
+
export declare function inferProjectName(cwd?: string): Promise<string>;
|
|
7
|
+
export declare function projectParts(projectName: string): ProjectParts;
|
|
8
|
+
export declare function safeSegment(value: string): string;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
import { sha256 } from "../util/hash.js";
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
6
|
+
export function parseGitRemote(remote) {
|
|
7
|
+
const trimmed = remote.trim().replace(/\.git$/, "");
|
|
8
|
+
const sshMatch = /^git@[^:]+:([^/]+)\/(.+)$/.exec(trimmed);
|
|
9
|
+
if (sshMatch) {
|
|
10
|
+
return `${safeSegment(sshMatch[1])}/${safeSegment(sshMatch[2])}`;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const url = new URL(trimmed);
|
|
14
|
+
const parts = url.pathname.split("/").filter(Boolean);
|
|
15
|
+
if (parts.length >= 2) {
|
|
16
|
+
return `${safeSegment(parts[parts.length - 2])}/${safeSegment(parts[parts.length - 1])}`;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
export async function inferProjectName(cwd = process.cwd()) {
|
|
25
|
+
try {
|
|
26
|
+
const remote = await execGit(cwd, ["config", "--get", "remote.origin.url"]);
|
|
27
|
+
const remoteProject = parseGitRemote(remote);
|
|
28
|
+
if (remoteProject) {
|
|
29
|
+
return remoteProject;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Fall through to local path identity.
|
|
34
|
+
}
|
|
35
|
+
const resolved = path.resolve(cwd);
|
|
36
|
+
const basename = path.basename(resolved) || "project";
|
|
37
|
+
const hash = sha256(resolved).slice(0, 8);
|
|
38
|
+
return `local/${safeSegment(basename)}-${hash}`;
|
|
39
|
+
}
|
|
40
|
+
export function projectParts(projectName) {
|
|
41
|
+
const [org, ...rest] = projectName.split("/");
|
|
42
|
+
const repo = rest.join("/");
|
|
43
|
+
if (!org || !repo) {
|
|
44
|
+
throw new Error(`Project name must be org/repo style: ${projectName}`);
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
org: safeSegment(org),
|
|
48
|
+
repo: safeSegment(repo),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export function safeSegment(value) {
|
|
52
|
+
const safe = value.trim().replace(/\.md$/i, "").replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
53
|
+
return safe || "untitled";
|
|
54
|
+
}
|
|
55
|
+
async function execGit(cwd, args) {
|
|
56
|
+
const result = await execFileAsync("git", args, { cwd, timeout: 3_000 });
|
|
57
|
+
return result.stdout.trim();
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/memory/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function findMemoryFiles(memoryRoot: string): Promise<string[]>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { readdir } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
export async function findMemoryFiles(memoryRoot) {
|
|
4
|
+
const results = [];
|
|
5
|
+
await walk(memoryRoot, "", results);
|
|
6
|
+
return results.sort();
|
|
7
|
+
}
|
|
8
|
+
async function walk(root, relativeDir, results) {
|
|
9
|
+
let entries;
|
|
10
|
+
try {
|
|
11
|
+
entries = await readdir(path.join(root, relativeDir), { withFileTypes: true });
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
for (const entry of entries) {
|
|
17
|
+
const relativePath = path.posix.join(relativeDir.replace(/\\/g, "/"), entry.name);
|
|
18
|
+
if (entry.isDirectory()) {
|
|
19
|
+
if (entry.name === ".git" || entry.name === "node_modules") {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
await walk(root, relativePath, results);
|
|
23
|
+
}
|
|
24
|
+
else if (entry.isFile() && entry.name.toLowerCase().endsWith(".md")) {
|
|
25
|
+
results.push(relativePath);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/memory/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB;IACtD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAY,EAAE,WAAmB,EAAE,OAAiB;IACtE,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAClF,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAC3D,SAAS;YACX,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { AugmentConfig } from "./config.js";
|
|
2
|
+
import { AugmentDatabase } from "./db.js";
|
|
3
|
+
import type { EmbeddingProvider } from "./embeddings.js";
|
|
4
|
+
import type { LinkRecord, MemoryRecord, ProjectRecord, SearchInput, SearchResult, UpsertInput } from "./types.js";
|
|
5
|
+
export interface InitProjectInput {
|
|
6
|
+
project_name?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface UpsertResult {
|
|
9
|
+
memory: MemoryRecord;
|
|
10
|
+
action: "created" | "updated" | "similar-updated";
|
|
11
|
+
text: string;
|
|
12
|
+
}
|
|
13
|
+
export interface SearchOutput {
|
|
14
|
+
text: string;
|
|
15
|
+
results: SearchResult[];
|
|
16
|
+
}
|
|
17
|
+
export declare class AugmentService {
|
|
18
|
+
private readonly config;
|
|
19
|
+
private readonly embeddingProvider;
|
|
20
|
+
readonly db: AugmentDatabase;
|
|
21
|
+
private initialized;
|
|
22
|
+
constructor(config: AugmentConfig, embeddingProvider?: EmbeddingProvider);
|
|
23
|
+
close(): Promise<void>;
|
|
24
|
+
init(): Promise<void>;
|
|
25
|
+
initProject(input?: InitProjectInput): Promise<ProjectRecord>;
|
|
26
|
+
listProjects(name?: string): Promise<ProjectRecord[]>;
|
|
27
|
+
rebuildIndex(): Promise<{
|
|
28
|
+
indexed: number;
|
|
29
|
+
}>;
|
|
30
|
+
upsert(input: UpsertInput): Promise<UpsertResult>;
|
|
31
|
+
read(id: number): Promise<MemoryRecord>;
|
|
32
|
+
link(fromMemoryId: number, toMemoryId: number, typeInput?: string): Promise<{
|
|
33
|
+
link: LinkRecord;
|
|
34
|
+
text: string;
|
|
35
|
+
}>;
|
|
36
|
+
listLinks(memoryId: number): Promise<LinkRecord[]>;
|
|
37
|
+
unlink(linkId: number): Promise<{
|
|
38
|
+
text: string;
|
|
39
|
+
}>;
|
|
40
|
+
search(input: SearchInput): Promise<SearchOutput>;
|
|
41
|
+
private findSimilarMemory;
|
|
42
|
+
private ensureEmbedding;
|
|
43
|
+
}
|