clawvault 2.6.0 → 3.0.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 (232) hide show
  1. package/bin/command-registration.test.js +1 -3
  2. package/bin/register-core-commands.js +10 -23
  3. package/bin/register-maintenance-commands.js +3 -20
  4. package/bin/register-query-commands.js +23 -0
  5. package/bin/register-task-commands.js +1 -18
  6. package/bin/register-task-commands.test.js +0 -16
  7. package/bin/register-vault-operations-commands.js +1 -29
  8. package/dist/{chunk-QVMXF7FY.js → chunk-3D6BCTP6.js} +39 -1
  9. package/dist/{chunk-R2MIW5G7.js → chunk-3DHXQHYG.js} +1 -1
  10. package/dist/{chunk-Q2J5YTUF.js → chunk-3NSBOUT3.js} +73 -36
  11. package/dist/chunk-3RG5ZIWI.js +10 -0
  12. package/dist/{chunk-AZYOKJYC.js → chunk-62YTUT6J.js} +2 -2
  13. package/dist/chunk-6U6MK36V.js +205 -0
  14. package/dist/{chunk-4QYGFWRM.js → chunk-7R7O6STJ.js} +4 -4
  15. package/dist/{chunk-VXEOHTSL.js → chunk-C7OK5WKP.js} +4 -4
  16. package/dist/chunk-CMB7UL7C.js +327 -0
  17. package/dist/chunk-DEFFDRVP.js +938 -0
  18. package/dist/{chunk-K3CDT7IH.js → chunk-E7MFQB6D.js} +61 -20
  19. package/dist/{chunk-ME37YNW3.js → chunk-F2JEUD4J.js} +6 -4
  20. package/dist/chunk-GAJV4IGR.js +82 -0
  21. package/dist/chunk-GQSLDZTS.js +560 -0
  22. package/dist/{chunk-4OXMU5S2.js → chunk-GUKMRGM7.js} +1 -1
  23. package/dist/{chunk-YOSEUUNB.js → chunk-H34S76MB.js} +6 -6
  24. package/dist/{chunk-4TE4JMLA.js → chunk-JY6FYXIT.js} +10 -5
  25. package/dist/chunk-K234IDRJ.js +1073 -0
  26. package/dist/{chunk-IEVLHNLU.js → chunk-LNJA2UGL.js} +86 -9
  27. package/dist/{chunk-MFAWT5O5.js → chunk-LYHGEHXG.js} +1 -0
  28. package/dist/chunk-MFM6K7PU.js +374 -0
  29. package/dist/{chunk-QWQ3TIKS.js → chunk-N2AXRYLC.js} +1 -1
  30. package/dist/chunk-PAH27GSN.js +108 -0
  31. package/dist/{chunk-OIWVQYQF.js → chunk-QBLMXKF2.js} +1 -1
  32. package/dist/{chunk-FHFUXL6G.js → chunk-QK3UCXWL.js} +2 -2
  33. package/dist/{chunk-2YDBJS7M.js → chunk-SJSFRIYS.js} +1 -1
  34. package/dist/{chunk-GSD4ALSI.js → chunk-U55BGUAU.js} +2 -2
  35. package/dist/{chunk-PBEE567J.js → chunk-VGLOTGAS.js} +1 -1
  36. package/dist/{chunk-F55HGNU4.js → chunk-WAZ3NLWL.js} +47 -0
  37. package/dist/{chunk-KL4NAOMO.js → chunk-WGRQ6HDV.js} +1 -1
  38. package/dist/{chunk-UEOUADMO.js → chunk-YKTA5JOJ.js} +13 -10
  39. package/dist/{chunk-XAVB4GB4.js → chunk-ZVVFWOLW.js} +4 -4
  40. package/dist/cli/index.cjs +10033 -0
  41. package/dist/cli/index.d.cts +5 -0
  42. package/dist/cli/index.js +20 -18
  43. package/dist/commands/archive.cjs +287 -0
  44. package/dist/commands/archive.d.cts +11 -0
  45. package/dist/commands/archive.js +1 -0
  46. package/dist/commands/backlog.cjs +721 -0
  47. package/dist/commands/backlog.d.cts +53 -0
  48. package/dist/commands/backlog.js +3 -2
  49. package/dist/commands/blocked.cjs +204 -0
  50. package/dist/commands/blocked.d.cts +26 -0
  51. package/dist/commands/blocked.js +3 -2
  52. package/dist/commands/checkpoint.cjs +244 -0
  53. package/dist/commands/checkpoint.d.cts +41 -0
  54. package/dist/commands/checkpoint.js +2 -1
  55. package/dist/commands/compat.cjs +369 -0
  56. package/dist/commands/compat.d.cts +28 -0
  57. package/dist/commands/compat.js +2 -1
  58. package/dist/commands/context.cjs +2989 -0
  59. package/dist/commands/context.d.cts +2 -0
  60. package/dist/commands/context.js +5 -4
  61. package/dist/commands/doctor.cjs +3062 -0
  62. package/dist/commands/doctor.d.cts +21 -0
  63. package/dist/commands/doctor.d.ts +6 -1
  64. package/dist/commands/doctor.js +13 -11
  65. package/dist/commands/embed.cjs +232 -0
  66. package/dist/commands/embed.d.cts +17 -0
  67. package/dist/commands/embed.js +5 -2
  68. package/dist/commands/entities.cjs +141 -0
  69. package/dist/commands/entities.d.cts +7 -0
  70. package/dist/commands/entities.js +1 -0
  71. package/dist/commands/graph.cjs +501 -0
  72. package/dist/commands/graph.d.cts +21 -0
  73. package/dist/commands/graph.js +1 -0
  74. package/dist/commands/inject.cjs +1636 -0
  75. package/dist/commands/inject.d.cts +2 -0
  76. package/dist/commands/inject.d.ts +1 -1
  77. package/dist/commands/inject.js +4 -2
  78. package/dist/commands/kanban.cjs +884 -0
  79. package/dist/commands/kanban.d.cts +63 -0
  80. package/dist/commands/kanban.js +4 -3
  81. package/dist/commands/link.cjs +965 -0
  82. package/dist/commands/link.d.cts +11 -0
  83. package/dist/commands/link.js +1 -0
  84. package/dist/commands/migrate-observations.cjs +362 -0
  85. package/dist/commands/migrate-observations.d.cts +19 -0
  86. package/dist/commands/migrate-observations.js +3 -2
  87. package/dist/commands/observe.cjs +4099 -0
  88. package/dist/commands/observe.d.cts +23 -0
  89. package/dist/commands/observe.d.ts +1 -0
  90. package/dist/commands/observe.js +11 -9
  91. package/dist/commands/project.cjs +1341 -0
  92. package/dist/commands/project.d.cts +85 -0
  93. package/dist/commands/project.js +5 -4
  94. package/dist/commands/rebuild.cjs +3136 -0
  95. package/dist/commands/rebuild.d.cts +11 -0
  96. package/dist/commands/rebuild.js +10 -8
  97. package/dist/commands/recover.cjs +361 -0
  98. package/dist/commands/recover.d.cts +38 -0
  99. package/dist/commands/recover.js +3 -2
  100. package/dist/commands/reflect.cjs +1008 -0
  101. package/dist/commands/reflect.d.cts +11 -0
  102. package/dist/commands/reflect.js +6 -4
  103. package/dist/commands/repair-session.cjs +457 -0
  104. package/dist/commands/repair-session.d.cts +38 -0
  105. package/dist/commands/repair-session.js +1 -0
  106. package/dist/commands/replay.cjs +4103 -0
  107. package/dist/commands/replay.d.cts +16 -0
  108. package/dist/commands/replay.js +12 -10
  109. package/dist/commands/session-recap.cjs +353 -0
  110. package/dist/commands/session-recap.d.cts +27 -0
  111. package/dist/commands/session-recap.js +1 -0
  112. package/dist/commands/setup.cjs +1345 -0
  113. package/dist/commands/setup.d.cts +100 -0
  114. package/dist/commands/setup.d.ts +90 -2
  115. package/dist/commands/setup.js +21 -2
  116. package/dist/commands/shell-init.cjs +75 -0
  117. package/dist/commands/shell-init.d.cts +7 -0
  118. package/dist/commands/shell-init.js +2 -0
  119. package/dist/commands/sleep.cjs +6028 -0
  120. package/dist/commands/sleep.d.cts +36 -0
  121. package/dist/commands/sleep.d.ts +1 -1
  122. package/dist/commands/sleep.js +17 -15
  123. package/dist/commands/status.cjs +2736 -0
  124. package/dist/commands/status.d.cts +52 -0
  125. package/dist/commands/status.js +12 -10
  126. package/dist/commands/tailscale.cjs +1532 -0
  127. package/dist/commands/tailscale.d.cts +52 -0
  128. package/dist/commands/tailscale.js +1 -0
  129. package/dist/commands/task.cjs +1236 -0
  130. package/dist/commands/task.d.cts +97 -0
  131. package/dist/commands/task.js +4 -3
  132. package/dist/commands/template.cjs +457 -0
  133. package/dist/commands/template.d.cts +36 -0
  134. package/dist/commands/template.js +2 -1
  135. package/dist/commands/wake.cjs +2626 -0
  136. package/dist/commands/wake.d.cts +22 -0
  137. package/dist/commands/wake.d.ts +1 -1
  138. package/dist/commands/wake.js +12 -11
  139. package/dist/context-BUGaWpyL.d.cts +46 -0
  140. package/dist/index.cjs +14526 -0
  141. package/dist/index.d.cts +858 -0
  142. package/dist/index.d.ts +192 -7
  143. package/dist/index.js +101 -75
  144. package/dist/{inject-x65KXWPk.d.ts → inject-Bzi5E-By.d.cts} +1 -1
  145. package/dist/inject-Bzi5E-By.d.ts +137 -0
  146. package/dist/lib/auto-linker.cjs +176 -0
  147. package/dist/lib/auto-linker.d.cts +26 -0
  148. package/dist/lib/auto-linker.js +1 -0
  149. package/dist/lib/canvas-layout.cjs +136 -0
  150. package/dist/lib/canvas-layout.d.cts +31 -0
  151. package/dist/lib/canvas-layout.d.ts +16 -100
  152. package/dist/lib/canvas-layout.js +78 -20
  153. package/dist/lib/config.cjs +78 -0
  154. package/dist/lib/config.d.cts +11 -0
  155. package/dist/lib/config.js +1 -0
  156. package/dist/lib/entity-index.cjs +84 -0
  157. package/dist/lib/entity-index.d.cts +26 -0
  158. package/dist/lib/entity-index.js +1 -0
  159. package/dist/lib/project-utils.cjs +864 -0
  160. package/dist/lib/project-utils.d.cts +97 -0
  161. package/dist/lib/project-utils.js +4 -3
  162. package/dist/lib/session-repair.cjs +239 -0
  163. package/dist/lib/session-repair.d.cts +110 -0
  164. package/dist/lib/session-repair.js +1 -0
  165. package/dist/lib/session-utils.cjs +209 -0
  166. package/dist/lib/session-utils.d.cts +63 -0
  167. package/dist/lib/session-utils.js +1 -0
  168. package/dist/lib/tailscale.cjs +1183 -0
  169. package/dist/lib/tailscale.d.cts +225 -0
  170. package/dist/lib/tailscale.js +1 -0
  171. package/dist/lib/task-utils.cjs +1137 -0
  172. package/dist/lib/task-utils.d.cts +208 -0
  173. package/dist/lib/task-utils.js +3 -2
  174. package/dist/lib/template-engine.cjs +47 -0
  175. package/dist/lib/template-engine.d.cts +11 -0
  176. package/dist/lib/template-engine.js +1 -0
  177. package/dist/lib/webdav.cjs +568 -0
  178. package/dist/lib/webdav.d.cts +109 -0
  179. package/dist/lib/webdav.js +1 -0
  180. package/dist/plugin/index.cjs +1907 -0
  181. package/dist/plugin/index.d.cts +36 -0
  182. package/dist/plugin/index.d.ts +36 -0
  183. package/dist/plugin/index.js +572 -0
  184. package/dist/plugin/inject.cjs +356 -0
  185. package/dist/plugin/inject.d.cts +54 -0
  186. package/dist/plugin/inject.d.ts +54 -0
  187. package/dist/plugin/inject.js +17 -0
  188. package/dist/plugin/observe.cjs +631 -0
  189. package/dist/plugin/observe.d.cts +39 -0
  190. package/dist/plugin/observe.d.ts +39 -0
  191. package/dist/plugin/observe.js +18 -0
  192. package/dist/plugin/templates.cjs +593 -0
  193. package/dist/plugin/templates.d.cts +52 -0
  194. package/dist/plugin/templates.d.ts +52 -0
  195. package/dist/plugin/templates.js +25 -0
  196. package/dist/plugin/types.cjs +18 -0
  197. package/dist/plugin/types.d.cts +209 -0
  198. package/dist/plugin/types.d.ts +209 -0
  199. package/dist/plugin/types.js +0 -0
  200. package/dist/plugin/vault.cjs +927 -0
  201. package/dist/plugin/vault.d.cts +68 -0
  202. package/dist/plugin/vault.d.ts +68 -0
  203. package/dist/plugin/vault.js +22 -0
  204. package/dist/{types-C74wgGL1.d.ts → types-Y2_Um2Ls.d.cts} +44 -1
  205. package/dist/types-Y2_Um2Ls.d.ts +205 -0
  206. package/hooks/clawvault/handler.js +70 -7
  207. package/hooks/clawvault/handler.test.js +91 -0
  208. package/openclaw.plugin.json +56 -0
  209. package/package.json +17 -7
  210. package/templates/memory-event.md +67 -0
  211. package/templates/party.md +63 -0
  212. package/templates/primitive-registry.yaml +551 -0
  213. package/templates/run.md +68 -0
  214. package/templates/trigger.md +68 -0
  215. package/templates/workspace.md +50 -0
  216. package/dashboard/lib/graph-diff.js +0 -104
  217. package/dashboard/lib/graph-diff.test.js +0 -75
  218. package/dashboard/lib/vault-parser.js +0 -556
  219. package/dashboard/lib/vault-parser.test.js +0 -254
  220. package/dashboard/public/app.js +0 -796
  221. package/dashboard/public/index.html +0 -52
  222. package/dashboard/public/styles.css +0 -221
  223. package/dashboard/server.js +0 -374
  224. package/dist/chunk-HA5M6KJB.js +0 -33
  225. package/dist/chunk-MAKNAHAW.js +0 -375
  226. package/dist/chunk-MDIH26GC.js +0 -183
  227. package/dist/chunk-MGDEINGP.js +0 -99
  228. package/dist/chunk-RVYA52PY.js +0 -363
  229. package/dist/commands/canvas.d.ts +0 -15
  230. package/dist/commands/canvas.js +0 -199
  231. package/dist/commands/sync-bd.d.ts +0 -10
  232. package/dist/commands/sync-bd.js +0 -9
