@weavelogic/knowledge-graph-agent 0.6.0 → 0.7.1

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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -3
  3. package/dist/_virtual/__vite-browser-external.js +2 -2
  4. package/dist/_virtual/__vite-browser-external.js.map +1 -1
  5. package/dist/_virtual/index12.js +7 -0
  6. package/dist/_virtual/index12.js.map +1 -0
  7. package/dist/_virtual/ort-web.min.js +8 -0
  8. package/dist/_virtual/ort-web.min.js.map +1 -0
  9. package/dist/_virtual/ort-web.min2.js +5 -0
  10. package/dist/_virtual/ort-web.min2.js.map +1 -0
  11. package/dist/agents/base-agent.d.ts +63 -0
  12. package/dist/agents/base-agent.d.ts.map +1 -1
  13. package/dist/agents/base-agent.js +139 -0
  14. package/dist/agents/base-agent.js.map +1 -1
  15. package/dist/agents/coordinator-agent.d.ts +422 -0
  16. package/dist/agents/coordinator-agent.d.ts.map +1 -0
  17. package/dist/agents/documenter-agent.d.ts +298 -0
  18. package/dist/agents/documenter-agent.d.ts.map +1 -0
  19. package/dist/agents/index.d.ts +11 -1
  20. package/dist/agents/index.d.ts.map +1 -1
  21. package/dist/agents/index.js +4 -0
  22. package/dist/agents/index.js.map +1 -1
  23. package/dist/agents/mixins/index.d.ts +9 -0
  24. package/dist/agents/mixins/index.d.ts.map +1 -0
  25. package/dist/agents/mixins/trajectory-mixin.d.ts +112 -0
  26. package/dist/agents/mixins/trajectory-mixin.d.ts.map +1 -0
  27. package/dist/agents/optimizer-agent.d.ts +388 -0
  28. package/dist/agents/optimizer-agent.d.ts.map +1 -0
  29. package/dist/agents/planner-agent.d.ts +395 -0
  30. package/dist/agents/planner-agent.d.ts.map +1 -0
  31. package/dist/agents/registry.d.ts.map +1 -1
  32. package/dist/agents/registry.js +5 -0
  33. package/dist/agents/registry.js.map +1 -1
  34. package/dist/agents/reviewer-agent.d.ts +330 -0
  35. package/dist/agents/reviewer-agent.d.ts.map +1 -0
  36. package/dist/agents/types.d.ts +12 -1
  37. package/dist/agents/types.d.ts.map +1 -1
  38. package/dist/agents/types.js +1 -0
  39. package/dist/agents/types.js.map +1 -1
  40. package/dist/cli/commands/hive-mind/add-frontmatter.d.ts +102 -0
  41. package/dist/cli/commands/hive-mind/add-frontmatter.d.ts.map +1 -0
  42. package/dist/cli/commands/hive-mind/add-frontmatter.js +439 -0
  43. package/dist/cli/commands/hive-mind/add-frontmatter.js.map +1 -0
  44. package/dist/cli/commands/hive-mind/analyze-links.d.ts +80 -0
  45. package/dist/cli/commands/hive-mind/analyze-links.d.ts.map +1 -0
  46. package/dist/cli/commands/hive-mind/analyze-links.js +367 -0
  47. package/dist/cli/commands/hive-mind/analyze-links.js.map +1 -0
  48. package/dist/cli/commands/hive-mind/find-connections.d.ts +75 -0
  49. package/dist/cli/commands/hive-mind/find-connections.d.ts.map +1 -0
  50. package/dist/cli/commands/hive-mind/find-connections.js +347 -0
  51. package/dist/cli/commands/hive-mind/find-connections.js.map +1 -0
  52. package/dist/cli/commands/hive-mind/index.d.ts +37 -0
  53. package/dist/cli/commands/hive-mind/index.d.ts.map +1 -0
  54. package/dist/cli/commands/hive-mind/index.js +33 -0
  55. package/dist/cli/commands/hive-mind/index.js.map +1 -0
  56. package/dist/cli/commands/hive-mind/validate-names.d.ts +79 -0
  57. package/dist/cli/commands/hive-mind/validate-names.d.ts.map +1 -0
  58. package/dist/cli/commands/hive-mind/validate-names.js +353 -0
  59. package/dist/cli/commands/hive-mind/validate-names.js.map +1 -0
  60. package/dist/cli/commands/vector.js +2 -0
  61. package/dist/cli/commands/vector.js.map +1 -1
  62. package/dist/cli/index.d.ts.map +1 -1
  63. package/dist/cli/index.js +7 -0
  64. package/dist/cli/index.js.map +1 -1
  65. package/dist/equilibrium/agent-equilibrium.d.ts +194 -0
  66. package/dist/equilibrium/agent-equilibrium.d.ts.map +1 -0
  67. package/dist/equilibrium/agent-equilibrium.js +304 -0
  68. package/dist/equilibrium/agent-equilibrium.js.map +1 -0
  69. package/dist/equilibrium/graph-equilibrium.d.ts +177 -0
  70. package/dist/equilibrium/graph-equilibrium.d.ts.map +1 -0
  71. package/dist/equilibrium/index.d.ts +11 -0
  72. package/dist/equilibrium/index.d.ts.map +1 -0
  73. package/dist/equilibrium/memory-equilibrium.d.ts +153 -0
  74. package/dist/equilibrium/memory-equilibrium.d.ts.map +1 -0
  75. package/dist/graphql/resolvers/index.d.ts.map +1 -1
  76. package/dist/graphql/resolvers/queries.d.ts +11 -0
  77. package/dist/graphql/resolvers/queries.d.ts.map +1 -1
  78. package/dist/index.d.ts +2 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +10 -4
  81. package/dist/index.js.map +1 -1
  82. package/dist/inference/index.d.ts +9 -0
  83. package/dist/inference/index.d.ts.map +1 -0
  84. package/dist/inference/model-selection.d.ts +131 -0
  85. package/dist/inference/model-selection.d.ts.map +1 -0
  86. package/dist/integrations/agentic-flow/adapters/agent-booster-adapter.d.ts +265 -0
  87. package/dist/integrations/agentic-flow/adapters/agent-booster-adapter.d.ts.map +1 -0
  88. package/dist/integrations/agentic-flow/adapters/agentdb-adapter.d.ts +197 -0
  89. package/dist/integrations/agentic-flow/adapters/agentdb-adapter.d.ts.map +1 -0
  90. package/dist/integrations/agentic-flow/adapters/agentdb-vector-store.d.ts +249 -0
  91. package/dist/integrations/agentic-flow/adapters/agentdb-vector-store.d.ts.map +1 -0
  92. package/dist/integrations/agentic-flow/adapters/base-adapter.d.ts +120 -0
  93. package/dist/integrations/agentic-flow/adapters/base-adapter.d.ts.map +1 -0
  94. package/dist/integrations/agentic-flow/adapters/federation-hub-adapter.d.ts +444 -0
  95. package/dist/integrations/agentic-flow/adapters/federation-hub-adapter.d.ts.map +1 -0
  96. package/dist/integrations/agentic-flow/adapters/index.d.ts +17 -0
  97. package/dist/integrations/agentic-flow/adapters/index.d.ts.map +1 -0
  98. package/dist/integrations/agentic-flow/adapters/model-router-adapter.d.ts +242 -0
  99. package/dist/integrations/agentic-flow/adapters/model-router-adapter.d.ts.map +1 -0
  100. package/dist/integrations/agentic-flow/adapters/quic-transport-adapter.d.ts +364 -0
  101. package/dist/integrations/agentic-flow/adapters/quic-transport-adapter.d.ts.map +1 -0
  102. package/dist/integrations/agentic-flow/adapters/reasoning-bank-adapter.d.ts +209 -0
  103. package/dist/integrations/agentic-flow/adapters/reasoning-bank-adapter.d.ts.map +1 -0
  104. package/dist/integrations/agentic-flow/benchmark/index.d.ts +9 -0
  105. package/dist/integrations/agentic-flow/benchmark/index.d.ts.map +1 -0
  106. package/dist/integrations/agentic-flow/benchmark/vector-benchmark.d.ts +253 -0
  107. package/dist/integrations/agentic-flow/benchmark/vector-benchmark.d.ts.map +1 -0
  108. package/dist/integrations/agentic-flow/config.d.ts +109 -0
  109. package/dist/integrations/agentic-flow/config.d.ts.map +1 -0
  110. package/dist/integrations/agentic-flow/feature-flags.d.ts +140 -0
  111. package/dist/integrations/agentic-flow/feature-flags.d.ts.map +1 -0
  112. package/dist/integrations/agentic-flow/index.d.ts +22 -0
  113. package/dist/integrations/agentic-flow/index.d.ts.map +1 -0
  114. package/dist/integrations/agentic-flow/migration/index.d.ts +9 -0
  115. package/dist/integrations/agentic-flow/migration/index.d.ts.map +1 -0
  116. package/dist/integrations/agentic-flow/migration/migrate-to-agentdb.d.ts +242 -0
  117. package/dist/integrations/agentic-flow/migration/migrate-to-agentdb.d.ts.map +1 -0
  118. package/dist/learning/index.d.ts +91 -0
  119. package/dist/learning/index.d.ts.map +1 -0
  120. package/dist/learning/learning-loop.d.ts +176 -0
  121. package/dist/learning/learning-loop.d.ts.map +1 -0
  122. package/dist/learning/services/ab-testing-framework.d.ts +135 -0
  123. package/dist/learning/services/ab-testing-framework.d.ts.map +1 -0
  124. package/dist/learning/services/agent-priming-service.d.ts +207 -0
  125. package/dist/learning/services/agent-priming-service.d.ts.map +1 -0
  126. package/dist/learning/services/daily-log-generator.d.ts +113 -0
  127. package/dist/learning/services/daily-log-generator.d.ts.map +1 -0
  128. package/dist/learning/services/index.d.ts +14 -0
  129. package/dist/learning/services/index.d.ts.map +1 -0
  130. package/dist/learning/services/memory-extraction-service.d.ts +87 -0
  131. package/dist/learning/services/memory-extraction-service.d.ts.map +1 -0
  132. package/dist/learning/services/task-completion-consumer.d.ts +162 -0
  133. package/dist/learning/services/task-completion-consumer.d.ts.map +1 -0
  134. package/dist/learning/services/trajectory-tracker.d.ts +174 -0
  135. package/dist/learning/services/trajectory-tracker.d.ts.map +1 -0
  136. package/dist/learning/types.d.ts +516 -0
  137. package/dist/learning/types.d.ts.map +1 -0
  138. package/dist/mcp/clients/claude-flow-memory-client.d.ts +259 -0
  139. package/dist/mcp/clients/claude-flow-memory-client.d.ts.map +1 -0
  140. package/dist/mcp/clients/claude-flow-memory-client.js +305 -0
  141. package/dist/mcp/clients/claude-flow-memory-client.js.map +1 -0
  142. package/dist/mcp/clients/index.d.ts +11 -0
  143. package/dist/mcp/clients/index.d.ts.map +1 -0
  144. package/dist/mcp/clients/mcp-client-adapter.d.ts +146 -0
  145. package/dist/mcp/clients/mcp-client-adapter.d.ts.map +1 -0
  146. package/dist/mcp/clients/mcp-client-adapter.js +372 -0
  147. package/dist/mcp/clients/mcp-client-adapter.js.map +1 -0
  148. package/dist/mcp/index.d.ts +10 -0
  149. package/dist/mcp/index.d.ts.map +1 -0
  150. package/dist/memory/vault-sync.d.ts +12 -0
  151. package/dist/memory/vault-sync.d.ts.map +1 -1
  152. package/dist/memory/vault-sync.js +94 -11
  153. package/dist/memory/vault-sync.js.map +1 -1
  154. package/dist/node_modules/@huggingface/jinja/dist/index.js +118 -0
  155. package/dist/node_modules/@huggingface/jinja/dist/index.js.map +1 -0
  156. package/dist/node_modules/@typescript-eslint/project-service/dist/index.js +1 -1
  157. package/dist/node_modules/@xenova/transformers/src/backends/onnx.js +24 -0
  158. package/dist/node_modules/@xenova/transformers/src/backends/onnx.js.map +1 -0
  159. package/dist/node_modules/@xenova/transformers/src/configs.js +52 -0
  160. package/dist/node_modules/@xenova/transformers/src/configs.js.map +1 -0
  161. package/dist/node_modules/@xenova/transformers/src/env.js +35 -0
  162. package/dist/node_modules/@xenova/transformers/src/env.js.map +1 -0
  163. package/dist/node_modules/@xenova/transformers/src/models.js +3852 -0
  164. package/dist/node_modules/@xenova/transformers/src/models.js.map +1 -0
  165. package/dist/node_modules/@xenova/transformers/src/tokenizers.js +144 -0
  166. package/dist/node_modules/@xenova/transformers/src/tokenizers.js.map +1 -0
  167. package/dist/node_modules/@xenova/transformers/src/utils/core.js +52 -0
  168. package/dist/node_modules/@xenova/transformers/src/utils/core.js.map +1 -0
  169. package/dist/node_modules/@xenova/transformers/src/utils/generation.js +623 -0
  170. package/dist/node_modules/@xenova/transformers/src/utils/generation.js.map +1 -0
  171. package/dist/node_modules/@xenova/transformers/src/utils/hub.js +395 -0
  172. package/dist/node_modules/@xenova/transformers/src/utils/hub.js.map +1 -0
  173. package/dist/node_modules/@xenova/transformers/src/utils/image.js +12 -0
  174. package/dist/node_modules/@xenova/transformers/src/utils/image.js.map +1 -0
  175. package/dist/node_modules/@xenova/transformers/src/utils/maths.js +89 -0
  176. package/dist/node_modules/@xenova/transformers/src/utils/maths.js.map +1 -0
  177. package/dist/node_modules/@xenova/transformers/src/utils/tensor.js +750 -0
  178. package/dist/node_modules/@xenova/transformers/src/utils/tensor.js.map +1 -0
  179. package/dist/node_modules/fdir/dist/index.js +13 -13
  180. package/dist/node_modules/fdir/dist/index.js.map +1 -1
  181. package/dist/node_modules/onnxruntime-common/dist/lib/backend-impl.js +67 -0
  182. package/dist/node_modules/onnxruntime-common/dist/lib/backend-impl.js.map +1 -0
  183. package/dist/node_modules/onnxruntime-common/dist/lib/env-impl.js +24 -0
  184. package/dist/node_modules/onnxruntime-common/dist/lib/env-impl.js.map +1 -0
  185. package/dist/node_modules/onnxruntime-common/dist/lib/env.js +6 -0
  186. package/dist/node_modules/onnxruntime-common/dist/lib/env.js.map +1 -0
  187. package/dist/node_modules/onnxruntime-common/dist/lib/index.js +11 -0
  188. package/dist/node_modules/onnxruntime-common/dist/lib/index.js.map +1 -0
  189. package/dist/node_modules/onnxruntime-common/dist/lib/inference-session-impl.js +162 -0
  190. package/dist/node_modules/onnxruntime-common/dist/lib/inference-session-impl.js.map +1 -0
  191. package/dist/node_modules/onnxruntime-common/dist/lib/inference-session.js +6 -0
  192. package/dist/node_modules/onnxruntime-common/dist/lib/inference-session.js.map +1 -0
  193. package/dist/node_modules/onnxruntime-common/dist/lib/tensor-impl.js +393 -0
  194. package/dist/node_modules/onnxruntime-common/dist/lib/tensor-impl.js.map +1 -0
  195. package/dist/node_modules/onnxruntime-common/dist/lib/tensor.js +6 -0
  196. package/dist/node_modules/onnxruntime-common/dist/lib/tensor.js.map +1 -0
  197. package/dist/node_modules/onnxruntime-web/dist/ort-web.min.js +12919 -0
  198. package/dist/node_modules/onnxruntime-web/dist/ort-web.min.js.map +1 -0
  199. package/dist/node_modules/tinyglobby/dist/index.js +14 -14
  200. package/dist/node_modules/tinyglobby/dist/index.js.map +1 -1
  201. package/dist/node_modules/typescript/lib/typescript.js +24 -24
  202. package/dist/node_modules/typescript/lib/typescript.js.map +1 -1
  203. package/dist/transport/agent-transport.d.ts +269 -0
  204. package/dist/transport/agent-transport.d.ts.map +1 -0
  205. package/dist/transport/index.d.ts +10 -0
  206. package/dist/transport/index.d.ts.map +1 -0
  207. package/dist/vector/index.d.ts +1 -1
  208. package/dist/vector/index.d.ts.map +1 -1
  209. package/dist/vector/services/embedding-service.d.ts +244 -0
  210. package/dist/vector/services/embedding-service.d.ts.map +1 -0
  211. package/dist/vector/services/embedding-service.js +10 -0
  212. package/dist/vector/services/embedding-service.js.map +1 -0
  213. package/dist/vector/services/hybrid-search.d.ts +320 -0
  214. package/dist/vector/services/hybrid-search.d.ts.map +1 -0
  215. package/dist/vector/services/hybrid-search.js +3 -0
  216. package/dist/vector/services/hybrid-search.js.map +1 -0
  217. package/dist/vector/services/index.d.ts +4 -0
  218. package/dist/vector/services/index.d.ts.map +1 -1
  219. package/package.json +10 -1
