@kb-labs/mind-entry 2.94.0 → 2.98.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 (98) hide show
  1. package/README.md +19 -208
  2. package/dist/cli/commands/ask.d.ts +31 -0
  3. package/dist/cli/commands/ask.js +88 -0
  4. package/dist/cli/commands/ask.js.map +1 -0
  5. package/dist/cli/commands/drop.d.ts +10 -0
  6. package/dist/cli/commands/drop.js +90 -0
  7. package/dist/cli/commands/drop.js.map +1 -0
  8. package/dist/cli/commands/explore.d.ts +26 -0
  9. package/dist/cli/commands/explore.js +96 -0
  10. package/dist/cli/commands/explore.js.map +1 -0
  11. package/dist/cli/commands/index.d.ts +11 -0
  12. package/dist/cli/commands/index.js +96 -0
  13. package/dist/cli/commands/index.js.map +1 -0
  14. package/dist/cli/commands/reindex.d.ts +11 -0
  15. package/dist/cli/commands/reindex.js +71 -0
  16. package/dist/cli/commands/reindex.js.map +1 -0
  17. package/dist/cli/commands/search.d.ts +25 -0
  18. package/dist/cli/commands/search.js +94 -0
  19. package/dist/cli/commands/search.js.map +1 -0
  20. package/dist/cli/commands/status.d.ts +17 -0
  21. package/dist/cli/commands/status.js +89 -0
  22. package/dist/cli/commands/status.js.map +1 -0
  23. package/dist/cli/commands/sync-add.d.ts +11 -0
  24. package/dist/cli/commands/sync-add.js +74 -0
  25. package/dist/cli/commands/sync-add.js.map +1 -0
  26. package/dist/cli/commands/sync-delete.d.ts +11 -0
  27. package/dist/cli/commands/sync-delete.js +90 -0
  28. package/dist/cli/commands/sync-delete.js.map +1 -0
  29. package/dist/cli/commands/sync-list.d.ts +13 -0
  30. package/dist/cli/commands/sync-list.js +80 -0
  31. package/dist/cli/commands/sync-list.js.map +1 -0
  32. package/dist/cli/commands/sync-status.d.ts +8 -0
  33. package/dist/cli/commands/sync-status.js +71 -0
  34. package/dist/cli/commands/sync-status.js.map +1 -0
  35. package/dist/cli/commands/sync-update.d.ts +11 -0
  36. package/dist/cli/commands/sync-update.js +74 -0
  37. package/dist/cli/commands/sync-update.js.map +1 -0
  38. package/dist/index.d.ts +2 -596
  39. package/dist/index.js +208 -1449
  40. package/dist/index.js.map +1 -1
  41. package/dist/manifest.d.ts +206 -0
  42. package/dist/manifest.js +261 -0
  43. package/dist/manifest.js.map +1 -0
  44. package/dist/rest/handlers/drop.d.ts +12 -0
  45. package/dist/rest/handlers/drop.js +59 -0
  46. package/dist/rest/handlers/drop.js.map +1 -0
  47. package/dist/rest/handlers/explore.d.ts +30 -0
  48. package/dist/rest/handlers/explore.js +59 -0
  49. package/dist/rest/handlers/explore.js.map +1 -0
  50. package/dist/rest/handlers/health.d.ts +11 -0
  51. package/dist/rest/handlers/health.js +58 -0
  52. package/dist/rest/handlers/health.js.map +1 -0
  53. package/dist/rest/handlers/index.d.ts +15 -0
  54. package/dist/rest/handlers/index.js +59 -0
  55. package/dist/rest/handlers/index.js.map +1 -0
  56. package/dist/rest/handlers/query.d.ts +36 -0
  57. package/dist/rest/handlers/query.js +59 -0
  58. package/dist/rest/handlers/query.js.map +1 -0
  59. package/dist/rest/handlers/reindex.d.ts +14 -0
  60. package/dist/rest/handlers/reindex.js +59 -0
  61. package/dist/rest/handlers/reindex.js.map +1 -0
  62. package/dist/rest/handlers/search.d.ts +31 -0
  63. package/dist/rest/handlers/search.js +59 -0
  64. package/dist/rest/handlers/search.js.map +1 -0
  65. package/dist/rest/handlers/status.d.ts +19 -0
  66. package/dist/rest/handlers/status.js +58 -0
  67. package/dist/rest/handlers/status.js.map +1 -0
  68. package/dist/rest/handlers/sync-add.d.ts +14 -0
  69. package/dist/rest/handlers/sync-add.js +59 -0
  70. package/dist/rest/handlers/sync-add.js.map +1 -0
  71. package/dist/rest/handlers/sync-delete.d.ts +14 -0
  72. package/dist/rest/handlers/sync-delete.js +59 -0
  73. package/dist/rest/handlers/sync-delete.js.map +1 -0
  74. package/dist/rest/handlers/sync-list.d.ts +15 -0
  75. package/dist/rest/handlers/sync-list.js +58 -0
  76. package/dist/rest/handlers/sync-list.js.map +1 -0
  77. package/dist/rest/handlers/sync-status.d.ts +14 -0
  78. package/dist/rest/handlers/sync-status.js +58 -0
  79. package/dist/rest/handlers/sync-status.js.map +1 -0
  80. package/dist/rest/handlers/sync-update.d.ts +14 -0
  81. package/dist/rest/handlers/sync-update.js +59 -0
  82. package/dist/rest/handlers/sync-update.js.map +1 -0
  83. package/package.json +16 -20
  84. package/dist/cli/commands/init.d.ts +0 -24
  85. package/dist/cli/commands/init.js +0 -115
  86. package/dist/cli/commands/init.js.map +0 -1
  87. package/dist/cli/commands/rag-index.d.ts +0 -20
  88. package/dist/cli/commands/rag-index.js +0 -364
  89. package/dist/cli/commands/rag-index.js.map +0 -1
  90. package/dist/cli/commands/rag-query.d.ts +0 -25
  91. package/dist/cli/commands/rag-query.js +0 -670
  92. package/dist/cli/commands/rag-query.js.map +0 -1
  93. package/dist/cli/commands/verify.d.ts +0 -15
  94. package/dist/cli/commands/verify.js +0 -92
  95. package/dist/cli/commands/verify.js.map +0 -1
  96. package/dist/manifest.v3.d.ts +0 -52
  97. package/dist/manifest.v3.js +0 -182
  98. package/dist/manifest.v3.js.map +0 -1
