@kb-labs/mind-entry 2.93.0 → 2.96.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 +15 -19
  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,90 @@
1
+ import { defineCommand, confirmDestructive, 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-delete.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-delete.ts
45
+ var sync_delete_default = defineCommand({
46
+ id: "mind:sync-delete",
47
+ description: "Remove documents from 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 delete <paths\u2026>");
54
+ return { exitCode: 1 };
55
+ }
56
+ const blocked = confirmDestructive(ctx, {
57
+ confirmed: input.flags.yes,
58
+ isJson: input.flags.json,
59
+ action: {
60
+ action: "mind sync delete",
61
+ resource: `index "${input.flags.index ?? "default"}"`,
62
+ effect: "removes the specified document(s)",
63
+ severity: "medium",
64
+ reversible: true,
65
+ recovery: "re-add with `kb mind sync add <paths>`",
66
+ blastRadius: { count: paths.length, unit: "document(s)" }
67
+ }
68
+ });
69
+ if (blocked) {
70
+ return blocked;
71
+ }
72
+ const mind = await buildMind(ctx.cwd);
73
+ const res = await mind.syncDelete(paths, input.flags.index);
74
+ if (input.flags.json) {
75
+ ctx.ui?.json?.(res);
76
+ return { exitCode: 0, result: res };
77
+ }
78
+ ctx.ui?.success?.(`Sync delete \u2192 "${res.indexId}": ${res.deleted} chunk(s) removed`);
79
+ return { exitCode: 0, result: res };
80
+ } catch (err) {
81
+ handleError(ctx, err, input.flags.json);
82
+ return { exitCode: 1 };
83
+ }
84
+ }
85
+ }
86
+ });
87
+
88
+ export { sync_delete_default as default };
89
+ //# sourceMappingURL=sync-delete.js.map
90
+ //# sourceMappingURL=sync-delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform.ts","../../../src/cli/commands/sync-delete.ts"],"names":[],"mappings":";;;;;AAqBO,SAAS,aAAA,GAA8B;AAC5C,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,MAAM,MAAA,EAAO;AACnB,EAAA,MAAM,SAAS,SAAA,EAAU;AAEzB,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAA,CAAQ,KAAK,aAAa,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAA,CAAQ,KAAK,SAAS,CAAA;AAAA,EACxB;AACA,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EACpB;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,iDAAA,EAAoD,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,wDAAA;AAAA,KAExE;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,WAAA,EAA2B,UAAA,EAAyB,OAAA,EAAmB,KAAA,EAAe,KAAW,MAAA,EAAO;AACnH;AAGA,eAAsB,UAAA,GAAa;AACjC,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,EAA2B;AAC7C,EAAA,OAAO,iBAAA,CAAkB,GAAA,IAAO,EAAE,CAAA;AACpC;AAMA,eAAsB,UAAU,GAAA,EAA6B;AAC3D,EAAA,OAAO,UAAA,CAAW,aAAA,EAAc,EAAG,MAAM,UAAA,EAAW,EAAG,EAAE,GAAA,EAAK,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI,EAAG,CAAA;AACtF;;;AC/DA,IAAO,sBAAQ,aAAA,CAAgE;AAAA,EAC7E,EAAA,EAAI,kBAAA;AAAA,EACJ,WAAA,EAAa,8CAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwF;AAC1H,MAAA,IAAI;AACJ,QAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,IAAQ,EAAC;AAC7B,QAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,UAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,8DAAyD,CAAA;AACzE,UAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,QACvB;AAGA,QAAA,MAAM,OAAA,GAAU,mBAAmB,GAAA,EAAK;AAAA,UACtC,SAAA,EAAW,MAAM,KAAA,CAAM,GAAA;AAAA,UACvB,MAAA,EAAQ,MAAM,KAAA,CAAM,IAAA;AAAA,UACpB,MAAA,EAAQ;AAAA,YACN,MAAA,EAAQ,kBAAA;AAAA,YACR,QAAA,EAAU,CAAA,OAAA,EAAU,KAAA,CAAM,KAAA,CAAM,SAAS,SAAS,CAAA,CAAA,CAAA;AAAA,YAClD,MAAA,EAAQ,mCAAA;AAAA,YACR,QAAA,EAAU,QAAA;AAAA,YACV,UAAA,EAAY,IAAA;AAAA,YACZ,QAAA,EAAU,wCAAA;AAAA,YACV,aAAa,EAAE,KAAA,EAAO,KAAA,CAAM,MAAA,EAAQ,MAAM,aAAA;AAAc;AAC1D,SACD,CAAA;AACD,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,OAAO,OAAA;AAAA,QACT;AACA,QAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AACpC,QAAA,MAAM,MAAM,MAAM,IAAA,CAAK,WAAW,KAAA,EAAO,KAAA,CAAM,MAAM,KAAK,CAAA;AAC1D,QAAA,IAAI,KAAA,CAAM,MAAM,IAAA,EAAM;AACpB,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,GAAG,CAAA;AAClB,UAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,GAAA,EAAI;AAAA,QACpC;AACA,QAAA,GAAA,CAAI,EAAA,EAAI,UAAU,CAAA,oBAAA,EAAkB,GAAA,CAAI,OAAO,CAAA,GAAA,EAAM,GAAA,CAAI,OAAO,CAAA,iBAAA,CAAmB,CAAA;AACnF,QAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,GAAA,EAAI;AAAA,MAClC,SAAS,GAAA,EAAK;AACZ,QAAA,WAAA,CAAY,GAAA,EAAK,GAAA,EAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AACtC,QAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,MACvB;AAAA,IACF;AAAA;AAEJ,CAAC","file":"sync-delete.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, confirmDestructive, type CLIInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { type SyncDeleteFlags, type SyncResponse } from '@kb-labs/mind-contracts';\nimport { buildMind } from '../../platform';\n\nexport default defineCommand<unknown, CLIInput<SyncDeleteFlags>, SyncResponse>({\n id: 'mind:sync-delete',\n description: 'Remove documents from an index (incremental)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<SyncDeleteFlags>): 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 delete <paths…>');\n return { exitCode: 1 };\n }\n // Destructive: blocks in EVERY mode until --yes (agents get a structured\n // confirmationRequired signal with severity/recovery, not a silent delete).\n const blocked = confirmDestructive(ctx, {\n confirmed: input.flags.yes,\n isJson: input.flags.json,\n action: {\n action: 'mind sync delete',\n resource: `index \"${input.flags.index ?? 'default'}\"`,\n effect: 'removes the specified document(s)',\n severity: 'medium',\n reversible: true,\n recovery: 're-add with `kb mind sync add <paths>`',\n blastRadius: { count: paths.length, unit: 'document(s)' },\n },\n });\n if (blocked) {\n return blocked;\n }\n const mind = await buildMind(ctx.cwd);\n const res = await mind.syncDelete(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 delete → \"${res.indexId}\": ${res.deleted} chunk(s) removed`);\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,13 @@
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
+ documents: {
7
+ path: string;
8
+ chunks: number;
9
+ indexedAt: string;
10
+ }[];
11
+ }>;
12
+
13
+ export { _default as default };
@@ -0,0 +1,80 @@
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-list.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-list.ts
45
+ var sync_list_default = defineCommand({
46
+ id: "mind:sync-list",
47
+ description: "List documents synced into an index",
48
+ handler: {
49
+ async execute(ctx, input) {
50
+ try {
51
+ const mind = await buildMind(ctx.cwd);
52
+ const res = await mind.syncList(input.flags.index);
53
+ if (input.flags.json) {
54
+ ctx.ui?.json?.(res);
55
+ return { exitCode: 0, result: res };
56
+ }
57
+ if (res.documents.length === 0) {
58
+ ctx.ui?.warn?.(`Index "${res.indexId}" has no documents.`);
59
+ return { exitCode: 0, result: res };
60
+ }
61
+ ctx.ui?.success?.(`"${res.indexId}" \u2014 ${res.documents.length} document(s)`, {
62
+ sections: [
63
+ {
64
+ header: "Documents",
65
+ items: res.documents.map((d) => `${d.path} (${d.chunks} chunk(s))`)
66
+ }
67
+ ]
68
+ });
69
+ return { exitCode: 0, result: res };
70
+ } catch (err) {
71
+ handleError(ctx, err, input.flags.json);
72
+ return { exitCode: 1 };
73
+ }
74
+ }
75
+ }
76
+ });
77
+
78
+ export { sync_list_default as default };
79
+ //# sourceMappingURL=sync-list.js.map
80
+ //# sourceMappingURL=sync-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform.ts","../../../src/cli/commands/sync-list.ts"],"names":[],"mappings":"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","file":"sync-list.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 SyncListFlags, type SyncListResponse } from '@kb-labs/mind-contracts';\nimport { buildMind } from '../../platform';\n\nexport default defineCommand<unknown, CLIInput<SyncListFlags>, SyncListResponse>({\n id: 'mind:sync-list',\n description: 'List documents synced into an index',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<SyncListFlags>): Promise<{ exitCode: number; result?: SyncListResponse }> {\n try {\n const mind = await buildMind(ctx.cwd);\n const res = await mind.syncList(input.flags.index);\n if (input.flags.json) {\n ctx.ui?.json?.(res);\n return { exitCode: 0, result: res };\n }\n if (res.documents.length === 0) {\n ctx.ui?.warn?.(`Index \"${res.indexId}\" has no documents.`);\n return { exitCode: 0, result: res };\n }\n ctx.ui?.success?.(`\"${res.indexId}\" — ${res.documents.length} document(s)`, {\n sections: [\n {\n header: 'Documents',\n items: res.documents.map((d) => `${d.path} (${d.chunks} chunk(s))`),\n },\n ],\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,8 @@
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
+ exitCode: number;
6
+ }>;
7
+
8
+ 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/sync-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/sync-status.ts
45
+ var sync_status_default = defineCommand({
46
+ id: "mind:sync-status",
47
+ description: "Show sync health for an index",
48
+ handler: {
49
+ async execute(ctx, input) {
50
+ try {
51
+ const mind = await buildMind(ctx.cwd);
52
+ const res = await mind.syncStatus(input.flags.index);
53
+ if (input.flags.json) {
54
+ ctx.ui?.json?.(res);
55
+ return { exitCode: 0 };
56
+ }
57
+ ctx.ui?.success?.(
58
+ `"${res.indexId}": ${res.documents} doc(s), ${res.chunks} chunk(s)` + (res.lastIndexedAt ? `, updated ${res.lastIndexedAt}` : "") + (res.stale ? " (stale)" : "")
59
+ );
60
+ return { exitCode: 0 };
61
+ } catch (err) {
62
+ handleError(ctx, err, input.flags.json);
63
+ return { exitCode: 1 };
64
+ }
65
+ }
66
+ }
67
+ });
68
+
69
+ export { sync_status_default as default };
70
+ //# sourceMappingURL=sync-status.js.map
71
+ //# sourceMappingURL=sync-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform.ts","../../../src/cli/commands/sync-status.ts"],"names":[],"mappings":";;;;;AAqBO,SAAS,aAAA,GAA8B;AAC5C,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,MAAM,MAAA,EAAO;AACnB,EAAA,MAAM,SAAS,SAAA,EAAU;AAEzB,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAA,CAAQ,KAAK,aAAa,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAA,CAAQ,KAAK,SAAS,CAAA;AAAA,EACxB;AACA,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EACpB;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,iDAAA,EAAoD,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,wDAAA;AAAA,KAExE;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,WAAA,EAA2B,UAAA,EAAyB,OAAA,EAAmB,KAAA,EAAe,KAAW,MAAA,EAAO;AACnH;AAGA,eAAsB,UAAA,GAAa;AACjC,EAAA,MAAM,GAAA,GAAM,MAAM,SAAA,EAA2B;AAC7C,EAAA,OAAO,iBAAA,CAAkB,GAAA,IAAO,EAAE,CAAA;AACpC;AAMA,eAAsB,UAAU,GAAA,EAA6B;AAC3D,EAAA,OAAO,UAAA,CAAW,aAAA,EAAc,EAAG,MAAM,UAAA,EAAW,EAAG,EAAE,GAAA,EAAK,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI,EAAG,CAAA;AACtF;;;AC/DA,IAAO,sBAAQ,aAAA,CAAsE;AAAA,EACnF,EAAA,EAAI,kBAAA;AAAA,EACJ,WAAA,EAAa,+BAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAA+D;AACjG,MAAA,IAAI;AACJ,QAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AACpC,QAAA,MAAM,MAAM,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,MAAM,KAAK,CAAA;AACnD,QAAA,IAAI,KAAA,CAAM,MAAM,IAAA,EAAM;AACpB,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,GAAG,CAAA;AAClB,UAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,QACvB;AACA,QAAA,GAAA,CAAI,EAAA,EAAI,OAAA;AAAA,UACN,IAAI,GAAA,CAAI,OAAO,MAAM,GAAA,CAAI,SAAS,YAAY,GAAA,CAAI,MAAM,eACrD,GAAA,CAAI,aAAA,GAAgB,aAAa,GAAA,CAAI,aAAa,KAAK,EAAA,CAAA,IACvD,GAAA,CAAI,QAAQ,UAAA,GAAa,EAAA;AAAA,SAC9B;AACA,QAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,MACrB,SAAS,GAAA,EAAK;AACZ,QAAA,WAAA,CAAY,GAAA,EAAK,GAAA,EAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AACtC,QAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,MACvB;AAAA,IACF;AAAA;AAEJ,CAAC","file":"sync-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 SyncListFlags } from '@kb-labs/mind-contracts';\nimport { buildMind } from '../../platform';\n\nexport default defineCommand<unknown, CLIInput<SyncListFlags>, { exitCode: number }>({\n id: 'mind:sync-status',\n description: 'Show sync health for an index',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<SyncListFlags>): Promise<{ exitCode: number }> {\n try {\n const mind = await buildMind(ctx.cwd);\n const res = await mind.syncStatus(input.flags.index);\n if (input.flags.json) {\n ctx.ui?.json?.(res);\n return { exitCode: 0 };\n }\n ctx.ui?.success?.(\n `\"${res.indexId}\": ${res.documents} doc(s), ${res.chunks} chunk(s)` +\n (res.lastIndexedAt ? `, updated ${res.lastIndexedAt}` : '') +\n (res.stale ? ' (stale)' : ''),\n );\n return { exitCode: 0 };\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 };
@@ -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-update.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-update.ts
45
+ var sync_update_default = defineCommand({
46
+ id: "mind:sync-update",
47
+ description: "Re-index updated documents (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 update <paths\u2026>");
54
+ return { exitCode: 1 };
55
+ }
56
+ const mind = await buildMind(ctx.cwd);
57
+ const res = await mind.syncUpdate(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 update \u2192 "${res.indexId}": ${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_update_default as default };
73
+ //# sourceMappingURL=sync-update.js.map
74
+ //# sourceMappingURL=sync-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform.ts","../../../src/cli/commands/sync-update.ts"],"names":[],"mappings":"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","file":"sync-update.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-update',\n description: 'Re-index updated documents (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 update <paths…>');\n return { exitCode: 1 };\n }\n const mind = await buildMind(ctx.cwd);\n const res = await mind.syncUpdate(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 update → \"${res.indexId}\": ${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"]}