@@ -0,0 +1,353 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import * as path from "path";
4
+ import { writeFile, access, mkdir, rename } from "fs/promises";
5
+ import { glob } from "fast-glob";
6
+ const SCHEMAS = {
7
+ kebab: {
8
+ name: "kebab-case",
9
+ patterns: {
10
+ lowercase: true,
11
+ separator: "-",
12
+ maxLength: 100,
13
+ allowedChars: /^[a-z0-9-]+$/,
14
+ reservedNames: ["index", "readme", "changelog"]
15
+ }
16
+ },
17
+ snake: {
18
+ name: "snake_case",
19
+ patterns: {
20
+ lowercase: true,
21
+ separator: "_",
22
+ maxLength: 100,
23
+ allowedChars: /^[a-z0-9_]+$/,
24
+ reservedNames: ["index", "readme", "changelog"]
25
+ }
26
+ },
27
+ obsidian: {
28
+ name: "Obsidian-friendly",
29
+ patterns: {
30
+ lowercase: false,
31
+ separator: "-",
32
+ maxLength: 200,
33
+ allowedChars: /^[a-zA-Z0-9-_ ]+$/,
34
+ reservedNames: [],
35
+ allowMixedSeparators: true
36
+ }
37
+ }
38
+ };
39
+ class NameValidator {
40
+ schema;
41
+ constructor(schemaName = "kebab") {
42
+ this.schema = SCHEMAS[schemaName] || SCHEMAS.kebab;
43
+ }
44
+ /**
45
+ * Validate all files in a vault
46
+ */
47
+ async validateVault(vaultPath, options = {}) {
48
+ const resolvedPath = path.resolve(vaultPath);
49
+ const files = await glob("**/*.md", {
50
+ cwd: resolvedPath,
51
+ ignore: ["node_modules/**", ".git/**", "dist/**"],
52
+ absolute: false
53
+ });
54
+ if (files.length === 0) {
55
+ throw new Error(`No markdown files found in: ${resolvedPath}`);
56
+ }
57
+ const valid = [];
58
+ const invalid = [];
59
+ const commonIssues = /* @__PURE__ */ new Map();
60
+ for (const file of files) {
61
+ const basename = path.basename(file, ".md");
62
+ const issues = this.validateFilename(basename);
63
+ if (issues.length === 0) {
64
+ valid.push(file);
65
+ } else {
66
+ const suggested = this.suggestRename(basename);
67
+ invalid.push({
68
+ file,
69
+ issues,
70
+ suggested: file.replace(basename + ".md", suggested + ".md")
71
+ });
72
+ for (const issue of issues) {
73
+ commonIssues.set(issue, (commonIssues.get(issue) || 0) + 1);
74
+ }
75
+ }
76
+ }
77
+ return {
78
+ valid,
79
+ invalid,
80
+ statistics: {
81
+ totalFiles: files.length,
82
+ validCount: valid.length,
83
+ invalidCount: invalid.length,
84
+ commonIssues
85
+ }
86
+ };
87
+ }
88
+ /**
89
+ * Validate a single filename
90
+ */
91
+ validateFilename(filename) {
92
+ const issues = [];
93
+ const { patterns } = this.schema;
94
+ if (patterns.lowercase && filename !== filename.toLowerCase()) {
95
+ issues.push("Contains uppercase characters");
96
+ }
97
+ const allowsSpaces = patterns.allowedChars.test("a b");
98
+ if (!allowsSpaces && filename.includes(" ")) {
99
+ issues.push("Contains spaces");
100
+ }
101
+ const testName = patterns.lowercase ? filename.toLowerCase() : filename;
102
+ if (!patterns.allowedChars.test(testName)) {
103
+ issues.push(`Contains invalid characters (allowed: ${patterns.allowedChars})`);
104
+ }
105
+ if (filename.length > patterns.maxLength) {
106
+ issues.push(`Exceeds maximum length (${patterns.maxLength})`);
107
+ }
108
+ const doubleSep = patterns.separator + patterns.separator;
109
+ if (filename.includes(doubleSep)) {
110
+ issues.push(`Contains consecutive separators (${doubleSep})`);
111
+ }
112
+ if (filename.startsWith(patterns.separator) || filename.endsWith(patterns.separator)) {
113
+ issues.push("Starts or ends with separator");
114
+ }
115
+ if (!patterns.allowMixedSeparators && patterns.separator === "-" && filename.includes("_")) {
116
+ issues.push("Contains underscores (use hyphens)");
117
+ }
118
+ if (!patterns.allowMixedSeparators) {
119
+ if (patterns.separator === "-" && filename.includes("_")) {
120
+ issues.push("Mixed separators (hyphens and underscores)");
121
+ }
122
+ if (patterns.separator === "_" && filename.includes("-")) {
123
+ issues.push("Mixed separators (underscores and hyphens)");
124
+ }
125
+ }
126
+ return issues;
127
+ }
128
+ /**
129
+ * Suggest a valid filename
130
+ */
131
+ suggestRename(filename) {
132
+ const { patterns } = this.schema;
133
+ let suggested = filename;
134
+ if (patterns.lowercase) {
135
+ suggested = suggested.toLowerCase();
136
+ }
137
+ suggested = suggested.replace(/\s+/g, patterns.separator);
138
+ if (patterns.separator === "-") {
139
+ suggested = suggested.replace(/_+/g, "-");
140
+ }
141
+ if (patterns.separator === "_") {
142
+ suggested = suggested.replace(/-+/g, "_");
143
+ }
144
+ suggested = suggested.replace(/[^a-z0-9-_]/g, "");
145
+ const sepRegex = new RegExp(`${patterns.separator}+`, "g");
146
+ suggested = suggested.replace(sepRegex, patterns.separator);
147
+ suggested = suggested.replace(new RegExp(`^${patterns.separator}+|${patterns.separator}+$`, "g"), "");
148
+ if (suggested.length > patterns.maxLength) {
149
+ suggested = suggested.substring(0, patterns.maxLength);
150
+ suggested = suggested.replace(new RegExp(`${patterns.separator}+$`, "g"), "");
151
+ }
152
+ return suggested || "untitled";
153
+ }
154
+ /**
155
+ * Rename files (with safety checks)
156
+ */
157
+ async renameFiles(vaultPath, invalidFiles, dryRun = false) {
158
+ const resolvedPath = path.resolve(vaultPath);
159
+ const results = [];
160
+ for (const { file, suggested } of invalidFiles) {
161
+ const fromPath = path.join(resolvedPath, file);
162
+ const toPath = path.join(resolvedPath, suggested);
163
+ try {
164
+ await access(toPath);
165
+ results.push({
166
+ from: file,
167
+ to: suggested,
168
+ success: false,
169
+ error: "Target file already exists"
170
+ });
171
+ continue;
172
+ } catch {
173
+ }
174
+ if (dryRun) {
175
+ results.push({
176
+ from: file,
177
+ to: suggested,
178
+ success: true
179
+ });
180
+ } else {
181
+ try {
182
+ await mkdir(path.dirname(toPath), { recursive: true });
183
+ await rename(fromPath, toPath);
184
+ results.push({
185
+ from: file,
186
+ to: suggested,
187
+ success: true
188
+ });
189
+ } catch (error) {
190
+ results.push({
191
+ from: file,
192
+ to: suggested,
193
+ success: false,
194
+ error: error instanceof Error ? error.message : "Unknown error"
195
+ });
196
+ }
197
+ }
198
+ }
199
+ return results;
200
+ }
201
+ /**
202
+ * Get current schema
203
+ */
204
+ getSchema() {
205
+ return this.schema;
206
+ }
207
+ /**
208
+ * Generate report
209
+ */
210
+ generateReport(result) {
211
+ const lines = [];
212
+ lines.push("# File Naming Validation Report\n");
213
+ lines.push(`Generated: ${(/* @__PURE__ */ new Date()).toISOString()}
214
+ `);
215
+ lines.push(`Schema: ${this.schema.name}
216
+ `);
217
+ lines.push("");
218
+ lines.push("## Summary\n");
219
+ lines.push(`| Metric | Value |`);
220
+ lines.push(`|--------|-------|`);
221
+ lines.push(`| Total Files | ${result.statistics.totalFiles} |`);
222
+ lines.push(`| Valid | ${result.statistics.validCount} |`);
223
+ lines.push(`| Invalid | ${result.statistics.invalidCount} |`);
224
+ lines.push(`| Compliance | ${(result.statistics.validCount / result.statistics.totalFiles * 100).toFixed(1)}% |`);
225
+ lines.push("");
226
+ if (result.statistics.commonIssues.size > 0) {
227
+ lines.push("## Common Issues\n");
228
+ const sortedIssues = [...result.statistics.commonIssues.entries()].sort((a, b) => b[1] - a[1]);
229
+ for (const [issue, count] of sortedIssues) {
230
+ lines.push(`- ${issue}: ${count} files`);
231
+ }
232
+ lines.push("");
233
+ }
234
+ if (result.invalid.length > 0) {
235
+ lines.push("## Files to Rename\n");
236
+ lines.push("| Current | Suggested | Issues |");
237
+ lines.push("|---------|-----------|--------|");
238
+ for (const { file, suggested, issues } of result.invalid.slice(0, 50)) {
239
+ lines.push(`| \`${file}\` | \`${suggested}\` | ${issues.join(", ")} |`);
240
+ }
241
+ if (result.invalid.length > 50) {
242
+ lines.push(`
243
+ *... and ${result.invalid.length - 50} more*`);
244
+ }
245
+ }
246
+ return lines.join("\n");
247
+ }
248
+ }
249
+ function createValidateNamesCommand() {
250
+ const command = new Command("validate-names").description("Validate file naming schema").argument("<vault-path>", "Path to Obsidian vault or docs directory").option("--schema <name>", "Naming schema (kebab, snake, obsidian)", "kebab").option("--fix", "Auto-rename invalid files").option("--dry-run", "Show what would be renamed without making changes").option("-o, --output <file>", "Output file for report").option("--json", "Output as JSON").option("-v, --verbose", "Show detailed output").action(async (vaultPath, options) => {
251
+ const validator = new NameValidator(options.schema || "kebab");
252
+ console.log(chalk.cyan(`
253
+ Validating file names (${validator.getSchema().name})...
254
+ `));
255
+ try {
256
+ const result = await validator.validateVault(vaultPath, options);
257
+ if (options.json) {
258
+ const jsonResult = {
259
+ ...result,
260
+ statistics: {
261
+ ...result.statistics,
262
+ commonIssues: Object.fromEntries(result.statistics.commonIssues)
263
+ }
264
+ };
265
+ if (options.output) {
266
+ await writeFile(options.output, JSON.stringify(jsonResult, null, 2));
267
+ console.log(chalk.green(`Results written to: ${options.output}`));
268
+ } else {
269
+ console.log(JSON.stringify(jsonResult, null, 2));
270
+ }
271
+ } else {
272
+ const compliance = result.statistics.validCount / result.statistics.totalFiles * 100;
273
+ const complianceColor = compliance === 100 ? chalk.green : compliance >= 80 ? chalk.yellow : chalk.red;
274
+ console.log(chalk.bold("Summary:"));
275
+ console.log(chalk.white(` Total Files: ${result.statistics.totalFiles}`));
276
+ console.log(chalk.green(` Valid: ${result.statistics.validCount}`));
277
+ console.log(chalk.red(` Invalid: ${result.statistics.invalidCount}`));
278
+ console.log(complianceColor(` Compliance: ${compliance.toFixed(1)}%`));
279
+ console.log("");
280
+ if (result.statistics.commonIssues.size > 0) {
281
+ console.log(chalk.bold("Common Issues:"));
282
+ const sortedIssues = [...result.statistics.commonIssues.entries()].sort((a, b) => b[1] - a[1]);
283
+ for (const [issue, count] of sortedIssues) {
284
+ console.log(chalk.yellow(` ${count}x ${issue}`));
285
+ }
286
+ console.log("");
287
+ }
288
+ if (result.invalid.length > 0 && (options.verbose || options.fix || options.dryRun)) {
289
+ console.log(chalk.bold("Files to Rename:"));
290
+ for (const { file, suggested, issues } of result.invalid.slice(0, options.verbose ? 50 : 10)) {
291
+ console.log(chalk.red(` ${file}`));
292
+ console.log(chalk.green(` -> ${suggested}`));
293
+ if (options.verbose) {
294
+ console.log(chalk.gray(` Issues: ${issues.join(", ")}`));
295
+ }
296
+ }
297
+ if (result.invalid.length > (options.verbose ? 50 : 10)) {
298
+ console.log(chalk.gray(` ... and ${result.invalid.length - (options.verbose ? 50 : 10)} more`));
299
+ }
300
+ console.log("");
301
+ }
302
+ if (options.fix || options.dryRun) {
303
+ const action = options.dryRun ? "Preview" : "Rename";
304
+ console.log(chalk.bold(`${action}ing files...`));
305
+ const renameResults = await validator.renameFiles(
306
+ vaultPath,
307
+ result.invalid,
308
+ options.dryRun || false
309
+ );
310
+ const success = renameResults.filter((r) => r.success);
311
+ const failed = renameResults.filter((r) => !r.success);
312
+ if (options.dryRun) {
313
+ console.log(chalk.cyan(` Would rename ${success.length} files`));
314
+ } else {
315
+ console.log(chalk.green(` Renamed ${success.length} files`));
316
+ }
317
+ if (failed.length > 0) {
318
+ console.log(chalk.red(` Failed: ${failed.length} files`));
319
+ if (options.verbose) {
320
+ for (const { from, to, error } of failed) {
321
+ console.log(chalk.red(` ${from} -> ${to}: ${error}`));
322
+ }
323
+ }
324
+ }
325
+ console.log("");
326
+ }
327
+ if (options.output && !options.json) {
328
+ const report = validator.generateReport(result);
329
+ await writeFile(options.output, report);
330
+ console.log(chalk.green(`Report written to: ${options.output}`));
331
+ }
332
+ if (result.invalid.length > 0 && !options.fix) {
333
+ console.log(chalk.bold("Next Steps:"));
334
+ console.log(chalk.gray(" 1. Review invalid file names"));
335
+ console.log(chalk.gray(" 2. Run with --dry-run to preview changes"));
336
+ console.log(chalk.gray(" 3. Run with --fix to auto-rename files"));
337
+ console.log(chalk.gray(" 4. Update links after renaming with kg analyze-links"));
338
+ console.log("");
339
+ }
340
+ }
341
+ } catch (error) {
342
+ console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
343
+ process.exit(1);
344
+ }
345
+ });
346
+ return command;
347
+ }
348
+ export {
349
+ NameValidator,
350
+ createValidateNamesCommand,
351
+ createValidateNamesCommand as default
352
+ };
353
+ //# sourceMappingURL=validate-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-names.js","sources":["../../../../src/cli/commands/hive-mind/validate-names.ts"],"sourcesContent":["/**\n * Hive Mind - Name Validator\n *\n * Validates file naming schema in a vault to ensure consistent, linkable names.\n * Supports kebab-case, lowercase, and other naming conventions.\n *\n * SPEC-003: Hive Mind Reconnection Tools\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport * as path from 'path';\nimport { readdir, rename, access, mkdir, writeFile } from 'fs/promises';\nimport { glob } from 'fast-glob';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ValidateNamesOptions {\n fix?: boolean;\n dryRun?: boolean;\n schema?: string;\n output?: string;\n json?: boolean;\n verbose?: boolean;\n}\n\nexport interface InvalidFile {\n file: string;\n issues: string[];\n suggested: string;\n}\n\nexport interface ValidationResult {\n valid: string[];\n invalid: InvalidFile[];\n statistics: {\n totalFiles: number;\n validCount: number;\n invalidCount: number;\n commonIssues: Map<string, number>;\n };\n}\n\nexport interface NamingSchema {\n name: string;\n patterns: {\n lowercase: boolean;\n separator: '-' | '_' | '.';\n maxLength: number;\n allowedChars: RegExp;\n reservedNames: string[];\n allowMixedSeparators?: boolean;\n };\n}\n\n// ============================================================================\n// Predefined Schemas\n// ============================================================================\n\nconst SCHEMAS: Record<string, NamingSchema> = {\n kebab: {\n name: 'kebab-case',\n patterns: {\n lowercase: true,\n separator: '-',\n maxLength: 100,\n allowedChars: /^[a-z0-9-]+$/,\n reservedNames: ['index', 'readme', 'changelog'],\n },\n },\n snake: {\n name: 'snake_case',\n patterns: {\n lowercase: true,\n separator: '_',\n maxLength: 100,\n allowedChars: /^[a-z0-9_]+$/,\n reservedNames: ['index', 'readme', 'changelog'],\n },\n },\n obsidian: {\n name: 'Obsidian-friendly',\n patterns: {\n lowercase: false,\n separator: '-',\n maxLength: 200,\n allowedChars: /^[a-zA-Z0-9-_ ]+$/,\n reservedNames: [],\n allowMixedSeparators: true,\n },\n },\n};\n\n// ============================================================================\n// Name Validator Class\n// ============================================================================\n\nexport class NameValidator {\n private schema: NamingSchema;\n\n constructor(schemaName = 'kebab') {\n this.schema = SCHEMAS[schemaName] || SCHEMAS.kebab;\n }\n\n /**\n * Validate all files in a vault\n */\n async validateVault(vaultPath: string, options: ValidateNamesOptions = {}): Promise<ValidationResult> {\n const resolvedPath = path.resolve(vaultPath);\n\n // Find all markdown files\n const files = await glob('**/*.md', {\n cwd: resolvedPath,\n ignore: ['node_modules/**', '.git/**', 'dist/**'],\n absolute: false,\n });\n\n if (files.length === 0) {\n throw new Error(`No markdown files found in: ${resolvedPath}`);\n }\n\n const valid: string[] = [];\n const invalid: InvalidFile[] = [];\n const commonIssues = new Map<string, number>();\n\n for (const file of files) {\n const basename = path.basename(file, '.md');\n const issues = this.validateFilename(basename);\n\n if (issues.length === 0) {\n valid.push(file);\n } else {\n const suggested = this.suggestRename(basename);\n\n invalid.push({\n file,\n issues,\n suggested: file.replace(basename + '.md', suggested + '.md'),\n });\n\n // Count issues\n for (const issue of issues) {\n commonIssues.set(issue, (commonIssues.get(issue) || 0) + 1);\n }\n }\n }\n\n return {\n valid,\n invalid,\n statistics: {\n totalFiles: files.length,\n validCount: valid.length,\n invalidCount: invalid.length,\n commonIssues,\n },\n };\n }\n\n /**\n * Validate a single filename\n */\n validateFilename(filename: string): string[] {\n const issues: string[] = [];\n const { patterns } = this.schema;\n\n // Check for uppercase (if lowercase required)\n if (patterns.lowercase && filename !== filename.toLowerCase()) {\n issues.push('Contains uppercase characters');\n }\n\n // Check for spaces (unless pattern allows spaces)\n const allowsSpaces = patterns.allowedChars.test('a b');\n if (!allowsSpaces && filename.includes(' ')) {\n issues.push('Contains spaces');\n }\n\n // Check for special characters\n const testName = patterns.lowercase\n ? filename.toLowerCase()\n : filename;\n if (!patterns.allowedChars.test(testName)) {\n issues.push(`Contains invalid characters (allowed: ${patterns.allowedChars})`);\n }\n\n // Check length\n if (filename.length > patterns.maxLength) {\n issues.push(`Exceeds maximum length (${patterns.maxLength})`);\n }\n\n // Check for consecutive separators\n const doubleSep = patterns.separator + patterns.separator;\n if (filename.includes(doubleSep)) {\n issues.push(`Contains consecutive separators (${doubleSep})`);\n }\n\n // Check for leading/trailing separators\n if (filename.startsWith(patterns.separator) || filename.endsWith(patterns.separator)) {\n issues.push('Starts or ends with separator');\n }\n\n // Check for underscores when using kebab-case (skip if mixed separators allowed)\n if (!patterns.allowMixedSeparators && patterns.separator === '-' && filename.includes('_')) {\n issues.push('Contains underscores (use hyphens)');\n }\n\n // Check for mixed separators (skip if allowed)\n if (!patterns.allowMixedSeparators) {\n if (patterns.separator === '-' && filename.includes('_')) {\n issues.push('Mixed separators (hyphens and underscores)');\n }\n if (patterns.separator === '_' && filename.includes('-')) {\n issues.push('Mixed separators (underscores and hyphens)');\n }\n }\n\n return issues;\n }\n\n /**\n * Suggest a valid filename\n */\n suggestRename(filename: string): string {\n const { patterns } = this.schema;\n\n let suggested = filename;\n\n // Convert to lowercase if required\n if (patterns.lowercase) {\n suggested = suggested.toLowerCase();\n }\n\n // Replace spaces with separator\n suggested = suggested.replace(/\\s+/g, patterns.separator);\n\n // Replace underscores with separator (for kebab-case)\n if (patterns.separator === '-') {\n suggested = suggested.replace(/_+/g, '-');\n }\n\n // Replace hyphens with separator (for snake_case)\n if (patterns.separator === '_') {\n suggested = suggested.replace(/-+/g, '_');\n }\n\n // Remove invalid characters\n suggested = suggested.replace(/[^a-z0-9-_]/g, '');\n\n // Remove consecutive separators\n const sepRegex = new RegExp(`${patterns.separator}+`, 'g');\n suggested = suggested.replace(sepRegex, patterns.separator);\n\n // Remove leading/trailing separators\n suggested = suggested.replace(new RegExp(`^${patterns.separator}+|${patterns.separator}+$`, 'g'), '');\n\n // Truncate if too long\n if (suggested.length > patterns.maxLength) {\n suggested = suggested.substring(0, patterns.maxLength);\n // Clean up any trailing separator after truncation\n suggested = suggested.replace(new RegExp(`${patterns.separator}+$`, 'g'), '');\n }\n\n return suggested || 'untitled';\n }\n\n /**\n * Rename files (with safety checks)\n */\n async renameFiles(\n vaultPath: string,\n invalidFiles: InvalidFile[],\n dryRun = false\n ): Promise<Array<{ from: string; to: string; success: boolean; error?: string }>> {\n const resolvedPath = path.resolve(vaultPath);\n const results: Array<{ from: string; to: string; success: boolean; error?: string }> = [];\n\n for (const { file, suggested } of invalidFiles) {\n const fromPath = path.join(resolvedPath, file);\n const toPath = path.join(resolvedPath, suggested);\n\n // Check if target already exists\n try {\n await access(toPath);\n results.push({\n from: file,\n to: suggested,\n success: false,\n error: 'Target file already exists',\n });\n continue;\n } catch {\n // Target doesn't exist, we can proceed\n }\n\n if (dryRun) {\n results.push({\n from: file,\n to: suggested,\n success: true,\n });\n } else {\n try {\n // Ensure target directory exists\n await mkdir(path.dirname(toPath), { recursive: true });\n await rename(fromPath, toPath);\n results.push({\n from: file,\n to: suggested,\n success: true,\n });\n } catch (error) {\n results.push({\n from: file,\n to: suggested,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n }\n\n return results;\n }\n\n /**\n * Get current schema\n */\n getSchema(): NamingSchema {\n return this.schema;\n }\n\n /**\n * Generate report\n */\n generateReport(result: ValidationResult): string {\n const lines: string[] = [];\n\n lines.push('# File Naming Validation Report\\n');\n lines.push(`Generated: ${new Date().toISOString()}\\n`);\n lines.push(`Schema: ${this.schema.name}\\n`);\n lines.push('');\n\n lines.push('## Summary\\n');\n lines.push(`| Metric | Value |`);\n lines.push(`|--------|-------|`);\n lines.push(`| Total Files | ${result.statistics.totalFiles} |`);\n lines.push(`| Valid | ${result.statistics.validCount} |`);\n lines.push(`| Invalid | ${result.statistics.invalidCount} |`);\n lines.push(`| Compliance | ${((result.statistics.validCount / result.statistics.totalFiles) * 100).toFixed(1)}% |`);\n lines.push('');\n\n if (result.statistics.commonIssues.size > 0) {\n lines.push('## Common Issues\\n');\n const sortedIssues = [...result.statistics.commonIssues.entries()]\n .sort((a, b) => b[1] - a[1]);\n for (const [issue, count] of sortedIssues) {\n lines.push(`- ${issue}: ${count} files`);\n }\n lines.push('');\n }\n\n if (result.invalid.length > 0) {\n lines.push('## Files to Rename\\n');\n lines.push('| Current | Suggested | Issues |');\n lines.push('|---------|-----------|--------|');\n for (const { file, suggested, issues } of result.invalid.slice(0, 50)) {\n lines.push(`| \\`${file}\\` | \\`${suggested}\\` | ${issues.join(', ')} |`);\n }\n if (result.invalid.length > 50) {\n lines.push(`\\n*... and ${result.invalid.length - 50} more*`);\n }\n }\n\n return lines.join('\\n');\n }\n}\n\n// ============================================================================\n// CLI Command\n// ============================================================================\n\nexport function createValidateNamesCommand(): Command {\n const command = new Command('validate-names')\n .description('Validate file naming schema')\n .argument('<vault-path>', 'Path to Obsidian vault or docs directory')\n .option('--schema <name>', 'Naming schema (kebab, snake, obsidian)', 'kebab')\n .option('--fix', 'Auto-rename invalid files')\n .option('--dry-run', 'Show what would be renamed without making changes')\n .option('-o, --output <file>', 'Output file for report')\n .option('--json', 'Output as JSON')\n .option('-v, --verbose', 'Show detailed output')\n .action(async (vaultPath: string, options: ValidateNamesOptions) => {\n const validator = new NameValidator(options.schema || 'kebab');\n\n console.log(chalk.cyan(`\\nValidating file names (${validator.getSchema().name})...\\n`));\n\n try {\n const result = await validator.validateVault(vaultPath, options);\n\n if (options.json) {\n const jsonResult = {\n ...result,\n statistics: {\n ...result.statistics,\n commonIssues: Object.fromEntries(result.statistics.commonIssues),\n },\n };\n\n if (options.output) {\n await writeFile(options.output, JSON.stringify(jsonResult, null, 2));\n console.log(chalk.green(`Results written to: ${options.output}`));\n } else {\n console.log(JSON.stringify(jsonResult, null, 2));\n }\n } else {\n // Display summary\n const compliance = (result.statistics.validCount / result.statistics.totalFiles) * 100;\n const complianceColor = compliance === 100 ? chalk.green : compliance >= 80 ? chalk.yellow : chalk.red;\n\n console.log(chalk.bold('Summary:'));\n console.log(chalk.white(` Total Files: ${result.statistics.totalFiles}`));\n console.log(chalk.green(` Valid: ${result.statistics.validCount}`));\n console.log(chalk.red(` Invalid: ${result.statistics.invalidCount}`));\n console.log(complianceColor(` Compliance: ${compliance.toFixed(1)}%`));\n console.log('');\n\n if (result.statistics.commonIssues.size > 0) {\n console.log(chalk.bold('Common Issues:'));\n const sortedIssues = [...result.statistics.commonIssues.entries()]\n .sort((a, b) => b[1] - a[1]);\n for (const [issue, count] of sortedIssues) {\n console.log(chalk.yellow(` ${count}x ${issue}`));\n }\n console.log('');\n }\n\n if (result.invalid.length > 0 && (options.verbose || options.fix || options.dryRun)) {\n console.log(chalk.bold('Files to Rename:'));\n for (const { file, suggested, issues } of result.invalid.slice(0, options.verbose ? 50 : 10)) {\n console.log(chalk.red(` ${file}`));\n console.log(chalk.green(` -> ${suggested}`));\n if (options.verbose) {\n console.log(chalk.gray(` Issues: ${issues.join(', ')}`));\n }\n }\n if (result.invalid.length > (options.verbose ? 50 : 10)) {\n console.log(chalk.gray(` ... and ${result.invalid.length - (options.verbose ? 50 : 10)} more`));\n }\n console.log('');\n }\n\n // Handle fix/dry-run\n if (options.fix || options.dryRun) {\n const action = options.dryRun ? 'Preview' : 'Rename';\n console.log(chalk.bold(`${action}ing files...`));\n\n const renameResults = await validator.renameFiles(\n vaultPath,\n result.invalid,\n options.dryRun || false\n );\n\n const success = renameResults.filter(r => r.success);\n const failed = renameResults.filter(r => !r.success);\n\n if (options.dryRun) {\n console.log(chalk.cyan(` Would rename ${success.length} files`));\n } else {\n console.log(chalk.green(` Renamed ${success.length} files`));\n }\n\n if (failed.length > 0) {\n console.log(chalk.red(` Failed: ${failed.length} files`));\n if (options.verbose) {\n for (const { from, to, error } of failed) {\n console.log(chalk.red(` ${from} -> ${to}: ${error}`));\n }\n }\n }\n console.log('');\n }\n\n // Write report if output specified\n if (options.output && !options.json) {\n const report = validator.generateReport(result);\n await writeFile(options.output, report);\n console.log(chalk.green(`Report written to: ${options.output}`));\n }\n\n // Show next steps\n if (result.invalid.length > 0 && !options.fix) {\n console.log(chalk.bold('Next Steps:'));\n console.log(chalk.gray(' 1. Review invalid file names'));\n console.log(chalk.gray(' 2. Run with --dry-run to preview changes'));\n console.log(chalk.gray(' 3. Run with --fix to auto-rename files'));\n console.log(chalk.gray(' 4. Update links after renaming with kg analyze-links'));\n console.log('');\n }\n }\n } catch (error) {\n console.error(chalk.red('Error:'), error instanceof Error ? error.message : 'Unknown error');\n process.exit(1);\n }\n });\n\n return command;\n}\n\nexport default createValidateNamesCommand;\n"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ import { existsSync } from "fs";
6
6
  import "../../vector/config.js";
