clawvault 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +422 -141
  2. package/bin/clawvault.js +10 -2
  3. package/bin/command-registration.test.js +3 -1
  4. package/bin/command-runtime.js +9 -1
  5. package/bin/register-core-commands.js +23 -28
  6. package/bin/register-maintenance-commands.js +39 -3
  7. package/bin/register-query-commands.js +58 -29
  8. package/bin/register-tailscale-commands.js +106 -0
  9. package/bin/register-task-commands.js +18 -1
  10. package/bin/register-task-commands.test.js +16 -0
  11. package/bin/register-vault-operations-commands.js +29 -1
  12. package/bin/register-workgraph-commands.js +1368 -0
  13. package/dashboard/lib/graph-diff.js +104 -0
  14. package/dashboard/lib/graph-diff.test.js +75 -0
  15. package/dashboard/lib/vault-parser.js +556 -0
  16. package/dashboard/lib/vault-parser.test.js +254 -0
  17. package/dashboard/public/app.js +796 -0
  18. package/dashboard/public/index.html +52 -0
  19. package/dashboard/public/styles.css +221 -0
  20. package/dashboard/server.js +374 -0
  21. package/dist/{chunk-F2JEUD4J.js → chunk-23YDQ3QU.js} +6 -8
  22. package/dist/{chunk-C7OK5WKP.js → chunk-2JQ3O2YL.js} +4 -4
  23. package/dist/{chunk-VR5NE7PZ.js → chunk-2RAZ4ZFE.js} +1 -1
  24. package/dist/chunk-2ZDO52B4.js +52 -0
  25. package/dist/{chunk-ZZA73MFY.js → chunk-33DOSHTA.js} +176 -36
  26. package/dist/chunk-33VSQP4J.js +37 -0
  27. package/dist/chunk-4BQTQMJP.js +93 -0
  28. package/dist/{chunk-GUKMRGM7.js → chunk-4OXMU5S2.js} +1 -1
  29. package/dist/{chunk-62YTUT6J.js → chunk-4PY655YM.js} +15 -3
  30. package/dist/chunk-6FH3IULF.js +352 -0
  31. package/dist/{chunk-3NSBOUT3.js → chunk-77Q5CSPJ.js} +404 -80
  32. package/dist/{chunk-4VQTUVH7.js → chunk-7YZWHM36.js} +52 -26
  33. package/dist/chunk-BSJ6RIT7.js +447 -0
  34. package/dist/chunk-BUEW6IIK.js +364 -0
  35. package/dist/{chunk-LI4O6NVK.js → chunk-CLJTREDS.js} +74 -14
  36. package/dist/chunk-EK6S23ZB.js +469 -0
  37. package/dist/{chunk-LNJA2UGL.js → chunk-ESFLMDRB.js} +9 -86
  38. package/dist/{chunk-H34S76MB.js → chunk-ESVS6K2B.js} +6 -6
  39. package/dist/{chunk-WAZ3NLWL.js → chunk-F55HGNU4.js} +0 -47
  40. package/dist/{chunk-QK3UCXWL.js → chunk-FHFUXL6G.js} +2 -2
  41. package/dist/{chunk-H62BP7RI.js → chunk-GAOWA7GR.js} +212 -46
  42. package/dist/chunk-GGA32J2R.js +784 -0
  43. package/dist/chunk-GNJL4YGR.js +79 -0
  44. package/dist/chunk-IVRIKYFE.js +520 -0
  45. package/dist/chunk-MDIH26GC.js +183 -0
  46. package/dist/{chunk-LYHGEHXG.js → chunk-MFAWT5O5.js} +0 -1
  47. package/dist/chunk-MM6QGW3P.js +207 -0
  48. package/dist/{chunk-P5EPF6MB.js → chunk-MW5C6ZQA.js} +110 -13
  49. package/dist/chunk-NCKFNBHJ.js +257 -0
  50. package/dist/{chunk-QBLMXKF2.js → chunk-OIWVQYQF.js} +1 -1
  51. package/dist/{chunk-42MXU7A6.js → chunk-P62WHA27.js} +58 -47
  52. package/dist/chunk-PBACDKKP.js +66 -0
  53. package/dist/{chunk-VGLOTGAS.js → chunk-QSHD36LH.js} +2 -2
  54. package/dist/{chunk-OZ7RIXTO.js → chunk-QSRRMEYM.js} +2 -2
  55. package/dist/chunk-QVEERJSP.js +152 -0
  56. package/dist/{chunk-N2AXRYLC.js → chunk-QWQ3TIKS.js} +1 -1
  57. package/dist/{chunk-3DHXQHYG.js → chunk-R2MIW5G7.js} +1 -1
  58. package/dist/{chunk-SJSFRIYS.js → chunk-SLXOR3CC.js} +2 -2
  59. package/dist/chunk-SS4B7P7V.js +99 -0
  60. package/dist/{chunk-JY6FYXIT.js → chunk-STCQGCEQ.js} +6 -11
  61. package/dist/chunk-TIGW564L.js +628 -0
  62. package/dist/chunk-U4O6C46S.js +154 -0
  63. package/dist/{chunk-ITPEXLHA.js → chunk-URXDAUVH.js} +24 -5
  64. package/dist/chunk-VSL7KY3M.js +189 -0
  65. package/dist/{chunk-U55BGUAU.js → chunk-W4SPAEE7.js} +6 -6
  66. package/dist/chunk-WMGIIABP.js +15 -0
  67. package/dist/{chunk-33UGEQRT.js → chunk-X3SPPUFG.js} +151 -64
  68. package/dist/chunk-Y6VJKXGL.js +373 -0
  69. package/dist/{chunk-3WRJEKN4.js → chunk-ZN54U2OZ.js} +123 -10
  70. package/dist/cli/index.js +34 -24
  71. package/dist/commands/archive.js +3 -3
  72. package/dist/commands/backlog.js +3 -3
  73. package/dist/commands/blocked.js +3 -3
  74. package/dist/commands/canvas.d.ts +15 -0
  75. package/dist/commands/canvas.js +200 -0
  76. package/dist/commands/checkpoint.js +2 -2
  77. package/dist/commands/compat.js +2 -2
  78. package/dist/commands/context.js +8 -6
  79. package/dist/commands/doctor.d.ts +11 -7
  80. package/dist/commands/doctor.js +18 -16
  81. package/dist/commands/embed.js +5 -6
  82. package/dist/commands/entities.js +2 -2
  83. package/dist/commands/graph.js +4 -4
  84. package/dist/commands/inject.d.ts +1 -1
  85. package/dist/commands/inject.js +5 -6
  86. package/dist/commands/kanban.js +4 -4
  87. package/dist/commands/link.js +5 -5
  88. package/dist/commands/migrate-observations.js +4 -4
  89. package/dist/commands/observe.d.ts +0 -1
  90. package/dist/commands/observe.js +14 -13
  91. package/dist/commands/project.js +5 -5
  92. package/dist/commands/rebuild-embeddings.d.ts +21 -0
  93. package/dist/commands/rebuild-embeddings.js +91 -0
  94. package/dist/commands/rebuild.js +12 -11
  95. package/dist/commands/recover.js +3 -3
  96. package/dist/commands/reflect.js +6 -7
  97. package/dist/commands/repair-session.js +1 -1
  98. package/dist/commands/replay.js +14 -14
  99. package/dist/commands/session-recap.js +1 -1
  100. package/dist/commands/setup.d.ts +2 -89
  101. package/dist/commands/setup.js +3 -21
  102. package/dist/commands/shell-init.js +1 -1
  103. package/dist/commands/sleep.d.ts +1 -1
  104. package/dist/commands/sleep.js +20 -19
  105. package/dist/commands/status.d.ts +2 -0
  106. package/dist/commands/status.js +57 -35
  107. package/dist/commands/sync-bd.d.ts +10 -0
  108. package/dist/commands/sync-bd.js +10 -0
  109. package/dist/commands/tailscale.d.ts +52 -0
  110. package/dist/commands/tailscale.js +26 -0
  111. package/dist/commands/task.js +4 -4
  112. package/dist/commands/template.js +2 -2
  113. package/dist/commands/wake.d.ts +1 -1
  114. package/dist/commands/wake.js +11 -10
  115. package/dist/commands/workgraph.d.ts +124 -0
  116. package/dist/commands/workgraph.js +38 -0
  117. package/dist/index.d.ts +341 -191
  118. package/dist/index.js +446 -116
  119. package/dist/{inject-Bzi5E-By.d.ts → inject-DYUrDqQO.d.ts} +3 -3
  120. package/dist/ledger-B7g7jhqG.d.ts +44 -0
  121. package/dist/lib/auto-linker.js +2 -2
  122. package/dist/lib/canvas-layout.d.ts +115 -0
  123. package/dist/lib/canvas-layout.js +35 -0
  124. package/dist/lib/config.d.ts +27 -3
  125. package/dist/lib/config.js +4 -2
  126. package/dist/lib/entity-index.js +1 -1
  127. package/dist/lib/project-utils.js +4 -4
  128. package/dist/lib/session-repair.js +1 -1
  129. package/dist/lib/session-utils.js +1 -1
  130. package/dist/lib/tailscale.d.ts +225 -0
  131. package/dist/lib/tailscale.js +50 -0
  132. package/dist/lib/task-utils.js +3 -3
  133. package/dist/lib/template-engine.js +1 -1
  134. package/dist/lib/webdav.d.ts +109 -0
  135. package/dist/lib/webdav.js +35 -0
  136. package/dist/onnxruntime_binding-5QEF3SUC.node +0 -0
  137. package/dist/onnxruntime_binding-BKPKNEGC.node +0 -0
  138. package/dist/onnxruntime_binding-FMOXGIUT.node +0 -0
  139. package/dist/onnxruntime_binding-OI2KMXC5.node +0 -0
  140. package/dist/onnxruntime_binding-UX44MLAZ.node +0 -0
  141. package/dist/onnxruntime_binding-Y2W7N7WY.node +0 -0
  142. package/dist/openclaw-plugin.d.ts +8 -0
  143. package/dist/openclaw-plugin.js +14 -0
  144. package/dist/registry-BR4326o0.d.ts +30 -0
  145. package/dist/store-CA-6sKCJ.d.ts +34 -0
  146. package/dist/thread-B9LhXNU0.d.ts +41 -0
  147. package/dist/transformers.node-A2ZRORSQ.js +46775 -0
  148. package/dist/{types-Y2_Um2Ls.d.ts → types-BbWJoC1c.d.ts} +1 -44
  149. package/dist/workgraph/index.d.ts +5 -0
  150. package/dist/workgraph/index.js +23 -0
  151. package/dist/workgraph/ledger.d.ts +2 -0
  152. package/dist/workgraph/ledger.js +25 -0
  153. package/dist/workgraph/registry.d.ts +2 -0
  154. package/dist/workgraph/registry.js +19 -0
  155. package/dist/workgraph/store.d.ts +2 -0
  156. package/dist/workgraph/store.js +25 -0
  157. package/dist/workgraph/thread.d.ts +2 -0
  158. package/dist/workgraph/thread.js +25 -0
  159. package/dist/workgraph/types.d.ts +54 -0
  160. package/dist/workgraph/types.js +7 -0
  161. package/hooks/clawvault/HOOK.md +113 -0
  162. package/hooks/clawvault/handler.js +1561 -0
  163. package/hooks/clawvault/handler.test.js +510 -0
  164. package/hooks/clawvault/openclaw.plugin.json +72 -0
  165. package/openclaw.plugin.json +65 -38
  166. package/package.json +25 -22
  167. package/dist/chunk-3RG5ZIWI.js +0 -10
  168. package/dist/chunk-3ZIH425O.js +0 -871
  169. package/dist/chunk-6U6MK36V.js +0 -205
  170. package/dist/chunk-CMB7UL7C.js +0 -327
  171. package/dist/chunk-D2H45LON.js +0 -1074
  172. package/dist/chunk-E7MFQB6D.js +0 -163
  173. package/dist/chunk-GQSLDZTS.js +0 -560
  174. package/dist/chunk-MFM6K7PU.js +0 -374
  175. package/dist/chunk-MXSSG3QU.js +0 -42
  176. package/dist/chunk-OCGVIN3L.js +0 -88
  177. package/dist/chunk-PAH27GSN.js +0 -108
  178. package/dist/chunk-YCUNCH2I.js +0 -78
  179. package/dist/cli/index.cjs +0 -8584
  180. package/dist/cli/index.d.cts +0 -5
  181. package/dist/commands/archive.cjs +0 -287
  182. package/dist/commands/archive.d.cts +0 -11
  183. package/dist/commands/backlog.cjs +0 -721
  184. package/dist/commands/backlog.d.cts +0 -53
  185. package/dist/commands/blocked.cjs +0 -204
  186. package/dist/commands/blocked.d.cts +0 -26
  187. package/dist/commands/checkpoint.cjs +0 -244
  188. package/dist/commands/checkpoint.d.cts +0 -41
  189. package/dist/commands/compat.cjs +0 -294
  190. package/dist/commands/compat.d.cts +0 -28
  191. package/dist/commands/context.cjs +0 -2990
  192. package/dist/commands/context.d.cts +0 -2
  193. package/dist/commands/doctor.cjs +0 -2986
  194. package/dist/commands/doctor.d.cts +0 -21
  195. package/dist/commands/embed.cjs +0 -232
  196. package/dist/commands/embed.d.cts +0 -17
  197. package/dist/commands/entities.cjs +0 -141
  198. package/dist/commands/entities.d.cts +0 -7
  199. package/dist/commands/graph.cjs +0 -501
  200. package/dist/commands/graph.d.cts +0 -21
  201. package/dist/commands/inject.cjs +0 -1636
  202. package/dist/commands/inject.d.cts +0 -2
  203. package/dist/commands/kanban.cjs +0 -884
  204. package/dist/commands/kanban.d.cts +0 -63
  205. package/dist/commands/link.cjs +0 -965
  206. package/dist/commands/link.d.cts +0 -11
  207. package/dist/commands/migrate-observations.cjs +0 -362
  208. package/dist/commands/migrate-observations.d.cts +0 -19
  209. package/dist/commands/observe.cjs +0 -4099
  210. package/dist/commands/observe.d.cts +0 -23
  211. package/dist/commands/project.cjs +0 -1341
  212. package/dist/commands/project.d.cts +0 -85
  213. package/dist/commands/rebuild.cjs +0 -3136
  214. package/dist/commands/rebuild.d.cts +0 -11
  215. package/dist/commands/recover.cjs +0 -361
  216. package/dist/commands/recover.d.cts +0 -38
  217. package/dist/commands/reflect.cjs +0 -1008
  218. package/dist/commands/reflect.d.cts +0 -11
  219. package/dist/commands/repair-session.cjs +0 -457
  220. package/dist/commands/repair-session.d.cts +0 -38
  221. package/dist/commands/replay.cjs +0 -4103
  222. package/dist/commands/replay.d.cts +0 -16
  223. package/dist/commands/session-recap.cjs +0 -353
  224. package/dist/commands/session-recap.d.cts +0 -27
  225. package/dist/commands/setup.cjs +0 -1278
  226. package/dist/commands/setup.d.cts +0 -99
  227. package/dist/commands/shell-init.cjs +0 -75
  228. package/dist/commands/shell-init.d.cts +0 -7
  229. package/dist/commands/sleep.cjs +0 -6029
  230. package/dist/commands/sleep.d.cts +0 -36
  231. package/dist/commands/status.cjs +0 -2737
  232. package/dist/commands/status.d.cts +0 -52
  233. package/dist/commands/task.cjs +0 -1236
  234. package/dist/commands/task.d.cts +0 -97
  235. package/dist/commands/template.cjs +0 -457
  236. package/dist/commands/template.d.cts +0 -36
  237. package/dist/commands/wake.cjs +0 -2627
  238. package/dist/commands/wake.d.cts +0 -22
  239. package/dist/context-BUGaWpyL.d.cts +0 -46
  240. package/dist/index.cjs +0 -12373
  241. package/dist/index.d.cts +0 -854
  242. package/dist/inject-Bzi5E-By.d.cts +0 -137
  243. package/dist/lib/auto-linker.cjs +0 -176
  244. package/dist/lib/auto-linker.d.cts +0 -26
  245. package/dist/lib/config.cjs +0 -78
  246. package/dist/lib/config.d.cts +0 -11
  247. package/dist/lib/entity-index.cjs +0 -84
  248. package/dist/lib/entity-index.d.cts +0 -26
  249. package/dist/lib/project-utils.cjs +0 -864
  250. package/dist/lib/project-utils.d.cts +0 -97
  251. package/dist/lib/session-repair.cjs +0 -239
  252. package/dist/lib/session-repair.d.cts +0 -110
  253. package/dist/lib/session-utils.cjs +0 -209
  254. package/dist/lib/session-utils.d.cts +0 -63
  255. package/dist/lib/task-utils.cjs +0 -1137
  256. package/dist/lib/task-utils.d.cts +0 -208
  257. package/dist/lib/template-engine.cjs +0 -47
  258. package/dist/lib/template-engine.d.cts +0 -11
  259. package/dist/plugin/index.cjs +0 -1907
  260. package/dist/plugin/index.d.cts +0 -36
  261. package/dist/plugin/index.d.ts +0 -36
  262. package/dist/plugin/index.js +0 -572
  263. package/dist/plugin/inject.cjs +0 -356
  264. package/dist/plugin/inject.d.cts +0 -54
  265. package/dist/plugin/inject.d.ts +0 -54
  266. package/dist/plugin/inject.js +0 -17
  267. package/dist/plugin/observe.cjs +0 -631
  268. package/dist/plugin/observe.d.cts +0 -39
  269. package/dist/plugin/observe.d.ts +0 -39
  270. package/dist/plugin/observe.js +0 -18
  271. package/dist/plugin/templates.cjs +0 -593
  272. package/dist/plugin/templates.d.cts +0 -52
  273. package/dist/plugin/templates.d.ts +0 -52
  274. package/dist/plugin/templates.js +0 -25
  275. package/dist/plugin/types.cjs +0 -18
  276. package/dist/plugin/types.d.cts +0 -209
  277. package/dist/plugin/types.d.ts +0 -209
  278. package/dist/plugin/types.js +0 -0
  279. package/dist/plugin/vault.cjs +0 -927
  280. package/dist/plugin/vault.d.cts +0 -68
  281. package/dist/plugin/vault.d.ts +0 -68
  282. package/dist/plugin/vault.js +0 -22
  283. package/dist/types-Y2_Um2Ls.d.cts +0 -205
  284. package/templates/memory-event.md +0 -67
  285. package/templates/party.md +0 -63
  286. package/templates/primitive-registry.yaml +0 -551
  287. package/templates/run.md +0 -68
  288. package/templates/trigger.md +0 -68
  289. package/templates/workspace.md +0 -50
