pi-harness-runtime 0.10.26 → 0.10.27

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.
Files changed (92) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/package.json +1 -1
  3. package/packages/architecture-generator/dist/adr.d.ts +15 -0
  4. package/packages/architecture-generator/dist/adr.d.ts.map +1 -0
  5. package/packages/architecture-generator/dist/adr.js +42 -0
  6. package/packages/architecture-generator/dist/adr.js.map +1 -0
  7. package/packages/architecture-generator/dist/index.d.ts +9 -0
  8. package/packages/architecture-generator/dist/index.d.ts.map +1 -0
  9. package/packages/architecture-generator/dist/index.js +9 -0
  10. package/packages/architecture-generator/dist/index.js.map +1 -0
  11. package/packages/architecture-generator/dist/mermaid.d.ts +30 -0
  12. package/packages/architecture-generator/dist/mermaid.d.ts.map +1 -0
  13. package/packages/architecture-generator/dist/mermaid.js +58 -0
  14. package/packages/architecture-generator/dist/mermaid.js.map +1 -0
  15. package/packages/architecture-generator/dist/types.d.ts +30 -0
  16. package/packages/architecture-generator/dist/types.d.ts.map +1 -0
  17. package/packages/architecture-generator/dist/types.js +7 -0
  18. package/packages/architecture-generator/dist/types.js.map +1 -0
  19. package/packages/architecture-generator/src/adr.ts +51 -0
  20. package/packages/architecture-generator/src/index.ts +9 -0
  21. package/packages/architecture-generator/src/mermaid.ts +82 -0
  22. package/packages/architecture-generator/src/types.ts +30 -0
  23. package/packages/knowledge-graph/dist/graph-extractor.d.ts +27 -0
  24. package/packages/knowledge-graph/dist/graph-extractor.d.ts.map +1 -0
  25. package/packages/knowledge-graph/dist/graph-extractor.js +285 -0
  26. package/packages/knowledge-graph/dist/graph-extractor.js.map +1 -0
  27. package/packages/knowledge-graph/dist/index.d.ts +27 -0
  28. package/packages/knowledge-graph/dist/index.d.ts.map +1 -0
  29. package/packages/knowledge-graph/dist/index.js +27 -0
  30. package/packages/knowledge-graph/dist/index.js.map +1 -0
  31. package/packages/knowledge-graph/dist/mcp-client.d.ts +38 -0
  32. package/packages/knowledge-graph/dist/mcp-client.d.ts.map +1 -0
  33. package/packages/knowledge-graph/dist/mcp-client.js +157 -0
  34. package/packages/knowledge-graph/dist/mcp-client.js.map +1 -0
  35. package/packages/knowledge-graph/dist/provenance-linker.d.ts +19 -0
  36. package/packages/knowledge-graph/dist/provenance-linker.d.ts.map +1 -0
  37. package/packages/knowledge-graph/dist/provenance-linker.js +92 -0
  38. package/packages/knowledge-graph/dist/provenance-linker.js.map +1 -0
  39. package/packages/knowledge-graph/dist/types.d.ts +53 -0
  40. package/packages/knowledge-graph/dist/types.d.ts.map +1 -0
  41. package/packages/knowledge-graph/dist/types.js +7 -0
  42. package/packages/knowledge-graph/dist/types.js.map +1 -0
  43. package/packages/knowledge-graph/src/graph-extractor.ts +355 -0
  44. package/packages/knowledge-graph/src/index.ts +27 -0
  45. package/packages/knowledge-graph/src/mcp-client.ts +246 -0
  46. package/packages/knowledge-graph/src/provenance-linker.ts +105 -0
  47. package/packages/knowledge-graph/src/types.ts +86 -0
  48. package/packages/milestone-manager/dist/engine.d.ts +27 -0
  49. package/packages/milestone-manager/dist/engine.d.ts.map +1 -0
  50. package/packages/milestone-manager/dist/engine.js +80 -0
  51. package/packages/milestone-manager/dist/engine.js.map +1 -0
  52. package/packages/milestone-manager/dist/index.d.ts +6 -0
  53. package/packages/milestone-manager/dist/index.d.ts.map +1 -0
  54. package/packages/milestone-manager/dist/index.js +6 -0
  55. package/packages/milestone-manager/dist/index.js.map +1 -0
  56. package/packages/milestone-manager/dist/types.d.ts +25 -0
  57. package/packages/milestone-manager/dist/types.d.ts.map +1 -0
  58. package/packages/milestone-manager/dist/types.js +7 -0
  59. package/packages/milestone-manager/dist/types.js.map +1 -0
  60. package/packages/milestone-manager/src/engine.ts +113 -0
  61. package/packages/milestone-manager/src/index.ts +6 -0
  62. package/packages/milestone-manager/src/types.ts +28 -0
  63. package/packages/project-bootstrap/dist/bootstrap.d.ts +23 -0
  64. package/packages/project-bootstrap/dist/bootstrap.d.ts.map +1 -0
  65. package/packages/project-bootstrap/dist/bootstrap.js +136 -0
  66. package/packages/project-bootstrap/dist/bootstrap.js.map +1 -0
  67. package/packages/project-bootstrap/dist/frappe.d.ts +8 -0
  68. package/packages/project-bootstrap/dist/frappe.d.ts.map +1 -0
  69. package/packages/project-bootstrap/dist/frappe.js +82 -0
  70. package/packages/project-bootstrap/dist/frappe.js.map +1 -0
  71. package/packages/project-bootstrap/dist/index.d.ts +27 -0
  72. package/packages/project-bootstrap/dist/index.d.ts.map +1 -0
  73. package/packages/project-bootstrap/dist/index.js +27 -0
  74. package/packages/project-bootstrap/dist/index.js.map +1 -0
  75. package/packages/project-bootstrap/dist/minimal.d.ts +8 -0
  76. package/packages/project-bootstrap/dist/minimal.d.ts.map +1 -0
  77. package/packages/project-bootstrap/dist/minimal.js +35 -0
  78. package/packages/project-bootstrap/dist/minimal.js.map +1 -0
  79. package/packages/project-bootstrap/dist/types.d.ts +61 -0
  80. package/packages/project-bootstrap/dist/types.d.ts.map +1 -0
  81. package/packages/project-bootstrap/dist/types.js +7 -0
  82. package/packages/project-bootstrap/dist/types.js.map +1 -0
  83. package/packages/project-bootstrap/dist/typescript.d.ts +8 -0
  84. package/packages/project-bootstrap/dist/typescript.d.ts.map +1 -0
  85. package/packages/project-bootstrap/dist/typescript.js +103 -0
  86. package/packages/project-bootstrap/dist/typescript.js.map +1 -0
  87. package/packages/project-bootstrap/src/bootstrap.ts +181 -0
  88. package/packages/project-bootstrap/src/frappe.ts +103 -0
  89. package/packages/project-bootstrap/src/index.ts +27 -0
  90. package/packages/project-bootstrap/src/minimal.ts +45 -0
  91. package/packages/project-bootstrap/src/types.ts +66 -0
  92. package/packages/project-bootstrap/src/typescript.ts +123 -0
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Knowledge Graph - RFC-0106
3
+ *
4
+ * Extract nodes and edges from SKILL.md files.
5
+ */
6
+ function parseSKILL(content) {
7
+ const sections = [];
8
+ const lines = content.split("\n");
9
+ let currentSection = { content: "" };
10
+ let inFrontmatter = false;
11
+ for (const line of lines) {
12
+ if (line.trim() === "---") {
13
+ inFrontmatter = !inFrontmatter;
14
+ continue;
15
+ }
16
+ if (inFrontmatter)
17
+ continue;
18
+ if (line.startsWith("## ")) {
19
+ if (currentSection.content) {
20
+ sections.push(currentSection);
21
+ }
22
+ currentSection = { title: line.slice(3), content: "" };
23
+ }
24
+ else {
25
+ currentSection.content += (currentSection.content ? "\n" : "") + line;
26
+ }
27
+ }
28
+ if (currentSection.content) {
29
+ sections.push(currentSection);
30
+ }
31
+ const titleMatch = content.match(/^#\s+(.+)$/m);
32
+ return { title: titleMatch?.[1], sections };
33
+ }
34
+ /**
35
+ * Extract RFC references from content
36
+ */
37
+ function extractRFCRefs(content) {
38
+ const rfcPattern = /RFC[- ]?(\d{4})/gi;
39
+ const matches = content.match(rfcPattern) || [];
40
+ return [
41
+ ...new Set(matches.map((m) => {
42
+ const num = m.replace(/[^0-9]/g, "");
43
+ return `RFC-${num.padStart(4, "0")}`;
44
+ })),
45
+ ];
46
+ }
47
+ /**
48
+ * Extract wiki links from content (e.g., [[skill:xxx]])
49
+ */
50
+ function extractWikiLinks(content) {
51
+ const linkPattern = /\[\[([^\]]+)\]\]/g;
52
+ const matches = content.match(linkPattern) || [];
53
+ return matches.map((m) => m.slice(2, -2).trim());
54
+ }
55
+ /**
56
+ * Extract skill ID from file path
57
+ */
58
+ function extractSkillId(filePath) {
59
+ // Path: .../skills/{skill-id}/SKILL.md
60
+ const match = filePath.match(/skills\/([^/]+)\/SKILL\.md$/i);
61
+ return match
62
+ ? match[1]
63
+ : filePath.split("/").pop()?.replace(".md", "") || "unknown";
64
+ }
65
+ /**
66
+ * Parse provenance from frontmatter
67
+ */
68
+ function parseProvenance(frontmatter) {
69
+ return {
70
+ implements: frontmatter.provenance || undefined,
71
+ related_implementation: frontmatter.related_implementation || undefined,
72
+ author: frontmatter.author || undefined,
73
+ version: frontmatter.version || undefined,
74
+ };
75
+ }
76
+ /**
77
+ * Extract a knowledge node from a SKILL.md file
78
+ */
79
+ export function extractSkillNode(filePath, content, frontmatter) {
80
+ const skillId = extractSkillId(filePath);
81
+ const provenance = parseProvenance(frontmatter);
82
+ const okf = parseSKILL(content);
83
+ return {
84
+ id: `skill:${skillId}`,
85
+ type: "skill",
86
+ data: {
87
+ title: frontmatter.title || okf.title || skillId,
88
+ description: okf.sections[0]?.content.slice(0, 200) || undefined,
89
+ tags: frontmatter.tags || [],
90
+ source: filePath,
91
+ },
92
+ };
93
+ }
94
+ /**
95
+ * Extract edges from a SKILL.md file
96
+ */
97
+ export function extractSkillEdges(filePath, content, frontmatter) {
98
+ const skillId = extractSkillId(filePath);
99
+ const provenance = parseProvenance(frontmatter);
100
+ const edges = [];
101
+ // Provenance: implements RFC
102
+ if (provenance.implements) {
103
+ const rfcNum = provenance.implements
104
+ .replace(/RFC[- ]?/i, "")
105
+ .padStart(4, "0");
106
+ edges.push({
107
+ from: `skill:${skillId}`,
108
+ to: `rfc:RFC-${rfcNum}`,
109
+ type: "implements",
110
+ metadata: { source: "frontmatter:provenance.implements" },
111
+ });
112
+ }
113
+ // Provenance: documents implementation
114
+ if (provenance.related_implementation) {
115
+ edges.push({
116
+ from: `skill:${skillId}`,
117
+ to: `implementation:${provenance.related_implementation}`,
118
+ type: "documents",
119
+ metadata: { source: "frontmatter:related_implementation" },
120
+ });
121
+ }
122
+ // Content: RFC references
123
+ const rfcRefs = extractRFCRefs(content);
124
+ for (const rfc of rfcRefs) {
125
+ if (rfc !== provenance.implements) {
126
+ // Don't duplicate
127
+ edges.push({
128
+ from: `skill:${skillId}`,
129
+ to: rfc,
130
+ type: "references",
131
+ metadata: { source: "content:regex" },
132
+ });
133
+ }
134
+ }
135
+ // Content: wiki links
136
+ const wikiLinks = extractWikiLinks(content);
137
+ for (const link of wikiLinks) {
138
+ if (link.startsWith("skill:")) {
139
+ edges.push({
140
+ from: `skill:${skillId}`,
141
+ to: link,
142
+ type: "related_to",
143
+ metadata: { source: "content:wiki-link" },
144
+ });
145
+ }
146
+ }
147
+ return edges;
148
+ }
149
+ /**
150
+ * Extract RFC nodes from RFC markdown files
151
+ */
152
+ export function extractRFCNode(filePath, content, title) {
153
+ // Extract RFC number from filename: RFC-0106_KNOWLEDGE_GRAPH_PROVENANCE.md
154
+ const match = filePath.match(/RFC[- ]?(\d{4})/i);
155
+ const rfcNum = match ? match[1].padStart(4, "0") : "0000";
156
+ // Extract summary from first paragraph
157
+ const summaryMatch = content.match(/## Summary\n+([^\n]+)/i);
158
+ const summary = summaryMatch ? summaryMatch[1].slice(0, 200) : undefined;
159
+ // Extract tags from content
160
+ const tagMatches = content.match(/tag[s]?:?\s*\[([^\]]+)\]/i);
161
+ const tags = tagMatches
162
+ ? tagMatches[1].split(",").map((t) => t.trim().toLowerCase())
163
+ : [];
164
+ return {
165
+ id: `rfc:RFC-${rfcNum}`,
166
+ type: "rfc",
167
+ data: {
168
+ title,
169
+ description: summary,
170
+ tags,
171
+ source: filePath,
172
+ url: `https://github.com/ManotLuijiu/pi-harness-runtime/blob/main/${filePath}`,
173
+ },
174
+ };
175
+ }
176
+ /**
177
+ * Extract edges between RFCs
178
+ */
179
+ export function extractRFCEdges(filePath, content) {
180
+ const edges = [];
181
+ // RFC references other RFCs
182
+ const rfcRefs = extractRFCRefs(content);
183
+ const match = filePath.match(/RFC[- ]?(\d{4})/i);
184
+ const rfcNum = match ? `RFC-${match[1].padStart(4, "0")}` : "rfc:unknown";
185
+ for (const ref of rfcRefs) {
186
+ edges.push({
187
+ from: rfcNum,
188
+ to: ref,
189
+ type: "references",
190
+ metadata: { source: "content:regex" },
191
+ });
192
+ }
193
+ // Supersedes (e.g., "Supersedes RFC-0008")
194
+ const supersedesMatch = content.match(/supersedes\s+RFC[- ]?(\d{4})/gi);
195
+ if (supersedesMatch) {
196
+ for (const match of supersedesMatch) {
197
+ const numMatch = match.match(/\d{4}/);
198
+ if (numMatch) {
199
+ const superseded = `RFC-${numMatch[0].padStart(4, "0")}`;
200
+ edges.push({
201
+ from: rfcNum,
202
+ to: superseded,
203
+ type: "supersedes",
204
+ metadata: { source: "content:supersedes" },
205
+ });
206
+ }
207
+ }
208
+ }
209
+ return edges;
210
+ }
211
+ /**
212
+ * Build complete knowledge graph from directory
213
+ */
214
+ export async function extractKnowledgeGraph(skillsPath, rfcPath) {
215
+ const { readdir, readFile } = await import("fs/promises");
216
+ const { join } = await import("path");
217
+ const nodes = [];
218
+ const edges = [];
219
+ // Extract skill nodes and edges
220
+ try {
221
+ const skillDirs = await readdir(skillsPath, { withFileTypes: true });
222
+ for (const dir of skillDirs) {
223
+ if (!dir.isDirectory())
224
+ continue;
225
+ const skillPath = join(skillsPath, dir.name, "SKILL.md");
226
+ try {
227
+ const content = await readFile(skillPath, "utf-8");
228
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
229
+ const frontmatter = {};
230
+ if (frontmatterMatch) {
231
+ for (const line of frontmatterMatch[1].split("\n")) {
232
+ const [key, ...valueParts] = line.split(":");
233
+ if (key && valueParts.length) {
234
+ const value = valueParts.join(":").trim();
235
+ // Handle arrays
236
+ if (value.startsWith("[")) {
237
+ frontmatter[key.trim()] = value
238
+ .slice(1, -1)
239
+ .split(",")
240
+ .map((v) => v.trim().replace(/['"]/g, ""));
241
+ }
242
+ else {
243
+ frontmatter[key.trim()] = value.replace(/['"]/g, "");
244
+ }
245
+ }
246
+ }
247
+ }
248
+ const node = extractSkillNode(skillPath, content, frontmatter);
249
+ nodes.push(node);
250
+ const skillEdges = extractSkillEdges(skillPath, content, frontmatter);
251
+ edges.push(...skillEdges);
252
+ }
253
+ catch {
254
+ // Skip files that can't be read
255
+ }
256
+ }
257
+ }
258
+ catch {
259
+ // Skills directory might not exist
260
+ }
261
+ // Extract RFC nodes and edges
262
+ try {
263
+ const rfcFiles = await readdir(rfcPath);
264
+ for (const file of rfcFiles) {
265
+ if (!file.match(/^RFC[- ]?\d{4}_.*\.md$/i))
266
+ continue;
267
+ const filePath = join(rfcPath, file);
268
+ const content = await readFile(filePath, "utf-8");
269
+ // Extract title from first # heading
270
+ const titleMatch = content.match(/^#\s+(.+)$/m);
271
+ const title = titleMatch
272
+ ? titleMatch[1].replace(/^RFC[-\d]+\s*[-–]\s*/, "")
273
+ : file;
274
+ const node = extractRFCNode(filePath, content, title);
275
+ nodes.push(node);
276
+ const rfcEdges = extractRFCEdges(filePath, content);
277
+ edges.push(...rfcEdges);
278
+ }
279
+ }
280
+ catch {
281
+ // RFC directory might not exist
282
+ }
283
+ return { nodes, edges };
284
+ }
285
+ //# sourceMappingURL=graph-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-extractor.js","sourceRoot":"","sources":["../src/graph-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Knowledge Graph - RFC-0106
3
+ *
4
+ * Knowledge Graph extraction and provenance linking for SKILL.md files.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { extractKnowledgeGraph, completeGraph, syncGraphToKnowledgeService } from '@pi-harness/knowledge-graph';
9
+ *
10
+ * // Extract graph from skills directory
11
+ * const graph = await extractKnowledgeGraph(
12
+ * 'frappe-bench/.claude-plugins/moocoding-skills/skills',
13
+ * 'pi-harness-runtime/RFC'
14
+ * );
15
+ *
16
+ * // Complete with provenance edges
17
+ * const fullGraph = completeGraph(graph);
18
+ *
19
+ * // Sync to TencentDB Knowledge Service
20
+ * await syncGraphToKnowledgeService(fullGraph, config);
21
+ * ```
22
+ */
23
+ export * from "./types.js";
24
+ export * from "./graph-extractor.js";
25
+ export * from "./provenance-linker.js";
26
+ export * from "./mcp-client.js";
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Knowledge Graph - RFC-0106
3
+ *
4
+ * Knowledge Graph extraction and provenance linking for SKILL.md files.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { extractKnowledgeGraph, completeGraph, syncGraphToKnowledgeService } from '@pi-harness/knowledge-graph';
9
+ *
10
+ * // Extract graph from skills directory
11
+ * const graph = await extractKnowledgeGraph(
12
+ * 'frappe-bench/.claude-plugins/moocoding-skills/skills',
13
+ * 'pi-harness-runtime/RFC'
14
+ * );
15
+ *
16
+ * // Complete with provenance edges
17
+ * const fullGraph = completeGraph(graph);
18
+ *
19
+ * // Sync to TencentDB Knowledge Service
20
+ * await syncGraphToKnowledgeService(fullGraph, config);
21
+ * ```
22
+ */
23
+ export * from "./types.js";
24
+ export * from "./graph-extractor.js";
25
+ export * from "./provenance-linker.js";
26
+ export * from "./mcp-client.js";
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Knowledge Graph - RFC-0106
3
+ *
4
+ * MCP tools for knowledge graph queries.
5
+ */
6
+ import type { KnowledgeNode, KnowledgeEdge, KnowledgeGraph, SearchOptions, SearchResult, TencentDBConfig } from "./types.js";
7
+ /**
8
+ * Sync graph to TencentDB Knowledge Service
9
+ */
10
+ export declare function syncGraphToKnowledgeService(graph: KnowledgeGraph, config: TencentDBConfig): Promise<{
11
+ synced: number;
12
+ errors: string[];
13
+ }>;
14
+ /**
15
+ * Search knowledge graph
16
+ */
17
+ export declare function searchGraph(query: string, config: TencentDBConfig, options?: SearchOptions): Promise<SearchResult[]>;
18
+ /**
19
+ * Query graph by relationship type
20
+ */
21
+ export declare function queryRelationships(config: TencentDBConfig, options: {
22
+ type?: KnowledgeEdge["type"];
23
+ from?: string;
24
+ to?: string;
25
+ }): Promise<KnowledgeEdge[]>;
26
+ /**
27
+ * Get a specific node by ID
28
+ */
29
+ export declare function getNode(nodeId: string, config: TencentDBConfig): Promise<KnowledgeNode | null>;
30
+ /**
31
+ * Find skills that implement a specific RFC
32
+ */
33
+ export declare function findByRFC(rfcId: string, config: TencentDBConfig): Promise<KnowledgeNode[]>;
34
+ /**
35
+ * Find related skills
36
+ */
37
+ export declare function findRelated(skillId: string, config: TencentDBConfig, maxResults?: number): Promise<KnowledgeNode[]>;
38
+ //# sourceMappingURL=mcp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,EACf,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAsB,2BAA2B,CAChD,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,eAAe,GACrB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA+B/C;AAED;;GAEG;AACH,wBAAsB,WAAW,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,aAAkB,GACzB,OAAO,CAAC,YAAY,EAAE,CAAC,CAgDzB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE;IACR,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACZ,GACC,OAAO,CAAC,aAAa,EAAE,CAAC,CA+B1B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,eAAe,GACrB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsC/B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC9B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,eAAe,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,EACvB,UAAU,SAAI,GACZ,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Knowledge Graph - RFC-0106
3
+ *
4
+ * MCP tools for knowledge graph queries.
5
+ */
6
+ /**
7
+ * Sync graph to TencentDB Knowledge Service
8
+ */
9
+ export async function syncGraphToKnowledgeService(graph, config) {
10
+ const response = await fetch(`${config.knowledgeUrl}/v3/knowledge/graph/sync`, {
11
+ method: "POST",
12
+ headers: {
13
+ "Content-Type": "application/json",
14
+ "x-tdai-user-key": config.userKey,
15
+ "x-tdai-service-id": config.serviceId,
16
+ },
17
+ body: JSON.stringify({
18
+ nodes: graph.nodes.map((n) => ({
19
+ id: n.id,
20
+ type: n.type,
21
+ ...n.data,
22
+ })),
23
+ edges: graph.edges.map((e) => ({
24
+ from: e.from,
25
+ to: e.to,
26
+ type: e.type,
27
+ })),
28
+ }),
29
+ });
30
+ if (!response.ok) {
31
+ const error = await response.text();
32
+ return { synced: 0, errors: [error] };
33
+ }
34
+ return { synced: graph.nodes.length, errors: [] };
35
+ }
36
+ /**
37
+ * Search knowledge graph
38
+ */
39
+ export async function searchGraph(query, config, options = {}) {
40
+ const limit = options.limit ?? 10;
41
+ const response = await fetch(`${config.knowledgeUrl}/v3/knowledge/graph/search`, {
42
+ method: "POST",
43
+ headers: {
44
+ "Content-Type": "application/json",
45
+ "x-tdai-user-key": config.userKey,
46
+ "x-tdai-service-id": config.serviceId,
47
+ },
48
+ body: JSON.stringify({
49
+ query,
50
+ limit,
51
+ type: options.type,
52
+ tags: options.tags,
53
+ }),
54
+ });
55
+ if (!response.ok) {
56
+ throw new Error(`Search failed: ${response.statusText}`);
57
+ }
58
+ const data = (await response.json());
59
+ return data.results.map((r) => ({
60
+ node: {
61
+ id: r.id,
62
+ type: r.type,
63
+ data: {
64
+ title: r.title,
65
+ description: r.description,
66
+ tags: r.tags,
67
+ },
68
+ },
69
+ score: r.score,
70
+ }));
71
+ }
72
+ /**
73
+ * Query graph by relationship type
74
+ */
75
+ export async function queryRelationships(config, options) {
76
+ const response = await fetch(`${config.knowledgeUrl}/v3/knowledge/graph/query`, {
77
+ method: "POST",
78
+ headers: {
79
+ "Content-Type": "application/json",
80
+ "x-tdai-user-key": config.userKey,
81
+ "x-tdai-service-id": config.serviceId,
82
+ },
83
+ body: JSON.stringify(options),
84
+ });
85
+ if (!response.ok) {
86
+ throw new Error(`Query failed: ${response.statusText}`);
87
+ }
88
+ const data = (await response.json());
89
+ return data.edges.map((e) => ({
90
+ from: e.from,
91
+ to: e.to,
92
+ type: e.type,
93
+ }));
94
+ }
95
+ /**
96
+ * Get a specific node by ID
97
+ */
98
+ export async function getNode(nodeId, config) {
99
+ const response = await fetch(`${config.knowledgeUrl}/v3/knowledge/graph/node/${encodeURIComponent(nodeId)}`, {
100
+ headers: {
101
+ "x-tdai-user-key": config.userKey,
102
+ "x-tdai-service-id": config.serviceId,
103
+ },
104
+ });
105
+ if (response.status === 404) {
106
+ return null;
107
+ }
108
+ if (!response.ok) {
109
+ throw new Error(`Get node failed: ${response.statusText}`);
110
+ }
111
+ const data = (await response.json());
112
+ return {
113
+ id: data.id,
114
+ type: data.type,
115
+ data: {
116
+ title: data.title,
117
+ description: data.description,
118
+ tags: data.tags,
119
+ source: data.source,
120
+ },
121
+ };
122
+ }
123
+ /**
124
+ * Find skills that implement a specific RFC
125
+ */
126
+ export async function findByRFC(rfcId, config) {
127
+ const edges = await queryRelationships(config, {
128
+ type: "implements",
129
+ to: rfcId.startsWith("rfc:") ? rfcId : `rfc:${rfcId}`,
130
+ });
131
+ const nodes = [];
132
+ for (const edge of edges) {
133
+ const node = await getNode(edge.from, config);
134
+ if (node) {
135
+ nodes.push(node);
136
+ }
137
+ }
138
+ return nodes;
139
+ }
140
+ /**
141
+ * Find related skills
142
+ */
143
+ export async function findRelated(skillId, config, maxResults = 5) {
144
+ const edges = await queryRelationships(config, {
145
+ type: "related_to",
146
+ from: skillId.startsWith("skill:") ? skillId : `skill:${skillId}`,
147
+ });
148
+ const nodes = [];
149
+ for (const edge of edges.slice(0, maxResults)) {
150
+ const node = await getNode(edge.to, config);
151
+ if (node) {
152
+ nodes.push(node);
153
+ }
154
+ }
155
+ return nodes;
156
+ }
157
+ //# sourceMappingURL=mcp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Knowledge Graph - RFC-0106
3
+ *
4
+ * Provenance linking between skills, RFCs, and implementations.
5
+ */
6
+ import type { KnowledgeEdge, KnowledgeGraph } from "./types.js";
7
+ /**
8
+ * Build provenance edges based on metadata
9
+ */
10
+ export declare function buildProvenanceEdges(graph: KnowledgeGraph): KnowledgeEdge[];
11
+ /**
12
+ * Infer additional edges from content analysis
13
+ */
14
+ export declare function inferRelationships(graph: KnowledgeGraph): KnowledgeEdge[];
15
+ /**
16
+ * Complete graph with all provenance links
17
+ */
18
+ export declare function completeGraph(graph: KnowledgeGraph): KnowledgeGraph;
19
+ //# sourceMappingURL=provenance-linker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance-linker.d.ts","sourceRoot":"","sources":["../src/provenance-linker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAiB,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/E;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,EAAE,CAiC3E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,EAAE,CA0CzE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAQnE"}