@grackle-ai/plugin-knowledge 0.115.2 → 0.116.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 +3 -6
- package/dist/knowledge-handlers.d.ts +0 -2
- package/dist/knowledge-handlers.d.ts.map +1 -1
- package/dist/knowledge-handlers.js +1 -24
- package/dist/knowledge-handlers.js.map +1 -1
- package/dist/knowledge-init.d.ts +8 -13
- package/dist/knowledge-init.d.ts.map +1 -1
- package/dist/knowledge-init.js +8 -179
- package/dist/knowledge-init.js.map +1 -1
- package/dist/knowledge-plugin.d.ts +4 -4
- package/dist/knowledge-plugin.d.ts.map +1 -1
- package/dist/knowledge-plugin.js +6 -8
- package/dist/knowledge-plugin.js.map +1 -1
- package/dist/mcp-tools.d.ts.map +1 -1
- package/dist/mcp-tools.js +0 -71
- package/dist/mcp-tools.js.map +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @grackle-ai/plugin-knowledge
|
|
2
2
|
|
|
3
|
-
Knowledge graph plugin for Grackle. Provides Neo4j-backed semantic search
|
|
3
|
+
Knowledge graph plugin for Grackle. Provides Neo4j-backed semantic search and knowledge node retrieval via the `GracklePlugin` interface. The graph is populated by the derived-mirror projection (epic #1256), not by agent-authored writes.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
@@ -8,9 +8,8 @@ Loading this plugin opts the server into knowledge graph functionality. When ena
|
|
|
8
8
|
|
|
9
9
|
- Connects to Neo4j and initializes the schema
|
|
10
10
|
- Creates a local embedding model for semantic search
|
|
11
|
-
- Registers gRPC handlers for knowledge operations
|
|
12
|
-
-
|
|
13
|
-
- Exposes `knowledge_search`, `knowledge_get_node`, and `knowledge_create_node` MCP tools
|
|
11
|
+
- Registers gRPC handlers for knowledge read operations
|
|
12
|
+
- Exposes `knowledge_search` and `knowledge_get_node` MCP tools
|
|
14
13
|
- Monitors Neo4j health via a reconciliation phase
|
|
15
14
|
|
|
16
15
|
## Usage
|
|
@@ -31,10 +30,8 @@ const loaded = await loadPlugins(plugins, ctx);
|
|
|
31
30
|
- `getKnowledgeNode` — Retrieve a node by ID
|
|
32
31
|
- `expandKnowledgeNode` — Expand a node's neighbors
|
|
33
32
|
- `listRecentKnowledgeNodes` — List recently created nodes
|
|
34
|
-
- `createKnowledgeNode` — Create a native node with embedding
|
|
35
33
|
|
|
36
34
|
## MCP Tools
|
|
37
35
|
|
|
38
36
|
- `knowledge_search` — Natural language search
|
|
39
37
|
- `knowledge_get_node` — Retrieve a node by ID
|
|
40
|
-
- `knowledge_create_node` — Create a knowledge entry
|
|
@@ -7,6 +7,4 @@ export declare function getKnowledgeNode(req: grackle.GetKnowledgeNodeRequest):
|
|
|
7
7
|
export declare function expandKnowledgeNode(req: grackle.ExpandKnowledgeNodeRequest): Promise<grackle.ExpandKnowledgeNodeResponse>;
|
|
8
8
|
/** List recently created knowledge nodes. */
|
|
9
9
|
export declare function listRecentKnowledgeNodes(req: grackle.ListRecentKnowledgeNodesRequest): Promise<grackle.ListRecentKnowledgeNodesResponse>;
|
|
10
|
-
/** Create a new native knowledge node with embedding. */
|
|
11
|
-
export declare function createKnowledgeNode(req: grackle.CreateKnowledgeNodeRequest): Promise<grackle.CreateKnowledgeNodeResponse>;
|
|
12
10
|
//# sourceMappingURL=knowledge-handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-handlers.d.ts","sourceRoot":"","sources":["../src/knowledge-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"knowledge-handlers.d.ts","sourceRoot":"","sources":["../src/knowledge-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AA4D7C,4DAA4D;AAC5D,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAqBnH;AAED,kCAAkC;AAClC,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAgBtH;AAED,yDAAyD;AACzD,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAgB/H;AAED,6CAA6C;AAC7C,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,+BAA+B,GAAG,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAgB9I"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ConnectError, Code } from "@connectrpc/connect";
|
|
2
2
|
import { create } from "@bufbuild/protobuf";
|
|
3
3
|
import { grackle } from "@grackle-ai/common";
|
|
4
|
-
import { knowledgeSearch, getNode as getKnowledgeNodeById, expandNode,
|
|
4
|
+
import { knowledgeSearch, getNode as getKnowledgeNodeById, expandNode, listRecentNodes, } from "@grackle-ai/knowledge";
|
|
5
5
|
import { getKnowledgeEmbedder } from "./knowledge-init.js";
|
|
6
6
|
import { isNeo4jHealthy } from "./knowledge-health.js";
|
|
7
7
|
import { knowledgeNodeToProto, knowledgeEdgeToProto } from "./proto-converters.js";
|
|
@@ -114,27 +114,4 @@ export async function listRecentKnowledgeNodes(req) {
|
|
|
114
114
|
wrapNeo4jError(err);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
/** Create a new native knowledge node with embedding. */
|
|
118
|
-
export async function createKnowledgeNode(req) {
|
|
119
|
-
const embedder = requireEmbedder();
|
|
120
|
-
try {
|
|
121
|
-
const chunker = createPassThroughChunker();
|
|
122
|
-
const embedded = await ingest(req.content, chunker, embedder);
|
|
123
|
-
if (embedded.length === 0) {
|
|
124
|
-
throw new ConnectError("Content produced no embeddings", Code.InvalidArgument);
|
|
125
|
-
}
|
|
126
|
-
const id = await createNativeNode({
|
|
127
|
-
category: (req.category || "insight"),
|
|
128
|
-
title: req.title,
|
|
129
|
-
content: req.content,
|
|
130
|
-
tags: [...req.tags],
|
|
131
|
-
embedding: embedded[0].vector,
|
|
132
|
-
workspaceId: req.workspaceId || "",
|
|
133
|
-
});
|
|
134
|
-
return create(grackle.CreateKnowledgeNodeResponseSchema, { id });
|
|
135
|
-
}
|
|
136
|
-
catch (err) {
|
|
137
|
-
wrapNeo4jError(err);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
117
|
//# sourceMappingURL=knowledge-handlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-handlers.js","sourceRoot":"","sources":["../src/knowledge-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EACL,eAAe,EACf,OAAO,IAAI,oBAAoB,EAC/B,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"knowledge-handlers.js","sourceRoot":"","sources":["../src/knowledge-handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/knowledge-init.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Knowledge graph subsystem initialization and lifecycle management.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Opens Neo4j, creates the local embedder, and initializes the schema so the
|
|
5
|
+
* knowledge graph read surface (search / get / expand / list) can serve
|
|
6
|
+
* queries. The graph is populated by the derived-mirror projection (epic
|
|
7
|
+
* #1256), not by agent-authored writes. Opt-in by loading the plugin.
|
|
6
8
|
*
|
|
7
9
|
* @module
|
|
8
10
|
*/
|
|
9
11
|
import { healthCheck as neo4jHealthCheck, type Embedder } from "@grackle-ai/knowledge";
|
|
10
|
-
import type { PluginContext
|
|
12
|
+
import type { PluginContext } from "@grackle-ai/plugin-sdk";
|
|
11
13
|
/** Re-export Neo4j health check for use by the reconciliation health phase. */
|
|
12
14
|
export { neo4jHealthCheck };
|
|
13
15
|
/** Get the knowledge embedder. Returns undefined if knowledge is not initialized. */
|
|
@@ -15,18 +17,11 @@ export declare function getKnowledgeEmbedder(): Embedder | undefined;
|
|
|
15
17
|
/**
|
|
16
18
|
* Initialize the knowledge graph subsystem.
|
|
17
19
|
*
|
|
18
|
-
* Opens Neo4j, initializes the schema, and creates the local embedder
|
|
19
|
-
* If any step after Neo4j connection fails, cleans up
|
|
20
|
-
* before re-throwing.
|
|
20
|
+
* Opens Neo4j, initializes the schema, and creates the local embedder used to
|
|
21
|
+
* embed search queries. If any step after the Neo4j connection fails, cleans up
|
|
22
|
+
* the connection before re-throwing.
|
|
21
23
|
*
|
|
22
24
|
* @returns A cleanup function that closes Neo4j.
|
|
23
25
|
*/
|
|
24
26
|
export declare function initKnowledge(ctx: PluginContext): Promise<() => Promise<void>>;
|
|
25
|
-
/**
|
|
26
|
-
* Create an entity sync subscriber that listens for task/finding events
|
|
27
|
-
* and keeps the knowledge graph in sync.
|
|
28
|
-
*
|
|
29
|
-
* @returns A Disposable that unsubscribes when disposed.
|
|
30
|
-
*/
|
|
31
|
-
export declare function createEntitySyncSubscriber(ctx: PluginContext): Disposable;
|
|
32
27
|
//# sourceMappingURL=knowledge-init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-init.d.ts","sourceRoot":"","sources":["../src/knowledge-init.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"knowledge-init.d.ts","sourceRoot":"","sources":["../src/knowledge-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAIL,WAAW,IAAI,gBAAgB,EAE/B,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAK5B,qFAAqF;AACrF,wBAAgB,oBAAoB,IAAI,QAAQ,GAAG,SAAS,CAE3D;AAMD;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CA0BpF"}
|
package/dist/knowledge-init.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Knowledge graph subsystem initialization and lifecycle management.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Opens Neo4j, creates the local embedder, and initializes the schema so the
|
|
5
|
+
* knowledge graph read surface (search / get / expand / list) can serve
|
|
6
|
+
* queries. The graph is populated by the derived-mirror projection (epic
|
|
7
|
+
* #1256), not by agent-authored writes. Opt-in by loading the plugin.
|
|
6
8
|
*
|
|
7
9
|
* @module
|
|
8
10
|
*/
|
|
9
|
-
import { openNeo4j, initSchema, closeNeo4j, healthCheck as neo4jHealthCheck, createLocalEmbedder,
|
|
10
|
-
import { taskStore, findingStore, safeParseJsonArray } from "@grackle-ai/database";
|
|
11
|
-
import { logger } from "./logger.js";
|
|
12
|
-
import { isNeo4jHealthy } from "./knowledge-health.js";
|
|
11
|
+
import { openNeo4j, initSchema, closeNeo4j, healthCheck as neo4jHealthCheck, createLocalEmbedder, } from "@grackle-ai/knowledge";
|
|
13
12
|
/** Re-export Neo4j health check for use by the reconciliation health phase. */
|
|
14
13
|
export { neo4jHealthCheck };
|
|
15
14
|
/** Module-level embedder, available after initKnowledge() completes. */
|
|
@@ -19,166 +18,14 @@ export function getKnowledgeEmbedder() {
|
|
|
19
18
|
return knowledgeEmbedder;
|
|
20
19
|
}
|
|
21
20
|
// ---------------------------------------------------------------------------
|
|
22
|
-
// Event handler
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
/**
|
|
25
|
-
* Create an event bus subscriber that syncs reference nodes.
|
|
26
|
-
*
|
|
27
|
-
* Sync is fire-and-forget — errors are logged but never propagated.
|
|
28
|
-
*/
|
|
29
|
-
function createEntitySyncHandler(embedder) {
|
|
30
|
-
return (event) => {
|
|
31
|
-
// Fire-and-forget async — errors handled inside handleEvent
|
|
32
|
-
handleEvent(embedder, event).catch(() => { });
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Ensure a task's reference node exists in the knowledge graph.
|
|
37
|
-
*
|
|
38
|
-
* If the node already exists, returns its ID. Otherwise syncs it from
|
|
39
|
-
* the task store and returns the new ID. Returns `undefined` if the
|
|
40
|
-
* task is not found in the store.
|
|
41
|
-
*/
|
|
42
|
-
async function ensureTaskReferenceNode(embedder, taskId) {
|
|
43
|
-
const existing = await findReferenceNodeBySource("task", taskId);
|
|
44
|
-
if (existing) {
|
|
45
|
-
return existing.id;
|
|
46
|
-
}
|
|
47
|
-
const task = taskStore.getTask(taskId);
|
|
48
|
-
if (!task) {
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
return syncReferenceNode(embedder, {
|
|
52
|
-
sourceType: "task",
|
|
53
|
-
sourceId: taskId,
|
|
54
|
-
label: task.title,
|
|
55
|
-
text: deriveTaskText(task.title, task.description),
|
|
56
|
-
workspaceId: task.workspaceId ?? "",
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Create edges from a task reference node to its parent and dependencies.
|
|
61
|
-
*
|
|
62
|
-
* Best-effort — edge creation failures are logged but don't block sync.
|
|
63
|
-
*/
|
|
64
|
-
async function syncTaskEdges(embedder, taskNodeId, task) {
|
|
65
|
-
// Parent task → PART_OF edge
|
|
66
|
-
if (task.parentTaskId) {
|
|
67
|
-
try {
|
|
68
|
-
const parentNodeId = await ensureTaskReferenceNode(embedder, task.parentTaskId);
|
|
69
|
-
if (parentNodeId) {
|
|
70
|
-
await createEdge(taskNodeId, parentNodeId, EDGE_TYPE.PART_OF);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
logger.warn({ taskNodeId, parentTaskId: task.parentTaskId, err }, "Failed to create PART_OF edge");
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Dependencies → DEPENDS_ON edges
|
|
78
|
-
const deps = safeParseJsonArray(task.dependsOn);
|
|
79
|
-
for (const depId of deps) {
|
|
80
|
-
try {
|
|
81
|
-
const depNodeId = await ensureTaskReferenceNode(embedder, depId);
|
|
82
|
-
if (depNodeId) {
|
|
83
|
-
await createEdge(taskNodeId, depNodeId, EDGE_TYPE.DEPENDS_ON);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
logger.warn({ taskNodeId, depId, err }, "Failed to create DEPENDS_ON edge");
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
/** Handle a single entity event. */
|
|
92
|
-
async function handleEvent(embedder, event) {
|
|
93
|
-
// Circuit breaker: skip sync when Neo4j is known-unreachable
|
|
94
|
-
if (!isNeo4jHealthy()) {
|
|
95
|
-
logger.debug({ eventType: event.type }, "Knowledge sync skipped — Neo4j unhealthy");
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
try {
|
|
99
|
-
const payload = event.payload;
|
|
100
|
-
switch (event.type) {
|
|
101
|
-
case "task.created":
|
|
102
|
-
case "task.updated": {
|
|
103
|
-
const taskId = payload.taskId;
|
|
104
|
-
if (typeof taskId !== "string" || !taskId) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
const task = taskStore.getTask(taskId);
|
|
108
|
-
if (!task) {
|
|
109
|
-
logger.warn({ taskId }, "Knowledge sync: task not found, skipping");
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
const taskNodeId = await syncReferenceNode(embedder, {
|
|
113
|
-
sourceType: "task",
|
|
114
|
-
sourceId: taskId,
|
|
115
|
-
label: task.title,
|
|
116
|
-
text: deriveTaskText(task.title, task.description),
|
|
117
|
-
workspaceId: task.workspaceId ?? "",
|
|
118
|
-
});
|
|
119
|
-
await syncTaskEdges(embedder, taskNodeId, task);
|
|
120
|
-
break;
|
|
121
|
-
}
|
|
122
|
-
case "task.deleted": {
|
|
123
|
-
const taskId = payload.taskId;
|
|
124
|
-
if (typeof taskId !== "string" || !taskId) {
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
await deleteReferenceNodeBySource("task", taskId);
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
case "finding.posted": {
|
|
131
|
-
const findingId = payload.findingId;
|
|
132
|
-
if (typeof findingId !== "string" || !findingId) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
const workspaceId = typeof payload.workspaceId === "string" ? payload.workspaceId : "";
|
|
136
|
-
const findings = findingStore.queryFindings(workspaceId);
|
|
137
|
-
const finding = findings.find((f) => f.id === findingId);
|
|
138
|
-
if (!finding) {
|
|
139
|
-
logger.warn({ findingId }, "Knowledge sync: finding not found, skipping");
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
const tags = safeParseJsonArray(typeof finding.tags === "string" ? finding.tags : null);
|
|
143
|
-
const findingNodeId = await syncReferenceNode(embedder, {
|
|
144
|
-
sourceType: "finding",
|
|
145
|
-
sourceId: findingId,
|
|
146
|
-
label: finding.title,
|
|
147
|
-
text: deriveFindingText(finding.title, finding.content, tags),
|
|
148
|
-
workspaceId,
|
|
149
|
-
});
|
|
150
|
-
// Link finding to its task
|
|
151
|
-
if (finding.taskId) {
|
|
152
|
-
try {
|
|
153
|
-
const taskNodeId = await ensureTaskReferenceNode(embedder, finding.taskId);
|
|
154
|
-
if (taskNodeId) {
|
|
155
|
-
await createEdge(findingNodeId, taskNodeId, EDGE_TYPE.DERIVED_FROM);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
catch (err) {
|
|
159
|
-
logger.warn({ findingNodeId, taskId: finding.taskId, err }, "Failed to create DERIVED_FROM edge");
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
break;
|
|
163
|
-
}
|
|
164
|
-
default:
|
|
165
|
-
// Ignore events we don't handle
|
|
166
|
-
break;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
catch (err) {
|
|
170
|
-
logger.error({ err, eventType: event.type, eventId: event.id }, "Knowledge sync failed for entity event");
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// ---------------------------------------------------------------------------
|
|
174
21
|
// Lifecycle
|
|
175
22
|
// ---------------------------------------------------------------------------
|
|
176
23
|
/**
|
|
177
24
|
* Initialize the knowledge graph subsystem.
|
|
178
25
|
*
|
|
179
|
-
* Opens Neo4j, initializes the schema, and creates the local embedder
|
|
180
|
-
* If any step after Neo4j connection fails, cleans up
|
|
181
|
-
* before re-throwing.
|
|
26
|
+
* Opens Neo4j, initializes the schema, and creates the local embedder used to
|
|
27
|
+
* embed search queries. If any step after the Neo4j connection fails, cleans up
|
|
28
|
+
* the connection before re-throwing.
|
|
182
29
|
*
|
|
183
30
|
* @returns A cleanup function that closes Neo4j.
|
|
184
31
|
*/
|
|
@@ -204,22 +51,4 @@ export async function initKnowledge(ctx) {
|
|
|
204
51
|
throw err;
|
|
205
52
|
}
|
|
206
53
|
}
|
|
207
|
-
/**
|
|
208
|
-
* Create an entity sync subscriber that listens for task/finding events
|
|
209
|
-
* and keeps the knowledge graph in sync.
|
|
210
|
-
*
|
|
211
|
-
* @returns A Disposable that unsubscribes when disposed.
|
|
212
|
-
*/
|
|
213
|
-
export function createEntitySyncSubscriber(ctx) {
|
|
214
|
-
const embedder = knowledgeEmbedder;
|
|
215
|
-
if (!embedder) {
|
|
216
|
-
return { dispose: () => { } };
|
|
217
|
-
}
|
|
218
|
-
const unsubscribe = ctx.subscribe(createEntitySyncHandler(embedder));
|
|
219
|
-
return {
|
|
220
|
-
dispose: () => {
|
|
221
|
-
unsubscribe();
|
|
222
|
-
},
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
54
|
//# sourceMappingURL=knowledge-init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-init.js","sourceRoot":"","sources":["../src/knowledge-init.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"knowledge-init.js","sourceRoot":"","sources":["../src/knowledge-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,IAAI,gBAAgB,EAC/B,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAG/B,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,wEAAwE;AACxE,IAAI,iBAAuC,CAAC;AAE5C,qFAAqF;AACrF,MAAM,UAAU,oBAAoB;IAClC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAkB;IACpD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAa,mBAAmB,EAAE,CAAC;IAEjD,MAAM,SAAS,EAAE,CAAC;IAElB,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEtC,iBAAiB,GAAG,QAAQ,CAAC;QAE7B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAEnD,OAAO,KAAK,IAAmB,EAAE;YAC/B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YAC3D,iBAAiB,GAAG,SAAS,CAAC;YAC9B,MAAM,UAAU,EAAE,CAAC;YACnB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uCAAuC;QACvC,iBAAiB,GAAG,SAAS,CAAC;QAC9B,MAAM,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnC,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
import type { GracklePlugin } from "@grackle-ai/plugin-sdk";
|
|
10
10
|
/**
|
|
11
11
|
* Create the knowledge plugin that contributes Neo4j-backed knowledge graph
|
|
12
|
-
* capabilities to the Grackle server.
|
|
12
|
+
* read capabilities to the Grackle server. The graph is populated by the
|
|
13
|
+
* derived-mirror projection (see epic #1256), not by agent-authored writes.
|
|
13
14
|
*
|
|
14
15
|
* - **gRPC handlers**: searchKnowledge, getKnowledgeNode, expandKnowledgeNode,
|
|
15
|
-
* listRecentKnowledgeNodes
|
|
16
|
+
* listRecentKnowledgeNodes
|
|
16
17
|
* - **Reconciliation phases**: knowledge-health (Neo4j connectivity check)
|
|
17
|
-
* - **
|
|
18
|
-
* - **MCP tools**: knowledge_search, knowledge_get_node, knowledge_create_node
|
|
18
|
+
* - **MCP tools**: knowledge_search, knowledge_get_node
|
|
19
19
|
*
|
|
20
20
|
* Depends on the "core" plugin.
|
|
21
21
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-plugin.d.ts","sourceRoot":"","sources":["../src/knowledge-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"knowledge-plugin.d.ts","sourceRoot":"","sources":["../src/knowledge-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,wBAAwB,CAAC;AAgB3E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,IAAI,aAAa,CAuCrD"}
|
package/dist/knowledge-plugin.js
CHANGED
|
@@ -8,19 +8,19 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { grackle } from "@grackle-ai/common";
|
|
10
10
|
import { logger } from "./logger.js";
|
|
11
|
-
import { initKnowledge,
|
|
11
|
+
import { initKnowledge, neo4jHealthCheck, } from "./knowledge-init.js";
|
|
12
12
|
import { createKnowledgeHealthPhase, markKnowledgeInitFailed } from "./knowledge-health.js";
|
|
13
|
-
import { searchKnowledge, getKnowledgeNode, expandKnowledgeNode, listRecentKnowledgeNodes,
|
|
13
|
+
import { searchKnowledge, getKnowledgeNode, expandKnowledgeNode, listRecentKnowledgeNodes, } from "./knowledge-handlers.js";
|
|
14
14
|
import { knowledgeMcpTools } from "./mcp-tools.js";
|
|
15
15
|
/**
|
|
16
16
|
* Create the knowledge plugin that contributes Neo4j-backed knowledge graph
|
|
17
|
-
* capabilities to the Grackle server.
|
|
17
|
+
* read capabilities to the Grackle server. The graph is populated by the
|
|
18
|
+
* derived-mirror projection (see epic #1256), not by agent-authored writes.
|
|
18
19
|
*
|
|
19
20
|
* - **gRPC handlers**: searchKnowledge, getKnowledgeNode, expandKnowledgeNode,
|
|
20
|
-
* listRecentKnowledgeNodes
|
|
21
|
+
* listRecentKnowledgeNodes
|
|
21
22
|
* - **Reconciliation phases**: knowledge-health (Neo4j connectivity check)
|
|
22
|
-
* - **
|
|
23
|
-
* - **MCP tools**: knowledge_search, knowledge_get_node, knowledge_create_node
|
|
23
|
+
* - **MCP tools**: knowledge_search, knowledge_get_node
|
|
24
24
|
*
|
|
25
25
|
* Depends on the "core" plugin.
|
|
26
26
|
*
|
|
@@ -53,13 +53,11 @@ export function createKnowledgePlugin() {
|
|
|
53
53
|
getKnowledgeNode,
|
|
54
54
|
expandKnowledgeNode,
|
|
55
55
|
listRecentKnowledgeNodes,
|
|
56
|
-
createKnowledgeNode,
|
|
57
56
|
},
|
|
58
57
|
}],
|
|
59
58
|
reconciliationPhases: () => [
|
|
60
59
|
createKnowledgeHealthPhase({ healthCheck: neo4jHealthCheck }),
|
|
61
60
|
],
|
|
62
|
-
eventSubscribers: (ctx) => [createEntitySyncSubscriber(ctx)],
|
|
63
61
|
mcpTools: () => knowledgeMcpTools,
|
|
64
62
|
};
|
|
65
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-plugin.js","sourceRoot":"","sources":["../src/knowledge-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"knowledge-plugin.js","sourceRoot":"","sources":["../src/knowledge-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,aAAa,EACb,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,OAA0C,CAAC;IAE/C,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE,CAAC,MAAM,CAAC;QAEtB,UAAU,EAAE,KAAK,EAAE,GAAkB,EAAiB,EAAE;YACtD,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,gEAAgE;gBAChE,yEAAyE;gBACzE,uBAAuB,EAAE,CAAC;gBAC1B,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,2DAA2D,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAED,QAAQ,EAAE,KAAK,IAAmB,EAAE;YAClC,MAAM,OAAO,EAAE,EAAE,CAAC;YAClB,OAAO,GAAG,SAAS,CAAC;QACtB,CAAC;QAED,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;gBACnB,OAAO,EAAE,OAAO,CAAC,gBAAgB;gBACjC,QAAQ,EAAE;oBACR,eAAe;oBACf,gBAAgB;oBAChB,mBAAmB;oBACnB,wBAAwB;iBACzB;aACF,CAAC;QAEF,oBAAoB,EAAE,GAAG,EAAE,CAAC;YAC1B,0BAA0B,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;SAC9D;QAED,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB;KAClC,CAAC;AACJ,CAAC"}
|
package/dist/mcp-tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["../src/mcp-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["../src/mcp-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqFnE,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,EAAE,oBAAoB,EAmPnD,CAAC"}
|
package/dist/mcp-tools.js
CHANGED
|
@@ -14,14 +14,6 @@ import { z } from "zod";
|
|
|
14
14
|
const MAX_SEARCH_LIMIT = 50;
|
|
15
15
|
/** Maximum allowed expansion depth. */
|
|
16
16
|
const MAX_EXPAND_DEPTH = 5;
|
|
17
|
-
/** Valid edge type values. */
|
|
18
|
-
const EDGE_TYPES = [
|
|
19
|
-
"RELATES_TO",
|
|
20
|
-
"DEPENDS_ON",
|
|
21
|
-
"DERIVED_FROM",
|
|
22
|
-
"MENTIONS",
|
|
23
|
-
"PART_OF",
|
|
24
|
-
];
|
|
25
17
|
// ---------------------------------------------------------------------------
|
|
26
18
|
// Response formatting — hide internal details from agents
|
|
27
19
|
// ---------------------------------------------------------------------------
|
|
@@ -275,68 +267,5 @@ export const knowledgeMcpTools = [
|
|
|
275
267
|
return jsonResult(result);
|
|
276
268
|
},
|
|
277
269
|
},
|
|
278
|
-
{
|
|
279
|
-
name: "knowledge_create_node",
|
|
280
|
-
group: "knowledge",
|
|
281
|
-
description: "Create a new knowledge entry (decision, insight, concept, or snippet). " +
|
|
282
|
-
"The content is automatically embedded for future semantic search. " +
|
|
283
|
-
"Optionally link it to existing nodes.",
|
|
284
|
-
inputSchema: z.object({
|
|
285
|
-
title: z.string().describe("Title or summary of the knowledge entry"),
|
|
286
|
-
content: z
|
|
287
|
-
.string()
|
|
288
|
-
.describe("Full content to store and embed for search"),
|
|
289
|
-
category: z
|
|
290
|
-
.string()
|
|
291
|
-
.optional()
|
|
292
|
-
.describe("Category: decision, insight, concept, snippet (default: insight)"),
|
|
293
|
-
tags: z
|
|
294
|
-
.array(z.string())
|
|
295
|
-
.optional()
|
|
296
|
-
.describe("Tags for categorization"),
|
|
297
|
-
workspaceId: z
|
|
298
|
-
.string()
|
|
299
|
-
.optional()
|
|
300
|
-
.describe("Workspace to scope this entry to"),
|
|
301
|
-
edges: z
|
|
302
|
-
.array(z.object({
|
|
303
|
-
toId: z.string().describe("ID of the node to link to"),
|
|
304
|
-
type: z
|
|
305
|
-
.enum(EDGE_TYPES)
|
|
306
|
-
.describe("Relationship type: RELATES_TO, DEPENDS_ON, DERIVED_FROM, MENTIONS, PART_OF"),
|
|
307
|
-
}))
|
|
308
|
-
.optional()
|
|
309
|
-
.describe("Edges to create from this node to existing nodes"),
|
|
310
|
-
}),
|
|
311
|
-
rpcMethod: "knowledgeCreateNode",
|
|
312
|
-
mutating: true,
|
|
313
|
-
annotations: {
|
|
314
|
-
readOnlyHint: false,
|
|
315
|
-
destructiveHint: false,
|
|
316
|
-
idempotentHint: false,
|
|
317
|
-
openWorldHint: false,
|
|
318
|
-
},
|
|
319
|
-
async handler(args, client, authContext) {
|
|
320
|
-
const typedClient = client.knowledge;
|
|
321
|
-
const typedAuth = authContext;
|
|
322
|
-
const { title, content, category, tags, workspaceId, } = args;
|
|
323
|
-
// For scoped callers, always use the auth context workspace.
|
|
324
|
-
const resolvedWorkspaceId = typedAuth?.type === "scoped"
|
|
325
|
-
? typedAuth.workspaceId ?? ""
|
|
326
|
-
: workspaceId ?? "";
|
|
327
|
-
const response = await typedClient.createKnowledgeNode({
|
|
328
|
-
title,
|
|
329
|
-
content,
|
|
330
|
-
category: category ?? "insight",
|
|
331
|
-
tags: tags ?? [],
|
|
332
|
-
workspaceId: resolvedWorkspaceId,
|
|
333
|
-
});
|
|
334
|
-
return jsonResult({
|
|
335
|
-
id: response.id,
|
|
336
|
-
title,
|
|
337
|
-
category: category ?? "insight",
|
|
338
|
-
});
|
|
339
|
-
},
|
|
340
|
-
},
|
|
341
270
|
];
|
|
342
271
|
//# sourceMappingURL=mcp-tools.js.map
|
package/dist/mcp-tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../src/mcp-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,sCAAsC;AACtC,MAAM,gBAAgB,GAAW,EAAE,CAAC;AAEpC,uCAAuC;AACvC,MAAM,gBAAgB,GAAW,CAAC,CAAC;AAEnC,
|
|
1
|
+
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../src/mcp-tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grackle-ai/plugin-knowledge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.116.0",
|
|
4
4
|
"description": "Knowledge graph plugin for Grackle — Neo4j, embeddings, and knowledge MCP tools",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"@connectrpc/connect": "^2.0.0",
|
|
33
33
|
"pino": "^10.3.1",
|
|
34
34
|
"zod": "^4.0.0",
|
|
35
|
-
"@grackle-ai/
|
|
36
|
-
"@grackle-ai/
|
|
37
|
-
"@grackle-ai/database": "0.
|
|
38
|
-
"@grackle-ai/
|
|
39
|
-
"@grackle-ai/
|
|
40
|
-
"@grackle-ai/plugin-sdk": "0.
|
|
35
|
+
"@grackle-ai/core": "0.116.0",
|
|
36
|
+
"@grackle-ai/common": "0.116.0",
|
|
37
|
+
"@grackle-ai/database": "0.116.0",
|
|
38
|
+
"@grackle-ai/auth": "0.116.0",
|
|
39
|
+
"@grackle-ai/knowledge": "0.116.0",
|
|
40
|
+
"@grackle-ai/plugin-sdk": "0.116.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@rushstack/heft": "1.2.7",
|