@@ -1,12 +1,15 @@
1
1
  import {
2
2
  ClawVault
3
- } from "./chunk-LI4O6NVK.js";
3
+ } from "./chunk-CLJTREDS.js";
4
4
  import {
5
- getMemoryGraph
6
- } from "./chunk-ZZA73MFY.js";
5
+ FactStore
6
+ } from "./chunk-BSJ6RIT7.js";
7
7
  import {
8
8
  parseObservationMarkdown
9
- } from "./chunk-QK3UCXWL.js";
9
+ } from "./chunk-FHFUXL6G.js";
10
+ import {
11
+ getMemoryGraph
12
+ } from "./chunk-33DOSHTA.js";
10
13
  import {
11
14
  listObservationFiles
12
15
  } from "./chunk-Z2XBWN7A.js";
@@ -141,7 +144,56 @@ var STOP_WORDS = /* @__PURE__ */ new Set([
141
144
  "why",
142
145
  "with",
143
146
  "you",
144
- "your"
147
+ "your",
148
+ "\u0438",
149
+ "\u0432",
150
+ "\u0432\u043E",
151
+ "\u043D\u0430",
152
+ "\u043F\u043E",
153
+ "\u0441",
154
+ "\u0441\u043E",
155
+ "\u043A",
156
+ "\u043A\u043E",
157
+ "\u0443",
158
+ "\u043E",
159
+ "\u043E\u0431",
160
+ "\u043E\u0442",
161
+ "\u0434\u043E",
162
+ "\u0437\u0430",
163
+ "\u0438\u0437",
164
+ "\u043F\u043E\u0434",
165
+ "\u043D\u0430\u0434",
166
+ "\u043D\u0435",
167
+ "\u043D\u043E",
168
+ "\u0430",
169
+ "\u0438\u043B\u0438",
170
+ "\u0447\u0442\u043E",
171
+ "\u043A\u0430\u043A",
172
+ "\u044D\u0442\u043E",
173
+ "\u0442\u043E",
174
+ "\u0436\u0435",
175
+ "\u043B\u0438",
176
+ "\u0434\u043B\u044F",
177
+ "\u043F\u0440\u0438",
178
+ "\u043F\u0440\u043E",
179
+ "\u043C\u044B",
180
+ "\u0432\u044B",
181
+ "\u043E\u043D\u0438",
182
+ "\u043E\u043D",
183
+ "\u043E\u043D\u0430",
184
+ "\u043E\u043D\u043E",
185
+ "\u044F",
186
+ "\u0442\u044B",
187
+ "\u043C\u043E\u0439",
188
+ "\u043C\u043E\u044F",
189
+ "\u043C\u043E\u0451",
190
+ "\u043C\u043E\u0438",
191
+ "\u0442\u0432\u043E\u0439",
192
+ "\u0442\u0432\u043E\u044F",
193
+ "\u0442\u0432\u043E\u0438",
194
+ "\u043D\u0430\u0448",
195
+ "\u043D\u0430\u0448\u0430",
196
+ "\u0438\u0445"
145
197
  ]);