@@ -0,0 +1,96 @@
1
+ import { defineCommand, useLoader, handleError, useVectorStore, useEmbeddings, useStorage, useCache, useLLM, useLogger, useConfig } from '@kb-labs/sdk';
2
+ import { createMind } from '@kb-labs/mind-core';
3
+ import { resolveMindConfig } from '@kb-labs/mind-contracts';
4
+
5
+ // src/cli/commands/index.ts
6
+ function buildServices() {
7
+ const vectorStore = useVectorStore();
8
+ const embeddings = useEmbeddings();
9
+ const storage = useStorage();
10
+ const cache = useCache();
11
+ const llm = useLLM();
12
+ const logger = useLogger();
13
+ const missing = [];
14
+ if (!vectorStore) {
15
+ missing.push("vectorStore");
16
+ }
17
+ if (!embeddings) {
18
+ missing.push("embeddings");
19
+ }
20
+ if (!storage) {
21
+ missing.push("storage");
22
+ }
23
+ if (!cache) {
24
+ missing.push("cache");
25
+ }
26
+ if (!llm) {
27
+ missing.push("llm");
28
+ }
29
+ if (missing.length > 0) {
30
+ throw new Error(
31
+ `mind: required platform adapters not configured: ${missing.join(", ")}. Configure them in .kb/kb.config.json under "adapters".`
32
+ );
33
+ }
34
+ return { vectorStore, embeddings, storage, cache, llm, logger };
35
+ }
36
+ async function loadConfig() {
37
+ const raw = await useConfig();
38
+ return resolveMindConfig(raw ?? {});
39
+ }
40
+ async function buildMind(cwd) {
41
+ return createMind(buildServices(), await loadConfig(), { cwd: cwd ?? process.cwd() });
42
+ }
43
+
44
+ // src/cli/commands/index.ts
45
+ function stageText(e) {
46
+ switch (e.stage) {
47
+ case "discover":
48
+ return `Discovered ${e.files} file(s)`;
49
+ case "delta":
50
+ return `Delta: ${e.toIndex} to (re)index \xB7 ${e.unchanged} unchanged \xB7 ${e.removed} removed`;
51
+ case "chunk":
52
+ return `Chunked \u2192 ${e.chunks} chunk(s)`;
53
+ case "embed":
54
+ return `Embedding ${e.done}/${e.total} chunk(s)`;
55
+ case "upsert":
56
+ return `Upserting ${e.count} vector(s)`;
57
+ case "save":
58
+ return "Saving index manifest";
59
+ }
60
+ }
61
+ var commands_default = defineCommand({
62
+ id: "mind:index",
63
+ description: "Build or refresh a Mind index from source files",
64
+ handler: {
65
+ async execute(ctx, input) {
66
+ const { flags } = input;
67
+ try {
68
+ const mind = await buildMind(flags.root ?? ctx.cwd);
69
+ const loader = flags.json ? void 0 : useLoader(`Indexing "${flags.index ?? "default"}"\u2026`);
70
+ loader?.start();
71
+ const res = await mind.index(
72
+ { indexId: flags.index, scope: flags.scope, full: flags.full },
73
+ flags.json ? void 0 : (e) => loader?.update({ text: stageText(e) })
74
+ );
75
+ if (flags.json) {
76
+ ctx.ui?.json?.(res);
77
+ return { exitCode: 0, result: res };
78
+ }
79
+ const summary = `Indexed ${res.filesIndexed} file(s), ${res.chunks} chunk(s) into "${res.indexId}" (${res.durationMs}ms)`;
80
+ if (loader) {
81
+ loader.succeed(summary);
82
+ } else {
83
+ ctx.ui?.success?.(summary);
84
+ }
85
+ return { exitCode: 0, result: res };
86
+ } catch (err) {
87
+ handleError(ctx, err, flags.json);
88
+ return { exitCode: 1 };
89
+ }
90
+ }
91
+ }
92
+ });
93
+
94
+ export { commands_default as default };
95
+ //# sourceMappingURL=index.js.map
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform.ts","../../../src/cli/commands/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The single place the plugin touches platform hooks.\n *\n * Assembles `MindServices` from `@kb-labs/sdk` hooks and resolves the plugin\n * config. CLI commands and REST handlers both call `buildMind(...)` so they\n * drive the exact same engine.\n */\n\nimport {\n useVectorStore,\n useEmbeddings,\n useStorage,\n useCache,\n useLLM,\n useLogger,\n useConfig,\n} from '@kb-labs/sdk';\nimport { createMind, type Mind, type MindServices } from '@kb-labs/mind-core';\nimport { resolveMindConfig, type MindConfigInput } from '@kb-labs/mind-contracts';\n\n/** Build MindServices from platform hooks, failing fast on missing required adapters. */\nexport function buildServices(): MindServices {\n const vectorStore = useVectorStore();\n const embeddings = useEmbeddings();\n const storage = useStorage();\n const cache = useCache();\n const llm = useLLM();\n const logger = useLogger();\n\n const missing: string[] = [];\n if (!vectorStore) {\n missing.push('vectorStore');\n }\n if (!embeddings) {\n missing.push('embeddings');\n }\n if (!storage) {\n missing.push('storage');\n }\n if (!cache) {\n missing.push('cache');\n }\n if (!llm) {\n missing.push('llm');\n }\n if (missing.length > 0) {\n throw new Error(\n `mind: required platform adapters not configured: ${missing.join(', ')}. ` +\n `Configure them in .kb/kb.config.json under \"adapters\".`,\n );\n }\n\n return { vectorStore: vectorStore!, embeddings: embeddings!, storage: storage!, cache: cache!, llm: llm!, logger };\n}\n\n/** Resolve the plugin config from the `mind` config section. */\nexport async function loadConfig() {\n const raw = await useConfig<MindConfigInput>();\n return resolveMindConfig(raw ?? {});\n}\n\n/**\n * Convenience: build the Mind facade (services + config) in one call.\n * `cwd` is the workspace root source paths resolve against (from `ctx.cwd`).\n */\nexport async function buildMind(cwd?: string): Promise<Mind> {\n return createMind(buildServices(), await loadConfig(), { cwd: cwd ?? process.cwd() });\n}\n","import { defineCommand, handleError, useLoader, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { type IndexFlags, type IndexResponse } from '@kb-labs/mind-contracts';\nimport { type IngestProgress } from '@kb-labs/mind-core';\nimport { buildMind } from '../../platform';\n\ntype IndexCmdResult = { exitCode: number; result?: IndexResponse };\n\n/** Map an ingest stage to a one-line loader label. */\nfunction stageText(e: IngestProgress): string {\n switch (e.stage) {\n case 'discover':\n return `Discovered ${e.files} file(s)`;\n case 'delta':\n return `Delta: ${e.toIndex} to (re)index · ${e.unchanged} unchanged · ${e.removed} removed`;\n case 'chunk':\n return `Chunked → ${e.chunks} chunk(s)`;\n case 'embed':\n return `Embedding ${e.done}/${e.total} chunk(s)`;\n case 'upsert':\n return `Upserting ${e.count} vector(s)`;\n case 'save':\n return 'Saving index manifest';\n }\n}\n\nexport default defineCommand<unknown, CLIInput<IndexFlags>, IndexResponse>({\n id: 'mind:index',\n description: 'Build or refresh a Mind index from source files',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<IndexFlags>): Promise<IndexCmdResult> {\n const { flags } = input;\n try {\n // `--root` lets one kb-labs install index an arbitrary project root\n // (paths + freshness resolve against it); defaults to the invocation cwd.\n const mind = await buildMind(flags.root ?? ctx.cwd);\n\n // Built-in SDK loader: an animated spinner whose text we drive per stage\n // (writes to stdout directly, so it renders even though the CLI presenter\n // has no spinner). It self-suppresses in JSON mode, keeping stdout clean.\n const loader = flags.json ? undefined : useLoader(`Indexing \"${flags.index ?? 'default'}\"…`);\n loader?.start();\n\n const res = await mind.index(\n { indexId: flags.index, scope: flags.scope, full: flags.full },\n flags.json ? undefined : (e) => loader?.update({ text: stageText(e) }),\n );\n\n if (flags.json) {\n ctx.ui?.json?.(res);\n return { exitCode: 0, result: res };\n }\n const summary = `Indexed ${res.filesIndexed} file(s), ${res.chunks} chunk(s) into \"${res.indexId}\" (${res.durationMs}ms)`;\n if (loader) {\n loader.succeed(summary);\n } else {\n ctx.ui?.success?.(summary);\n }\n return { exitCode: 0, result: res };\n } catch (err) {\n handleError(ctx, err, flags.json);\n return { exitCode: 1 };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,11 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { CLIInput } from '@kb-labs/sdk';
3
+
4
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<any>, {
5
+ durationMs: number;
6
+ indexId: string;
7
+ filesIndexed: number;
8
+ chunks: number;
9
+ }>;
10
+
11
+ export { _default as default };
@@ -0,0 +1,71 @@
1
+ import { defineCommand, handleError, useVectorStore, useEmbeddings, useStorage, useCache, useLLM, useLogger, useConfig } from '@kb-labs/sdk';
2
+ import { createMind } from '@kb-labs/mind-core';
3
+ import { resolveMindConfig } from '@kb-labs/mind-contracts';
4
+
5
+ // src/cli/commands/reindex.ts
6
+ function buildServices() {
7
+ const vectorStore = useVectorStore();
8
+ const embeddings = useEmbeddings();
9
+ const storage = useStorage();
10
+ const cache = useCache();
11
+ const llm = useLLM();
12
+ const logger = useLogger();
13
+ const missing = [];
14
+ if (!vectorStore) {
15
+ missing.push("vectorStore");
16
+ }
17
+ if (!embeddings) {
18
+ missing.push("embeddings");
19
+ }
20
+ if (!storage) {
21
+ missing.push("storage");
22
+ }
23
+ if (!cache) {
24
+ missing.push("cache");
25
+ }
26
+ if (!llm) {
27
+ missing.push("llm");
28
+ }
29
+ if (missing.length > 0) {
30
+ throw new Error(
31
+ `mind: required platform adapters not configured: ${missing.join(", ")}. Configure them in .kb/kb.config.json under "adapters".`
32
+ );
33
+ }
34
+ return { vectorStore, embeddings, storage, cache, llm, logger };
35
+ }
36
+ async function loadConfig() {
37
+ const raw = await useConfig();
38
+ return resolveMindConfig(raw ?? {});
39
+ }
40
+ async function buildMind(cwd) {
41
+ return createMind(buildServices(), await loadConfig(), { cwd: cwd ?? process.cwd() });
42
+ }
43
+
44
+ // src/cli/commands/reindex.ts
45
+ var reindex_default = defineCommand({
46
+ id: "mind:reindex",
47
+ description: "Rebuild an index from source files",
48
+ handler: {
49
+ async execute(ctx, input) {
50
+ try {
51
+ const mind = await buildMind(ctx.cwd);
52
+ const res = await mind.reindex({ indexId: input.flags.index, full: input.flags.full });
53
+ if (input.flags.json) {
54
+ ctx.ui?.json?.(res);
55
+ return { exitCode: 0, result: res };
56
+ }
57
+ ctx.ui?.success?.(
58
+ `Reindexed "${res.indexId}": ${res.filesIndexed} file(s), ${res.chunks} chunk(s) (${res.durationMs}ms)`
59
+ );
60
+ return { exitCode: 0, result: res };
61
+ } catch (err) {
62
+ handleError(ctx, err, input.flags.json);
63
+ return { exitCode: 1 };
64
+ }
65
+ }
66
+ }
67
+ });
68
+
69
+ export { reindex_default as default };
70
+ //# sourceMappingURL=reindex.js.map
71
+ //# sourceMappingURL=reindex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform.ts","../../../src/cli/commands/reindex.ts"],"names":[],"mappings":"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","file":"reindex.js","sourcesContent":["/**\n * The single place the plugin touches platform hooks.\n *\n * Assembles `MindServices` from `@kb-labs/sdk` hooks and resolves the plugin\n * config. CLI commands and REST handlers both call `buildMind(...)` so they\n * drive the exact same engine.\n */\n\nimport {\n useVectorStore,\n useEmbeddings,\n useStorage,\n useCache,\n useLLM,\n useLogger,\n useConfig,\n} from '@kb-labs/sdk';\nimport { createMind, type Mind, type MindServices } from '@kb-labs/mind-core';\nimport { resolveMindConfig, type MindConfigInput } from '@kb-labs/mind-contracts';\n\n/** Build MindServices from platform hooks, failing fast on missing required adapters. */\nexport function buildServices(): MindServices {\n const vectorStore = useVectorStore();\n const embeddings = useEmbeddings();\n const storage = useStorage();\n const cache = useCache();\n const llm = useLLM();\n const logger = useLogger();\n\n const missing: string[] = [];\n if (!vectorStore) {\n missing.push('vectorStore');\n }\n if (!embeddings) {\n missing.push('embeddings');\n }\n if (!storage) {\n missing.push('storage');\n }\n if (!cache) {\n missing.push('cache');\n }\n if (!llm) {\n missing.push('llm');\n }\n if (missing.length > 0) {\n throw new Error(\n `mind: required platform adapters not configured: ${missing.join(', ')}. ` +\n `Configure them in .kb/kb.config.json under \"adapters\".`,\n );\n }\n\n return { vectorStore: vectorStore!, embeddings: embeddings!, storage: storage!, cache: cache!, llm: llm!, logger };\n}\n\n/** Resolve the plugin config from the `mind` config section. */\nexport async function loadConfig() {\n const raw = await useConfig<MindConfigInput>();\n return resolveMindConfig(raw ?? {});\n}\n\n/**\n * Convenience: build the Mind facade (services + config) in one call.\n * `cwd` is the workspace root source paths resolve against (from `ctx.cwd`).\n */\nexport async function buildMind(cwd?: string): Promise<Mind> {\n return createMind(buildServices(), await loadConfig(), { cwd: cwd ?? process.cwd() });\n}\n","import { defineCommand, handleError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { type ReindexFlags, type IndexResponse } from '@kb-labs/mind-contracts';\nimport { buildMind } from '../../platform';\n\nexport default defineCommand<unknown, CLIInput<ReindexFlags>, IndexResponse>({\n id: 'mind:reindex',\n description: 'Rebuild an index from source files',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<ReindexFlags>): Promise<{ exitCode: number; result?: IndexResponse }> {\n try {\n const mind = await buildMind(ctx.cwd);\n const res = await mind.reindex({ indexId: input.flags.index, full: input.flags.full });\n if (input.flags.json) {\n ctx.ui?.json?.(res);\n return { exitCode: 0, result: res };\n }\n ctx.ui?.success?.(\n `Reindexed \"${res.indexId}\": ${res.filesIndexed} file(s), ${res.chunks} chunk(s) (${res.durationMs}ms)`,\n );\n return { exitCode: 0, result: res };\n } catch (err) {\n handleError(ctx, err, input.flags.json);\n return { exitCode: 1 };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,25 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { CLIInput } from '@kb-labs/sdk';
3
+
4
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<any>, {
5
+ confidence: number;
6
+ indexId: string;
7
+ meta: {
8
+ requestId: string;
9
+ timingMs: number;
10
+ semanticWinRate: number;
11
+ staleCount: number;
12
+ } & {
13
+ [k: string]: unknown;
14
+ };
15
+ results: {
16
+ file: string;
17
+ lines: [number, number];
18
+ kind: "code" | "file" | "doc" | "adr" | "repo" | "config" | "external";
19
+ matchedBy: "lexical" | "semantic" | "both";
20
+ stale: boolean;
21
+ snippet?: string | undefined;
22
+ }[];
23
+ }>;
24
+
25
+ export { _default as default };
@@ -0,0 +1,94 @@
1
+ import { defineCommand, handleError, useVectorStore, useEmbeddings, useStorage, useCache, useLLM, useLogger, useConfig } from '@kb-labs/sdk';
2
+ import { SearchRequestSchema, resolveMindConfig } from '@kb-labs/mind-contracts';
3
+ import { createMind } from '@kb-labs/mind-core';
4
+
5
+ // src/cli/commands/search.ts
6
+ function buildServices() {
7
+ const vectorStore = useVectorStore();
8
+ const embeddings = useEmbeddings();
9
+ const storage = useStorage();
10
+ const cache = useCache();
11
+ const llm = useLLM();
12
+ const logger = useLogger();
13
+ const missing = [];
14
+ if (!vectorStore) {
15
+ missing.push("vectorStore");
16
+ }
17
+ if (!embeddings) {
18
+ missing.push("embeddings");
19
+ }
20
+ if (!storage) {
21
+ missing.push("storage");
22
+ }
23
+ if (!cache) {
24
+ missing.push("cache");
25
+ }
26
+ if (!llm) {
27
+ missing.push("llm");
28
+ }
29
+ if (missing.length > 0) {
30
+ throw new Error(
31
+ `mind: required platform adapters not configured: ${missing.join(", ")}. Configure them in .kb/kb.config.json under "adapters".`
32
+ );
33
+ }
34
+ return { vectorStore, embeddings, storage, cache, llm, logger };
35
+ }
36
+ async function loadConfig() {
37
+ const raw = await useConfig();
38
+ return resolveMindConfig(raw ?? {});
39
+ }
40
+ async function buildMind(cwd) {
41
+ return createMind(buildServices(), await loadConfig(), { cwd: cwd ?? process.cwd() });
42
+ }
43
+
44
+ // src/cli/commands/search.ts
45
+ var search_default = defineCommand({
46
+ id: "mind:search",
47
+ description: "Locate sources \u2014 fast retrieval over a Mind index (no LLM)",
48
+ handler: {
49
+ async execute(ctx, input) {
50
+ const { flags } = input;
51
+ const json = flags.format === "json" || flags.json;
52
+ try {
53
+ const req = SearchRequestSchema.parse({
54
+ text: flags.text,
55
+ indexId: flags.index,
56
+ intent: flags.intent,
57
+ limit: flags.limit,
58
+ snippet: flags.snippet
59
+ });
60
+ const mind = await buildMind(ctx.cwd);
61
+ const res = await mind.search(req);
62
+ if (json) {
63
+ ctx.ui?.json?.(res);
64
+ return { exitCode: 0, result: res };
65
+ }
66
+ if (res.results.length === 0) {
67
+ ctx.ui?.warn?.(`No results in index "${res.indexId}"`);
68
+ } else {
69
+ ctx.ui?.success?.(`${res.results.length} result(s) \u2014 confidence ${res.confidence.toFixed(2)}`, {
70
+ sections: [
71
+ {
72
+ header: `Index "${res.indexId}"`,
73
+ items: res.results.map((r) => {
74
+ const loc = `${r.file}:${r.lines[0]}-${r.lines[1]}`;
75
+ const tags = `[${r.matchedBy}${r.stale ? ", stale" : ""}]`;
76
+ return r.snippet ? `${loc} ${tags}
77
+ ${r.snippet}` : `${loc} ${tags}`;
78
+ })
79
+ }
80
+ ]
81
+ });
82
+ }
83
+ return { exitCode: 0, result: res };
84
+ } catch (err) {
85
+ handleError(ctx, err, json);
86
+ return { exitCode: 1 };
87
+ }
88
+ }
89
+ }
90
+ });
91
+
92
+ export { search_default as default };
93
+ //# sourceMappingURL=search.js.map
94
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform.ts","../../../src/cli/commands/search.ts"],"names":[],"mappings":"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","file":"search.js","sourcesContent":["/**\n * The single place the plugin touches platform hooks.\n *\n * Assembles `MindServices` from `@kb-labs/sdk` hooks and resolves the plugin\n * config. CLI commands and REST handlers both call `buildMind(...)` so they\n * drive the exact same engine.\n */\n\nimport {\n useVectorStore,\n useEmbeddings,\n useStorage,\n useCache,\n useLLM,\n useLogger,\n useConfig,\n} from '@kb-labs/sdk';\nimport { createMind, type Mind, type MindServices } from '@kb-labs/mind-core';\nimport { resolveMindConfig, type MindConfigInput } from '@kb-labs/mind-contracts';\n\n/** Build MindServices from platform hooks, failing fast on missing required adapters. */\nexport function buildServices(): MindServices {\n const vectorStore = useVectorStore();\n const embeddings = useEmbeddings();\n const storage = useStorage();\n const cache = useCache();\n const llm = useLLM();\n const logger = useLogger();\n\n const missing: string[] = [];\n if (!vectorStore) {\n missing.push('vectorStore');\n }\n if (!embeddings) {\n missing.push('embeddings');\n }\n if (!storage) {\n missing.push('storage');\n }\n if (!cache) {\n missing.push('cache');\n }\n if (!llm) {\n missing.push('llm');\n }\n if (missing.length > 0) {\n throw new Error(\n `mind: required platform adapters not configured: ${missing.join(', ')}. ` +\n `Configure them in .kb/kb.config.json under \"adapters\".`,\n );\n }\n\n return { vectorStore: vectorStore!, embeddings: embeddings!, storage: storage!, cache: cache!, llm: llm!, logger };\n}\n\n/** Resolve the plugin config from the `mind` config section. */\nexport async function loadConfig() {\n const raw = await useConfig<MindConfigInput>();\n return resolveMindConfig(raw ?? {});\n}\n\n/**\n * Convenience: build the Mind facade (services + config) in one call.\n * `cwd` is the workspace root source paths resolve against (from `ctx.cwd`).\n */\nexport async function buildMind(cwd?: string): Promise<Mind> {\n return createMind(buildServices(), await loadConfig(), { cwd: cwd ?? process.cwd() });\n}\n","import { defineCommand, handleError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SearchRequestSchema, type SearchFlags, type SearchResponse } from '@kb-labs/mind-contracts';\nimport { buildMind } from '../../platform';\n\ntype SearchResult = { exitCode: number; result?: SearchResponse };\n\nexport default defineCommand<unknown, CLIInput<SearchFlags>, SearchResponse>({\n id: 'mind:search',\n description: 'Locate sources — fast retrieval over a Mind index (no LLM)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<SearchFlags>): Promise<SearchResult> {\n const { flags } = input;\n const json = flags.format === 'json' || flags.json;\n try {\n // Validate/normalize CLI flags into the wire request (narrows enums).\n const req = SearchRequestSchema.parse({\n text: flags.text,\n indexId: flags.index,\n intent: flags.intent,\n limit: flags.limit,\n snippet: flags.snippet,\n });\n\n const mind = await buildMind(ctx.cwd);\n const res = await mind.search(req);\n\n if (json) {\n ctx.ui?.json?.(res);\n return { exitCode: 0, result: res };\n }\n if (res.results.length === 0) {\n ctx.ui?.warn?.(`No results in index \"${res.indexId}\"`);\n } else {\n ctx.ui?.success?.(`${res.results.length} result(s) — confidence ${res.confidence.toFixed(2)}`, {\n sections: [\n {\n header: `Index \"${res.indexId}\"`,\n items: res.results.map((r) => {\n const loc = `${r.file}:${r.lines[0]}-${r.lines[1]}`;\n const tags = `[${r.matchedBy}${r.stale ? ', stale' : ''}]`;\n return r.snippet ? `${loc} ${tags}\\n ${r.snippet}` : `${loc} ${tags}`;\n }),\n },\n ],\n });\n }\n return { exitCode: 0, result: res };\n } catch (err) {\n handleError(ctx, err, json);\n return { exitCode: 1 };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,17 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { CLIInput } from '@kb-labs/sdk';
3
+
4
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<any>, {
5
+ indexes: {
6
+ indexId: string;
7
+ staleCount: number;
8
+ chunks: number;
9
+ documents: number;
10
+ lastIndexedAt: string | null;
11
+ label?: string | undefined;
12
+ coverage?: string | undefined;
13
+ }[];
14
+ healthy: boolean;
15
+ }>;
16
+
17
+ export { _default as default };
@@ -0,0 +1,89 @@
1
+ import { defineCommand, handleError, useVectorStore, useEmbeddings, useStorage, useCache, useLLM, useLogger, useConfig } from '@kb-labs/sdk';
2
+ import { createMind } from '@kb-labs/mind-core';
3
+ import { resolveMindConfig } from '@kb-labs/mind-contracts';
4
+
5
+ // src/cli/commands/status.ts
6
+ function buildServices() {
7
+ const vectorStore = useVectorStore();
8
+ const embeddings = useEmbeddings();
9
+ const storage = useStorage();
10
+ const cache = useCache();
11
+ const llm = useLLM();
12
+ const logger = useLogger();
13
+ const missing = [];
14
+ if (!vectorStore) {
15
+ missing.push("vectorStore");
16
+ }
17
+ if (!embeddings) {
18
+ missing.push("embeddings");
19
+ }
20
+ if (!storage) {
21
+ missing.push("storage");
22
+ }
23
+ if (!cache) {
24
+ missing.push("cache");
25
+ }
26
+ if (!llm) {
27
+ missing.push("llm");
28
+ }
29
+ if (missing.length > 0) {
30
+ throw new Error(
31
+ `mind: required platform adapters not configured: ${missing.join(", ")}. Configure them in .kb/kb.config.json under "adapters".`
32
+ );
33
+ }
34
+ return { vectorStore, embeddings, storage, cache, llm, logger };
35
+ }
36
+ async function loadConfig() {
37
+ const raw = await useConfig();
38
+ return resolveMindConfig(raw ?? {});
39
+ }
40
+ async function buildMind(cwd) {
41
+ return createMind(buildServices(), await loadConfig(), { cwd: cwd ?? process.cwd() });
42
+ }
43
+
44
+ // src/cli/commands/status.ts
45
+ var status_default = defineCommand({
46
+ id: "mind:status",
47
+ description: "Show Mind index status",
48
+ handler: {
49
+ async execute(ctx, input) {
50
+ const { flags } = input;
51
+ try {
52
+ const mind = await buildMind(ctx.cwd);
53
+ const res = await mind.status(flags.index);
54
+ if (flags.json) {
55
+ ctx.ui?.json?.(res);
56
+ return { exitCode: 0, result: res };
57
+ }
58
+ if (res.indexes.length === 0) {
59
+ ctx.ui?.warn?.("No indexes built yet. Run `kb mind index` first.");
60
+ return { exitCode: 0, result: res };
61
+ }
62
+ ctx.ui?.success?.("Mind indexes", {
63
+ sections: [
64
+ {
65
+ header: `${res.indexes.length} index(es)`,
66
+ items: res.indexes.map((i) => {
67
+ const head = `${i.indexId}${i.label ? ` \u2014 ${i.label}` : ""}`;
68
+ const counts = `${i.documents} doc(s), ${i.chunks} chunk(s)`;
69
+ const scope = i.coverage ? `
70
+ scope: ${i.coverage}` : "";
71
+ const stale = i.staleCount ? `, ${i.staleCount} stale` : "";
72
+ const updated = i.lastIndexedAt ? `, updated ${i.lastIndexedAt}` : " (not built)";
73
+ return `${head}: ${counts}${stale}${updated}${scope}`;
74
+ })
75
+ }
76
+ ]
77
+ });
78
+ return { exitCode: 0, result: res };
79
+ } catch (err) {
80
+ handleError(ctx, err, flags.json);
81
+ return { exitCode: 1 };
82
+ }
83
+ }
84
+ }
85
+ });
86
+
87
+ export { status_default as default };
88
+ //# sourceMappingURL=status.js.map
89
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform.ts","../../../src/cli/commands/status.ts"],"names":[],"mappings":"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","file":"status.js","sourcesContent":["/**\n * The single place the plugin touches platform hooks.\n *\n * Assembles `MindServices` from `@kb-labs/sdk` hooks and resolves the plugin\n * config. CLI commands and REST handlers both call `buildMind(...)` so they\n * drive the exact same engine.\n */\n\nimport {\n useVectorStore,\n useEmbeddings,\n useStorage,\n useCache,\n useLLM,\n useLogger,\n useConfig,\n} from '@kb-labs/sdk';\nimport { createMind, type Mind, type MindServices } from '@kb-labs/mind-core';\nimport { resolveMindConfig, type MindConfigInput } from '@kb-labs/mind-contracts';\n\n/** Build MindServices from platform hooks, failing fast on missing required adapters. */\nexport function buildServices(): MindServices {\n const vectorStore = useVectorStore();\n const embeddings = useEmbeddings();\n const storage = useStorage();\n const cache = useCache();\n const llm = useLLM();\n const logger = useLogger();\n\n const missing: string[] = [];\n if (!vectorStore) {\n missing.push('vectorStore');\n }\n if (!embeddings) {\n missing.push('embeddings');\n }\n if (!storage) {\n missing.push('storage');\n }\n if (!cache) {\n missing.push('cache');\n }\n if (!llm) {\n missing.push('llm');\n }\n if (missing.length > 0) {\n throw new Error(\n `mind: required platform adapters not configured: ${missing.join(', ')}. ` +\n `Configure them in .kb/kb.config.json under \"adapters\".`,\n );\n }\n\n return { vectorStore: vectorStore!, embeddings: embeddings!, storage: storage!, cache: cache!, llm: llm!, logger };\n}\n\n/** Resolve the plugin config from the `mind` config section. */\nexport async function loadConfig() {\n const raw = await useConfig<MindConfigInput>();\n return resolveMindConfig(raw ?? {});\n}\n\n/**\n * Convenience: build the Mind facade (services + config) in one call.\n * `cwd` is the workspace root source paths resolve against (from `ctx.cwd`).\n */\nexport async function buildMind(cwd?: string): Promise<Mind> {\n return createMind(buildServices(), await loadConfig(), { cwd: cwd ?? process.cwd() });\n}\n","import { defineCommand, handleError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { type StatusFlags, type IndexSummary, type StatusResponse } from '@kb-labs/mind-contracts';\nimport { buildMind } from '../../platform';\n\nexport default defineCommand<unknown, CLIInput<StatusFlags>, StatusResponse>({\n id: 'mind:status',\n description: 'Show Mind index status',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<StatusFlags>): Promise<{ exitCode: number; result?: StatusResponse }> {\n const { flags } = input;\n try {\n const mind = await buildMind(ctx.cwd);\n const res = await mind.status(flags.index);\n\n if (flags.json) {\n ctx.ui?.json?.(res);\n return { exitCode: 0, result: res };\n }\n\n if (res.indexes.length === 0) {\n ctx.ui?.warn?.('No indexes built yet. Run `kb mind index` first.');\n return { exitCode: 0, result: res };\n }\n\n ctx.ui?.success?.('Mind indexes', {\n sections: [\n {\n header: `${res.indexes.length} index(es)`,\n items: res.indexes.map((i: IndexSummary) => {\n const head = `${i.indexId}${i.label ? ` — ${i.label}` : ''}`;\n const counts = `${i.documents} doc(s), ${i.chunks} chunk(s)`;\n const scope = i.coverage ? `\\n scope: ${i.coverage}` : '';\n const stale = i.staleCount ? `, ${i.staleCount} stale` : '';\n const updated = i.lastIndexedAt ? `, updated ${i.lastIndexedAt}` : ' (not built)';\n return `${head}: ${counts}${stale}${updated}${scope}`;\n }),\n },\n ],\n });\n return { exitCode: 0, result: res };\n } catch (err) {\n handleError(ctx, err, flags.json);\n return { exitCode: 1 };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,11 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { CLIInput } from '@kb-labs/sdk';
3
+
4
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<any>, {
5
+ indexId: string;
6
+ added: number;
7
+ updated: number;
8
+ deleted: number;
9
+ }>;
10
+
11
+ export { _default as default };
@@ -0,0 +1,74 @@
1
+ import { defineCommand, handleError, useVectorStore, useEmbeddings, useStorage, useCache, useLLM, useLogger, useConfig } from '@kb-labs/sdk';
2
+ import { createMind } from '@kb-labs/mind-core';
3
+ import { resolveMindConfig } from '@kb-labs/mind-contracts';
4
+
5
+ // src/cli/commands/sync-add.ts
6
+ function buildServices() {
7
+ const vectorStore = useVectorStore();
8
+ const embeddings = useEmbeddings();
9
+ const storage = useStorage();
10
+ const cache = useCache();
11
+ const llm = useLLM();
12
+ const logger = useLogger();
13
+ const missing = [];
14
+ if (!vectorStore) {
15
+ missing.push("vectorStore");
16
+ }
17
+ if (!embeddings) {
18
+ missing.push("embeddings");
19
+ }
20
+ if (!storage) {
21
+ missing.push("storage");
22
+ }
23
+ if (!cache) {
24
+ missing.push("cache");
25
+ }
26
+ if (!llm) {
27
+ missing.push("llm");
28
+ }
29
+ if (missing.length > 0) {
30
+ throw new Error(
31
+ `mind: required platform adapters not configured: ${missing.join(", ")}. Configure them in .kb/kb.config.json under "adapters".`
32
+ );
33
+ }
34
+ return { vectorStore, embeddings, storage, cache, llm, logger };
35
+ }
36
+ async function loadConfig() {
37
+ const raw = await useConfig();
38
+ return resolveMindConfig(raw ?? {});
39
+ }
40
+ async function buildMind(cwd) {
41
+ return createMind(buildServices(), await loadConfig(), { cwd: cwd ?? process.cwd() });
42
+ }
43
+
44
+ // src/cli/commands/sync-add.ts
45
+ var sync_add_default = defineCommand({
46
+ id: "mind:sync-add",
47
+ description: "Add documents to an index (incremental)",
48
+ handler: {
49
+ async execute(ctx, input) {
50
+ try {
51
+ const paths = input.argv ?? [];
52
+ if (paths.length === 0) {
53
+ ctx.ui?.error?.("Provide one or more paths: kb mind sync add <paths\u2026>");
54
+ return { exitCode: 1 };
55
+ }
56
+ const mind = await buildMind(ctx.cwd);
57
+ const res = await mind.syncAdd(paths, input.flags.index);
58
+ if (input.flags.json) {
59
+ ctx.ui?.json?.(res);
60
+ return { exitCode: 0, result: res };
61
+ }
62
+ ctx.ui?.success?.(`Sync add \u2192 "${res.indexId}": +${res.added} added, ${res.updated} updated`);
63
+ return { exitCode: 0, result: res };
64
+ } catch (err) {
65
+ handleError(ctx, err, input.flags.json);
66
+ return { exitCode: 1 };
67
+ }
68
+ }
69
+ }
70
+ });
71
+
72
+ export { sync_add_default as default };
73
+ //# sourceMappingURL=sync-add.js.map
74
+ //# sourceMappingURL=sync-add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform.ts","../../../src/cli/commands/sync-add.ts"],"names":[],"mappings":"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","file":"sync-add.js","sourcesContent":["/**\n * The single place the plugin touches platform hooks.\n *\n * Assembles `MindServices` from `@kb-labs/sdk` hooks and resolves the plugin\n * config. CLI commands and REST handlers both call `buildMind(...)` so they\n * drive the exact same engine.\n */\n\nimport {\n useVectorStore,\n useEmbeddings,\n useStorage,\n useCache,\n useLLM,\n useLogger,\n useConfig,\n} from '@kb-labs/sdk';\nimport { createMind, type Mind, type MindServices } from '@kb-labs/mind-core';\nimport { resolveMindConfig, type MindConfigInput } from '@kb-labs/mind-contracts';\n\n/** Build MindServices from platform hooks, failing fast on missing required adapters. */\nexport function buildServices(): MindServices {\n const vectorStore = useVectorStore();\n const embeddings = useEmbeddings();\n const storage = useStorage();\n const cache = useCache();\n const llm = useLLM();\n const logger = useLogger();\n\n const missing: string[] = [];\n if (!vectorStore) {\n missing.push('vectorStore');\n }\n if (!embeddings) {\n missing.push('embeddings');\n }\n if (!storage) {\n missing.push('storage');\n }\n if (!cache) {\n missing.push('cache');\n }\n if (!llm) {\n missing.push('llm');\n }\n if (missing.length > 0) {\n throw new Error(\n `mind: required platform adapters not configured: ${missing.join(', ')}. ` +\n `Configure them in .kb/kb.config.json under \"adapters\".`,\n );\n }\n\n return { vectorStore: vectorStore!, embeddings: embeddings!, storage: storage!, cache: cache!, llm: llm!, logger };\n}\n\n/** Resolve the plugin config from the `mind` config section. */\nexport async function loadConfig() {\n const raw = await useConfig<MindConfigInput>();\n return resolveMindConfig(raw ?? {});\n}\n\n/**\n * Convenience: build the Mind facade (services + config) in one call.\n * `cwd` is the workspace root source paths resolve against (from `ctx.cwd`).\n */\nexport async function buildMind(cwd?: string): Promise<Mind> {\n return createMind(buildServices(), await loadConfig(), { cwd: cwd ?? process.cwd() });\n}\n","import { defineCommand, handleError, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { type SyncPathsFlags, type SyncResponse } from '@kb-labs/mind-contracts';\nimport { buildMind } from '../../platform';\n\nexport default defineCommand<unknown, CLIInput<SyncPathsFlags>, SyncResponse>({\n id: 'mind:sync-add',\n description: 'Add documents to an index (incremental)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<SyncPathsFlags>): Promise<{ exitCode: number; result?: SyncResponse }> {\n try {\n const paths = input.argv ?? [];\n if (paths.length === 0) {\n ctx.ui?.error?.('Provide one or more paths: kb mind sync add <paths…>');\n return { exitCode: 1 };\n }\n const mind = await buildMind(ctx.cwd);\n const res = await mind.syncAdd(paths, input.flags.index);\n if (input.flags.json) {\n ctx.ui?.json?.(res);\n return { exitCode: 0, result: res };\n }\n ctx.ui?.success?.(`Sync add → \"${res.indexId}\": +${res.added} added, ${res.updated} updated`);\n return { exitCode: 0, result: res };\n } catch (err) {\n handleError(ctx, err, input.flags.json);\n return { exitCode: 1 };\n }\n },\n },\n});\n"]}
@@ -0,0 +1,11 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { CLIInput } from '@kb-labs/sdk';
3
+
4
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<any>, {
5
+ indexId: string;
6
+ added: number;
7
+ updated: number;
8
+ deleted: number;
9
+ }>;
10
+
11
+ export { _default as default };