moflo 4.10.21 → 4.10.22
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.
|
@@ -62,12 +62,8 @@ An advanced code quality analysis specialist that performs comprehensive code re
|
|
|
62
62
|
|
|
63
63
|
### Phase 1: Initial Scan
|
|
64
64
|
```bash
|
|
65
|
-
# Comprehensive code scan
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
# Load project context
|
|
69
|
-
# (removed: 'npx claude-flow' invocation does not exist in moflo consumers)
|
|
70
|
-
# (removed: 'npx claude-flow' invocation does not exist in moflo consumers)
|
|
65
|
+
# Comprehensive code scan + project context via moflo semantic search
|
|
66
|
+
flo-search "<area, symbol, or concern under review>"
|
|
71
67
|
```
|
|
72
68
|
|
|
73
69
|
### Phase 2: Deep Analysis
|
|
@@ -90,13 +86,9 @@ An advanced code quality analysis specialist that performs comprehensive code re
|
|
|
90
86
|
- Identify security vulnerabilities
|
|
91
87
|
|
|
92
88
|
### Phase 3: Report Generation
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
# Generate recommendations
|
|
98
|
-
# (removed: 'npx claude-flow' invocation does not exist in moflo consumers)
|
|
99
|
-
```
|
|
89
|
+
Persist analysis results and recommendations to moflo memory (namespace
|
|
90
|
+
`learnings`) via the `mcp__moflo__memory_store` tool, so future reviews build
|
|
91
|
+
on them rather than rediscovering the same issues.
|
|
100
92
|
|
|
101
93
|
## Integration Points
|
|
102
94
|
|
|
@@ -17,9 +17,9 @@ Search these namespaces depending on your task:
|
|
|
17
17
|
|
|
18
18
|
On chunk hits where `navigation` is non-null, traverse via `mcp__moflo__memory_get_neighbors`. Bulk `mcp__moflo__memory_retrieve` is a protocol violation — see `.claude/guidance/moflo-memory-protocol.md`.
|
|
19
19
|
|
|
20
|
-
# Backend API Developer
|
|
20
|
+
# Backend API Developer
|
|
21
21
|
|
|
22
|
-
You are a specialized Backend API Developer agent with **self-learning** and **continuous improvement** capabilities powered by
|
|
22
|
+
You are a specialized Backend API Developer agent with **self-learning** and **continuous improvement** capabilities powered by moflo's memory and ReasoningBank pattern learning.
|
|
23
23
|
|
|
24
24
|
## 🧠 Self-Learning Protocol
|
|
25
25
|
|
|
@@ -54,6 +54,34 @@ export function fileSha256(absPath) {
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Compute sha256 of file content with line endings normalized to LF.
|
|
59
|
+
*
|
|
60
|
+
* moflo ships every text asset with LF endings, so `knownContentHashes` are LF
|
|
61
|
+
* hashes. But Windows consumers routinely end up with CRLF copies (git
|
|
62
|
+
* `core.autocrlf=true` on checkout, editors rewriting on save). A raw-byte hash
|
|
63
|
+
* of a CRLF file never matches the LF manifest hash, so the hash-gated prune
|
|
64
|
+
* would silently never fire on Windows — defeating the whole #948/#932 cleanup
|
|
65
|
+
* for the platform where it's needed most. Normalizing CRLF (and lone CR) to LF
|
|
66
|
+
* before hashing recovers those files. This is a Rule #1 (cross-platform)
|
|
67
|
+
* requirement, not an optimization.
|
|
68
|
+
*
|
|
69
|
+
* latin1 round-trips bytes 1:1 (no UTF-8 multibyte corruption) so the digest is
|
|
70
|
+
* byte-identical to hashing a genuinely-LF file.
|
|
71
|
+
*
|
|
72
|
+
* @param {string} absPath
|
|
73
|
+
* @returns {string|null} `sha256:<hex>` of the LF-normalized content, or null
|
|
74
|
+
*/
|
|
75
|
+
export function fileSha256NormalizedEol(absPath) {
|
|
76
|
+
try {
|
|
77
|
+
const buf = readFileSync(absPath);
|
|
78
|
+
const normalized = buf.toString('latin1').replace(/\r\n?/g, '\n');
|
|
79
|
+
return 'sha256:' + createHash('sha256').update(normalized, 'latin1').digest('hex');
|
|
80
|
+
} catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
57
85
|
/**
|
|
58
86
|
* Load + validate the retired-files manifest. Returns `{ entries: [] }` for
|
|
59
87
|
* any failure mode (missing file, invalid JSON, wrong shape) — the launcher
|
|
@@ -108,6 +136,15 @@ export function classifyRetiredFile(projectRoot, entry) {
|
|
|
108
136
|
if (entry.knownContentHashes.includes(actualHash)) {
|
|
109
137
|
return { action: 'prune', actualHash };
|
|
110
138
|
}
|
|
139
|
+
// Raw bytes didn't match. Retry with LF-normalized content: a Windows
|
|
140
|
+
// consumer's CRLF copy of a known-shipped (LF) file must still be recognized
|
|
141
|
+
// as un-customized and pruned. Without this the prune never fires on Windows
|
|
142
|
+
// (Rule #1 cross-platform). `actualHash` stays the raw on-disk hash so the
|
|
143
|
+
// report reflects what's actually on disk.
|
|
144
|
+
const normalizedHash = fileSha256NormalizedEol(abs);
|
|
145
|
+
if (normalizedHash && entry.knownContentHashes.includes(normalizedHash)) {
|
|
146
|
+
return { action: 'prune', actualHash };
|
|
147
|
+
}
|
|
111
148
|
return { action: 'preserve', actualHash };
|
|
112
149
|
}
|
|
113
150
|
|
package/dist/src/cli/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "moflo",
|
|
3
|
-
"version": "4.10.
|
|
3
|
+
"version": "4.10.22",
|
|
4
4
|
"description": "MoFlo — AI agent orchestration for Claude Code. A standalone, opinionated toolkit with semantic memory, learned routing, gates, spells, and the /flo issue-execution skill.",
|
|
5
5
|
"main": "dist/src/cli/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
96
96
|
"@typescript-eslint/parser": "^7.18.0",
|
|
97
97
|
"eslint": "^8.0.0",
|
|
98
|
-
"moflo": "^4.10.21
|
|
98
|
+
"moflo": "^4.10.21",
|
|
99
99
|
"tsx": "^4.21.0",
|
|
100
100
|
"typescript": "^5.9.3",
|
|
101
101
|
"vitest": "^4.0.0"
|