clawvault 3.0.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 (291) hide show
  1. package/README.md +352 -20
  2. package/bin/clawvault.js +8 -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 -10
  6. package/bin/register-maintenance-commands.js +39 -3
  7. package/bin/register-query-commands.js +58 -29
  8. package/bin/register-task-commands.js +18 -1
  9. package/bin/register-task-commands.test.js +16 -0
  10. package/bin/register-vault-operations-commands.js +29 -1
  11. package/bin/register-workgraph-commands.js +1368 -0
  12. package/dashboard/lib/graph-diff.js +104 -0
  13. package/dashboard/lib/graph-diff.test.js +75 -0
  14. package/dashboard/lib/vault-parser.js +556 -0
  15. package/dashboard/lib/vault-parser.test.js +254 -0
  16. package/dashboard/public/app.js +796 -0
  17. package/dashboard/public/index.html +52 -0
  18. package/dashboard/public/styles.css +221 -0
  19. package/dashboard/server.js +374 -0
  20. package/dist/{chunk-F2JEUD4J.js → chunk-23YDQ3QU.js} +6 -8
  21. package/dist/{chunk-C7OK5WKP.js → chunk-2JQ3O2YL.js} +4 -4
  22. package/dist/{chunk-VR5NE7PZ.js → chunk-2RAZ4ZFE.js} +1 -1
  23. package/dist/chunk-2ZDO52B4.js +52 -0
  24. package/dist/{chunk-ZZA73MFY.js → chunk-33DOSHTA.js} +176 -36
  25. package/dist/chunk-33VSQP4J.js +37 -0
  26. package/dist/chunk-4BQTQMJP.js +93 -0
  27. package/dist/{chunk-GUKMRGM7.js → chunk-4OXMU5S2.js} +1 -1
  28. package/dist/{chunk-62YTUT6J.js → chunk-4PY655YM.js} +15 -3
  29. package/dist/chunk-6FH3IULF.js +352 -0
  30. package/dist/{chunk-3NSBOUT3.js → chunk-77Q5CSPJ.js} +404 -80
  31. package/dist/{chunk-4VQTUVH7.js → chunk-7YZWHM36.js} +52 -26
  32. package/dist/chunk-BSJ6RIT7.js +447 -0
  33. package/dist/chunk-BUEW6IIK.js +364 -0
  34. package/dist/{chunk-WGRQ6HDV.js → chunk-CLJTREDS.js} +74 -14
  35. package/dist/chunk-EK6S23ZB.js +469 -0
  36. package/dist/{chunk-LNJA2UGL.js → chunk-ESFLMDRB.js} +9 -86
  37. package/dist/{chunk-H34S76MB.js → chunk-ESVS6K2B.js} +6 -6
  38. package/dist/{chunk-WAZ3NLWL.js → chunk-F55HGNU4.js} +0 -47
  39. package/dist/{chunk-QK3UCXWL.js → chunk-FHFUXL6G.js} +2 -2
  40. package/dist/{chunk-YKTA5JOJ.js → chunk-GAOWA7GR.js} +212 -46
  41. package/dist/chunk-GGA32J2R.js +784 -0
  42. package/dist/chunk-GNJL4YGR.js +79 -0
  43. package/dist/chunk-MDIH26GC.js +183 -0
  44. package/dist/{chunk-LYHGEHXG.js → chunk-MFAWT5O5.js} +0 -1
  45. package/dist/chunk-MM6QGW3P.js +207 -0
  46. package/dist/{chunk-P5EPF6MB.js → chunk-MW5C6ZQA.js} +110 -13
  47. package/dist/chunk-NCKFNBHJ.js +257 -0
  48. package/dist/{chunk-QBLMXKF2.js → chunk-OIWVQYQF.js} +1 -1
  49. package/dist/{chunk-42MXU7A6.js → chunk-P62WHA27.js} +58 -47
  50. package/dist/chunk-PBACDKKP.js +66 -0
  51. package/dist/{chunk-VGLOTGAS.js → chunk-QSHD36LH.js} +2 -2
  52. package/dist/{chunk-OZ7RIXTO.js → chunk-QSRRMEYM.js} +2 -2
  53. package/dist/chunk-QVEERJSP.js +152 -0
  54. package/dist/{chunk-N2AXRYLC.js → chunk-QWQ3TIKS.js} +1 -1
  55. package/dist/{chunk-3DHXQHYG.js → chunk-R2MIW5G7.js} +1 -1
  56. package/dist/{chunk-SJSFRIYS.js → chunk-SLXOR3CC.js} +2 -2
  57. package/dist/chunk-SS4B7P7V.js +99 -0
  58. package/dist/{chunk-JY6FYXIT.js → chunk-STCQGCEQ.js} +6 -11
  59. package/dist/chunk-U4O6C46S.js +154 -0
  60. package/dist/{chunk-ITPEXLHA.js → chunk-URXDAUVH.js} +24 -5
  61. package/dist/chunk-VSL7KY3M.js +189 -0
  62. package/dist/{chunk-U55BGUAU.js → chunk-W4SPAEE7.js} +6 -6
  63. package/dist/chunk-WMGIIABP.js +15 -0
  64. package/dist/{chunk-3D6BCTP6.js → chunk-X3SPPUFG.js} +51 -39
  65. package/dist/{chunk-THRJVD4L.js → chunk-Y6VJKXGL.js} +1 -1
  66. package/dist/{chunk-ZVVFWOLW.js → chunk-ZN54U2OZ.js} +123 -10
  67. package/dist/cli/index.js +32 -25
  68. package/dist/commands/archive.js +3 -3
  69. package/dist/commands/backlog.js +3 -3
  70. package/dist/commands/blocked.js +3 -3
  71. package/dist/commands/canvas.d.ts +15 -0
  72. package/dist/commands/canvas.js +200 -0
  73. package/dist/commands/checkpoint.js +2 -2
  74. package/dist/commands/compat.js +2 -2
  75. package/dist/commands/context.js +8 -6
  76. package/dist/commands/doctor.d.ts +11 -7
  77. package/dist/commands/doctor.js +18 -16
  78. package/dist/commands/embed.js +5 -6
  79. package/dist/commands/entities.js +2 -2
  80. package/dist/commands/graph.js +4 -4
  81. package/dist/commands/inject.d.ts +1 -1
  82. package/dist/commands/inject.js +5 -6
  83. package/dist/commands/kanban.js +4 -4
  84. package/dist/commands/link.js +5 -5
  85. package/dist/commands/migrate-observations.js +4 -4
  86. package/dist/commands/observe.d.ts +0 -1
  87. package/dist/commands/observe.js +14 -13
  88. package/dist/commands/project.js +5 -5
  89. package/dist/commands/rebuild-embeddings.d.ts +21 -0
  90. package/dist/commands/rebuild-embeddings.js +91 -0
  91. package/dist/commands/rebuild.js +12 -11
  92. package/dist/commands/recover.js +3 -3
  93. package/dist/commands/reflect.js +6 -7
  94. package/dist/commands/repair-session.js +1 -1
  95. package/dist/commands/replay.js +14 -14
  96. package/dist/commands/session-recap.js +1 -1
  97. package/dist/commands/setup.d.ts +2 -90
  98. package/dist/commands/setup.js +3 -21
  99. package/dist/commands/shell-init.js +1 -1
  100. package/dist/commands/sleep.d.ts +1 -1
  101. package/dist/commands/sleep.js +20 -19
  102. package/dist/commands/status.d.ts +2 -0
  103. package/dist/commands/status.js +57 -35
  104. package/dist/commands/sync-bd.d.ts +10 -0
  105. package/dist/commands/sync-bd.js +10 -0
  106. package/dist/commands/tailscale.js +3 -3
  107. package/dist/commands/task.js +4 -4
  108. package/dist/commands/template.js +2 -2
  109. package/dist/commands/wake.d.ts +1 -1
  110. package/dist/commands/wake.js +11 -10
  111. package/dist/commands/workgraph.d.ts +124 -0
  112. package/dist/commands/workgraph.js +38 -0
  113. package/dist/index.d.ts +337 -191
  114. package/dist/index.js +387 -118
  115. package/dist/{inject-Bzi5E-By.d.cts → inject-DYUrDqQO.d.ts} +3 -3
  116. package/dist/ledger-B7g7jhqG.d.ts +44 -0
  117. package/dist/lib/auto-linker.js +2 -2
  118. package/dist/lib/canvas-layout.d.ts +100 -16
  119. package/dist/lib/canvas-layout.js +21 -78
  120. package/dist/lib/config.d.ts +27 -3
  121. package/dist/lib/config.js +4 -2
  122. package/dist/lib/entity-index.js +1 -1
  123. package/dist/lib/project-utils.js +4 -4
  124. package/dist/lib/session-repair.js +1 -1
  125. package/dist/lib/session-utils.js +1 -1
  126. package/dist/lib/tailscale.js +1 -1
  127. package/dist/lib/task-utils.js +3 -3
  128. package/dist/lib/template-engine.js +1 -1
  129. package/dist/lib/webdav.js +1 -1
  130. package/dist/onnxruntime_binding-5QEF3SUC.node +0 -0
  131. package/dist/onnxruntime_binding-BKPKNEGC.node +0 -0
  132. package/dist/onnxruntime_binding-FMOXGIUT.node +0 -0
  133. package/dist/onnxruntime_binding-OI2KMXC5.node +0 -0
  134. package/dist/onnxruntime_binding-UX44MLAZ.node +0 -0
  135. package/dist/onnxruntime_binding-Y2W7N7WY.node +0 -0
  136. package/dist/openclaw-plugin.d.ts +8 -0
  137. package/dist/openclaw-plugin.js +14 -0
  138. package/dist/registry-BR4326o0.d.ts +30 -0
  139. package/dist/store-CA-6sKCJ.d.ts +34 -0
  140. package/dist/thread-B9LhXNU0.d.ts +41 -0
  141. package/dist/transformers.node-A2ZRORSQ.js +46775 -0
  142. package/dist/{types-Y2_Um2Ls.d.cts → types-BbWJoC1c.d.ts} +1 -44
  143. package/dist/workgraph/index.d.ts +5 -0
  144. package/dist/workgraph/index.js +23 -0
  145. package/dist/workgraph/ledger.d.ts +2 -0
  146. package/dist/workgraph/ledger.js +25 -0
  147. package/dist/workgraph/registry.d.ts +2 -0
  148. package/dist/workgraph/registry.js +19 -0
  149. package/dist/workgraph/store.d.ts +2 -0
  150. package/dist/workgraph/store.js +25 -0
  151. package/dist/workgraph/thread.d.ts +2 -0
  152. package/dist/workgraph/thread.js +25 -0
  153. package/dist/workgraph/types.d.ts +54 -0
  154. package/dist/workgraph/types.js +7 -0
  155. package/hooks/clawvault/HOOK.md +34 -4
  156. package/hooks/clawvault/handler.js +760 -78
  157. package/hooks/clawvault/handler.test.js +235 -79
  158. package/hooks/clawvault/openclaw.plugin.json +72 -0
  159. package/openclaw.plugin.json +65 -38
  160. package/package.json +15 -18
  161. package/dist/chunk-3RG5ZIWI.js +0 -10
  162. package/dist/chunk-6U6MK36V.js +0 -205
  163. package/dist/chunk-7R7O6STJ.js +0 -88
  164. package/dist/chunk-CMB7UL7C.js +0 -327
  165. package/dist/chunk-DEFFDRVP.js +0 -938
  166. package/dist/chunk-E7MFQB6D.js +0 -163
  167. package/dist/chunk-GAJV4IGR.js +0 -82
  168. package/dist/chunk-GQSLDZTS.js +0 -560
  169. package/dist/chunk-K234IDRJ.js +0 -1073
  170. package/dist/chunk-MFM6K7PU.js +0 -374
  171. package/dist/chunk-MXSSG3QU.js +0 -42
  172. package/dist/chunk-PAH27GSN.js +0 -108
  173. package/dist/cli/index.cjs +0 -10033
  174. package/dist/cli/index.d.cts +0 -5
  175. package/dist/commands/archive.cjs +0 -287
  176. package/dist/commands/archive.d.cts +0 -11
  177. package/dist/commands/backlog.cjs +0 -721
  178. package/dist/commands/backlog.d.cts +0 -53
  179. package/dist/commands/blocked.cjs +0 -204
  180. package/dist/commands/blocked.d.cts +0 -26
  181. package/dist/commands/checkpoint.cjs +0 -244
  182. package/dist/commands/checkpoint.d.cts +0 -41
  183. package/dist/commands/compat.cjs +0 -369
  184. package/dist/commands/compat.d.cts +0 -28
  185. package/dist/commands/context.cjs +0 -2989
  186. package/dist/commands/context.d.cts +0 -2
  187. package/dist/commands/doctor.cjs +0 -3062
  188. package/dist/commands/doctor.d.cts +0 -21
  189. package/dist/commands/embed.cjs +0 -232
  190. package/dist/commands/embed.d.cts +0 -17
  191. package/dist/commands/entities.cjs +0 -141
  192. package/dist/commands/entities.d.cts +0 -7
  193. package/dist/commands/graph.cjs +0 -501
  194. package/dist/commands/graph.d.cts +0 -21
  195. package/dist/commands/inject.cjs +0 -1636
  196. package/dist/commands/inject.d.cts +0 -2
  197. package/dist/commands/kanban.cjs +0 -884
  198. package/dist/commands/kanban.d.cts +0 -63
  199. package/dist/commands/link.cjs +0 -965
  200. package/dist/commands/link.d.cts +0 -11
  201. package/dist/commands/migrate-observations.cjs +0 -362
  202. package/dist/commands/migrate-observations.d.cts +0 -19
  203. package/dist/commands/observe.cjs +0 -4099
  204. package/dist/commands/observe.d.cts +0 -23
  205. package/dist/commands/project.cjs +0 -1341
  206. package/dist/commands/project.d.cts +0 -85
  207. package/dist/commands/rebuild.cjs +0 -3136
  208. package/dist/commands/rebuild.d.cts +0 -11
  209. package/dist/commands/recover.cjs +0 -361
  210. package/dist/commands/recover.d.cts +0 -38
  211. package/dist/commands/reflect.cjs +0 -1008
  212. package/dist/commands/reflect.d.cts +0 -11
  213. package/dist/commands/repair-session.cjs +0 -457
  214. package/dist/commands/repair-session.d.cts +0 -38
  215. package/dist/commands/replay.cjs +0 -4103
  216. package/dist/commands/replay.d.cts +0 -16
  217. package/dist/commands/session-recap.cjs +0 -353
  218. package/dist/commands/session-recap.d.cts +0 -27
  219. package/dist/commands/setup.cjs +0 -1345
  220. package/dist/commands/setup.d.cts +0 -100
  221. package/dist/commands/shell-init.cjs +0 -75
  222. package/dist/commands/shell-init.d.cts +0 -7
  223. package/dist/commands/sleep.cjs +0 -6028
  224. package/dist/commands/sleep.d.cts +0 -36
  225. package/dist/commands/status.cjs +0 -2736
  226. package/dist/commands/status.d.cts +0 -52
  227. package/dist/commands/tailscale.cjs +0 -1532
  228. package/dist/commands/tailscale.d.cts +0 -52
  229. package/dist/commands/task.cjs +0 -1236
  230. package/dist/commands/task.d.cts +0 -97
  231. package/dist/commands/template.cjs +0 -457
  232. package/dist/commands/template.d.cts +0 -36
  233. package/dist/commands/wake.cjs +0 -2626
  234. package/dist/commands/wake.d.cts +0 -22
  235. package/dist/context-BUGaWpyL.d.cts +0 -46
  236. package/dist/index.cjs +0 -14526
  237. package/dist/index.d.cts +0 -858
  238. package/dist/inject-Bzi5E-By.d.ts +0 -137
  239. package/dist/lib/auto-linker.cjs +0 -176
  240. package/dist/lib/auto-linker.d.cts +0 -26
  241. package/dist/lib/canvas-layout.cjs +0 -136
  242. package/dist/lib/canvas-layout.d.cts +0 -31
  243. package/dist/lib/config.cjs +0 -78
  244. package/dist/lib/config.d.cts +0 -11
  245. package/dist/lib/entity-index.cjs +0 -84
  246. package/dist/lib/entity-index.d.cts +0 -26
  247. package/dist/lib/project-utils.cjs +0 -864
  248. package/dist/lib/project-utils.d.cts +0 -97
  249. package/dist/lib/session-repair.cjs +0 -239
  250. package/dist/lib/session-repair.d.cts +0 -110
  251. package/dist/lib/session-utils.cjs +0 -209
  252. package/dist/lib/session-utils.d.cts +0 -63
  253. package/dist/lib/tailscale.cjs +0 -1183
  254. package/dist/lib/tailscale.d.cts +0 -225
  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/lib/webdav.cjs +0 -568
  260. package/dist/lib/webdav.d.cts +0 -109
  261. package/dist/plugin/index.cjs +0 -1907
  262. package/dist/plugin/index.d.cts +0 -36
  263. package/dist/plugin/index.d.ts +0 -36
  264. package/dist/plugin/index.js +0 -572
  265. package/dist/plugin/inject.cjs +0 -356
  266. package/dist/plugin/inject.d.cts +0 -54
  267. package/dist/plugin/inject.d.ts +0 -54
  268. package/dist/plugin/inject.js +0 -17
  269. package/dist/plugin/observe.cjs +0 -631
  270. package/dist/plugin/observe.d.cts +0 -39
  271. package/dist/plugin/observe.d.ts +0 -39
  272. package/dist/plugin/observe.js +0 -18
  273. package/dist/plugin/templates.cjs +0 -593
  274. package/dist/plugin/templates.d.cts +0 -52
  275. package/dist/plugin/templates.d.ts +0 -52
  276. package/dist/plugin/templates.js +0 -25
  277. package/dist/plugin/types.cjs +0 -18
  278. package/dist/plugin/types.d.cts +0 -209
  279. package/dist/plugin/types.d.ts +0 -209
  280. package/dist/plugin/types.js +0 -0
  281. package/dist/plugin/vault.cjs +0 -927
  282. package/dist/plugin/vault.d.cts +0 -68
  283. package/dist/plugin/vault.d.ts +0 -68
  284. package/dist/plugin/vault.js +0 -22
  285. package/dist/types-Y2_Um2Ls.d.ts +0 -205
  286. package/templates/memory-event.md +0 -67
  287. package/templates/party.md +0 -63
  288. package/templates/primitive-registry.yaml +0 -551
  289. package/templates/run.md +0 -68
  290. package/templates/trigger.md +0 -68
  291. package/templates/workspace.md +0 -50
