moflo 4.8.10 → 4.8.12
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/.claude/agents/browser/browser-agent.yaml +182 -0
- package/.claude/agents/core/coder.md +265 -265
- package/.claude/agents/core/planner.md +167 -167
- package/.claude/agents/core/researcher.md +189 -189
- package/.claude/agents/core/reviewer.md +325 -325
- package/.claude/agents/core/tester.md +318 -318
- package/.claude/agents/dual-mode/codex-coordinator.md +224 -224
- package/.claude/agents/dual-mode/codex-worker.md +211 -211
- package/.claude/agents/dual-mode/dual-orchestrator.md +291 -291
- package/.claude/agents/github/code-review-swarm.md +537 -537
- package/.claude/agents/github/github-modes.md +172 -172
- package/.claude/agents/github/issue-tracker.md +318 -318
- package/.claude/agents/github/multi-repo-swarm.md +552 -552
- package/.claude/agents/github/pr-manager.md +190 -190
- package/.claude/agents/github/project-board-sync.md +508 -508
- package/.claude/agents/github/release-manager.md +366 -366
- package/.claude/agents/github/release-swarm.md +582 -582
- package/.claude/agents/github/repo-architect.md +397 -397
- package/.claude/agents/github/swarm-issue.md +572 -572
- package/.claude/agents/github/swarm-pr.md +427 -427
- package/.claude/agents/github/sync-coordinator.md +451 -451
- package/.claude/agents/github/workflow-automation.md +634 -634
- package/.claude/agents/goal/code-goal-planner.md +445 -445
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -129
- package/.claude/agents/hive-mind/queen-coordinator.md +202 -202
- package/.claude/agents/hive-mind/scout-explorer.md +241 -241
- package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -192
- package/.claude/agents/hive-mind/worker-specialist.md +216 -216
- package/.claude/agents/neural/safla-neural.md +73 -73
- package/.claude/agents/reasoning/goal-planner.md +72 -72
- package/.claude/agents/swarm/adaptive-coordinator.md +395 -395
- package/.claude/agents/swarm/hierarchical-coordinator.md +326 -326
- package/.claude/agents/swarm/mesh-coordinator.md +391 -391
- package/.claude/agents/templates/migration-plan.md +745 -745
- package/.claude/commands/agents/agent-spawning.md +28 -28
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
- package/.claude/commands/analysis/bottleneck-detect.md +162 -162
- package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
- package/.claude/commands/analysis/token-efficiency.md +44 -44
- package/.claude/commands/automation/auto-agent.md +122 -122
- package/.claude/commands/automation/self-healing.md +105 -105
- package/.claude/commands/automation/session-memory.md +89 -89
- package/.claude/commands/automation/smart-agents.md +72 -72
- package/.claude/commands/coordination/init.md +44 -44
- package/.claude/commands/coordination/orchestrate.md +43 -43
- package/.claude/commands/coordination/spawn.md +45 -45
- package/.claude/commands/coordination/swarm-init.md +85 -85
- package/.claude/commands/github/github-modes.md +146 -146
- package/.claude/commands/github/github-swarm.md +121 -121
- package/.claude/commands/github/issue-tracker.md +291 -291
- package/.claude/commands/github/pr-manager.md +169 -169
- package/.claude/commands/github/release-manager.md +337 -337
- package/.claude/commands/github/repo-architect.md +366 -366
- package/.claude/commands/github/sync-coordinator.md +300 -300
- package/.claude/commands/memory/neural.md +47 -47
- package/.claude/commands/monitoring/agents.md +44 -44
- package/.claude/commands/monitoring/status.md +46 -46
- package/.claude/commands/optimization/auto-topology.md +61 -61
- package/.claude/commands/optimization/parallel-execution.md +49 -49
- package/.claude/commands/sparc/analyzer.md +51 -51
- package/.claude/commands/sparc/architect.md +53 -53
- package/.claude/commands/sparc/ask.md +97 -97
- package/.claude/commands/sparc/batch-executor.md +54 -54
- package/.claude/commands/sparc/code.md +89 -89
- package/.claude/commands/sparc/coder.md +54 -54
- package/.claude/commands/sparc/debug.md +83 -83
- package/.claude/commands/sparc/debugger.md +54 -54
- package/.claude/commands/sparc/designer.md +53 -53
- package/.claude/commands/sparc/devops.md +109 -109
- package/.claude/commands/sparc/docs-writer.md +80 -80
- package/.claude/commands/sparc/documenter.md +54 -54
- package/.claude/commands/sparc/innovator.md +54 -54
- package/.claude/commands/sparc/integration.md +83 -83
- package/.claude/commands/sparc/mcp.md +117 -117
- package/.claude/commands/sparc/memory-manager.md +54 -54
- package/.claude/commands/sparc/optimizer.md +54 -54
- package/.claude/commands/sparc/orchestrator.md +131 -131
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
- package/.claude/commands/sparc/researcher.md +54 -54
- package/.claude/commands/sparc/reviewer.md +54 -54
- package/.claude/commands/sparc/security-review.md +80 -80
- package/.claude/commands/sparc/sparc-modes.md +174 -174
- package/.claude/commands/sparc/sparc.md +111 -111
- package/.claude/commands/sparc/spec-pseudocode.md +80 -80
- package/.claude/commands/sparc/supabase-admin.md +348 -348
- package/.claude/commands/sparc/swarm-coordinator.md +54 -54
- package/.claude/commands/sparc/tdd.md +54 -54
- package/.claude/commands/sparc/tester.md +54 -54
- package/.claude/commands/sparc/tutorial.md +79 -79
- package/.claude/commands/sparc/workflow-manager.md +54 -54
- package/.claude/commands/sparc.md +166 -166
- package/.claude/commands/swarm/analysis.md +95 -95
- package/.claude/commands/swarm/development.md +96 -96
- package/.claude/commands/swarm/examples.md +168 -168
- package/.claude/commands/swarm/maintenance.md +102 -102
- package/.claude/commands/swarm/optimization.md +117 -117
- package/.claude/commands/swarm/research.md +136 -136
- package/.claude/commands/swarm/testing.md +131 -131
- package/.claude/commands/training/neural-patterns.md +73 -73
- package/.claude/commands/training/specialization.md +62 -62
- package/.claude/commands/workflows/development.md +77 -77
- package/.claude/commands/workflows/research.md +62 -62
- package/.claude/guidance/moflo-bootstrap.md +129 -0
- package/.claude/guidance/{agent-bootstrap.md → shipped/agent-bootstrap.md} +126 -126
- package/.claude/guidance/{guidance-memory-strategy.md → shipped/guidance-memory-strategy.md} +262 -262
- package/.claude/guidance/{memory-strategy.md → shipped/memory-strategy.md} +204 -204
- package/.claude/guidance/{moflo.md → shipped/moflo.md} +45 -31
- package/.claude/guidance/{task-swarm-integration.md → shipped/task-swarm-integration.md} +441 -348
- package/.claude/helpers/gate-hook.mjs +50 -0
- package/.claude/helpers/gate.cjs +138 -236
- package/.claude/helpers/hook-handler.cjs +64 -326
- package/.claude/helpers/post-commit +16 -0
- package/.claude/helpers/pre-commit +26 -0
- package/.claude/helpers/prompt-hook.mjs +72 -0
- package/.claude/scripts/build-embeddings.mjs +549 -0
- package/.claude/scripts/generate-code-map.mjs +697 -0
- package/.claude/scripts/hooks.mjs +656 -0
- package/.claude/scripts/index-guidance.mjs +893 -0
- package/.claude/scripts/index-tests.mjs +710 -0
- package/.claude/scripts/semantic-search.mjs +473 -0
- package/.claude/scripts/session-start-launcher.mjs +226 -0
- package/.claude/settings.json +351 -290
- package/.claude/settings.local.json +4 -3
- package/.claude/skills/browser/SKILL.md +204 -0
- package/.claude/skills/fl/SKILL.md +29 -23
- package/.claude/skills/flo/SKILL.md +29 -23
- package/.claude/skills/github-code-review/SKILL.md +4 -4
- package/.claude/skills/github-multi-repo/SKILL.md +8 -8
- package/.claude/skills/github-project-management/SKILL.md +6 -6
- package/.claude/skills/github-release-management/SKILL.md +12 -12
- package/.claude/skills/github-workflow-automation/SKILL.md +6 -6
- package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
- package/.claude/skills/performance-analysis/SKILL.md +563 -563
- package/.claude/skills/sparc-methodology/SKILL.md +64 -64
- package/.claude/skills/swarm-advanced/SKILL.md +77 -77
- package/.claude/workflow-state.json +9 -0
- package/.claude-plugin/README.md +3 -3
- package/.claude-plugin/docs/PLUGIN_SUMMARY.md +3 -3
- package/.claude-plugin/docs/QUICKSTART.md +4 -4
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +3 -3
- package/.claude-plugin/scripts/install.sh +9 -9
- package/.claude-plugin/scripts/verify.sh +7 -7
- package/README.md +311 -116
- package/bin/gate-hook.mjs +50 -0
- package/bin/gate.cjs +138 -0
- package/bin/hook-handler.cjs +83 -0
- package/bin/hooks.mjs +72 -12
- package/bin/index-guidance.mjs +29 -35
- package/bin/index-tests.mjs +710 -0
- package/bin/lib/process-manager.mjs +243 -0
- package/bin/lib/registry-cleanup.cjs +41 -0
- package/bin/prompt-hook.mjs +72 -0
- package/bin/semantic-search.mjs +472 -440
- package/bin/session-start-launcher.mjs +81 -31
- package/bin/setup-project.mjs +65 -65
- package/package.json +4 -2
- package/src/@claude-flow/cli/README.md +1 -1
- package/src/@claude-flow/cli/bin/cli.js +175 -175
- package/src/@claude-flow/cli/dist/src/commands/doctor.js +1091 -736
- package/src/@claude-flow/cli/dist/src/commands/github.d.ts +12 -0
- package/src/@claude-flow/cli/dist/src/commands/github.js +505 -0
- package/src/@claude-flow/cli/dist/src/commands/hive-mind.js +90 -90
- package/src/@claude-flow/cli/dist/src/commands/index.d.ts +1 -0
- package/src/@claude-flow/cli/dist/src/commands/index.js +7 -0
- package/src/@claude-flow/cli/dist/src/config-adapter.js +1 -1
- package/src/@claude-flow/cli/dist/src/init/claudemd-generator.d.ts +29 -24
- package/src/@claude-flow/cli/dist/src/init/claudemd-generator.js +73 -494
- package/src/@claude-flow/cli/dist/src/init/executor.js +109 -5
- package/src/@claude-flow/cli/dist/src/init/helpers-generator.d.ts +14 -0
- package/src/@claude-flow/cli/dist/src/init/helpers-generator.js +156 -24
- package/src/@claude-flow/cli/dist/src/init/mcp-generator.js +20 -20
- package/src/@claude-flow/cli/dist/src/init/moflo-init.d.ts +30 -23
- package/src/@claude-flow/cli/dist/src/init/moflo-init.js +727 -670
- package/src/@claude-flow/cli/dist/src/init/settings-generator.js +23 -14
- package/src/@claude-flow/cli/dist/src/mcp-server.js +3 -3
- package/src/@claude-flow/cli/dist/src/plugins/manager.js +9 -8
- package/src/@claude-flow/cli/dist/src/services/worker-daemon.d.ts +1 -0
- package/src/@claude-flow/cli/dist/src/services/worker-daemon.js +3 -1
- package/src/@claude-flow/cli/dist/src/services/workflow-gate.js +10 -10
- package/src/@claude-flow/cli/package.json +106 -106
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { spawn } from 'child_process';
|
|
11
|
-
import { existsSync, readFileSync, copyFileSync } from 'fs';
|
|
11
|
+
import { existsSync, readFileSync, copyFileSync, unlinkSync, readdirSync } from 'fs';
|
|
12
12
|
import { resolve, dirname } from 'path';
|
|
13
13
|
import { fileURLToPath } from 'url';
|
|
14
14
|
|
|
@@ -75,54 +75,87 @@ try {
|
|
|
75
75
|
try { cachedVersion = readFileSync(versionStampPath, 'utf-8').trim(); } catch {}
|
|
76
76
|
|
|
77
77
|
if (installedVersion !== cachedVersion) {
|
|
78
|
+
const binDir = resolve(projectRoot, 'node_modules/moflo/bin');
|
|
79
|
+
const manifestPath = resolve(projectRoot, '.claude-flow', 'installed-files.json');
|
|
80
|
+
|
|
81
|
+
// ── Manifest-based auto-update ──────────────────────────────────────
|
|
82
|
+
//
|
|
83
|
+
// IMPORTANT: Every file moflo installs into the destination project
|
|
84
|
+
// MUST be recorded in `currentManifest` via syncFile() or a manual
|
|
85
|
+
// push. On upgrade, files in the OLD manifest but NOT in the new one
|
|
86
|
+
// are deleted — this is how we clean up files from prior versions
|
|
87
|
+
// without accidentally deleting user-created or runtime files.
|
|
88
|
+
//
|
|
89
|
+
// When adding/removing files from the sync lists below:
|
|
90
|
+
// 1. Use syncFile() for copied files (it records automatically)
|
|
91
|
+
// 2. Push to currentManifest manually for generated files
|
|
92
|
+
// 3. That's it — cleanup is automatic on the next upgrade
|
|
93
|
+
// ────────────────────────────────────────────────────────────────────
|
|
94
|
+
|
|
95
|
+
// Load the previous manifest so we can diff after syncing
|
|
96
|
+
let previousManifest = [];
|
|
97
|
+
try { previousManifest = JSON.parse(readFileSync(manifestPath, 'utf-8')); } catch { /* ok */ }
|
|
98
|
+
|
|
99
|
+
// Track every file we install this round
|
|
100
|
+
const currentManifest = [];
|
|
101
|
+
|
|
102
|
+
/** Copy src → dest if src exists, record in manifest. */
|
|
103
|
+
function syncFile(src, dest, manifestKey) {
|
|
104
|
+
if (existsSync(src)) {
|
|
105
|
+
try { copyFileSync(src, dest); currentManifest.push(manifestKey); } catch { /* non-fatal */ }
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
78
109
|
// Version changed — sync scripts from bin/
|
|
79
110
|
if (autoUpdateConfig.scripts) {
|
|
80
|
-
const binDir = resolve(projectRoot, 'node_modules/moflo/bin');
|
|
81
111
|
const scriptsDir = resolve(projectRoot, '.claude/scripts');
|
|
82
112
|
const scriptFiles = [
|
|
83
113
|
'hooks.mjs', 'session-start-launcher.mjs', 'index-guidance.mjs',
|
|
84
114
|
'build-embeddings.mjs', 'generate-code-map.mjs', 'semantic-search.mjs',
|
|
115
|
+
'index-tests.mjs',
|
|
85
116
|
];
|
|
86
117
|
for (const file of scriptFiles) {
|
|
87
|
-
|
|
88
|
-
const dest = resolve(scriptsDir, file);
|
|
89
|
-
if (existsSync(src)) {
|
|
90
|
-
try { copyFileSync(src, dest); } catch { /* non-fatal */ }
|
|
91
|
-
}
|
|
118
|
+
syncFile(resolve(binDir, file), resolve(scriptsDir, file), `.claude/scripts/${file}`);
|
|
92
119
|
}
|
|
93
120
|
}
|
|
94
121
|
|
|
95
|
-
// Sync helpers from source .claude/helpers/
|
|
122
|
+
// Sync helpers from bin/ and source .claude/helpers/
|
|
96
123
|
if (autoUpdateConfig.helpers) {
|
|
97
|
-
const sourceHelpersDir = resolve(projectRoot, 'node_modules/moflo/src/@claude-flow/cli/.claude/helpers');
|
|
98
124
|
const helpersDir = resolve(projectRoot, '.claude/helpers');
|
|
99
|
-
|
|
100
|
-
|
|
125
|
+
if (!existsSync(helpersDir)) mkdirSync(helpersDir, { recursive: true });
|
|
126
|
+
|
|
127
|
+
// Gate and hook helpers — shipped as static files in bin/
|
|
128
|
+
const binHelperFiles = [
|
|
129
|
+
'gate.cjs', 'gate-hook.mjs', 'prompt-hook.mjs', 'hook-handler.cjs',
|
|
101
130
|
];
|
|
102
|
-
for (const file of
|
|
103
|
-
|
|
104
|
-
const dest = resolve(helpersDir, file);
|
|
105
|
-
if (existsSync(src)) {
|
|
106
|
-
try { copyFileSync(src, dest); } catch { /* non-fatal */ }
|
|
107
|
-
}
|
|
131
|
+
for (const file of binHelperFiles) {
|
|
132
|
+
syncFile(resolve(binDir, file), resolve(helpersDir, file), `.claude/helpers/${file}`);
|
|
108
133
|
}
|
|
109
134
|
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
135
|
+
// Other helpers from .claude/helpers/ and CLI .claude/helpers/
|
|
136
|
+
const helperSources = [
|
|
137
|
+
resolve(projectRoot, 'node_modules/moflo/.claude/helpers'),
|
|
138
|
+
resolve(projectRoot, 'node_modules/moflo/src/@claude-flow/cli/.claude/helpers'),
|
|
139
|
+
];
|
|
140
|
+
const sourceHelperFiles = [
|
|
141
|
+
'auto-memory-hook.mjs', 'statusline.cjs', 'intelligence.cjs', 'pre-commit', 'post-commit',
|
|
142
|
+
];
|
|
143
|
+
for (const file of sourceHelperFiles) {
|
|
144
|
+
const dest = resolve(helpersDir, file);
|
|
145
|
+
for (const srcDir of helperSources) {
|
|
146
|
+
const src = resolve(srcDir, file);
|
|
147
|
+
if (existsSync(src)) {
|
|
148
|
+
try { copyFileSync(src, dest); currentManifest.push(`.claude/helpers/${file}`); } catch { /* non-fatal */ }
|
|
149
|
+
break; // first source wins
|
|
150
|
+
}
|
|
151
|
+
}
|
|
120
152
|
}
|
|
121
153
|
}
|
|
122
154
|
|
|
123
155
|
// Sync guidance bootstrap file (moflo-bootstrap.md)
|
|
124
|
-
|
|
125
|
-
const
|
|
156
|
+
const shippedBootstrap = resolve(projectRoot, 'node_modules/moflo/.claude/guidance/shipped/agent-bootstrap.md');
|
|
157
|
+
const legacyBootstrap = resolve(projectRoot, 'node_modules/moflo/.claude/guidance/agent-bootstrap.md');
|
|
158
|
+
const bootstrapSrc = existsSync(shippedBootstrap) ? shippedBootstrap : legacyBootstrap;
|
|
126
159
|
const guidanceDir = resolve(projectRoot, '.claude/guidance');
|
|
127
160
|
const bootstrapDest = resolve(guidanceDir, 'moflo-bootstrap.md');
|
|
128
161
|
if (existsSync(bootstrapSrc)) {
|
|
@@ -131,13 +164,28 @@ try {
|
|
|
131
164
|
const header = '<!-- AUTO-GENERATED by moflo session-start. Do not edit — changes will be overwritten. -->\n<!-- Source: node_modules/moflo/.claude/guidance/agent-bootstrap.md -->\n\n';
|
|
132
165
|
const content = readFileSync(bootstrapSrc, 'utf-8');
|
|
133
166
|
writeFileSync(bootstrapDest, header + content);
|
|
167
|
+
currentManifest.push('.claude/guidance/moflo-bootstrap.md');
|
|
134
168
|
} catch { /* non-fatal */ }
|
|
135
169
|
}
|
|
136
170
|
|
|
137
|
-
//
|
|
171
|
+
// ── Clean up files we installed previously but no longer ship ──
|
|
172
|
+
// Only remove files that are in the OLD manifest but NOT in the new one.
|
|
173
|
+
// This ensures we never delete user-created or runtime-generated files.
|
|
174
|
+
if (previousManifest.length > 0) {
|
|
175
|
+
const currentSet = new Set(currentManifest);
|
|
176
|
+
for (const rel of previousManifest) {
|
|
177
|
+
if (!currentSet.has(rel)) {
|
|
178
|
+
const abs = resolve(projectRoot, rel);
|
|
179
|
+
try { if (existsSync(abs)) unlinkSync(abs); } catch { /* non-fatal */ }
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Write updated manifest + version stamp
|
|
138
185
|
try {
|
|
139
186
|
const cfDir = resolve(projectRoot, '.claude-flow');
|
|
140
187
|
if (!existsSync(cfDir)) mkdirSync(cfDir, { recursive: true });
|
|
188
|
+
writeFileSync(manifestPath, JSON.stringify(currentManifest, null, 2));
|
|
141
189
|
writeFileSync(versionStampPath, installedVersion);
|
|
142
190
|
} catch {}
|
|
143
191
|
}
|
|
@@ -149,7 +197,9 @@ try {
|
|
|
149
197
|
// ── 3b. Ensure guidance bootstrap file exists (even without version change) ──
|
|
150
198
|
// Subagents need this file on disk for direct reads without memory search.
|
|
151
199
|
try {
|
|
152
|
-
const
|
|
200
|
+
const shippedBs = resolve(projectRoot, 'node_modules/moflo/.claude/guidance/shipped/agent-bootstrap.md');
|
|
201
|
+
const legacyBs = resolve(projectRoot, 'node_modules/moflo/.claude/guidance/agent-bootstrap.md');
|
|
202
|
+
const bootstrapSrc = existsSync(shippedBs) ? shippedBs : legacyBs;
|
|
153
203
|
const guidanceDir = resolve(projectRoot, '.claude/guidance');
|
|
154
204
|
const bootstrapDest = resolve(guidanceDir, 'moflo-bootstrap.md');
|
|
155
205
|
if (existsSync(bootstrapSrc) && !existsSync(bootstrapDest)) {
|
package/bin/setup-project.mjs
CHANGED
|
@@ -29,67 +29,57 @@ const args = process.argv.slice(2);
|
|
|
29
29
|
const updateOnly = args.includes('--update');
|
|
30
30
|
const checkOnly = args.includes('--check');
|
|
31
31
|
|
|
32
|
-
// Markers for idempotent CLAUDE.md updates
|
|
33
|
-
const MARKER_START = '<!-- MOFLO:
|
|
34
|
-
const MARKER_END = '<!-- MOFLO:
|
|
35
|
-
|
|
32
|
+
// Markers for idempotent CLAUDE.md updates — keep in sync with claudemd-generator.ts
|
|
33
|
+
const MARKER_START = '<!-- MOFLO:INJECTED:START -->';
|
|
34
|
+
const MARKER_END = '<!-- MOFLO:INJECTED:END -->';
|
|
35
|
+
// Legacy markers to detect and replace
|
|
36
|
+
const LEGACY_STARTS = ['<!-- MOFLO:SUBAGENT-PROTOCOL:START -->', '<!-- MOFLO:START -->'];
|
|
37
|
+
const LEGACY_ENDS = ['<!-- MOFLO:SUBAGENT-PROTOCOL:END -->', '<!-- MOFLO:END -->'];
|
|
38
|
+
|
|
39
|
+
// Minimal injection — just enough for Claude to work with moflo.
|
|
40
|
+
// All detailed docs live in .claude/guidance/shipped/moflo.md.
|
|
36
41
|
const CLAUDE_MD_SECTION = `${MARKER_START}
|
|
37
|
-
##
|
|
42
|
+
## MoFlo — AI Agent Orchestration
|
|
38
43
|
|
|
39
|
-
|
|
44
|
+
This project uses [MoFlo](https://github.com/eric-cielo/moflo) for AI-assisted development workflows.
|
|
40
45
|
|
|
41
|
-
|
|
46
|
+
### FIRST ACTION ON EVERY PROMPT: Search Memory
|
|
42
47
|
|
|
43
|
-
|
|
44
|
-
\`node bin/semantic-search.mjs "[task description]" --namespace guidance\`
|
|
48
|
+
Your first tool call for every new user prompt MUST be a memory search. Do this BEFORE Glob, Grep, Read, or any file exploration.
|
|
45
49
|
|
|
46
|
-
|
|
50
|
+
\`\`\`
|
|
51
|
+
mcp__moflo__memory_search — query: "<task description>", namespace: "guidance" or "patterns" or "code-map"
|
|
52
|
+
\`\`\`
|
|
47
53
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
| \`guidance\` | Always — understanding patterns, rules, conventions | Guidance docs, coding rules, domain context |
|
|
51
|
-
| \`patterns\` | Always — prior solutions and implementation patterns | Learned patterns from previous task execution |
|
|
52
|
-
| \`code-map\` | Finding where code lives (files, types, services) | Type-to-file mappings, directory contents, project overviews |
|
|
54
|
+
Search \`guidance\` and \`patterns\` namespaces on every prompt. Search \`code-map\` when navigating the codebase.
|
|
55
|
+
When the user asks you to remember something: \`mcp__moflo__memory_store\` with namespace \`knowledge\`.
|
|
53
56
|
|
|
54
|
-
|
|
57
|
+
### Workflow Gates (enforced automatically)
|
|
55
58
|
|
|
56
|
-
|
|
59
|
+
- **Memory-first**: Must search memory before Glob/Grep/Read
|
|
60
|
+
- **TaskCreate-first**: Must call TaskCreate before spawning Agent tool
|
|
57
61
|
|
|
58
|
-
|
|
62
|
+
### MCP Tools (preferred over CLI)
|
|
59
63
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
| Tool | Purpose |
|
|
65
|
+
|------|---------|
|
|
66
|
+
| \`mcp__moflo__memory_search\` | Semantic search across indexed knowledge |
|
|
67
|
+
| \`mcp__moflo__memory_store\` | Store patterns and decisions |
|
|
68
|
+
| \`mcp__moflo__hooks_route\` | Route task to optimal agent type |
|
|
69
|
+
| \`mcp__moflo__hooks_pre-task\` | Record task start |
|
|
70
|
+
| \`mcp__moflo__hooks_post-task\` | Record task completion for learning |
|
|
71
|
+
|
|
72
|
+
### CLI Fallback
|
|
68
73
|
|
|
69
|
-
### Fallback: CLI Scripts
|
|
70
74
|
\`\`\`bash
|
|
71
75
|
npx flo-search "[query]" --namespace guidance # Semantic search
|
|
72
|
-
npx flo
|
|
73
|
-
npx flo-index # Re-index guidance docs
|
|
74
|
-
npx flo-codemap --force # Regenerate code-map
|
|
76
|
+
npx flo doctor --fix # Health check
|
|
75
77
|
\`\`\`
|
|
76
78
|
|
|
77
|
-
###
|
|
78
|
-
|
|
79
|
-
| Content Type | Destination | How to Write |
|
|
80
|
-
|-------------|-------------|--------------|
|
|
81
|
-
| Debugging lessons (bug found, root cause, fix) | Memory DB — \`patterns\` namespace | \`mcp__claude-flow__memory_store\` |
|
|
82
|
-
| Architectural decisions (chose X over Y, why) | Memory DB — \`decisions\` namespace | \`mcp__claude-flow__memory_store\` |
|
|
83
|
-
| Learned patterns (task succeeded/failed, what worked) | Memory DB — \`patterns\` namespace | \`mcp__claude-flow__memory_store\` |
|
|
84
|
-
| Coding rules (always/never do X in code) | \`.claude/guidance/\` files | Edit directly |
|
|
85
|
-
| Process/workflow rules (CI, PR, gates) | \`CLAUDE.md\` | Edit directly |
|
|
79
|
+
### Full Reference
|
|
86
80
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
All subagents MUST read \`.claude/guidance/moflo-bootstrap.md\` before starting any work.
|
|
90
|
-
It contains the memory-first protocol, discovery storage rules, and universal conventions.
|
|
91
|
-
|
|
92
|
-
If \`.claude/guidance/agent-bootstrap.md\` also exists, read it next for project-specific rules.
|
|
81
|
+
For CLI commands, hooks, agents, swarm config, memory commands, and moflo.yaml options, see:
|
|
82
|
+
\`.claude/guidance/shipped/moflo.md\`
|
|
93
83
|
${MARKER_END}`;
|
|
94
84
|
|
|
95
85
|
function log(msg) {
|
|
@@ -124,7 +114,10 @@ function findProjectRoot() {
|
|
|
124
114
|
}
|
|
125
115
|
|
|
126
116
|
function copyBootstrap(projectRoot) {
|
|
127
|
-
const
|
|
117
|
+
const shippedSource = join(mofloRoot, '.claude', 'guidance', 'shipped', 'agent-bootstrap.md');
|
|
118
|
+
const source = existsSync(shippedSource)
|
|
119
|
+
? shippedSource
|
|
120
|
+
: join(mofloRoot, '.claude', 'guidance', 'agent-bootstrap.md');
|
|
128
121
|
const targetDir = join(projectRoot, '.claude', 'guidance');
|
|
129
122
|
const target = join(targetDir, 'moflo-bootstrap.md');
|
|
130
123
|
|
|
@@ -177,28 +170,35 @@ function updateClaudeMd(projectRoot) {
|
|
|
177
170
|
|
|
178
171
|
const content = readFileSync(claudeMdPath, 'utf-8');
|
|
179
172
|
|
|
180
|
-
// Check
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
173
|
+
// Check for current or legacy markers and replace
|
|
174
|
+
const allStarts = [MARKER_START, ...LEGACY_STARTS];
|
|
175
|
+
const allEnds = [MARKER_END, ...LEGACY_ENDS];
|
|
176
|
+
|
|
177
|
+
for (let i = 0; i < allStarts.length; i++) {
|
|
178
|
+
if (content.includes(allStarts[i])) {
|
|
179
|
+
const startIdx = content.indexOf(allStarts[i]);
|
|
180
|
+
const endIdx = content.indexOf(allEnds[i]);
|
|
181
|
+
|
|
182
|
+
if (endIdx > startIdx) {
|
|
183
|
+
// If current markers and content matches, we're up to date
|
|
184
|
+
if (i === 0) {
|
|
185
|
+
const existingSection = content.substring(startIdx, endIdx + allEnds[i].length);
|
|
186
|
+
if (existingSection === CLAUDE_MD_SECTION) {
|
|
187
|
+
log('✅ CLAUDE.md moflo section is current');
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
185
191
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
192
|
+
// Replace (current or legacy) with new section
|
|
193
|
+
if (!checkOnly) {
|
|
194
|
+
const updated = content.substring(0, startIdx) + CLAUDE_MD_SECTION + content.substring(endIdx + allEnds[i].length);
|
|
195
|
+
writeFileSync(claudeMdPath, updated, 'utf-8');
|
|
196
|
+
log(i === 0 ? '📝 Updated CLAUDE.md moflo section' : '📝 Replaced legacy CLAUDE.md section with minimal moflo injection');
|
|
197
|
+
} else {
|
|
198
|
+
log('⚠️ CLAUDE.md moflo section needs update');
|
|
199
|
+
}
|
|
190
200
|
return true;
|
|
191
201
|
}
|
|
192
|
-
|
|
193
|
-
// Update existing section
|
|
194
|
-
if (!checkOnly) {
|
|
195
|
-
const updated = content.substring(0, startIdx) + CLAUDE_MD_SECTION + content.substring(endIdx + MARKER_END.length);
|
|
196
|
-
writeFileSync(claudeMdPath, updated, 'utf-8');
|
|
197
|
-
log('📝 Updated CLAUDE.md subagent protocol section');
|
|
198
|
-
} else {
|
|
199
|
-
log('⚠️ CLAUDE.md subagent section needs update');
|
|
200
|
-
}
|
|
201
|
-
return true;
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "moflo",
|
|
3
|
-
"version": "4.8.
|
|
3
|
+
"version": "4.8.12",
|
|
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",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"flo-search": "bin/semantic-search.mjs",
|
|
12
12
|
"flo-embeddings": "bin/build-embeddings.mjs",
|
|
13
13
|
"flo-index": "bin/index-guidance.mjs",
|
|
14
|
+
"flo-testmap": "bin/index-tests.mjs",
|
|
14
15
|
"flo-learn": ".claude/helpers/learning-service.mjs",
|
|
15
16
|
"moflo": "bin/cli.js",
|
|
16
17
|
"claude-flow": "bin/cli.js"
|
|
@@ -40,6 +41,7 @@
|
|
|
40
41
|
"src/@claude-flow/memory/package.json",
|
|
41
42
|
".claude-plugin/**",
|
|
42
43
|
".claude/**",
|
|
44
|
+
"!.claude/guidance/internal/**",
|
|
43
45
|
"!.claude/**/*.db",
|
|
44
46
|
"!.claude/**/*.map",
|
|
45
47
|
"README.md",
|
|
@@ -83,7 +85,7 @@
|
|
|
83
85
|
"@types/bcrypt": "^5.0.2",
|
|
84
86
|
"@types/node": "^20.19.37",
|
|
85
87
|
"eslint": "^8.0.0",
|
|
86
|
-
"moflo": "^4.8.
|
|
88
|
+
"moflo": "^4.8.11",
|
|
87
89
|
"tsx": "^4.21.0",
|
|
88
90
|
"typescript": "^5.9.3",
|
|
89
91
|
"vitest": "^4.0.0"
|
|
@@ -433,7 +433,7 @@ MoFlo uses a SQLite database (via sql.js/WASM — no native deps) to store three
|
|
|
433
433
|
|
|
434
434
|
When `flo init` runs, it appends a workflow section to your CLAUDE.md that teaches Claude:
|
|
435
435
|
- Always search memory before Glob/Grep/Read (enforced by gates)
|
|
436
|
-
- Use `
|
|
436
|
+
- Use `mcp__moflo__memory_search` for knowledge retrieval
|
|
437
437
|
- Use `/flo <issue>` (or `/fl`) for issue execution
|
|
438
438
|
- Store learnings after task completion
|
|
439
439
|
|