@apart-tech/apart-intelligence 0.1.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.
Files changed (141) hide show
  1. package/dist/analyzers/python-analyzer.d.ts +3 -0
  2. package/dist/analyzers/python-analyzer.d.ts.map +1 -0
  3. package/dist/analyzers/python-analyzer.js +127 -0
  4. package/dist/analyzers/python-analyzer.js.map +1 -0
  5. package/dist/analyzers/types.d.ts +18 -0
  6. package/dist/analyzers/types.d.ts.map +1 -0
  7. package/dist/analyzers/types.js +2 -0
  8. package/dist/analyzers/types.js.map +1 -0
  9. package/dist/analyzers/typescript-analyzer.d.ts +3 -0
  10. package/dist/analyzers/typescript-analyzer.d.ts.map +1 -0
  11. package/dist/analyzers/typescript-analyzer.js +131 -0
  12. package/dist/analyzers/typescript-analyzer.js.map +1 -0
  13. package/dist/api-client/api-provider.d.ts +3 -0
  14. package/dist/api-client/api-provider.d.ts.map +1 -0
  15. package/dist/api-client/api-provider.js +85 -0
  16. package/dist/api-client/api-provider.js.map +1 -0
  17. package/dist/api-client/credentials.d.ts +6 -0
  18. package/dist/api-client/credentials.d.ts.map +1 -0
  19. package/dist/api-client/credentials.js +34 -0
  20. package/dist/api-client/credentials.js.map +1 -0
  21. package/dist/api-client/direct-provider.d.ts +3 -0
  22. package/dist/api-client/direct-provider.d.ts.map +1 -0
  23. package/dist/api-client/direct-provider.js +149 -0
  24. package/dist/api-client/direct-provider.js.map +1 -0
  25. package/dist/api-client/http-client.d.ts +11 -0
  26. package/dist/api-client/http-client.d.ts.map +1 -0
  27. package/dist/api-client/http-client.js +37 -0
  28. package/dist/api-client/http-client.js.map +1 -0
  29. package/dist/api-client/index.d.ts +5 -0
  30. package/dist/api-client/index.d.ts.map +1 -0
  31. package/dist/api-client/index.js +12 -0
  32. package/dist/api-client/index.js.map +1 -0
  33. package/dist/api-client/types.d.ts +93 -0
  34. package/dist/api-client/types.d.ts.map +1 -0
  35. package/dist/api-client/types.js +2 -0
  36. package/dist/api-client/types.js.map +1 -0
  37. package/dist/commands/add.d.ts +3 -0
  38. package/dist/commands/add.d.ts.map +1 -0
  39. package/dist/commands/add.js +50 -0
  40. package/dist/commands/add.js.map +1 -0
  41. package/dist/commands/context.d.ts +3 -0
  42. package/dist/commands/context.d.ts.map +1 -0
  43. package/dist/commands/context.js +40 -0
  44. package/dist/commands/context.js.map +1 -0
  45. package/dist/commands/delete.d.ts +3 -0
  46. package/dist/commands/delete.d.ts.map +1 -0
  47. package/dist/commands/delete.js +45 -0
  48. package/dist/commands/delete.js.map +1 -0
  49. package/dist/commands/domains.d.ts +3 -0
  50. package/dist/commands/domains.d.ts.map +1 -0
  51. package/dist/commands/domains.js +61 -0
  52. package/dist/commands/domains.js.map +1 -0
  53. package/dist/commands/drafts.d.ts +3 -0
  54. package/dist/commands/drafts.d.ts.map +1 -0
  55. package/dist/commands/drafts.js +29 -0
  56. package/dist/commands/drafts.js.map +1 -0
  57. package/dist/commands/duplicates.d.ts +3 -0
  58. package/dist/commands/duplicates.d.ts.map +1 -0
  59. package/dist/commands/duplicates.js +39 -0
  60. package/dist/commands/duplicates.js.map +1 -0
  61. package/dist/commands/get.d.ts +3 -0
  62. package/dist/commands/get.d.ts.map +1 -0
  63. package/dist/commands/get.js +43 -0
  64. package/dist/commands/get.js.map +1 -0
  65. package/dist/commands/graph.d.ts +3 -0
  66. package/dist/commands/graph.d.ts.map +1 -0
  67. package/dist/commands/graph.js +368 -0
  68. package/dist/commands/graph.js.map +1 -0
  69. package/dist/commands/health.d.ts +3 -0
  70. package/dist/commands/health.d.ts.map +1 -0
  71. package/dist/commands/health.js +61 -0
  72. package/dist/commands/health.js.map +1 -0
  73. package/dist/commands/init.d.ts +3 -0
  74. package/dist/commands/init.d.ts.map +1 -0
  75. package/dist/commands/init.js +336 -0
  76. package/dist/commands/init.js.map +1 -0
  77. package/dist/commands/islands.d.ts +3 -0
  78. package/dist/commands/islands.d.ts.map +1 -0
  79. package/dist/commands/islands.js +70 -0
  80. package/dist/commands/islands.js.map +1 -0
  81. package/dist/commands/link.d.ts +3 -0
  82. package/dist/commands/link.d.ts.map +1 -0
  83. package/dist/commands/link.js +40 -0
  84. package/dist/commands/link.js.map +1 -0
  85. package/dist/commands/login.d.ts +3 -0
  86. package/dist/commands/login.d.ts.map +1 -0
  87. package/dist/commands/login.js +72 -0
  88. package/dist/commands/login.js.map +1 -0
  89. package/dist/commands/logout.d.ts +3 -0
  90. package/dist/commands/logout.d.ts.map +1 -0
  91. package/dist/commands/logout.js +18 -0
  92. package/dist/commands/logout.js.map +1 -0
  93. package/dist/commands/map.d.ts +3 -0
  94. package/dist/commands/map.d.ts.map +1 -0
  95. package/dist/commands/map.js +127 -0
  96. package/dist/commands/map.js.map +1 -0
  97. package/dist/commands/normalize.d.ts +3 -0
  98. package/dist/commands/normalize.d.ts.map +1 -0
  99. package/dist/commands/normalize.js +67 -0
  100. package/dist/commands/normalize.js.map +1 -0
  101. package/dist/commands/orphans.d.ts +3 -0
  102. package/dist/commands/orphans.d.ts.map +1 -0
  103. package/dist/commands/orphans.js +36 -0
  104. package/dist/commands/orphans.js.map +1 -0
  105. package/dist/commands/search.d.ts +3 -0
  106. package/dist/commands/search.d.ts.map +1 -0
  107. package/dist/commands/search.js +44 -0
  108. package/dist/commands/search.js.map +1 -0
  109. package/dist/commands/status.d.ts +3 -0
  110. package/dist/commands/status.d.ts.map +1 -0
  111. package/dist/commands/status.js +25 -0
  112. package/dist/commands/status.js.map +1 -0
  113. package/dist/commands/suggest-links.d.ts +3 -0
  114. package/dist/commands/suggest-links.d.ts.map +1 -0
  115. package/dist/commands/suggest-links.js +44 -0
  116. package/dist/commands/suggest-links.js.map +1 -0
  117. package/dist/commands/types.d.ts +3 -0
  118. package/dist/commands/types.d.ts.map +1 -0
  119. package/dist/commands/types.js +30 -0
  120. package/dist/commands/types.js.map +1 -0
  121. package/dist/commands/update.d.ts +3 -0
  122. package/dist/commands/update.d.ts.map +1 -0
  123. package/dist/commands/update.js +55 -0
  124. package/dist/commands/update.js.map +1 -0
  125. package/dist/commands/validate.d.ts +3 -0
  126. package/dist/commands/validate.d.ts.map +1 -0
  127. package/dist/commands/validate.js +79 -0
  128. package/dist/commands/validate.js.map +1 -0
  129. package/dist/commands/whoami.d.ts +3 -0
  130. package/dist/commands/whoami.d.ts.map +1 -0
  131. package/dist/commands/whoami.js +21 -0
  132. package/dist/commands/whoami.js.map +1 -0
  133. package/dist/index.d.ts +3 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/dist/index.js +59 -0
  136. package/dist/index.js.map +1 -0
  137. package/dist/utils.d.ts +3 -0
  138. package/dist/utils.d.ts.map +1 -0
  139. package/dist/utils.js +7 -0
  140. package/dist/utils.js.map +1 -0
  141. package/package.json +37 -0
