moflo 4.8.40 → 4.8.42
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/bin/hooks.mjs
CHANGED
|
@@ -27,7 +27,22 @@ import { createProcessManager } from './lib/process-manager.mjs';
|
|
|
27
27
|
|
|
28
28
|
const __filename = fileURLToPath(import.meta.url);
|
|
29
29
|
const __dirname = dirname(__filename);
|
|
30
|
-
|
|
30
|
+
|
|
31
|
+
// Detect project root by walking up from cwd to find package.json.
|
|
32
|
+
// IMPORTANT: Do NOT use resolve(__dirname, '..') or '../..' — this script lives
|
|
33
|
+
// in bin/ during development but gets synced to .claude/scripts/ in consumer
|
|
34
|
+
// projects, so __dirname-relative paths break. findProjectRoot() works everywhere.
|
|
35
|
+
function findProjectRoot() {
|
|
36
|
+
let dir = process.cwd();
|
|
37
|
+
const root = resolve(dir, '/');
|
|
38
|
+
while (dir !== root) {
|
|
39
|
+
if (existsSync(resolve(dir, 'package.json'))) return dir;
|
|
40
|
+
dir = dirname(dir);
|
|
41
|
+
}
|
|
42
|
+
return process.cwd();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const projectRoot = findProjectRoot();
|
|
31
46
|
const logFile = resolve(projectRoot, '.swarm/hooks.log');
|
|
32
47
|
const pm = createProcessManager(projectRoot);
|
|
33
48
|
|
package/bin/index-all.mjs
CHANGED
|
@@ -15,7 +15,22 @@ import { fileURLToPath } from 'url';
|
|
|
15
15
|
import { execFileSync } from 'child_process';
|
|
16
16
|
|
|
17
17
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
// Detect project root by walking up from cwd to find package.json.
|
|
20
|
+
// IMPORTANT: Do NOT use resolve(__dirname, '..') — this script lives in bin/
|
|
21
|
+
// during development but gets synced to .claude/scripts/ in consumer projects,
|
|
22
|
+
// so __dirname-relative paths break. findProjectRoot() works in both locations.
|
|
23
|
+
function findProjectRoot() {
|
|
24
|
+
let dir = process.cwd();
|
|
25
|
+
const root = resolve(dir, '/');
|
|
26
|
+
while (dir !== root) {
|
|
27
|
+
if (existsSync(resolve(dir, 'package.json'))) return dir;
|
|
28
|
+
dir = dirname(dir);
|
|
29
|
+
}
|
|
30
|
+
return process.cwd();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const projectRoot = findProjectRoot();
|
|
19
34
|
const LOG_PATH = resolve(projectRoot, '.swarm/hooks.log');
|
|
20
35
|
|
|
21
36
|
function log(msg) {
|
|
@@ -99,7 +114,7 @@ async function main() {
|
|
|
99
114
|
if (isIndexEnabled('guidance')) {
|
|
100
115
|
const guidanceScript = resolveBin('flo-index', 'index-guidance.mjs');
|
|
101
116
|
if (guidanceScript) {
|
|
102
|
-
runStep('guidance-index', 'node', [guidanceScript]);
|
|
117
|
+
runStep('guidance-index', 'node', [guidanceScript, '--no-embeddings']);
|
|
103
118
|
} else {
|
|
104
119
|
log('SKIP guidance-index (script not found)');
|
|
105
120
|
}
|
|
@@ -111,7 +126,7 @@ async function main() {
|
|
|
111
126
|
if (isIndexEnabled('code_map')) {
|
|
112
127
|
const codeMapScript = resolveBin('flo-codemap', 'generate-code-map.mjs');
|
|
113
128
|
if (codeMapScript) {
|
|
114
|
-
runStep('code-map', 'node', [codeMapScript], 180_000);
|
|
129
|
+
runStep('code-map', 'node', [codeMapScript, '--no-embeddings'], 180_000);
|
|
115
130
|
} else {
|
|
116
131
|
log('SKIP code-map (script not found)');
|
|
117
132
|
}
|
|
@@ -123,7 +138,7 @@ async function main() {
|
|
|
123
138
|
if (isIndexEnabled('tests')) {
|
|
124
139
|
const testScript = resolveBin('flo-testmap', 'index-tests.mjs');
|
|
125
140
|
if (testScript) {
|
|
126
|
-
runStep('test-index', 'node', [testScript]);
|
|
141
|
+
runStep('test-index', 'node', [testScript, '--no-embeddings']);
|
|
127
142
|
} else {
|
|
128
143
|
log('SKIP test-index (script not found)');
|
|
129
144
|
}
|
|
@@ -151,7 +166,17 @@ async function main() {
|
|
|
151
166
|
log('SKIP pretrain (CLI not found)');
|
|
152
167
|
}
|
|
153
168
|
|
|
154
|
-
// 6.
|
|
169
|
+
// 6. Build embeddings — single pass for ALL namespaces, after all indexers finish.
|
|
170
|
+
// Individual indexers are called with --no-embeddings to prevent background
|
|
171
|
+
// embedding spawns that race with this chain (sql.js last-write-wins).
|
|
172
|
+
const embeddingsScript = resolveBin('flo-embeddings', 'build-embeddings.mjs');
|
|
173
|
+
if (embeddingsScript) {
|
|
174
|
+
runStep('build-embeddings', 'node', [embeddingsScript], 300_000);
|
|
175
|
+
} else {
|
|
176
|
+
log('SKIP build-embeddings (script not found)');
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// 7. HNSW rebuild — MUST run last, after all writes are committed (#81)
|
|
155
180
|
if (localCli) {
|
|
156
181
|
runStep('hnsw-rebuild', 'node', [localCli, 'memory', 'rebuild', '--force']);
|
|
157
182
|
} else {
|
package/bin/index-patterns.mjs
CHANGED
|
@@ -353,8 +353,15 @@ async function main() {
|
|
|
353
353
|
|
|
354
354
|
// Trigger embedding generation in background
|
|
355
355
|
try {
|
|
356
|
-
|
|
357
|
-
|
|
356
|
+
// Check __dirname first (works in both dev bin/ and consumer .claude/scripts/),
|
|
357
|
+
// then fall back to node_modules/moflo/bin/ for consumer projects
|
|
358
|
+
const candidates = [
|
|
359
|
+
resolve(__dirname, 'build-embeddings.mjs'),
|
|
360
|
+
resolve(projectRoot, 'node_modules/moflo/bin/build-embeddings.mjs'),
|
|
361
|
+
resolve(projectRoot, '.claude/scripts/build-embeddings.mjs'),
|
|
362
|
+
];
|
|
363
|
+
const embeddingScript = candidates.find(p => existsSync(p));
|
|
364
|
+
if (embeddingScript) {
|
|
358
365
|
const child = spawn('node', [embeddingScript, '--namespace', NAMESPACE], {
|
|
359
366
|
cwd: projectRoot,
|
|
360
367
|
detached: true,
|
|
@@ -13,7 +13,22 @@ import { resolve, dirname } from 'path';
|
|
|
13
13
|
import { fileURLToPath } from 'url';
|
|
14
14
|
|
|
15
15
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
// Detect project root by walking up from cwd to find package.json.
|
|
18
|
+
// IMPORTANT: Do NOT use resolve(__dirname, '..') or '../..' — this script lives
|
|
19
|
+
// in bin/ during development but gets synced to .claude/scripts/ in consumer
|
|
20
|
+
// projects, so __dirname-relative paths break. findProjectRoot() works everywhere.
|
|
21
|
+
function findProjectRoot() {
|
|
22
|
+
let dir = process.cwd();
|
|
23
|
+
const root = resolve(dir, '/');
|
|
24
|
+
while (dir !== root) {
|
|
25
|
+
if (existsSync(resolve(dir, 'package.json'))) return dir;
|
|
26
|
+
dir = dirname(dir);
|
|
27
|
+
}
|
|
28
|
+
return process.cwd();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const projectRoot = findProjectRoot();
|
|
17
32
|
|
|
18
33
|
// ── 1. Helper: fire-and-forget a background process ─────────────────────────
|
|
19
34
|
function fireAndForget(cmd, args, label) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "moflo",
|
|
3
|
-
"version": "4.8.
|
|
3
|
+
"version": "4.8.42",
|
|
4
4
|
"description": "MoFlo — AI agent orchestration for Claude Code. Forked from ruflo/claude-flow with patches applied to source, plus feature-level orchestration.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"@types/bcrypt": "^5.0.2",
|
|
90
90
|
"@types/node": "^20.19.37",
|
|
91
91
|
"eslint": "^8.0.0",
|
|
92
|
-
"moflo": "^4.8.
|
|
92
|
+
"moflo": "^4.8.41",
|
|
93
93
|
"tsx": "^4.21.0",
|
|
94
94
|
"typescript": "^5.9.3",
|
|
95
95
|
"vitest": "^4.0.0"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moflo/cli",
|
|
3
|
-
"version": "4.8.
|
|
3
|
+
"version": "4.8.42",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MoFlo CLI — AI agent orchestration with specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code",
|
|
6
6
|
"main": "dist/src/index.js",
|