@nex-ai/nex 0.1.64 → 0.1.66
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/dist/commands/dispatch.js +4 -10
- package/dist/commands/dispatch.js.map +1 -1
- package/dist/commands/scan.js +4 -0
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/setup.js +4 -0
- package/dist/commands/setup.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/lib/compounding-worker.d.ts +2 -0
- package/dist/lib/compounding-worker.js +21 -0
- package/dist/lib/compounding-worker.js.map +1 -0
- package/dist/lib/compounding.d.ts +20 -0
- package/dist/lib/compounding.js +45 -0
- package/dist/lib/compounding.js.map +1 -0
- package/dist/lib/installers.js +3 -2
- package/dist/lib/installers.js.map +1 -1
- package/dist/mcp/index.js +0 -0
- package/dist/plugin/adapters/cline-capture.d.ts +7 -0
- package/dist/plugin/adapters/cline-capture.js +25 -0
- package/dist/plugin/adapters/cline-capture.js.map +1 -0
- package/dist/plugin/adapters/cline-recall.d.ts +7 -0
- package/dist/plugin/adapters/cline-recall.js +30 -0
- package/dist/plugin/adapters/cline-recall.js.map +1 -0
- package/dist/plugin/adapters/cline-task-start.d.ts +7 -0
- package/dist/plugin/adapters/cline-task-start.js +30 -0
- package/dist/plugin/adapters/cline-task-start.js.map +1 -0
- package/dist/plugin/adapters/cursor-recall.d.ts +7 -0
- package/dist/plugin/adapters/cursor-recall.js +31 -0
- package/dist/plugin/adapters/cursor-recall.js.map +1 -0
- package/dist/plugin/adapters/cursor-session-start.d.ts +7 -0
- package/dist/plugin/adapters/cursor-session-start.js +30 -0
- package/dist/plugin/adapters/cursor-session-start.js.map +1 -0
- package/dist/plugin/adapters/cursor-stop.d.ts +7 -0
- package/dist/plugin/adapters/cursor-stop.js +25 -0
- package/dist/plugin/adapters/cursor-stop.js.map +1 -0
- package/dist/plugin/adapters/windsurf-capture.d.ts +7 -0
- package/dist/plugin/adapters/windsurf-capture.js +25 -0
- package/dist/plugin/adapters/windsurf-capture.js.map +1 -0
- package/dist/plugin/adapters/windsurf-recall.d.ts +7 -0
- package/dist/plugin/adapters/windsurf-recall.js +31 -0
- package/dist/plugin/adapters/windsurf-recall.js.map +1 -0
- package/dist/plugin/shared.d.ts +39 -0
- package/dist/plugin/shared.js +380 -0
- package/dist/plugin/shared.js.map +1 -0
- package/openclaw-plugin/dist/capture-filter.d.ts +32 -0
- package/openclaw-plugin/dist/capture-filter.d.ts.map +1 -0
- package/openclaw-plugin/dist/capture-filter.js +117 -0
- package/openclaw-plugin/dist/capture-filter.js.map +1 -0
- package/openclaw-plugin/dist/config.d.ts +24 -0
- package/openclaw-plugin/dist/config.d.ts.map +1 -0
- package/openclaw-plugin/dist/config.js +68 -0
- package/openclaw-plugin/dist/config.js.map +1 -0
- package/openclaw-plugin/dist/context-format.d.ts +23 -0
- package/openclaw-plugin/dist/context-format.d.ts.map +1 -0
- package/openclaw-plugin/dist/context-format.js +40 -0
- package/openclaw-plugin/dist/context-format.js.map +1 -0
- package/openclaw-plugin/dist/file-scanner.d.ts +23 -0
- package/openclaw-plugin/dist/file-scanner.d.ts.map +1 -0
- package/openclaw-plugin/dist/file-scanner.js +119 -0
- package/openclaw-plugin/dist/file-scanner.js.map +1 -0
- package/openclaw-plugin/dist/index.d.ts +94 -0
- package/openclaw-plugin/dist/index.d.ts.map +1 -0
- package/openclaw-plugin/dist/index.js +1227 -0
- package/openclaw-plugin/dist/index.js.map +1 -0
- package/openclaw-plugin/dist/nex-client.d.ts +52 -0
- package/openclaw-plugin/dist/nex-client.d.ts.map +1 -0
- package/openclaw-plugin/dist/nex-client.js +129 -0
- package/openclaw-plugin/dist/nex-client.js.map +1 -0
- package/openclaw-plugin/dist/rate-limiter.d.ts +29 -0
- package/openclaw-plugin/dist/rate-limiter.d.ts.map +1 -0
- package/openclaw-plugin/dist/rate-limiter.js +95 -0
- package/openclaw-plugin/dist/rate-limiter.js.map +1 -0
- package/openclaw-plugin/dist/session-store.d.ts +15 -0
- package/openclaw-plugin/dist/session-store.d.ts.map +1 -0
- package/openclaw-plugin/dist/session-store.js +43 -0
- package/openclaw-plugin/dist/session-store.js.map +1 -0
- package/openclaw-plugin/openclaw.plugin.json +85 -0
- package/openclaw-plugin/package.json +29 -0
- package/package.json +2 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XML context formatting and stripping for recall injection.
|
|
3
|
+
* Wraps Nex answers in <nex-context> tags and strips them before capture.
|
|
4
|
+
*/
|
|
5
|
+
export interface NexRecallResult {
|
|
6
|
+
answer: string;
|
|
7
|
+
entityCount: number;
|
|
8
|
+
sessionId?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Format a Nex /ask response as an XML block for context injection.
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatNexContext(result: NexRecallResult): string;
|
|
14
|
+
/**
|
|
15
|
+
* Strip all <nex-context>...</nex-context> blocks from text.
|
|
16
|
+
* Also handles unclosed tags (strips from open tag to end of text).
|
|
17
|
+
*/
|
|
18
|
+
export declare function stripNexContext(text: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Check if text contains a nex-context block.
|
|
21
|
+
*/
|
|
22
|
+
export declare function hasNexContext(text: string): boolean;
|
|
23
|
+
//# sourceMappingURL=context-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-format.d.ts","sourceRoot":"","sources":["../src/context-format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAehE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XML context formatting and stripping for recall injection.
|
|
3
|
+
* Wraps Nex answers in <nex-context> tags and strips them before capture.
|
|
4
|
+
*/
|
|
5
|
+
const OPEN_TAG = "<nex-context>";
|
|
6
|
+
const CLOSE_TAG = "</nex-context>";
|
|
7
|
+
/**
|
|
8
|
+
* Format a Nex /ask response as an XML block for context injection.
|
|
9
|
+
*/
|
|
10
|
+
export function formatNexContext(result) {
|
|
11
|
+
const parts = [
|
|
12
|
+
OPEN_TAG,
|
|
13
|
+
"The following is relevant context from the user's knowledge base. Use it to inform your response, but do not mention this block directly.",
|
|
14
|
+
];
|
|
15
|
+
if (result.entityCount > 0) {
|
|
16
|
+
parts.push(`[${result.entityCount} related entities found]`);
|
|
17
|
+
}
|
|
18
|
+
parts.push("");
|
|
19
|
+
parts.push(result.answer);
|
|
20
|
+
parts.push(CLOSE_TAG);
|
|
21
|
+
return parts.join("\n");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Strip all <nex-context>...</nex-context> blocks from text.
|
|
25
|
+
* Also handles unclosed tags (strips from open tag to end of text).
|
|
26
|
+
*/
|
|
27
|
+
export function stripNexContext(text) {
|
|
28
|
+
// First: strip complete blocks
|
|
29
|
+
let result = text.replace(/<nex-context>[\s\S]*?<\/nex-context>/g, "");
|
|
30
|
+
// Then: strip unclosed tags (open tag without matching close)
|
|
31
|
+
result = result.replace(/<nex-context>[\s\S]*/g, "");
|
|
32
|
+
return result.trim();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if text contains a nex-context block.
|
|
36
|
+
*/
|
|
37
|
+
export function hasNexContext(text) {
|
|
38
|
+
return text.includes(OPEN_TAG);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=context-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-format.js","sourceRoot":"","sources":["../src/context-format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,QAAQ,GAAG,eAAe,CAAC;AACjC,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAQnC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,MAAM,KAAK,GAAa;QACtB,QAAQ;QACR,2IAA2I;KAC5I,CAAC;IAEF,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,WAAW,0BAA0B,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,+BAA+B;IAC/B,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,uCAAuC,EAAE,EAAE,CAAC,CAAC;IACvE,8DAA8D;IAC9D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File scanner for OpenClaw plugin.
|
|
3
|
+
* Discovers text files, tracks changes via SHA-256 content hash,
|
|
4
|
+
* and ingests new/changed files into Nex.
|
|
5
|
+
*/
|
|
6
|
+
import { NexClient } from "./nex-client.js";
|
|
7
|
+
export interface ScanResult {
|
|
8
|
+
scanned: number;
|
|
9
|
+
skipped: number;
|
|
10
|
+
errors: number;
|
|
11
|
+
files: Array<{
|
|
12
|
+
path: string;
|
|
13
|
+
status: string;
|
|
14
|
+
reason?: string;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
export declare function scanFiles(dir: string, client: NexClient, opts?: {
|
|
18
|
+
extensions?: string[];
|
|
19
|
+
maxFiles?: number;
|
|
20
|
+
depth?: number;
|
|
21
|
+
force?: boolean;
|
|
22
|
+
}): Promise<ScanResult>;
|
|
23
|
+
//# sourceMappingURL=file-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-scanner.d.ts","sourceRoot":"","sources":["../src/file-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AAejE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AAsED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EACjB,IAAI,CAAC,EAAE;IACL,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACA,OAAO,CAAC,UAAU,CAAC,CAmDrB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File scanner for OpenClaw plugin.
|
|
3
|
+
* Discovers text files, tracks changes via SHA-256 content hash,
|
|
4
|
+
* and ingests new/changed files into Nex.
|
|
5
|
+
*/
|
|
6
|
+
import { createHash } from "node:crypto";
|
|
7
|
+
import { readFileSync, writeFileSync, mkdirSync, statSync, readdirSync } from "node:fs";
|
|
8
|
+
import { join, extname, resolve, dirname } from "node:path";
|
|
9
|
+
import { homedir } from "node:os";
|
|
10
|
+
// --- Constants ---
|
|
11
|
+
const MANIFEST_PATH = join(homedir(), ".nex", "file-scan-manifest.json");
|
|
12
|
+
const DEFAULT_EXTENSIONS = [
|
|
13
|
+
".md", ".txt", ".rtf", ".html", ".htm",
|
|
14
|
+
".csv", ".tsv", ".json", ".yaml", ".yml", ".toml", ".xml",
|
|
15
|
+
".js", ".ts", ".jsx", ".tsx", ".py", ".rb", ".go", ".rs", ".java",
|
|
16
|
+
".sh", ".bash", ".zsh", ".fish",
|
|
17
|
+
".org", ".rst", ".adoc", ".tex", ".log",
|
|
18
|
+
".env", ".ini", ".cfg", ".conf", ".properties",
|
|
19
|
+
];
|
|
20
|
+
const SKIP_DIRS = new Set([
|
|
21
|
+
"node_modules", ".git", "dist", "build", ".next", "__pycache__", ".venv",
|
|
22
|
+
".cache", ".turbo", "coverage", ".nyc_output",
|
|
23
|
+
]);
|
|
24
|
+
// --- Manifest ---
|
|
25
|
+
function loadManifest() {
|
|
26
|
+
try {
|
|
27
|
+
const raw = readFileSync(MANIFEST_PATH, "utf-8");
|
|
28
|
+
const data = JSON.parse(raw);
|
|
29
|
+
if (data.version === 1 && typeof data.files === "object")
|
|
30
|
+
return data;
|
|
31
|
+
}
|
|
32
|
+
catch { /* missing or corrupt */ }
|
|
33
|
+
return { version: 1, files: {} };
|
|
34
|
+
}
|
|
35
|
+
function saveManifest(manifest) {
|
|
36
|
+
mkdirSync(dirname(MANIFEST_PATH), { recursive: true });
|
|
37
|
+
writeFileSync(MANIFEST_PATH, JSON.stringify(manifest, null, 2) + "\n", "utf-8");
|
|
38
|
+
}
|
|
39
|
+
function discoverFiles(dir, extensions, maxDepth, depth = 0) {
|
|
40
|
+
if (depth > maxDepth)
|
|
41
|
+
return [];
|
|
42
|
+
const results = [];
|
|
43
|
+
let entries;
|
|
44
|
+
try {
|
|
45
|
+
entries = readdirSync(dir);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return results;
|
|
49
|
+
}
|
|
50
|
+
for (const entry of entries) {
|
|
51
|
+
if (SKIP_DIRS.has(entry))
|
|
52
|
+
continue;
|
|
53
|
+
const fullPath = join(dir, entry);
|
|
54
|
+
let stat;
|
|
55
|
+
try {
|
|
56
|
+
stat = statSync(fullPath);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (stat.isDirectory()) {
|
|
62
|
+
results.push(...discoverFiles(fullPath, extensions, maxDepth, depth + 1));
|
|
63
|
+
}
|
|
64
|
+
else if (stat.isFile() && extensions.has(extname(entry).toLowerCase())) {
|
|
65
|
+
results.push({ path: fullPath, size: stat.size, mtime: stat.mtimeMs });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return results;
|
|
69
|
+
}
|
|
70
|
+
function hashFile(filePath) {
|
|
71
|
+
const content = readFileSync(filePath);
|
|
72
|
+
return "sha256-" + createHash("sha256").update(content).digest("hex");
|
|
73
|
+
}
|
|
74
|
+
// --- Scanner ---
|
|
75
|
+
export async function scanFiles(dir, client, opts) {
|
|
76
|
+
const absDir = resolve(dir);
|
|
77
|
+
const extensions = opts?.extensions ?? DEFAULT_EXTENSIONS;
|
|
78
|
+
const extSet = new Set(extensions.map((e) => (e.startsWith(".") ? e : `.${e}`).toLowerCase()));
|
|
79
|
+
const maxFiles = opts?.maxFiles ?? 5;
|
|
80
|
+
const maxDepth = opts?.depth ?? 20;
|
|
81
|
+
const force = opts?.force ?? false;
|
|
82
|
+
const discovered = discoverFiles(absDir, extSet, maxDepth);
|
|
83
|
+
discovered.sort((a, b) => b.mtime - a.mtime);
|
|
84
|
+
const candidates = discovered.slice(0, maxFiles);
|
|
85
|
+
const manifest = force ? { version: 1, files: {} } : loadManifest();
|
|
86
|
+
const result = { scanned: 0, skipped: 0, errors: 0, files: [] };
|
|
87
|
+
for (const file of candidates) {
|
|
88
|
+
const hash = hashFile(file.path);
|
|
89
|
+
const existing = manifest.files[file.path];
|
|
90
|
+
if (existing && existing.hash === hash && !force) {
|
|
91
|
+
result.skipped++;
|
|
92
|
+
result.files.push({ path: file.path, status: "skipped", reason: "unchanged" });
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const content = readFileSync(file.path, "utf-8");
|
|
97
|
+
if (!content.trim()) {
|
|
98
|
+
result.skipped++;
|
|
99
|
+
result.files.push({ path: file.path, status: "skipped", reason: "empty" });
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
await client.ingest(content, `file-scan:${file.path}`);
|
|
103
|
+
manifest.files[file.path] = {
|
|
104
|
+
hash,
|
|
105
|
+
size: file.size,
|
|
106
|
+
scanned_at: new Date().toISOString(),
|
|
107
|
+
};
|
|
108
|
+
result.scanned++;
|
|
109
|
+
result.files.push({ path: file.path, status: "ingested", reason: existing ? "changed" : "new" });
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
result.errors++;
|
|
113
|
+
result.files.push({ path: file.path, status: "error", reason: err instanceof Error ? err.message : String(err) });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
saveManifest(manifest);
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=file-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-scanner.js","sourceRoot":"","sources":["../src/file-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nex Memory Plugin for OpenClaw
|
|
3
|
+
*
|
|
4
|
+
* Gives OpenClaw agents persistent long-term memory powered by the Nex
|
|
5
|
+
* context intelligence layer. Auto-recalls relevant context before each
|
|
6
|
+
* agent turn and auto-captures conversation facts after each turn.
|
|
7
|
+
*/
|
|
8
|
+
interface Logger {
|
|
9
|
+
debug?(...args: unknown[]): void;
|
|
10
|
+
info(...args: unknown[]): void;
|
|
11
|
+
warn(...args: unknown[]): void;
|
|
12
|
+
error(...args: unknown[]): void;
|
|
13
|
+
}
|
|
14
|
+
interface PluginHookAgentContext {
|
|
15
|
+
agentId?: string;
|
|
16
|
+
sessionKey?: string;
|
|
17
|
+
sessionId?: string;
|
|
18
|
+
workspaceDir?: string;
|
|
19
|
+
messageProvider?: string;
|
|
20
|
+
}
|
|
21
|
+
interface BeforeAgentStartEvent {
|
|
22
|
+
prompt: string;
|
|
23
|
+
messages?: unknown[];
|
|
24
|
+
}
|
|
25
|
+
interface AgentEndEvent {
|
|
26
|
+
messages: unknown[];
|
|
27
|
+
success: boolean;
|
|
28
|
+
error?: unknown;
|
|
29
|
+
durationMs?: number;
|
|
30
|
+
}
|
|
31
|
+
interface PluginCommandContext {
|
|
32
|
+
args?: string;
|
|
33
|
+
commandBody: string;
|
|
34
|
+
}
|
|
35
|
+
interface ToolCallResult {
|
|
36
|
+
content: Array<{
|
|
37
|
+
type: string;
|
|
38
|
+
text: string;
|
|
39
|
+
}>;
|
|
40
|
+
details: unknown;
|
|
41
|
+
}
|
|
42
|
+
interface OpenClawPluginApi {
|
|
43
|
+
id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
pluginConfig?: Record<string, unknown>;
|
|
46
|
+
logger: Logger;
|
|
47
|
+
on(hookName: "before_agent_start", handler: (event: BeforeAgentStartEvent, ctx: PluginHookAgentContext) => Promise<{
|
|
48
|
+
prependContext?: string;
|
|
49
|
+
} | void> | {
|
|
50
|
+
prependContext?: string;
|
|
51
|
+
} | void, opts?: {
|
|
52
|
+
priority?: number;
|
|
53
|
+
}): void;
|
|
54
|
+
on(hookName: "agent_end", handler: (event: AgentEndEvent, ctx: PluginHookAgentContext) => Promise<void> | void, opts?: {
|
|
55
|
+
priority?: number;
|
|
56
|
+
}): void;
|
|
57
|
+
registerTool(tool: {
|
|
58
|
+
name: string;
|
|
59
|
+
label: string;
|
|
60
|
+
description: string;
|
|
61
|
+
parameters: unknown;
|
|
62
|
+
execute: (toolCallId: string, params: Record<string, unknown>, signal?: AbortSignal) => Promise<ToolCallResult>;
|
|
63
|
+
ownerOnly?: boolean;
|
|
64
|
+
}): void;
|
|
65
|
+
registerCommand(command: {
|
|
66
|
+
name: string;
|
|
67
|
+
description: string;
|
|
68
|
+
acceptsArgs?: boolean;
|
|
69
|
+
handler: (ctx: PluginCommandContext) => Promise<{
|
|
70
|
+
text: string;
|
|
71
|
+
}> | {
|
|
72
|
+
text: string;
|
|
73
|
+
};
|
|
74
|
+
}): void;
|
|
75
|
+
registerService(service: {
|
|
76
|
+
id: string;
|
|
77
|
+
start: (ctx: {
|
|
78
|
+
logger: Logger;
|
|
79
|
+
}) => Promise<void> | void;
|
|
80
|
+
stop?: (ctx: {
|
|
81
|
+
logger: Logger;
|
|
82
|
+
}) => Promise<void> | void;
|
|
83
|
+
}): void;
|
|
84
|
+
}
|
|
85
|
+
declare const plugin: {
|
|
86
|
+
id: string;
|
|
87
|
+
name: string;
|
|
88
|
+
description: string;
|
|
89
|
+
version: string;
|
|
90
|
+
kind: "memory";
|
|
91
|
+
register(api: OpenClawPluginApi): void;
|
|
92
|
+
};
|
|
93
|
+
export default plugin;
|
|
94
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|