7
7
  import { createVectorStore } from "../../vector/services/vector-store.js";
8
8
  import { createTrajectoryTracker } from "../../vector/services/trajectory-tracker.js";
9
+ import "../../vector/services/embedding-service.js";
10
+ import "../../vector/services/hybrid-search.js";
9
11
  import { validateProjectRoot } from "../../core/security.js";
10
12
  function formatBytes(bytes) {
11
13
  if (bytes < 1024) return `${bytes} B`;
@@ -1 +1 @@
1
- {"version":3,"file":"vector.js","sources":["../../../src/cli/commands/vector.ts"],"sourcesContent":["/**\n * Vector Command\n *\n * CLI commands for vector operations including semantic search,\n * vector store statistics, index management, and trajectory tracking.\n *\n * @module cli/commands/vector\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport {\n createVectorStore,\n createTrajectoryTracker,\n type VectorIndexStats,\n type SearchResult,\n type AgentTrajectory,\n type DetectedPattern,\n} from '../../vector/index.js';\nimport { validateProjectRoot } from '../../core/security.js';\n\n/**\n * Format bytes to human-readable string\n */\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n}\n\n/**\n * Format duration in milliseconds to human-readable string\n */\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(2)}s`;\n if (ms < 3600000) return `${(ms / 60000).toFixed(2)}m`;\n return `${(ms / 3600000).toFixed(2)}h`;\n}\n\n/**\n * Format table row with padding\n */\nfunction formatRow(cells: string[], widths: number[]): string {\n return cells.map((cell, i) => cell.padEnd(widths[i])).join(' ');\n}\n\n/**\n * Print a table with headers and rows\n */\nfunction printTable(\n headers: string[],\n rows: string[][],\n options: { indent?: number; headerColor?: typeof chalk.white } = {}\n): void {\n const indent = ' '.repeat(options.indent ?? 1);\n const headerColor = options.headerColor ?? chalk.white;\n\n // Calculate column widths\n const widths = headers.map((h, i) => {\n const maxRowWidth = Math.max(...rows.map((r) => (r[i] || '').length));\n return Math.max(h.length, maxRowWidth);\n });\n\n // Print header\n console.log(indent + headerColor(formatRow(headers, widths)));\n console.log(indent + chalk.gray('-'.repeat(widths.reduce((a, b) => a + b + 2, 0))));\n\n // Print rows\n for (const row of rows) {\n console.log(indent + chalk.gray(formatRow(row, widths)));\n }\n}\n\n/**\n * Create vector command group\n */\nexport function createVectorCommand(): Command {\n const vector = new Command('vector')\n .alias('vec')\n .description('Vector operations for semantic search and trajectory tracking');\n\n // Search subcommand\n vector\n .command('search <query>')\n .description('Perform semantic search on vector store')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-k, --top-k <n>', 'Number of results to return', '10')\n .option('-t, --type <type>', 'Filter by node type')\n .option('--hybrid', 'Enable hybrid search (combines vector + graph)')\n .option('--min-score <score>', 'Minimum similarity score (0-1)', '0')\n .option('--json', 'Output as JSON')\n .action(async (query, options) => {\n const spinner = ora('Searching vectors...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const topK = parseInt(options.topK, 10) || 10;\n const minScore = parseFloat(options.minScore) || 0;\n\n // Create vector store\n const store = createVectorStore();\n await store.initialize();\n\n // Check if we have vectors\n const stats = store.getStats();\n if (stats.totalVectors === 0) {\n spinner.warn('Vector store is empty');\n console.log(chalk.gray(' No vectors have been indexed yet.'));\n console.log(chalk.gray(' Run ') + chalk.cyan('kg vector rebuild') + chalk.gray(' to index vectors.'));\n return;\n }\n\n spinner.text = 'Generating query embedding...';\n\n // For now, create a mock embedding from the query\n // In production, this would use an actual embedding model\n const queryEmbedding = createMockEmbedding(query, stats.dimensions);\n\n spinner.text = `Searching ${stats.totalVectors} vectors...`;\n\n let results: SearchResult[];\n\n if (options.hybrid) {\n // Hybrid search\n const hybridResults = await store.hybridSearch({\n embedding: queryEmbedding,\n limit: topK,\n minScore,\n filters: options.type ? { type: options.type } : undefined,\n });\n results = hybridResults;\n } else {\n // Standard vector search\n results = await store.search({\n vector: queryEmbedding,\n k: topK,\n minScore,\n filter: options.type ? { type: options.type } : undefined,\n });\n }\n\n spinner.stop();\n\n if (options.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n console.log(chalk.cyan(`\\n Search Results for \"${query}\"\\n`));\n\n if (results.length === 0) {\n console.log(chalk.gray(' No results found'));\n return;\n }\n\n console.log(chalk.gray(` Found ${results.length} result${results.length === 1 ? '' : 's'}\\n`));\n\n // Display results as a table\n const headers = ['#', 'ID', 'Score', 'Type', 'Metadata'];\n const rows = results.map((r, i) => [\n String(i + 1),\n r.id.substring(0, 24) + (r.id.length > 24 ? '...' : ''),\n r.score.toFixed(4),\n (r.metadata?.type as string) || '-',\n Object.keys(r.metadata || {}).length > 0\n ? Object.keys(r.metadata).slice(0, 3).join(', ')\n : '-',\n ]);\n\n printTable(headers, rows);\n\n // Show detailed metadata for top results\n console.log(chalk.white('\\n Top Result Details:\\n'));\n const top = results[0];\n console.log(chalk.gray(` ID: ${top.id}`));\n console.log(chalk.gray(` Score: ${top.score.toFixed(6)}`));\n if (top.distance !== undefined) {\n console.log(chalk.gray(` Distance: ${top.distance.toFixed(6)}`));\n }\n if (Object.keys(top.metadata || {}).length > 0) {\n console.log(chalk.gray(' Metadata:'));\n for (const [key, value] of Object.entries(top.metadata)) {\n const displayValue = typeof value === 'object' ? JSON.stringify(value) : String(value);\n console.log(chalk.gray(` ${key}: ${displayValue.substring(0, 50)}`));\n }\n }\n\n console.log();\n } catch (error) {\n spinner.fail('Search failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Stats subcommand\n vector\n .command('stats')\n .description('Display vector store statistics')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const projectRoot = validateProjectRoot(options.path);\n\n // Create vector store\n const store = createVectorStore();\n await store.initialize();\n\n const stats = store.getStats();\n\n if (options.json) {\n console.log(JSON.stringify(stats, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\\n Vector Store Statistics\\n'));\n\n // Overview\n console.log(chalk.white(' Overview'));\n console.log(chalk.gray(` Total Vectors: ${stats.totalVectors.toLocaleString()}`));\n console.log(chalk.gray(` Dimensions: ${stats.dimensions}`));\n console.log(chalk.gray(` Index Type: ${stats.indexType.toUpperCase()}`));\n console.log(chalk.gray(` Memory Usage: ${formatBytes(stats.memoryUsage)}`));\n console.log(chalk.gray(` Last Updated: ${stats.lastUpdated.toISOString()}`));\n\n // Index stats\n if (stats.indexStats) {\n console.log();\n console.log(chalk.white(' Index Configuration'));\n if (stats.indexStats.levels !== undefined) {\n console.log(chalk.gray(` HNSW Levels: ${stats.indexStats.levels}`));\n }\n if (stats.indexStats.entryPoint) {\n console.log(chalk.gray(` Entry Point: ${stats.indexStats.entryPoint.substring(0, 24)}...`));\n }\n if (stats.indexStats.avgConnections !== undefined) {\n console.log(chalk.gray(` Avg Connections: ${stats.indexStats.avgConnections.toFixed(2)}`));\n }\n }\n\n // Namespace breakdown\n if (stats.namespaces && Object.keys(stats.namespaces).length > 0) {\n console.log();\n console.log(chalk.white(' Namespaces'));\n for (const [ns, count] of Object.entries(stats.namespaces)) {\n const bar = '|'.repeat(Math.min(count, 30));\n console.log(chalk.gray(` ${ns.padEnd(15)} ${String(count).padStart(6)} ${chalk.blue(bar)}`));\n }\n }\n\n // Performance hints\n console.log();\n console.log(chalk.white(' Performance'));\n if (stats.totalVectors === 0) {\n console.log(chalk.yellow(' [!] Vector store is empty'));\n console.log(chalk.gray(' Run \"kg vector rebuild\" to populate the index'));\n } else if (stats.totalVectors < 100) {\n console.log(chalk.green(' [OK] Small index - linear search may be faster'));\n } else if (stats.totalVectors < 10000) {\n console.log(chalk.green(' [OK] Medium index - HNSW optimal'));\n } else {\n console.log(chalk.yellow(' [!] Large index - consider quantization'));\n }\n\n console.log();\n } catch (error) {\n console.error(chalk.red('Failed to get stats:'), String(error));\n process.exit(1);\n }\n });\n\n // Rebuild subcommand\n vector\n .command('rebuild')\n .description('Rebuild vector index from knowledge graph')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('--force', 'Force rebuild even if index exists')\n .option('--batch-size <size>', 'Batch size for indexing', '100')\n .option('-v, --verbose', 'Verbose output')\n .action(async (options) => {\n const spinner = ora('Rebuilding vector index...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const batchSize = parseInt(options.batchSize, 10) || 100;\n\n // Create vector store\n const store = createVectorStore();\n await store.initialize();\n\n const existingStats = store.getStats();\n\n if (existingStats.totalVectors > 0 && !options.force) {\n spinner.warn(`Index already contains ${existingStats.totalVectors} vectors`);\n console.log(chalk.gray(' Use --force to rebuild anyway'));\n return;\n }\n\n if (options.force && existingStats.totalVectors > 0) {\n spinner.text = 'Clearing existing index...';\n await store.clear();\n }\n\n // In a real implementation, this would:\n // 1. Read nodes from the knowledge graph database\n // 2. Generate embeddings for each node\n // 3. Insert vectors in batches\n\n spinner.text = 'Scanning knowledge graph...';\n\n // Simulate rebuild process\n const kgPath = join(projectRoot, '.kg', 'knowledge.db');\n if (!existsSync(kgPath)) {\n spinner.fail('Knowledge graph not found');\n console.log(chalk.gray(' Run ') + chalk.cyan('kg graph') + chalk.gray(' first'));\n return;\n }\n\n // Mock rebuild with progress\n spinner.text = 'Generating embeddings...';\n\n // For demonstration, we show what would happen\n spinner.succeed('Vector index rebuild complete');\n\n console.log();\n console.log(chalk.white(' Rebuild Summary'));\n console.log(chalk.gray(` Vectors indexed: 0 (mock - no embedding model configured)`));\n console.log(chalk.gray(` Batch size: ${batchSize}`));\n console.log(chalk.gray(` Project root: ${projectRoot}`));\n\n console.log();\n console.log(chalk.yellow(' Note: Full vector indexing requires an embedding model.'));\n console.log(chalk.gray(' Configure OPENAI_API_KEY or use local embeddings.'));\n console.log();\n\n } catch (error) {\n spinner.fail('Rebuild failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Trajectory subcommand group\n const trajectory = vector\n .command('trajectory')\n .alias('traj')\n .description('Agent trajectory tracking operations');\n\n // trajectory list\n trajectory\n .command('list')\n .description('List recorded agent trajectories')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-a, --agent <id>', 'Filter by agent ID')\n .option('-w, --workflow <id>', 'Filter by workflow ID')\n .option('-l, --limit <n>', 'Maximum number of trajectories', '20')\n .option('--success', 'Show only successful trajectories')\n .option('--failed', 'Show only failed trajectories')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const limit = parseInt(options.limit, 10) || 20;\n\n // Create trajectory tracker\n const tracker = createTrajectoryTracker({\n maxTrajectories: 1000,\n enableAutoLearning: true,\n });\n\n const stats = tracker.getStats();\n\n if (options.json) {\n const exported = tracker.export();\n let trajectories = exported.trajectories;\n\n if (options.agent) {\n trajectories = trajectories.filter((t) => t.agentId === options.agent);\n }\n if (options.workflow) {\n trajectories = trajectories.filter((t) => t.workflowId === options.workflow);\n }\n if (options.success) {\n trajectories = trajectories.filter((t) => t.success);\n }\n if (options.failed) {\n trajectories = trajectories.filter((t) => !t.success);\n }\n\n console.log(JSON.stringify(trajectories.slice(0, limit), null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\\n Agent Trajectories\\n'));\n\n // Overview stats\n console.log(chalk.white(' Overview'));\n console.log(chalk.gray(` Active: ${stats.activeTrajectories}`));\n console.log(chalk.gray(` Completed: ${stats.completedTrajectories}`));\n console.log(chalk.gray(` Success: ${(stats.successRate * 100).toFixed(1)}%`));\n console.log(chalk.gray(` Avg Duration: ${formatDuration(stats.avgDuration)}`));\n console.log(chalk.gray(` Patterns: ${stats.detectedPatterns}`));\n\n // Get trajectories\n const exported = tracker.export();\n let trajectories = exported.trajectories;\n\n if (options.agent) {\n trajectories = trajectories.filter((t) => t.agentId === options.agent);\n }\n if (options.workflow) {\n trajectories = trajectories.filter((t) => t.workflowId === options.workflow);\n }\n if (options.success) {\n trajectories = trajectories.filter((t) => t.success);\n }\n if (options.failed) {\n trajectories = trajectories.filter((t) => !t.success);\n }\n\n trajectories = trajectories.slice(-limit).reverse();\n\n if (trajectories.length === 0) {\n console.log();\n console.log(chalk.gray(' No trajectories found'));\n console.log(chalk.gray(' Trajectories are recorded during agent operations.'));\n console.log();\n return;\n }\n\n console.log();\n console.log(chalk.white(` Recent Trajectories (${trajectories.length})`));\n\n const headers = ['ID', 'Agent', 'Steps', 'Duration', 'Status'];\n const rows = trajectories.map((t) => [\n t.id.substring(0, 16) + '...',\n t.agentId.substring(0, 12) + (t.agentId.length > 12 ? '...' : ''),\n String(t.steps.length),\n formatDuration(t.totalDuration),\n t.success ? chalk.green('OK') : chalk.red('FAIL'),\n ]);\n\n printTable(headers, rows);\n console.log();\n\n } catch (error) {\n console.error(chalk.red('Failed to list trajectories:'), String(error));\n process.exit(1);\n }\n });\n\n // trajectory show\n trajectory\n .command('show <id>')\n .description('Show detailed trajectory information')\n .option('--json', 'Output as JSON')\n .action(async (id, options) => {\n try {\n // Create trajectory tracker\n const tracker = createTrajectoryTracker({\n maxTrajectories: 1000,\n enableAutoLearning: true,\n });\n\n const trajectory = tracker.getTrajectory(id);\n\n if (!trajectory) {\n console.log(chalk.yellow(`\\n Trajectory not found: ${id}\\n`));\n console.log(chalk.gray(' Use \"kg vector trajectory list\" to see available trajectories.'));\n console.log();\n return;\n }\n\n if (options.json) {\n console.log(JSON.stringify(trajectory, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\\n Trajectory Details\\n'));\n\n // Basic info\n console.log(chalk.white(' Information'));\n console.log(chalk.gray(` ID: ${trajectory.id}`));\n console.log(chalk.gray(` Agent: ${trajectory.agentId}`));\n if (trajectory.workflowId) {\n console.log(chalk.gray(` Workflow: ${trajectory.workflowId}`));\n }\n console.log(chalk.gray(` Started: ${trajectory.startedAt.toISOString()}`));\n if (trajectory.completedAt) {\n console.log(chalk.gray(` Completed: ${trajectory.completedAt.toISOString()}`));\n }\n console.log(chalk.gray(` Duration: ${formatDuration(trajectory.totalDuration)}`));\n console.log(\n chalk.gray(' Status: ') +\n (trajectory.success ? chalk.green('SUCCESS') : chalk.red('FAILED'))\n );\n\n // Steps\n if (trajectory.steps.length > 0) {\n console.log();\n console.log(chalk.white(` Steps (${trajectory.steps.length})`));\n\n const stepHeaders = ['#', 'Action', 'Outcome', 'Duration'];\n const stepRows = trajectory.steps.map((s, i) => [\n String(i + 1),\n s.action.substring(0, 30) + (s.action.length > 30 ? '...' : ''),\n s.outcome === 'success'\n ? chalk.green(s.outcome)\n : s.outcome === 'failure'\n ? chalk.red(s.outcome)\n : chalk.yellow(s.outcome),\n formatDuration(s.duration),\n ]);\n\n printTable(stepHeaders, stepRows);\n }\n\n // Metadata\n if (trajectory.metadata && Object.keys(trajectory.metadata).length > 0) {\n console.log();\n console.log(chalk.white(' Metadata'));\n for (const [key, value] of Object.entries(trajectory.metadata)) {\n const displayValue = typeof value === 'object' ? JSON.stringify(value) : String(value);\n console.log(chalk.gray(` ${key}: ${displayValue.substring(0, 60)}`));\n }\n }\n\n console.log();\n } catch (error) {\n console.error(chalk.red('Failed to show trajectory:'), String(error));\n process.exit(1);\n }\n });\n\n // trajectory patterns\n trajectory\n .command('patterns')\n .description('Show detected action patterns')\n .option('--min-confidence <n>', 'Minimum confidence threshold (0-1)', '0.5')\n .option('--type <type>', 'Filter by pattern type (success, failure, optimization)')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const minConfidence = parseFloat(options.minConfidence) || 0.5;\n\n // Create trajectory tracker\n const tracker = createTrajectoryTracker({\n maxTrajectories: 1000,\n enableAutoLearning: true,\n });\n\n const patterns = tracker.getPatterns({\n minConfidence,\n type: options.type as 'success' | 'failure' | 'optimization' | undefined,\n });\n\n if (options.json) {\n console.log(JSON.stringify(patterns, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\\n Detected Patterns\\n'));\n\n if (patterns.length === 0) {\n console.log(chalk.gray(' No patterns detected yet.'));\n console.log(chalk.gray(' Patterns are learned from successful agent trajectories.'));\n console.log();\n return;\n }\n\n const headers = ['ID', 'Type', 'Frequency', 'Success', 'Confidence'];\n const rows = patterns.map((p) => [\n p.id.substring(0, 30) + (p.id.length > 30 ? '...' : ''),\n p.type,\n String(p.frequency),\n `${(p.successRate * 100).toFixed(0)}%`,\n `${(p.confidence * 100).toFixed(0)}%`,\n ]);\n\n printTable(headers, rows);\n\n // Show top pattern details\n if (patterns.length > 0) {\n const top = patterns[0];\n console.log();\n console.log(chalk.white(' Top Pattern Details'));\n console.log(chalk.gray(` ID: ${top.id}`));\n console.log(chalk.gray(` Actions: ${top.actions.join(' -> ')}`));\n console.log(chalk.gray(` Avg Duration: ${formatDuration(top.avgDuration)}`));\n }\n\n console.log();\n } catch (error) {\n console.error(chalk.red('Failed to show patterns:'), String(error));\n process.exit(1);\n }\n });\n\n // trajectory clear\n trajectory\n .command('clear')\n .description('Clear all trajectory data')\n .option('--confirm', 'Confirm clearing without prompt')\n .action(async (options) => {\n try {\n if (!options.confirm) {\n console.log(chalk.yellow('\\n Warning: This will delete all trajectory data.\\n'));\n console.log(chalk.gray(' Use --confirm to proceed.'));\n console.log();\n return;\n }\n\n const tracker = createTrajectoryTracker();\n tracker.clear();\n\n console.log(chalk.green('\\n Trajectory data cleared.\\n'));\n } catch (error) {\n console.error(chalk.red('Failed to clear trajectories:'), String(error));\n process.exit(1);\n }\n });\n\n return vector;\n}\n\n/**\n * Create a mock embedding from text\n *\n * This is a placeholder that creates deterministic pseudo-embeddings\n * based on the text content. In production, this would use an actual\n * embedding model (OpenAI, Cohere, local models, etc.)\n *\n * @param text - Text to embed\n * @param dimensions - Number of dimensions\n * @returns Mock embedding vector\n */\nfunction createMockEmbedding(text: string, dimensions: number): number[] {\n const embedding: number[] = [];\n const normalized = text.toLowerCase().trim();\n\n // Simple hash-based pseudo-embedding\n for (let i = 0; i < dimensions; i++) {\n let value = 0;\n for (let j = 0; j < normalized.length; j++) {\n const charCode = normalized.charCodeAt(j);\n value += Math.sin(charCode * (i + 1) * 0.1) * Math.cos(j * 0.3);\n }\n // Normalize to [-1, 1] range\n embedding.push(Math.tanh(value / Math.max(1, normalized.length)));\n }\n\n // L2 normalize\n const norm = Math.sqrt(embedding.reduce((sum, v) => sum + v * v, 0));\n return embedding.map((v) => v / (norm || 1));\n}\n"],"names":["exported","trajectories","trajectory"],"mappings":"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"}
1
+ {"version":3,"file":"vector.js","sources":["../../../src/cli/commands/vector.ts"],"sourcesContent":["/**\n * Vector Command\n *\n * CLI commands for vector operations including semantic search,\n * vector store statistics, index management, and trajectory tracking.\n *\n * @module cli/commands/vector\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport {\n createVectorStore,\n createTrajectoryTracker,\n type VectorIndexStats,\n type SearchResult,\n type AgentTrajectory,\n type DetectedPattern,\n} from '../../vector/index.js';\nimport { validateProjectRoot } from '../../core/security.js';\n\n/**\n * Format bytes to human-readable string\n */\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n}\n\n/**\n * Format duration in milliseconds to human-readable string\n */\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(2)}s`;\n if (ms < 3600000) return `${(ms / 60000).toFixed(2)}m`;\n return `${(ms / 3600000).toFixed(2)}h`;\n}\n\n/**\n * Format table row with padding\n */\nfunction formatRow(cells: string[], widths: number[]): string {\n return cells.map((cell, i) => cell.padEnd(widths[i])).join(' ');\n}\n\n/**\n * Print a table with headers and rows\n */\nfunction printTable(\n headers: string[],\n rows: string[][],\n options: { indent?: number; headerColor?: typeof chalk.white } = {}\n): void {\n const indent = ' '.repeat(options.indent ?? 1);\n const headerColor = options.headerColor ?? chalk.white;\n\n // Calculate column widths\n const widths = headers.map((h, i) => {\n const maxRowWidth = Math.max(...rows.map((r) => (r[i] || '').length));\n return Math.max(h.length, maxRowWidth);\n });\n\n // Print header\n console.log(indent + headerColor(formatRow(headers, widths)));\n console.log(indent + chalk.gray('-'.repeat(widths.reduce((a, b) => a + b + 2, 0))));\n\n // Print rows\n for (const row of rows) {\n console.log(indent + chalk.gray(formatRow(row, widths)));\n }\n}\n\n/**\n * Create vector command group\n */\nexport function createVectorCommand(): Command {\n const vector = new Command('vector')\n .alias('vec')\n .description('Vector operations for semantic search and trajectory tracking');\n\n // Search subcommand\n vector\n .command('search <query>')\n .description('Perform semantic search on vector store')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-k, --top-k <n>', 'Number of results to return', '10')\n .option('-t, --type <type>', 'Filter by node type')\n .option('--hybrid', 'Enable hybrid search (combines vector + graph)')\n .option('--min-score <score>', 'Minimum similarity score (0-1)', '0')\n .option('--json', 'Output as JSON')\n .action(async (query, options) => {\n const spinner = ora('Searching vectors...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const topK = parseInt(options.topK, 10) || 10;\n const minScore = parseFloat(options.minScore) || 0;\n\n // Create vector store\n const store = createVectorStore();\n await store.initialize();\n\n // Check if we have vectors\n const stats = store.getStats();\n if (stats.totalVectors === 0) {\n spinner.warn('Vector store is empty');\n console.log(chalk.gray(' No vectors have been indexed yet.'));\n console.log(chalk.gray(' Run ') + chalk.cyan('kg vector rebuild') + chalk.gray(' to index vectors.'));\n return;\n }\n\n spinner.text = 'Generating query embedding...';\n\n // For now, create a mock embedding from the query\n // In production, this would use an actual embedding model\n const queryEmbedding = createMockEmbedding(query, stats.dimensions);\n\n spinner.text = `Searching ${stats.totalVectors} vectors...`;\n\n let results: SearchResult[];\n\n if (options.hybrid) {\n // Hybrid search\n const hybridResults = await store.hybridSearch({\n embedding: queryEmbedding,\n limit: topK,\n minScore,\n filters: options.type ? { type: options.type } : undefined,\n });\n results = hybridResults;\n } else {\n // Standard vector search\n results = await store.search({\n vector: queryEmbedding,\n k: topK,\n minScore,\n filter: options.type ? { type: options.type } : undefined,\n });\n }\n\n spinner.stop();\n\n if (options.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n console.log(chalk.cyan(`\\n Search Results for \"${query}\"\\n`));\n\n if (results.length === 0) {\n console.log(chalk.gray(' No results found'));\n return;\n }\n\n console.log(chalk.gray(` Found ${results.length} result${results.length === 1 ? '' : 's'}\\n`));\n\n // Display results as a table\n const headers = ['#', 'ID', 'Score', 'Type', 'Metadata'];\n const rows = results.map((r, i) => [\n String(i + 1),\n r.id.substring(0, 24) + (r.id.length > 24 ? '...' : ''),\n r.score.toFixed(4),\n (r.metadata?.type as string) || '-',\n Object.keys(r.metadata || {}).length > 0\n ? Object.keys(r.metadata).slice(0, 3).join(', ')\n : '-',\n ]);\n\n printTable(headers, rows);\n\n // Show detailed metadata for top results\n console.log(chalk.white('\\n Top Result Details:\\n'));\n const top = results[0];\n console.log(chalk.gray(` ID: ${top.id}`));\n console.log(chalk.gray(` Score: ${top.score.toFixed(6)}`));\n if (top.distance !== undefined) {\n console.log(chalk.gray(` Distance: ${top.distance.toFixed(6)}`));\n }\n if (Object.keys(top.metadata || {}).length > 0) {\n console.log(chalk.gray(' Metadata:'));\n for (const [key, value] of Object.entries(top.metadata)) {\n const displayValue = typeof value === 'object' ? JSON.stringify(value) : String(value);\n console.log(chalk.gray(` ${key}: ${displayValue.substring(0, 50)}`));\n }\n }\n\n console.log();\n } catch (error) {\n spinner.fail('Search failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Stats subcommand\n vector\n .command('stats')\n .description('Display vector store statistics')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const projectRoot = validateProjectRoot(options.path);\n\n // Create vector store\n const store = createVectorStore();\n await store.initialize();\n\n const stats = store.getStats();\n\n if (options.json) {\n console.log(JSON.stringify(stats, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\\n Vector Store Statistics\\n'));\n\n // Overview\n console.log(chalk.white(' Overview'));\n console.log(chalk.gray(` Total Vectors: ${stats.totalVectors.toLocaleString()}`));\n console.log(chalk.gray(` Dimensions: ${stats.dimensions}`));\n console.log(chalk.gray(` Index Type: ${stats.indexType.toUpperCase()}`));\n console.log(chalk.gray(` Memory Usage: ${formatBytes(stats.memoryUsage)}`));\n console.log(chalk.gray(` Last Updated: ${stats.lastUpdated.toISOString()}`));\n\n // Index stats\n if (stats.indexStats) {\n console.log();\n console.log(chalk.white(' Index Configuration'));\n if (stats.indexStats.levels !== undefined) {\n console.log(chalk.gray(` HNSW Levels: ${stats.indexStats.levels}`));\n }\n if (stats.indexStats.entryPoint) {\n console.log(chalk.gray(` Entry Point: ${stats.indexStats.entryPoint.substring(0, 24)}...`));\n }\n if (stats.indexStats.avgConnections !== undefined) {\n console.log(chalk.gray(` Avg Connections: ${stats.indexStats.avgConnections.toFixed(2)}`));\n }\n }\n\n // Namespace breakdown\n if (stats.namespaces && Object.keys(stats.namespaces).length > 0) {\n console.log();\n console.log(chalk.white(' Namespaces'));\n for (const [ns, count] of Object.entries(stats.namespaces)) {\n const bar = '|'.repeat(Math.min(count, 30));\n console.log(chalk.gray(` ${ns.padEnd(15)} ${String(count).padStart(6)} ${chalk.blue(bar)}`));\n }\n }\n\n // Performance hints\n console.log();\n console.log(chalk.white(' Performance'));\n if (stats.totalVectors === 0) {\n console.log(chalk.yellow(' [!] Vector store is empty'));\n console.log(chalk.gray(' Run \"kg vector rebuild\" to populate the index'));\n } else if (stats.totalVectors < 100) {\n console.log(chalk.green(' [OK] Small index - linear search may be faster'));\n } else if (stats.totalVectors < 10000) {\n console.log(chalk.green(' [OK] Medium index - HNSW optimal'));\n } else {\n console.log(chalk.yellow(' [!] Large index - consider quantization'));\n }\n\n console.log();\n } catch (error) {\n console.error(chalk.red('Failed to get stats:'), String(error));\n process.exit(1);\n }\n });\n\n // Rebuild subcommand\n vector\n .command('rebuild')\n .description('Rebuild vector index from knowledge graph')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('--force', 'Force rebuild even if index exists')\n .option('--batch-size <size>', 'Batch size for indexing', '100')\n .option('-v, --verbose', 'Verbose output')\n .action(async (options) => {\n const spinner = ora('Rebuilding vector index...').start();\n\n try {\n const projectRoot = validateProjectRoot(options.path);\n const batchSize = parseInt(options.batchSize, 10) || 100;\n\n // Create vector store\n const store = createVectorStore();\n await store.initialize();\n\n const existingStats = store.getStats();\n\n if (existingStats.totalVectors > 0 && !options.force) {\n spinner.warn(`Index already contains ${existingStats.totalVectors} vectors`);\n console.log(chalk.gray(' Use --force to rebuild anyway'));\n return;\n }\n\n if (options.force && existingStats.totalVectors > 0) {\n spinner.text = 'Clearing existing index...';\n await store.clear();\n }\n\n // In a real implementation, this would:\n // 1. Read nodes from the knowledge graph database\n // 2. Generate embeddings for each node\n // 3. Insert vectors in batches\n\n spinner.text = 'Scanning knowledge graph...';\n\n // Simulate rebuild process\n const kgPath = join(projectRoot, '.kg', 'knowledge.db');\n if (!existsSync(kgPath)) {\n spinner.fail('Knowledge graph not found');\n console.log(chalk.gray(' Run ') + chalk.cyan('kg graph') + chalk.gray(' first'));\n return;\n }\n\n // Mock rebuild with progress\n spinner.text = 'Generating embeddings...';\n\n // For demonstration, we show what would happen\n spinner.succeed('Vector index rebuild complete');\n\n console.log();\n console.log(chalk.white(' Rebuild Summary'));\n console.log(chalk.gray(` Vectors indexed: 0 (mock - no embedding model configured)`));\n console.log(chalk.gray(` Batch size: ${batchSize}`));\n console.log(chalk.gray(` Project root: ${projectRoot}`));\n\n console.log();\n console.log(chalk.yellow(' Note: Full vector indexing requires an embedding model.'));\n console.log(chalk.gray(' Configure OPENAI_API_KEY or use local embeddings.'));\n console.log();\n\n } catch (error) {\n spinner.fail('Rebuild failed');\n console.error(chalk.red(String(error)));\n process.exit(1);\n }\n });\n\n // Trajectory subcommand group\n const trajectory = vector\n .command('trajectory')\n .alias('traj')\n .description('Agent trajectory tracking operations');\n\n // trajectory list\n trajectory\n .command('list')\n .description('List recorded agent trajectories')\n .option('-p, --path <path>', 'Project root path', '.')\n .option('-a, --agent <id>', 'Filter by agent ID')\n .option('-w, --workflow <id>', 'Filter by workflow ID')\n .option('-l, --limit <n>', 'Maximum number of trajectories', '20')\n .option('--success', 'Show only successful trajectories')\n .option('--failed', 'Show only failed trajectories')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const limit = parseInt(options.limit, 10) || 20;\n\n // Create trajectory tracker\n const tracker = createTrajectoryTracker({\n maxTrajectories: 1000,\n enableAutoLearning: true,\n });\n\n const stats = tracker.getStats();\n\n if (options.json) {\n const exported = tracker.export();\n let trajectories = exported.trajectories;\n\n if (options.agent) {\n trajectories = trajectories.filter((t) => t.agentId === options.agent);\n }\n if (options.workflow) {\n trajectories = trajectories.filter((t) => t.workflowId === options.workflow);\n }\n if (options.success) {\n trajectories = trajectories.filter((t) => t.success);\n }\n if (options.failed) {\n trajectories = trajectories.filter((t) => !t.success);\n }\n\n console.log(JSON.stringify(trajectories.slice(0, limit), null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\\n Agent Trajectories\\n'));\n\n // Overview stats\n console.log(chalk.white(' Overview'));\n console.log(chalk.gray(` Active: ${stats.activeTrajectories}`));\n console.log(chalk.gray(` Completed: ${stats.completedTrajectories}`));\n console.log(chalk.gray(` Success: ${(stats.successRate * 100).toFixed(1)}%`));\n console.log(chalk.gray(` Avg Duration: ${formatDuration(stats.avgDuration)}`));\n console.log(chalk.gray(` Patterns: ${stats.detectedPatterns}`));\n\n // Get trajectories\n const exported = tracker.export();\n let trajectories = exported.trajectories;\n\n if (options.agent) {\n trajectories = trajectories.filter((t) => t.agentId === options.agent);\n }\n if (options.workflow) {\n trajectories = trajectories.filter((t) => t.workflowId === options.workflow);\n }\n if (options.success) {\n trajectories = trajectories.filter((t) => t.success);\n }\n if (options.failed) {\n trajectories = trajectories.filter((t) => !t.success);\n }\n\n trajectories = trajectories.slice(-limit).reverse();\n\n if (trajectories.length === 0) {\n console.log();\n console.log(chalk.gray(' No trajectories found'));\n console.log(chalk.gray(' Trajectories are recorded during agent operations.'));\n console.log();\n return;\n }\n\n console.log();\n console.log(chalk.white(` Recent Trajectories (${trajectories.length})`));\n\n const headers = ['ID', 'Agent', 'Steps', 'Duration', 'Status'];\n const rows = trajectories.map((t) => [\n t.id.substring(0, 16) + '...',\n t.agentId.substring(0, 12) + (t.agentId.length > 12 ? '...' : ''),\n String(t.steps.length),\n formatDuration(t.totalDuration),\n t.success ? chalk.green('OK') : chalk.red('FAIL'),\n ]);\n\n printTable(headers, rows);\n console.log();\n\n } catch (error) {\n console.error(chalk.red('Failed to list trajectories:'), String(error));\n process.exit(1);\n }\n });\n\n // trajectory show\n trajectory\n .command('show <id>')\n .description('Show detailed trajectory information')\n .option('--json', 'Output as JSON')\n .action(async (id, options) => {\n try {\n // Create trajectory tracker\n const tracker = createTrajectoryTracker({\n maxTrajectories: 1000,\n enableAutoLearning: true,\n });\n\n const trajectory = tracker.getTrajectory(id);\n\n if (!trajectory) {\n console.log(chalk.yellow(`\\n Trajectory not found: ${id}\\n`));\n console.log(chalk.gray(' Use \"kg vector trajectory list\" to see available trajectories.'));\n console.log();\n return;\n }\n\n if (options.json) {\n console.log(JSON.stringify(trajectory, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\\n Trajectory Details\\n'));\n\n // Basic info\n console.log(chalk.white(' Information'));\n console.log(chalk.gray(` ID: ${trajectory.id}`));\n console.log(chalk.gray(` Agent: ${trajectory.agentId}`));\n if (trajectory.workflowId) {\n console.log(chalk.gray(` Workflow: ${trajectory.workflowId}`));\n }\n console.log(chalk.gray(` Started: ${trajectory.startedAt.toISOString()}`));\n if (trajectory.completedAt) {\n console.log(chalk.gray(` Completed: ${trajectory.completedAt.toISOString()}`));\n }\n console.log(chalk.gray(` Duration: ${formatDuration(trajectory.totalDuration)}`));\n console.log(\n chalk.gray(' Status: ') +\n (trajectory.success ? chalk.green('SUCCESS') : chalk.red('FAILED'))\n );\n\n // Steps\n if (trajectory.steps.length > 0) {\n console.log();\n console.log(chalk.white(` Steps (${trajectory.steps.length})`));\n\n const stepHeaders = ['#', 'Action', 'Outcome', 'Duration'];\n const stepRows = trajectory.steps.map((s, i) => [\n String(i + 1),\n s.action.substring(0, 30) + (s.action.length > 30 ? '...' : ''),\n s.outcome === 'success'\n ? chalk.green(s.outcome)\n : s.outcome === 'failure'\n ? chalk.red(s.outcome)\n : chalk.yellow(s.outcome),\n formatDuration(s.duration),\n ]);\n\n printTable(stepHeaders, stepRows);\n }\n\n // Metadata\n if (trajectory.metadata && Object.keys(trajectory.metadata).length > 0) {\n console.log();\n console.log(chalk.white(' Metadata'));\n for (const [key, value] of Object.entries(trajectory.metadata)) {\n const displayValue = typeof value === 'object' ? JSON.stringify(value) : String(value);\n console.log(chalk.gray(` ${key}: ${displayValue.substring(0, 60)}`));\n }\n }\n\n console.log();\n } catch (error) {\n console.error(chalk.red('Failed to show trajectory:'), String(error));\n process.exit(1);\n }\n });\n\n // trajectory patterns\n trajectory\n .command('patterns')\n .description('Show detected action patterns')\n .option('--min-confidence <n>', 'Minimum confidence threshold (0-1)', '0.5')\n .option('--type <type>', 'Filter by pattern type (success, failure, optimization)')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const minConfidence = parseFloat(options.minConfidence) || 0.5;\n\n // Create trajectory tracker\n const tracker = createTrajectoryTracker({\n maxTrajectories: 1000,\n enableAutoLearning: true,\n });\n\n const patterns = tracker.getPatterns({\n minConfidence,\n type: options.type as 'success' | 'failure' | 'optimization' | undefined,\n });\n\n if (options.json) {\n console.log(JSON.stringify(patterns, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\\n Detected Patterns\\n'));\n\n if (patterns.length === 0) {\n console.log(chalk.gray(' No patterns detected yet.'));\n console.log(chalk.gray(' Patterns are learned from successful agent trajectories.'));\n console.log();\n return;\n }\n\n const headers = ['ID', 'Type', 'Frequency', 'Success', 'Confidence'];\n const rows = patterns.map((p) => [\n p.id.substring(0, 30) + (p.id.length > 30 ? '...' : ''),\n p.type,\n String(p.frequency),\n `${(p.successRate * 100).toFixed(0)}%`,\n `${(p.confidence * 100).toFixed(0)}%`,\n ]);\n\n printTable(headers, rows);\n\n // Show top pattern details\n if (patterns.length > 0) {\n const top = patterns[0];\n console.log();\n console.log(chalk.white(' Top Pattern Details'));\n console.log(chalk.gray(` ID: ${top.id}`));\n console.log(chalk.gray(` Actions: ${top.actions.join(' -> ')}`));\n console.log(chalk.gray(` Avg Duration: ${formatDuration(top.avgDuration)}`));\n }\n\n console.log();\n } catch (error) {\n console.error(chalk.red('Failed to show patterns:'), String(error));\n process.exit(1);\n }\n });\n\n // trajectory clear\n trajectory\n .command('clear')\n .description('Clear all trajectory data')\n .option('--confirm', 'Confirm clearing without prompt')\n .action(async (options) => {\n try {\n if (!options.confirm) {\n console.log(chalk.yellow('\\n Warning: This will delete all trajectory data.\\n'));\n console.log(chalk.gray(' Use --confirm to proceed.'));\n console.log();\n return;\n }\n\n const tracker = createTrajectoryTracker();\n tracker.clear();\n\n console.log(chalk.green('\\n Trajectory data cleared.\\n'));\n } catch (error) {\n console.error(chalk.red('Failed to clear trajectories:'), String(error));\n process.exit(1);\n }\n });\n\n return vector;\n}\n\n/**\n * Create a mock embedding from text\n *\n * This is a placeholder that creates deterministic pseudo-embeddings\n * based on the text content. In production, this would use an actual\n * embedding model (OpenAI, Cohere, local models, etc.)\n *\n * @param text - Text to embed\n * @param dimensions - Number of dimensions\n * @returns Mock embedding vector\n */\nfunction createMockEmbedding(text: string, dimensions: number): number[] {\n const embedding: number[] = [];\n const normalized = text.toLowerCase().trim();\n\n // Simple hash-based pseudo-embedding\n for (let i = 0; i < dimensions; i++) {\n let value = 0;\n for (let j = 0; j < normalized.length; j++) {\n const charCode = normalized.charCodeAt(j);\n value += Math.sin(charCode * (i + 1) * 0.1) * Math.cos(j * 0.3);\n }\n // Normalize to [-1, 1] range\n embedding.push(Math.tanh(value / Math.max(1, normalized.length)));\n }\n\n // L2 normalize\n const norm = Math.sqrt(embedding.reduce((sum, v) => sum + v * v, 0));\n return embedding.map((v) => v / (norm || 1));\n}\n"],"names":["exported","trajectories","trajectory"],"mappings":";;;;;;;;;;;AA2BA,SAAS,YAAY,OAAuB;AAC1C,MAAI,QAAQ,KAAM,QAAO,GAAG,KAAK;AACjC,MAAI,QAAQ,OAAO,KAAM,QAAO,IAAI,QAAQ,MAAM,QAAQ,CAAC,CAAC;AAC5D,MAAI,QAAQ,OAAO,OAAO,KAAM,QAAO,IAAI,SAAS,OAAO,OAAO,QAAQ,CAAC,CAAC;AAC5E,SAAO,IAAI,SAAS,OAAO,OAAO,OAAO,QAAQ,CAAC,CAAC;AACrD;AAKA,SAAS,eAAe,IAAoB;AAC1C,MAAI,KAAK,IAAM,QAAO,GAAG,EAAE;AAC3B,MAAI,KAAK,IAAO,QAAO,IAAI,KAAK,KAAM,QAAQ,CAAC,CAAC;AAChD,MAAI,KAAK,KAAS,QAAO,IAAI,KAAK,KAAO,QAAQ,CAAC,CAAC;AACnD,SAAO,IAAI,KAAK,MAAS,QAAQ,CAAC,CAAC;AACrC;AAKA,SAAS,UAAU,OAAiB,QAA0B;AAC5D,SAAO,MAAM,IAAI,CAAC,MAAM,MAAM,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI;AACjE;AAKA,SAAS,WACP,SACA,MACA,UAAiE,CAAA,GAC3D;AACN,QAAM,SAAS,KAAK,OAAO,QAAQ,UAAU,CAAC;AAC9C,QAAM,cAAc,QAAQ,eAAe,MAAM;AAGjD,QAAM,SAAS,QAAQ,IAAI,CAAC,GAAG,MAAM;AACnC,UAAM,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,MAAM,CAAC;AACpE,WAAO,KAAK,IAAI,EAAE,QAAQ,WAAW;AAAA,EACvC,CAAC;AAGD,UAAQ,IAAI,SAAS,YAAY,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5D,UAAQ,IAAI,SAAS,MAAM,KAAK,IAAI,OAAO,OAAO,OAAO,CAAC,GAAG,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;AAGlF,aAAW,OAAO,MAAM;AACtB,YAAQ,IAAI,SAAS,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC;AAAA,EACzD;AACF;AAKO,SAAS,sBAA+B;AAC7C,QAAM,SAAS,IAAI,QAAQ,QAAQ,EAChC,MAAM,KAAK,EACX,YAAY,+DAA+D;AAG9E,SACG,QAAQ,gBAAgB,EACxB,YAAY,yCAAyC,EACrD,OAAO,qBAAqB,qBAAqB,GAAG,EACpD,OAAO,mBAAmB,+BAA+B,IAAI,EAC7D,OAAO,qBAAqB,qBAAqB,EACjD,OAAO,YAAY,gDAAgD,EACnE,OAAO,uBAAuB,kCAAkC,GAAG,EACnE,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,OAAO,YAAY;AAChC,UAAM,UAAU,IAAI,sBAAsB,EAAE,MAAA;AAE5C,QAAI;AACF,YAAM,cAAc,oBAAoB,QAAQ,IAAI;AACpD,YAAM,OAAO,SAAS,QAAQ,MAAM,EAAE,KAAK;AAC3C,YAAM,WAAW,WAAW,QAAQ,QAAQ,KAAK;AAGjD,YAAM,QAAQ,kBAAA;AACd,YAAM,MAAM,WAAA;AAGZ,YAAM,QAAQ,MAAM,SAAA;AACpB,UAAI,MAAM,iBAAiB,GAAG;AAC5B,gBAAQ,KAAK,uBAAuB;AACpC,gBAAQ,IAAI,MAAM,KAAK,qCAAqC,CAAC;AAC7D,gBAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,mBAAmB,IAAI,MAAM,KAAK,oBAAoB,CAAC;AACrG;AAAA,MACF;AAEA,cAAQ,OAAO;AAIf,YAAM,iBAAiB,oBAAoB,OAAO,MAAM,UAAU;AAElE,cAAQ,OAAO,aAAa,MAAM,YAAY;AAE9C,UAAI;AAEJ,UAAI,QAAQ,QAAQ;AAElB,cAAM,gBAAgB,MAAM,MAAM,aAAa;AAAA,UAC7C,WAAW;AAAA,UACX,OAAO;AAAA,UACP;AAAA,UACA,SAAS,QAAQ,OAAO,EAAE,MAAM,QAAQ,SAAS;AAAA,QAAA,CAClD;AACD,kBAAU;AAAA,MACZ,OAAO;AAEL,kBAAU,MAAM,MAAM,OAAO;AAAA,UAC3B,QAAQ;AAAA,UACR,GAAG;AAAA,UACH;AAAA,UACA,QAAQ,QAAQ,OAAO,EAAE,MAAM,QAAQ,SAAS;AAAA,QAAA,CACjD;AAAA,MACH;AAEA,cAAQ,KAAA;AAER,UAAI,QAAQ,MAAM;AAChB,gBAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C;AAAA,MACF;AAEA,cAAQ,IAAI,MAAM,KAAK;AAAA,wBAA2B,KAAK;AAAA,CAAK,CAAC;AAE7D,UAAI,QAAQ,WAAW,GAAG;AACxB,gBAAQ,IAAI,MAAM,KAAK,oBAAoB,CAAC;AAC5C;AAAA,MACF;AAEA,cAAQ,IAAI,MAAM,KAAK,WAAW,QAAQ,MAAM,UAAU,QAAQ,WAAW,IAAI,KAAK,GAAG;AAAA,CAAI,CAAC;AAG9F,YAAM,UAAU,CAAC,KAAK,MAAM,SAAS,QAAQ,UAAU;AACvD,YAAM,OAAO,QAAQ,IAAI,CAAC,GAAG,MAAM;AAAA,QACjC,OAAO,IAAI,CAAC;AAAA,QACZ,EAAE,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE,GAAG,SAAS,KAAK,QAAQ;AAAA,QACpD,EAAE,MAAM,QAAQ,CAAC;AAAA,QAChB,EAAE,UAAU,QAAmB;AAAA,QAChC,OAAO,KAAK,EAAE,YAAY,CAAA,CAAE,EAAE,SAAS,IACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,IAC7C;AAAA,MAAA,CACL;AAED,iBAAW,SAAS,IAAI;AAGxB,cAAQ,IAAI,MAAM,MAAM,2BAA2B,CAAC;AACpD,YAAM,MAAM,QAAQ,CAAC;AACrB,cAAQ,IAAI,MAAM,KAAK,WAAW,IAAI,EAAE,EAAE,CAAC;AAC3C,cAAQ,IAAI,MAAM,KAAK,cAAc,IAAI,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC;AAC5D,UAAI,IAAI,aAAa,QAAW;AAC9B,gBAAQ,IAAI,MAAM,KAAK,iBAAiB,IAAI,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC;AAAA,MACpE;AACA,UAAI,OAAO,KAAK,IAAI,YAAY,EAAE,EAAE,SAAS,GAAG;AAC9C,gBAAQ,IAAI,MAAM,KAAK,eAAe,CAAC;AACvC,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,QAAQ,GAAG;AACvD,gBAAM,eAAe,OAAO,UAAU,WAAW,KAAK,UAAU,KAAK,IAAI,OAAO,KAAK;AACrF,kBAAQ,IAAI,MAAM,KAAK,SAAS,GAAG,KAAK,aAAa,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC;AAAA,QAC1E;AAAA,MACF;AAEA,cAAQ,IAAA;AAAA,IACV,SAAS,OAAO;AACd,cAAQ,KAAK,eAAe;AAC5B,cAAQ,MAAM,MAAM,IAAI,OAAO,KAAK,CAAC,CAAC;AACtC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAGH,SACG,QAAQ,OAAO,EACf,YAAY,iCAAiC,EAC7C,OAAO,qBAAqB,qBAAqB,GAAG,EACpD,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,YAAY;AACzB,QAAI;AACF,YAAM,cAAc,oBAAoB,QAAQ,IAAI;AAGpD,YAAM,QAAQ,kBAAA;AACd,YAAM,MAAM,WAAA;AAEZ,YAAM,QAAQ,MAAM,SAAA;AAEpB,UAAI,QAAQ,MAAM;AAChB,gBAAQ,IAAI,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAC1C;AAAA,MACF;AAEA,cAAQ,IAAI,MAAM,KAAK,KAAK,+BAA+B,CAAC;AAG5D,cAAQ,IAAI,MAAM,MAAM,YAAY,CAAC;AACrC,cAAQ,IAAI,MAAM,KAAK,wBAAwB,MAAM,aAAa,gBAAgB,EAAE,CAAC;AACrF,cAAQ,IAAI,MAAM,KAAK,wBAAwB,MAAM,UAAU,EAAE,CAAC;AAClE,cAAQ,IAAI,MAAM,KAAK,wBAAwB,MAAM,UAAU,aAAa,EAAE,CAAC;AAC/E,cAAQ,IAAI,MAAM,KAAK,wBAAwB,YAAY,MAAM,WAAW,CAAC,EAAE,CAAC;AAChF,cAAQ,IAAI,MAAM,KAAK,wBAAwB,MAAM,YAAY,aAAa,EAAE,CAAC;AAGjF,UAAI,MAAM,YAAY;AACpB,gBAAQ,IAAA;AACR,gBAAQ,IAAI,MAAM,MAAM,uBAAuB,CAAC;AAChD,YAAI,MAAM,WAAW,WAAW,QAAW;AACzC,kBAAQ,IAAI,MAAM,KAAK,wBAAwB,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,QAC3E;AACA,YAAI,MAAM,WAAW,YAAY;AAC/B,kBAAQ,IAAI,MAAM,KAAK,wBAAwB,MAAM,WAAW,WAAW,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC;AAAA,QACnG;AACA,YAAI,MAAM,WAAW,mBAAmB,QAAW;AACjD,kBAAQ,IAAI,MAAM,KAAK,wBAAwB,MAAM,WAAW,eAAe,QAAQ,CAAC,CAAC,EAAE,CAAC;AAAA,QAC9F;AAAA,MACF;AAGA,UAAI,MAAM,cAAc,OAAO,KAAK,MAAM,UAAU,EAAE,SAAS,GAAG;AAChE,gBAAQ,IAAA;AACR,gBAAQ,IAAI,MAAM,MAAM,cAAc,CAAC;AACvC,mBAAW,CAAC,IAAI,KAAK,KAAK,OAAO,QAAQ,MAAM,UAAU,GAAG;AAC1D,gBAAM,MAAM,IAAI,OAAO,KAAK,IAAI,OAAO,EAAE,CAAC;AAC1C,kBAAQ,IAAI,MAAM,KAAK,OAAO,GAAG,OAAO,EAAE,CAAC,IAAI,OAAO,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC;AAAA,QAChG;AAAA,MACF;AAGA,cAAQ,IAAA;AACR,cAAQ,IAAI,MAAM,MAAM,eAAe,CAAC;AACxC,UAAI,MAAM,iBAAiB,GAAG;AAC5B,gBAAQ,IAAI,MAAM,OAAO,+BAA+B,CAAC;AACzD,gBAAQ,IAAI,MAAM,KAAK,uDAAuD,CAAC;AAAA,MACjF,WAAW,MAAM,eAAe,KAAK;AACnC,gBAAQ,IAAI,MAAM,MAAM,oDAAoD,CAAC;AAAA,MAC/E,WAAW,MAAM,eAAe,KAAO;AACrC,gBAAQ,IAAI,MAAM,MAAM,sCAAsC,CAAC;AAAA,MACjE,OAAO;AACL,gBAAQ,IAAI,MAAM,OAAO,6CAA6C,CAAC;AAAA,MACzE;AAEA,cAAQ,IAAA;AAAA,IACV,SAAS,OAAO;AACd,cAAQ,MAAM,MAAM,IAAI,sBAAsB,GAAG,OAAO,KAAK,CAAC;AAC9D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAGH,SACG,QAAQ,SAAS,EACjB,YAAY,2CAA2C,EACvD,OAAO,qBAAqB,qBAAqB,GAAG,EACpD,OAAO,WAAW,oCAAoC,EACtD,OAAO,uBAAuB,2BAA2B,KAAK,EAC9D,OAAO,iBAAiB,gBAAgB,EACxC,OAAO,OAAO,YAAY;AACzB,UAAM,UAAU,IAAI,4BAA4B,EAAE,MAAA;AAElD,QAAI;AACF,YAAM,cAAc,oBAAoB,QAAQ,IAAI;AACpD,YAAM,YAAY,SAAS,QAAQ,WAAW,EAAE,KAAK;AAGrD,YAAM,QAAQ,kBAAA;AACd,YAAM,MAAM,WAAA;AAEZ,YAAM,gBAAgB,MAAM,SAAA;AAE5B,UAAI,cAAc,eAAe,KAAK,CAAC,QAAQ,OAAO;AACpD,gBAAQ,KAAK,0BAA0B,cAAc,YAAY,UAAU;AAC3E,gBAAQ,IAAI,MAAM,KAAK,iCAAiC,CAAC;AACzD;AAAA,MACF;AAEA,UAAI,QAAQ,SAAS,cAAc,eAAe,GAAG;AACnD,gBAAQ,OAAO;AACf,cAAM,MAAM,MAAA;AAAA,MACd;AAOA,cAAQ,OAAO;AAGf,YAAM,SAAS,KAAK,aAAa,OAAO,cAAc;AACtD,UAAI,CAAC,WAAW,MAAM,GAAG;AACvB,gBAAQ,KAAK,2BAA2B;AACxC,gBAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,QAAQ,CAAC;AAChF;AAAA,MACF;AAGA,cAAQ,OAAO;AAGf,cAAQ,QAAQ,+BAA+B;AAE/C,cAAQ,IAAA;AACR,cAAQ,IAAI,MAAM,MAAM,mBAAmB,CAAC;AAC5C,cAAQ,IAAI,MAAM,KAAK,+DAA+D,CAAC;AACvF,cAAQ,IAAI,MAAM,KAAK,wBAAwB,SAAS,EAAE,CAAC;AAC3D,cAAQ,IAAI,MAAM,KAAK,wBAAwB,WAAW,EAAE,CAAC;AAE7D,cAAQ,IAAA;AACR,cAAQ,IAAI,MAAM,OAAO,2DAA2D,CAAC;AACrF,cAAQ,IAAI,MAAM,KAAK,qDAAqD,CAAC;AAC7E,cAAQ,IAAA;AAAA,IAEV,SAAS,OAAO;AACd,cAAQ,KAAK,gBAAgB;AAC7B,cAAQ,MAAM,MAAM,IAAI,OAAO,KAAK,CAAC,CAAC;AACtC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAGH,QAAM,aAAa,OAChB,QAAQ,YAAY,EACpB,MAAM,MAAM,EACZ,YAAY,sCAAsC;AAGrD,aACG,QAAQ,MAAM,EACd,YAAY,kCAAkC,EAC9C,OAAO,qBAAqB,qBAAqB,GAAG,EACpD,OAAO,oBAAoB,oBAAoB,EAC/C,OAAO,uBAAuB,uBAAuB,EACrD,OAAO,mBAAmB,kCAAkC,IAAI,EAChE,OAAO,aAAa,mCAAmC,EACvD,OAAO,YAAY,+BAA+B,EAClD,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,YAAY;AACzB,QAAI;AACF,YAAM,QAAQ,SAAS,QAAQ,OAAO,EAAE,KAAK;AAG7C,YAAM,UAAU,wBAAwB;AAAA,QACtC,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,MAAA,CACrB;AAED,YAAM,QAAQ,QAAQ,SAAA;AAEtB,UAAI,QAAQ,MAAM;AAChB,cAAMA,YAAW,QAAQ,OAAA;AACzB,YAAIC,gBAAeD,UAAS;AAE5B,YAAI,QAAQ,OAAO;AACjBC,0BAAeA,cAAa,OAAO,CAAC,MAAM,EAAE,YAAY,QAAQ,KAAK;AAAA,QACvE;AACA,YAAI,QAAQ,UAAU;AACpBA,0BAAeA,cAAa,OAAO,CAAC,MAAM,EAAE,eAAe,QAAQ,QAAQ;AAAA,QAC7E;AACA,YAAI,QAAQ,SAAS;AACnBA,0BAAeA,cAAa,OAAO,CAAC,MAAM,EAAE,OAAO;AAAA,QACrD;AACA,YAAI,QAAQ,QAAQ;AAClBA,0BAAeA,cAAa,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO;AAAA,QACtD;AAEA,gBAAQ,IAAI,KAAK,UAAUA,cAAa,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;AACjE;AAAA,MACF;AAEA,cAAQ,IAAI,MAAM,KAAK,KAAK,0BAA0B,CAAC;AAGvD,cAAQ,IAAI,MAAM,MAAM,YAAY,CAAC;AACrC,cAAQ,IAAI,MAAM,KAAK,mBAAmB,MAAM,kBAAkB,EAAE,CAAC;AACrE,cAAQ,IAAI,MAAM,KAAK,mBAAmB,MAAM,qBAAqB,EAAE,CAAC;AACxE,cAAQ,IAAI,MAAM,KAAK,oBAAoB,MAAM,cAAc,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC;AAClF,cAAQ,IAAI,MAAM,KAAK,qBAAqB,eAAe,MAAM,WAAW,CAAC,EAAE,CAAC;AAChF,cAAQ,IAAI,MAAM,KAAK,mBAAmB,MAAM,gBAAgB,EAAE,CAAC;AAGnE,YAAM,WAAW,QAAQ,OAAA;AACzB,UAAI,eAAe,SAAS;AAE5B,UAAI,QAAQ,OAAO;AACjB,uBAAe,aAAa,OAAO,CAAC,MAAM,EAAE,YAAY,QAAQ,KAAK;AAAA,MACvE;AACA,UAAI,QAAQ,UAAU;AACpB,uBAAe,aAAa,OAAO,CAAC,MAAM,EAAE,eAAe,QAAQ,QAAQ;AAAA,MAC7E;AACA,UAAI,QAAQ,SAAS;AACnB,uBAAe,aAAa,OAAO,CAAC,MAAM,EAAE,OAAO;AAAA,MACrD;AACA,UAAI,QAAQ,QAAQ;AAClB,uBAAe,aAAa,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO;AAAA,MACtD;AAEA,qBAAe,aAAa,MAAM,CAAC,KAAK,EAAE,QAAA;AAE1C,UAAI,aAAa,WAAW,GAAG;AAC7B,gBAAQ,IAAA;AACR,gBAAQ,IAAI,MAAM,KAAK,yBAAyB,CAAC;AACjD,gBAAQ,IAAI,MAAM,KAAK,sDAAsD,CAAC;AAC9E,gBAAQ,IAAA;AACR;AAAA,MACF;AAEA,cAAQ,IAAA;AACR,cAAQ,IAAI,MAAM,MAAM,0BAA0B,aAAa,MAAM,GAAG,CAAC;AAEzE,YAAM,UAAU,CAAC,MAAM,SAAS,SAAS,YAAY,QAAQ;AAC7D,YAAM,OAAO,aAAa,IAAI,CAAC,MAAM;AAAA,QACnC,EAAE,GAAG,UAAU,GAAG,EAAE,IAAI;AAAA,QACxB,EAAE,QAAQ,UAAU,GAAG,EAAE,KAAK,EAAE,QAAQ,SAAS,KAAK,QAAQ;AAAA,QAC9D,OAAO,EAAE,MAAM,MAAM;AAAA,QACrB,eAAe,EAAE,aAAa;AAAA,QAC9B,EAAE,UAAU,MAAM,MAAM,IAAI,IAAI,MAAM,IAAI,MAAM;AAAA,MAAA,CACjD;AAED,iBAAW,SAAS,IAAI;AACxB,cAAQ,IAAA;AAAA,IAEV,SAAS,OAAO;AACd,cAAQ,MAAM,MAAM,IAAI,8BAA8B,GAAG,OAAO,KAAK,CAAC;AACtE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAGH,aACG,QAAQ,WAAW,EACnB,YAAY,sCAAsC,EAClD,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,IAAI,YAAY;AAC7B,QAAI;AAEF,YAAM,UAAU,wBAAwB;AAAA,QACtC,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,MAAA,CACrB;AAED,YAAMC,cAAa,QAAQ,cAAc,EAAE;AAE3C,UAAI,CAACA,aAAY;AACf,gBAAQ,IAAI,MAAM,OAAO;AAAA,0BAA6B,EAAE;AAAA,CAAI,CAAC;AAC7D,gBAAQ,IAAI,MAAM,KAAK,kEAAkE,CAAC;AAC1F,gBAAQ,IAAA;AACR;AAAA,MACF;AAEA,UAAI,QAAQ,MAAM;AAChB,gBAAQ,IAAI,KAAK,UAAUA,aAAY,MAAM,CAAC,CAAC;AAC/C;AAAA,MACF;AAEA,cAAQ,IAAI,MAAM,KAAK,KAAK,0BAA0B,CAAC;AAGvD,cAAQ,IAAI,MAAM,MAAM,eAAe,CAAC;AACxC,cAAQ,IAAI,MAAM,KAAK,mBAAmBA,YAAW,EAAE,EAAE,CAAC;AAC1D,cAAQ,IAAI,MAAM,KAAK,mBAAmBA,YAAW,OAAO,EAAE,CAAC;AAC/D,UAAIA,YAAW,YAAY;AACzB,gBAAQ,IAAI,MAAM,KAAK,mBAAmBA,YAAW,UAAU,EAAE,CAAC;AAAA,MACpE;AACA,cAAQ,IAAI,MAAM,KAAK,mBAAmBA,YAAW,UAAU,aAAa,EAAE,CAAC;AAC/E,UAAIA,YAAW,aAAa;AAC1B,gBAAQ,IAAI,MAAM,KAAK,mBAAmBA,YAAW,YAAY,aAAa,EAAE,CAAC;AAAA,MACnF;AACA,cAAQ,IAAI,MAAM,KAAK,mBAAmB,eAAeA,YAAW,aAAa,CAAC,EAAE,CAAC;AACrF,cAAQ;AAAA,QACN,MAAM,KAAK,kBAAkB,KAC1BA,YAAW,UAAU,MAAM,MAAM,SAAS,IAAI,MAAM,IAAI,QAAQ;AAAA,MAAA;AAIrE,UAAIA,YAAW,MAAM,SAAS,GAAG;AAC/B,gBAAQ,IAAA;AACR,gBAAQ,IAAI,MAAM,MAAM,YAAYA,YAAW,MAAM,MAAM,GAAG,CAAC;AAE/D,cAAM,cAAc,CAAC,KAAK,UAAU,WAAW,UAAU;AACzD,cAAM,WAAWA,YAAW,MAAM,IAAI,CAAC,GAAG,MAAM;AAAA,UAC9C,OAAO,IAAI,CAAC;AAAA,UACZ,EAAE,OAAO,UAAU,GAAG,EAAE,KAAK,EAAE,OAAO,SAAS,KAAK,QAAQ;AAAA,UAC5D,EAAE,YAAY,YACV,MAAM,MAAM,EAAE,OAAO,IACrB,EAAE,YAAY,YACd,MAAM,IAAI,EAAE,OAAO,IACnB,MAAM,OAAO,EAAE,OAAO;AAAA,UAC1B,eAAe,EAAE,QAAQ;AAAA,QAAA,CAC1B;AAED,mBAAW,aAAa,QAAQ;AAAA,MAClC;AAGA,UAAIA,YAAW,YAAY,OAAO,KAAKA,YAAW,QAAQ,EAAE,SAAS,GAAG;AACtE,gBAAQ,IAAA;AACR,gBAAQ,IAAI,MAAM,MAAM,YAAY,CAAC;AACrC,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQA,YAAW,QAAQ,GAAG;AAC9D,gBAAM,eAAe,OAAO,UAAU,WAAW,KAAK,UAAU,KAAK,IAAI,OAAO,KAAK;AACrF,kBAAQ,IAAI,MAAM,KAAK,OAAO,GAAG,KAAK,aAAa,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC;AAAA,QACxE;AAAA,MACF;AAEA,cAAQ,IAAA;AAAA,IACV,SAAS,OAAO;AACd,cAAQ,MAAM,MAAM,IAAI,4BAA4B,GAAG,OAAO,KAAK,CAAC;AACpE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAGH,aACG,QAAQ,UAAU,EAClB,YAAY,+BAA+B,EAC3C,OAAO,wBAAwB,sCAAsC,KAAK,EAC1E,OAAO,iBAAiB,yDAAyD,EACjF,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,YAAY;AACzB,QAAI;AACF,YAAM,gBAAgB,WAAW,QAAQ,aAAa,KAAK;AAG3D,YAAM,UAAU,wBAAwB;AAAA,QACtC,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,MAAA,CACrB;AAED,YAAM,WAAW,QAAQ,YAAY;AAAA,QACnC;AAAA,QACA,MAAM,QAAQ;AAAA,MAAA,CACf;AAED,UAAI,QAAQ,MAAM;AAChB,gBAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAC7C;AAAA,MACF;AAEA,cAAQ,IAAI,MAAM,KAAK,KAAK,yBAAyB,CAAC;AAEtD,UAAI,SAAS,WAAW,GAAG;AACzB,gBAAQ,IAAI,MAAM,KAAK,6BAA6B,CAAC;AACrD,gBAAQ,IAAI,MAAM,KAAK,4DAA4D,CAAC;AACpF,gBAAQ,IAAA;AACR;AAAA,MACF;AAEA,YAAM,UAAU,CAAC,MAAM,QAAQ,aAAa,WAAW,YAAY;AACnE,YAAM,OAAO,SAAS,IAAI,CAAC,MAAM;AAAA,QAC/B,EAAE,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE,GAAG,SAAS,KAAK,QAAQ;AAAA,QACpD,EAAE;AAAA,QACF,OAAO,EAAE,SAAS;AAAA,QAClB,IAAI,EAAE,cAAc,KAAK,QAAQ,CAAC,CAAC;AAAA,QACnC,IAAI,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC;AAAA,MAAA,CACnC;AAED,iBAAW,SAAS,IAAI;AAGxB,UAAI,SAAS,SAAS,GAAG;AACvB,cAAM,MAAM,SAAS,CAAC;AACtB,gBAAQ,IAAA;AACR,gBAAQ,IAAI,MAAM,MAAM,uBAAuB,CAAC;AAChD,gBAAQ,IAAI,MAAM,KAAK,WAAW,IAAI,EAAE,EAAE,CAAC;AAC3C,gBAAQ,IAAI,MAAM,KAAK,gBAAgB,IAAI,QAAQ,KAAK,MAAM,CAAC,EAAE,CAAC;AAClE,gBAAQ,IAAI,MAAM,KAAK,qBAAqB,eAAe,IAAI,WAAW,CAAC,EAAE,CAAC;AAAA,MAChF;AAEA,cAAQ,IAAA;AAAA,IACV,SAAS,OAAO;AACd,cAAQ,MAAM,MAAM,IAAI,0BAA0B,GAAG,OAAO,KAAK,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAGH,aACG,QAAQ,OAAO,EACf,YAAY,2BAA2B,EACvC,OAAO,aAAa,iCAAiC,EACrD,OAAO,OAAO,YAAY;AACzB,QAAI;AACF,UAAI,CAAC,QAAQ,SAAS;AACpB,gBAAQ,IAAI,MAAM,OAAO,sDAAsD,CAAC;AAChF,gBAAQ,IAAI,MAAM,KAAK,6BAA6B,CAAC;AACrD,gBAAQ,IAAA;AACR;AAAA,MACF;AAEA,YAAM,UAAU,wBAAA;AAChB,cAAQ,MAAA;AAER,cAAQ,IAAI,MAAM,MAAM,gCAAgC,CAAC;AAAA,IAC3D,SAAS,OAAO;AACd,cAAQ,MAAM,MAAM,IAAI,+BAA+B,GAAG,OAAO,KAAK,CAAC;AACvE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,SAAO;AACT;AAaA,SAAS,oBAAoB,MAAc,YAA8B;AACvE,QAAM,YAAsB,CAAA;AAC5B,QAAM,aAAa,KAAK,YAAA,EAAc,KAAA;AAGtC,WAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,QAAI,QAAQ;AACZ,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,YAAM,WAAW,WAAW,WAAW,CAAC;AACxC,eAAS,KAAK,IAAI,YAAY,IAAI,KAAK,GAAG,IAAI,KAAK,IAAI,IAAI,GAAG;AAAA,IAChE;AAEA,cAAU,KAAK,KAAK,KAAK,QAAQ,KAAK,IAAI,GAAG,WAAW,MAAM,CAAC,CAAC;AAAA,EAClE;AAGA,QAAM,OAAO,KAAK,KAAK,UAAU,OAAO,CAAC,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC;AACnE,SAAO,UAAU,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;AAC7C;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAiJnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAwJnC"}
package/dist/cli/index.js CHANGED
@@ -21,6 +21,7 @@ import { createVectorCommand } from "./commands/vector.js";
21
21
  import { createServeCommand } from "./commands/serve.js";
22
22
  import { createDashboardCommand } from "./commands/dashboard.js";
23
23
  import { createPluginCommand } from "./commands/plugin.js";
24
+ import { createHiveMindCommand } from "./commands/hive-mind/index.js";
24
25
  const VERSION = "0.4.0";
25
26
  function createCLI() {
26
27
  const program = new Command();
@@ -52,6 +53,7 @@ function createCLI() {
52
53
  program.addCommand(createServeCommand());
53
54
  program.addCommand(createDashboardCommand());
54
55
  program.addCommand(createPluginCommand());
56
+ program.addCommand(createHiveMindCommand());
55
57
  program.action(() => {
56
58
  console.log(chalk.cyan.bold("\n Knowledge Graph Agent\n"));
57
59
  console.log(chalk.gray(" Generate and manage knowledge graphs for Claude Code\n"));
@@ -135,6 +137,11 @@ function createCLI() {
135
137
  console.log(chalk.gray(" $ kg plugin info <name> # Show plugin details"));
136
138
  console.log(chalk.gray(" $ kg plugin run <n> <file> # Run analyzer plugin"));
137
139
  console.log(chalk.gray(" $ kg plugin create <name> # Create new plugin\n"));
140
+ console.log(chalk.white(" Hive Mind (Graph Reconnection):"));
141
+ console.log(chalk.gray(" $ kg hive-mind analyze-links <vault> # Analyze wiki-links"));
142
+ console.log(chalk.gray(" $ kg hive-mind find-connections <vault> # Find potential links"));
143
+ console.log(chalk.gray(" $ kg hive-mind validate-names <vault> # Validate file names"));
144
+ console.log(chalk.gray(" $ kg hive-mind add-frontmatter <vault> # Add YAML frontmatter\n"));
138
145
  console.log(chalk.white(" Commands:"));
139
146
  program.commands.forEach((cmd) => {
140
147
  console.log(chalk.cyan(` ${cmd.name().padEnd(20)}`), chalk.gray(cmd.description() || ""));