@joshuaswarren/openclaw-engram 9.0.93 → 9.0.95
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/bin/engram-access.js +9 -0
- package/dist/access-cli.js +219 -0
- package/dist/access-cli.js.map +1 -0
- package/dist/chunk-AHYRVKIJ.js +28110 -0
- package/dist/chunk-AHYRVKIJ.js.map +1 -0
- package/dist/index.js +6710 -34622
- package/dist/index.js.map +1 -1
- package/package.json +8 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import("../dist/access-cli.js")
|
|
4
|
+
.then(({ runCli }) => runCli(process.argv.slice(2)))
|
|
5
|
+
.catch((error) => {
|
|
6
|
+
const message = error instanceof Error ? error.message : "unknown load error";
|
|
7
|
+
console.error(`access-cli failed to load dist/access-cli.js: ${message}`);
|
|
8
|
+
process.exit(1);
|
|
9
|
+
});
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
// openclaw-engram: Local-first memory plugin
|
|
2
|
+
import {
|
|
3
|
+
EngramAccessService,
|
|
4
|
+
Orchestrator,
|
|
5
|
+
parseConfig
|
|
6
|
+
} from "./chunk-AHYRVKIJ.js";
|
|
7
|
+
import "./chunk-R2BJ47PU.js";
|
|
8
|
+
import "./chunk-WSXU2GHQ.js";
|
|
9
|
+
import "./chunk-H7LMMCVZ.js";
|
|
10
|
+
import "./chunk-BNBG2XP6.js";
|
|
11
|
+
import "./chunk-AFMNQR7H.js";
|
|
12
|
+
import "./chunk-PW5V7OJH.js";
|
|
13
|
+
import "./chunk-DEIBZP3O.js";
|
|
14
|
+
import "./chunk-SSIIJJKA.js";
|
|
15
|
+
|
|
16
|
+
// src/access-cli.ts
|
|
17
|
+
import fs from "fs";
|
|
18
|
+
import os from "os";
|
|
19
|
+
import path from "path";
|
|
20
|
+
var UsageError = class extends Error {
|
|
21
|
+
constructor(kind, optionName) {
|
|
22
|
+
super("invalid access-cli arguments");
|
|
23
|
+
this.kind = kind;
|
|
24
|
+
this.optionName = optionName;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
function formatUsageError(error) {
|
|
28
|
+
switch (error.kind) {
|
|
29
|
+
case "unsupported-command":
|
|
30
|
+
return "unsupported command";
|
|
31
|
+
case "unexpected-positional":
|
|
32
|
+
return "unexpected positional argument";
|
|
33
|
+
case "missing-option":
|
|
34
|
+
return `missing required option: --${error.optionName ?? "unknown"}`;
|
|
35
|
+
case "missing-content":
|
|
36
|
+
return "missing required option: --content or --content-file";
|
|
37
|
+
case "invalid-integer":
|
|
38
|
+
return `invalid integer for --${error.optionName ?? "unknown"}`;
|
|
39
|
+
case "invalid-number":
|
|
40
|
+
return `invalid number for --${error.optionName ?? "unknown"}`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function writeCliOutput(text = "") {
|
|
44
|
+
process.stdout.write(`${text}
|
|
45
|
+
`);
|
|
46
|
+
}
|
|
47
|
+
function usage() {
|
|
48
|
+
return [
|
|
49
|
+
"Usage:",
|
|
50
|
+
" engram-access browse [options]",
|
|
51
|
+
" engram-access store [options]",
|
|
52
|
+
"",
|
|
53
|
+
"Browse options:",
|
|
54
|
+
" --namespace <name>",
|
|
55
|
+
" --query <text>",
|
|
56
|
+
" --category <name>",
|
|
57
|
+
" --status <name>",
|
|
58
|
+
" --sort <updated_desc|updated_asc|created_desc|created_asc>",
|
|
59
|
+
" --limit <n>",
|
|
60
|
+
" --offset <n>",
|
|
61
|
+
"",
|
|
62
|
+
"Store options:",
|
|
63
|
+
" --namespace <name>",
|
|
64
|
+
" --session-key <key>",
|
|
65
|
+
" --principal <principal>",
|
|
66
|
+
" --content <text> | --content-file <path>",
|
|
67
|
+
" --category <name>",
|
|
68
|
+
" --confidence <0-1>",
|
|
69
|
+
" --tag <tag> (repeatable)",
|
|
70
|
+
" --entity-ref <ref>",
|
|
71
|
+
" --ttl <duration>",
|
|
72
|
+
" --source-reason <text>",
|
|
73
|
+
" --idempotency-key <key>",
|
|
74
|
+
" --dry-run"
|
|
75
|
+
].join("\n");
|
|
76
|
+
}
|
|
77
|
+
function parseArgs(argv) {
|
|
78
|
+
const [commandRaw, ...rest] = argv;
|
|
79
|
+
if (commandRaw !== "browse" && commandRaw !== "store") {
|
|
80
|
+
throw new UsageError("unsupported-command");
|
|
81
|
+
}
|
|
82
|
+
const options = {};
|
|
83
|
+
const flags = /* @__PURE__ */ new Set();
|
|
84
|
+
for (let i = 0; i < rest.length; i += 1) {
|
|
85
|
+
const token = rest[i];
|
|
86
|
+
if (!token.startsWith("--")) {
|
|
87
|
+
throw new UsageError("unexpected-positional");
|
|
88
|
+
}
|
|
89
|
+
const key = token.slice(2);
|
|
90
|
+
const next = rest[i + 1];
|
|
91
|
+
if (!next || next.startsWith("--")) {
|
|
92
|
+
flags.add(key);
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (!options[key]) {
|
|
96
|
+
options[key] = [];
|
|
97
|
+
}
|
|
98
|
+
options[key].push(next);
|
|
99
|
+
i += 1;
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
command: commandRaw,
|
|
103
|
+
options,
|
|
104
|
+
flags
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function getLastOption(args, name) {
|
|
108
|
+
const values = args.options[name];
|
|
109
|
+
if (!values || values.length === 0) return void 0;
|
|
110
|
+
return values[values.length - 1];
|
|
111
|
+
}
|
|
112
|
+
function getAllOptions(args, name) {
|
|
113
|
+
return args.options[name] ?? [];
|
|
114
|
+
}
|
|
115
|
+
function requireOption(args, name) {
|
|
116
|
+
const value = getLastOption(args, name);
|
|
117
|
+
if (!value || value.trim().length === 0) {
|
|
118
|
+
throw new UsageError("missing-option", name);
|
|
119
|
+
}
|
|
120
|
+
return value;
|
|
121
|
+
}
|
|
122
|
+
function parseIntegerOption(args, name) {
|
|
123
|
+
const raw = getLastOption(args, name);
|
|
124
|
+
if (!raw) return void 0;
|
|
125
|
+
const value = parseInt(raw, 10);
|
|
126
|
+
if (!Number.isFinite(value)) {
|
|
127
|
+
throw new UsageError("invalid-integer", name);
|
|
128
|
+
}
|
|
129
|
+
return value;
|
|
130
|
+
}
|
|
131
|
+
function parseFloatOption(args, name) {
|
|
132
|
+
const raw = getLastOption(args, name);
|
|
133
|
+
if (!raw) return void 0;
|
|
134
|
+
const value = Number.parseFloat(raw);
|
|
135
|
+
if (!Number.isFinite(value)) {
|
|
136
|
+
throw new UsageError("invalid-number", name);
|
|
137
|
+
}
|
|
138
|
+
return value;
|
|
139
|
+
}
|
|
140
|
+
function loadPluginConfig() {
|
|
141
|
+
const configPath = process.env.OPENCLAW_ENGRAM_CONFIG_PATH || process.env.OPENCLAW_CONFIG_PATH || path.join(process.env.HOME ?? os.homedir(), ".openclaw", "openclaw.json");
|
|
142
|
+
const raw = JSON.parse(fs.readFileSync(configPath, "utf8"));
|
|
143
|
+
return raw?.plugins?.entries?.["openclaw-engram"]?.config ?? {};
|
|
144
|
+
}
|
|
145
|
+
function buildRuntime() {
|
|
146
|
+
const config = parseConfig(loadPluginConfig());
|
|
147
|
+
return {
|
|
148
|
+
config,
|
|
149
|
+
service: new EngramAccessService(new Orchestrator(config))
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
async function runBrowse(args) {
|
|
153
|
+
const { service } = buildRuntime();
|
|
154
|
+
const result = await service.memoryBrowse({
|
|
155
|
+
namespace: getLastOption(args, "namespace"),
|
|
156
|
+
query: getLastOption(args, "query"),
|
|
157
|
+
category: getLastOption(args, "category"),
|
|
158
|
+
status: getLastOption(args, "status"),
|
|
159
|
+
sort: getLastOption(args, "sort"),
|
|
160
|
+
limit: parseIntegerOption(args, "limit"),
|
|
161
|
+
offset: parseIntegerOption(args, "offset")
|
|
162
|
+
});
|
|
163
|
+
console.log(JSON.stringify(result, null, 2));
|
|
164
|
+
}
|
|
165
|
+
async function runStore(args) {
|
|
166
|
+
const { config, service } = buildRuntime();
|
|
167
|
+
const contentFile = getLastOption(args, "content-file");
|
|
168
|
+
const inlineContent = getLastOption(args, "content");
|
|
169
|
+
const content = contentFile ? fs.readFileSync(contentFile, "utf8") : inlineContent;
|
|
170
|
+
if (!content || content.trim().length === 0) {
|
|
171
|
+
throw new UsageError("missing-content");
|
|
172
|
+
}
|
|
173
|
+
const result = await service.memoryStore({
|
|
174
|
+
namespace: getLastOption(args, "namespace"),
|
|
175
|
+
sessionKey: getLastOption(args, "session-key"),
|
|
176
|
+
authenticatedPrincipal: getLastOption(args, "principal") ?? config.agentAccessHttp.principal,
|
|
177
|
+
content,
|
|
178
|
+
category: requireOption(args, "category"),
|
|
179
|
+
confidence: parseFloatOption(args, "confidence"),
|
|
180
|
+
tags: getAllOptions(args, "tag"),
|
|
181
|
+
entityRef: getLastOption(args, "entity-ref"),
|
|
182
|
+
ttl: getLastOption(args, "ttl"),
|
|
183
|
+
sourceReason: getLastOption(args, "source-reason"),
|
|
184
|
+
idempotencyKey: getLastOption(args, "idempotency-key"),
|
|
185
|
+
dryRun: args.flags.has("dry-run")
|
|
186
|
+
});
|
|
187
|
+
console.log(JSON.stringify(result, null, 2));
|
|
188
|
+
}
|
|
189
|
+
async function main(argv = process.argv.slice(2)) {
|
|
190
|
+
const args = parseArgs(argv);
|
|
191
|
+
if (args.command === "browse") {
|
|
192
|
+
await runBrowse(args);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
await runStore(args);
|
|
196
|
+
}
|
|
197
|
+
function printUsage() {
|
|
198
|
+
writeCliOutput(usage());
|
|
199
|
+
}
|
|
200
|
+
async function runCli(argv = process.argv.slice(2)) {
|
|
201
|
+
try {
|
|
202
|
+
await main(argv);
|
|
203
|
+
} catch (error) {
|
|
204
|
+
if (error instanceof UsageError) {
|
|
205
|
+
writeCliOutput(formatUsageError(error));
|
|
206
|
+
writeCliOutput();
|
|
207
|
+
printUsage();
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
console.error("access-cli failed");
|
|
211
|
+
process.exit(1);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
export {
|
|
215
|
+
main,
|
|
216
|
+
printUsage,
|
|
217
|
+
runCli
|
|
218
|
+
};
|
|
219
|
+
//# sourceMappingURL=access-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/access-cli.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { parseConfig } from \"./config.js\";\nimport type { PluginConfig } from \"./types.js\";\nimport { Orchestrator } from \"./orchestrator.js\";\nimport { EngramAccessService } from \"./access-service.js\";\n\ntype CommandName = \"browse\" | \"store\";\n\ntype ParsedArgs = {\n command: CommandName;\n options: Record<string, string[]>;\n flags: Set<string>;\n};\n\ntype Runtime = {\n config: PluginConfig;\n service: EngramAccessService;\n};\n\ntype UsageErrorKind =\n | \"unsupported-command\"\n | \"unexpected-positional\"\n | \"missing-option\"\n | \"missing-content\"\n | \"invalid-integer\"\n | \"invalid-number\";\n\nclass UsageError extends Error {\n constructor(\n readonly kind: UsageErrorKind,\n readonly optionName?: string,\n ) {\n super(\"invalid access-cli arguments\");\n }\n}\n\nfunction formatUsageError(error: UsageError): string {\n switch (error.kind) {\n case \"unsupported-command\":\n return \"unsupported command\";\n case \"unexpected-positional\":\n return \"unexpected positional argument\";\n case \"missing-option\":\n return `missing required option: --${error.optionName ?? \"unknown\"}`;\n case \"missing-content\":\n return \"missing required option: --content or --content-file\";\n case \"invalid-integer\":\n return `invalid integer for --${error.optionName ?? \"unknown\"}`;\n case \"invalid-number\":\n return `invalid number for --${error.optionName ?? \"unknown\"}`;\n }\n}\n\nfunction writeCliOutput(text: string = \"\"): void {\n process.stdout.write(`${text}\\n`);\n}\n\nfunction usage(): string {\n return [\n \"Usage:\",\n \" engram-access browse [options]\",\n \" engram-access store [options]\",\n \"\",\n \"Browse options:\",\n \" --namespace <name>\",\n \" --query <text>\",\n \" --category <name>\",\n \" --status <name>\",\n \" --sort <updated_desc|updated_asc|created_desc|created_asc>\",\n \" --limit <n>\",\n \" --offset <n>\",\n \"\",\n \"Store options:\",\n \" --namespace <name>\",\n \" --session-key <key>\",\n \" --principal <principal>\",\n \" --content <text> | --content-file <path>\",\n \" --category <name>\",\n \" --confidence <0-1>\",\n \" --tag <tag> (repeatable)\",\n \" --entity-ref <ref>\",\n \" --ttl <duration>\",\n \" --source-reason <text>\",\n \" --idempotency-key <key>\",\n \" --dry-run\",\n ].join(\"\\n\");\n}\n\nfunction parseArgs(argv: string[]): ParsedArgs {\n const [commandRaw, ...rest] = argv;\n if (commandRaw !== \"browse\" && commandRaw !== \"store\") {\n throw new UsageError(\"unsupported-command\");\n }\n\n const options: Record<string, string[]> = {};\n const flags = new Set<string>();\n\n for (let i = 0; i < rest.length; i += 1) {\n const token = rest[i];\n if (!token.startsWith(\"--\")) {\n throw new UsageError(\"unexpected-positional\");\n }\n const key = token.slice(2);\n const next = rest[i + 1];\n if (!next || next.startsWith(\"--\")) {\n flags.add(key);\n continue;\n }\n if (!options[key]) {\n options[key] = [];\n }\n options[key].push(next);\n i += 1;\n }\n\n return {\n command: commandRaw,\n options,\n flags,\n };\n}\n\nfunction getLastOption(args: ParsedArgs, name: string): string | undefined {\n const values = args.options[name];\n if (!values || values.length === 0) return undefined;\n return values[values.length - 1];\n}\n\nfunction getAllOptions(args: ParsedArgs, name: string): string[] {\n return args.options[name] ?? [];\n}\n\nfunction requireOption(args: ParsedArgs, name: string): string {\n const value = getLastOption(args, name);\n if (!value || value.trim().length === 0) {\n throw new UsageError(\"missing-option\", name);\n }\n return value;\n}\n\nfunction parseIntegerOption(args: ParsedArgs, name: string): number | undefined {\n const raw = getLastOption(args, name);\n if (!raw) return undefined;\n const value = parseInt(raw, 10);\n if (!Number.isFinite(value)) {\n throw new UsageError(\"invalid-integer\", name);\n }\n return value;\n}\n\nfunction parseFloatOption(args: ParsedArgs, name: string): number | undefined {\n const raw = getLastOption(args, name);\n if (!raw) return undefined;\n const value = Number.parseFloat(raw);\n if (!Number.isFinite(value)) {\n throw new UsageError(\"invalid-number\", name);\n }\n return value;\n}\n\nfunction loadPluginConfig(): Record<string, unknown> {\n const configPath =\n process.env.OPENCLAW_ENGRAM_CONFIG_PATH ||\n process.env.OPENCLAW_CONFIG_PATH ||\n path.join(process.env.HOME ?? os.homedir(), \".openclaw\", \"openclaw.json\");\n const raw = JSON.parse(fs.readFileSync(configPath, \"utf8\"));\n return raw?.plugins?.entries?.[\"openclaw-engram\"]?.config ?? {};\n}\n\nfunction buildRuntime(): Runtime {\n const config = parseConfig(loadPluginConfig());\n return {\n config,\n service: new EngramAccessService(new Orchestrator(config)),\n };\n}\n\nasync function runBrowse(args: ParsedArgs): Promise<void> {\n const { service } = buildRuntime();\n const result = await service.memoryBrowse({\n namespace: getLastOption(args, \"namespace\"),\n query: getLastOption(args, \"query\"),\n category: getLastOption(args, \"category\"),\n status: getLastOption(args, \"status\"),\n sort: getLastOption(args, \"sort\") as \"updated_desc\" | \"updated_asc\" | \"created_desc\" | \"created_asc\" | undefined,\n limit: parseIntegerOption(args, \"limit\"),\n offset: parseIntegerOption(args, \"offset\"),\n });\n console.log(JSON.stringify(result, null, 2));\n}\n\nasync function runStore(args: ParsedArgs): Promise<void> {\n const { config, service } = buildRuntime();\n const contentFile = getLastOption(args, \"content-file\");\n const inlineContent = getLastOption(args, \"content\");\n const content = contentFile ? fs.readFileSync(contentFile, \"utf8\") : inlineContent;\n if (!content || content.trim().length === 0) {\n throw new UsageError(\"missing-content\");\n }\n\n const result = await service.memoryStore({\n namespace: getLastOption(args, \"namespace\"),\n sessionKey: getLastOption(args, \"session-key\"),\n authenticatedPrincipal: getLastOption(args, \"principal\") ?? config.agentAccessHttp.principal,\n content,\n category: requireOption(args, \"category\"),\n confidence: parseFloatOption(args, \"confidence\"),\n tags: getAllOptions(args, \"tag\"),\n entityRef: getLastOption(args, \"entity-ref\"),\n ttl: getLastOption(args, \"ttl\"),\n sourceReason: getLastOption(args, \"source-reason\"),\n idempotencyKey: getLastOption(args, \"idempotency-key\"),\n dryRun: args.flags.has(\"dry-run\"),\n });\n console.log(JSON.stringify(result, null, 2));\n}\n\nexport async function main(argv: string[] = process.argv.slice(2)): Promise<void> {\n const args = parseArgs(argv);\n if (args.command === \"browse\") {\n await runBrowse(args);\n return;\n }\n await runStore(args);\n}\n\nexport function printUsage(): void {\n writeCliOutput(usage());\n}\n\nexport async function runCli(argv: string[] = process.argv.slice(2)): Promise<void> {\n try {\n await main(argv);\n } catch (error) {\n if (error instanceof UsageError) {\n writeCliOutput(formatUsageError(error));\n writeCliOutput();\n printUsage();\n process.exit(1);\n }\n\n console.error(\"access-cli failed\");\n process.exit(1);\n }\n}\n"],"mappings":"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","names":[]}
|