@@ -0,0 +1,127 @@
1
+ import { resolve, basename } from "path";
2
+ import { existsSync } from "fs";
3
+ import chalk from "chalk";
4
+ import { loadServiceProvider } from "../api-client/index.js";
5
+ import { analyzeTypeScriptProject } from "../analyzers/typescript-analyzer.js";
6
+ import { analyzePythonProject } from "../analyzers/python-analyzer.js";
7
+ export function mapCommand(program) {
8
+ program
9
+ .command("map")
10
+ .description("Map a codebase into the knowledge graph")
11
+ .argument("[directory]", "Project root directory", ".")
12
+ .option("--by <creator>", "Creator identifier", "tc-map")
13
+ .option("-d, --domain <slug>", "Domain slug to assign nodes to")
14
+ .option("--dry-run", "Analyze without creating nodes")
15
+ .option("--exclude <patterns>", "Comma-separated patterns to exclude")
16
+ .option("-f, --format <format>", "Output format: text, json", "text")
17
+ .action(async (directory, opts) => {
18
+ const projectRoot = resolve(directory);
19
+ if (!existsSync(projectRoot)) {
20
+ console.error(chalk.red(`Directory not found: ${projectRoot}`));
21
+ process.exit(1);
22
+ }
23
+ const services = loadServiceProvider();
24
+ // Resolve domain
25
+ let domainId;
26
+ if (opts.domain) {
27
+ const domain = await services.domains.getBySlug(opts.domain);
28
+ if (!domain) {
29
+ console.error(chalk.red(`Domain not found: ${opts.domain}`));
30
+ process.exit(1);
31
+ }
32
+ domainId = domain.id;
33
+ }
34
+ const exclude = opts.exclude?.split(",").map((s) => s.trim()) ?? [];
35
+ // Detect language and analyze
36
+ const language = detectLanguage(projectRoot);
37
+ console.log(chalk.dim(`Detected: ${language}`));
38
+ let analyses;
39
+ try {
40
+ if (language === "typescript") {
41
+ analyses = analyzeTypeScriptProject(projectRoot, exclude);
42
+ }
43
+ else {
44
+ analyses = analyzePythonProject(projectRoot, exclude);
45
+ }
46
+ }
47
+ catch (err) {
48
+ console.error(chalk.red(`Analysis failed: ${err.message}`));
49
+ process.exit(1);
50
+ }
51
+ console.log(chalk.dim(`Found ${analyses.length} source files`));
52
+ if (analyses.length === 0) {
53
+ console.log(chalk.yellow("No source files found."));
54
+ process.exit(0);
55
+ }
56
+ // Dry run — just print the analysis
57
+ if (opts.dryRun) {
58
+ printDryRun(analyses, opts.format);
59
+ process.exit(0);
60
+ }
61
+ // Upload analysis results
62
+ const projectName = basename(projectRoot);
63
+ const result = await services.map.upload({
64
+ analyses,
65
+ projectName,
66
+ createdBy: opts.by,
67
+ domainId,
68
+ });
69
+ // Summary
70
+ if (opts.format === "json") {
71
+ console.log(JSON.stringify({
72
+ language,
73
+ projectRoot,
74
+ filesAnalyzed: analyses.length,
75
+ nodesCreated: result.nodesCreated,
76
+ nodesUpdated: result.nodesUpdated,
77
+ edgesCreated: result.edgesCreated,
78
+ }, null, 2));
79
+ }
80
+ else {
81
+ console.log();
82
+ console.log(chalk.green("✓ Project mapped"));
83
+ console.log(` Language: ${chalk.cyan(language)}`);
84
+ console.log(` Files: ${chalk.cyan(String(analyses.length))}`);
85
+ console.log(` Nodes: ${chalk.cyan(String(result.nodesCreated))} created, ${chalk.cyan(String(result.nodesUpdated))} updated`);
86
+ console.log(` Edges: ${chalk.cyan(String(result.edgesCreated))} import relationships`);
87
+ }
88
+ process.exit(0);
89
+ });
90
+ }
91
+ function detectLanguage(root) {
92
+ if (existsSync(resolve(root, "tsconfig.json")))
93
+ return "typescript";
94
+ if (existsSync(resolve(root, "setup.py")) || existsSync(resolve(root, "pyproject.toml")))
95
+ return "python";
96
+ // Fallback: check for .py or .ts files
97
+ if (existsSync(resolve(root, "requirements.txt")))
98
+ return "python";
99
+ return "typescript";
100
+ }
101
+ function printDryRun(analyses, format) {
102
+ if (format === "json") {
103
+ console.log(JSON.stringify(analyses, null, 2));
104
+ return;
105
+ }
106
+ console.log();
107
+ for (const file of analyses) {
108
+ console.log(chalk.bold(file.relativePath));
109
+ if (file.exports.length > 0) {
110
+ console.log(chalk.dim(" exports: ") +
111
+ file.exports.map((e) => `${e.kind} ${e.name}`).join(", "));
112
+ }
113
+ const internal = file.imports.filter((i) => i.resolvedPath);
114
+ if (internal.length > 0) {
115
+ console.log(chalk.dim(" imports: ") +
116
+ internal.map((i) => i.resolvedPath).join(", "));
117
+ }
118
+ }
119
+ const totalExports = analyses.reduce((n, a) => n + a.exports.length, 0);
120
+ const totalEdges = analyses.reduce((n, a) => n + a.imports.filter((i) => i.resolvedPath).length, 0);
121
+ console.log();
122
+ console.log(chalk.dim("Dry run summary:"));
123
+ console.log(` ${analyses.length} files → ${analyses.length} nodes`);
124
+ console.log(` ${totalExports} exports`);
125
+ console.log(` ${totalEdges} internal import edges`);
126
+ }
127
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/commands/map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function normalizeCommand(program: Command): void;
3
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/commands/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAiGhD"}
@@ -0,0 +1,67 @@
1
+ import chalk from "chalk";
2
+ import { loadConfig, getTenantDb, CleaningService, EdgeService, createEmbeddingProvider, } from "@apart-tech/intelligence-core";
3
+ import { resolveTenant } from "../utils.js";
4
+ export function normalizeCommand(program) {
5
+ program
6
+ .command("normalize")
7
+ .description("Analyze and normalize relationship types")
8
+ .option("-s, --min-similarity <n>", "Minimum similarity to suggest merge", "0.7")
9
+ .option("--apply <mapping>", 'Apply a rename: "old-type:new-type"')
10
+ .option("-f, --format <format>", "Output format: text, json", "text")
11
+ .action(async (opts) => {
12
+ const config = loadConfig();
13
+ const tenant = resolveTenant(config);
14
+ const db = getTenantDb(config.database.url, tenant);
15
+ const edgeService = new EdgeService(db);
16
+ // Apply mode: rename a relationship type
17
+ if (opts.apply) {
18
+ const [fromType, toType] = opts.apply.split(":");
19
+ if (!fromType || !toType) {
20
+ console.error(chalk.red('Invalid mapping format. Use "old-type:new-type"'));
21
+ process.exit(1);
22
+ }
23
+ const count = await edgeService.retypeMany(fromType, toType);
24
+ if (opts.format === "json") {
25
+ console.log(JSON.stringify({ fromType, toType, count }));
26
+ }
27
+ else {
28
+ if (count === 0) {
29
+ console.log(chalk.yellow(`No edges found with type "${fromType}".`));
30
+ }
31
+ else {
32
+ console.log(chalk.green(`✓ Renamed ${count} edge(s): "${fromType}" → "${toType}"`));
33
+ }
34
+ }
35
+ process.exit(0);
36
+ }
37
+ // Analysis mode: suggest normalizations
38
+ const cleaning = new CleaningService(db, tenant);
39
+ const embeddings = createEmbeddingProvider(config);
40
+ const report = await cleaning.analyzeRelationshipTypes(embeddings, {
41
+ minSimilarity: parseFloat(opts.minSimilarity),
42
+ });
43
+ if (opts.format === "json") {
44
+ console.log(JSON.stringify(report, null, 2));
45
+ process.exit(0);
46
+ }
47
+ // Show current vocabulary
48
+ console.log(chalk.bold.underline("\nRelationship Type Vocabulary\n"));
49
+ for (const t of report.allTypes) {
50
+ const bar = "█".repeat(Math.min(t.count, 40));
51
+ console.log(` ${chalk.cyan(t.relationshipType.padEnd(20))} ${String(t.count).padStart(4)} ${chalk.dim(bar)}`);
52
+ }
53
+ // Show suggestions
54
+ if (report.suggestions.length === 0) {
55
+ console.log(chalk.green("\nNo merge suggestions — vocabulary looks clean.\n"));
56
+ process.exit(0);
57
+ }
58
+ console.log(chalk.bold("\nSuggested merges:\n"));
59
+ for (const s of report.suggestions) {
60
+ const pct = (s.similarity * 100).toFixed(0);
61
+ console.log(` ${chalk.magenta(`${pct}%`)} similar: ${chalk.yellow(s.fromType)} (${s.fromCount}) → ${chalk.green(s.toType)} (${s.toCount})`);
62
+ }
63
+ console.log(chalk.dim('\nTo apply: tc normalize --apply "old-type:new-type"\n'));
64
+ process.exit(0);
65
+ });
66
+ }
67
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/commands/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function orphansCommand(program: Command): void;
3
+ //# sourceMappingURL=orphans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orphans.d.ts","sourceRoot":"","sources":["../../src/commands/orphans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QA4C9C"}
@@ -0,0 +1,36 @@
1
+ import chalk from "chalk";
2
+ import { loadConfig, getTenantDb, CleaningService } from "@apart-tech/intelligence-core";
3
+ import { resolveTenant } from "../utils.js";
4
+ export function orphansCommand(program) {
5
+ program
6
+ .command("orphans")
7
+ .description("Find nodes with no connections")
8
+ .option("-f, --format <format>", "Output format: text, json", "text")
9
+ .action(async (opts) => {
10
+ const config = loadConfig();
11
+ const tenant = resolveTenant(config);
12
+ const db = getTenantDb(config.database.url, tenant);
13
+ const cleaning = new CleaningService(db, tenant);
14
+ const orphans = await cleaning.findOrphans();
15
+ if (opts.format === "json") {
16
+ console.log(JSON.stringify(orphans, null, 2));
17
+ process.exit(0);
18
+ }
19
+ if (orphans.length === 0) {
20
+ console.log(chalk.green("No orphan nodes found. All nodes are connected."));
21
+ process.exit(0);
22
+ }
23
+ console.log(chalk.bold(`Found ${chalk.red(orphans.length)} orphan node(s):\n`));
24
+ for (const { node } of orphans) {
25
+ const statusColor = node.status === "approved" ? chalk.green : chalk.yellow;
26
+ const age = daysSince(node.createdAt);
27
+ console.log(` ${chalk.dim(node.id.slice(0, 8))} ${statusColor(`[${node.status}]`)} ${chalk.cyan(node.type)} ${node.title} ${chalk.dim(`${age}d ago`)}`);
28
+ }
29
+ console.log(chalk.dim("\nUse 'tc delete <id>' to remove or 'tc link <source> <target>' to connect.\n"));
30
+ process.exit(0);
31
+ });
32
+ }
33
+ function daysSince(date) {
34
+ return Math.floor((Date.now() - new Date(date).getTime()) / (1000 * 60 * 60 * 24));
35
+ }
36
+ //# sourceMappingURL=orphans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orphans.js","sourceRoot":"","sources":["../../src/commands/orphans.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE7C,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CACnE,CAAC;QAEF,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC;YAC/B,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;YAC1D,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAChJ,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,+EAA+E,CAChF,CACF,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,SAAS,CAAC,IAAU;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACrF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function searchCommand(program: Command): void;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,QA6C7C"}
@@ -0,0 +1,44 @@
1
+ import chalk from "chalk";
2
+ import { loadServiceProvider } from "../api-client/index.js";
3
+ export function searchCommand(program) {
4
+ program
5
+ .command("search")
6
+ .description("Search the knowledge graph")
7
+ .argument("<query>", "Search query")
8
+ .option("-l, --limit <n>", "Max results", "10")
9
+ .option("-t, --type <type>", "Filter by node type")
10
+ .option("--include-drafts", "Include draft nodes")
11
+ .option("-d, --domain <slug>", "Filter by domain slug")
12
+ .option("-f, --format <format>", "Output format: text, json", "text")
13
+ .action(async (query, opts) => {
14
+ const services = loadServiceProvider();
15
+ let domainIds;
16
+ if (opts.domain) {
17
+ domainIds = await services.domains.resolveSlugs([opts.domain]);
18
+ }
19
+ const results = await services.search.search({
20
+ query,
21
+ limit: parseInt(opts.limit),
22
+ types: opts.type ? [opts.type] : undefined,
23
+ includeDrafts: opts.includeDrafts,
24
+ domainIds,
25
+ });
26
+ if (opts.format === "json") {
27
+ console.log(JSON.stringify(results, null, 2));
28
+ }
29
+ else {
30
+ if (results.length === 0) {
31
+ console.log(chalk.yellow("No results found."));
32
+ }
33
+ else {
34
+ console.log(chalk.bold(`Found ${results.length} results:\n`));
35
+ for (const r of results) {
36
+ const statusColor = r.node.status === "approved" ? chalk.green : chalk.yellow;
37
+ console.log(` ${chalk.dim(r.node.id.slice(0, 8))} ${statusColor(`[${r.node.status}]`)} ${chalk.cyan(r.node.type)} ${r.node.title}`);
38
+ }
39
+ }
40
+ }
41
+ process.exit(0);
42
+ });
43
+ }
44
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,4BAA4B,CAAC;SACzC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;SACnC,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,IAAI,CAAC;SAC9C,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;SAClD,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;SACjD,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;SACtD,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,IAAI,EAAE,EAAE;QACpC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QAEvC,IAAI,SAA+B,CAAC;QACpC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;YAC3C,KAAK;YACL,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YAC1C,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,SAAS;SACV,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;gBAC9D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,MAAM,WAAW,GACf,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC5D,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAC3H,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function statusCommand(program: Command): void;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,QA0B7C"}
@@ -0,0 +1,25 @@
1
+ import chalk from "chalk";
2
+ import { loadServiceProvider } from "../api-client/index.js";
3
+ export function statusCommand(program) {
4
+ program
5
+ .command("status")
6
+ .description("Update a node's status")
7
+ .argument("<id>", "Node ID")
8
+ .argument("<status>", "New status: draft, reviewed, approved, archived")
9
+ .action(async (id, status) => {
10
+ const validStatuses = ["draft", "reviewed", "approved", "archived"];
11
+ if (!validStatuses.includes(status)) {
12
+ console.error(chalk.red(`Invalid status. Must be one of: ${validStatuses.join(", ")}`));
13
+ process.exit(1);
14
+ }
15
+ const services = loadServiceProvider();
16
+ const node = await services.nodes.setStatus(id, status);
17
+ if (!node) {
18
+ console.error(chalk.red(`Node not found: ${id}`));
19
+ process.exit(1);
20
+ }
21
+ console.log(chalk.green(`✓ ${node.title} → ${status}`));
22
+ process.exit(0);
23
+ });
24
+ }
25
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wBAAwB,CAAC;SACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;SAC3B,QAAQ,CAAC,UAAU,EAAE,iDAAiD,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,MAAc,EAAE,EAAE;QAC3C,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,mCAAmC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CACzE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QAEvC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,MAAoB,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function suggestLinksCommand(program: Command): void;
3
+ //# sourceMappingURL=suggest-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest-links.d.ts","sourceRoot":"","sources":["../../src/commands/suggest-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAkEnD"}
@@ -0,0 +1,44 @@
1
+ import chalk from "chalk";
2
+ import { loadConfig, getTenantDb, CleaningService } from "@apart-tech/intelligence-core";
3
+ import { resolveTenant } from "../utils.js";
4
+ export function suggestLinksCommand(program) {
5
+ program
6
+ .command("suggest-links")
7
+ .description("Suggest missing links based on embedding similarity")
8
+ .argument("[nodeId]", "Node ID to suggest links for (omit for global scan)")
9
+ .option("-s, --min-similarity <n>", "Minimum cosine similarity", "0.8")
10
+ .option("-l, --limit <n>", "Max suggestions", "10")
11
+ .option("-f, --format <format>", "Output format: text, json", "text")
12
+ .action(async (nodeId, opts) => {
13
+ const config = loadConfig();
14
+ const tenant = resolveTenant(config);
15
+ const db = getTenantDb(config.database.url, tenant);
16
+ const cleaning = new CleaningService(db, tenant);
17
+ const minSimilarity = parseFloat(opts.minSimilarity);
18
+ const limit = parseInt(opts.limit);
19
+ const suggestions = nodeId
20
+ ? await cleaning.suggestLinksForNode(nodeId, { limit, minSimilarity })
21
+ : await cleaning.suggestLinksGlobal({ limit, minSimilarity });
22
+ if (opts.format === "json") {
23
+ console.log(JSON.stringify(suggestions, null, 2));
24
+ process.exit(0);
25
+ }
26
+ if (suggestions.length === 0) {
27
+ console.log(chalk.green(`No link suggestions found above ${minSimilarity} similarity.`));
28
+ process.exit(0);
29
+ }
30
+ const label = nodeId
31
+ ? `Suggested links for ${chalk.cyan(nodeId.slice(0, 8))}`
32
+ : "Suggested links (global scan)";
33
+ console.log(chalk.bold(`\n${label} — ${suggestions.length} suggestion(s):\n`));
34
+ for (const { source, target, similarity } of suggestions) {
35
+ const pct = (similarity * 100).toFixed(1);
36
+ console.log(` ${chalk.magenta(`${pct}%`)} ${chalk.dim(source.id.slice(0, 8))} ${chalk.cyan(source.type)} ${source.title}`);
37
+ console.log(` → ${chalk.dim(target.id.slice(0, 8))} ${chalk.cyan(target.type)} ${target.title}`);
38
+ console.log();
39
+ }
40
+ console.log(chalk.dim("Use 'tc link <source-id> <target-id> -r relates-to' to create a link.\n"));
41
+ process.exit(0);
42
+ });
43
+ }
44
+ //# sourceMappingURL=suggest-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest-links.js","sourceRoot":"","sources":["../../src/commands/suggest-links.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function typesCommand(program: Command): void;
3
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,QA8B5C"}
@@ -0,0 +1,30 @@
1
+ import chalk from "chalk";
2
+ import { loadServiceProvider } from "../api-client/index.js";
3
+ export function typesCommand(program) {
4
+ program
5
+ .command("types")
6
+ .description("List all node types and relationship types in use")
7
+ .option("-f, --format <format>", "Output format: text, json", "text")
8
+ .action(async (opts) => {
9
+ const services = loadServiceProvider();
10
+ const [nodeTypes, edgeTypes] = await Promise.all([
11
+ services.nodes.listTypes(),
12
+ services.edges.listRelationshipTypes(),
13
+ ]);
14
+ if (opts.format === "json") {
15
+ console.log(JSON.stringify({ nodeTypes, edgeTypes }, null, 2));
16
+ }
17
+ else {
18
+ console.log(chalk.bold("Node types:"));
19
+ for (const t of nodeTypes) {
20
+ console.log(` ${chalk.cyan(t.type)} ${chalk.dim(`(${t.count})`)}`);
21
+ }
22
+ console.log(chalk.bold("\nRelationship types:"));
23
+ for (const t of edgeTypes) {
24
+ console.log(` ${chalk.cyan(t.relationshipType)} ${chalk.dim(`(${t.count})`)}`);
25
+ }
26
+ }
27
+ process.exit(0);
28
+ });
29
+ }
30
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QAEvC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/C,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE;YAC1B,QAAQ,CAAC,KAAK,CAAC,qBAAqB,EAAE;SACvC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACjD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CACpE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function updateCommand(program: Command): void;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,QAqD7C"}
@@ -0,0 +1,55 @@
1
+ import chalk from "chalk";
2
+ import { loadServiceProvider } from "../api-client/index.js";
3
+ export function updateCommand(program) {
4
+ program
5
+ .command("update")
6
+ .description("Update an existing node")
7
+ .argument("<id>", "Node ID")
8
+ .option("--title <title>", "New title")
9
+ .option("--content <content>", "New content")
10
+ .option("-t, --type <type>", "New node type")
11
+ .option("-m, --metadata <json>", "New JSON metadata (replaces existing)")
12
+ .option("-d, --domain <slug>", "New domain slug")
13
+ .option("-f, --format <format>", "Output format: text, json", "text")
14
+ .action(async (id, opts) => {
15
+ if (!opts.title && !opts.content && !opts.type && !opts.metadata && !opts.domain) {
16
+ console.error(chalk.red("Nothing to update. Provide at least one of: --title, --content, -t, -m, -d"));
17
+ process.exit(1);
18
+ }
19
+ const services = loadServiceProvider();
20
+ const input = {};
21
+ if (opts.title)
22
+ input.title = opts.title;
23
+ if (opts.content)
24
+ input.content = opts.content;
25
+ if (opts.type)
26
+ input.type = opts.type;
27
+ if (opts.metadata)
28
+ input.metadata = JSON.parse(opts.metadata);
29
+ if (opts.domain) {
30
+ const domain = await services.domains.getBySlug(opts.domain);
31
+ if (!domain) {
32
+ console.error(chalk.red(`Domain not found: ${opts.domain}`));
33
+ process.exit(1);
34
+ }
35
+ input.domainId = domain.id;
36
+ }
37
+ const node = await services.nodes.update(id, input);
38
+ if (!node) {
39
+ console.error(chalk.red(`Node not found: ${id}`));
40
+ process.exit(1);
41
+ }
42
+ if (opts.format === "json") {
43
+ console.log(JSON.stringify(node, null, 2));
44
+ }
45
+ else {
46
+ console.log(chalk.green("✓ Node updated"));
47
+ console.log(` ID: ${node.id}`);
48
+ console.log(` Title: ${node.title}`);
49
+ console.log(` Type: ${node.type}`);
50
+ console.log(` Version: ${node.version}`);
51
+ }
52
+ process.exit(0);
53
+ });
54
+ }
55
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function validateCommand(program: Command): void;
3
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,QAwH/C"}