@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,336 @@
1
+ import { writeFileSync, existsSync } from "fs";
2
+ import { join, resolve } from "path";
3
+ import { execSync } from "child_process";
4
+ import { randomBytes } from "crypto";
5
+ import chalk from "chalk";
6
+ import prompts from "prompts";
7
+ import { PrismaClient } from "@prisma/client";
8
+ import { withAccelerate } from "@prisma/extension-accelerate";
9
+ const LOGO = `
10
+ ╔══════════════════════════════════════╗
11
+ ║ ${chalk.bold("Apart Intelligence")} ║
12
+ ║ ${chalk.dim("the knowledge graph for your")} ║
13
+ ║ ${chalk.dim("company")} ║
14
+ ╚══════════════════════════════════════╝
15
+ `;
16
+ export function initCommand(program) {
17
+ program
18
+ .command("init")
19
+ .description("Set up Apart Intelligence in the current directory")
20
+ .action(async () => {
21
+ console.log(LOGO);
22
+ // Check if already initialized
23
+ const configPath = join(process.cwd(), ".apart.yaml");
24
+ if (existsSync(configPath)) {
25
+ const { overwrite } = await prompts({
26
+ type: "confirm",
27
+ name: "overwrite",
28
+ message: "An .apart.yaml already exists. Overwrite?",
29
+ initial: false,
30
+ });
31
+ if (!overwrite) {
32
+ console.log(chalk.dim("Aborted."));
33
+ process.exit(0);
34
+ }
35
+ }
36
+ // ── Step 1: Database ────────────────────────────────────────────
37
+ console.log(chalk.bold("\n1. Database\n"));
38
+ const { dbChoice } = await prompts({
39
+ type: "select",
40
+ name: "dbChoice",
41
+ message: "How would you like to connect to a database?",
42
+ choices: [
43
+ {
44
+ title: "Bring your own PostgreSQL",
45
+ description: "Connect to an existing PostgreSQL instance with pgvector",
46
+ value: "byod",
47
+ },
48
+ {
49
+ title: "Prisma Postgres (cloud)",
50
+ description: "Use a Prisma Postgres connection string",
51
+ value: "prisma",
52
+ },
53
+ ],
54
+ });
55
+ if (dbChoice === undefined)
56
+ abort();
57
+ let databaseUrl;
58
+ if (dbChoice === "prisma") {
59
+ const { url } = await prompts({
60
+ type: "text",
61
+ name: "url",
62
+ message: "Prisma Postgres connection string:",
63
+ validate: (v) => v.startsWith("prisma+postgres://") || v.startsWith("prisma://")
64
+ ? true
65
+ : "Must start with prisma+postgres:// or prisma://",
66
+ });
67
+ if (!url)
68
+ abort();
69
+ databaseUrl = url;
70
+ }
71
+ else {
72
+ const { url } = await prompts({
73
+ type: "text",
74
+ name: "url",
75
+ message: "PostgreSQL connection string:",
76
+ initial: "postgresql://localhost:5432/apart",
77
+ validate: (v) => v.startsWith("postgresql://") || v.startsWith("postgres://")
78
+ ? true
79
+ : "Must start with postgresql:// or postgres://",
80
+ });
81
+ if (!url)
82
+ abort();
83
+ databaseUrl = url;
84
+ }
85
+ // ── Step 2: Test connection & set up schema ─────────────────────
86
+ console.log(chalk.dim("\nTesting database connection..."));
87
+ let db;
88
+ try {
89
+ if (databaseUrl.startsWith("prisma+postgres://") || databaseUrl.startsWith("prisma://")) {
90
+ process.env.DATABASE_URL = databaseUrl;
91
+ db = new PrismaClient().$extends(withAccelerate());
92
+ }
93
+ else {
94
+ db = new PrismaClient({ datasourceUrl: databaseUrl });
95
+ }
96
+ await db.$connect();
97
+ console.log(chalk.green(" ✓ Connected"));
98
+ }
99
+ catch (err) {
100
+ console.error(chalk.red(` ✗ Connection failed: ${err.message}`));
101
+ console.log(chalk.dim(" Check your connection string and try again."));
102
+ process.exit(1);
103
+ }
104
+ // Push schema
105
+ console.log(chalk.dim("Setting up database schema..."));
106
+ try {
107
+ const prismaSchemaDir = findPrismaSchema();
108
+ execSync(`npx prisma db push --skip-generate --accept-data-loss`, {
109
+ cwd: prismaSchemaDir,
110
+ stdio: "pipe",
111
+ env: { ...process.env, DATABASE_URL: databaseUrl },
112
+ });
113
+ console.log(chalk.green(" ✓ Schema synced"));
114
+ }
115
+ catch (err) {
116
+ if (err.stderr?.toString().includes('type "vector" does not exist')) {
117
+ console.log(chalk.dim(" Enabling pgvector extension..."));
118
+ try {
119
+ const prismaSchemaDir = findPrismaSchema();
120
+ execSync(`echo "CREATE EXTENSION IF NOT EXISTS vector;" | npx prisma db execute --schema prisma/schema.prisma --stdin`, {
121
+ cwd: prismaSchemaDir,
122
+ stdio: "pipe",
123
+ env: { ...process.env, DATABASE_URL: databaseUrl },
124
+ });
125
+ execSync(`npx prisma db push --skip-generate --accept-data-loss`, {
126
+ cwd: prismaSchemaDir,
127
+ stdio: "pipe",
128
+ env: { ...process.env, DATABASE_URL: databaseUrl },
129
+ });
130
+ console.log(chalk.green(" ✓ pgvector enabled & schema synced"));
131
+ }
132
+ catch (innerErr) {
133
+ console.error(chalk.red(` ✗ Schema push failed: ${innerErr.message}`));
134
+ console.log(chalk.dim(" You may need to manually enable pgvector: CREATE EXTENSION IF NOT EXISTS vector;"));
135
+ process.exit(1);
136
+ }
137
+ }
138
+ else {
139
+ console.error(chalk.red(` ✗ Schema push failed`));
140
+ console.log(chalk.dim(err.stderr?.toString().slice(0, 300) ?? err.message));
141
+ process.exit(1);
142
+ }
143
+ }
144
+ // ── Step 3: Organization ────────────────────────────────────────
145
+ console.log(chalk.bold("\n2. Organization\n"));
146
+ const { orgName } = await prompts({
147
+ type: "text",
148
+ name: "orgName",
149
+ message: "Organization name:",
150
+ initial: "My Company",
151
+ });
152
+ if (!orgName)
153
+ abort();
154
+ const orgSlug = orgName
155
+ .toLowerCase()
156
+ .replace(/[^a-z0-9]+/g, "-")
157
+ .replace(/^-|-$/g, "");
158
+ // Reconnect with fresh client after schema push
159
+ if (databaseUrl.startsWith("prisma+postgres://") || databaseUrl.startsWith("prisma://")) {
160
+ process.env.DATABASE_URL = databaseUrl;
161
+ db = new PrismaClient().$extends(withAccelerate());
162
+ }
163
+ else {
164
+ db = new PrismaClient({ datasourceUrl: databaseUrl });
165
+ }
166
+ let org;
167
+ try {
168
+ org = await db.organization.findFirst({ where: { slug: orgSlug } });
169
+ if (org) {
170
+ console.log(chalk.yellow(` Organization "${orgName}" already exists (${org.id})`));
171
+ }
172
+ else {
173
+ org = await db.organization.create({
174
+ data: { name: orgName, slug: orgSlug },
175
+ });
176
+ console.log(chalk.green(` ✓ Organization created: ${org.id}`));
177
+ }
178
+ }
179
+ catch (err) {
180
+ console.error(chalk.red(` ✗ Failed to create organization: ${err.message}`));
181
+ process.exit(1);
182
+ }
183
+ // ── Step 4: API Key ─────────────────────────────────────────────
184
+ console.log(chalk.bold("\n3. API Key\n"));
185
+ const { createApiKey } = await prompts({
186
+ type: "confirm",
187
+ name: "createApiKey",
188
+ message: "Generate an API key for this organization?",
189
+ initial: true,
190
+ });
191
+ let apiKeyValue = null;
192
+ if (createApiKey) {
193
+ apiKeyValue = `apart_${randomBytes(24).toString("hex")}`;
194
+ const { createHash } = await import("crypto");
195
+ const keyHash = createHash("sha256").update(apiKeyValue).digest("hex");
196
+ try {
197
+ await db.apiKey.create({
198
+ data: {
199
+ name: `${orgName} — CLI`,
200
+ keyHash,
201
+ createdBy: "ai-init",
202
+ organizationId: org.id,
203
+ },
204
+ });
205
+ console.log(chalk.green(" ✓ API key created"));
206
+ console.log(chalk.bold(`\n ${apiKeyValue}\n`));
207
+ console.log(chalk.yellow(" Save this key — it won't be shown again."));
208
+ }
209
+ catch (err) {
210
+ console.error(chalk.red(` ✗ Failed to create API key: ${err.message}`));
211
+ }
212
+ }
213
+ // ── Step 5: Embeddings ──────────────────────────────────────────
214
+ console.log(chalk.bold("\n4. Embeddings\n"));
215
+ const { openaiKey } = await prompts({
216
+ type: "password",
217
+ name: "openaiKey",
218
+ message: "OpenAI API key (for embeddings):",
219
+ validate: (v) => v.startsWith("sk-") ? true : "Must start with sk-",
220
+ });
221
+ if (!openaiKey)
222
+ abort();
223
+ // ── Step 6: Seed domains ────────────────────────────────────────
224
+ console.log(chalk.bold("\n5. Knowledge Domains\n"));
225
+ const { seedDomains } = await prompts({
226
+ type: "confirm",
227
+ name: "seedDomains",
228
+ message: "Seed default domain taxonomy (strategy, people, products, etc.)?",
229
+ initial: true,
230
+ });
231
+ if (seedDomains) {
232
+ try {
233
+ const { DomainService, getTenantDb } = await import("@apart-tech/intelligence-core");
234
+ const tenantDb = getTenantDb(databaseUrl, { organizationId: org.id });
235
+ const domainService = new DomainService(tenantDb, { organizationId: org.id });
236
+ const result = await domainService.seed();
237
+ console.log(chalk.green(` ✓ ${result.created} domains seeded`));
238
+ }
239
+ catch (err) {
240
+ console.error(chalk.red(` ✗ Domain seeding failed: ${err.message}`));
241
+ }
242
+ }
243
+ // ── Step 7: Write config files ──────────────────────────────────
244
+ console.log(chalk.bold("\n6. Writing config files\n"));
245
+ // .apart.yaml
246
+ const yamlContent = [
247
+ "# Apart Intelligence configuration",
248
+ "# Docs: https://github.com/aleksander-apart/the-collective",
249
+ "",
250
+ "embeddings:",
251
+ " provider: openai",
252
+ " model: text-embedding-3-small",
253
+ " dimensions: 1536",
254
+ "",
255
+ "search:",
256
+ " semanticWeight: 0.6",
257
+ " defaultLimit: 10",
258
+ " includeDrafts: false",
259
+ "",
260
+ "context:",
261
+ " maxDepth: 1",
262
+ " maxNodes: 20",
263
+ " minRelevance: 0.001",
264
+ "",
265
+ "mcp:",
266
+ " port: 3100",
267
+ " auth: none",
268
+ "",
269
+ ].join("\n");
270
+ writeFileSync(configPath, yamlContent, "utf-8");
271
+ console.log(chalk.green(" ✓ .apart.yaml"));
272
+ // .env
273
+ const envPath = join(process.cwd(), ".env");
274
+ const envContent = [
275
+ `# Apart Intelligence — generated by ai init`,
276
+ `APART_DATABASE_URL=${databaseUrl}`,
277
+ `OPENAI_API_KEY=${openaiKey}`,
278
+ apiKeyValue ? `APART_API_KEY=${apiKeyValue}` : `# APART_API_KEY=`,
279
+ `APART_ORG_ID=${org.id}`,
280
+ "",
281
+ ].join("\n");
282
+ if (existsSync(envPath)) {
283
+ const { overwriteEnv } = await prompts({
284
+ type: "confirm",
285
+ name: "overwriteEnv",
286
+ message: ".env already exists. Overwrite?",
287
+ initial: false,
288
+ });
289
+ if (overwriteEnv) {
290
+ writeFileSync(envPath, envContent, "utf-8");
291
+ console.log(chalk.green(" ✓ .env (overwritten)"));
292
+ }
293
+ else {
294
+ const altPath = join(process.cwd(), ".env.apart");
295
+ writeFileSync(altPath, envContent, "utf-8");
296
+ console.log(chalk.green(` ✓ .env.apart (merge manually into .env)`));
297
+ }
298
+ }
299
+ else {
300
+ writeFileSync(envPath, envContent, "utf-8");
301
+ console.log(chalk.green(" ✓ .env"));
302
+ }
303
+ // ── Done ────────────────────────────────────────────────────────
304
+ console.log(chalk.bold("\n✓ Setup complete!\n"));
305
+ console.log(" Get started:");
306
+ console.log(chalk.cyan(" ai add --type note --title 'My first note' 'Hello from Apart Intelligence!'"));
307
+ console.log(chalk.cyan(" ai search 'hello'"));
308
+ console.log(chalk.cyan(" ai map . # map a codebase"));
309
+ console.log(chalk.cyan(" ai graph # visualize the graph"));
310
+ console.log();
311
+ await db.$disconnect();
312
+ process.exit(0);
313
+ });
314
+ }
315
+ function abort() {
316
+ console.log(chalk.dim("\nAborted."));
317
+ process.exit(0);
318
+ }
319
+ function findPrismaSchema() {
320
+ const candidates = [
321
+ join(process.cwd(), "packages", "core"),
322
+ join(process.cwd(), "node_modules", "@apart-tech", "intelligence-core"),
323
+ resolve(new URL(".", import.meta.url).pathname, "..", "..", ".."),
324
+ ];
325
+ for (const dir of candidates) {
326
+ if (existsSync(join(dir, "prisma", "schema.prisma"))) {
327
+ return dir;
328
+ }
329
+ }
330
+ const pkgDir = resolve(new URL(".", import.meta.url).pathname, "..", "..", "..", "..", "core");
331
+ if (existsSync(join(pkgDir, "prisma", "schema.prisma"))) {
332
+ return pkgDir;
333
+ }
334
+ throw new Error("Could not find Prisma schema. Make sure @apart-tech/intelligence-core is installed.");
335
+ }
336
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function islandsCommand(program: Command): void;
3
+ //# sourceMappingURL=islands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../../src/commands/islands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QA4F9C"}
@@ -0,0 +1,70 @@
1
+ import chalk from "chalk";
2
+ import { loadConfig, getTenantDb, CleaningService } from "@apart-tech/intelligence-core";
3
+ import { resolveTenant } from "../utils.js";
4
+ export function islandsCommand(program) {
5
+ program
6
+ .command("islands")
7
+ .description("Detect disconnected clusters in the graph")
8
+ .option("--bridges", "Suggest links to bridge islands")
9
+ .option("--max-bridges <n>", "Max bridge suggestions", "10")
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 cleaning = new CleaningService(db, tenant);
16
+ const islands = await cleaning.findIslands();
17
+ if (opts.format === "json") {
18
+ if (opts.bridges) {
19
+ const bridges = await cleaning.suggestBridges(parseInt(opts.maxBridges));
20
+ console.log(JSON.stringify({ islands, bridges }, null, 2));
21
+ }
22
+ else {
23
+ console.log(JSON.stringify(islands, null, 2));
24
+ }
25
+ process.exit(0);
26
+ }
27
+ if (islands.length === 0) {
28
+ console.log(chalk.green("No disconnected clusters found."));
29
+ process.exit(0);
30
+ }
31
+ console.log(chalk.bold(`\nFound ${chalk.cyan(islands.length)} connected component(s):\n`));
32
+ for (const island of islands) {
33
+ const label = island.id === 1
34
+ ? chalk.green(" (main)")
35
+ : island.size <= 3
36
+ ? chalk.yellow(" (small)")
37
+ : "";
38
+ console.log(chalk.bold(` Component #${island.id}${label} — ${island.size} nodes`));
39
+ const preview = island.nodes.slice(0, 5);
40
+ for (const node of preview) {
41
+ console.log(` ${chalk.dim(node.id.slice(0, 8))} ${chalk.cyan(node.type)} ${node.title}`);
42
+ }
43
+ if (island.nodes.length > 5) {
44
+ console.log(chalk.dim(` ... and ${island.nodes.length - 5} more`));
45
+ }
46
+ console.log();
47
+ }
48
+ if (opts.bridges) {
49
+ const bridges = await cleaning.suggestBridges(parseInt(opts.maxBridges));
50
+ if (bridges.length === 0) {
51
+ console.log(chalk.dim("No bridge suggestions found.\n"));
52
+ }
53
+ else {
54
+ console.log(chalk.bold("Suggested bridges between islands:\n"));
55
+ for (const bridge of bridges) {
56
+ const pct = (bridge.suggestion.similarity * 100).toFixed(1);
57
+ console.log(` ${chalk.magenta(`${pct}%`)} #${bridge.from.id} (${bridge.from.size} nodes) ↔ #${bridge.to.id} (${bridge.to.size} nodes)`);
58
+ console.log(` ${chalk.dim(bridge.suggestion.source.id.slice(0, 8))} ${bridge.suggestion.source.title}`);
59
+ console.log(` ${chalk.dim(bridge.suggestion.target.id.slice(0, 8))} ${bridge.suggestion.target.title}`);
60
+ console.log();
61
+ }
62
+ }
63
+ }
64
+ else {
65
+ console.log(chalk.dim("Use --bridges to suggest links between islands.\n"));
66
+ }
67
+ process.exit(0);
68
+ });
69
+ }
70
+ //# sourceMappingURL=islands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islands.js","sourceRoot":"","sources":["../../src/commands/islands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function linkCommand(program: Command): void;
3
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,QA4C3C"}
@@ -0,0 +1,40 @@
1
+ import chalk from "chalk";
2
+ import { loadServiceProvider } from "../api-client/index.js";
3
+ export function linkCommand(program) {
4
+ program
5
+ .command("link")
6
+ .description("Link two nodes with a relationship")
7
+ .argument("<source>", "Source node ID")
8
+ .argument("<target>", "Target node ID")
9
+ .option("-r, --rel <type>", "Relationship type", "relates-to")
10
+ .option("-w, --weight <n>", "Edge weight", "1.0")
11
+ .option("--by <creator>", "Creator identifier", "cli")
12
+ .option("-f, --format <format>", "Output format: text, json", "text")
13
+ .action(async (source, target, opts) => {
14
+ const services = loadServiceProvider();
15
+ // Check if this is a new relationship type and hint existing ones
16
+ const existingTypes = await services.edges.listRelationshipTypes();
17
+ const typeNames = existingTypes.map((t) => t.relationshipType);
18
+ const isNew = !typeNames.includes(opts.rel);
19
+ const edge = await services.edges.create({
20
+ sourceNodeId: source,
21
+ targetNodeId: target,
22
+ relationshipType: opts.rel,
23
+ weight: parseFloat(opts.weight),
24
+ createdBy: opts.by,
25
+ });
26
+ if (opts.format === "json") {
27
+ console.log(JSON.stringify(edge, null, 2));
28
+ }
29
+ else {
30
+ console.log(chalk.green("✓ Edge created"));
31
+ console.log(` ${source.slice(0, 8)} —[${opts.rel}]→ ${target.slice(0, 8)}`);
32
+ if (isNew) {
33
+ console.log(chalk.yellow(`\n Note: "${opts.rel}" is a new relationship type.`));
34
+ console.log(chalk.dim(` Existing types: ${typeNames.sort().join(", ")}`));
35
+ }
36
+ }
37
+ process.exit(0);
38
+ });
39
+ }
40
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oCAAoC,CAAC;SACjD,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;SACtC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;SACtC,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,YAAY,CAAC;SAC7D,MAAM,CAAC,kBAAkB,EAAE,aAAa,EAAE,KAAK,CAAC;SAChD,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,KAAK,CAAC;SACrD,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,MAAc,EAAE,IAAI,EAAE,EAAE;QACrD,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QAEvC,kEAAkE;QAClE,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC;QACnE,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YACvC,YAAY,EAAE,MAAM;YACpB,YAAY,EAAE,MAAM;YACpB,gBAAgB,EAAE,IAAI,CAAC,GAAG;YAC1B,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,SAAS,EAAE,IAAI,CAAC,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAE7E,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,GAAG,+BAA+B,CAAC,CACpE,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,qBAAqB,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAC9D,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 loginCommand(program: Command): void;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,QAiF5C"}
@@ -0,0 +1,72 @@
1
+ import chalk from "chalk";
2
+ import prompts from "prompts";
3
+ import { saveCredentials, loadCredentials } from "../api-client/index.js";
4
+ export function loginCommand(program) {
5
+ program
6
+ .command("login")
7
+ .description("Log in to an Apart Intelligence server")
8
+ .option("-s, --server <url>", "Server URL")
9
+ .option("-k, --key <key>", "API key")
10
+ .action(async (opts) => {
11
+ const existing = loadCredentials();
12
+ let server = opts.server;
13
+ let apiKey = opts.key;
14
+ if (!server) {
15
+ const res = await prompts({
16
+ type: "text",
17
+ name: "server",
18
+ message: "Server URL",
19
+ initial: existing?.server ?? "http://localhost:3200",
20
+ });
21
+ server = res.server;
22
+ if (!server)
23
+ process.exit(1);
24
+ }
25
+ if (!apiKey) {
26
+ const res = await prompts({
27
+ type: "password",
28
+ name: "apiKey",
29
+ message: "API key",
30
+ });
31
+ apiKey = res.apiKey;
32
+ if (!apiKey)
33
+ process.exit(1);
34
+ }
35
+ // Validate by hitting the health endpoint
36
+ try {
37
+ const healthRes = await fetch(`${server.replace(/\/$/, "")}/api/health`);
38
+ if (!healthRes.ok) {
39
+ console.error(chalk.red(`Server not reachable: ${server}`));
40
+ process.exit(1);
41
+ }
42
+ }
43
+ catch (err) {
44
+ const message = err instanceof Error ? err.message : String(err);
45
+ console.error(chalk.red(`Cannot connect to server: ${message}`));
46
+ process.exit(1);
47
+ }
48
+ // Validate the API key by hitting an authed endpoint
49
+ try {
50
+ const authRes = await fetch(`${server.replace(/\/$/, "")}/api/nodes/types`, {
51
+ headers: { Authorization: `Bearer ${apiKey}` },
52
+ });
53
+ if (authRes.status === 401) {
54
+ console.error(chalk.red("Invalid API key"));
55
+ process.exit(1);
56
+ }
57
+ if (!authRes.ok) {
58
+ console.error(chalk.red(`Auth check failed: HTTP ${authRes.status}`));
59
+ process.exit(1);
60
+ }
61
+ }
62
+ catch (err) {
63
+ const message = err instanceof Error ? err.message : String(err);
64
+ console.error(chalk.red(`Auth check failed: ${message}`));
65
+ process.exit(1);
66
+ }
67
+ saveCredentials({ server: server.replace(/\/$/, ""), apiKey });
68
+ console.log(chalk.green("Logged in to " + server));
69
+ process.exit(0);
70
+ });
71
+ }
72
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function logoutCommand(program: Command): void;
3
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,QAa7C"}
@@ -0,0 +1,18 @@
1
+ import chalk from "chalk";
2
+ import { deleteCredentials } from "../api-client/index.js";
3
+ export function logoutCommand(program) {
4
+ program
5
+ .command("logout")
6
+ .description("Log out from the Apart Intelligence server")
7
+ .action(async () => {
8
+ const deleted = deleteCredentials();
9
+ if (deleted) {
10
+ console.log(chalk.green("Logged out"));
11
+ }
12
+ else {
13
+ console.log(chalk.yellow("Not logged in"));
14
+ }
15
+ process.exit(0);
16
+ });
17
+ }
18
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,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 mapCommand(program: Command): void;
3
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/commands/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,QA6F1C"}