moflo 4.9.20 → 4.9.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.
- package/.claude/agents/analysis/analyze-code-quality.md +0 -121
- package/.claude/agents/analysis/code-analyzer.md +5 -26
- package/.claude/agents/architecture/system-design/arch-system-design.md +0 -119
- package/.claude/agents/base-template-generator.md +0 -1
- package/.claude/agents/core/coder.md +0 -22
- package/.claude/agents/core/planner.md +0 -16
- package/.claude/agents/core/researcher.md +0 -16
- package/.claude/agents/core/reviewer.md +0 -17
- package/.claude/agents/core/tester.md +0 -19
- package/.claude/agents/custom/test-long-runner.md +0 -2
- package/.claude/agents/development/dev-backend-api.md +0 -167
- package/.claude/agents/development/dev-database.md +43 -0
- package/.claude/agents/development/dev-frontend.md +42 -0
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +0 -112
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +0 -111
- package/.claude/agents/security/security-auditor.md +45 -0
- package/.claude/guidance/shipped/moflo-agent-rules.md +172 -0
- package/.claude/guidance/shipped/moflo-claude-swarm-cohesion.md +73 -265
- package/.claude/guidance/shipped/moflo-cli-reference.md +6 -6
- package/.claude/guidance/shipped/moflo-core-guidance.md +66 -184
- package/.claude/guidance/shipped/moflo-cross-platform.md +1 -1
- package/.claude/guidance/shipped/moflo-error-handling.md +3 -3
- package/.claude/guidance/shipped/moflo-guidance-rules.md +17 -7
- package/.claude/guidance/shipped/moflo-memory-strategy.md +76 -182
- package/.claude/guidance/shipped/moflo-memorydb-maintenance.md +6 -8
- package/.claude/guidance/shipped/moflo-settings-injection.md +7 -9
- package/.claude/guidance/shipped/moflo-source-hygiene.md +5 -5
- package/.claude/guidance/shipped/moflo-spell-connectors.md +3 -4
- package/.claude/guidance/shipped/moflo-spell-custom-steps.md +3 -4
- package/.claude/guidance/shipped/moflo-spell-engine.md +40 -162
- package/.claude/guidance/shipped/moflo-spell-runner.md +134 -0
- package/.claude/guidance/shipped/moflo-spell-sandboxing.md +10 -57
- package/.claude/guidance/shipped/moflo-spell-troubleshooting.md +149 -0
- package/.claude/guidance/shipped/moflo-subagents.md +43 -114
- package/.claude/guidance/shipped/moflo-task-icons.md +4 -4
- package/.claude/guidance/shipped/moflo-user-facing-language.md +3 -3
- package/.claude/guidance/shipped/moflo-verbose-command-filtering.md +3 -3
- package/.claude/guidance/shipped/moflo-yaml-reference.md +4 -5
- package/.claude/helpers/gate.cjs +192 -15
- package/.claude/helpers/prompt-hook.mjs +4 -38
- package/.claude/helpers/simplify-classify.cjs +32 -11
- package/.claude/helpers/subagent-bootstrap.json +1 -1
- package/.claude/helpers/subagent-start.cjs +1 -1
- package/.claude/skills/connector-builder/SKILL.md +42 -429
- package/.claude/skills/connector-builder/templates/connector.md +189 -0
- package/.claude/skills/connector-builder/templates/step-command.md +176 -0
- package/.claude/skills/eldar/SKILL.md +7 -7
- package/.claude/skills/fl/SKILL.md +3 -3
- package/.claude/skills/fl/execution-modes.md +39 -16
- package/.claude/skills/fl/phases.md +3 -3
- package/.claude/skills/{simplify → flo-simplify}/SKILL.md +11 -11
- package/.claude/skills/guidance/SKILL.md +17 -9
- package/.claude/skills/memory-patterns/SKILL.md +1 -1
- package/.claude/skills/publish/SKILL.md +121 -36
- package/.claude/skills/reset-epic/SKILL.md +2 -2
- package/.claude/skills/spell-builder/SKILL.md +39 -226
- package/.claude/skills/spell-builder/architecture.md +1 -1
- package/.claude/skills/spell-builder/permissions.md +107 -0
- package/.claude/skills/spell-builder/preflight.md +101 -0
- package/.claude/skills/spell-schedule/SKILL.md +2 -3
- package/bin/gate.cjs +192 -15
- package/bin/lib/retired-files.mjs +146 -0
- package/bin/prompt-hook.mjs +4 -38
- package/bin/session-start-launcher.mjs +120 -1
- package/bin/setup-project.mjs +63 -69
- package/bin/simplify-classify.cjs +32 -11
- package/dist/src/cli/appliance/rvfa-builder.js +1 -1
- package/dist/src/cli/commands/agent.js +3 -9
- package/dist/src/cli/commands/doctor-checks-deep.js +4 -0
- package/dist/src/cli/commands/hooks.js +1 -3
- package/dist/src/cli/commands/index.js +2 -0
- package/dist/src/cli/commands/retire.js +111 -0
- package/dist/src/cli/hooks/reasoningbank/index.js +7 -7
- package/dist/src/cli/init/claudemd-generator.js +30 -33
- package/dist/src/cli/init/executor.js +53 -69
- package/dist/src/cli/init/helpers-generator.js +165 -52
- package/dist/src/cli/init/moflo-init.js +41 -114
- package/dist/src/cli/init/settings-generator.js +44 -14
- package/dist/src/cli/mcp-tools/agent-tools.js +9 -27
- package/dist/src/cli/mcp-tools/hooks-tools.js +23 -21
- package/dist/src/cli/memory/controllers/semantic-router.js +18 -12
- package/dist/src/cli/memory/sona-optimizer.js +6 -6
- package/dist/src/cli/neural/domain/services/learning-service.js +3 -3
- package/dist/src/cli/services/agent-router.js +2 -5
- package/dist/src/cli/services/hook-block-hash.js +11 -2
- package/dist/src/cli/services/hook-wiring.js +86 -3
- package/dist/src/cli/services/subagent-bootstrap.js +1 -1
- package/dist/src/cli/shared/events/example-usage.js +6 -6
- package/dist/src/cli/shared/hooks/task-hooks.js +8 -8
- package/dist/src/cli/version.js +1 -1
- package/package.json +3 -2
- package/retired-files.json +1989 -0
- package/scripts/post-install-bootstrap.mjs +19 -0
- package/src/cli/data/model-registry.json +2 -2
- package/.claude/agents/consensus/byzantine-coordinator.md +0 -63
- package/.claude/agents/consensus/crdt-synchronizer.md +0 -997
- package/.claude/agents/consensus/gossip-coordinator.md +0 -63
- package/.claude/agents/consensus/performance-benchmarker.md +0 -851
- package/.claude/agents/consensus/quorum-manager.md +0 -823
- package/.claude/agents/consensus/raft-manager.md +0 -63
- package/.claude/agents/consensus/security-manager.md +0 -622
- package/.claude/agents/data/ml/data-ml-model.md +0 -193
- package/.claude/agents/github/code-review-swarm.md +0 -538
- package/.claude/agents/github/github-modes.md +0 -172
- package/.claude/agents/github/issue-tracker.md +0 -311
- package/.claude/agents/github/multi-repo-swarm.md +0 -551
- package/.claude/agents/github/pr-manager.md +0 -183
- package/.claude/agents/github/project-board-sync.md +0 -508
- package/.claude/agents/github/release-manager.md +0 -360
- package/.claude/agents/github/release-swarm.md +0 -580
- package/.claude/agents/github/repo-architect.md +0 -391
- package/.claude/agents/github/swarm-issue.md +0 -566
- package/.claude/agents/github/swarm-pr.md +0 -414
- package/.claude/agents/github/sync-coordinator.md +0 -426
- package/.claude/agents/github/workflow-automation.md +0 -606
- package/.claude/agents/goal/code-goal-planner.md +0 -440
- package/.claude/agents/goal/goal-planner.md +0 -168
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +0 -127
- package/.claude/agents/hive-mind/queen-coordinator.md +0 -198
- package/.claude/agents/hive-mind/scout-explorer.md +0 -233
- package/.claude/agents/hive-mind/swarm-memory-manager.md +0 -184
- package/.claude/agents/hive-mind/worker-specialist.md +0 -208
- package/.claude/agents/neural/safla-neural.md +0 -73
- package/.claude/agents/optimization/benchmark-suite.md +0 -665
- package/.claude/agents/optimization/load-balancer.md +0 -431
- package/.claude/agents/optimization/performance-monitor.md +0 -672
- package/.claude/agents/optimization/resource-allocator.md +0 -674
- package/.claude/agents/optimization/topology-optimizer.md +0 -808
- package/.claude/agents/reasoning/goal-planner.md +0 -67
- package/.claude/agents/sona/sona-learning-optimizer.md +0 -74
- package/.claude/agents/sparc/architecture.md +0 -472
- package/.claude/agents/sparc/pseudocode.md +0 -318
- package/.claude/agents/sparc/refinement.md +0 -525
- package/.claude/agents/sparc/specification.md +0 -276
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +0 -225
- package/.claude/agents/swarm/adaptive-coordinator.md +0 -391
- package/.claude/agents/swarm/hierarchical-coordinator.md +0 -321
- package/.claude/agents/swarm/mesh-coordinator.md +0 -383
- package/.claude/agents/testing/production-validator.md +0 -395
- package/.claude/agents/testing/tdd-london-swarm.md +0 -244
- package/.claude/agents/v3/adr-architect.md +0 -184
- package/.claude/agents/v3/aidefence-guardian.md +0 -277
- package/.claude/agents/v3/claims-authorizer.md +0 -208
- package/.claude/agents/v3/collective-intelligence-coordinator.md +0 -988
- package/.claude/agents/v3/ddd-domain-expert.md +0 -220
- package/.claude/agents/v3/injection-analyst.md +0 -232
- package/.claude/agents/v3/memory-specialist.md +0 -987
- package/.claude/agents/v3/performance-engineer.md +0 -1225
- package/.claude/agents/v3/pii-detector.md +0 -146
- package/.claude/agents/v3/reasoningbank-learner.md +0 -213
- package/.claude/agents/v3/security-architect-aidefence.md +0 -405
- package/.claude/agents/v3/security-architect.md +0 -865
- package/.claude/agents/v3/security-auditor.md +0 -771
- package/.claude/agents/v3/sparc-orchestrator.md +0 -182
- package/.claude/agents/v3/swarm-memory-manager.md +0 -142
- package/.claude/agents/v3/v3-integration-architect.md +0 -205
- package/.claude/commands/claude-flow-help.md +0 -103
- package/.claude/commands/claude-flow-memory.md +0 -107
- package/.claude/commands/claude-flow-swarm.md +0 -205
- package/.claude/commands/github/README.md +0 -11
- package/.claude/commands/github/code-review-swarm.md +0 -514
- package/.claude/commands/github/code-review.md +0 -25
- package/.claude/commands/github/github-modes.md +0 -146
- package/.claude/commands/github/github-swarm.md +0 -113
- package/.claude/commands/github/issue-tracker.md +0 -284
- package/.claude/commands/github/issue-triage.md +0 -25
- package/.claude/commands/github/multi-repo-swarm.md +0 -519
- package/.claude/commands/github/pr-enhance.md +0 -26
- package/.claude/commands/github/pr-manager.md +0 -164
- package/.claude/commands/github/project-board-sync.md +0 -471
- package/.claude/commands/github/release-manager.md +0 -332
- package/.claude/commands/github/release-swarm.md +0 -544
- package/.claude/commands/github/repo-analyze.md +0 -25
- package/.claude/commands/github/repo-architect.md +0 -361
- package/.claude/commands/github/swarm-issue.md +0 -482
- package/.claude/commands/github/swarm-pr.md +0 -285
- package/.claude/commands/github/sync-coordinator.md +0 -294
- package/.claude/commands/github/workflow-automation.md +0 -442
- package/.claude/commands/hooks/README.md +0 -11
- package/.claude/commands/hooks/overview.md +0 -58
- package/.claude/commands/hooks/post-edit.md +0 -117
- package/.claude/commands/hooks/post-task.md +0 -112
- package/.claude/commands/hooks/pre-edit.md +0 -113
- package/.claude/commands/hooks/pre-task.md +0 -111
- package/.claude/commands/hooks/session-end.md +0 -118
- package/.claude/commands/hooks/setup.md +0 -103
- package/.claude/commands/simplify.md +0 -101
- package/.claude/commands/sparc/analyzer.md +0 -42
- package/.claude/commands/sparc/architect.md +0 -43
- package/.claude/commands/sparc/ask.md +0 -86
- package/.claude/commands/sparc/batch-executor.md +0 -44
- package/.claude/commands/sparc/code.md +0 -78
- package/.claude/commands/sparc/coder.md +0 -44
- package/.claude/commands/sparc/debug.md +0 -72
- package/.claude/commands/sparc/debugger.md +0 -44
- package/.claude/commands/sparc/designer.md +0 -43
- package/.claude/commands/sparc/devops.md +0 -98
- package/.claude/commands/sparc/docs-writer.md +0 -69
- package/.claude/commands/sparc/documenter.md +0 -44
- package/.claude/commands/sparc/innovator.md +0 -44
- package/.claude/commands/sparc/integration.md +0 -72
- package/.claude/commands/sparc/mcp.md +0 -106
- package/.claude/commands/sparc/memory-manager.md +0 -44
- package/.claude/commands/sparc/optimizer.md +0 -44
- package/.claude/commands/sparc/orchestrator.md +0 -116
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +0 -72
- package/.claude/commands/sparc/refinement-optimization-mode.md +0 -72
- package/.claude/commands/sparc/researcher.md +0 -44
- package/.claude/commands/sparc/reviewer.md +0 -44
- package/.claude/commands/sparc/security-review.md +0 -69
- package/.claude/commands/sparc/sparc-modes.md +0 -139
- package/.claude/commands/sparc/sparc.md +0 -99
- package/.claude/commands/sparc/spec-pseudocode.md +0 -69
- package/.claude/commands/sparc/spell-manager.md +0 -44
- package/.claude/commands/sparc/supabase-admin.md +0 -337
- package/.claude/commands/sparc/swarm-coordinator.md +0 -44
- package/.claude/commands/sparc/tdd.md +0 -44
- package/.claude/commands/sparc/tester.md +0 -44
- package/.claude/commands/sparc/tutorial.md +0 -68
- package/.claude/commands/sparc.md +0 -151
- package/.claude/guidance/shipped/moflo-session-start.md +0 -154
- package/.claude/guidance/shipped/moflo-spell-engine-architecture.md +0 -145
- package/.claude/skills/browser/SKILL.md +0 -204
- package/.claude/skills/github-code-review/SKILL.md +0 -1140
- package/.claude/skills/github-multi-repo/SKILL.md +0 -866
- package/.claude/skills/github-project-management/SKILL.md +0 -1272
- package/.claude/skills/github-release-management/SKILL.md +0 -1074
- package/.claude/skills/github-workflow-automation/SKILL.md +0 -1060
- package/.claude/skills/hive-mind-advanced/SKILL.md +0 -712
- package/.claude/skills/hooks-automation/SKILL.md +0 -1193
- package/.claude/skills/pair-programming/SKILL.md +0 -1202
- package/.claude/skills/performance-analysis/SKILL.md +0 -563
- package/.claude/skills/skill-builder/SKILL.md +0 -910
- package/.claude/skills/sparc-methodology/SKILL.md +0 -904
- package/.claude/skills/stream-chain/SKILL.md +0 -563
- package/.claude/skills/swarm-advanced/SKILL.md +0 -811
- package/.claude/skills/swarm-orchestration/SKILL.md +0 -179
- package/.claude/skills/verification-quality/SKILL.md +0 -649
- package/.claude/skills/worker-benchmarks/skill.md +0 -135
- package/.claude/skills/worker-integration/skill.md +0 -154
|
@@ -59,6 +59,10 @@ export function getReferenceHookBlock() {
|
|
|
59
59
|
matcher: '^Bash$',
|
|
60
60
|
hooks: [gateHook('check-dangerous-command', 2000), gateHook('check-before-pr', 2000)],
|
|
61
61
|
},
|
|
62
|
+
// #931 — TaskCreate REMINDER + namespace hint advisory at Agent-spawn time.
|
|
63
|
+
// Routed via gate-hook.mjs so HOOK_SESSION_ID is forwarded for per-actor
|
|
64
|
+
// single-shot emission of the namespace hint.
|
|
65
|
+
{ matcher: '^Agent$', hooks: [gateHook('check-before-agent', 2000)] },
|
|
62
66
|
],
|
|
63
67
|
PostToolUse: [
|
|
64
68
|
{
|
|
@@ -72,13 +76,18 @@ export function getReferenceHookBlock() {
|
|
|
72
76
|
hooks: [gateHook('check-bash-memory', 2000), gateHook('record-test-run', 2000)],
|
|
73
77
|
},
|
|
74
78
|
{ matcher: '^Skill$', hooks: [gateHook('record-skill-run', 2000)] },
|
|
75
|
-
{ matcher: 'mcp__moflo__memory_', hooks: [gateHook('record-memory-searched', 3000)] },
|
|
79
|
+
{ matcher: '^mcp__moflo__memory_(search|retrieve|list|stats|store)$', hooks: [gateHook('record-memory-searched', 3000)] },
|
|
76
80
|
{ matcher: '^TaskUpdate$', hooks: [gateCjs('check-task-transition', 2000)] },
|
|
77
81
|
{ matcher: '^mcp__moflo__memory_store$', hooks: [gateCjs('record-learnings-stored', 2000)] },
|
|
82
|
+
// #952 — wired so /fl -s/--swarm and /fl -h/--hive runs satisfy the
|
|
83
|
+
// check-before-agent gate after the protected MCP init has been called.
|
|
84
|
+
{ matcher: '^mcp__moflo__swarm_init$', hooks: [gateCjs('record-swarm-init', 2000)] },
|
|
85
|
+
{ matcher: '^mcp__moflo__hive-mind_init$', hooks: [gateCjs('record-hive-init', 2000)] },
|
|
78
86
|
],
|
|
79
87
|
UserPromptSubmit: [
|
|
80
88
|
{ hooks: [helperHook('prompt-hook.mjs', '', 3000)] },
|
|
81
|
-
|
|
89
|
+
// #931 — Defensive safety-net hook. State reset only, no emission.
|
|
90
|
+
{ hooks: [gateHook('prompt-state-reset', 3000)] },
|
|
82
91
|
],
|
|
83
92
|
SubagentStart: [
|
|
84
93
|
{ hooks: [helperHook('subagent-start.cjs', '', 2000)] },
|
|
@@ -18,6 +18,9 @@ export const REQUIRED_HOOK_WIRING = [
|
|
|
18
18
|
{ event: 'PreToolUse', pattern: 'check-before-read' },
|
|
19
19
|
{ event: 'PreToolUse', pattern: 'check-dangerous-command' },
|
|
20
20
|
{ event: 'PreToolUse', pattern: 'check-before-pr' },
|
|
21
|
+
// #931 — TaskCreate REMINDER + namespace hint emit only at Agent spawn now,
|
|
22
|
+
// not on every prompt. Saves ~90 tokens × every prompt × every consumer.
|
|
23
|
+
{ event: 'PreToolUse', pattern: 'check-before-agent' },
|
|
21
24
|
{ event: 'PostToolUse', pattern: 'record-task-created' },
|
|
22
25
|
{ event: 'PostToolUse', pattern: 'record-memory-searched' },
|
|
23
26
|
{ event: 'PostToolUse', pattern: 'check-task-transition' },
|
|
@@ -26,7 +29,14 @@ export const REQUIRED_HOOK_WIRING = [
|
|
|
26
29
|
{ event: 'PostToolUse', pattern: 'record-test-run' },
|
|
27
30
|
{ event: 'PostToolUse', pattern: 'record-skill-run' },
|
|
28
31
|
{ event: 'PostToolUse', pattern: 'reset-edit-gates' },
|
|
29
|
-
|
|
32
|
+
// First UserPromptSubmit hook (prompt-hook.mjs internally calls
|
|
33
|
+
// `gate.cjs prompt-reminder`). Substring check tolerates either the
|
|
34
|
+
// shipped helper-script command or an inlined gate call.
|
|
35
|
+
{ event: 'UserPromptSubmit', pattern: 'prompt-hook.mjs' },
|
|
36
|
+
// Second (defensive) UserPromptSubmit hook — state reset only. Replaced
|
|
37
|
+
// the duplicate `prompt-reminder` wiring that was emitting the TaskCreate
|
|
38
|
+
// REMINDER twice per prompt (#931).
|
|
39
|
+
{ event: 'UserPromptSubmit', pattern: 'prompt-state-reset' },
|
|
30
40
|
];
|
|
31
41
|
/**
|
|
32
42
|
* Map gate pattern → hook entry to add when missing from settings.json.
|
|
@@ -41,14 +51,29 @@ export const HOOK_ENTRY_MAP = {
|
|
|
41
51
|
// record-memory-searched MUST go through gate-hook.mjs (not gate.cjs directly)
|
|
42
52
|
// — the wrapper forwards Claude Code's session_id as HOOK_SESSION_ID, which
|
|
43
53
|
// markMemorySearched needs to stamp the per-actor map (#879).
|
|
44
|
-
|
|
54
|
+
// Matcher MUST be a fully-anchored regex: Claude Code anchors hook matchers
|
|
55
|
+
// (`^...$` semantics), so a bare `mcp__moflo__memory_` never fires for any
|
|
56
|
+
// tool name (#929 regression — the hook silently no-ops, leaving every
|
|
57
|
+
// memory_search uncounted by the gate).
|
|
58
|
+
'record-memory-searched': { event: 'PostToolUse', matcher: '^mcp__moflo__memory_(search|retrieve|list|stats|store)$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" record-memory-searched', timeout: 3000 } },
|
|
45
59
|
'check-task-transition': { event: 'PostToolUse', matcher: '^TaskUpdate$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate.cjs" check-task-transition', timeout: 2000 } },
|
|
46
60
|
'record-learnings-stored': { event: 'PostToolUse', matcher: '^mcp__moflo__memory_store$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate.cjs" record-learnings-stored', timeout: 2000 } },
|
|
47
61
|
'check-bash-memory': { event: 'PostToolUse', matcher: '^Bash$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" check-bash-memory', timeout: 2000 } },
|
|
48
62
|
'record-test-run': { event: 'PostToolUse', matcher: '^Bash$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" record-test-run', timeout: 2000 } },
|
|
49
63
|
'record-skill-run': { event: 'PostToolUse', matcher: '^Skill$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" record-skill-run', timeout: 2000 } },
|
|
50
64
|
'reset-edit-gates': { event: 'PostToolUse', matcher: '^(Write|Edit|MultiEdit)$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" reset-edit-gates', timeout: 2000 } },
|
|
51
|
-
|
|
65
|
+
// #931 — Agent-time advisory; never blocks. Pulled the TaskCreate REMINDER
|
|
66
|
+
// and namespace hint out of prompt-reminder so they fire only when Claude is
|
|
67
|
+
// actually about to spawn an Agent. Routed via gate-hook.mjs so Claude Code's
|
|
68
|
+
// session_id is forwarded as HOOK_SESSION_ID — the namespace hint emission
|
|
69
|
+
// is per-actor single-shot (mirror of #879's record-memory-searched fix).
|
|
70
|
+
'check-before-agent': { event: 'PreToolUse', matcher: '^Agent$', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" check-before-agent', timeout: 2000 } },
|
|
71
|
+
// Re-add the prompt-hook.mjs wiring as its own bare UserPromptSubmit block
|
|
72
|
+
// when missing. Empty matcher = bare block, like settings-generator emits.
|
|
73
|
+
'prompt-hook.mjs': { event: 'UserPromptSubmit', matcher: '', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/prompt-hook.mjs"', timeout: 3000 } },
|
|
74
|
+
// Defensive safety-net — runs gate.cjs `prompt-state-reset` if prompt-hook.mjs
|
|
75
|
+
// throws before completing the per-prompt state reset. State-only, no emission.
|
|
76
|
+
'prompt-state-reset': { event: 'UserPromptSubmit', matcher: '', hook: { type: 'command', command: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" prompt-state-reset', timeout: 3000 } },
|
|
52
77
|
};
|
|
53
78
|
/**
|
|
54
79
|
* Inspect a parsed settings.json object for missing required hook wirings
|
|
@@ -104,6 +129,42 @@ export const HOOK_REWRITE_RULES = [
|
|
|
104
129
|
from: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate.cjs" check-bash-memory',
|
|
105
130
|
to: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" check-bash-memory',
|
|
106
131
|
},
|
|
132
|
+
// Issue #931 — the second UserPromptSubmit hook used to invoke
|
|
133
|
+
// gate-hook.mjs `prompt-reminder`, which (a) duplicated the first hook's
|
|
134
|
+
// emission of `REMINDER: Use TaskCreate...` per prompt and (b) double-
|
|
135
|
+
// incremented `interactionCount`. The first hook (prompt-hook.mjs) still
|
|
136
|
+
// calls gate.cjs `prompt-reminder` internally for the full reset + Context
|
|
137
|
+
// warnings; the safety-net hook now runs `prompt-state-reset` instead —
|
|
138
|
+
// idempotent state reset, no emission, no increment.
|
|
139
|
+
{
|
|
140
|
+
name: '#931: dedupe UserPromptSubmit prompt-reminder → prompt-state-reset',
|
|
141
|
+
from: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" prompt-reminder',
|
|
142
|
+
to: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" prompt-state-reset',
|
|
143
|
+
},
|
|
144
|
+
// Issue #931 — `check-before-agent` was first wired through gate.cjs
|
|
145
|
+
// directly (no stdin parsing). Without HOOK_SESSION_ID the namespace hint's
|
|
146
|
+
// per-actor tracking falls back to a single `_legacy_` bucket, so a
|
|
147
|
+
// subagent spawning its own agent would silently miss the hint after the
|
|
148
|
+
// parent already consumed it. Route through gate-hook.mjs (the same wrapper
|
|
149
|
+
// that fixed #879) so each session_id gets its own single-shot.
|
|
150
|
+
{
|
|
151
|
+
name: '#931: route check-before-agent → gate-hook.mjs (forwards HOOK_SESSION_ID)',
|
|
152
|
+
from: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate.cjs" check-before-agent',
|
|
153
|
+
to: 'node "$CLAUDE_PROJECT_DIR/.claude/helpers/gate-hook.mjs" check-before-agent',
|
|
154
|
+
},
|
|
155
|
+
];
|
|
156
|
+
export const MATCHER_REWRITE_RULES = [
|
|
157
|
+
// Issue #929 — Claude Code anchors hook matchers (`^…$` semantics), so a
|
|
158
|
+
// bare `mcp__moflo__memory_` never matches any real MCP tool name and the
|
|
159
|
+
// record-memory-searched stamp silently no-ops on every memory_search.
|
|
160
|
+
// The fix is anchored alternation. Existing consumers that upgrade through
|
|
161
|
+
// this version self-heal here without needing `flo doctor --fix`.
|
|
162
|
+
{
|
|
163
|
+
name: '#929: anchor record-memory-searched matcher',
|
|
164
|
+
from: 'mcp__moflo__memory_',
|
|
165
|
+
to: '^mcp__moflo__memory_(search|retrieve|list|stats|store)$',
|
|
166
|
+
cmdContains: 'record-memory-searched',
|
|
167
|
+
},
|
|
107
168
|
];
|
|
108
169
|
/**
|
|
109
170
|
* Apply HOOK_REWRITE_RULES to every hook command in `settings.hooks.*`.
|
|
@@ -135,6 +196,28 @@ export function rewriteIncorrectHookWiring(settings) {
|
|
|
135
196
|
if (count > 0)
|
|
136
197
|
rewrites.push({ name: rule.name, count });
|
|
137
198
|
}
|
|
199
|
+
for (const rule of MATCHER_REWRITE_RULES) {
|
|
200
|
+
let count = 0;
|
|
201
|
+
for (const eventName of Object.keys(hooks)) {
|
|
202
|
+
const eventArray = hooks[eventName];
|
|
203
|
+
if (!Array.isArray(eventArray))
|
|
204
|
+
continue;
|
|
205
|
+
for (const block of eventArray) {
|
|
206
|
+
if (block.matcher !== rule.from)
|
|
207
|
+
continue;
|
|
208
|
+
const blockHooks = block.hooks;
|
|
209
|
+
if (!Array.isArray(blockHooks))
|
|
210
|
+
continue;
|
|
211
|
+
const hasMatchingCmd = blockHooks.some((h) => typeof h.command === 'string' && h.command.includes(rule.cmdContains));
|
|
212
|
+
if (!hasMatchingCmd)
|
|
213
|
+
continue;
|
|
214
|
+
block.matcher = rule.to;
|
|
215
|
+
count++;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (count > 0)
|
|
219
|
+
rewrites.push({ name: rule.name, count });
|
|
220
|
+
}
|
|
138
221
|
return { settings, rewrites };
|
|
139
222
|
}
|
|
140
223
|
//# sourceMappingURL=hook-wiring.js.map
|
|
@@ -21,7 +21,7 @@ const BOOTSTRAP_JSON_REL = '.claude/helpers/subagent-bootstrap.json';
|
|
|
21
21
|
// Defense-in-depth copy of the canonical directive in subagent-bootstrap.json.
|
|
22
22
|
// Kept as a single-line literal so the parity test can verify it matches the
|
|
23
23
|
// JSON via plain substring containment.
|
|
24
|
-
const FALLBACK_DIRECTIVE = 'MANDATORY FIRST ACTION: Your very first tool call MUST be mcp__moflo__memory_search (any query, any namespace). The memory-first gate WILL BLOCK all Glob, Grep, and Read calls until you do this. After memory search, follow `.claude/guidance/
|
|
24
|
+
const FALLBACK_DIRECTIVE = 'MANDATORY FIRST ACTION: Your very first tool call MUST be mcp__moflo__memory_search (any query, any namespace). The memory-first gate WILL BLOCK all Glob, Grep, and Read calls until you do this. After memory search, follow `.claude/guidance/moflo-subagents.md` protocol.';
|
|
25
25
|
function loadDirective() {
|
|
26
26
|
const jsonPath = locateMofloRootPath(BOOTSTRAP_JSON_REL);
|
|
27
27
|
if (!jsonPath) {
|
|
@@ -36,20 +36,20 @@ async function main() {
|
|
|
36
36
|
// 3. Record Agent Lifecycle Events
|
|
37
37
|
// =========================================================================
|
|
38
38
|
console.log('3. Recording Agent Lifecycle Events...');
|
|
39
|
-
// Agent 1:
|
|
40
|
-
await eventStore.append(createAgentSpawnedEvent('agent-1', '
|
|
39
|
+
// Agent 1: Coordinator
|
|
40
|
+
await eventStore.append(createAgentSpawnedEvent('agent-1', 'coordinator', 'coordination', [
|
|
41
41
|
'orchestration',
|
|
42
42
|
'task-assignment',
|
|
43
43
|
]));
|
|
44
44
|
await eventStore.append(createAgentStartedEvent('agent-1'));
|
|
45
|
-
// Agent 2: Security
|
|
46
|
-
await eventStore.append(createAgentSpawnedEvent('agent-2', 'security-
|
|
45
|
+
// Agent 2: Security Auditor
|
|
46
|
+
await eventStore.append(createAgentSpawnedEvent('agent-2', 'security-auditor', 'security', [
|
|
47
47
|
'threat-modeling',
|
|
48
48
|
'security-design',
|
|
49
49
|
]));
|
|
50
50
|
await eventStore.append(createAgentStartedEvent('agent-2'));
|
|
51
|
-
// Agent 3:
|
|
52
|
-
await eventStore.append(createAgentSpawnedEvent('agent-3', '
|
|
51
|
+
// Agent 3: Architect
|
|
52
|
+
await eventStore.append(createAgentSpawnedEvent('agent-3', 'architect', 'core', ['ddd-design', 'architecture']));
|
|
53
53
|
await eventStore.append(createAgentStartedEvent('agent-3'));
|
|
54
54
|
console.log(' Agent events recorded\n');
|
|
55
55
|
// =========================================================================
|
|
@@ -144,27 +144,27 @@ export class TaskHooksManager {
|
|
|
144
144
|
},
|
|
145
145
|
{
|
|
146
146
|
keywords: ['security', 'vulnerability', 'cve', 'threat'],
|
|
147
|
-
agent: 'security-
|
|
147
|
+
agent: 'security-auditor',
|
|
148
148
|
capabilities: ['security-analysis', 'vulnerability-detection', 'threat-modeling'],
|
|
149
149
|
},
|
|
150
150
|
{
|
|
151
|
-
keywords: ['performance', 'optimize', 'speed', 'memory'],
|
|
152
|
-
agent: '
|
|
151
|
+
keywords: ['performance', 'optimize', 'speed', 'memory', 'profile', 'benchmark'],
|
|
152
|
+
agent: 'reviewer',
|
|
153
153
|
capabilities: ['performance-optimization', 'profiling', 'benchmarking'],
|
|
154
154
|
},
|
|
155
155
|
{
|
|
156
156
|
keywords: ['architect', 'design', 'structure', 'pattern'],
|
|
157
|
-
agent: '
|
|
157
|
+
agent: 'architect',
|
|
158
158
|
capabilities: ['architecture-design', 'pattern-application', 'system-design'],
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
|
-
keywords: ['
|
|
162
|
-
agent: '
|
|
161
|
+
keywords: ['storage', 'database', 'cache', 'persistence'],
|
|
162
|
+
agent: 'researcher',
|
|
163
163
|
capabilities: ['memory-management', 'data-persistence', 'caching'],
|
|
164
164
|
},
|
|
165
165
|
{
|
|
166
|
-
keywords: ['swarm', 'coordinate', 'orchestrate', 'agent'],
|
|
167
|
-
agent: '
|
|
166
|
+
keywords: ['swarm', 'coordinate', 'orchestrate', 'agent', 'hive'],
|
|
167
|
+
agent: 'coordinator',
|
|
168
168
|
capabilities: ['swarm-coordination', 'agent-orchestration', 'distributed-systems'],
|
|
169
169
|
},
|
|
170
170
|
];
|
package/dist/src/cli/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "moflo",
|
|
3
|
-
"version": "4.9.
|
|
3
|
+
"version": "4.9.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",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"!.claude/**/*.map",
|
|
40
40
|
"README.md",
|
|
41
41
|
"LICENSE",
|
|
42
|
+
"retired-files.json",
|
|
42
43
|
"scripts/prune-native-binaries.mjs",
|
|
43
44
|
"scripts/post-install-notice.mjs",
|
|
44
45
|
"scripts/post-install-bootstrap.mjs"
|
|
@@ -81,7 +82,7 @@
|
|
|
81
82
|
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
82
83
|
"@typescript-eslint/parser": "^7.18.0",
|
|
83
84
|
"eslint": "^8.0.0",
|
|
84
|
-
"moflo": "^4.9.
|
|
85
|
+
"moflo": "^4.9.21",
|
|
85
86
|
"tsx": "^4.21.0",
|
|
86
87
|
"typescript": "^5.9.3",
|
|
87
88
|
"vitest": "^4.0.0"
|