@@ -24,19 +24,6 @@ function findPackageRoot() {
24
24
  }
25
25
  return path.dirname(fileURLToPath(import.meta.url));
26
26
  }
27
- function resolveOpenClawHooksDir() {
28
- const candidates = [
29
- path.join(process.env.HOME || "", ".openclaw", "hooks", "clawvault"),
30
- path.join(process.env.OPENCLAW_HOME || "", "hooks", "clawvault"),
31
- path.join(process.env.OPENCLAW_STATE_DIR || "", "hooks", "clawvault")
32
- ].filter((p) => p && !p.startsWith(path.sep + "hooks"));
33
- for (const candidate of candidates) {
34
- if (fs.existsSync(candidate)) {
35
- return candidate;
36
- }
37
- }
38
- return null;
39
- }
40
27
  function resolveProjectFile(relativePath, baseDir) {
41
28
  if (baseDir) {
42
29
  return path.resolve(baseDir, relativePath);
@@ -45,20 +32,6 @@ function resolveProjectFile(relativePath, baseDir) {
45
32
  if (fs.existsSync(fromCwd)) {
46
33
  return fromCwd;
47
34
  }
48
- if (relativePath.startsWith("hooks/clawvault/")) {
49
- const hooksDir = resolveOpenClawHooksDir();
50
- if (hooksDir) {
51
- const hookRelative = relativePath.replace("hooks/clawvault/", "");
52
- const fromHooks = path.resolve(hooksDir, hookRelative);
53
- if (fs.existsSync(fromHooks)) {
54
- return fromHooks;
55
- }
56
- const fromNestedHooks = path.resolve(hooksDir, "hooks", "clawvault", hookRelative);
57
- if (fs.existsSync(fromNestedHooks)) {
58
- return fromNestedHooks;
59
- }
60
- }
61
- }
62
35
  return path.resolve(findPackageRoot(), relativePath);
63
36
  }
64
37
  function checkOpenClawCli() {
@@ -90,18 +63,7 @@ function checkOpenClawCli() {
90
63
  return { label: "openclaw CLI available", status: "ok" };
91
64
  }
92
65
  function checkPackageHookRegistration(options) {
93
- let packageRaw = readOptionalFile(resolveProjectFile("package.json", options.baseDir));
94
- if (packageRaw && !options.baseDir) {
95
- try {
96
- const parsed = JSON.parse(packageRaw);
97
- if (!parsed.openclaw?.hooks) {
98
- const fallbackPath = path.resolve(findPackageRoot(), "package.json");
99
- const fallbackRaw = readOptionalFile(fallbackPath);
100
- if (fallbackRaw) packageRaw = fallbackRaw;
101
- }
102
- } catch {
103
- }
104
- }
66
+ const packageRaw = readOptionalFile(resolveProjectFile("package.json", options.baseDir));
105
67
  if (!packageRaw) {
106
68
  return {
107
69
  label: "package hook registration",
@@ -233,6 +195,55 @@ function checkHookHandlerSafety(options) {
233
195
  }
234
196
  return { label: "hook handler safety", status: "ok" };
235
197
  }
198
+ function checkPluginManifest(options) {
199
+ const manifestRaw = readOptionalFile(resolveProjectFile("hooks/clawvault/openclaw.plugin.json", options.baseDir));
200
+ if (!manifestRaw) {
201
+ return {
202
+ label: "plugin manifest",
203
+ status: "error",
204
+ detail: "hooks/clawvault/openclaw.plugin.json not found",
205
+ hint: "Add openclaw.plugin.json to hooks/clawvault/ for config schema registration."
206
+ };
207
+ }
208
+ try {
209
+ const parsed = JSON.parse(manifestRaw);
210
+ if (!parsed.id || parsed.id !== "clawvault") {
211
+ return {
212
+ label: "plugin manifest",
213
+ status: "error",
214
+ detail: `Invalid plugin id: expected "clawvault", got "${parsed.id || "(missing)"}"`
215
+ };
216
+ }
217
+ if (!parsed.configSchema || typeof parsed.configSchema !== "object") {
218
+ return {
219
+ label: "plugin manifest",
220
+ status: "error",
221
+ detail: "Missing configSchema in plugin manifest",
222
+ hint: "Add configSchema to openclaw.plugin.json for config validation."
223
+ };
224
+ }
225
+ const hasVaultPath = Boolean(parsed.configSchema.properties?.vaultPath);
226
+ if (!hasVaultPath) {
227
+ return {
228
+ label: "plugin manifest",
229
+ status: "warn",
230
+ detail: "configSchema missing vaultPath property",
231
+ hint: "Add vaultPath to configSchema.properties for vault path configuration."
232
+ };
233
+ }
234
+ return {
235
+ label: "plugin manifest",
236
+ status: "ok",
237
+ detail: `id: ${parsed.id}, configSchema defined`
238
+ };
239
+ } catch (err) {
240
+ return {
241
+ label: "plugin manifest",
242
+ status: "error",
243
+ detail: err?.message || "Unable to parse openclaw.plugin.json"
244
+ };
245
+ }
246
+ }
236
247
  function checkSkillMetadata(options) {
237
248
  const skillRaw = readOptionalFile(resolveProjectFile("SKILL.md", options.baseDir));
238
249
  if (!skillRaw) {
@@ -274,6 +285,7 @@ function checkOpenClawCompatibility(options = {}) {
274
285
  const checks = [
275
286
  checkOpenClawCli(),
276
287
  checkPackageHookRegistration(options),
288
+ checkPluginManifest(options),
277
289
  checkHookManifest(options),
278
290
  checkHookManifestRequirements(options),
279
291
  checkHookHandlerSafety(options),
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-TIGW564L.js";
13
13
  import {
14
14
  resolveVaultPath
15
- } from "./chunk-MXSSG3QU.js";
15
+ } from "./chunk-GNJL4YGR.js";
16
16
 
17
17
  // src/commands/tailscale.ts
18
18
  import * as path from "path";
@@ -1,12 +1,15 @@
1
1
  import {
2
2
  ClawVault
3
- } from "./chunk-WGRQ6HDV.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,35 +1,42 @@
1
1
  import {
2
2
  registerCliCommands
3
- } from "../chunk-GAJV4IGR.js";
4
- import "../chunk-THRJVD4L.js";
3
+ } from "../chunk-33VSQP4J.js";
4
+ import "../chunk-Y6VJKXGL.js";
5
5
  import "../chunk-TIGW564L.js";
6
6
  import "../chunk-IVRIKYFE.js";
7
- import "../chunk-F2JEUD4J.js";
8
- import "../chunk-P5EPF6MB.js";
9
- import "../chunk-SJSFRIYS.js";
10
- import "../chunk-H34S76MB.js";
11
- import "../chunk-LNJA2UGL.js";
12
- import "../chunk-3NSBOUT3.js";
13
- import "../chunk-62YTUT6J.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";
14
19
  import "../chunk-HRLWZGMA.js";
15
- import "../chunk-7R7O6STJ.js";
16
- import "../chunk-U55BGUAU.js";
17
- import "../chunk-E7MFQB6D.js";
18
- import "../chunk-ITPEXLHA.js";
19
- import "../chunk-PAH27GSN.js";
20
- import "../chunk-MQUJNOHK.js";
21
- import "../chunk-MXSSG3QU.js";
22
- import "../chunk-N2AXRYLC.js";
23
- import "../chunk-LYHGEHXG.js";
24
- import "../chunk-7766SIJP.js";
25
- import "../chunk-ZVVFWOLW.js";
26
- import "../chunk-WGRQ6HDV.js";
27
- import "../chunk-K234IDRJ.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";
28
31
  import "../chunk-2CDEETQN.js";
29
- import "../chunk-ZZA73MFY.js";
30
- import "../chunk-QK3UCXWL.js";
32
+ import "../chunk-MQUJNOHK.js";
33
+ import "../chunk-GNJL4YGR.js";
34
+ import "../chunk-33DOSHTA.js";
31
35
  import "../chunk-Z2XBWN7A.js";
32
- import "../chunk-3RG5ZIWI.js";
36
+ import "../chunk-QWQ3TIKS.js";
37
+ import "../chunk-MFAWT5O5.js";
38
+ import "../chunk-7766SIJP.js";
39
+ import "../chunk-2ZDO52B4.js";
33
40
  export {
34
41
  registerCliCommands
35
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-3D6BCTP6.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,