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
package/README.md
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Greplica
|
|
2
|
+
|
|
3
|
+
Greplica (`greplica`) stores lightweight codebase memory for coding agents. The CLI provides small graph-memory primitives; agent workflows are provided as skills.
|
|
4
|
+
|
|
5
|
+
Greplica normally stores the current Git repository's real remote URL and target root path. If the current directory is not inside a Git repository, Greplica stores memory against that folder path with no remote URL.
|
|
6
|
+
|
|
7
|
+
## Requirements
|
|
8
|
+
|
|
9
|
+
- Node.js and npm.
|
|
10
|
+
- Build tools needed by native npm packages such as `better-sqlite3`.
|
|
11
|
+
- An embedding provider for graph context search and proposal application. Local embeddings run in-process by default; OpenAI embeddings require `OPENAI_API_KEY` when configured.
|
|
12
|
+
|
|
13
|
+
## Agent Setup
|
|
14
|
+
|
|
15
|
+
Copy this prompt into the coding agent from the repository you want to use with Greplica:
|
|
16
|
+
|
|
17
|
+
`````txt
|
|
18
|
+
Install Greplica for this repo.
|
|
19
|
+
|
|
20
|
+
First install the CLI from the Greplica repo. If the package has already been published, use:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install -g greplica
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Otherwise install the current checkout:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install -g <path-to-greplica>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Then run exactly one of these commands.
|
|
33
|
+
|
|
34
|
+
Codex:
|
|
35
|
+
```bash
|
|
36
|
+
greplica install --platform codex --instructions user --embedding local
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Claude Code:
|
|
40
|
+
```bash
|
|
41
|
+
greplica install --platform claude --instructions user --embedding local
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Do not manually copy skills or edit instruction files. Let the installer do it.
|
|
45
|
+
|
|
46
|
+
After installation, tell me where the skills were installed, which user instruction file was updated, which embedding mode was configured, and whether I should restart the agent.
|
|
47
|
+
|
|
48
|
+
Then tell me how to use Greplica:
|
|
49
|
+
- Run "Use greplica-bootstrap for this repo." once per repo to initialize memory.
|
|
50
|
+
- During work, the agent will use `greplica graph context "<question>"` when it needs repo context that is not already in the conversation.
|
|
51
|
+
- Near the end of useful sessions, run "Use greplica-update-working-memory for this session." to save decisions, constraints, changed flows, and follow-up work.
|
|
52
|
+
`````
|
|
53
|
+
|
|
54
|
+
## Using Greplica
|
|
55
|
+
|
|
56
|
+
After setup, invoke the skills by asking your coding agent to use them:
|
|
57
|
+
|
|
58
|
+
```txt
|
|
59
|
+
Use greplica-bootstrap for this repo.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
```txt
|
|
63
|
+
Use greplica-update-working-memory for this session.
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Run bootstrap once near the start of using Greplica in a repo. Run update working memory near the end of a coding session when the session contains durable decisions, changed flows, constraints, follow-up work, or useful implementation context.
|
|
67
|
+
|
|
68
|
+
Do not run `greplica doctor` before normal Greplica commands. Use the intended command directly, such as `greplica graph context "<query>"`; if it fails, use the error message to decide whether `doctor` would help diagnose installation, target detection, or embedding-provider configuration.
|
|
69
|
+
|
|
70
|
+
## Updating Greplica
|
|
71
|
+
|
|
72
|
+
If Greplica was installed from a persistent source checkout, update it with:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
GREPLICA_SRC="${GREPLICA_SRC:-$HOME/.greplica/src/greplica}"
|
|
76
|
+
before="$(git -C "$GREPLICA_SRC" rev-parse HEAD)"
|
|
77
|
+
git -C "$GREPLICA_SRC" pull --ff-only --prune
|
|
78
|
+
after="$(git -C "$GREPLICA_SRC" rev-parse HEAD)"
|
|
79
|
+
|
|
80
|
+
if [ "$before" != "$after" ]; then
|
|
81
|
+
npm install --prefix "$GREPLICA_SRC"
|
|
82
|
+
npm install -g "$GREPLICA_SRC"
|
|
83
|
+
fi
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
If the checkout changed, copy the two skill folders from `$GREPLICA_SRC/skills/` over the installed skill folders again so agent instructions stay current.
|
|
87
|
+
|
|
88
|
+
Current source-install benchmark on this machine:
|
|
89
|
+
|
|
90
|
+
- Fresh documented clone/install/build/global-install flow: about 9.7s.
|
|
91
|
+
- Fresh persistent-checkout flow without the redundant explicit build: about 9.0s.
|
|
92
|
+
- Full cold start after deleting `~/.greplica`, with local embedding pre-warm via `greplica init --local`: about 38.9s.
|
|
93
|
+
- Optimized local cold start without pre-warming embeddings: about 7.6s; first graph-context query pays the local model download later.
|
|
94
|
+
- No-op update with unconditional reinstall: about 9.2s.
|
|
95
|
+
- No-op update with the conditional reinstall command above: about 2.9s.
|
|
96
|
+
- Direct `npm install -g git+ssh://...` is not reliable yet because the git dependency prepare step can fail before `tsc` is available.
|
|
97
|
+
|
|
98
|
+
The better long-term install path is to publish or attach a built package artifact that already contains `dist/`, `skills/`, and `README.md`. Then install/update can become a single `npm install -g <package-or-tarball>` command without cloning the repo or compiling TypeScript during user setup.
|
|
99
|
+
|
|
100
|
+
## Configuration
|
|
101
|
+
|
|
102
|
+
`greplica` stores default CLI config at `~/.greplica/config.json`:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"version": 1,
|
|
107
|
+
"embedding": {
|
|
108
|
+
"provider": "local",
|
|
109
|
+
"model": "all-mpnet-base-v2",
|
|
110
|
+
"dimensions": 768,
|
|
111
|
+
"batchSize": 16
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Print the config path, current JSON, allowed providers, and common examples:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
greplica config
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Edit the printed JSON file directly to change the selected embedding provider, model, dimensions, or batch size. For example:
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"version": 1,
|
|
127
|
+
"embedding": {
|
|
128
|
+
"provider": "openai",
|
|
129
|
+
"model": "text-embedding-3-small",
|
|
130
|
+
"dimensions": 1536,
|
|
131
|
+
"batchSize": 100
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Allowed `embedding.provider` values are `local` and `openai`.
|
|
137
|
+
|
|
138
|
+
`greplica init --local` and `greplica init --openai` also update the same config file to provider defaults while initializing memory for the current repo or folder and checking that the selected embedding provider is ready.
|
|
139
|
+
|
|
140
|
+
Local embeddings run in-process with a quantized Hugging Face Transformers model and cache model files under `~/.greplica/models`. The first `greplica init --local` or local embedding check downloads the configured model; subsequent runs reuse the cache.
|
|
141
|
+
|
|
142
|
+
Useful local model choices:
|
|
143
|
+
|
|
144
|
+
- `all-mpnet-base-v2`, 768 dimensions, default local model.
|
|
145
|
+
- `all-MiniLM-L6-v2`, 384 dimensions, smaller local option.
|
|
146
|
+
|
|
147
|
+
`greplica` looks for `OPENAI_API_KEY` in this order:
|
|
148
|
+
|
|
149
|
+
1. the process environment
|
|
150
|
+
2. `<target-root>/.env.local`
|
|
151
|
+
3. `<target-root>/.env`
|
|
152
|
+
|
|
153
|
+
The key is never printed by `greplica doctor`.
|
|
154
|
+
|
|
155
|
+
Memory is stored in `~/.greplica/graph.db` by default. Set `GREPLICA_HOME` only for tests or advanced isolated runs.
|
|
156
|
+
|
|
157
|
+
## Commands
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
greplica init [--local|--openai]
|
|
161
|
+
greplica config
|
|
162
|
+
greplica doctor [--check-embeddings]
|
|
163
|
+
greplica graph read
|
|
164
|
+
greplica graph context "<query>" [--json|--debug]
|
|
165
|
+
greplica proposal validate <proposal.json>
|
|
166
|
+
greplica proposal apply <proposal.json>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
`greplica graph context "<query>"` prints concise Markdown for coding-agent use. Use `--json` for compact structured output, or `--debug` for the full retrieval payload with ranking signals and embedding status.
|
|
170
|
+
|
|
171
|
+
`greplica` automatically prepares memory state when commands run, so users should not need a separate init step.
|
|
172
|
+
|
|
173
|
+
`greplica doctor` is for install verification and diagnosing failures, not a required preflight before every Greplica command.
|
|
174
|
+
|
|
175
|
+
## Alpha Status
|
|
176
|
+
|
|
177
|
+
Greplica is ready for small-team dogfooding. The bootstrap flow is the most stable path. The update-working-memory flow validates and applies proposals, but memory quality still needs human review, especially for nuanced session rationale, future work, and superseding older claims.
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
4
|
+
import { createLocalKnowledgeGraphService } from "../../libs/knowledge-graph/service.js";
|
|
5
|
+
import { envVarSource, loadRepoEnv } from "../../libs/env/load-local-env.js";
|
|
6
|
+
import { ensureGreplicaConfig, greplicaConfigPath, updateEmbeddingConfig, } from "../../libs/config/greplica-config.js";
|
|
7
|
+
import { graphContextConfigFromGreplicaConfig } from "../../libs/knowledge-graph/graph-context/config.js";
|
|
8
|
+
import { createEmbedder } from "../../libs/knowledge-graph/graph-context/embedder.js";
|
|
9
|
+
import { compactGraphContextResult, renderGraphContextMarkdown } from "../../libs/knowledge-graph/graph-context/render.js";
|
|
10
|
+
import { buildGraphFolderExport } from "../../libs/knowledge-graph/folder-export.js";
|
|
11
|
+
import { installGreplica } from "../../libs/install/install.js";
|
|
12
|
+
import { detectRepoContext } from "./repo-context.js";
|
|
13
|
+
async function main(argv) {
|
|
14
|
+
const [area, action, ...rest] = argv;
|
|
15
|
+
if (area === "install") {
|
|
16
|
+
const options = parseInstallArgs([action, ...rest].filter((arg) => arg !== undefined));
|
|
17
|
+
const result = await installGreplica({
|
|
18
|
+
...options,
|
|
19
|
+
repo: detectRepoContext(),
|
|
20
|
+
});
|
|
21
|
+
printInstallResult(result);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (area === "init") {
|
|
25
|
+
const initArgs = [action, ...rest].filter((arg) => arg !== undefined);
|
|
26
|
+
const provider = parseOptionalEmbeddingSelection(initArgs);
|
|
27
|
+
let configuredEmbedding;
|
|
28
|
+
if (provider !== undefined) {
|
|
29
|
+
const config = updateEmbeddingConfig({ provider });
|
|
30
|
+
configuredEmbedding = config.embedding;
|
|
31
|
+
console.log(`Config: ${displayConfigPath()}`);
|
|
32
|
+
printEmbeddingConfig(config.embedding);
|
|
33
|
+
}
|
|
34
|
+
const { repo, service } = createCommandContext();
|
|
35
|
+
const result = service.initRepo(repo);
|
|
36
|
+
console.log(result.created ? "Initialized Greplica memory." : "Greplica memory already initialized.");
|
|
37
|
+
console.log(`Repo: ${repo.repo_name}`);
|
|
38
|
+
console.log(`Repo root: ${repo.repo_root ?? ""}`);
|
|
39
|
+
console.log(`Remote: ${repo.remote_url ?? "none"}`);
|
|
40
|
+
console.log(`Default branch: ${repo.default_branch}`);
|
|
41
|
+
console.log(`Database: ${result.database_path}`);
|
|
42
|
+
console.log(`Main scope: ${result.main_scope_id}`);
|
|
43
|
+
console.log(`Working scope: ${result.working_scope_id}`);
|
|
44
|
+
if (configuredEmbedding !== undefined) {
|
|
45
|
+
if (!(await checkEmbeddings(configuredEmbedding)))
|
|
46
|
+
process.exitCode = 1;
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (area === "config") {
|
|
51
|
+
runConfigCommand([action, ...rest].filter((arg) => arg !== undefined));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (area === "doctor") {
|
|
55
|
+
await runDoctor([action, ...rest].filter((arg) => arg !== undefined));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (area === "graph" && action === "read") {
|
|
59
|
+
const { repo, service } = createCommandContext();
|
|
60
|
+
const graph = service.readGraph(repo);
|
|
61
|
+
console.log("Current graph view: main + working");
|
|
62
|
+
printSection("Components", graph.components, (item) => `${named(item)} ${anchor(item)}`.trim());
|
|
63
|
+
printSection("Flows", graph.flows, named);
|
|
64
|
+
printSection("Claims", graph.claims, (item) => `${field(item, "kind")}: ${field(item, "text")}`);
|
|
65
|
+
printSection("Sources", graph.sources, (item) => `${field(item, "kind")}: ${field(item, "title") || field(item, "ref")}`);
|
|
66
|
+
printSection("Edges", graph.edges, (item) => `${field(item, "from_type")}:${field(item, "from_id")} -[${field(item, "kind")}]-> ${field(item, "to_type")}:${field(item, "to_id")}`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (area === "graph" && action === "context") {
|
|
70
|
+
const output = parseGraphContextOutput(rest);
|
|
71
|
+
const query = rest.filter((arg) => arg !== "--json" && arg !== "--debug").join(" ").trim();
|
|
72
|
+
if (query.length === 0)
|
|
73
|
+
throw new Error(`Usage: greplica graph ${action} <query>`);
|
|
74
|
+
const { repo, service } = createCommandContext();
|
|
75
|
+
const result = await service.contextGraph(repo, query);
|
|
76
|
+
if (output === "debug") {
|
|
77
|
+
console.log(JSON.stringify(result, null, 2));
|
|
78
|
+
}
|
|
79
|
+
else if (output === "json") {
|
|
80
|
+
console.log(JSON.stringify(compactGraphContextResult(result), null, 2));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.log(renderGraphContextMarkdown(result));
|
|
84
|
+
}
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (area === "graph" && action === "export") {
|
|
88
|
+
const outputDir = requireFile(rest[0], "Usage: greplica graph export <dir>");
|
|
89
|
+
const { repo, service } = createCommandContext();
|
|
90
|
+
const files = buildGraphFolderExport(service.readGraph(repo));
|
|
91
|
+
writeGraphFolderExport(outputDir, files);
|
|
92
|
+
console.log(`Exported current graph view to ${outputDir}`);
|
|
93
|
+
console.log(`Files: ${files.length}`);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (area === "proposal" && action === "validate") {
|
|
97
|
+
const file = requireFile(rest[0], "Usage: greplica proposal validate <file>");
|
|
98
|
+
const { repo, service } = createCommandContext();
|
|
99
|
+
const proposal = readProposal(file);
|
|
100
|
+
const result = service.validateProposal(repo, proposal);
|
|
101
|
+
if (result.valid) {
|
|
102
|
+
console.log("Proposal is valid.");
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
console.log("Proposal is invalid:");
|
|
106
|
+
for (const error of result.errors)
|
|
107
|
+
console.log(`- ${error}`);
|
|
108
|
+
process.exitCode = 1;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (area === "proposal" && action === "apply") {
|
|
112
|
+
const file = requireFile(rest[0], "Usage: greplica proposal apply <file>");
|
|
113
|
+
const { repo, service } = createCommandContext();
|
|
114
|
+
const proposal = readProposal(file);
|
|
115
|
+
const result = await service.applyProposal(repo, proposal);
|
|
116
|
+
console.log("Applied proposal to working memory.");
|
|
117
|
+
console.log(`Memory commit: ${result.memory_commit_id}`);
|
|
118
|
+
console.log(`Scope: ${result.scope_id}`);
|
|
119
|
+
console.log(`Components: ${result.created.components}`);
|
|
120
|
+
console.log(`Flows: ${result.created.flows}`);
|
|
121
|
+
console.log(`Claims: ${result.created.claims}`);
|
|
122
|
+
console.log(`Sources: ${result.created.sources}`);
|
|
123
|
+
console.log(`Edges: ${result.created.edges}`);
|
|
124
|
+
console.log(`Embeddings checked: ${result.embedding_status.checked_objects}`);
|
|
125
|
+
console.log(`Embeddings created: ${result.embedding_status.created}`);
|
|
126
|
+
console.log(`Embeddings reused: ${result.embedding_status.reused}`);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
printHelp();
|
|
130
|
+
process.exitCode = area === undefined ? 0 : 1;
|
|
131
|
+
}
|
|
132
|
+
function createCommandContext() {
|
|
133
|
+
const repo = detectRepoContext();
|
|
134
|
+
const env = loadRepoEnv(repo.repo_root ?? process.cwd());
|
|
135
|
+
const config = ensureGreplicaConfig();
|
|
136
|
+
const service = createLocalKnowledgeGraphService(graphContextConfigFromGreplicaConfig(config));
|
|
137
|
+
return { repo, env, config, service };
|
|
138
|
+
}
|
|
139
|
+
async function runDoctor(args) {
|
|
140
|
+
let context;
|
|
141
|
+
try {
|
|
142
|
+
context = createCommandContext();
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
console.log("Repo: not detected");
|
|
146
|
+
console.log(error instanceof Error ? error.message : String(error));
|
|
147
|
+
process.exitCode = 1;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
let ready = true;
|
|
151
|
+
console.log("Greplica doctor");
|
|
152
|
+
console.log(`Repo: ${context.repo.repo_name}`);
|
|
153
|
+
console.log(`Repo root: ${context.repo.repo_root ?? ""}`);
|
|
154
|
+
console.log(`Remote: ${context.repo.remote_url ?? "none"}`);
|
|
155
|
+
console.log(`Default branch: ${context.repo.default_branch}`);
|
|
156
|
+
try {
|
|
157
|
+
const result = context.service.initRepo(context.repo);
|
|
158
|
+
console.log(`Database: ${result.database_path}`);
|
|
159
|
+
console.log(`Memory state: ${result.created ? "initialized" : "ready"}`);
|
|
160
|
+
console.log(`Main scope: ${result.main_scope_id}`);
|
|
161
|
+
console.log(`Working scope: ${result.working_scope_id}`);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
ready = false;
|
|
165
|
+
console.log("Memory state: failed");
|
|
166
|
+
console.log(error instanceof Error ? error.message : String(error));
|
|
167
|
+
}
|
|
168
|
+
console.log(`Config: ${displayConfigPath()}`);
|
|
169
|
+
printEmbeddingConfig(context.config.embedding);
|
|
170
|
+
if (context.config.embedding.provider === "openai") {
|
|
171
|
+
const source = envVarSource("OPENAI_API_KEY", context.env);
|
|
172
|
+
if (source === undefined) {
|
|
173
|
+
ready = false;
|
|
174
|
+
console.log("OPENAI_API_KEY: missing");
|
|
175
|
+
console.log("Set OPENAI_API_KEY in the shell, target-root .env.local, or target-root .env.");
|
|
176
|
+
}
|
|
177
|
+
else if (source.kind === "environment") {
|
|
178
|
+
console.log("OPENAI_API_KEY: found in environment");
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
console.log(`OPENAI_API_KEY: found in ${source.path}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (args.includes("--check-embeddings") || args.includes("--check-openai")) {
|
|
185
|
+
ready = (await checkEmbeddings(context.config.embedding)) && ready;
|
|
186
|
+
}
|
|
187
|
+
process.exitCode = ready ? 0 : 1;
|
|
188
|
+
}
|
|
189
|
+
async function checkEmbeddings(config) {
|
|
190
|
+
try {
|
|
191
|
+
console.log(`Checking ${config.provider} embeddings...`);
|
|
192
|
+
const embedder = createEmbedder(config);
|
|
193
|
+
await embedder.embed("greplica embeddings check");
|
|
194
|
+
console.log(`${config.provider} embeddings: ok`);
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
console.log(`${config.provider} embeddings: failed`);
|
|
199
|
+
console.log(error instanceof Error ? error.message : String(error));
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
function runConfigCommand(args) {
|
|
204
|
+
if (args.length > 0)
|
|
205
|
+
throw new Error("Usage: greplica config");
|
|
206
|
+
const config = ensureGreplicaConfig();
|
|
207
|
+
console.log("Greplica config");
|
|
208
|
+
console.log(`Path: ${displayConfigPath()}`);
|
|
209
|
+
console.log("");
|
|
210
|
+
console.log("Edit this JSON to change Greplica defaults:");
|
|
211
|
+
console.log(JSON.stringify(config, null, 2));
|
|
212
|
+
console.log("");
|
|
213
|
+
console.log("Allowed embedding.provider values:");
|
|
214
|
+
console.log("- local");
|
|
215
|
+
console.log("- openai");
|
|
216
|
+
console.log("");
|
|
217
|
+
console.log("Common embedding examples:");
|
|
218
|
+
console.log("- local MPNet base: provider=local, model=all-mpnet-base-v2, dimensions=768, batchSize=16");
|
|
219
|
+
console.log("- local MiniLM: provider=local, model=all-MiniLM-L6-v2, dimensions=384, batchSize=32");
|
|
220
|
+
console.log("- OpenAI small: provider=openai, model=text-embedding-3-small, dimensions=1536, batchSize=100");
|
|
221
|
+
}
|
|
222
|
+
function parseOptionalEmbeddingSelection(args) {
|
|
223
|
+
const local = args.includes("--local");
|
|
224
|
+
const openai = args.includes("--openai");
|
|
225
|
+
if (local && openai)
|
|
226
|
+
throw new Error("Use either --local or --openai, not both.");
|
|
227
|
+
if (!local && !openai) {
|
|
228
|
+
if (args.length === 0)
|
|
229
|
+
return undefined;
|
|
230
|
+
throw new Error("Usage: greplica init [--local|--openai]");
|
|
231
|
+
}
|
|
232
|
+
if (args.length !== 1)
|
|
233
|
+
throw new Error("Usage: greplica init [--local|--openai]");
|
|
234
|
+
return local ? "local" : "openai";
|
|
235
|
+
}
|
|
236
|
+
function parseInstallArgs(args) {
|
|
237
|
+
let platform;
|
|
238
|
+
let instructions;
|
|
239
|
+
let embedding;
|
|
240
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
241
|
+
const arg = args[index];
|
|
242
|
+
if (arg === "--platform") {
|
|
243
|
+
if (platform !== undefined)
|
|
244
|
+
throw new Error(`Specify --platform only once.\n${installUsage()}`);
|
|
245
|
+
platform = parseInstallPlatform(requireFlagValue(args, index, "--platform"));
|
|
246
|
+
index += 1;
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
if (arg.startsWith("--platform=")) {
|
|
250
|
+
if (platform !== undefined)
|
|
251
|
+
throw new Error(`Specify --platform only once.\n${installUsage()}`);
|
|
252
|
+
platform = parseInstallPlatform(arg.slice("--platform=".length));
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (arg === "--instructions") {
|
|
256
|
+
if (instructions !== undefined)
|
|
257
|
+
throw new Error(`Specify --instructions only once.\n${installUsage()}`);
|
|
258
|
+
instructions = parseInstructionScope(requireFlagValue(args, index, "--instructions"));
|
|
259
|
+
index += 1;
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
if (arg.startsWith("--instructions=")) {
|
|
263
|
+
if (instructions !== undefined)
|
|
264
|
+
throw new Error(`Specify --instructions only once.\n${installUsage()}`);
|
|
265
|
+
instructions = parseInstructionScope(arg.slice("--instructions=".length));
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
if (arg === "--embedding") {
|
|
269
|
+
if (embedding !== undefined)
|
|
270
|
+
throw new Error(`Specify --embedding only once.\n${installUsage()}`);
|
|
271
|
+
embedding = parseInstallEmbedding(requireFlagValue(args, index, "--embedding"));
|
|
272
|
+
index += 1;
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
if (arg.startsWith("--embedding=")) {
|
|
276
|
+
if (embedding !== undefined)
|
|
277
|
+
throw new Error(`Specify --embedding only once.\n${installUsage()}`);
|
|
278
|
+
embedding = parseInstallEmbedding(arg.slice("--embedding=".length));
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
throw new Error(installUsage());
|
|
282
|
+
}
|
|
283
|
+
if (platform === undefined || instructions === undefined || embedding === undefined)
|
|
284
|
+
throw new Error(installUsage());
|
|
285
|
+
return { platform, instructions, embedding };
|
|
286
|
+
}
|
|
287
|
+
function requireFlagValue(args, index, flag) {
|
|
288
|
+
const value = args[index + 1];
|
|
289
|
+
if (value === undefined || value.startsWith("--"))
|
|
290
|
+
throw new Error(`Missing value for ${flag}.\n${installUsage()}`);
|
|
291
|
+
return value;
|
|
292
|
+
}
|
|
293
|
+
function parseInstallPlatform(value) {
|
|
294
|
+
if (value === "codex" || value === "claude")
|
|
295
|
+
return value;
|
|
296
|
+
throw new Error(`Invalid --platform ${value}.\n${installUsage()}`);
|
|
297
|
+
}
|
|
298
|
+
function parseInstructionScope(value) {
|
|
299
|
+
if (value === "user" || value === "project" || value === "none")
|
|
300
|
+
return value;
|
|
301
|
+
throw new Error(`Invalid --instructions ${value}.\n${installUsage()}`);
|
|
302
|
+
}
|
|
303
|
+
function parseInstallEmbedding(value) {
|
|
304
|
+
if (value === "local" || value === "openai")
|
|
305
|
+
return value;
|
|
306
|
+
throw new Error(`Invalid --embedding ${value}.\n${installUsage()}`);
|
|
307
|
+
}
|
|
308
|
+
function printInstallResult(result) {
|
|
309
|
+
console.log(`Installed Greplica for ${result.platform === "codex" ? "Codex" : "Claude Code"}.`);
|
|
310
|
+
console.log("");
|
|
311
|
+
console.log("Skills:");
|
|
312
|
+
for (const skill of result.skills)
|
|
313
|
+
console.log(`- ${skill}`);
|
|
314
|
+
console.log("");
|
|
315
|
+
console.log("Instructions:");
|
|
316
|
+
console.log(result.instructionFile === undefined ? "- not updated (--instructions none)" : `- ${result.instructionFile} updated`);
|
|
317
|
+
console.log("");
|
|
318
|
+
console.log("Embedding:");
|
|
319
|
+
console.log(`- ${result.embedding}`);
|
|
320
|
+
console.log(`- config: ${result.configFile}`);
|
|
321
|
+
console.log(`- database: ${result.databasePath}`);
|
|
322
|
+
console.log("");
|
|
323
|
+
console.log("Next:");
|
|
324
|
+
console.log("- Use greplica-bootstrap once per repo to initialize memory.");
|
|
325
|
+
console.log("- During work, use greplica graph context \"<question>\" when repo context is not already in the conversation.");
|
|
326
|
+
console.log("- Near the end of useful sessions, use greplica-update-working-memory to save decisions, constraints, changed flows, and follow-up work.");
|
|
327
|
+
for (const note of result.notes)
|
|
328
|
+
console.log(`- ${note}`);
|
|
329
|
+
}
|
|
330
|
+
function installUsage() {
|
|
331
|
+
const cli = basename(process.argv[1] ?? "greplica");
|
|
332
|
+
return `Usage: ${cli} install --platform codex|claude --instructions user|project|none --embedding local|openai`;
|
|
333
|
+
}
|
|
334
|
+
function printEmbeddingConfig(config) {
|
|
335
|
+
console.log(`Embedding provider: ${config.provider}`);
|
|
336
|
+
console.log(`Embedding model: ${config.model}`);
|
|
337
|
+
console.log(`Embedding dimensions: ${config.dimensions}`);
|
|
338
|
+
console.log(`Embedding batch size: ${config.batchSize}`);
|
|
339
|
+
}
|
|
340
|
+
function displayConfigPath() {
|
|
341
|
+
return resolve(greplicaConfigPath());
|
|
342
|
+
}
|
|
343
|
+
function readProposal(file) {
|
|
344
|
+
return JSON.parse(readFileSync(file, "utf8"));
|
|
345
|
+
}
|
|
346
|
+
function requireFile(file, usage) {
|
|
347
|
+
if (file === undefined || file.trim().length === 0)
|
|
348
|
+
throw new Error(usage);
|
|
349
|
+
return file;
|
|
350
|
+
}
|
|
351
|
+
function parseGraphContextOutput(args) {
|
|
352
|
+
const json = args.includes("--json");
|
|
353
|
+
const debug = args.includes("--debug");
|
|
354
|
+
if (json && debug)
|
|
355
|
+
throw new Error("Use either --json or --debug, not both.");
|
|
356
|
+
if (debug)
|
|
357
|
+
return "debug";
|
|
358
|
+
if (json)
|
|
359
|
+
return "json";
|
|
360
|
+
return "markdown";
|
|
361
|
+
}
|
|
362
|
+
function writeGraphFolderExport(outputDir, files) {
|
|
363
|
+
mkdirSync(outputDir, { recursive: true });
|
|
364
|
+
for (const file of files) {
|
|
365
|
+
const outputPath = join(outputDir, file.path);
|
|
366
|
+
mkdirSync(dirname(outputPath), { recursive: true });
|
|
367
|
+
writeFileSync(outputPath, file.content, "utf8");
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
function printSection(title, items, format) {
|
|
371
|
+
console.log(`${title}: ${items.length}`);
|
|
372
|
+
for (const item of items) {
|
|
373
|
+
console.log(`- ${field(item, "id")} ${format(item)}`.trim());
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
function named(item) {
|
|
377
|
+
return item.name ?? item.id;
|
|
378
|
+
}
|
|
379
|
+
function anchor(item) {
|
|
380
|
+
const record = item;
|
|
381
|
+
return typeof record.code_anchor === "string" ? `(${record.code_anchor})` : "";
|
|
382
|
+
}
|
|
383
|
+
function field(item, key) {
|
|
384
|
+
const value = item[key];
|
|
385
|
+
return value === undefined || value === null ? "" : String(value);
|
|
386
|
+
}
|
|
387
|
+
function printHelp() {
|
|
388
|
+
const cli = basename(process.argv[1] ?? "greplica");
|
|
389
|
+
console.log(`Usage:
|
|
390
|
+
${cli} install --platform codex|claude --instructions user|project|none --embedding local|openai
|
|
391
|
+
${cli} init [--local|--openai]
|
|
392
|
+
${cli} config
|
|
393
|
+
${cli} doctor [--check-embeddings]
|
|
394
|
+
${cli} graph read
|
|
395
|
+
${cli} graph context <query> [--json|--debug]
|
|
396
|
+
${cli} graph export <dir>
|
|
397
|
+
${cli} proposal validate <file>
|
|
398
|
+
${cli} proposal apply <file>`);
|
|
399
|
+
}
|
|
400
|
+
main(process.argv.slice(2)).catch((error) => {
|
|
401
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
402
|
+
process.exitCode = 1;
|
|
403
|
+
});
|
|
404
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../apps/cli/main.ts"],"names":[],"mappings":"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"}
|