greplica 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/README.md +177 -0
- package/dist/apps/cli/main.d.ts +2 -0
- package/dist/apps/cli/main.js +404 -0
- package/dist/apps/cli/main.js.map +1 -0
- package/dist/apps/cli/repo-context.d.ts +2 -0
- package/dist/apps/cli/repo-context.js +58 -0
- package/dist/apps/cli/repo-context.js.map +1 -0
- package/dist/libs/agent-runner/codex.d.ts +2 -0
- package/dist/libs/agent-runner/codex.js +53 -0
- package/dist/libs/agent-runner/codex.js.map +1 -0
- package/dist/libs/agent-runner/metrics.d.ts +10 -0
- package/dist/libs/agent-runner/metrics.js +72 -0
- package/dist/libs/agent-runner/metrics.js.map +1 -0
- package/dist/libs/agent-runner/types.d.ts +23 -0
- package/dist/libs/agent-runner/types.js +2 -0
- package/dist/libs/agent-runner/types.js.map +1 -0
- package/dist/libs/config/greplica-config.d.ts +24 -0
- package/dist/libs/config/greplica-config.js +121 -0
- package/dist/libs/config/greplica-config.js.map +1 -0
- package/dist/libs/config/greplica-home.d.ts +1 -0
- package/dist/libs/config/greplica-home.js +6 -0
- package/dist/libs/config/greplica-home.js.map +1 -0
- package/dist/libs/env/load-local-env.d.ts +19 -0
- package/dist/libs/env/load-local-env.js +69 -0
- package/dist/libs/env/load-local-env.js.map +1 -0
- package/dist/libs/install/edit-marked-section.d.ts +1 -0
- package/dist/libs/install/edit-marked-section.js +22 -0
- package/dist/libs/install/edit-marked-section.js.map +1 -0
- package/dist/libs/install/install.d.ts +18 -0
- package/dist/libs/install/install.js +80 -0
- package/dist/libs/install/install.js.map +1 -0
- package/dist/libs/install/instruction-blocks.d.ts +1 -0
- package/dist/libs/install/instruction-blocks.js +13 -0
- package/dist/libs/install/instruction-blocks.js.map +1 -0
- package/dist/libs/install/paths.d.ts +12 -0
- package/dist/libs/install/paths.js +31 -0
- package/dist/libs/install/paths.js.map +1 -0
- package/dist/libs/knowledge-graph/claim.d.ts +11 -0
- package/dist/libs/knowledge-graph/claim.js +2 -0
- package/dist/libs/knowledge-graph/claim.js.map +1 -0
- package/dist/libs/knowledge-graph/commit.d.ts +10 -0
- package/dist/libs/knowledge-graph/commit.js +2 -0
- package/dist/libs/knowledge-graph/commit.js.map +1 -0
- package/dist/libs/knowledge-graph/edge.d.ts +13 -0
- package/dist/libs/knowledge-graph/edge.js +17 -0
- package/dist/libs/knowledge-graph/edge.js.map +1 -0
- package/dist/libs/knowledge-graph/folder-export.d.ts +6 -0
- package/dist/libs/knowledge-graph/folder-export.js +337 -0
- package/dist/libs/knowledge-graph/folder-export.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/bm25.d.ts +9 -0
- package/dist/libs/knowledge-graph/graph-context/bm25.js +62 -0
- package/dist/libs/knowledge-graph/graph-context/bm25.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/config.d.ts +39 -0
- package/dist/libs/knowledge-graph/graph-context/config.js +48 -0
- package/dist/libs/knowledge-graph/graph-context/config.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/context-builder.d.ts +18 -0
- package/dist/libs/knowledge-graph/graph-context/context-builder.js +276 -0
- package/dist/libs/knowledge-graph/graph-context/context-builder.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/documents.d.ts +20 -0
- package/dist/libs/knowledge-graph/graph-context/documents.js +81 -0
- package/dist/libs/knowledge-graph/graph-context/documents.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/embedder.d.ts +6 -0
- package/dist/libs/knowledge-graph/graph-context/embedder.js +8 -0
- package/dist/libs/knowledge-graph/graph-context/embedder.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/exact.d.ts +3 -0
- package/dist/libs/knowledge-graph/graph-context/exact.js +37 -0
- package/dist/libs/knowledge-graph/graph-context/exact.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/local-embedder.d.ts +13 -0
- package/dist/libs/knowledge-graph/graph-context/local-embedder.js +74 -0
- package/dist/libs/knowledge-graph/graph-context/local-embedder.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/openai-embedder.d.ts +14 -0
- package/dist/libs/knowledge-graph/graph-context/openai-embedder.js +59 -0
- package/dist/libs/knowledge-graph/graph-context/openai-embedder.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/rank.d.ts +16 -0
- package/dist/libs/knowledge-graph/graph-context/rank.js +52 -0
- package/dist/libs/knowledge-graph/graph-context/rank.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/render.d.ts +38 -0
- package/dist/libs/knowledge-graph/graph-context/render.js +114 -0
- package/dist/libs/knowledge-graph/graph-context/render.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/types.d.ts +58 -0
- package/dist/libs/knowledge-graph/graph-context/types.js +2 -0
- package/dist/libs/knowledge-graph/graph-context/types.js.map +1 -0
- package/dist/libs/knowledge-graph/graph-context/vector.d.ts +3 -0
- package/dist/libs/knowledge-graph/graph-context/vector.js +25 -0
- package/dist/libs/knowledge-graph/graph-context/vector.js.map +1 -0
- package/dist/libs/knowledge-graph/proposal.d.ts +65 -0
- package/dist/libs/knowledge-graph/proposal.js +135 -0
- package/dist/libs/knowledge-graph/proposal.js.map +1 -0
- package/dist/libs/knowledge-graph/schema.d.ts +32 -0
- package/dist/libs/knowledge-graph/schema.js +2 -0
- package/dist/libs/knowledge-graph/schema.js.map +1 -0
- package/dist/libs/knowledge-graph/scope.d.ts +16 -0
- package/dist/libs/knowledge-graph/scope.js +2 -0
- package/dist/libs/knowledge-graph/scope.js.map +1 -0
- package/dist/libs/knowledge-graph/service.d.ts +54 -0
- package/dist/libs/knowledge-graph/service.js +89 -0
- package/dist/libs/knowledge-graph/service.js.map +1 -0
- package/dist/libs/knowledge-graph/validate-proposal.d.ts +9 -0
- package/dist/libs/knowledge-graph/validate-proposal.js +166 -0
- package/dist/libs/knowledge-graph/validate-proposal.js.map +1 -0
- package/dist/libs/storage/sqlite/db.d.ts +3 -0
- package/dist/libs/storage/sqlite/db.js +16 -0
- package/dist/libs/storage/sqlite/db.js.map +1 -0
- package/dist/libs/storage/sqlite/migrate.d.ts +2 -0
- package/dist/libs/storage/sqlite/migrate.js +56 -0
- package/dist/libs/storage/sqlite/migrate.js.map +1 -0
- package/dist/libs/storage/sqlite/repository.d.ts +95 -0
- package/dist/libs/storage/sqlite/repository.js +310 -0
- package/dist/libs/storage/sqlite/repository.js.map +1 -0
- package/dist/libs/storage/sqlite/schema.d.ts +1 -0
- package/dist/libs/storage/sqlite/schema.js +93 -0
- package/dist/libs/storage/sqlite/schema.js.map +1 -0
- package/package.json +37 -0
- package/skills/greplica-bootstrap/SKILL.md +116 -0
- package/skills/greplica-update-working-memory/SKILL.md +183 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
import type { MemoryCommit } from "../../knowledge-graph/commit.js";
|
|
3
|
+
import type { Edge } from "../../knowledge-graph/edge.js";
|
|
4
|
+
import type { MemoryCommitProposal } from "../../knowledge-graph/proposal.js";
|
|
5
|
+
import type { Component, Flow, GraphObjectType, Source } from "../../knowledge-graph/schema.js";
|
|
6
|
+
import type { Claim } from "../../knowledge-graph/claim.js";
|
|
7
|
+
import type { GraphScope, GraphScopeKind } from "../../knowledge-graph/scope.js";
|
|
8
|
+
export interface RepoRecord {
|
|
9
|
+
id: string;
|
|
10
|
+
remote_url: string | null;
|
|
11
|
+
root_path: string | null;
|
|
12
|
+
repo_name: string;
|
|
13
|
+
default_branch: string;
|
|
14
|
+
}
|
|
15
|
+
export interface UpsertRepoInput {
|
|
16
|
+
repo_root?: string;
|
|
17
|
+
remote_url?: string;
|
|
18
|
+
repo_name: string;
|
|
19
|
+
default_branch: string;
|
|
20
|
+
}
|
|
21
|
+
export interface CreateScopeInput {
|
|
22
|
+
repo_id: string;
|
|
23
|
+
kind: GraphScopeKind;
|
|
24
|
+
name: string;
|
|
25
|
+
parent_scope_id?: string;
|
|
26
|
+
ref?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface CreateMemoryCommitInput {
|
|
29
|
+
scope_id: string;
|
|
30
|
+
git_commit_sha?: string;
|
|
31
|
+
title: string;
|
|
32
|
+
summary?: string;
|
|
33
|
+
}
|
|
34
|
+
export type EmbeddingObjectType = "claim" | "component" | "flow";
|
|
35
|
+
export interface GraphObjectEmbeddingRecord {
|
|
36
|
+
repo_id: string;
|
|
37
|
+
object_type: EmbeddingObjectType;
|
|
38
|
+
object_id: string;
|
|
39
|
+
provider: string;
|
|
40
|
+
model: string;
|
|
41
|
+
dimensions: number;
|
|
42
|
+
embedding: Buffer;
|
|
43
|
+
created_at: string;
|
|
44
|
+
}
|
|
45
|
+
export interface InsertGraphObjectEmbeddingInput {
|
|
46
|
+
repo_id: string;
|
|
47
|
+
object_type: EmbeddingObjectType;
|
|
48
|
+
object_id: string;
|
|
49
|
+
provider: string;
|
|
50
|
+
model: string;
|
|
51
|
+
dimensions: number;
|
|
52
|
+
embedding: Buffer;
|
|
53
|
+
}
|
|
54
|
+
export declare class SqliteRepository {
|
|
55
|
+
private readonly db;
|
|
56
|
+
constructor(db: Database.Database);
|
|
57
|
+
upsertRepo(input: UpsertRepoInput): {
|
|
58
|
+
repo: RepoRecord;
|
|
59
|
+
created: boolean;
|
|
60
|
+
};
|
|
61
|
+
getRepoByRemote(remoteUrl: string): RepoRecord | undefined;
|
|
62
|
+
getRepoByRootPath(rootPath: string): RepoRecord | undefined;
|
|
63
|
+
requireRepo(remoteUrl: string): RepoRecord;
|
|
64
|
+
private findRepo;
|
|
65
|
+
private updateRepo;
|
|
66
|
+
ensureScope(input: CreateScopeInput): GraphScope;
|
|
67
|
+
requireWorkingScope(repoId: string): GraphScope;
|
|
68
|
+
readGraphView(repoId: string): {
|
|
69
|
+
components: Component[];
|
|
70
|
+
flows: Flow[];
|
|
71
|
+
claims: Claim[];
|
|
72
|
+
sources: Source[];
|
|
73
|
+
edges: Edge[];
|
|
74
|
+
};
|
|
75
|
+
createMemoryCommit(input: CreateMemoryCommitInput): MemoryCommit;
|
|
76
|
+
createProposalRecords(scopeId: string, memoryCommitId: string, proposal: MemoryCommitProposal): void;
|
|
77
|
+
subjectExists(type: GraphObjectType, id: string): boolean;
|
|
78
|
+
subjectType(id: string): GraphObjectType | undefined;
|
|
79
|
+
listGraphObjectEmbeddings(input: {
|
|
80
|
+
repo_id: string;
|
|
81
|
+
provider: string;
|
|
82
|
+
model: string;
|
|
83
|
+
dimensions: number;
|
|
84
|
+
}): GraphObjectEmbeddingRecord[];
|
|
85
|
+
insertGraphObjectEmbeddings(inputs: InsertGraphObjectEmbeddingInput[]): void;
|
|
86
|
+
private createMembership;
|
|
87
|
+
private currentScopeIds;
|
|
88
|
+
private membershipsForScopes;
|
|
89
|
+
private loadComponents;
|
|
90
|
+
private loadFlows;
|
|
91
|
+
private loadClaims;
|
|
92
|
+
private loadSources;
|
|
93
|
+
private loadEdges;
|
|
94
|
+
private loadByIds;
|
|
95
|
+
}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
export class SqliteRepository {
|
|
3
|
+
db;
|
|
4
|
+
constructor(db) {
|
|
5
|
+
this.db = db;
|
|
6
|
+
}
|
|
7
|
+
upsertRepo(input) {
|
|
8
|
+
const existing = this.findRepo(input);
|
|
9
|
+
if (existing)
|
|
10
|
+
return { repo: this.updateRepo(existing.repo, input, existing.matchedBy), created: false };
|
|
11
|
+
const repo = {
|
|
12
|
+
id: makeId("repo", identityKey(input)),
|
|
13
|
+
remote_url: input.remote_url ?? null,
|
|
14
|
+
root_path: input.repo_root ?? null,
|
|
15
|
+
repo_name: input.repo_name,
|
|
16
|
+
default_branch: input.default_branch,
|
|
17
|
+
};
|
|
18
|
+
this.db
|
|
19
|
+
.prepare(`INSERT INTO repos (id, remote_url, root_path, repo_name, default_branch)
|
|
20
|
+
VALUES (@id, @remote_url, @root_path, @repo_name, @default_branch)`)
|
|
21
|
+
.run(repo);
|
|
22
|
+
return { repo, created: true };
|
|
23
|
+
}
|
|
24
|
+
getRepoByRemote(remoteUrl) {
|
|
25
|
+
return this.db.prepare("SELECT * FROM repos WHERE remote_url = ?").get(remoteUrl);
|
|
26
|
+
}
|
|
27
|
+
getRepoByRootPath(rootPath) {
|
|
28
|
+
return this.db.prepare("SELECT * FROM repos WHERE root_path = ?").get(rootPath);
|
|
29
|
+
}
|
|
30
|
+
requireRepo(remoteUrl) {
|
|
31
|
+
const repo = this.getRepoByRemote(remoteUrl);
|
|
32
|
+
if (!repo) {
|
|
33
|
+
throw new Error(`Repo memory is not ready for ${remoteUrl}. Run 'greplica doctor' to diagnose setup.`);
|
|
34
|
+
}
|
|
35
|
+
return repo;
|
|
36
|
+
}
|
|
37
|
+
findRepo(input) {
|
|
38
|
+
if (input.remote_url !== undefined) {
|
|
39
|
+
const byRemote = this.getRepoByRemote(input.remote_url);
|
|
40
|
+
if (byRemote !== undefined)
|
|
41
|
+
return { repo: byRemote, matchedBy: "remote" };
|
|
42
|
+
}
|
|
43
|
+
if (input.repo_root !== undefined) {
|
|
44
|
+
for (const rootPath of rootPathCandidates(input.repo_root)) {
|
|
45
|
+
const byRootPath = this.getRepoByRootPath(rootPath);
|
|
46
|
+
if (byRootPath !== undefined)
|
|
47
|
+
return { repo: byRootPath, matchedBy: "root" };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
updateRepo(existing, input, matchedBy) {
|
|
53
|
+
const shouldUpdateRootPath = matchedBy === "root" || existing.root_path === null || existing.root_path === input.repo_root;
|
|
54
|
+
const repo = {
|
|
55
|
+
id: existing.id,
|
|
56
|
+
remote_url: input.remote_url ?? existing.remote_url,
|
|
57
|
+
root_path: shouldUpdateRootPath ? (input.repo_root ?? existing.root_path) : existing.root_path,
|
|
58
|
+
repo_name: input.repo_name,
|
|
59
|
+
default_branch: input.default_branch,
|
|
60
|
+
};
|
|
61
|
+
this.db
|
|
62
|
+
.prepare(`UPDATE repos
|
|
63
|
+
SET remote_url = @remote_url,
|
|
64
|
+
root_path = @root_path,
|
|
65
|
+
repo_name = @repo_name,
|
|
66
|
+
default_branch = @default_branch
|
|
67
|
+
WHERE id = @id`)
|
|
68
|
+
.run(repo);
|
|
69
|
+
return repo;
|
|
70
|
+
}
|
|
71
|
+
ensureScope(input) {
|
|
72
|
+
const existing = this.db
|
|
73
|
+
.prepare("SELECT * FROM graph_scopes WHERE repo_id = ? AND kind = ? AND name = ?")
|
|
74
|
+
.get(input.repo_id, input.kind, input.name);
|
|
75
|
+
if (existing)
|
|
76
|
+
return existing;
|
|
77
|
+
const scope = {
|
|
78
|
+
id: makeId("scope", `${input.repo_id}:${input.kind}:${input.name}`),
|
|
79
|
+
kind: input.kind,
|
|
80
|
+
name: input.name,
|
|
81
|
+
parent_scope_id: input.parent_scope_id,
|
|
82
|
+
ref: input.ref,
|
|
83
|
+
created_at: now(),
|
|
84
|
+
};
|
|
85
|
+
this.db
|
|
86
|
+
.prepare(`INSERT INTO graph_scopes (id, repo_id, kind, name, parent_scope_id, ref, created_at)
|
|
87
|
+
VALUES (@id, @repo_id, @kind, @name, @parent_scope_id, @ref, @created_at)`)
|
|
88
|
+
.run({ ...scope, repo_id: input.repo_id });
|
|
89
|
+
return scope;
|
|
90
|
+
}
|
|
91
|
+
requireWorkingScope(repoId) {
|
|
92
|
+
const scope = this.db
|
|
93
|
+
.prepare("SELECT * FROM graph_scopes WHERE repo_id = ? AND kind = 'working' AND name = 'working'")
|
|
94
|
+
.get(repoId);
|
|
95
|
+
if (!scope)
|
|
96
|
+
throw new Error("Working scope is missing. Run 'greplica doctor' to diagnose setup.");
|
|
97
|
+
return scope;
|
|
98
|
+
}
|
|
99
|
+
readGraphView(repoId) {
|
|
100
|
+
const scopeIds = this.currentScopeIds(repoId);
|
|
101
|
+
const memberships = this.membershipsForScopes(scopeIds);
|
|
102
|
+
const rawEdges = this.loadEdges(selectIds(memberships, "edge"));
|
|
103
|
+
const active = activeSubjectKeys(memberships, rawEdges);
|
|
104
|
+
const edges = rawEdges.filter((edge) => active.has(subjectKey("edge", edge.id)) &&
|
|
105
|
+
active.has(subjectKey(edge.from_type, edge.from_id)) &&
|
|
106
|
+
(edge.to_type === "source" || active.has(subjectKey(edge.to_type, edge.to_id))));
|
|
107
|
+
return {
|
|
108
|
+
components: this.loadComponents(selectActiveIds(memberships, active, "component")),
|
|
109
|
+
flows: this.loadFlows(selectActiveIds(memberships, active, "flow")),
|
|
110
|
+
claims: this.loadClaims(selectActiveIds(memberships, active, "claim")),
|
|
111
|
+
sources: this.loadSources([...new Set(edges.filter((edge) => edge.to_type === "source").map((edge) => edge.to_id))]),
|
|
112
|
+
edges,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
createMemoryCommit(input) {
|
|
116
|
+
const parent = this.db
|
|
117
|
+
.prepare("SELECT id FROM memory_commits WHERE scope_id = ? ORDER BY created_at DESC LIMIT 1")
|
|
118
|
+
.get(input.scope_id);
|
|
119
|
+
const memoryCommit = {
|
|
120
|
+
id: `mc_${randomUUID()}`,
|
|
121
|
+
scope_id: input.scope_id,
|
|
122
|
+
parent_memory_commit_id: parent?.id,
|
|
123
|
+
git_commit_sha: input.git_commit_sha,
|
|
124
|
+
title: input.title,
|
|
125
|
+
summary: input.summary,
|
|
126
|
+
created_at: now(),
|
|
127
|
+
};
|
|
128
|
+
this.db
|
|
129
|
+
.prepare(`INSERT INTO memory_commits
|
|
130
|
+
(id, scope_id, parent_memory_commit_id, git_commit_sha, title, summary, created_at)
|
|
131
|
+
VALUES
|
|
132
|
+
(@id, @scope_id, @parent_memory_commit_id, @git_commit_sha, @title, @summary, @created_at)`)
|
|
133
|
+
.run(memoryCommit);
|
|
134
|
+
return memoryCommit;
|
|
135
|
+
}
|
|
136
|
+
createProposalRecords(scopeId, memoryCommitId, proposal) {
|
|
137
|
+
const write = this.db.transaction(() => {
|
|
138
|
+
for (const component of proposal.creates.components ?? []) {
|
|
139
|
+
this.db
|
|
140
|
+
.prepare("INSERT INTO components (id, name, code_anchor) VALUES (@id, @name, @code_anchor)")
|
|
141
|
+
.run(component);
|
|
142
|
+
this.createMembership(scopeId, "component", component.id, memoryCommitId);
|
|
143
|
+
}
|
|
144
|
+
for (const flow of proposal.creates.flows ?? []) {
|
|
145
|
+
this.db.prepare("INSERT INTO flows (id, name) VALUES (@id, @name)").run(flow);
|
|
146
|
+
this.createMembership(scopeId, "flow", flow.id, memoryCommitId);
|
|
147
|
+
}
|
|
148
|
+
for (const claim of proposal.creates.claims ?? []) {
|
|
149
|
+
this.db
|
|
150
|
+
.prepare("INSERT INTO claims (id, kind, text, truth, intent) VALUES (@id, @kind, @text, @truth, @intent)")
|
|
151
|
+
.run(claim);
|
|
152
|
+
this.createMembership(scopeId, "claim", claim.id, memoryCommitId);
|
|
153
|
+
}
|
|
154
|
+
for (const source of proposal.creates.sources ?? []) {
|
|
155
|
+
this.db
|
|
156
|
+
.prepare("INSERT INTO sources (id, kind, ref, title) VALUES (@id, @kind, @ref, @title)")
|
|
157
|
+
.run(source);
|
|
158
|
+
}
|
|
159
|
+
for (const edge of proposal.creates.edges ?? []) {
|
|
160
|
+
this.db
|
|
161
|
+
.prepare(`INSERT INTO edges (id, from_id, from_type, to_id, to_type, kind, metadata)
|
|
162
|
+
VALUES (@id, @from_id, @from_type, @to_id, @to_type, @kind, @metadata)`)
|
|
163
|
+
.run({ ...edge, metadata: edge.metadata === undefined ? null : JSON.stringify(edge.metadata) });
|
|
164
|
+
this.createMembership(scopeId, "edge", edge.id, memoryCommitId);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
write();
|
|
168
|
+
}
|
|
169
|
+
subjectExists(type, id) {
|
|
170
|
+
const table = tableForType(type);
|
|
171
|
+
const row = this.db.prepare(`SELECT id FROM ${table} WHERE id = ?`).get(id);
|
|
172
|
+
return row !== undefined;
|
|
173
|
+
}
|
|
174
|
+
subjectType(id) {
|
|
175
|
+
for (const type of ["component", "flow", "claim", "edge", "source"]) {
|
|
176
|
+
if (this.subjectExists(type, id))
|
|
177
|
+
return type;
|
|
178
|
+
}
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
listGraphObjectEmbeddings(input) {
|
|
182
|
+
return this.db
|
|
183
|
+
.prepare(`SELECT repo_id, object_type, object_id, provider, model, dimensions, embedding, created_at
|
|
184
|
+
FROM graph_object_embeddings
|
|
185
|
+
WHERE repo_id = @repo_id
|
|
186
|
+
AND provider = @provider
|
|
187
|
+
AND model = @model
|
|
188
|
+
AND dimensions = @dimensions`)
|
|
189
|
+
.all(input);
|
|
190
|
+
}
|
|
191
|
+
insertGraphObjectEmbeddings(inputs) {
|
|
192
|
+
if (inputs.length === 0)
|
|
193
|
+
return;
|
|
194
|
+
const insert = this.db.prepare(`INSERT OR IGNORE INTO graph_object_embeddings
|
|
195
|
+
(repo_id, object_type, object_id, provider, model, dimensions, embedding, created_at)
|
|
196
|
+
VALUES
|
|
197
|
+
(@repo_id, @object_type, @object_id, @provider, @model, @dimensions, @embedding, @created_at)`);
|
|
198
|
+
const write = this.db.transaction((records) => {
|
|
199
|
+
for (const record of records)
|
|
200
|
+
insert.run({ ...record, created_at: now() });
|
|
201
|
+
});
|
|
202
|
+
write(inputs);
|
|
203
|
+
}
|
|
204
|
+
createMembership(scopeId, subjectType, subjectId, memoryCommitId) {
|
|
205
|
+
this.db
|
|
206
|
+
.prepare(`INSERT INTO graph_memberships (scope_id, subject_type, subject_id, memory_commit_id)
|
|
207
|
+
VALUES (?, ?, ?, ?)`)
|
|
208
|
+
.run(scopeId, subjectType, subjectId, memoryCommitId);
|
|
209
|
+
}
|
|
210
|
+
currentScopeIds(repoId) {
|
|
211
|
+
const rows = this.db
|
|
212
|
+
.prepare("SELECT id FROM graph_scopes WHERE repo_id = ? AND kind IN ('main', 'working') ORDER BY kind")
|
|
213
|
+
.all(repoId);
|
|
214
|
+
return rows.map((row) => row.id);
|
|
215
|
+
}
|
|
216
|
+
membershipsForScopes(scopeIds) {
|
|
217
|
+
if (scopeIds.length === 0)
|
|
218
|
+
return [];
|
|
219
|
+
return this.db
|
|
220
|
+
.prepare(`SELECT subject_type, subject_id FROM graph_memberships WHERE scope_id IN (${placeholders(scopeIds)})`)
|
|
221
|
+
.all(...scopeIds);
|
|
222
|
+
}
|
|
223
|
+
loadComponents(ids) {
|
|
224
|
+
return this.loadByIds("components", ids);
|
|
225
|
+
}
|
|
226
|
+
loadFlows(ids) {
|
|
227
|
+
return this.loadByIds("flows", ids);
|
|
228
|
+
}
|
|
229
|
+
loadClaims(ids) {
|
|
230
|
+
return this.loadByIds("claims", ids);
|
|
231
|
+
}
|
|
232
|
+
loadSources(ids) {
|
|
233
|
+
return this.loadByIds("sources", ids);
|
|
234
|
+
}
|
|
235
|
+
loadEdges(ids) {
|
|
236
|
+
if (ids.length === 0)
|
|
237
|
+
return [];
|
|
238
|
+
const rows = this.db
|
|
239
|
+
.prepare(`SELECT * FROM edges WHERE id IN (${placeholders(ids)})`)
|
|
240
|
+
.all(...ids);
|
|
241
|
+
return rows.map((row) => ({
|
|
242
|
+
...row,
|
|
243
|
+
metadata: row.metadata === null ? undefined : JSON.parse(row.metadata),
|
|
244
|
+
}));
|
|
245
|
+
}
|
|
246
|
+
loadByIds(table, ids) {
|
|
247
|
+
if (ids.length === 0)
|
|
248
|
+
return [];
|
|
249
|
+
return this.db.prepare(`SELECT * FROM ${table} WHERE id IN (${placeholders(ids)})`).all(...ids);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
function activeSubjectKeys(memberships, edges) {
|
|
253
|
+
const active = new Set(memberships.map((membership) => subjectKey(membership.subject_type, membership.subject_id)));
|
|
254
|
+
const superseded = new Set(edges
|
|
255
|
+
.filter((edge) => edge.kind === "supersedes")
|
|
256
|
+
.map((edge) => subjectKey(edge.to_type, edge.to_id)));
|
|
257
|
+
for (const key of superseded) {
|
|
258
|
+
active.delete(key);
|
|
259
|
+
}
|
|
260
|
+
return active;
|
|
261
|
+
}
|
|
262
|
+
function selectIds(memberships, type) {
|
|
263
|
+
return [...new Set(memberships.filter((membership) => membership.subject_type === type).map((membership) => membership.subject_id))];
|
|
264
|
+
}
|
|
265
|
+
function selectActiveIds(memberships, active, type) {
|
|
266
|
+
return selectIds(memberships, type).filter((id) => active.has(subjectKey(type, id)));
|
|
267
|
+
}
|
|
268
|
+
function subjectKey(type, id) {
|
|
269
|
+
return `${type}:${id}`;
|
|
270
|
+
}
|
|
271
|
+
function tableForType(type) {
|
|
272
|
+
switch (type) {
|
|
273
|
+
case "component":
|
|
274
|
+
return "components";
|
|
275
|
+
case "flow":
|
|
276
|
+
return "flows";
|
|
277
|
+
case "claim":
|
|
278
|
+
return "claims";
|
|
279
|
+
case "edge":
|
|
280
|
+
return "edges";
|
|
281
|
+
case "source":
|
|
282
|
+
return "sources";
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
function makeId(prefix, value) {
|
|
286
|
+
const hash = createHash("sha1").update(value).digest("hex").slice(0, 16);
|
|
287
|
+
return `${prefix}_${hash}`;
|
|
288
|
+
}
|
|
289
|
+
function identityKey(input) {
|
|
290
|
+
if (input.remote_url !== undefined)
|
|
291
|
+
return input.remote_url;
|
|
292
|
+
if (input.repo_root !== undefined)
|
|
293
|
+
return `root:${input.repo_root}`;
|
|
294
|
+
throw new Error("Repo memory needs either a remote URL or a root path.");
|
|
295
|
+
}
|
|
296
|
+
function rootPathCandidates(rootPath) {
|
|
297
|
+
const candidates = [rootPath];
|
|
298
|
+
if (rootPath.startsWith("/private/var/"))
|
|
299
|
+
candidates.push(rootPath.slice("/private".length));
|
|
300
|
+
if (rootPath.startsWith("/var/"))
|
|
301
|
+
candidates.push(`/private${rootPath}`);
|
|
302
|
+
return candidates;
|
|
303
|
+
}
|
|
304
|
+
function now() {
|
|
305
|
+
return new Date().toISOString();
|
|
306
|
+
}
|
|
307
|
+
function placeholders(values) {
|
|
308
|
+
return values.map(() => "?").join(", ");
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../libs/storage/sqlite/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const schemaSql = "\nCREATE TABLE IF NOT EXISTS repos (\n id TEXT PRIMARY KEY,\n remote_url TEXT UNIQUE,\n root_path TEXT UNIQUE,\n repo_name TEXT NOT NULL,\n default_branch TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS graph_scopes (\n id TEXT PRIMARY KEY,\n repo_id TEXT NOT NULL REFERENCES repos(id) ON DELETE CASCADE,\n kind TEXT NOT NULL,\n name TEXT NOT NULL,\n parent_scope_id TEXT REFERENCES graph_scopes(id) ON DELETE SET NULL,\n ref TEXT,\n created_at TEXT NOT NULL,\n UNIQUE(repo_id, kind, name)\n);\n\nCREATE TABLE IF NOT EXISTS memory_commits (\n id TEXT PRIMARY KEY,\n scope_id TEXT NOT NULL REFERENCES graph_scopes(id) ON DELETE CASCADE,\n parent_memory_commit_id TEXT REFERENCES memory_commits(id) ON DELETE SET NULL,\n git_commit_sha TEXT,\n title TEXT NOT NULL,\n summary TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS components (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n code_anchor TEXT\n);\n\nCREATE TABLE IF NOT EXISTS flows (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS claims (\n id TEXT PRIMARY KEY,\n kind TEXT NOT NULL,\n text TEXT NOT NULL,\n truth TEXT NOT NULL,\n intent TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS sources (\n id TEXT PRIMARY KEY,\n kind TEXT NOT NULL,\n ref TEXT NOT NULL,\n title TEXT\n);\n\nCREATE TABLE IF NOT EXISTS edges (\n id TEXT PRIMARY KEY,\n from_id TEXT NOT NULL,\n from_type TEXT NOT NULL,\n to_id TEXT NOT NULL,\n to_type TEXT NOT NULL,\n kind TEXT NOT NULL,\n metadata TEXT\n);\n\nCREATE TABLE IF NOT EXISTS graph_memberships (\n scope_id TEXT NOT NULL REFERENCES graph_scopes(id) ON DELETE CASCADE,\n subject_type TEXT NOT NULL,\n subject_id TEXT NOT NULL,\n memory_commit_id TEXT NOT NULL REFERENCES memory_commits(id) ON DELETE CASCADE,\n PRIMARY KEY(scope_id, subject_type, subject_id)\n);\n\nCREATE TABLE IF NOT EXISTS graph_object_embeddings (\n repo_id TEXT NOT NULL REFERENCES repos(id) ON DELETE CASCADE,\n object_type TEXT NOT NULL,\n object_id TEXT NOT NULL,\n provider TEXT NOT NULL,\n model TEXT NOT NULL,\n dimensions INTEGER NOT NULL,\n embedding BLOB NOT NULL,\n created_at TEXT NOT NULL,\n PRIMARY KEY(repo_id, object_type, object_id, provider, model, dimensions)\n);\n\nCREATE INDEX IF NOT EXISTS graph_scopes_repo_idx ON graph_scopes(repo_id);\nCREATE INDEX IF NOT EXISTS memory_commits_scope_idx ON memory_commits(scope_id);\nCREATE INDEX IF NOT EXISTS graph_memberships_scope_idx ON graph_memberships(scope_id);\nCREATE INDEX IF NOT EXISTS graph_memberships_subject_idx ON graph_memberships(subject_type, subject_id);\nCREATE INDEX IF NOT EXISTS graph_object_embeddings_repo_idx ON graph_object_embeddings(repo_id);\n";
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export const schemaSql = `
|
|
2
|
+
CREATE TABLE IF NOT EXISTS repos (
|
|
3
|
+
id TEXT PRIMARY KEY,
|
|
4
|
+
remote_url TEXT UNIQUE,
|
|
5
|
+
root_path TEXT UNIQUE,
|
|
6
|
+
repo_name TEXT NOT NULL,
|
|
7
|
+
default_branch TEXT NOT NULL
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
CREATE TABLE IF NOT EXISTS graph_scopes (
|
|
11
|
+
id TEXT PRIMARY KEY,
|
|
12
|
+
repo_id TEXT NOT NULL REFERENCES repos(id) ON DELETE CASCADE,
|
|
13
|
+
kind TEXT NOT NULL,
|
|
14
|
+
name TEXT NOT NULL,
|
|
15
|
+
parent_scope_id TEXT REFERENCES graph_scopes(id) ON DELETE SET NULL,
|
|
16
|
+
ref TEXT,
|
|
17
|
+
created_at TEXT NOT NULL,
|
|
18
|
+
UNIQUE(repo_id, kind, name)
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
CREATE TABLE IF NOT EXISTS memory_commits (
|
|
22
|
+
id TEXT PRIMARY KEY,
|
|
23
|
+
scope_id TEXT NOT NULL REFERENCES graph_scopes(id) ON DELETE CASCADE,
|
|
24
|
+
parent_memory_commit_id TEXT REFERENCES memory_commits(id) ON DELETE SET NULL,
|
|
25
|
+
git_commit_sha TEXT,
|
|
26
|
+
title TEXT NOT NULL,
|
|
27
|
+
summary TEXT,
|
|
28
|
+
created_at TEXT NOT NULL
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
CREATE TABLE IF NOT EXISTS components (
|
|
32
|
+
id TEXT PRIMARY KEY,
|
|
33
|
+
name TEXT NOT NULL,
|
|
34
|
+
code_anchor TEXT
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
CREATE TABLE IF NOT EXISTS flows (
|
|
38
|
+
id TEXT PRIMARY KEY,
|
|
39
|
+
name TEXT NOT NULL
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
CREATE TABLE IF NOT EXISTS claims (
|
|
43
|
+
id TEXT PRIMARY KEY,
|
|
44
|
+
kind TEXT NOT NULL,
|
|
45
|
+
text TEXT NOT NULL,
|
|
46
|
+
truth TEXT NOT NULL,
|
|
47
|
+
intent TEXT NOT NULL
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
CREATE TABLE IF NOT EXISTS sources (
|
|
51
|
+
id TEXT PRIMARY KEY,
|
|
52
|
+
kind TEXT NOT NULL,
|
|
53
|
+
ref TEXT NOT NULL,
|
|
54
|
+
title TEXT
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
CREATE TABLE IF NOT EXISTS edges (
|
|
58
|
+
id TEXT PRIMARY KEY,
|
|
59
|
+
from_id TEXT NOT NULL,
|
|
60
|
+
from_type TEXT NOT NULL,
|
|
61
|
+
to_id TEXT NOT NULL,
|
|
62
|
+
to_type TEXT NOT NULL,
|
|
63
|
+
kind TEXT NOT NULL,
|
|
64
|
+
metadata TEXT
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
CREATE TABLE IF NOT EXISTS graph_memberships (
|
|
68
|
+
scope_id TEXT NOT NULL REFERENCES graph_scopes(id) ON DELETE CASCADE,
|
|
69
|
+
subject_type TEXT NOT NULL,
|
|
70
|
+
subject_id TEXT NOT NULL,
|
|
71
|
+
memory_commit_id TEXT NOT NULL REFERENCES memory_commits(id) ON DELETE CASCADE,
|
|
72
|
+
PRIMARY KEY(scope_id, subject_type, subject_id)
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
CREATE TABLE IF NOT EXISTS graph_object_embeddings (
|
|
76
|
+
repo_id TEXT NOT NULL REFERENCES repos(id) ON DELETE CASCADE,
|
|
77
|
+
object_type TEXT NOT NULL,
|
|
78
|
+
object_id TEXT NOT NULL,
|
|
79
|
+
provider TEXT NOT NULL,
|
|
80
|
+
model TEXT NOT NULL,
|
|
81
|
+
dimensions INTEGER NOT NULL,
|
|
82
|
+
embedding BLOB NOT NULL,
|
|
83
|
+
created_at TEXT NOT NULL,
|
|
84
|
+
PRIMARY KEY(repo_id, object_type, object_id, provider, model, dimensions)
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
CREATE INDEX IF NOT EXISTS graph_scopes_repo_idx ON graph_scopes(repo_id);
|
|
88
|
+
CREATE INDEX IF NOT EXISTS memory_commits_scope_idx ON memory_commits(scope_id);
|
|
89
|
+
CREATE INDEX IF NOT EXISTS graph_memberships_scope_idx ON graph_memberships(scope_id);
|
|
90
|
+
CREATE INDEX IF NOT EXISTS graph_memberships_subject_idx ON graph_memberships(subject_type, subject_id);
|
|
91
|
+
CREATE INDEX IF NOT EXISTS graph_object_embeddings_repo_idx ON graph_object_embeddings(repo_id);
|
|
92
|
+
`;
|
|
93
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../libs/storage/sqlite/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FxB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "greplica",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+ssh://git@github.com/Autoloops/greplica.git"
|
|
9
|
+
},
|
|
10
|
+
"bin": {
|
|
11
|
+
"greplica": "dist/apps/cli/main.js"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc -p tsconfig.build.json",
|
|
15
|
+
"prepare": "npm run build",
|
|
16
|
+
"typecheck": "tsc --noEmit",
|
|
17
|
+
"eval:bootstrap-current": "npm run build && node dist/evals/cases/bootstrap-current-repo-at-8038fe8/run.js",
|
|
18
|
+
"eval:coding-proposal-apply-atomicity": "npm run build && node dist/evals/cases/coding-proposal-apply-atomicity-at-d6ebf80/run.js",
|
|
19
|
+
"eval:search-current": "npm run build && node dist/evals/cases/search-current-repo-at-8038fe8/run.js",
|
|
20
|
+
"eval:update-working-memory-source-evidence": "npm run build && node dist/evals/cases/update-working-memory-source-evidence-at-0438915/run.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist/apps",
|
|
24
|
+
"dist/libs",
|
|
25
|
+
"skills",
|
|
26
|
+
"README.md"
|
|
27
|
+
],
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@huggingface/transformers": "^4.2.0",
|
|
30
|
+
"better-sqlite3": "^11.9.1"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
34
|
+
"@types/node": "^22.15.3",
|
|
35
|
+
"typescript": "^5.8.3"
|
|
36
|
+
}
|
|
37
|
+
}
|