mirror of
https://github.com/ruvnet/ruflo.git
synced 2026-09-14 14:01:28 +08:00
docs/chatgpt-plugin-reference
4 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
3b81e1c096 |
fix(parser): subcommand's non-boolean flag overrides global boolean set
The parser's `getBooleanFlags()` walks every registered command + subcommand and adds every boolean-typed option into ONE flat set. That set is then used by `parseFlag()` to decide whether a flag consumes the next argv as its value. Consequence: if ANY command declares a flag as boolean (e.g. `swarm start --parallel`), that name is treated as boolean everywhere — even on a subcommand that declares it as `type: 'number'` (e.g. `hooks route --parallel N`). `--parallel 7` then parses as `parallel:true` and drops the `7`. This bug forced the `--moa-parallel` rename in v3.32.13. Fix: `getScopedBooleanFlags(resolvedCmd)` now REMOVES flags from the boolean set when the resolved subcommand declares them as a non-boolean type. Narrowest-scope wins. Backward compatible for the common case (a flag that's boolean on the resolved subcommand stays boolean; a flag that's boolean-elsewhere-only is only removed here when this subcommand re-declares it as non-boolean). Also restores the canonical `--parallel` flag on `hooks route` (with short `-p`) and keeps `--moa-parallel` as a deprecated compat alias for anyone who upgraded to v3.32.13 in the 15-minute window. Parser regression tests: 55/55 → 56/56 (new test guards that a numeric --parallel on hooks route survives when swarm start declares it as boolean). E2E matrix on `hooks route --mode moa`: --parallel 5 → 5 ✓ --moa-parallel 6 → 6 ✓ (compat alias) -p 4 → 4 ✓ (default) → 3 ✓ both + precedence → canonical --parallel wins ✓ Refs: #2778 (dream-cycle), documented as follow-up in the #2778 commit. Co-Authored-By: RuFlo <ruv@ruv.net> |
||
|
|
810b13dcd6 |
fix: tracker-sweep 2026-07-26 (v3.32.10) — 9 bugs + promo seed + follow-ups (#2788)
* fix: tracker sweep 2026-07-26 — 9 bug fixes + promo seed Closes: #2770 #2774 #2776 #2777 #2781 #2782 #2785 #2786 (Codex follow-up) Refs: #2775 (memory upsert semantics) - Statusline promo row blank on new installs — restored cold-start local seed pool that ADR-311 had emptied. Remote Cognitum-served pool (funnel.ruv.io/v1/messages) remains authoritative via eligibleMessagesFromPools (remote wins by id); seed only fills the ≤ 60s cold-start window before first successful remote fetch. - #2777 — ruflo init no longer imports the entire ruvnet/ruflo repo (97 MB, 384 SKILL.md) into .agents/skills/ruflo/. Materializes single platform SKILL.md; detects "bloated" prior install and re-materializes. - #2781 — ruflo-adr adr-index no longer silently drops ADR data: status regex accepts "- **Status**: proposed"; single-line and wrapped relation lines parse fully; CLI_CORE=1 warns and unifies namespace. - #2770 — Windows: browser-session MCP tools + two init execFileSync npx sites now set shell: process.platform === 'win32' so cmd.exe resolves npx.cmd. POSIX behavior unchanged. - #2782 — WorkerDaemon.saveState + autopilot-state.saveState + appendLog no longer race on shared .tmp filename; all three call writeFileAtomic (pid + timestamp + random-suffixed temp). - #2785 — ruflo hooks post-task accepts --task/-t and --store-results flags matching CLAUDE.md-documented usage; routing outcomes finally persist to the namespace hooks_metrics reads. - #2786 — AgentDB no longer silently fails to initialize under CLAUDE_FLOW_ENCRYPT_AT_REST=1. New getAgentDbPath() returns agentdb-memory.db in the same directory as memory.db, so the ControllerRegistry native better-sqlite3 opens a distinct file from the sql.js CRUD writer's encrypted memory.db. - #2776 — Statusline security STALE/IN_PROGRESS branches reachable via local overlay recomputing freshness on every render from .claude/security-scans/scan-*.json. Env: RUFLO_SCAN_STALE_HOURS (24), RUFLO_SCAN_PENDING_CAP_MIN (30). STALE renders dim gray. - #2774 — Codex MCP generator registers dedicated stdio server binary claude-flow-mcp instead of the management CLI ruflo mcp start that never answers initialize. All 7 wrong-command sites fixed (initializer.ts + 6 template sites in generators/config-toml.ts + 2 in migrations/index.ts + generators.test.ts:653 assertion). - #2775 — Memory store to existing key no longer dead-ends: bridgeStoreEntry uses INSERT ... ON CONFLICT with tombstone auto-resurrect; UNIQUE returns typed error instead of null (no more misleading demotion into #2735 guard); bridgeDeleteEntry runs wal_checkpoint(PASSIVE); CLI memory store --upsert default materialized locally (parser.applyDefaults bug). - Stale ruflo-rebrand assertion in codex/tests/generators.test.ts:192 updated Co-Authored-By: claude-flow → ruflo-bot. - #2786 fix-2/3 (hooks_metrics reads dead .claude-flow/memory/store.json; bridgeRecordFeedback calls non-existent agentdb API) — architectural rewire, needs separate PR. - #2775 defect #3 root cause (parser.ts applyDefaults doesn't apply subcommand-declared defaults) — flagged by agent, other subcommands affected too. - #2775 memory-tools.ts MCP tool schema still defaults upsert:false (parity fix flagged). Co-Authored-By: RuFlo <ruv@ruv.net> * fix(parser): applyDefaults now walks subcommand + command options (#2775 follow-up) Previously only `this.globalOptions` were walked. Any subcommand-declared `default: <value>` silently dropped and the action handler received `undefined`. The immediate victim was `memory store --upsert` (per #2775), but the bug is generic — every subcommand that relies on a per-flag default was affected. Fix: applyDefaults now accepts optional command + subcommand, walks all three layers narrow-to-broad (subcommand > command > global), and the first layer to supply a value wins (because it only writes when the flag is `undefined`, so earlier writers stick). Parser tests: 52/52 pass. Build: tsc exit 0. Refs: #2775 (root cause behind the CLI --upsert workaround already in `commands/memory.ts`; the workaround is now redundant but harmless). Co-Authored-By: RuFlo <ruv@ruv.net> * fix(mcp): memory_store defaults upsert=true for CLI parity (#2775 follow-up) The CLI `memory store` command defaults `--upsert=true` (issue #2594, fix |
||
|
|
01070ede81 |
fix: Tier A blockers #1596, #1567, #1556 (v3.5.80) (#1598)
* fix: resolve Tier A blockers #1596, #1567, #1556 #1596 — CLI lazy-command routing: `ruflo daemon start` was mis-routed to the top-level `start` command because the parser only registered the 10 core sync commands and its greedy Pass 1 walk happily matched `start` as the command with `daemon` left as a positional. Teach the parser about lazy command names via `registerLazyCommandName()`, stop Pass 1 at the first non-flag positional, and recognize lazy names in Pass 2 so commandPath becomes `['daemon', 'start']`. The existing positional-based subcommand fallback in CLI.run() then dispatches correctly. Affects every lazy-loaded command (daemon, doctor, embeddings, neural, config, workflow, hive-mind, ...). #1567 — agent_spawn Zod field mismatch: validate-input.ts was passing `{ agentType, name }` to @claude-flow/security's SpawnAgentSchema, which expects `{ type, id }`, so every MCP agent_spawn call failed with `type: Required`. Align the field names. Also swallow `invalid_enum_value` issues because the schema enumerates only 15 built-in agent types — we support custom types and the inline identifier validator already gated unsafe input. #1556 — AutoMemoryBridge destroys hand-curated MEMORY.md: `curateIndex()` fired on every Stop hook tick and overwrote MEMORY.md with a single-line title stub whenever none of the files in memoryDir matched the 7 hardcoded DEFAULT_TOPIC_MAPPING filenames — which is exactly the situation for any project using Claude Code's native `<type>_<topic>.md` memory convention. Skip the write entirely when there are no sections to curate and emit `index:skipped` instead; `curate` must be non-destructive when there's nothing to curate. Tests: - __tests__/parser.test.ts: 4 new cases cover lazy command routing, bare lazy commands, and global flags before a lazy command. - __tests__/validate-input-agent-spawn.test.ts: built-in type, custom type, bad identifier, and no-domain cases. - src/auto-memory-bridge.test.ts: new #1556 case + updated empty-file case to assert the new non-destructive semantics. All 120 CLI + 74 memory tests pass locally. Co-Authored-By: claude-flow <ruv@ruv.net> * chore: bump to 3.5.80 / memory 3.0.0-alpha.14 for Tier A fixes - @claude-flow/cli 3.5.78 → 3.5.80 - @claude-flow/memory 3.0.0-alpha.13 → 3.0.0-alpha.14 - claude-flow umbrella 3.5.78 → 3.5.80 - ruflo umbrella 3.5.78 → 3.5.80 Also fixes memory package's prebuild script to clean tsconfig.tsbuildinfo so tsc --incremental produces fresh output after rm -rf dist. Matches published npm artifacts for issues #1596, #1567, #1556. Co-Authored-By: claude-flow <ruv@ruv.net> --------- Co-authored-by: Reuven <cohen@ruv-mac-mini.local> |
||
|
|
1e105c799b |
fix: v3.5.8-v3.5.14 ADR-061 security fixes, cross-platform hooks, Windows parity
ADR-061 Deep Audit Fixes (12 P0/P1/D issues): - S-1: Replace execSync with execFileSync to prevent command injection (GCS) - S-2: Add MAX_BUFFER constant (10MB) to prevent unbounded stdout capture - S-3: Add validatePackageName() to sanitize plugin names - S-4: Add IPFS CID format validation before fetch - S-5: Add buffer size limits to execSync calls - D-1: Fix CFP magic-number check (use subarray, not slice) - D-2: Fix unsupported format error (throw instead of silent fallback) - D-3: Fix MCP partial-JSON accumulator (per-session buffering) - D-4: Fix duplicate provider registration guard - D-5: Fix memory namespace parameter passthrough - D-6: Fix process command error handler (use err.message) - D-7: Fix GCS credential loading (resolve path, validate fields) ADR-062 Cross-Platform Hook Commands: - Replace node -e "..." one-liners with node script subcommand invocation - Add cmd /c prefix on Windows to bypass PowerShell stdin issues - Fix stdin reading with 500ms timeout (prevents Windows hanging) - Guarantee process.exitCode = 0 in all hook scripts - StatusLine uses plain node (no cmd /c) for proper stdin forwarding - Fix invalid SubagentEnd → SubagentStop hook event name - Restore valid SubagentStart hook event Tests: 1600 passed, 46 skipped across 23 test files Co-Authored-By: claude-flow <ruv@ruv.net> |