@grackle-ai/plugin-knowledge 0.121.0 → 0.122.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/dist/knowledge-plugin.d.ts.map +1 -1
- package/dist/knowledge-plugin.js +5 -0
- package/dist/knowledge-plugin.js.map +1 -1
- package/dist/mcp-tools.d.ts.map +1 -1
- package/dist/mcp-tools.js +4 -2
- package/dist/mcp-tools.js.map +1 -1
- package/dist/projection/derive-text.d.ts +8 -0
- package/dist/projection/derive-text.d.ts.map +1 -1
- package/dist/projection/derive-text.js +11 -1
- package/dist/projection/derive-text.js.map +1 -1
- package/dist/related-prior-work.d.ts +20 -0
- package/dist/related-prior-work.d.ts.map +1 -0
- package/dist/related-prior-work.js +153 -0
- package/dist/related-prior-work.js.map +1 -0
- package/package.json +7 -7
|
@@ -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;AAwB3E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,IAAI,aAAa,CAkDrD"}
|
package/dist/knowledge-plugin.js
CHANGED
|
@@ -14,6 +14,7 @@ import { createKnowledgeProjectionPhase } from "./knowledge-projection-phase.js"
|
|
|
14
14
|
import { searchKnowledge, getKnowledgeNode, expandKnowledgeNode, listRecentKnowledgeNodes, } from "./knowledge-handlers.js";
|
|
15
15
|
import { knowledgeMcpTools } from "./mcp-tools.js";
|
|
16
16
|
import { createEntitySyncSubscriber } from "./entity-sync.js";
|
|
17
|
+
import { buildRelatedPriorWork } from "./related-prior-work.js";
|
|
17
18
|
/**
|
|
18
19
|
* Create the knowledge plugin that contributes Neo4j-backed knowledge graph
|
|
19
20
|
* read capabilities to the Grackle server. The graph is populated by the
|
|
@@ -65,6 +66,10 @@ export function createKnowledgePlugin() {
|
|
|
65
66
|
}),
|
|
66
67
|
],
|
|
67
68
|
eventSubscribers: (ctx) => [createEntitySyncSubscriber(ctx)],
|
|
69
|
+
// PUSH half of the retrieval loop (#1259): inject "Related prior work" into
|
|
70
|
+
// a spawning task's system prompt, decoupled from the spawn path via core's
|
|
71
|
+
// spawn-context registry.
|
|
72
|
+
systemPromptContributors: () => [{ contribute: buildRelatedPriorWork }],
|
|
68
73
|
mcpTools: () => knowledgeMcpTools,
|
|
69
74
|
};
|
|
70
75
|
}
|
|
@@ -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,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;
|
|
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,EAChB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;;;;;;;;;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;YAC7D,8BAA8B,CAAC;gBAC7B,WAAW,EAAE,oBAAoB;gBACjC,SAAS,EAAE,cAAc;aAC1B,CAAC;SACH;QAED,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC;QAE5D,4EAA4E;QAC5E,4EAA4E;QAC5E,0BAA0B;QAC1B,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC;QAEvE,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;AAqFnE,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,EAAE,oBAAoB,
|
|
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,EAqPnD,CAAC"}
|
package/dist/mcp-tools.js
CHANGED
|
@@ -85,8 +85,10 @@ export const knowledgeMcpTools = [
|
|
|
85
85
|
{
|
|
86
86
|
name: "knowledge_search",
|
|
87
87
|
group: "knowledge",
|
|
88
|
-
description: "Search the knowledge graph
|
|
89
|
-
"
|
|
88
|
+
description: "Search the knowledge graph to find how related or prior work in this workspace " +
|
|
89
|
+
"was approached before starting. Natural-language query; returns relevant nodes " +
|
|
90
|
+
"(tasks, sessions, transcript chunks) ranked by semantic similarity. Pair with " +
|
|
91
|
+
"knowledge_get_node to expand a result's neighbors.",
|
|
90
92
|
inputSchema: z.object({
|
|
91
93
|
query: z.string().describe("Natural language search query"),
|
|
92
94
|
limit: z
|
package/dist/mcp-tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../src/mcp-tools.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../src/mcp-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,14 @@
|
|
|
8
8
|
* @module
|
|
9
9
|
*/
|
|
10
10
|
import type { TaskRow, WorkspaceRow, SessionRow, PersonaRow, EnvironmentRow } from "@grackle-ai/database";
|
|
11
|
+
/**
|
|
12
|
+
* Embeddable text for a task from its title + description.
|
|
13
|
+
*
|
|
14
|
+
* Shared by {@link deriveTaskText} (projection) and the spawn-time retrieval
|
|
15
|
+
* query (#1259), so a task's query embeds identically to how its node was
|
|
16
|
+
* embedded — keeping cosine similarity meaningful.
|
|
17
|
+
*/
|
|
18
|
+
export declare function deriveTaskTextFromParts(title: string, description: string | undefined): string;
|
|
11
19
|
/** Embeddable text for a Task node. */
|
|
12
20
|
export declare function deriveTaskText(task: TaskRow): string;
|
|
13
21
|
/** Embeddable text for a Workspace node. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-text.d.ts","sourceRoot":"","sources":["../../src/projection/derive-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACf,MAAM,sBAAsB,CAAC;AAO9B,uCAAuC;AACvC,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM,CAEnE;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAK7D;AAED,0CAA0C;AAC1C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,cAAc,GAAG,MAAM,CAKzE"}
|
|
1
|
+
{"version":3,"file":"derive-text.d.ts","sourceRoot":"","sources":["../../src/projection/derive-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACf,MAAM,sBAAsB,CAAC;AAO9B;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE9F;AAED,uCAAuC;AACvC,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM,CAEnE;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAK7D;AAED,0CAA0C;AAC1C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,cAAc,GAAG,MAAM,CAKzE"}
|
|
@@ -11,9 +11,19 @@
|
|
|
11
11
|
function joinParts(parts) {
|
|
12
12
|
return parts.filter((part) => Boolean(part && part.trim())).join(" - ");
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Embeddable text for a task from its title + description.
|
|
16
|
+
*
|
|
17
|
+
* Shared by {@link deriveTaskText} (projection) and the spawn-time retrieval
|
|
18
|
+
* query (#1259), so a task's query embeds identically to how its node was
|
|
19
|
+
* embedded — keeping cosine similarity meaningful.
|
|
20
|
+
*/
|
|
21
|
+
export function deriveTaskTextFromParts(title, description) {
|
|
22
|
+
return joinParts([`[Task] ${title}`, description]);
|
|
23
|
+
}
|
|
14
24
|
/** Embeddable text for a Task node. */
|
|
15
25
|
export function deriveTaskText(task) {
|
|
16
|
-
return
|
|
26
|
+
return deriveTaskTextFromParts(task.title, task.description);
|
|
17
27
|
}
|
|
18
28
|
/** Embeddable text for a Workspace node. */
|
|
19
29
|
export function deriveWorkspaceText(workspace) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-text.js","sourceRoot":"","sources":["../../src/projection/derive-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,uCAAuC;AACvC,SAAS,SAAS,CAAC,KAAgC;IACjD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"derive-text.js","sourceRoot":"","sources":["../../src/projection/derive-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,uCAAuC;AACvC,SAAS,SAAS,CAAC,KAAgC;IACjD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa,EAAE,WAA+B;IACpF,OAAO,SAAS,CAAC,CAAC,UAAU,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,OAAO,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC/D,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,mBAAmB,CAAC,SAAuB;IACzD,OAAO,SAAS,CAAC,CAAC,eAAe,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,OAAmB;IACnD,OAAO,SAAS,CAAC;QACf,aAAa,OAAO,CAAC,MAAM,EAAE;QAC7B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;KACrD,CAAC,CAAC;AACL,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,iBAAiB,CAAC,OAAmB;IACnD,OAAO,SAAS,CAAC,CAAC,aAAa,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,qBAAqB,CAAC,WAA2B;IAC/D,OAAO,SAAS,CAAC;QACf,iBAAiB,WAAW,CAAC,WAAW,EAAE;QAC1C,WAAW,WAAW,CAAC,WAAW,EAAE;KACrC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spawn-time "Related prior work" retrieval (#1259) — the thin PUSH half of the
|
|
3
|
+
* knowledge retrieval loop.
|
|
4
|
+
*
|
|
5
|
+
* At session spawn the knowledge plugin contributes a small system-prompt
|
|
6
|
+
* section: it searches the graph with the task's title+description, expands one
|
|
7
|
+
* hop from the top hit, excludes the task's own node, scopes to the workspace,
|
|
8
|
+
* applies a conservative min-score floor + char budget, and formats a
|
|
9
|
+
* "## Related prior work" block. Returns `undefined` when knowledge is
|
|
10
|
+
* unavailable, the task opted out, or nothing relevant is found.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import type { SpawnContextInput } from "@grackle-ai/plugin-sdk";
|
|
15
|
+
/**
|
|
16
|
+
* Build the "Related prior work" system-prompt section for a spawning task, or
|
|
17
|
+
* `undefined` when there is nothing relevant / knowledge is unavailable.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildRelatedPriorWork(input: SpawnContextInput): Promise<string | undefined>;
|
|
20
|
+
//# sourceMappingURL=related-prior-work.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"related-prior-work.d.ts","sourceRoot":"","sources":["../src/related-prior-work.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAmEhE;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4DjG"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spawn-time "Related prior work" retrieval (#1259) — the thin PUSH half of the
|
|
3
|
+
* knowledge retrieval loop.
|
|
4
|
+
*
|
|
5
|
+
* At session spawn the knowledge plugin contributes a small system-prompt
|
|
6
|
+
* section: it searches the graph with the task's title+description, expands one
|
|
7
|
+
* hop from the top hit, excludes the task's own node, scopes to the workspace,
|
|
8
|
+
* applies a conservative min-score floor + char budget, and formats a
|
|
9
|
+
* "## Related prior work" block. Returns `undefined` when knowledge is
|
|
10
|
+
* unavailable, the task opted out, or nothing relevant is found.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { knowledgeSearch, expandNode, findReferenceNodeBySource, REFERENCE_SOURCE, } from "@grackle-ai/knowledge";
|
|
15
|
+
import { getKnowledgeEmbedder } from "./knowledge-init.js";
|
|
16
|
+
import { isNeo4jHealthy } from "./knowledge-health.js";
|
|
17
|
+
import { deriveTaskTextFromParts } from "./projection/derive-text.js";
|
|
18
|
+
/** Read a non-negative numeric (float) env override, falling back to the default. */
|
|
19
|
+
function envNum(name, fallback) {
|
|
20
|
+
const value = Number(process.env[name]);
|
|
21
|
+
return Number.isFinite(value) && value >= 0 ? value : fallback;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Read an integer env override, floored + clamped to `min`. Integer knobs feed
|
|
25
|
+
* Cypher (`LIMIT $n`) which requires an integer literal, so a misconfigured
|
|
26
|
+
* non-integer value (e.g. "5.5") must not reach the query.
|
|
27
|
+
*/
|
|
28
|
+
function envInt(name, fallback, min) {
|
|
29
|
+
const value = Number(process.env[name]);
|
|
30
|
+
if (!Number.isFinite(value)) {
|
|
31
|
+
return fallback;
|
|
32
|
+
}
|
|
33
|
+
return Math.max(min, Math.floor(value));
|
|
34
|
+
}
|
|
35
|
+
/** Read a boolean env override ("1"/"true" = true), falling back to the default. */
|
|
36
|
+
function envBool(name, fallback) {
|
|
37
|
+
const value = process.env[name];
|
|
38
|
+
if (value === undefined || value === "") {
|
|
39
|
+
return fallback;
|
|
40
|
+
}
|
|
41
|
+
return value === "1" || value.toLowerCase() === "true";
|
|
42
|
+
}
|
|
43
|
+
/** Resolve the conservative defaults, each overridable via `GRACKLE_KG_RELATED_*`. */
|
|
44
|
+
function resolveConfig() {
|
|
45
|
+
return {
|
|
46
|
+
// Conservative floor (float): prefer no block over marginal matches (esp. on a sparse graph).
|
|
47
|
+
minScore: envNum("GRACKLE_KG_RELATED_MIN_SCORE", 0.35),
|
|
48
|
+
// Integer knobs are floored + clamped so a bad env value can't break Cypher.
|
|
49
|
+
limit: envInt("GRACKLE_KG_RELATED_LIMIT", 5, 1),
|
|
50
|
+
maxItems: envInt("GRACKLE_KG_RELATED_MAX_ITEMS", 6, 1),
|
|
51
|
+
maxChars: envInt("GRACKLE_KG_RELATED_MAX_CHARS", 2000, 1),
|
|
52
|
+
perItemChars: envInt("GRACKLE_KG_RELATED_PER_ITEM_CHARS", 300, 1),
|
|
53
|
+
expand: envBool("GRACKLE_KG_RELATED_EXPAND", true),
|
|
54
|
+
expandTopK: envInt("GRACKLE_KG_RELATED_EXPAND_TOPK", 1, 0),
|
|
55
|
+
expandDepth: envInt("GRACKLE_KG_RELATED_EXPAND_DEPTH", 1, 1),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build the "Related prior work" system-prompt section for a spawning task, or
|
|
60
|
+
* `undefined` when there is nothing relevant / knowledge is unavailable.
|
|
61
|
+
*/
|
|
62
|
+
export async function buildRelatedPriorWork(input) {
|
|
63
|
+
// Gates: per-task opt-out, missing data, workspace scope (global "" excluded), availability.
|
|
64
|
+
if (!input.injectKnowledge || !input.title || !input.workspaceId) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
if (!isNeo4jHealthy()) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const embedder = getKnowledgeEmbedder();
|
|
71
|
+
if (!embedder) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
const config = resolveConfig();
|
|
75
|
+
// Query embeds the same way the task's node was embedded (symmetry → meaningful similarity).
|
|
76
|
+
const query = deriveTaskTextFromParts(input.title, input.description);
|
|
77
|
+
const results = await knowledgeSearch(query, embedder, {
|
|
78
|
+
workspaceId: input.workspaceId,
|
|
79
|
+
minScore: config.minScore,
|
|
80
|
+
limit: config.limit,
|
|
81
|
+
});
|
|
82
|
+
if (results.length === 0) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
// Self-exclusion, two layers: by resolved node id, AND defensively by sourceId
|
|
86
|
+
// (covers the race where the task's own node is not projected yet at spawn).
|
|
87
|
+
const selfNode = await findReferenceNodeBySource(REFERENCE_SOURCE.TASK, input.taskId).catch(() => undefined);
|
|
88
|
+
const selfNodeId = selfNode?.id;
|
|
89
|
+
const isSelf = (node) => node.id === selfNodeId || (node.kind === "reference" && node.sourceId === input.taskId);
|
|
90
|
+
const ranked = [...results].sort((a, b) => b.score - a.score).filter((r) => !isSelf(r.node));
|
|
91
|
+
const items = ranked.map((r) => ({ node: r.node, score: r.score }));
|
|
92
|
+
const seen = new Set(items.map((item) => item.node.id));
|
|
93
|
+
// Optional 1-hop expansion from the top hit(s) to surface connected prior work.
|
|
94
|
+
if (config.expand && ranked.length > 0) {
|
|
95
|
+
for (const top of ranked.slice(0, config.expandTopK)) {
|
|
96
|
+
const expansion = await expandNode(top.node.id, { depth: config.expandDepth }).catch(() => ({ nodes: [], edges: [] }));
|
|
97
|
+
for (const neighbor of expansion.nodes) {
|
|
98
|
+
// Workspace-scoped, like the search: exclude global ("") nodes — "related
|
|
99
|
+
// prior work" means work in this workspace, not shared infra (personas/envs).
|
|
100
|
+
const inScope = neighbor.workspaceId === input.workspaceId;
|
|
101
|
+
if (!seen.has(neighbor.id) && !isSelf(neighbor) && inScope) {
|
|
102
|
+
seen.add(neighbor.id);
|
|
103
|
+
items.push({ node: neighbor, score: 0 });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (items.length === 0) {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
return formatSection(items, config) || undefined;
|
|
112
|
+
}
|
|
113
|
+
/** One-line snippet from a node's content, collapsed + length-capped. */
|
|
114
|
+
function snippet(text, maxChars) {
|
|
115
|
+
const collapsed = text.replace(/[`\r\n]+/g, " ").replace(/\s+/g, " ").trim();
|
|
116
|
+
return collapsed.length > maxChars ? `${collapsed.slice(0, maxChars)}…` : collapsed;
|
|
117
|
+
}
|
|
118
|
+
/** Render one item as a markdown bullet. */
|
|
119
|
+
function formatItem(item, perItemChars) {
|
|
120
|
+
const { node, score } = item;
|
|
121
|
+
const sim = score > 0 ? ` (similarity ${score.toFixed(2)})` : "";
|
|
122
|
+
if (node.kind === "reference") {
|
|
123
|
+
// Transcript chunks carry content; tasks/sessions/etc. carry a label.
|
|
124
|
+
if (node.content) {
|
|
125
|
+
return `- ${node.label || node.sourceType}: ${snippet(node.content, perItemChars)}${sim}`;
|
|
126
|
+
}
|
|
127
|
+
return `- [${node.sourceType}] ${node.label}${sim}`;
|
|
128
|
+
}
|
|
129
|
+
return `- ${node.title}: ${snippet(node.content, perItemChars)}${sim}`;
|
|
130
|
+
}
|
|
131
|
+
/** Assemble the budgeted markdown block (accumulate-then-stop; never slices mid-line). */
|
|
132
|
+
function formatSection(items, config) {
|
|
133
|
+
const header = "## Related prior work";
|
|
134
|
+
const intro = "Relevant earlier work in this workspace (from the knowledge graph). Use `knowledge_search` to dig deeper before starting.";
|
|
135
|
+
const lines = [header, intro];
|
|
136
|
+
let total = header.length + intro.length + 2;
|
|
137
|
+
let count = 0;
|
|
138
|
+
for (const item of items) {
|
|
139
|
+
if (count >= config.maxItems) {
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
const line = formatItem(item, config.perItemChars);
|
|
143
|
+
if (total + line.length + 1 > config.maxChars) {
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
lines.push(line);
|
|
147
|
+
total += line.length + 1;
|
|
148
|
+
count += 1;
|
|
149
|
+
}
|
|
150
|
+
// Only intro + header, no items fit → contribute nothing.
|
|
151
|
+
return count > 0 ? lines.join("\n") : "";
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=related-prior-work.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"related-prior-work.js","sourceRoot":"","sources":["../src/related-prior-work.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.122.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/auth": "0.
|
|
36
|
-
"@grackle-ai/
|
|
37
|
-
"@grackle-ai/
|
|
38
|
-
"@grackle-ai/
|
|
39
|
-
"@grackle-ai/
|
|
40
|
-
"@grackle-ai/plugin-sdk": "0.
|
|
35
|
+
"@grackle-ai/auth": "0.122.0",
|
|
36
|
+
"@grackle-ai/common": "0.122.0",
|
|
37
|
+
"@grackle-ai/core": "0.122.0",
|
|
38
|
+
"@grackle-ai/database": "0.122.0",
|
|
39
|
+
"@grackle-ai/knowledge": "0.122.0",
|
|
40
|
+
"@grackle-ai/plugin-sdk": "0.122.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@rushstack/heft": "1.2.7",
|