146
198
  function formatRelativeAge(date, now = Date.now()) {
147
199
  const ageMs = Math.max(0, now - date.getTime());
@@ -179,24 +231,24 @@ function formatContextMarkdown(task, entries) {
179
231
  }
180
232
  var PROFILE_ORDERING = {
181
233
  default: {
182
- order: ["structural", "daily", "search", "graph", "potential", "contextual"],
234
+ order: ["structural", "fact", "daily", "search", "graph", "potential", "contextual"],
183
235
  caps: {}
184
236
  },
185
237
  planning: {
186
- order: ["search", "graph", "structural", "potential", "daily", "contextual"],
238
+ order: ["fact", "search", "graph", "structural", "potential", "daily", "contextual"],
187
239
  caps: { observation: 12, graph: 12 }
188
240
  },
189
241
  incident: {
190
- order: ["structural", "search", "potential", "daily", "graph", "contextual"],
242
+ order: ["structural", "fact", "search", "potential", "daily", "graph", "contextual"],
191
243
  caps: { observation: 20, graph: 8 }
192
244
  },
193
245
  handoff: {
194
- order: ["daily", "structural", "potential", "search", "graph", "contextual"],
246
+ order: ["daily", "structural", "fact", "potential", "search", "graph", "contextual"],
195
247
  caps: { "daily-note": 2, observation: 15 }
196
248
  }
197
249
  };
198
250
  function extractKeywords(text) {
199
- const raw = text.toLowerCase().match(/[a-z0-9]+/g) ?? [];
251
+ const raw = text.toLowerCase().match(/[\p{L}\p{N}]+/gu) ?? [];
200
252
  const seen = /* @__PURE__ */ new Set();
201
253
  const keywords = [];
202
254
  for (const token of raw) {
@@ -369,6 +421,64 @@ function buildObservationContextItems(vaultPath, queryKeywords) {
369
421
  }
370
422
  return items;
371
423
  }
424
+ var PREFERENCE_PATTERNS = /\b(prefer|like|favorite|favourit|enjoy|habit|allergy|allergic|diet|dislike|want|love|hate|routine)\b/i;
425
+ var TEMPORAL_PATTERNS = /\b(yesterday|today|last\s+(?:week|month|year|monday|tuesday|wednesday|thursday|friday|saturday|sunday)|in\s+\d{4}|on\s+\w+\s+\d{1,2}|\d{4}-\d{2}-\d{2}|january|february|march|april|may|june|july|august|september|october|november|december)\b/i;
426
+ function isPreferenceQuery(query) {
427
+ return PREFERENCE_PATTERNS.test(query);
428
+ }
429
+ function isTemporalQuery(query) {
430
+ return TEMPORAL_PATTERNS.test(query);
431
+ }
432
+ function buildFactContextItems(vaultPath, query, _queryKeywords) {
433
+ const factStore = new FactStore(vaultPath);
434
+ try {
435
+ factStore.load();
436
+ } catch {
437
+ return [];
438
+ }
439
+ const stats = factStore.stats();
440
+ if (stats.activeFacts === 0) return [];
441
+ const items = [];
442
+ const preferenceQuery = isPreferenceQuery(query);
443
+ const temporalQuery = isTemporalQuery(query);
444
+ const matchingFacts = factStore.searchFacts(query);
445
+ if (preferenceQuery) {
446
+ const prefs = factStore.getPreferences();
447
+ for (const pref of prefs) {
448
+ if (!matchingFacts.find((f) => f.id === pref.id)) {
449
+ matchingFacts.push(pref);
450
+ }
451
+ }
452
+ }
453
+ for (const fact of matchingFacts.slice(0, 10)) {
454
+ const factText = `${fact.entity} ${fact.relation} ${fact.value}`;
455
+ let score = fact.confidence * 0.8;
456
+ if (preferenceQuery && fact.category === "preference") {
457
+ score *= 1.5;
458
+ }
459
+ if (temporalQuery && (fact.relation.includes("_on") || fact.relation.includes("date") || fact.relation.includes("time"))) {
460
+ score *= 1.3;
461
+ }
462
+ const entry = {
463
+ title: `Fact: ${fact.entity} \u2192 ${fact.relation}`,
464
+ path: fact.source,
465
+ category: fact.category,
466
+ score: Math.min(1, score),
467
+ snippet: factText,
468
+ modified: fact.validFrom,
469
+ age: formatRelativeAge(new Date(fact.validFrom)),
470
+ source: "observation",
471
+ // Use 'observation' since ContextSource doesn't include 'fact'
472
+ signals: ["fact_store", fact.category],
473
+ rationale: `Extracted fact (${fact.category}, confidence: ${fact.confidence.toFixed(2)})`
474
+ };
475
+ items.push({
476
+ priority: preferenceQuery && fact.category === "preference" ? 1 : 2,
477
+ entry
478
+ });
479
+ }
480
+ return items;
481
+ }
372
482
  function buildSearchContextItems(vault, results) {
373
483
  return results.map((result) => {
374
484
  const relativePath = path.relative(vault.getPath(), result.document.path).split(path.sep).join("/");
@@ -592,6 +702,7 @@ async function buildContext(task, options) {
592
702
  });
593
703
  const searchItems = buildSearchContextItems(vault, searchResults);
594
704
  const dailyItems = buildDailyContextItems(vault.getPath(), allDocuments);
705
+ const factItems = buildFactContextItems(vault.getPath(), normalizedTask, queryKeywords);
595
706
  const observationItems = includeObservations ? buildObservationContextItems(vault.getPath(), queryKeywords) : [];
596
707
  const graph = await getMemoryGraph(vault.getPath());
597
708
  const graphItems = buildGraphContextItems({
@@ -608,11 +719,13 @@ async function buildContext(task, options) {
608
719
  const contextualObservations = observationItems.filter((item) => item.priority === 5).sort(byScoreDesc);
609
720
  const sortedDailyItems = [...dailyItems].sort(byScoreDesc);
610
721
  const sortedSearchItems = [...searchItems].sort(byScoreDesc);
722
+ const sortedFactItems = [...factItems].sort(byScoreDesc);
611
723
  const sortedGraphItems = [...graphItems].sort(byScoreDesc);
612
724
  const grouped = {
613
725
  structural: structuralObservations,
614
726
  daily: sortedDailyItems,
615
727
  search: sortedSearchItems,
728
+ fact: sortedFactItems,
616
729
  graph: sortedGraphItems,
617
730
  potential: potentialObservations,
618
731
  contextual: contextualObservations
package/dist/cli/index.js CHANGED
@@ -1,32 +1,42 @@
1
1
  import {
2
2
  registerCliCommands
3
- } from "../chunk-YCUNCH2I.js";
4
- import "../chunk-F2JEUD4J.js";
5
- import "../chunk-P5EPF6MB.js";
6
- import "../chunk-SJSFRIYS.js";
7
- import "../chunk-H34S76MB.js";
8
- import "../chunk-LNJA2UGL.js";
9
- import "../chunk-3NSBOUT3.js";
10
- import "../chunk-62YTUT6J.js";
3
+ } from "../chunk-33VSQP4J.js";
4
+ import "../chunk-Y6VJKXGL.js";
5
+ import "../chunk-TIGW564L.js";
6
+ import "../chunk-IVRIKYFE.js";
7
+ import "../chunk-GGA32J2R.js";
8
+ import "../chunk-VSL7KY3M.js";
9
+ import "../chunk-QVEERJSP.js";
10
+ import "../chunk-4BQTQMJP.js";
11
+ import "../chunk-MM6QGW3P.js";
12
+ import "../chunk-WMGIIABP.js";
13
+ import "../chunk-23YDQ3QU.js";
14
+ import "../chunk-MW5C6ZQA.js";
15
+ import "../chunk-SLXOR3CC.js";
16
+ import "../chunk-ESVS6K2B.js";
17
+ import "../chunk-ZN54U2OZ.js";
18
+ import "../chunk-ESFLMDRB.js";
11
19
  import "../chunk-HRLWZGMA.js";
12
- import "../chunk-OCGVIN3L.js";
13
- import "../chunk-U55BGUAU.js";
14
- import "../chunk-E7MFQB6D.js";
15
- import "../chunk-ITPEXLHA.js";
16
- import "../chunk-PAH27GSN.js";
17
- import "../chunk-MQUJNOHK.js";
18
- import "../chunk-MXSSG3QU.js";
19
- import "../chunk-N2AXRYLC.js";
20
- import "../chunk-LYHGEHXG.js";
21
- import "../chunk-7766SIJP.js";
22
- import "../chunk-3WRJEKN4.js";
23
- import "../chunk-LI4O6NVK.js";
24
- import "../chunk-D2H45LON.js";
20
+ import "../chunk-77Q5CSPJ.js";
21
+ import "../chunk-4PY655YM.js";
22
+ import "../chunk-CLJTREDS.js";
23
+ import "../chunk-BSJ6RIT7.js";
24
+ import "../chunk-FHFUXL6G.js";
25
+ import "../chunk-PBACDKKP.js";
26
+ import "../chunk-6FH3IULF.js";
27
+ import "../chunk-EK6S23ZB.js";
28
+ import "../chunk-W4SPAEE7.js";
29
+ import "../chunk-URXDAUVH.js";
30
+ import "../chunk-NCKFNBHJ.js";
25
31
  import "../chunk-2CDEETQN.js";
26
- import "../chunk-ZZA73MFY.js";
27
- import "../chunk-QK3UCXWL.js";
32
+ import "../chunk-MQUJNOHK.js";
33
+ import "../chunk-GNJL4YGR.js";
34
+ import "../chunk-33DOSHTA.js";
28
35
  import "../chunk-Z2XBWN7A.js";
29
- import "../chunk-3RG5ZIWI.js";
36
+ import "../chunk-QWQ3TIKS.js";
37
+ import "../chunk-MFAWT5O5.js";
38
+ import "../chunk-7766SIJP.js";
39
+ import "../chunk-2ZDO52B4.js";
30
40
  export {
31
41
  registerCliCommands
32
42
  };
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  archiveCommand,
3
3
  registerArchiveCommand
4
- } from "../chunk-VR5NE7PZ.js";
4
+ } from "../chunk-2RAZ4ZFE.js";
5
5
  import "../chunk-MQUJNOHK.js";
6
- import "../chunk-MXSSG3QU.js";
6
+ import "../chunk-GNJL4YGR.js";
7
7
  import "../chunk-Z2XBWN7A.js";
8
- import "../chunk-3RG5ZIWI.js";
8
+ import "../chunk-2ZDO52B4.js";
9
9
  export {
10
10
  archiveCommand,
11
11
  registerArchiveCommand
@@ -2,10 +2,10 @@ import {
2
2
  createBacklogItem,
3
3
  listBacklogItems,
4
4
  promoteBacklogItem
5
- } from "../chunk-N2AXRYLC.js";
6
- import "../chunk-LYHGEHXG.js";
5
+ } from "../chunk-QWQ3TIKS.js";
6
+ import "../chunk-MFAWT5O5.js";
7
7
  import "../chunk-7766SIJP.js";
8
- import "../chunk-3RG5ZIWI.js";
8
+ import "../chunk-2ZDO52B4.js";
9
9
 
10
10
  // src/commands/backlog.ts
11
11
  function toDateStr(val) {
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  getBlockedTasks
3
- } from "../chunk-N2AXRYLC.js";
4
- import "../chunk-LYHGEHXG.js";
3
+ } from "../chunk-QWQ3TIKS.js";
4
+ import "../chunk-MFAWT5O5.js";
5
5
  import "../chunk-7766SIJP.js";
6
- import "../chunk-3RG5ZIWI.js";
6
+ import "../chunk-2ZDO52B4.js";
7
7
 
8
8
  // src/commands/blocked.ts
9
9
  function toDateStr(val) {
@@ -0,0 +1,15 @@
1
+ import { Canvas } from '../lib/canvas-layout.js';
2
+
3
+ interface CanvasOptions {
4
+ output?: string;
5
+ }
6
+ /**
7
+ * Generate the vault status canvas.
8
+ */
9
+ declare function generateCanvas(vaultPath: string): Canvas;
10
+ /**
11
+ * Canvas command handler for CLI.
12
+ */
13
+ declare function canvasCommand(vaultPath: string, options?: CanvasOptions): Promise<void>;
14
+
15
+ export { type CanvasOptions, canvasCommand, generateCanvas };
@@ -0,0 +1,200 @@
1
+ import {
2
+ CANVAS_COLORS,
3
+ LAYOUT,
4
+ createGroupWithNodes,
5
+ createTextNode,
6
+ flattenGroups,
7
+ positionGroupsVertically,
8
+ truncateText
9
+ } from "../chunk-MDIH26GC.js";
10
+ import {
11
+ loadMemoryGraphIndex
12
+ } from "../chunk-33DOSHTA.js";
13
+ import {
14
+ listObservationFiles
15
+ } from "../chunk-Z2XBWN7A.js";
16
+ import {
17
+ listTasks
18
+ } from "../chunk-QWQ3TIKS.js";
19
+ import "../chunk-MFAWT5O5.js";
20
+ import "../chunk-7766SIJP.js";
21
+ import "../chunk-2ZDO52B4.js";
22
+
23
+ // src/commands/canvas.ts
24
+ import * as fs2 from "fs";
25
+ import * as path2 from "path";
26
+
27
+ // src/lib/canvas-default-template.ts
28
+ import * as fs from "fs";
29
+ import * as path from "path";
30
+ var STATUS_ORDER = ["in-progress", "open", "blocked", "done"];
31
+ var STATUS_LABELS = {
32
+ "in-progress": "In Progress",
33
+ open: "Open",
34
+ blocked: "Blocked",
35
+ done: "Done"
36
+ };
37
+ var STATUS_COLORS = {
38
+ "in-progress": CANVAS_COLORS.ORANGE,
39
+ open: void 0,
40
+ blocked: CANVAS_COLORS.RED,
41
+ done: CANVAS_COLORS.GREEN
42
+ };
43
+ function groupTasksByStatus(tasks) {
44
+ const grouped = {
45
+ open: [],
46
+ "in-progress": [],
47
+ blocked: [],
48
+ done: []
49
+ };
50
+ for (const task of tasks) {
51
+ grouped[task.frontmatter.status].push(task);
52
+ }
53
+ return grouped;
54
+ }
55
+ function readObservationTitle(filePath) {
56
+ try {
57
+ const content = fs.readFileSync(filePath, "utf-8");
58
+ const headingMatch = content.match(/^#\s+(.+)$/m);
59
+ if (headingMatch?.[1]) {
60
+ return truncateText(headingMatch[1].trim(), 44);
61
+ }
62
+ const firstBodyLine = content.split(/\r?\n/).map((line) => line.trim()).find((line) => line.length > 0 && line !== "---" && !line.includes(":"));
63
+ return firstBodyLine ? truncateText(firstBodyLine, 44) : null;
64
+ } catch {
65
+ return null;
66
+ }
67
+ }
68
+ function buildTaskStatusGroup(tasks) {
69
+ const grouped = groupTasksByStatus(tasks);
70
+ const summaryLines = STATUS_ORDER.map((status) => `${STATUS_LABELS[status]}: ${grouped[status].length}`);
71
+ const childNodes = [
72
+ createTextNode(
73
+ 0,
74
+ 0,
75
+ LAYOUT.DEFAULT_NODE_WIDTH,
76
+ LAYOUT.SMALL_NODE_HEIGHT + 24,
77
+ `**Tasks by Status**
78
+
79
+ Total: ${tasks.length}
80
+ ${summaryLines.join("\n")}`
81
+ )
82
+ ];
83
+ for (const status of STATUS_ORDER) {
84
+ const bucket = grouped[status];
85
+ const lines = bucket.length === 0 ? ["- none"] : bucket.slice(0, 6).map((task) => `- ${truncateText(task.title, 42)}`);
86
+ if (bucket.length > 6) {
87
+ lines.push(`- ... and ${bucket.length - 6} more`);
88
+ }
89
+ childNodes.push(
90
+ createTextNode(
91
+ 0,
92
+ 0,
93
+ LAYOUT.DEFAULT_NODE_WIDTH,
94
+ LAYOUT.SMALL_NODE_HEIGHT + lines.length * 18,
95
+ `**${STATUS_LABELS[status]} (${bucket.length})**
96
+
97
+ ${lines.join("\n")}`,
98
+ STATUS_COLORS[status]
99
+ )
100
+ );
101
+ }
102
+ return createGroupWithNodes(
103
+ LAYOUT.LEFT_COLUMN_X,
104
+ 0,
105
+ LAYOUT.LEFT_COLUMN_WIDTH,
106
+ "Vault Status",
107
+ childNodes,
108
+ CANVAS_COLORS.CYAN
109
+ );
110
+ }
111
+ function buildRecentObservationsGroup(vaultPath) {
112
+ const observations = listObservationFiles(vaultPath, { includeLegacy: true, includeArchive: false });
113
+ const recent = observations.slice(-8).reverse();
114
+ const lines = recent.length === 0 ? ["- none"] : recent.map((entry) => {
115
+ const title = readObservationTitle(entry.path);
116
+ return title ? `- ${entry.date}: ${title}` : `- ${entry.date}`;
117
+ });
118
+ const text = [
119
+ "**Recent Observations**",
120
+ "",
121
+ `Total days: ${observations.length}`,
122
+ "",
123
+ ...lines
124
+ ].join("\n");
125
+ return createGroupWithNodes(
126
+ LAYOUT.LEFT_COLUMN_X,
127
+ 0,
128
+ LAYOUT.LEFT_COLUMN_WIDTH,
129
+ "Recent Observations",
130
+ [createTextNode(0, 0, LAYOUT.DEFAULT_NODE_WIDTH, LAYOUT.DEFAULT_NODE_HEIGHT + lines.length * 18, text)],
131
+ CANVAS_COLORS.CYAN
132
+ );
133
+ }
134
+ function buildGraphStatsGroup(vaultPath) {
135
+ const graph = loadMemoryGraphIndex(vaultPath)?.graph;
136
+ const textLines = ["**Graph Stats**", ""];
137
+ if (!graph) {
138
+ textLines.push("Graph index not found.");
139
+ textLines.push("Run `clawvault graph --build` to populate it.");
140
+ } else {
141
+ textLines.push(`Nodes: ${graph.stats.nodeCount}`);
142
+ textLines.push(`Edges: ${graph.stats.edgeCount}`);
143
+ textLines.push("");
144
+ textLines.push("Node types:");
145
+ const nodeTypeLines = Object.entries(graph.stats.nodeTypeCounts).sort((left, right) => right[1] - left[1]).slice(0, 6).map(([type, count]) => `- ${type}: ${count}`);
146
+ textLines.push(...nodeTypeLines.length > 0 ? nodeTypeLines : ["- none"]);
147
+ }
148
+ return createGroupWithNodes(
149
+ LAYOUT.LEFT_COLUMN_X,
150
+ 0,
151
+ LAYOUT.LEFT_COLUMN_WIDTH,
152
+ "Graph Stats",
153
+ [
154
+ createTextNode(
155
+ 0,
156
+ 0,
157
+ LAYOUT.DEFAULT_NODE_WIDTH,
158
+ LAYOUT.DEFAULT_NODE_HEIGHT + (textLines.length - 1) * 16,
159
+ textLines.join("\n")
160
+ )
161
+ ],
162
+ CANVAS_COLORS.PURPLE
163
+ );
164
+ }
165
+ function generateDefaultCanvas(vaultPath) {
166
+ const resolvedPath = path.resolve(vaultPath);
167
+ const tasks = listTasks(resolvedPath);
168
+ const groups = positionGroupsVertically([
169
+ buildTaskStatusGroup(tasks),
170
+ buildRecentObservationsGroup(resolvedPath),
171
+ buildGraphStatsGroup(resolvedPath)
172
+ ]);
173
+ return {
174
+ nodes: flattenGroups(groups),
175
+ edges: []
176
+ };
177
+ }
178
+
179
+ // src/lib/canvas-templates.ts
180
+ function generateCanvas(vaultPath) {
181
+ return generateDefaultCanvas(vaultPath);
182
+ }
183
+
184
+ // src/commands/canvas.ts
185
+ function generateCanvas2(vaultPath) {
186
+ return generateCanvas(path2.resolve(vaultPath));
187
+ }
188
+ async function canvasCommand(vaultPath, options = {}) {
189
+ const resolvedPath = path2.resolve(vaultPath);
190
+ const outputPath = options.output || path2.join(resolvedPath, "dashboard.canvas");
191
+ const canvas = generateCanvas(resolvedPath);
192
+ fs2.writeFileSync(outputPath, JSON.stringify(canvas, null, 2));
193
+ console.log(`\u2713 Generated canvas: ${outputPath}`);
194
+ console.log(` Nodes: ${canvas.nodes.length}`);
195
+ console.log(` Edges: ${canvas.edges.length}`);
196
+ }
197
+ export {
198
+ canvasCommand,
199
+ generateCanvas2 as generateCanvas
200
+ };
@@ -5,8 +5,8 @@ import {
5
5
  clearDirtyFlag,
6
6
  flush,
7
7
  setSessionState
8
- } from "../chunk-WAZ3NLWL.js";
9
- import "../chunk-3RG5ZIWI.js";
8
+ } from "../chunk-F55HGNU4.js";
9
+ import "../chunk-2ZDO52B4.js";
10
10
  export {
11
11
  checkDirtyDeath,
12
12
  checkpoint,
@@ -2,8 +2,8 @@ import {
2
2
  checkOpenClawCompatibility,
3
3
  compatCommand,
4
4
  compatibilityExitCode
5
- } from "../chunk-33UGEQRT.js";
6
- import "../chunk-3RG5ZIWI.js";
5
+ } from "../chunk-X3SPPUFG.js";
6
+ import "../chunk-2ZDO52B4.js";
7
7
  export {
8
8
  checkOpenClawCompatibility,
9
9
  compatCommand,
@@ -3,14 +3,16 @@ import {
3
3
  contextCommand,
4
4
  formatContextMarkdown,
5
5
  registerContextCommand
6
- } from "../chunk-3WRJEKN4.js";
7
- import "../chunk-LI4O6NVK.js";
8
- import "../chunk-D2H45LON.js";
6
+ } from "../chunk-ZN54U2OZ.js";
7
+ import "../chunk-CLJTREDS.js";
8
+ import "../chunk-BSJ6RIT7.js";
9
+ import "../chunk-FHFUXL6G.js";
10
+ import "../chunk-6FH3IULF.js";
11
+ import "../chunk-EK6S23ZB.js";
9
12
  import "../chunk-2CDEETQN.js";
10
- import "../chunk-ZZA73MFY.js";
11
- import "../chunk-QK3UCXWL.js";
13
+ import "../chunk-33DOSHTA.js";
12
14
  import "../chunk-Z2XBWN7A.js";
13
- import "../chunk-3RG5ZIWI.js";
15
+ import "../chunk-2ZDO52B4.js";
14
16
  export {
15
17
  buildContext,
16
18
  contextCommand,
@@ -4,18 +4,22 @@ interface DoctorCheck {
4
4
  status: DoctorStatus;
5
5
  detail?: string;
6
6
  hint?: string;
7
+ category?: 'system' | 'migration' | 'health';
7
8
  }
8
9
  interface DoctorReport {
9
10
  vaultPath?: string;
10
- qmdCollection?: string;
11
- qmdRoot?: string;
12
11
  checks: DoctorCheck[];
13
12
  warnings: number;
14
13
  errors: number;
14
+ migrationIssues: MigrationIssue[];
15
15
  }
16
- declare function doctor(options?: string | {
17
- vaultPath?: string;
18
- fix?: boolean;
19
- }): Promise<DoctorReport>;
16
+ interface MigrationIssue {
17
+ type: MigrationIssueType;
18
+ description: string;
19
+ autoFixable: boolean;
20
+ details?: Record<string, unknown>;
21
+ }
22
+ type MigrationIssueType = 'stale_collection_name' | 'missing_qmd_collection' | 'wrong_vault_path' | 'orphaned_collection' | 'missing_qmd_config' | 'legacy_config_format';
23
+ declare function doctor(vaultPath?: string): Promise<DoctorReport>;
20
24
 
21
- export { type DoctorCheck, type DoctorReport, type DoctorStatus, doctor };
25
+ export { type DoctorCheck, type DoctorReport, type DoctorStatus, type MigrationIssue, type MigrationIssueType, doctor };
@@ -1,26 +1,28 @@
1
1
  import {
2
2
  doctor
3
- } from "../chunk-H62BP7RI.js";
3
+ } from "../chunk-GAOWA7GR.js";
4
+ import "../chunk-7YZWHM36.js";
4
5
  import "../chunk-7ZRP733D.js";
5
- import "../chunk-4VQTUVH7.js";
6
+ import "../chunk-X3SPPUFG.js";
6
7
  import "../chunk-J7ZWCI2C.js";
7
- import "../chunk-LNJA2UGL.js";
8
- import "../chunk-3NSBOUT3.js";
9
- import "../chunk-62YTUT6J.js";
8
+ import "../chunk-ESFLMDRB.js";
10
9
  import "../chunk-HRLWZGMA.js";
11
- import "../chunk-ITPEXLHA.js";
12
- import "../chunk-PAH27GSN.js";
13
- import "../chunk-N2AXRYLC.js";
14
- import "../chunk-LYHGEHXG.js";
15
- import "../chunk-7766SIJP.js";
16
- import "../chunk-33UGEQRT.js";
17
- import "../chunk-LI4O6NVK.js";
18
- import "../chunk-D2H45LON.js";
10
+ import "../chunk-77Q5CSPJ.js";
11
+ import "../chunk-4PY655YM.js";
12
+ import "../chunk-CLJTREDS.js";
13
+ import "../chunk-BSJ6RIT7.js";
14
+ import "../chunk-FHFUXL6G.js";
15
+ import "../chunk-6FH3IULF.js";
16
+ import "../chunk-EK6S23ZB.js";
17
+ import "../chunk-URXDAUVH.js";
18
+ import "../chunk-NCKFNBHJ.js";
19
19
  import "../chunk-2CDEETQN.js";
20
- import "../chunk-ZZA73MFY.js";
21
- import "../chunk-QK3UCXWL.js";
20
+ import "../chunk-33DOSHTA.js";
22
21
  import "../chunk-Z2XBWN7A.js";
23
- import "../chunk-3RG5ZIWI.js";
22
+ import "../chunk-QWQ3TIKS.js";
23
+ import "../chunk-MFAWT5O5.js";
24
+ import "../chunk-7766SIJP.js";
25
+ import "../chunk-2ZDO52B4.js";
24
26
  export {
25
27
  doctor
26
28
  };
@@ -1,12 +1,11 @@
1
1
  import {
2
2
  embedCommand,
3
3
  registerEmbedCommand
4
- } from "../chunk-OCGVIN3L.js";
5
- import "../chunk-MXSSG3QU.js";
6
- import "../chunk-D2H45LON.js";
7
- import "../chunk-QK3UCXWL.js";
8
- import "../chunk-Z2XBWN7A.js";
9
- import "../chunk-3RG5ZIWI.js";
4
+ } from "../chunk-PBACDKKP.js";
5
+ import "../chunk-6FH3IULF.js";
6
+ import "../chunk-EK6S23ZB.js";
7
+ import "../chunk-GNJL4YGR.js";
8
+ import "../chunk-2ZDO52B4.js";
10
9
  export {
11
10
  embedCommand,
12
11
  registerEmbedCommand
@@ -3,8 +3,8 @@ import {
3
3
  } from "../chunk-J7ZWCI2C.js";
4
4
  import {
5
5
  resolveVaultPath
6
- } from "../chunk-MXSSG3QU.js";
7
- import "../chunk-3RG5ZIWI.js";
6
+ } from "../chunk-GNJL4YGR.js";
7
+ import "../chunk-2ZDO52B4.js";
8
8
 
9
9
  // src/commands/entities.ts
10
10
  async function entitiesCommand(options) {