@romiluz/clawmongo 2026.3.25 → 2026.3.27
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.
- package/README.md +22 -10
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{command-registry-8LCMETl9.js → command-registry-BEExVzem.js} +2 -2
- package/dist/{command-registry-HhghuS_n.js → command-registry-Bow_kWfU.js} +4 -4
- package/dist/{completion-cli-CjPcdpbr.js → completion-cli-B4hJ8HjW.js} +3 -3
- package/dist/{completion-cli-Ujj0nwzr.js → completion-cli-DQrts0Ip.js} +2 -2
- package/dist/{doctor-completion-D4wCwykH.js → doctor-completion-Dk8sgMOd.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/{gateway-cli-BpLqS4sE.js → gateway-cli-BAueAYsk.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{onboard-c0331xiO.js → onboard-BF8cNljJ.js} +1 -1
- package/dist/{onboarding-memory-DNeHKyRz.js → onboarding-memory-CTB-Vkbl.js} +20 -10
- package/dist/{program-BcokVyDe.js → program-BjkVOzbF.js} +2 -2
- package/dist/{prompt-select-styled-z9pi54Hp.js → prompt-select-styled-6vDD4Gjv.js} +1 -1
- package/dist/{register.maintenance-DVakq6Gu.js → register.maintenance-CjOZ-w_0.js} +5 -5
- package/dist/{register.onboard-DemZm7YR.js → register.onboard-GSGJTcJk.js} +2 -2
- package/dist/{register.setup-DTrlyJlW.js → register.setup-BD774nEM.js} +2 -2
- package/dist/{register.subclis-CfWnUdTd.js → register.subclis-BlqPR8UO.js} +3 -3
- package/dist/{register.subclis-DmsAQrVB.js → register.subclis-CeG9qCbt.js} +1 -1
- package/dist/{run-main-D88e0mh0.js → run-main-C4Box4Zo.js} +4 -4
- package/dist/{setup-C-dv8809.js → setup-CjQJLNqB.js} +2 -2
- package/dist/{setup.finalize-B11Mi8BM.js → setup.finalize-ChczeW6V.js} +4 -4
- package/dist/{update-cli-mNuSw-3W.js → update-cli-mBB0aHxZ.js} +5 -5
- package/docs/plans/2026-03-22-clawmongo-presentation-plan.md +7 -11
- package/docs/reference/mongodb-capabilities.md +1 -1
- package/docs/research/2026-03-22-atlas-local-preview-web.md +270 -0
- package/docs/start/clawmongo-getting-started.md +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -94,16 +94,28 @@ Full comparison with migration guidance: [ClawMongo vs Default Memory](docs/refe
|
|
|
94
94
|
ClawMongo uses a canonical-truth-first architecture where **events are the single source of truth**. Everything else -- chunks, entities, relations, episodes, procedures -- is derived.
|
|
95
95
|
|
|
96
96
|
```text
|
|
97
|
-
|
|
98
|
-
-> writeEventAndProject()
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
97
|
+
Write Path:
|
|
98
|
+
Message / tool output -> writeEventAndProject()
|
|
99
|
+
+-> events (canonical, append-only)
|
|
100
|
+
+-> chunks (projected, searchable)
|
|
101
|
+
+-> ingest_runs (audit trail)
|
|
102
|
+
+-> extractAndUpsertEntities()
|
|
103
|
+
+-> entities (@mentions, #tags, URLs, quoted names)
|
|
104
|
+
+-> relations (links between entities, weighted)
|
|
105
|
+
+-> checkAutoEpisodeTriggers()
|
|
106
|
+
+-> episodes (materialized from event windows)
|
|
107
|
+
|
|
108
|
+
Retrieval Path:
|
|
109
|
+
Query -> planRetrieval() -> score 8 paths by keyword heuristics
|
|
110
|
+
+-> active-critical (high-salience recent)
|
|
111
|
+
+-> structured (facts, preferences)
|
|
112
|
+
+-> episodic (summarized threads)
|
|
113
|
+
+-> graph ($graphLookup traversal)
|
|
114
|
+
+-> kb (knowledge base docs)
|
|
115
|
+
+-> hybrid ($rankFusion vector+text)
|
|
116
|
+
+-> raw-window (recent events)
|
|
117
|
+
+-> procedural (workflows)
|
|
118
|
+
-> rerankResults() -> deduplicate -> return to agent
|
|
107
119
|
```
|
|
108
120
|
|
|
109
121
|
### 20 Collections
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
394a5d9034f4a78cfa90af252bc6079f55f43b523c7389e72038ef3d47cbd6b0
|
|
@@ -7,7 +7,7 @@ import "./subsystem-VzQeL-96.js";
|
|
|
7
7
|
import "./ansi-BEJF8NKS.js";
|
|
8
8
|
import "./boolean-C3GkJetE.js";
|
|
9
9
|
import "./env-mRJH5TpF.js";
|
|
10
|
-
import "./register.subclis-
|
|
10
|
+
import "./register.subclis-BlqPR8UO.js";
|
|
11
11
|
import "./core-command-descriptors-LG6MYVik.js";
|
|
12
|
-
import { n as registerCoreCliByName } from "./command-registry-
|
|
12
|
+
import { n as registerCoreCliByName } from "./command-registry-Bow_kWfU.js";
|
|
13
13
|
export { registerCoreCliByName };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { E as getPrimaryCommand, k as hasHelpOrVersion } from "./logger-CoEtkjhn.js";
|
|
2
|
-
import { a as removeCommandByName, i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-
|
|
2
|
+
import { a as removeCommandByName, i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-BlqPR8UO.js";
|
|
3
3
|
import { t as getCoreCliCommandDescriptors } from "./core-command-descriptors-LG6MYVik.js";
|
|
4
4
|
//#region src/cli/program/command-registry.ts
|
|
5
5
|
const shouldRegisterCorePrimaryOnly = (argv) => {
|
|
@@ -14,7 +14,7 @@ const coreEntries = [
|
|
|
14
14
|
hasSubcommands: false
|
|
15
15
|
}],
|
|
16
16
|
register: async ({ program }) => {
|
|
17
|
-
(await import("./register.setup-
|
|
17
|
+
(await import("./register.setup-BD774nEM.js")).registerSetupCommand(program);
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
{
|
|
@@ -24,7 +24,7 @@ const coreEntries = [
|
|
|
24
24
|
hasSubcommands: false
|
|
25
25
|
}],
|
|
26
26
|
register: async ({ program }) => {
|
|
27
|
-
(await import("./register.onboard-
|
|
27
|
+
(await import("./register.onboard-GSGJTcJk.js")).registerOnboardCommand(program);
|
|
28
28
|
}
|
|
29
29
|
},
|
|
30
30
|
{
|
|
@@ -81,7 +81,7 @@ const coreEntries = [
|
|
|
81
81
|
}
|
|
82
82
|
],
|
|
83
83
|
register: async ({ program }) => {
|
|
84
|
-
(await import("./register.maintenance-
|
|
84
|
+
(await import("./register.maintenance-CjOZ-w_0.js")).registerMaintenanceCommands(program);
|
|
85
85
|
}
|
|
86
86
|
},
|
|
87
87
|
{
|
|
@@ -9,8 +9,8 @@ import "./boolean-C3GkJetE.js";
|
|
|
9
9
|
import "./env-mRJH5TpF.js";
|
|
10
10
|
import "./utils-seFh26xW.js";
|
|
11
11
|
import "./links-kyhxxZ1i.js";
|
|
12
|
-
import { a as registerCompletionCli } from "./completion-cli-
|
|
13
|
-
import "./register.subclis-
|
|
14
|
-
import "./command-registry-
|
|
12
|
+
import { a as registerCompletionCli } from "./completion-cli-DQrts0Ip.js";
|
|
13
|
+
import "./register.subclis-BlqPR8UO.js";
|
|
14
|
+
import "./command-registry-Bow_kWfU.js";
|
|
15
15
|
import "./program-context-BoWQV6OT.js";
|
|
16
16
|
export { registerCompletionCli };
|
|
@@ -3,8 +3,8 @@ import { r as theme } from "./theme-CdOoMzRk.js";
|
|
|
3
3
|
import { c as routeLogsToStderr } from "./subsystem-VzQeL-96.js";
|
|
4
4
|
import { h as pathExists } from "./utils-seFh26xW.js";
|
|
5
5
|
import { t as formatDocsLink } from "./links-kyhxxZ1i.js";
|
|
6
|
-
import { r as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-
|
|
7
|
-
import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-
|
|
6
|
+
import { r as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-BlqPR8UO.js";
|
|
7
|
+
import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-Bow_kWfU.js";
|
|
8
8
|
import { t as getProgramContext } from "./program-context-BoWQV6OT.js";
|
|
9
9
|
import path from "node:path";
|
|
10
10
|
import os from "node:os";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as resolveOpenClawPackageRoot } from "./openclaw-root-CwSo78_f.js";
|
|
2
2
|
import { n as resolveCliName } from "./cli-name-CflIHvyV.js";
|
|
3
3
|
import { t as note } from "./note-BnDVMCVo.js";
|
|
4
|
-
import { c as usesSlowDynamicCompletion, i as isCompletionInstalled, o as resolveCompletionCachePath, r as installCompletion, s as resolveShellFromEnv, t as completionCacheExists } from "./completion-cli-
|
|
4
|
+
import { c as usesSlowDynamicCompletion, i as isCompletionInstalled, o as resolveCompletionCachePath, r as installCompletion, s as resolveShellFromEnv, t as completionCacheExists } from "./completion-cli-DQrts0Ip.js";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { spawnSync } from "node:child_process";
|
|
7
7
|
//#region src/commands/doctor-completion.ts
|
package/dist/entry.js
CHANGED
|
@@ -199,7 +199,7 @@ function tryHandleRootHelpFastPath(argv, deps = {}) {
|
|
|
199
199
|
}
|
|
200
200
|
function runMainOrRootHelp(argv) {
|
|
201
201
|
if (tryHandleRootHelpFastPath(argv)) return;
|
|
202
|
-
import("./run-main-
|
|
202
|
+
import("./run-main-C4Box4Zo.js").then(({ runCli }) => runCli(argv)).catch((error) => {
|
|
203
203
|
console.error("[openclaw] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
|
|
204
204
|
process$1.exitCode = 1;
|
|
205
205
|
});
|
|
@@ -236,7 +236,7 @@ import { _ as computePreviousRunAtMs, g as computeNextRunAtMs, h as coerceFinite
|
|
|
236
236
|
import { a as resolveNpmChannelTag, n as compareSemverStrings, p as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-8M6LXFES.js";
|
|
237
237
|
import { r as resolveConfiguredDeferredChannelPluginIds } from "./channel-plugin-ids-DfzIFHve.js";
|
|
238
238
|
import "./setup.secret-input-DALXyJR2.js";
|
|
239
|
-
import { t as runSetupWizard } from "./setup-
|
|
239
|
+
import { t as runSetupWizard } from "./setup-CjQJLNqB.js";
|
|
240
240
|
import { a as resolveApnsAuthConfigFromEnv, c as shouldClearStoredApnsRegistration, d as parseMessageWithAttachments, f as formatForLog, g as setGatewayWsLogStyle, h as summarizeAgentEventForWsLog, l as resolveApnsRelayConfigFromEnv, m as shouldLogWs, n as loadApnsRegistration, o as sendApnsAlert, p as logWs, r as normalizeApnsEnvironment, s as sendApnsBackgroundWake, t as clearApnsRegistrationIfCurrent, u as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-DQN5pcl6.js";
|
|
241
241
|
import { _ as buildGogWatchStartArgs, g as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, w as resolveGmailHookRuntimeConfig } from "./gmail-setup-utils-DvwS5fry.js";
|
|
242
242
|
import { i as loadAgentIdentity, o as pruneAgentConfig, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-CDS6iAat.js";
|
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ let saveSessionStore;
|
|
|
29
29
|
let toWhatsappJid;
|
|
30
30
|
let waitForever;
|
|
31
31
|
async function loadLegacyCliDeps() {
|
|
32
|
-
const [{ installGaxiosFetchCompat }, { runCli }] = await Promise.all([import("./gaxios-fetch-compat-CZFw_C-b.js"), import("./run-main-
|
|
32
|
+
const [{ installGaxiosFetchCompat }, { runCli }] = await Promise.all([import("./gaxios-fetch-compat-CZFw_C-b.js"), import("./run-main-C4Box4Zo.js")]);
|
|
33
33
|
return {
|
|
34
34
|
installGaxiosFetchCompat,
|
|
35
35
|
runCli
|
|
@@ -10,7 +10,7 @@ import "./daemon-runtime-DZ89fADl.js";
|
|
|
10
10
|
import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, c as handleReset, g as resolveControlUiLinks, m as randomToken, n as applyWizardMetadata, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput } from "./onboard-helpers-D3xV_T96.js";
|
|
11
11
|
import { t as WizardCancelledError } from "./prompts-si9A7fzB.js";
|
|
12
12
|
import { t as createClackPrompter } from "./clack-prompter-QEV3P7rT.js";
|
|
13
|
-
import { t as runSetupWizard } from "./setup-
|
|
13
|
+
import { t as runSetupWizard } from "./setup-CjQJLNqB.js";
|
|
14
14
|
import { n as logConfigUpdated } from "./logging-BM4mQ53W.js";
|
|
15
15
|
import { i as resolveManifestProviderOnboardAuthFlags } from "./provider-auth-choices-BfWvatIg.js";
|
|
16
16
|
import { n as isDeprecatedAuthChoice, r as normalizeLegacyOnboardAuthChoice } from "./auth-choice-legacy-DrWHCwV-.js";
|
|
@@ -12,6 +12,7 @@ import "./logger-DtlnPe_E.js";
|
|
|
12
12
|
import "./exec-BnXF7JCz.js";
|
|
13
13
|
import { t as resolveOpenClawPackageName } from "./openclaw-root-CwSo78_f.js";
|
|
14
14
|
import "./workspace-DuH1agxz.js";
|
|
15
|
+
import { t as WizardCancelledError } from "./prompts-si9A7fzB.js";
|
|
15
16
|
import path from "node:path";
|
|
16
17
|
import "node:fs/promises";
|
|
17
18
|
//#region src/wizard/onboarding-memory.ts
|
|
@@ -19,19 +20,18 @@ function shouldShowNoDockerHint(reason) {
|
|
|
19
20
|
const lower = reason.toLowerCase();
|
|
20
21
|
return lower.includes("docker") || lower.includes("compose");
|
|
21
22
|
}
|
|
22
|
-
async function
|
|
23
|
+
async function showDockerRequiredHint(prompter) {
|
|
23
24
|
await prompter.note([
|
|
24
|
-
"Docker is
|
|
25
|
+
"Docker is required for ClawMongo. The mongodb-atlas-local:preview Docker image bundles mongod + mongot in one container.",
|
|
25
26
|
"",
|
|
26
|
-
"
|
|
27
|
-
" mongod --dbpath ./data/db --port 27017",
|
|
27
|
+
"Install Docker Desktop: https://docs.docker.com/get-docker/",
|
|
28
28
|
"",
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
" mongosh --eval \"rs.initiate()\"",
|
|
29
|
+
"Then start atlas-local:",
|
|
30
|
+
" ./docker/mongodb/start-preview.sh",
|
|
32
31
|
"",
|
|
33
|
-
"
|
|
34
|
-
|
|
32
|
+
"Or manually:",
|
|
33
|
+
" docker run -d -p 27017:27017 -e VOYAGE_API_KEY=$VOYAGE_API_KEY --name clawmongo-preview mongodb/mongodb-atlas-local:preview"
|
|
34
|
+
].join("\n"), "Docker Required");
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* Interactive memory setup for the onboarding wizard.
|
|
@@ -41,12 +41,22 @@ async function setupMemoryBackend(config, prompter) {
|
|
|
41
41
|
return setupMongoDBMemory(config, prompter, await resolveOpenClawPackageName() === "@romiluz/clawmongo");
|
|
42
42
|
}
|
|
43
43
|
async function setupMongoDBMemory(config, prompter, isClawMongo) {
|
|
44
|
+
if (isClawMongo && !process.env.VOYAGE_API_KEY) {
|
|
45
|
+
const voyageKey = await prompter.text({
|
|
46
|
+
message: "Enter your Voyage AI API key (required for auto-embeddings)",
|
|
47
|
+
placeholder: "pa-...",
|
|
48
|
+
validate: (val) => !val?.trim() ? "Voyage AI API key is required" : void 0
|
|
49
|
+
});
|
|
50
|
+
if (typeof voyageKey === "symbol") throw new WizardCancelledError();
|
|
51
|
+
process.env.VOYAGE_API_KEY = voyageKey.trim();
|
|
52
|
+
await prompter.note("VOYAGE_API_KEY set for this session. Add it to your shell profile for persistence:\n export VOYAGE_API_KEY=" + voyageKey.trim(), "Voyage AI");
|
|
53
|
+
}
|
|
44
54
|
if (isClawMongo) try {
|
|
45
55
|
const { attemptAutoSetup } = await import("./mongodb-auto-setup-QcwgZSN9.js");
|
|
46
56
|
const autoResult = await attemptAutoSetup(prompter);
|
|
47
57
|
if (autoResult.success) return continueMongoDBSetup(config, prompter, isClawMongo, autoResult.uri);
|
|
48
58
|
await prompter.note(autoResult.reason, "Auto-Setup");
|
|
49
|
-
if (shouldShowNoDockerHint(autoResult.reason)) await
|
|
59
|
+
if (shouldShowNoDockerHint(autoResult.reason)) await showDockerRequiredHint(prompter);
|
|
50
60
|
} catch {}
|
|
51
61
|
const existingUri = config.memory?.mongodb?.uri?.trim();
|
|
52
62
|
return continueMongoDBSetup(config, prompter, isClawMongo, (await prompter.text({
|
|
@@ -15,8 +15,8 @@ import "./registry-DgTkDMz3.js";
|
|
|
15
15
|
import { n as resolveCliName } from "./cli-name-CflIHvyV.js";
|
|
16
16
|
import "./ports-lsof-BLsmHaCG.js";
|
|
17
17
|
import { n as resolveCliChannelOptions } from "./channel-options-DgceIrBT.js";
|
|
18
|
-
import "./register.subclis-
|
|
19
|
-
import { i as registerProgramCommands } from "./command-registry-
|
|
18
|
+
import "./register.subclis-BlqPR8UO.js";
|
|
19
|
+
import { i as registerProgramCommands } from "./command-registry-Bow_kWfU.js";
|
|
20
20
|
import { n as setProgramContext } from "./program-context-BoWQV6OT.js";
|
|
21
21
|
import "./ports-D5BpbpwU.js";
|
|
22
22
|
import { t as emitCliBanner } from "./banner-D9XjhoFM.js";
|
|
@@ -68,7 +68,7 @@ import { n as logConfigUpdated } from "./logging-BM4mQ53W.js";
|
|
|
68
68
|
import { n as resolveProviderAuthLoginCommand, t as buildProviderAuthRecoveryHint } from "./provider-auth-guidance-D4-q7IHl.js";
|
|
69
69
|
import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-DDDsik9S.js";
|
|
70
70
|
import { t as formatHealthCheckFailure } from "./health-format-D5jsS7Ch.js";
|
|
71
|
-
import { n as doctorShellCompletion } from "./doctor-completion-
|
|
71
|
+
import { n as doctorShellCompletion } from "./doctor-completion-Dk8sgMOd.js";
|
|
72
72
|
import { a as stripUnknownConfigKeys, i as resolveConfigPathTarget, n as formatConfigPath, r as noteOpencodeProviderOverrides, t as runDoctorConfigPreflight } from "./doctor-config-preflight-BJ0lGLTO.js";
|
|
73
73
|
import { a as isMattermostMutableAllowEntry, i as isMSTeamsMutableAllowEntry, n as isGoogleChatMutableAllowEntry, o as isSlackMutableAllowEntry, r as isIrcMutableAllowEntry, s as isZalouserMutableGroupEntry, t as isDiscordMutableAllowEntry } from "./mutable-allowlist-detectors-ppdORIro.js";
|
|
74
74
|
import { t as resolveDefaultChannelAccountContext } from "./channel-account-context-DZhZw4oo.js";
|
|
@@ -183,9 +183,9 @@ import "./matrix-migration-snapshot-CRKiHq6Y.js";
|
|
|
183
183
|
import "./setup-group-access-BYV3O8yu.js";
|
|
184
184
|
import "./skills-status-Cr-YPNJU.js";
|
|
185
185
|
import "./note-BnDVMCVo.js";
|
|
186
|
-
import "./completion-cli-
|
|
187
|
-
import "./register.subclis-
|
|
188
|
-
import "./command-registry-
|
|
186
|
+
import "./completion-cli-DQrts0Ip.js";
|
|
187
|
+
import "./register.subclis-BlqPR8UO.js";
|
|
188
|
+
import "./command-registry-Bow_kWfU.js";
|
|
189
189
|
import "./program-context-BoWQV6OT.js";
|
|
190
190
|
import "./heartbeat-summary-CMwt9qam.js";
|
|
191
191
|
import "./health-DU_pBiid.js";
|
|
@@ -197,8 +197,8 @@ import "./logging-BM4mQ53W.js";
|
|
|
197
197
|
import "./provider-auth-guidance-D4-q7IHl.js";
|
|
198
198
|
import "./systemd-linger-DDDsik9S.js";
|
|
199
199
|
import "./health-format-D5jsS7Ch.js";
|
|
200
|
-
import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-
|
|
201
|
-
import "./doctor-completion-
|
|
200
|
+
import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-6vDD4Gjv.js";
|
|
201
|
+
import "./doctor-completion-Dk8sgMOd.js";
|
|
202
202
|
import "./doctor-config-preflight-BJ0lGLTO.js";
|
|
203
203
|
import "./channel-account-context-DZhZw4oo.js";
|
|
204
204
|
import "./doctor-state-migrations-Cdk3ep_f.js";
|
|
@@ -165,12 +165,12 @@ import "./onboard-helpers-D3xV_T96.js";
|
|
|
165
165
|
import "./note-BnDVMCVo.js";
|
|
166
166
|
import "./clack-prompter-QEV3P7rT.js";
|
|
167
167
|
import "./setup.secret-input-DALXyJR2.js";
|
|
168
|
-
import "./setup-
|
|
168
|
+
import "./setup-CjQJLNqB.js";
|
|
169
169
|
import "./logging-BM4mQ53W.js";
|
|
170
170
|
import { i as resolveManifestProviderOnboardAuthFlags } from "./provider-auth-choices-BfWvatIg.js";
|
|
171
171
|
import "./provider-wizard-DQd5eYhX.js";
|
|
172
172
|
import { n as formatAuthChoiceChoicesForCli } from "./auth-choice-options-DvqJHFOp.js";
|
|
173
|
-
import { n as CORE_ONBOARD_AUTH_FLAGS, t as setupWizardCommand } from "./onboard-
|
|
173
|
+
import { n as CORE_ONBOARD_AUTH_FLAGS, t as setupWizardCommand } from "./onboard-BF8cNljJ.js";
|
|
174
174
|
//#region src/cli/program/register.onboard.ts
|
|
175
175
|
function resolveInstallDaemonFlag(command, opts) {
|
|
176
176
|
if (!command || typeof command !== "object") return;
|
|
@@ -166,10 +166,10 @@ import "./onboard-helpers-D3xV_T96.js";
|
|
|
166
166
|
import "./note-BnDVMCVo.js";
|
|
167
167
|
import "./clack-prompter-QEV3P7rT.js";
|
|
168
168
|
import "./setup.secret-input-DALXyJR2.js";
|
|
169
|
-
import "./setup-
|
|
169
|
+
import "./setup-CjQJLNqB.js";
|
|
170
170
|
import { n as logConfigUpdated, t as formatConfigPath } from "./logging-BM4mQ53W.js";
|
|
171
171
|
import "./provider-auth-choices-BfWvatIg.js";
|
|
172
|
-
import { t as setupWizardCommand } from "./onboard-
|
|
172
|
+
import { t as setupWizardCommand } from "./onboard-BF8cNljJ.js";
|
|
173
173
|
import JSON5 from "json5";
|
|
174
174
|
import fs from "node:fs/promises";
|
|
175
175
|
//#region src/commands/setup.ts
|
|
@@ -58,7 +58,7 @@ const entries = [
|
|
|
58
58
|
description: "Run, inspect, and query the WebSocket Gateway",
|
|
59
59
|
hasSubcommands: true,
|
|
60
60
|
register: async (program) => {
|
|
61
|
-
(await import("./gateway-cli-
|
|
61
|
+
(await import("./gateway-cli-BAueAYsk.js")).registerGatewayCli(program);
|
|
62
62
|
}
|
|
63
63
|
},
|
|
64
64
|
{
|
|
@@ -264,7 +264,7 @@ const entries = [
|
|
|
264
264
|
description: "Update OpenClaw and inspect update channel status",
|
|
265
265
|
hasSubcommands: true,
|
|
266
266
|
register: async (program) => {
|
|
267
|
-
(await import("./update-cli-
|
|
267
|
+
(await import("./update-cli-mBB0aHxZ.js")).registerUpdateCli(program);
|
|
268
268
|
}
|
|
269
269
|
},
|
|
270
270
|
{
|
|
@@ -280,7 +280,7 @@ const entries = [
|
|
|
280
280
|
description: "Generate shell completion script",
|
|
281
281
|
hasSubcommands: false,
|
|
282
282
|
register: async (program) => {
|
|
283
|
-
(await import("./completion-cli-
|
|
283
|
+
(await import("./completion-cli-B4hJ8HjW.js")).registerCompletionCli(program);
|
|
284
284
|
}
|
|
285
285
|
}
|
|
286
286
|
];
|
|
@@ -7,6 +7,6 @@ import "./subsystem-VzQeL-96.js";
|
|
|
7
7
|
import "./ansi-BEJF8NKS.js";
|
|
8
8
|
import "./boolean-C3GkJetE.js";
|
|
9
9
|
import "./env-mRJH5TpF.js";
|
|
10
|
-
import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName } from "./register.subclis-
|
|
10
|
+
import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName } from "./register.subclis-BlqPR8UO.js";
|
|
11
11
|
import "./subcli-descriptors-rdyciU1f.js";
|
|
12
12
|
export { loadValidatedConfigForPluginRegistration, registerSubCliByName };
|
|
@@ -381,7 +381,7 @@ async function runCli(argv = process$1.argv) {
|
|
|
381
381
|
}
|
|
382
382
|
if (await tryRouteCli(normalizedArgv)) return;
|
|
383
383
|
enableConsoleCapture();
|
|
384
|
-
const { buildProgram } = await import("./program-
|
|
384
|
+
const { buildProgram } = await import("./program-BjkVOzbF.js");
|
|
385
385
|
const program = buildProgram();
|
|
386
386
|
const { installUnhandledRejectionHandler } = await import("./unhandled-rejections-O6cVOz2D.js");
|
|
387
387
|
installUnhandledRejectionHandler();
|
|
@@ -395,10 +395,10 @@ async function runCli(argv = process$1.argv) {
|
|
|
395
395
|
const { getProgramContext } = await import("./program-context-BpsjGnnn.js");
|
|
396
396
|
const ctx = getProgramContext(program);
|
|
397
397
|
if (ctx) {
|
|
398
|
-
const { registerCoreCliByName } = await import("./command-registry-
|
|
398
|
+
const { registerCoreCliByName } = await import("./command-registry-BEExVzem.js");
|
|
399
399
|
await registerCoreCliByName(program, ctx, primary, parseArgv);
|
|
400
400
|
}
|
|
401
|
-
const { registerSubCliByName } = await import("./register.subclis-
|
|
401
|
+
const { registerSubCliByName } = await import("./register.subclis-CeG9qCbt.js");
|
|
402
402
|
await registerSubCliByName(program, primary);
|
|
403
403
|
}
|
|
404
404
|
if (!shouldSkipPluginCommandRegistration({
|
|
@@ -407,7 +407,7 @@ async function runCli(argv = process$1.argv) {
|
|
|
407
407
|
hasBuiltinPrimary: primary !== null && program.commands.some((command) => command.name() === primary)
|
|
408
408
|
})) {
|
|
409
409
|
const { registerPluginCliCommands } = await import("./cli-FF5823nM.js");
|
|
410
|
-
const { loadValidatedConfigForPluginRegistration } = await import("./register.subclis-
|
|
410
|
+
const { loadValidatedConfigForPluginRegistration } = await import("./register.subclis-CeG9qCbt.js");
|
|
411
411
|
const config = await loadValidatedConfigForPluginRegistration();
|
|
412
412
|
if (config) registerPluginCliCommands(program, config);
|
|
413
413
|
}
|
|
@@ -278,7 +278,7 @@ async function runSetupWizard(opts, runtime = defaultRuntime, prompter) {
|
|
|
278
278
|
try {
|
|
279
279
|
const { resolveOpenClawPackageName } = await import("./openclaw-root-UnGmA1la.js");
|
|
280
280
|
if (await resolveOpenClawPackageName() === "@romiluz/clawmongo") {
|
|
281
|
-
const { setupMemoryBackend } = await import("./onboarding-memory-
|
|
281
|
+
const { setupMemoryBackend } = await import("./onboarding-memory-CTB-Vkbl.js");
|
|
282
282
|
nextConfig = await setupMemoryBackend(nextConfig, prompter);
|
|
283
283
|
}
|
|
284
284
|
} catch (err) {}
|
|
@@ -387,7 +387,7 @@ async function runSetupWizard(opts, runtime = defaultRuntime, prompter) {
|
|
|
387
387
|
mode
|
|
388
388
|
});
|
|
389
389
|
await writeConfigFile(nextConfig);
|
|
390
|
-
const { finalizeSetupWizard } = await import("./setup.finalize-
|
|
390
|
+
const { finalizeSetupWizard } = await import("./setup.finalize-ChczeW6V.js");
|
|
391
391
|
const { launchedTui } = await finalizeSetupWizard({
|
|
392
392
|
flow,
|
|
393
393
|
opts,
|
|
@@ -173,16 +173,16 @@ import "./launchd-BkEfiyeS.js";
|
|
|
173
173
|
import { n as resolveGatewayService, t as describeGatewayServiceRestart } from "./service-CruMJqe9.js";
|
|
174
174
|
import { i as isSystemdUserServiceAvailable } from "./systemd-CvJKJn75.js";
|
|
175
175
|
import "./note-BnDVMCVo.js";
|
|
176
|
-
import { r as installCompletion } from "./completion-cli-
|
|
177
|
-
import "./register.subclis-
|
|
178
|
-
import "./command-registry-
|
|
176
|
+
import { r as installCompletion } from "./completion-cli-DQrts0Ip.js";
|
|
177
|
+
import "./register.subclis-BlqPR8UO.js";
|
|
178
|
+
import "./command-registry-Bow_kWfU.js";
|
|
179
179
|
import "./program-context-BoWQV6OT.js";
|
|
180
180
|
import "./heartbeat-summary-CMwt9qam.js";
|
|
181
181
|
import { r as healthCommand } from "./health-DU_pBiid.js";
|
|
182
182
|
import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-B8co16VR.js";
|
|
183
183
|
import { t as resolveSetupSecretInputString } from "./setup.secret-input-DALXyJR2.js";
|
|
184
184
|
import { t as formatHealthCheckFailure } from "./health-format-D5jsS7Ch.js";
|
|
185
|
-
import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-
|
|
185
|
+
import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-Dk8sgMOd.js";
|
|
186
186
|
import { t as runTui } from "./tui-Dj52JiFV.js";
|
|
187
187
|
import path from "node:path";
|
|
188
188
|
import os from "node:os";
|
|
@@ -198,9 +198,9 @@ import "./note-BnDVMCVo.js";
|
|
|
198
198
|
import "./npm-pack-install-BBxs0rto.js";
|
|
199
199
|
import "./skill-scanner-tuyTk8QC.js";
|
|
200
200
|
import "./installs-hUBrmugM.js";
|
|
201
|
-
import { r as installCompletion } from "./completion-cli-
|
|
202
|
-
import "./register.subclis-
|
|
203
|
-
import "./command-registry-
|
|
201
|
+
import { r as installCompletion } from "./completion-cli-DQrts0Ip.js";
|
|
202
|
+
import "./register.subclis-BlqPR8UO.js";
|
|
203
|
+
import "./command-registry-Bow_kWfU.js";
|
|
204
204
|
import "./program-context-BoWQV6OT.js";
|
|
205
205
|
import { n as renderTable, t as getTerminalTableWidth } from "./table-BnaYTso2.js";
|
|
206
206
|
import "./heartbeat-summary-CMwt9qam.js";
|
|
@@ -215,8 +215,8 @@ import "./provider-auth-guidance-D4-q7IHl.js";
|
|
|
215
215
|
import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-BLx9BWCo.js";
|
|
216
216
|
import "./systemd-linger-DDDsik9S.js";
|
|
217
217
|
import "./health-format-D5jsS7Ch.js";
|
|
218
|
-
import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-
|
|
219
|
-
import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-
|
|
218
|
+
import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-6vDD4Gjv.js";
|
|
219
|
+
import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-Dk8sgMOd.js";
|
|
220
220
|
import "./doctor-config-preflight-BJ0lGLTO.js";
|
|
221
221
|
import "./channel-account-context-DZhZw4oo.js";
|
|
222
222
|
import "./doctor-state-migrations-Cdk3ep_f.js";
|
|
@@ -496,27 +496,23 @@ to a working personal AI assistant with MongoDB-native memory in about 10 minute
|
|
|
496
496
|
### Required
|
|
497
497
|
|
|
498
498
|
- **Node.js 22+** (24 recommended)
|
|
499
|
-
- **MongoDB
|
|
500
|
-
- **Voyage AI API key** (
|
|
499
|
+
- **MongoDB** via `mongodb-atlas-local:preview` Docker image (bundles mongod + mongot + auto-embeddings)
|
|
500
|
+
- **Voyage AI API key** (set as VOYAGE_API_KEY env var on the container)
|
|
501
501
|
- **LLM API key** (Anthropic Claude recommended, or OpenAI, Google, etc.)
|
|
502
502
|
|
|
503
503
|
### MongoDB Setup Options
|
|
504
504
|
|
|
505
|
-
#### Option A: Docker (Quickest)
|
|
505
|
+
#### Option A: Docker with atlas-local:preview (Quickest)
|
|
506
506
|
|
|
507
|
-
[
|
|
507
|
+
[Single container: docker compose -f docker/mongodb/docker-compose.preview.yml up -d]
|
|
508
508
|
|
|
509
|
-
#### Option B: Local
|
|
509
|
+
#### Option B: Atlas CLI Local Deployment
|
|
510
510
|
|
|
511
|
-
[
|
|
512
|
-
|
|
513
|
-
#### Option C: MongoDB Atlas
|
|
514
|
-
|
|
515
|
-
[Atlas cluster with Search enabled, connection string]
|
|
511
|
+
[atlas deployments setup clawmongo --type local --port 27017]
|
|
516
512
|
|
|
517
513
|
### Voyage AI Setup
|
|
518
514
|
|
|
519
|
-
[Sign up at voyageai.com, get API key,
|
|
515
|
+
[Sign up at voyageai.com, get API key, set VOYAGE_API_KEY env var on container]
|
|
520
516
|
|
|
521
517
|
## Install ClawMongo
|
|
522
518
|
|
|
@@ -33,7 +33,7 @@ With mongot's `autoEmbed`, ClawMongo eliminates the embedding pipeline entirely.
|
|
|
33
33
|
|
|
34
34
|
mongot delegates to the Voyage AI API using the `autoEmbed` field type in vector search index definitions. At index time, mongot reads the text field from each document and sends it to `voyage-4-large` for embedding. At query time, `$vectorSearch` sends the query text to mongot, which embeds it and runs approximate nearest neighbor (ANN) search.
|
|
35
35
|
|
|
36
|
-
Configuration: set `memory.mongodb.embeddingMode = "automated"` in ClawMongo config.
|
|
36
|
+
Configuration: set `memory.mongodb.embeddingMode = "automated"` in ClawMongo config. Set the `VOYAGE_API_KEY` environment variable on the `mongodb-atlas-local:preview` container (or pass it to `start-preview.sh`).
|
|
37
37
|
|
|
38
38
|
### Configuration Example
|
|
39
39
|
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# Web Research: MongoDB Atlas Local (Preview) — mongod + mongot bundled Docker image
|
|
2
|
+
|
|
3
|
+
## Execution
|
|
4
|
+
- Preferred backend: websearch+webfetch
|
|
5
|
+
- Allowed fallbacks: websearch-only, webfetch-only
|
|
6
|
+
- Research round: 1 (understanding Atlas Local and why it supersedes separate mongod + mongot)
|
|
7
|
+
|
|
8
|
+
## Sources Used
|
|
9
|
+
- WebFetch on `raw.githubusercontent.com/mongodb/docs-atlas-cli/master/source/atlas-cli-deploy-docker.txt` — official Atlas CLI Docker deployment docs (verbatim RST source)
|
|
10
|
+
- WebFetch on `raw.githubusercontent.com/mongodb/docs-atlas-cli/master/source/atlas-cli-deploy-local.txt` — official Atlas CLI local deployment docs (verbatim RST source)
|
|
11
|
+
- WebFetch on `raw.githubusercontent.com/mongodb/docs-atlas-cli/master/source/atlas-cli-deploy-fts.txt` — Atlas CLI FTS + AVS docs
|
|
12
|
+
- Docker Hub API `hub.docker.com/v2/repositories/mongodb/mongodb-atlas-local/tags/` — confirmed all available tags including `preview`
|
|
13
|
+
- Live page fetch `mongodb.com/docs/atlas/atlas-vector-search/crud-embeddings/create-embeddings-automatic/` — auto-embedding feature docs with full content extraction
|
|
14
|
+
- Live page fetch `mongodb.com/docs/atlas/atlas-vector-search/deployment-options/` — deployment option recommendations
|
|
15
|
+
|
|
16
|
+
**Bright Data:** Not available; fell back to WebFetch + curl for raw sources.
|
|
17
|
+
|
|
18
|
+
## Research Quality
|
|
19
|
+
- Status: COMPLETE
|
|
20
|
+
- Quality level: high
|
|
21
|
+
- Backend mode: websearch+webfetch
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. What Is MongoDB Atlas Local?
|
|
26
|
+
|
|
27
|
+
MongoDB Atlas Local (`mongodb/mongodb-atlas-local`) is an official Docker image that packages a **single-node MongoDB replica set** alongside the **mongot search process** (the same Apache Lucene-based Atlas Search / Atlas Vector Search engine that runs in the cloud) into one container. It provides a self-contained local development environment that mirrors the Atlas cloud experience — including Atlas Search indexes ($search), Atlas Vector Search ($vectorSearch), and the preview auto-embedding feature — without requiring a cloud account or a separate mongot installation.
|
|
28
|
+
|
|
29
|
+
The image is maintained by MongoDB and published to Docker Hub at:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
mongodb/mongodb-atlas-local
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 2. Docker Image Tags
|
|
38
|
+
|
|
39
|
+
Confirmed from the Docker Hub API (as of 2026-03-20, the latest rebuild date):
|
|
40
|
+
|
|
41
|
+
| Tag pattern | Purpose |
|
|
42
|
+
|---|---|
|
|
43
|
+
| `latest` | Current stable release (maps to latest MongoDB 8.x + mongot) |
|
|
44
|
+
| `8.2`, `8.2.6`, `8.2.6-20260320T081259Z` | Stable MongoDB 8.2.x + mongot |
|
|
45
|
+
| `8.0`, `8.0.20`, etc. | Stable MongoDB 8.0.x + mongot |
|
|
46
|
+
| `7.0`, `7.0.31`, etc. | Stable MongoDB 7.0.x + mongot |
|
|
47
|
+
| `preview` | **Pre-release channel** — currently tracks MongoDB 8.2 + mongot with auto-embedding (Voyage AI) enabled. Separate from `latest`; ~70 MB smaller per arch than `latest` as of 2026-03-20 |
|
|
48
|
+
|
|
49
|
+
The `preview` digest as of 2026-03-20: `sha256:4f4c43e8711ce31660b931bd96e76e679b311702a0cc49e03c926615aaf4c868`
|
|
50
|
+
|
|
51
|
+
The `latest` digest as of same date: `sha256:a3a49321a2be227f5de99015ac939be2c89d90725d8548c6f81147f175f70d8f` (different — they are distinct builds)
|
|
52
|
+
|
|
53
|
+
Both support `linux/amd64` and `linux/arm64`.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 3. What the Image Bundles
|
|
58
|
+
|
|
59
|
+
- **mongod** — MongoDB Community Edition (the database engine, configured as a single-node replica set)
|
|
60
|
+
- **mongot** — MongoDB's internal search/vector search process (Apache Lucene-based), which handles:
|
|
61
|
+
- `$search` queries (full-text, fuzzy, phrase, wildcard, boolean)
|
|
62
|
+
- `$vectorSearch` queries (ANN, ENN)
|
|
63
|
+
- Atlas Search index management
|
|
64
|
+
- Automated embedding generation (in `preview` tag, requires Voyage AI API key)
|
|
65
|
+
- **Built-in health check** — the container reports `healthy` when both mongod and mongot are ready, so no custom health check is required in Docker Compose
|
|
66
|
+
- **Authentication support** — via `MONGODB_INITDB_ROOT_USERNAME` / `MONGODB_INITDB_ROOT_PASSWORD` environment variables
|
|
67
|
+
- **Data persistence** — via Docker volumes on `/data/db` and `/data/configdb`
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 4. Why This Supersedes Running mongod + mongot Separately
|
|
72
|
+
|
|
73
|
+
### Before Atlas Local
|
|
74
|
+
|
|
75
|
+
Running Atlas Search + Vector Search locally required:
|
|
76
|
+
1. Install MongoDB Community or Enterprise Edition (`mongod`)
|
|
77
|
+
2. Separately download, install, and configure `mongot` (the search process)
|
|
78
|
+
3. Configure `mongot` to bind to `mongod` via keyfile / keyfile path
|
|
79
|
+
4. Manage startup order (mongot must start before search indexes are built)
|
|
80
|
+
5. Manage both processes separately (logs, restarts, upgrades)
|
|
81
|
+
6. No official Docker image bundled them together — DIY setup was complex
|
|
82
|
+
|
|
83
|
+
### With Atlas Local
|
|
84
|
+
|
|
85
|
+
Single command replaces all of the above:
|
|
86
|
+
```sh
|
|
87
|
+
docker run -p 27017:27017 mongodb/mongodb-atlas-local
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Or with Docker Compose:
|
|
91
|
+
```yaml
|
|
92
|
+
services:
|
|
93
|
+
mongodb:
|
|
94
|
+
image: mongodb/mongodb-atlas-local
|
|
95
|
+
environment:
|
|
96
|
+
- MONGODB_INITDB_ROOT_USERNAME=user
|
|
97
|
+
- MONGODB_INITDB_ROOT_PASSWORD=pass
|
|
98
|
+
ports:
|
|
99
|
+
- 27017:27017
|
|
100
|
+
volumes:
|
|
101
|
+
- data:/data/db
|
|
102
|
+
- config:/data/configdb
|
|
103
|
+
volumes:
|
|
104
|
+
data:
|
|
105
|
+
config:
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Key advantages:
|
|
109
|
+
- **Single container, single pull** — one image contains everything
|
|
110
|
+
- **Correct startup sequencing** — the entrypoint ensures mongot starts in the right order relative to mongod; do not override the `command` in Docker Compose or it breaks this
|
|
111
|
+
- **Built-in health check** — poll `docker inspect .State.Health.Status` to know when to connect; no custom scripts needed
|
|
112
|
+
- **Parity with Atlas cloud** — the same mongot binary that runs in Atlas runs in this container, so `$search` / `$vectorSearch` index definitions, aggregation pipeline stages, and behavior match production exactly
|
|
113
|
+
- **CLI-managed** — the Atlas CLI (`atlas deployments setup`) uses this image under the hood; it handles the full lifecycle (create, pause, start, delete, logs)
|
|
114
|
+
- **Version-pinned deployments** — use `mongodb/mongodb-atlas-local:8.0` or `:7.0` to pin the MongoDB version across team environments
|
|
115
|
+
- **Preview channel** — `mongodb/mongodb-atlas-local:preview` gives access to in-development features (auto-embeddings) ahead of stable release
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 5. Auto-Embedding / Voyage AI Integration (Preview Feature)
|
|
120
|
+
|
|
121
|
+
### What It Is
|
|
122
|
+
|
|
123
|
+
"Automated Embedding" is a Preview feature available in MongoDB Community Edition **v8.2 and later**, delivered via the `preview` Docker tag.
|
|
124
|
+
|
|
125
|
+
Official statement from the docs:
|
|
126
|
+
> "Automated embedding is available as a Preview feature only for MongoDB Community Edition v8.2 and later. The feature and the corresponding documentation might change at any time during the Preview period."
|
|
127
|
+
|
|
128
|
+
### How It Works
|
|
129
|
+
|
|
130
|
+
When deploying `mongodb/mongodb-atlas-local:preview` (or MongoDB 8.2 with mongot started with Voyage AI API keys), you provide a Voyage AI API key at startup. mongot uses this key to:
|
|
131
|
+
|
|
132
|
+
1. **Index-time**: automatically call the Voyage AI embedding API for every text field you designate as `autoEmbed` type in the Vector Search index definition. Embeddings are generated for existing documents and kept in sync as documents are inserted/updated.
|
|
133
|
+
2. **Query-time**: automatically call the Voyage AI embedding API to embed the query text before running `$vectorSearch`. You pass a plain string via `query.text` instead of a pre-computed vector.
|
|
134
|
+
|
|
135
|
+
The generated embeddings are stored in a **separate system collection** on the same cluster (not in the user-facing document).
|
|
136
|
+
|
|
137
|
+
### Index Definition (autoEmbed type)
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"fields": [
|
|
142
|
+
{
|
|
143
|
+
"type": "vectorSearch",
|
|
144
|
+
"path": "summary",
|
|
145
|
+
"autoEmbed": {
|
|
146
|
+
"embeddingModel": "voyage-4"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Query (natural language text, no pre-computed vector)
|
|
154
|
+
|
|
155
|
+
```js
|
|
156
|
+
db.collection.aggregate([
|
|
157
|
+
{
|
|
158
|
+
"$vectorSearch": {
|
|
159
|
+
"index": "myVectorIndex",
|
|
160
|
+
"path": "summary",
|
|
161
|
+
"query": { "text": "properties near amusement parks" },
|
|
162
|
+
"numCandidates": 100,
|
|
163
|
+
"limit": 10
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
])
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Supported Voyage AI Embedding Models
|
|
170
|
+
|
|
171
|
+
| Model | Use Case |
|
|
172
|
+
|---|---|
|
|
173
|
+
| `voyage-4-lite` | High-volume, cost-sensitive applications |
|
|
174
|
+
| `voyage-4` (recommended) | General text search, balanced performance |
|
|
175
|
+
| `voyage-4-large` | Maximum accuracy for complex semantic relationships |
|
|
176
|
+
| `voyage-code-3` | Code search and technical documentation |
|
|
177
|
+
|
|
178
|
+
### API Key Recommendation
|
|
179
|
+
|
|
180
|
+
MongoDB recommends two separate Voyage AI API keys:
|
|
181
|
+
- One for **indexing operations** (higher throughput, tolerant of delays)
|
|
182
|
+
- One for **query operations** (low-latency, user-facing)
|
|
183
|
+
|
|
184
|
+
Keys can be generated via Atlas UI (which also provides monitoring + rate limiting UI) or directly from Voyage AI.
|
|
185
|
+
|
|
186
|
+
### Why This Matters for ClawMongo
|
|
187
|
+
|
|
188
|
+
ClawMongo v2 currently calls the Voyage AI API externally from application code (via the `mongodb-search.ts` / hybrid pipeline). With auto-embedding in the `preview` image:
|
|
189
|
+
- No application code needed to call Voyage AI at index time or query time
|
|
190
|
+
- mongot handles embedding generation and sync automatically
|
|
191
|
+
- `$vectorSearch` queries can use plain text (`query.text`) instead of pre-computed vectors
|
|
192
|
+
- This simplifies the architecture: ClawMongo could delegate all embedding lifecycle to mongot
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 6. Key Limitations (Preview Status)
|
|
197
|
+
|
|
198
|
+
From the official auto-embedding docs (as of 2026-03-22):
|
|
199
|
+
|
|
200
|
+
1. **Preview means unstable** — "The feature and the corresponding documentation might change at any time during the Preview period." API surface, behavior, or index definition syntax may break between preview releases.
|
|
201
|
+
|
|
202
|
+
2. **Deployment scope** — Auto-embedding is **not yet available** for:
|
|
203
|
+
- Atlas clusters (cloud)
|
|
204
|
+
- Local Atlas deployments via the Atlas CLI (`atlas deployments setup`)
|
|
205
|
+
- MongoDB Enterprise Edition
|
|
206
|
+
- It is **only** available for MongoDB Community Edition with mongot deployed via Docker, tarball, or package manager, or via the MongoDB Controllers for Kubernetes Operator with MongoDB 8.2+.
|
|
207
|
+
|
|
208
|
+
3. **Minimum version** — MongoDB Community Edition v8.2+ required (8.0 and 7.0 tags do not include auto-embedding support in mongot).
|
|
209
|
+
|
|
210
|
+
4. **Cost** — Every insert/update/query triggers Voyage AI API calls billed to your Voyage AI account. Pricing is per-token.
|
|
211
|
+
|
|
212
|
+
5. **Standard Atlas Local limitations** (not preview-specific):
|
|
213
|
+
- No concurrent search queries
|
|
214
|
+
- Max 1024 boolean clauses in a single search query
|
|
215
|
+
- Single-node replica set only (no sharding)
|
|
216
|
+
- For CLI-managed local deployments: only deployments created via `atlas deployments` CLI are manageable through it
|
|
217
|
+
- Tested OS: macOS 13.2+, RHEL/CentOS 8/9, Ubuntu 22.04/24.04, Debian 11/12, Amazon Linux 2023, Windows 10/11; min 2 CPU cores, 2 GB RAM
|
|
218
|
+
|
|
219
|
+
6. **Do not override ENTRYPOINT** — The `mongodb/mongodb-atlas-local` image has a custom entrypoint that starts both mongod and mongot in the correct sequence. If you add a `command:` key in Docker Compose, it overrides the entrypoint and mongot will not start correctly. This is the #1 gotcha when migrating from `mongo:` image.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 7. Comparison: mongod Standalone vs Atlas Local vs Preview
|
|
224
|
+
|
|
225
|
+
| Aspect | `mongo:8.0` (raw mongod) | `mongodb/mongodb-atlas-local` (stable) | `mongodb/mongodb-atlas-local:preview` |
|
|
226
|
+
|---|---|---|---|
|
|
227
|
+
| Atlas Search ($search) | No | Yes | Yes |
|
|
228
|
+
| Atlas Vector Search ($vectorSearch) | No | Yes | Yes |
|
|
229
|
+
| Auto-embeddings (Voyage AI) | No | No | Yes (Preview) |
|
|
230
|
+
| Built-in health check | No | Yes | Yes |
|
|
231
|
+
| Single container | Yes | Yes | Yes |
|
|
232
|
+
| Production-safe | Yes | Dev/test only | No (Preview) |
|
|
233
|
+
| Min MongoDB version | Any | 7.0+ | 8.2+ |
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## What Changed the Recommendation
|
|
238
|
+
|
|
239
|
+
The single highest-signal finding: **auto-embedding in the `preview` tag requires MongoDB 8.2+ and is a Preview feature that is explicitly NOT available in the stable tags or via `atlas deployments setup`.** Users wanting auto-embeddings must use `mongodb/mongodb-atlas-local:preview` directly via Docker (not through the Atlas CLI `atlas deployments` command).
|
|
240
|
+
|
|
241
|
+
For ClawMongo users who want the simpler zero-embedding-code experience with Voyage AI, the `preview` tag is the only supported path today. For users who want a stable embedding pipeline, the stable `8.2` tag (without `preview`) with manually-managed Voyage AI calls in application code is the safer choice.
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Gotchas / Warnings
|
|
246
|
+
|
|
247
|
+
- **Never add `command:` to Docker Compose when using `mongodb-atlas-local`** — it overrides the entrypoint and mongot will not start. Remove any `command:` from existing Docker Compose files when migrating from `mongo:` image.
|
|
248
|
+
- **Preview tag is not stable** — documentation and behavior can change at any time; do not use `preview` in production.
|
|
249
|
+
- **`preview` and `latest` are different builds** — they have different digests and different sizes. Do not assume `preview` is ahead of `latest`; they track different feature channels.
|
|
250
|
+
- **MongoDB 8.2 is the minimum for auto-embeddings** — using `preview` tag with MongoDB 7.0 base image equivalent would not give auto-embedding; the `preview` tag ships with the 8.2 server.
|
|
251
|
+
- **Health check polling required** — wait for `docker inspect .State.Health.Status == healthy` before connecting; the container takes time for both mongod and mongot to initialize.
|
|
252
|
+
- **Connection string must include `directConnection=true`** — single-node replica set requires direct connection: `mongodb://localhost:27017/?directConnection=true`.
|
|
253
|
+
- **Voyage AI API key at startup** — for auto-embeddings, the API key must be passed to mongot at container startup time (via environment variable or config), not after the fact.
|
|
254
|
+
- **Token billing starts immediately** — as soon as auto-embedding is configured, every document insert/update/query incurs Voyage AI token charges.
|
|
255
|
+
- **Not for production workloads** — Atlas Local is a dev/test image; it is a single-node replica set with no HA, no backups, and no enterprise support.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## References
|
|
260
|
+
|
|
261
|
+
- https://hub.docker.com/r/mongodb/mongodb-atlas-local (Docker Hub — confirmed tag list via API)
|
|
262
|
+
- https://raw.githubusercontent.com/mongodb/docs-atlas-cli/master/source/atlas-cli-deploy-docker.txt (official Docker deployment tutorial source)
|
|
263
|
+
- https://raw.githubusercontent.com/mongodb/docs-atlas-cli/master/source/atlas-cli-deploy-local.txt (official local deployment tutorial source)
|
|
264
|
+
- https://raw.githubusercontent.com/mongodb/docs-atlas-cli/master/source/atlas-cli-deploy-pvt-registry.txt (private registry / tag info)
|
|
265
|
+
- https://www.mongodb.com/docs/atlas/atlas-vector-search/crud-embeddings/create-embeddings-automatic/ (auto-embedding feature documentation — key source)
|
|
266
|
+
- https://www.mongodb.com/docs/atlas/atlas-vector-search/deployment-options/ (deployment option recommendations)
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
Web research complete.
|
|
@@ -252,7 +252,7 @@ ClawMongo falls back to BSON `$text` indexes when mongot is unavailable, but vec
|
|
|
252
252
|
|
|
253
253
|
### Voyage AI embedding errors
|
|
254
254
|
|
|
255
|
-
Verify
|
|
255
|
+
Verify the `VOYAGE_API_KEY` environment variable is set on the atlas-local container. Test embedding generation:
|
|
256
256
|
|
|
257
257
|
```bash
|
|
258
258
|
curl -X POST "https://api.voyageai.com/v1/embeddings" \
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@romiluz/clawmongo",
|
|
3
|
-
"version": "2026.3.
|
|
3
|
+
"version": "2026.3.27",
|
|
4
4
|
"description": "OpenClaw, but it remembers. Full AI assistant (22 channels, 78 extensions, voice, apps) with MongoDB memory - vector search, knowledge graph, event-sourcing, KB, and 8 retrieval paths. Nothing is ever lost.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-memory",
|