@@ -1,14 +1,36 @@
1
+ import {
2
+ resolveClaudeOAuthToken
3
+ } from "./chunk-PAH27GSN.js";
4
+
1
5
  // src/lib/llm-provider.ts
2
6
  var DEFAULT_MODELS = {
3
- anthropic: "claude-3-5-haiku-latest",
7
+ anthropic: "claude-haiku-4-5",
4
8
  openai: "gpt-4o-mini",
5
9
  gemini: "gemini-2.0-flash"
6
10
  };
7
- function resolveLlmProvider() {
11
+ async function resolveAnthropicAuth(fetchImpl) {
12
+ const oauthEnvToken = process.env.ANTHROPIC_OAUTH_TOKEN?.trim();
13
+ if (oauthEnvToken) {
14
+ return { token: oauthEnvToken, isOAuth: true };
15
+ }
16
+ const apiKey = process.env.ANTHROPIC_API_KEY?.trim();
17
+ if (apiKey) {
18
+ return { token: apiKey, isOAuth: false };
19
+ }
20
+ if (process.env.CLAWVAULT_CLAUDE_AUTH) {
21
+ const oauthToken = await resolveClaudeOAuthToken({ fetchImpl });
22
+ if (oauthToken) {
23
+ return { token: oauthToken, isOAuth: true };
24
+ }
25
+ }
26
+ return null;
27
+ }
28
+ async function resolveLlmProvider(fetchImpl) {
8
29
  if (process.env.CLAWVAULT_NO_LLM) {
9
30
  return null;
10
31
  }
11
- if (process.env.ANTHROPIC_API_KEY) {
32
+ const anthropicAuth = await resolveAnthropicAuth(fetchImpl);
33
+ if (anthropicAuth) {
12
34
  return "anthropic";
13
35
  }
14
36
  if (process.env.OPENAI_API_KEY) {
@@ -20,7 +42,7 @@ function resolveLlmProvider() {
20
42
  return null;
21
43
  }
22
44
  async function requestLlmCompletion(options) {
23
- const provider = options.provider ?? resolveLlmProvider();
45
+ const provider = options.provider ?? await resolveLlmProvider(options.fetchImpl);
24
46
  if (!provider) {
25
47
  return "";
26
48
  }
@@ -33,24 +55,43 @@ async function requestLlmCompletion(options) {
33
55
  return callOpenAI(options, provider);
34
56
  }
35
57
  async function callAnthropic(options, provider) {
36
- const apiKey = process.env.ANTHROPIC_API_KEY;
37
- if (!apiKey) {
58
+ const fetchImpl = options.fetchImpl ?? fetch;
59
+ const auth = await resolveAnthropicAuth(fetchImpl);
60
+ if (!auth) {
38
61
  return "";
39
62
  }
40
- const fetchImpl = options.fetchImpl ?? fetch;
63
+ const headers = auth.isOAuth ? {
64
+ "content-type": "application/json",
65
+ "authorization": `Bearer ${auth.token}`,
66
+ "anthropic-version": "2023-06-01",
67
+ "anthropic-beta": "claude-code-20250219,oauth-2025-04-20",
68
+ "x-app": "cli",
69
+ "user-agent": "claude-cli/1.0.0 (external, cli)"
70
+ } : {
71
+ "content-type": "application/json",
72
+ "x-api-key": auth.token,
73
+ "anthropic-version": "2023-06-01"
74
+ };
75
+ const systemMessages = [];
76
+ if (auth.isOAuth) {
77
+ systemMessages.push({ type: "text", text: "You are Claude Code, Anthropic's official CLI for Claude." });
78
+ }
79
+ if (options.systemPrompt?.trim()) {
80
+ systemMessages.push({ type: "text", text: options.systemPrompt.trim() });
81
+ }
82
+ const body = {
83
+ model: options.model ?? DEFAULT_MODELS[provider],
84
+ temperature: options.temperature ?? 0.1,
85
+ max_tokens: options.maxTokens ?? 1200,
86
+ messages: [{ role: "user", content: options.prompt }]
87
+ };
88
+ if (systemMessages.length > 0) {
89
+ body.system = systemMessages;
90
+ }
41
91
  const response = await fetchImpl("https://api.anthropic.com/v1/messages", {
42
92
  method: "POST",
43
- headers: {
44
- "content-type": "application/json",
45
- "x-api-key": apiKey,
46
- "anthropic-version": "2023-06-01"
47
- },
48
- body: JSON.stringify({
49
- model: options.model ?? DEFAULT_MODELS[provider],
50
- temperature: options.temperature ?? 0.1,
51
- max_tokens: options.maxTokens ?? 1200,
52
- messages: [{ role: "user", content: options.prompt }]
53
- })
93
+ headers,
94
+ body: JSON.stringify(body)
54
95
  });
55
96
  if (!response.ok) {
56
97
  throw new Error(`Anthropic request failed (${response.status})`);
@@ -96,10 +137,10 @@ async function callGemini(options, provider) {
96
137
  const fetchImpl = options.fetchImpl ?? fetch;
97
138
  const model = options.model ?? DEFAULT_MODELS[provider];
98
139
  const response = await fetchImpl(
99
- `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`,
140
+ `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent`,
100
141
  {
101
142
  method: "POST",
102
- headers: { "content-type": "application/json" },
143
+ headers: { "content-type": "application/json", "x-goog-api-key": apiKey },
103
144
  body: JSON.stringify({
104
145
  contents: [{ parts: [{ text: options.prompt }] }],
105
146
  generationConfig: {
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-P5EPF6MB.js";
4
4
  import {
5
5
  observeActiveSessions
6
- } from "./chunk-IEVLHNLU.js";
6
+ } from "./chunk-LNJA2UGL.js";
7
7
  import {
8
8
  Observer
9
- } from "./chunk-Q2J5YTUF.js";
9
+ } from "./chunk-3NSBOUT3.js";
10
10
  import {
11
11
  resolveVaultPath
12
12
  } from "./chunk-MXSSG3QU.js";
@@ -291,7 +291,8 @@ async function observeCommand(options) {
291
291
  threshold: options.threshold,
292
292
  reflectThreshold: options.reflectThreshold,
293
293
  model: options.model,
294
- extractTasks: options.extractTasks
294
+ extractTasks: options.extractTasks,
295
+ maxSessions: options.maxSessions
295
296
  });
296
297
  const failedSessionCount = result.failedSessionCount ?? 0;
297
298
  if (options.cron) {
@@ -379,7 +380,7 @@ async function observeCommand(options) {
379
380
  await watchSessions(observer, watchPath);
380
381
  }
381
382
  function registerObserveCommand(program) {
382
- program.command("observe").description("Observe session files and build observational memory").option("--watch <path>", "Watch session file or directory").option("--active", "Observe active OpenClaw sessions incrementally").option("--cron", "Run one-shot active observation for cron hooks").option("--agent <id>", "OpenClaw agent ID (default: OPENCLAW_AGENT_ID or clawdious)").option("--min-new <bytes>", "Override minimum new-content threshold in bytes").option("--sessions-dir <path>", "Override OpenClaw sessions directory").option("--dry-run", "Show active observation candidates without compressing").option("--threshold <n>", "Compression token threshold", "30000").option("--reflect-threshold <n>", "Reflection token threshold", "40000").option("--model <model>", "LLM model override").option("--extract-tasks", "Extract task-like observations into backlog", true).option("--no-extract-tasks", "Disable task extraction from observations").option("--compress <file>", "One-shot compression for a conversation file").option("--daemon", "Run in detached background mode").option("-v, --vault <path>", "Vault path").action(async (rawOptions) => {
383
+ program.command("observe").description("Observe session files and build observational memory").option("--watch <path>", "Watch session file or directory").option("--active", "Observe active OpenClaw sessions incrementally").option("--cron", "Run one-shot active observation for cron hooks").option("--agent <id>", "OpenClaw agent ID (default: OPENCLAW_AGENT_ID or clawdious)").option("--min-new <bytes>", "Override minimum new-content threshold in bytes").option("--sessions-dir <path>", "Override OpenClaw sessions directory").option("--dry-run", "Show active observation candidates without compressing").option("--max-sessions <n>", "Limit number of sessions to observe (recommended: 10)").option("--threshold <n>", "Compression token threshold", "30000").option("--reflect-threshold <n>", "Reflection token threshold", "40000").option("--model <model>", "LLM model override").option("--extract-tasks", "Extract task-like observations into backlog", true).option("--no-extract-tasks", "Disable task extraction from observations").option("--compress <file>", "One-shot compression for a conversation file").option("--daemon", "Run in detached background mode").option("-v, --vault <path>", "Vault path").action(async (rawOptions) => {
383
384
  await observeCommand({
384
385
  watch: rawOptions.watch,
385
386
  active: rawOptions.active,
@@ -388,6 +389,7 @@ function registerObserveCommand(program) {
388
389
  minNew: rawOptions.minNew ? parsePositiveInteger(rawOptions.minNew, "min-new") : void 0,
389
390
  sessionsDir: rawOptions.sessionsDir,
390
391
  dryRun: rawOptions.dryRun,
392
+ maxSessions: rawOptions.maxSessions ? parsePositiveInteger(rawOptions.maxSessions, "max-sessions") : void 0,
391
393
  threshold: parsePositiveInteger(rawOptions.threshold, "threshold"),
392
394
  reflectThreshold: parsePositiveInteger(rawOptions.reflectThreshold, "reflect-threshold"),
393
395
  model: rawOptions.model,
@@ -0,0 +1,82 @@
1
+ import {
2
+ registerTailscaleCommands
3
+ } from "./chunk-THRJVD4L.js";
4
+ import {
5
+ registerObserveCommand
6
+ } from "./chunk-F2JEUD4J.js";
7
+ import {
8
+ registerReflectCommand
9
+ } from "./chunk-SJSFRIYS.js";
10
+ import {
11
+ registerEmbedCommand
12
+ } from "./chunk-7R7O6STJ.js";
13
+ import {
14
+ registerInjectCommand
15
+ } from "./chunk-U55BGUAU.js";
16
+ import {
17
+ resolveVaultPath
18
+ } from "./chunk-MXSSG3QU.js";
19
+ import {
20
+ registerContextCommand
21
+ } from "./chunk-ZVVFWOLW.js";
22
+ import {
23
+ reweave
24
+ } from "./chunk-K234IDRJ.js";
25
+
26
+ // src/commands/reweave.ts
27
+ async function reweaveCommand(options) {
28
+ const vaultPath = resolveVaultPath({ explicitPath: options.vaultPath });
29
+ const result = reweave({
30
+ vaultPath,
31
+ since: options.since,
32
+ dryRun: options.dryRun,
33
+ similarityThreshold: options.threshold
34
+ });
35
+ console.log(`Reweave: scanned ${result.filesScanned} files, checked ${result.observationsChecked} observations`);
36
+ if (result.supersessions.length === 0) {
37
+ console.log("No knowledge updates detected.");
38
+ return;
39
+ }
40
+ console.log(`
41
+ Found ${result.supersessions.length} supersession(s):`);
42
+ for (const s of result.supersessions) {
43
+ console.log(`
44
+ OLD [${s.oldObservation.date}] ${s.oldObservation.content.slice(0, 80)}`);
45
+ console.log(` NEW [${s.newObservation.date}] ${s.newObservation.content.slice(0, 80)}`);
46
+ console.log(` Reason: ${s.reason}`);
47
+ }
48
+ if (result.dryRun) {
49
+ console.log("\n(dry run \u2014 no files modified)");
50
+ } else {
51
+ console.log(`
52
+ ${result.supersessions.length} observation(s) marked as superseded.`);
53
+ }
54
+ }
55
+ function registerReweaveCommand(program) {
56
+ program.command("reweave").description("Backward memory consolidation \u2014 detect and mark superseded observations").option("--since <date>", "Only check observations since this date (YYYY-MM-DD)").option("--dry-run", "Show what would be superseded without writing").option("--threshold <n>", "Entity similarity threshold (0-1, default 0.3)", "0.3").option("-v, --vault <path>", "Vault path").action(async (rawOptions) => {
57
+ await reweaveCommand({
58
+ vaultPath: rawOptions.vault,
59
+ since: rawOptions.since,
60
+ dryRun: rawOptions.dryRun,
61
+ threshold: parseFloat(rawOptions.threshold)
62
+ });
63
+ });
64
+ }
65
+
66
+ // src/cli/index.ts
67
+ function registerCliCommands(program) {
68
+ registerContextCommand(program);
69
+ registerInjectCommand(program);
70
+ registerObserveCommand(program);
71
+ registerReflectCommand(program);
72
+ registerEmbedCommand(program);
73
+ registerReweaveCommand(program);
74
+ registerTailscaleCommands(program);
75
+ return program;
76
+ }
77
+
78
+ export {
79
+ reweaveCommand,
80
+ registerReweaveCommand,
81
+ registerCliCommands
82
+ };