pi-harness-runtime 0.10.27 → 0.10.43
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/.pi/plugins/herdr-clipboard/herdr-plugin.toml +22 -0
- package/.pi/plugins/herdr-clipboard/start-bridge.sh +29 -0
- package/.pi/plugins/herdr-clipboard/tmux-watch.sh +39 -0
- package/CHANGELOG.md +19 -0
- package/README.md +87 -1
- package/config.toml.example +35 -0
- package/package.json +5 -3
- package/packages/architecture-generator/dist/adr.d.ts +1 -1
- package/packages/architecture-generator/dist/adr.d.ts.map +1 -1
- package/packages/architecture-generator/dist/adr.js +2 -2
- package/packages/architecture-generator/dist/adr.js.map +1 -1
- package/packages/architecture-generator/dist/index.d.ts +3 -3
- package/packages/architecture-generator/dist/index.js +3 -3
- package/packages/architecture-generator/dist/mermaid.d.ts +1 -1
- package/packages/architecture-generator/dist/mermaid.d.ts.map +1 -1
- package/packages/architecture-generator/dist/mermaid.js +20 -20
- package/packages/architecture-generator/dist/mermaid.js.map +1 -1
- package/packages/architecture-generator/dist/types.d.ts +2 -2
- package/packages/architecture-generator/dist/types.d.ts.map +1 -1
- package/packages/architecture-generator/src/adr.ts +16 -16
- package/packages/architecture-generator/src/index.ts +3 -3
- package/packages/architecture-generator/src/mermaid.ts +48 -54
- package/packages/architecture-generator/src/types.ts +15 -15
- package/packages/capability-registry/src/types.js +10 -0
- package/packages/clipboard/dist/src/copy-sync.d.ts.map +1 -1
- package/packages/clipboard/dist/src/copy-sync.js +45 -3
- package/packages/clipboard/dist/src/copy-sync.js.map +1 -1
- package/packages/clipboard/dist/src/index.d.ts +1 -0
- package/packages/clipboard/dist/src/index.d.ts.map +1 -1
- package/packages/clipboard/dist/src/index.js +1 -0
- package/packages/clipboard/dist/src/index.js.map +1 -1
- package/packages/clipboard/dist/src/paste-bridge.d.ts +19 -0
- package/packages/clipboard/dist/src/paste-bridge.d.ts.map +1 -0
- package/packages/clipboard/dist/src/paste-bridge.js +78 -0
- package/packages/clipboard/dist/src/paste-bridge.js.map +1 -0
- package/packages/clipboard/src/copy-sync.ts +52 -3
- package/packages/clipboard/src/index.ts +1 -0
- package/packages/clipboard/src/paste-bridge.ts +86 -0
- package/packages/clipboard-plugin/dist/index.d.ts +28 -0
- package/packages/clipboard-plugin/dist/index.d.ts.map +1 -0
- package/packages/clipboard-plugin/dist/index.js +64 -0
- package/packages/clipboard-plugin/dist/index.js.map +1 -0
- package/packages/clipboard-plugin/dist/types.d.ts +30 -0
- package/packages/clipboard-plugin/dist/types.d.ts.map +1 -0
- package/packages/clipboard-plugin/dist/types.js +5 -0
- package/packages/clipboard-plugin/dist/types.js.map +1 -0
- package/packages/clipboard-plugin/src/index.ts +74 -0
- package/packages/clipboard-plugin/src/types.ts +30 -0
- package/packages/file-copy-helper/dist/src/extension.js +84 -25
- package/packages/file-copy-helper/src/extension.debug.ts +226 -0
- package/packages/file-copy-helper/src/extension.ts +89 -59
- package/packages/knowledge-graph/dist/graph-extractor.d.ts +1 -1
- package/packages/knowledge-graph/dist/graph-extractor.d.ts.map +1 -1
- package/packages/knowledge-graph/dist/graph-extractor.js +46 -55
- package/packages/knowledge-graph/dist/graph-extractor.js.map +1 -1
- package/packages/knowledge-graph/dist/index.d.ts +4 -4
- package/packages/knowledge-graph/dist/index.js +4 -4
- package/packages/knowledge-graph/dist/mcp-client.d.ts +2 -2
- package/packages/knowledge-graph/dist/mcp-client.d.ts.map +1 -1
- package/packages/knowledge-graph/dist/mcp-client.js +22 -22
- package/packages/knowledge-graph/dist/mcp-client.js.map +1 -1
- package/packages/knowledge-graph/dist/provenance-linker.d.ts +1 -1
- package/packages/knowledge-graph/dist/provenance-linker.d.ts.map +1 -1
- package/packages/knowledge-graph/dist/provenance-linker.js +14 -15
- package/packages/knowledge-graph/dist/provenance-linker.js.map +1 -1
- package/packages/knowledge-graph/dist/types.d.ts +2 -2
- package/packages/knowledge-graph/dist/types.d.ts.map +1 -1
- package/packages/knowledge-graph/src/graph-extractor.ts +263 -280
- package/packages/knowledge-graph/src/index.ts +4 -4
- package/packages/knowledge-graph/src/mcp-client.ts +188 -197
- package/packages/knowledge-graph/src/provenance-linker.ts +69 -73
- package/packages/knowledge-graph/src/types.ts +46 -46
- package/packages/milestone-manager/dist/engine.d.ts +1 -1
- package/packages/milestone-manager/dist/engine.d.ts.map +1 -1
- package/packages/milestone-manager/dist/engine.js +7 -9
- package/packages/milestone-manager/dist/engine.js.map +1 -1
- package/packages/milestone-manager/dist/index.d.ts +2 -2
- package/packages/milestone-manager/dist/index.js +2 -2
- package/packages/milestone-manager/dist/types.d.ts +2 -2
- package/packages/milestone-manager/dist/types.d.ts.map +1 -1
- package/packages/milestone-manager/src/engine.ts +83 -91
- package/packages/milestone-manager/src/index.ts +2 -2
- package/packages/milestone-manager/src/types.ts +13 -13
- package/packages/notification/dist/adapters/line-adapter.d.ts +17 -0
- package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -0
- package/packages/notification/dist/adapters/line-adapter.js +99 -0
- package/packages/notification/dist/adapters/line-adapter.js.map +1 -0
- package/packages/notification/dist/index.d.ts +1 -0
- package/packages/notification/dist/index.d.ts.map +1 -1
- package/packages/notification/dist/index.js +1 -0
- package/packages/notification/dist/index.js.map +1 -1
- package/packages/notification/dist/notification-center.d.ts.map +1 -1
- package/packages/notification/dist/notification-center.js +4 -0
- package/packages/notification/dist/notification-center.js.map +1 -1
- package/packages/notification/dist/types.d.ts +6 -2
- package/packages/notification/dist/types.d.ts.map +1 -1
- package/packages/notification/src/adapters/line-adapter.ts +119 -0
- package/packages/notification/src/index.ts +1 -0
- package/packages/notification/src/notification-center.ts +6 -0
- package/packages/notification/src/types.ts +7 -2
- package/packages/project-bootstrap/dist/bootstrap.d.ts +1 -1
- package/packages/project-bootstrap/dist/bootstrap.d.ts.map +1 -1
- package/packages/project-bootstrap/dist/bootstrap.js +37 -45
- package/packages/project-bootstrap/dist/bootstrap.js.map +1 -1
- package/packages/project-bootstrap/dist/frappe.d.ts +1 -1
- package/packages/project-bootstrap/dist/frappe.d.ts.map +1 -1
- package/packages/project-bootstrap/dist/frappe.js +34 -34
- package/packages/project-bootstrap/dist/frappe.js.map +1 -1
- package/packages/project-bootstrap/dist/index.d.ts +5 -5
- package/packages/project-bootstrap/dist/index.js +5 -5
- package/packages/project-bootstrap/dist/minimal.d.ts +1 -1
- package/packages/project-bootstrap/dist/minimal.js +13 -13
- package/packages/project-bootstrap/dist/minimal.js.map +1 -1
- package/packages/project-bootstrap/dist/types.d.ts +1 -1
- package/packages/project-bootstrap/dist/types.d.ts.map +1 -1
- package/packages/project-bootstrap/dist/typescript.d.ts +1 -1
- package/packages/project-bootstrap/dist/typescript.d.ts.map +1 -1
- package/packages/project-bootstrap/dist/typescript.js +38 -38
- package/packages/project-bootstrap/dist/typescript.js.map +1 -1
- package/packages/project-bootstrap/src/bootstrap.ts +121 -136
- package/packages/project-bootstrap/src/frappe.ts +65 -71
- package/packages/project-bootstrap/src/index.ts +5 -5
- package/packages/project-bootstrap/src/minimal.ts +31 -31
- package/packages/project-bootstrap/src/types.ts +38 -38
- package/packages/project-bootstrap/src/typescript.ts +69 -78
- package/packages/provider-router/dist/src/types.js +1 -1
- package/packages/write-review/src/index.ts +47 -0
- package/packages/write-review/src/injection.ts +21 -1
- package/prompts/agents/reviewer.md +57 -0
- package/prompts/agents/writer.md +42 -0
- package/prompts/slash-commands.md +40 -0
- package/prompts/write-review.md +50 -0
- package/scripts/copy-plugins.js +56 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* file-copy-helper extension
|
|
2
|
+
* file-copy-helper extension (DEBUG VERSION)
|
|
3
3
|
*
|
|
4
4
|
* Injects "use cp instead of writing from scratch" reminder when user
|
|
5
5
|
* asks to mimic, copy, clone, or replicate files/folders between locations.
|
|
6
|
+
*
|
|
7
|
+
* DEBUG: All events and rule evaluations logged to /tmp/file-copy-helper-debug.log
|
|
6
8
|
*/
|
|
7
9
|
|
|
8
10
|
import type {
|
|
@@ -10,32 +12,26 @@ import type {
|
|
|
10
12
|
InputEvent,
|
|
11
13
|
InputEventResult,
|
|
12
14
|
} from "@earendil-works/pi-coding-agent";
|
|
15
|
+
import * as fs from "fs";
|
|
16
|
+
|
|
17
|
+
// DEBUG: Write to file instead of TUI
|
|
18
|
+
const DEBUG_LOG = "/tmp/file-copy-helper-debug.log";
|
|
19
|
+
|
|
20
|
+
function debugLog(label: string, data: unknown): void {
|
|
21
|
+
const timestamp = new Date().toISOString();
|
|
22
|
+
const entry = `[${timestamp}] ${label}: ${JSON.stringify(data, null, 2)}\n`;
|
|
23
|
+
fs.appendFileSync(DEBUG_LOG, entry);
|
|
24
|
+
}
|
|
13
25
|
|
|
14
26
|
// Keywords that trigger the copy rule injection
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"copy from",
|
|
18
|
-
"copy to",
|
|
19
|
-
"clone from",
|
|
20
|
-
"clone to",
|
|
21
|
-
"replicate",
|
|
22
|
-
"port from",
|
|
23
|
-
"migrate from",
|
|
24
|
-
"bring from",
|
|
25
|
-
"move from",
|
|
26
|
-
];
|
|
27
|
+
// MUST have explicit mimic/copy/clone/replicate intent + source/dest context
|
|
28
|
+
const COPY_KEYWORDS = ["mimic", "replicate", "clone"];
|
|
27
29
|
|
|
28
|
-
//
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"cat ",
|
|
34
|
-
"catting",
|
|
35
|
-
"reading the file",
|
|
36
|
-
"reading file",
|
|
37
|
-
"lets read",
|
|
38
|
-
];
|
|
30
|
+
// Must have destination context to trigger (avoids false positives)
|
|
31
|
+
const COPY_DEST_CONTEXT = ["to ", "into ", "/dest/", "/target/", "over to"];
|
|
32
|
+
|
|
33
|
+
// Must have source context to trigger
|
|
34
|
+
const COPY_SOURCE_CONTEXT = ["from ", "source", "/source/", "orig"];
|
|
39
35
|
|
|
40
36
|
// When agent sees import/module errors (needs to copy those files too)
|
|
41
37
|
const IMPORT_ERROR_TRIGGERS = [
|
|
@@ -81,17 +77,6 @@ sudo cp /source/*.tsx /dest/
|
|
|
81
77
|
**Why**: Reading wastes time. The source files are complete - copying preserves everything exactly.
|
|
82
78
|
`;
|
|
83
79
|
|
|
84
|
-
// Lighter reminder when agent starts reading source
|
|
85
|
-
const READ_WARNING = `
|
|
86
|
-
## STOP READING - JUST COPY
|
|
87
|
-
|
|
88
|
-
You are about to read a source file. DO NOT read it.
|
|
89
|
-
|
|
90
|
-
Just run: sudo cp /path/to/source /path/to/dest
|
|
91
|
-
|
|
92
|
-
Copying is instant and preserves exact code. Reading is unnecessary.
|
|
93
|
-
`;
|
|
94
|
-
|
|
95
80
|
// When agent sees import errors - copy those files too!
|
|
96
81
|
const IMPORT_ERROR_RULE = `
|
|
97
82
|
## IMPORT ERRORS? COPY THOSE FILES TOO!
|
|
@@ -122,70 +107,115 @@ sudo cp /source/path/components/notifications-provider.tsx /dest/path/components
|
|
|
122
107
|
|
|
123
108
|
/**
|
|
124
109
|
* Check if text contains copy-related keywords
|
|
110
|
+
* Requires: explicit intent (mimic/copy/clone/replicate) AND destination context
|
|
125
111
|
*/
|
|
126
|
-
function shouldInjectCopyRule(text: string): boolean {
|
|
112
|
+
function shouldInjectCopyRule(text: string): { triggered: boolean; reason: string } {
|
|
127
113
|
const lower = text.toLowerCase();
|
|
128
|
-
return COPY_KEYWORDS.some((keyword) => lower.includes(keyword));
|
|
129
|
-
}
|
|
130
114
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const
|
|
139
|
-
|
|
115
|
+
// Must have explicit mimic/copy/clone/replicate intent
|
|
116
|
+
const hasIntent = COPY_KEYWORDS.some((keyword) => lower.includes(keyword));
|
|
117
|
+
if (!hasIntent) {
|
|
118
|
+
return { triggered: false, reason: `No intent keyword found. Keywords: ${COPY_KEYWORDS.join(", ")}` };
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Must have destination context (avoids false positives on "copy this code" etc)
|
|
122
|
+
const hasDest = COPY_DEST_CONTEXT.some((ctx) => lower.includes(ctx));
|
|
123
|
+
if (!hasDest) {
|
|
124
|
+
return { triggered: false, reason: `No destination context found. Dest contexts: ${COPY_DEST_CONTEXT.join(", ")}` };
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Should have source context for full mimic behavior
|
|
128
|
+
const hasSource = COPY_SOURCE_CONTEXT.some((ctx) => lower.includes(ctx));
|
|
129
|
+
if (!hasSource) {
|
|
130
|
+
return { triggered: false, reason: `No source context found. Source contexts: ${COPY_SOURCE_CONTEXT.join(", ")}` };
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return { triggered: true, reason: `All conditions met: hasIntent=${hasIntent}, hasDest=${hasDest}, hasSource=${hasSource}` };
|
|
140
134
|
}
|
|
141
135
|
|
|
142
136
|
/**
|
|
143
137
|
* Check if text contains import error triggers
|
|
144
138
|
*/
|
|
145
|
-
function shouldInjectImportErrorRule(text: string): boolean {
|
|
139
|
+
function shouldInjectImportErrorRule(text: string): { triggered: boolean; reason: string } {
|
|
146
140
|
const lower = text.toLowerCase();
|
|
147
|
-
|
|
141
|
+
const matchingTriggers = IMPORT_ERROR_TRIGGERS.filter((t) => lower.includes(t));
|
|
142
|
+
|
|
143
|
+
if (matchingTriggers.length === 0) {
|
|
144
|
+
return { triggered: false, reason: "No import error triggers found" };
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return { triggered: true, reason: `Matched triggers: ${matchingTriggers.join(", ")}` };
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
/**
|
|
151
151
|
* Register the file-copy-helper extension
|
|
152
152
|
*/
|
|
153
153
|
export function registerFileCopyHelper(pi: ExtensionAPI): void {
|
|
154
|
+
// Clear debug log on startup
|
|
155
|
+
fs.writeFileSync(DEBUG_LOG, `[${new Date().toISOString()}] === DEBUG SESSION STARTED ===\n`);
|
|
156
|
+
|
|
154
157
|
pi.on("input", (event: InputEvent): InputEventResult | undefined => {
|
|
158
|
+
// DEBUG: Log what we receive
|
|
159
|
+
debugLog("INPUT_EVENT", {
|
|
160
|
+
source: event.source,
|
|
161
|
+
textLength: event.text?.length,
|
|
162
|
+
textPreview: event.text?.substring(0, 200),
|
|
163
|
+
fullText: event.text,
|
|
164
|
+
});
|
|
165
|
+
|
|
155
166
|
// Only process user input (not from extensions or RPC)
|
|
156
167
|
if (event.source !== "interactive") {
|
|
168
|
+
debugLog("SKIP", "not interactive input - skipping");
|
|
157
169
|
return;
|
|
158
170
|
}
|
|
159
171
|
|
|
160
172
|
const text = event.text.trim();
|
|
173
|
+
debugLog("PROCESSING_TEXT", {
|
|
174
|
+
text,
|
|
175
|
+
length: text.length,
|
|
176
|
+
hasMinLength: text.length >= 10,
|
|
177
|
+
});
|
|
178
|
+
|
|
161
179
|
if (!text || text.length < 10) {
|
|
180
|
+
debugLog("SKIP", "text too short (< 10 chars)");
|
|
162
181
|
return;
|
|
163
182
|
}
|
|
164
183
|
|
|
165
184
|
// Check if this is a copy/mimic request
|
|
166
|
-
|
|
185
|
+
const copyCheck = shouldInjectCopyRule(text);
|
|
186
|
+
debugLog("COPY_RULE_CHECK", {
|
|
187
|
+
triggered: copyCheck.triggered,
|
|
188
|
+
reason: copyCheck.reason,
|
|
189
|
+
matchingKeywords: COPY_KEYWORDS.filter(k => text.toLowerCase().includes(k)),
|
|
190
|
+
matchingDest: COPY_DEST_CONTEXT.filter(ctx => text.toLowerCase().includes(ctx)),
|
|
191
|
+
matchingSource: COPY_SOURCE_CONTEXT.filter(ctx => text.toLowerCase().includes(ctx)),
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
if (copyCheck.triggered) {
|
|
195
|
+
debugLog("INJECT", { rule: "COPY_RULE", reason: copyCheck.reason });
|
|
167
196
|
return {
|
|
168
197
|
action: "transform",
|
|
169
198
|
text: text + COPY_RULE,
|
|
170
199
|
};
|
|
171
200
|
}
|
|
172
201
|
|
|
173
|
-
// Warn if agent is about to read source files unnecessarily
|
|
174
|
-
if (shouldInjectReadWarning(text)) {
|
|
175
|
-
return {
|
|
176
|
-
action: "transform",
|
|
177
|
-
text: text + READ_WARNING,
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
|
|
181
202
|
// Inject import error rule when agent sees missing imports
|
|
182
|
-
|
|
203
|
+
const importCheck = shouldInjectImportErrorRule(text);
|
|
204
|
+
debugLog("IMPORT_ERROR_CHECK", {
|
|
205
|
+
triggered: importCheck.triggered,
|
|
206
|
+
reason: importCheck.reason,
|
|
207
|
+
matchingTriggers: IMPORT_ERROR_TRIGGERS.filter(t => text.toLowerCase().includes(t)),
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
if (importCheck.triggered) {
|
|
211
|
+
debugLog("INJECT", { rule: "IMPORT_ERROR_RULE", reason: importCheck.reason });
|
|
183
212
|
return {
|
|
184
213
|
action: "transform",
|
|
185
214
|
text: text + IMPORT_ERROR_RULE,
|
|
186
215
|
};
|
|
187
216
|
}
|
|
188
217
|
|
|
218
|
+
debugLog("NO_INJECTION", "no rule matched - passing through");
|
|
189
219
|
return;
|
|
190
220
|
});
|
|
191
221
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Extract nodes and edges from SKILL.md files.
|
|
5
5
|
*/
|
|
6
|
-
import type { KnowledgeNode, KnowledgeEdge, KnowledgeGraph } from
|
|
6
|
+
import type { KnowledgeNode, KnowledgeEdge, KnowledgeGraph } from './types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Extract a knowledge node from a SKILL.md file
|
|
9
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-extractor.d.ts","sourceRoot":"","sources":["../src/graph-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"graph-extractor.d.ts","sourceRoot":"","sources":["../src/graph-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAC;AAqF/F;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,aAAa,CAef;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,aAAa,EAAE,CAqDjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,aAAa,CA0Bf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,aAAa,EAAE,CAmCjB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CA4EzB"}
|
|
@@ -5,24 +5,24 @@
|
|
|
5
5
|
*/
|
|
6
6
|
function parseSKILL(content) {
|
|
7
7
|
const sections = [];
|
|
8
|
-
const lines = content.split(
|
|
9
|
-
let currentSection = { content:
|
|
8
|
+
const lines = content.split('\n');
|
|
9
|
+
let currentSection = { content: '' };
|
|
10
10
|
let inFrontmatter = false;
|
|
11
11
|
for (const line of lines) {
|
|
12
|
-
if (line.trim() ===
|
|
12
|
+
if (line.trim() === '---') {
|
|
13
13
|
inFrontmatter = !inFrontmatter;
|
|
14
14
|
continue;
|
|
15
15
|
}
|
|
16
16
|
if (inFrontmatter)
|
|
17
17
|
continue;
|
|
18
|
-
if (line.startsWith(
|
|
18
|
+
if (line.startsWith('## ')) {
|
|
19
19
|
if (currentSection.content) {
|
|
20
20
|
sections.push(currentSection);
|
|
21
21
|
}
|
|
22
|
-
currentSection = { title: line.slice(3), content:
|
|
22
|
+
currentSection = { title: line.slice(3), content: '' };
|
|
23
23
|
}
|
|
24
24
|
else {
|
|
25
|
-
currentSection.content += (currentSection.content ?
|
|
25
|
+
currentSection.content += (currentSection.content ? '\n' : '') + line;
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
if (currentSection.content) {
|
|
@@ -37,12 +37,10 @@ function parseSKILL(content) {
|
|
|
37
37
|
function extractRFCRefs(content) {
|
|
38
38
|
const rfcPattern = /RFC[- ]?(\d{4})/gi;
|
|
39
39
|
const matches = content.match(rfcPattern) || [];
|
|
40
|
-
return [
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
})),
|
|
45
|
-
];
|
|
40
|
+
return [...new Set(matches.map(m => {
|
|
41
|
+
const num = m.replace(/[^0-9]/g, '');
|
|
42
|
+
return `RFC-${num.padStart(4, '0')}`;
|
|
43
|
+
}))];
|
|
46
44
|
}
|
|
47
45
|
/**
|
|
48
46
|
* Extract wiki links from content (e.g., [[skill:xxx]])
|
|
@@ -50,7 +48,7 @@ function extractRFCRefs(content) {
|
|
|
50
48
|
function extractWikiLinks(content) {
|
|
51
49
|
const linkPattern = /\[\[([^\]]+)\]\]/g;
|
|
52
50
|
const matches = content.match(linkPattern) || [];
|
|
53
|
-
return matches.map(
|
|
51
|
+
return matches.map(m => m.slice(2, -2).trim());
|
|
54
52
|
}
|
|
55
53
|
/**
|
|
56
54
|
* Extract skill ID from file path
|
|
@@ -58,9 +56,7 @@ function extractWikiLinks(content) {
|
|
|
58
56
|
function extractSkillId(filePath) {
|
|
59
57
|
// Path: .../skills/{skill-id}/SKILL.md
|
|
60
58
|
const match = filePath.match(/skills\/([^/]+)\/SKILL\.md$/i);
|
|
61
|
-
return match
|
|
62
|
-
? match[1]
|
|
63
|
-
: filePath.split("/").pop()?.replace(".md", "") || "unknown";
|
|
59
|
+
return match ? match[1] : filePath.split('/').pop()?.replace('.md', '') || 'unknown';
|
|
64
60
|
}
|
|
65
61
|
/**
|
|
66
62
|
* Parse provenance from frontmatter
|
|
@@ -82,7 +78,7 @@ export function extractSkillNode(filePath, content, frontmatter) {
|
|
|
82
78
|
const okf = parseSKILL(content);
|
|
83
79
|
return {
|
|
84
80
|
id: `skill:${skillId}`,
|
|
85
|
-
type:
|
|
81
|
+
type: 'skill',
|
|
86
82
|
data: {
|
|
87
83
|
title: frontmatter.title || okf.title || skillId,
|
|
88
84
|
description: okf.sections[0]?.content.slice(0, 200) || undefined,
|
|
@@ -100,14 +96,12 @@ export function extractSkillEdges(filePath, content, frontmatter) {
|
|
|
100
96
|
const edges = [];
|
|
101
97
|
// Provenance: implements RFC
|
|
102
98
|
if (provenance.implements) {
|
|
103
|
-
const rfcNum = provenance.implements
|
|
104
|
-
.replace(/RFC[- ]?/i, "")
|
|
105
|
-
.padStart(4, "0");
|
|
99
|
+
const rfcNum = provenance.implements.replace(/RFC[- ]?/i, '').padStart(4, '0');
|
|
106
100
|
edges.push({
|
|
107
101
|
from: `skill:${skillId}`,
|
|
108
102
|
to: `rfc:RFC-${rfcNum}`,
|
|
109
|
-
type:
|
|
110
|
-
metadata: { source:
|
|
103
|
+
type: 'implements',
|
|
104
|
+
metadata: { source: 'frontmatter:provenance.implements' },
|
|
111
105
|
});
|
|
112
106
|
}
|
|
113
107
|
// Provenance: documents implementation
|
|
@@ -115,32 +109,31 @@ export function extractSkillEdges(filePath, content, frontmatter) {
|
|
|
115
109
|
edges.push({
|
|
116
110
|
from: `skill:${skillId}`,
|
|
117
111
|
to: `implementation:${provenance.related_implementation}`,
|
|
118
|
-
type:
|
|
119
|
-
metadata: { source:
|
|
112
|
+
type: 'documents',
|
|
113
|
+
metadata: { source: 'frontmatter:related_implementation' },
|
|
120
114
|
});
|
|
121
115
|
}
|
|
122
116
|
// Content: RFC references
|
|
123
117
|
const rfcRefs = extractRFCRefs(content);
|
|
124
118
|
for (const rfc of rfcRefs) {
|
|
125
|
-
if (rfc !== provenance.implements) {
|
|
126
|
-
// Don't duplicate
|
|
119
|
+
if (rfc !== provenance.implements) { // Don't duplicate
|
|
127
120
|
edges.push({
|
|
128
121
|
from: `skill:${skillId}`,
|
|
129
122
|
to: rfc,
|
|
130
|
-
type:
|
|
131
|
-
metadata: { source:
|
|
123
|
+
type: 'references',
|
|
124
|
+
metadata: { source: 'content:regex' },
|
|
132
125
|
});
|
|
133
126
|
}
|
|
134
127
|
}
|
|
135
128
|
// Content: wiki links
|
|
136
129
|
const wikiLinks = extractWikiLinks(content);
|
|
137
130
|
for (const link of wikiLinks) {
|
|
138
|
-
if (link.startsWith(
|
|
131
|
+
if (link.startsWith('skill:')) {
|
|
139
132
|
edges.push({
|
|
140
133
|
from: `skill:${skillId}`,
|
|
141
134
|
to: link,
|
|
142
|
-
type:
|
|
143
|
-
metadata: { source:
|
|
135
|
+
type: 'related_to',
|
|
136
|
+
metadata: { source: 'content:wiki-link' },
|
|
144
137
|
});
|
|
145
138
|
}
|
|
146
139
|
}
|
|
@@ -152,18 +145,18 @@ export function extractSkillEdges(filePath, content, frontmatter) {
|
|
|
152
145
|
export function extractRFCNode(filePath, content, title) {
|
|
153
146
|
// Extract RFC number from filename: RFC-0106_KNOWLEDGE_GRAPH_PROVENANCE.md
|
|
154
147
|
const match = filePath.match(/RFC[- ]?(\d{4})/i);
|
|
155
|
-
const rfcNum = match ? match[1].padStart(4,
|
|
148
|
+
const rfcNum = match ? match[1].padStart(4, '0') : '0000';
|
|
156
149
|
// Extract summary from first paragraph
|
|
157
150
|
const summaryMatch = content.match(/## Summary\n+([^\n]+)/i);
|
|
158
151
|
const summary = summaryMatch ? summaryMatch[1].slice(0, 200) : undefined;
|
|
159
152
|
// Extract tags from content
|
|
160
153
|
const tagMatches = content.match(/tag[s]?:?\s*\[([^\]]+)\]/i);
|
|
161
154
|
const tags = tagMatches
|
|
162
|
-
? tagMatches[1].split(
|
|
155
|
+
? tagMatches[1].split(',').map(t => t.trim().toLowerCase())
|
|
163
156
|
: [];
|
|
164
157
|
return {
|
|
165
158
|
id: `rfc:RFC-${rfcNum}`,
|
|
166
|
-
type:
|
|
159
|
+
type: 'rfc',
|
|
167
160
|
data: {
|
|
168
161
|
title,
|
|
169
162
|
description: summary,
|
|
@@ -181,13 +174,13 @@ export function extractRFCEdges(filePath, content) {
|
|
|
181
174
|
// RFC references other RFCs
|
|
182
175
|
const rfcRefs = extractRFCRefs(content);
|
|
183
176
|
const match = filePath.match(/RFC[- ]?(\d{4})/i);
|
|
184
|
-
const rfcNum = match ? `RFC-${match[1].padStart(4,
|
|
177
|
+
const rfcNum = match ? `RFC-${match[1].padStart(4, '0')}` : 'rfc:unknown';
|
|
185
178
|
for (const ref of rfcRefs) {
|
|
186
179
|
edges.push({
|
|
187
180
|
from: rfcNum,
|
|
188
181
|
to: ref,
|
|
189
|
-
type:
|
|
190
|
-
metadata: { source:
|
|
182
|
+
type: 'references',
|
|
183
|
+
metadata: { source: 'content:regex' },
|
|
191
184
|
});
|
|
192
185
|
}
|
|
193
186
|
// Supersedes (e.g., "Supersedes RFC-0008")
|
|
@@ -196,12 +189,12 @@ export function extractRFCEdges(filePath, content) {
|
|
|
196
189
|
for (const match of supersedesMatch) {
|
|
197
190
|
const numMatch = match.match(/\d{4}/);
|
|
198
191
|
if (numMatch) {
|
|
199
|
-
const superseded = `RFC-${numMatch[0].padStart(4,
|
|
192
|
+
const superseded = `RFC-${numMatch[0].padStart(4, '0')}`;
|
|
200
193
|
edges.push({
|
|
201
194
|
from: rfcNum,
|
|
202
195
|
to: superseded,
|
|
203
|
-
type:
|
|
204
|
-
metadata: { source:
|
|
196
|
+
type: 'supersedes',
|
|
197
|
+
metadata: { source: 'content:supersedes' },
|
|
205
198
|
});
|
|
206
199
|
}
|
|
207
200
|
}
|
|
@@ -212,8 +205,8 @@ export function extractRFCEdges(filePath, content) {
|
|
|
212
205
|
* Build complete knowledge graph from directory
|
|
213
206
|
*/
|
|
214
207
|
export async function extractKnowledgeGraph(skillsPath, rfcPath) {
|
|
215
|
-
const { readdir, readFile } = await import(
|
|
216
|
-
const { join } = await import(
|
|
208
|
+
const { readdir, readFile } = await import('fs/promises');
|
|
209
|
+
const { join } = await import('path');
|
|
217
210
|
const nodes = [];
|
|
218
211
|
const edges = [];
|
|
219
212
|
// Extract skill nodes and edges
|
|
@@ -222,25 +215,25 @@ export async function extractKnowledgeGraph(skillsPath, rfcPath) {
|
|
|
222
215
|
for (const dir of skillDirs) {
|
|
223
216
|
if (!dir.isDirectory())
|
|
224
217
|
continue;
|
|
225
|
-
const skillPath = join(skillsPath, dir.name,
|
|
218
|
+
const skillPath = join(skillsPath, dir.name, 'SKILL.md');
|
|
226
219
|
try {
|
|
227
|
-
const content = await readFile(skillPath,
|
|
220
|
+
const content = await readFile(skillPath, 'utf-8');
|
|
228
221
|
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
229
222
|
const frontmatter = {};
|
|
230
223
|
if (frontmatterMatch) {
|
|
231
|
-
for (const line of frontmatterMatch[1].split(
|
|
232
|
-
const [key, ...valueParts] = line.split(
|
|
224
|
+
for (const line of frontmatterMatch[1].split('\n')) {
|
|
225
|
+
const [key, ...valueParts] = line.split(':');
|
|
233
226
|
if (key && valueParts.length) {
|
|
234
|
-
const value = valueParts.join(
|
|
227
|
+
const value = valueParts.join(':').trim();
|
|
235
228
|
// Handle arrays
|
|
236
|
-
if (value.startsWith(
|
|
229
|
+
if (value.startsWith('[')) {
|
|
237
230
|
frontmatter[key.trim()] = value
|
|
238
231
|
.slice(1, -1)
|
|
239
|
-
.split(
|
|
240
|
-
.map(
|
|
232
|
+
.split(',')
|
|
233
|
+
.map(v => v.trim().replace(/['"]/g, ''));
|
|
241
234
|
}
|
|
242
235
|
else {
|
|
243
|
-
frontmatter[key.trim()] = value.replace(/['"]/g,
|
|
236
|
+
frontmatter[key.trim()] = value.replace(/['"]/g, '');
|
|
244
237
|
}
|
|
245
238
|
}
|
|
246
239
|
}
|
|
@@ -265,12 +258,10 @@ export async function extractKnowledgeGraph(skillsPath, rfcPath) {
|
|
|
265
258
|
if (!file.match(/^RFC[- ]?\d{4}_.*\.md$/i))
|
|
266
259
|
continue;
|
|
267
260
|
const filePath = join(rfcPath, file);
|
|
268
|
-
const content = await readFile(filePath,
|
|
261
|
+
const content = await readFile(filePath, 'utf-8');
|
|
269
262
|
// Extract title from first # heading
|
|
270
263
|
const titleMatch = content.match(/^#\s+(.+)$/m);
|
|
271
|
-
const title = titleMatch
|
|
272
|
-
? titleMatch[1].replace(/^RFC[-\d]+\s*[-–]\s*/, "")
|
|
273
|
-
: file;
|
|
264
|
+
const title = titleMatch ? titleMatch[1].replace(/^RFC[-\d]+\s*[-–]\s*/, '') : file;
|
|
274
265
|
const node = extractRFCNode(filePath, content, title);
|
|
275
266
|
nodes.push(node);
|
|
276
267
|
const rfcEdges = extractRFCEdges(filePath, content);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-extractor.js","sourceRoot":"","sources":["../src/graph-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"graph-extractor.js","sourceRoot":"","sources":["../src/graph-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
* await syncGraphToKnowledgeService(fullGraph, config);
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
|
-
export * from
|
|
24
|
-
export * from
|
|
25
|
-
export * from
|
|
26
|
-
export * from
|
|
23
|
+
export * from './types.js';
|
|
24
|
+
export * from './graph-extractor.js';
|
|
25
|
+
export * from './provenance-linker.js';
|
|
26
|
+
export * from './mcp-client.js';
|
|
27
27
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
* await syncGraphToKnowledgeService(fullGraph, config);
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
|
-
export * from
|
|
24
|
-
export * from
|
|
25
|
-
export * from
|
|
26
|
-
export * from
|
|
23
|
+
export * from './types.js';
|
|
24
|
+
export * from './graph-extractor.js';
|
|
25
|
+
export * from './provenance-linker.js';
|
|
26
|
+
export * from './mcp-client.js';
|
|
27
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* MCP tools for knowledge graph queries.
|
|
5
5
|
*/
|
|
6
|
-
import type { KnowledgeNode, KnowledgeEdge, KnowledgeGraph, SearchOptions, SearchResult, TencentDBConfig } from
|
|
6
|
+
import type { KnowledgeNode, KnowledgeEdge, KnowledgeGraph, SearchOptions, SearchResult, TencentDBConfig } from './types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Sync graph to TencentDB Knowledge Service
|
|
9
9
|
*/
|
|
@@ -19,7 +19,7 @@ export declare function searchGraph(query: string, config: TencentDBConfig, opti
|
|
|
19
19
|
* Query graph by relationship type
|
|
20
20
|
*/
|
|
21
21
|
export declare function queryRelationships(config: TencentDBConfig, options: {
|
|
22
|
-
type?: KnowledgeEdge[
|
|
22
|
+
type?: KnowledgeEdge['type'];
|
|
23
23
|
from?: string;
|
|
24
24
|
to?: string;
|
|
25
25
|
}): Promise<KnowledgeEdge[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA4B/C;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC,CA6CzB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,GACA,OAAO,CAAC,aAAa,EAAE,CAAC,CA4B1B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsC/B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,EACvB,UAAU,SAAI,GACb,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B"}
|