Releases: Rahspide/sffmc
Release list
v0.15.3 — Maintenance: post-audit cleanup (25 fixes)
Install
npm install -g @sffmc/safety @sffmc/memory @sffmc/runtime @sffmc/cognitionWhat changed (EN)
Maintenance release. No breaking changes. No new dependencies.
25+ fixes covering config gaps, security, health checks, docs drift, and stale references. Recommend upgrade for everyone, especially on multi-user systems (mkdir mode fix) and v0.14.5/v0.14.7/v0.14.8 holdouts.
Configuration gaps (v0.14.5 overstated "21 values configurable")
- Sandbox pump cadence now reads
WorkflowExtendedConfig—sandbox.tshad inlineconst SLOW_MS = 50; const FAST_WINDOW = 50shadowinggetSandboxSlowMs()/getSandboxFastWindow(). Now user YAML overrides take effect. FlushManagerdebounce readsgetFlushDebounceMs()— constructor takes optionaldebounceMsparameter.WorkflowPersistencefsync readsgetFsyncCoalesceMs()—scheduleFsync()no longer uses local const.SAFE_REPETITION_LIMITexported from@sffmc/utilities—safety/rules.tsimports it (no more duplicateconst SAFE_REGEX_LIMIT = 25).
Security
- All 5 mkdir calls in
persistence.tsnow usemode: 0o700— runtime data dir no longer readable by other users on multi-user systems. Brings runtime in line with memory/dream/checkpoint which already do since v0.12.1. migrateLegacyDataPaths()removed — exported but never wired. Canonical path stays uppercaseSFFMC/for backward compatibility.- 5 new redaction patterns —
cloud-credentialrule expanded: GitHub fine-grained PAT (github_pat_*), GitHub OAuth/user/scope tokens (gho_*/ghu_*/ghs_*/ghr_*), GitLab PAT (glpat-*), Discord bot tokens (d_*prefix), Stripe live keys (sk_live_*,rk_live_*), and JWTs (three base64url segments). redactSecrets()MAX_CONTENT_BYTES = 1 MiBguard — returns unchanged with{ oversize: true }so callers can chunk-stream.
Health plugin (v0.15.0 stale-string cleanup)
checkCompositeStructureno longer hardcodes "3 composites" — usesexpectedComposites.length.checkExtraOptInrefactored — was looking for deletedpackages/extra/.checkChangelogCurrencynow also verifiesCHANGELOG.ru.md(bilingual).
Audit scripts
audit-load-order.py: error messageexpected 14→expected 5.check-cleanroom.sh: removed dead EXCLUDE_PATTERNS for deletedpackages/compose/,packages/agentic/,shared/(all dissolved in v0.15.0 P-1).
Docs drift (8 fixes)
dynamic-workflow.md: "12 hours wall-clock" → "1 hour" (×3 refs). "Direct MCP bindings planned" → "available since v0.14.0".bin/sffmc(bash) help: "13 packages / 13-check" → "5 / 9-check" (v0.15.1 fixed PowerShell only).CONTRIBUTING.md: v0.15.1 → v0.15.3.docs/install.md:SFFMC_VERSION=v0.15.0→v0.15.3(×2 refs).CHANGELOG.md: stale "v0.14.7" refs → "v0.14.9" (×2; v0.14.7 never released).
Internal hygiene
- Stale references to internal planning files cleaned up across source files and one utility. No behavior change.
Что изменилось (RU)
Maintenance-релиз. Ломающих изменений нет. Новых зависимостей нет.
25+ исправлений: конфигурационные разрывы, безопасность, health-проверки, дрейф документации, устаревшие ссылки. Рекомендуем обновиться всем, особенно на многопользовательских системах (фикс mkdir mode) и пользователям v0.14.5/v0.14.7/v0.14.8.
Конфигурационные разрывы (v0.14.5 завышал «21 значение настраивается»)
- Sandbox pump cadence теперь читает
WorkflowExtendedConfig—sandbox.tsимел inlineconst SLOW_MS = 50; const FAST_WINDOW = 50, затеняющиеgetSandboxSlowMs()/getSandboxFastWindow(). YAML-переопределения пользователя вступают в силу. - Дебаунс
FlushManagerчитаетgetFlushDebounceMs()— конструктор принимает необязательный параметрdebounceMs. - Fsync в
WorkflowPersistenceчитаетgetFsyncCoalesceMs()—scheduleFsync()больше не использует локальную константу. SAFE_REPETITION_LIMITэкспортирован из@sffmc/utilities—safety/rules.tsимпортирует.
Безопасность
- Все 5 вызовов
mkdirвpersistence.tsиспользуютmode: 0o700— runtime data-каталог больше не читаем другими пользователями. Приводит runtime в соответствие с memory/dream/checkpoint с v0.12.1. migrateLegacyDataPaths()удалена — экспортировалась, но никогда не подключалась. Канонический путь остаётся uppercaseSFFMC/для обратной совместимости.- 5 новых паттернов редактирования —
cloud-credentialрасширен: GitHub fine-grained PAT (github_pat_*), GitHub OAuth/user/scope (gho_*/ghu_*/ghs_*/ghr_*), GitLab PAT (glpat-*), Discord bot-токены (префиксd_*), Stripe live (sk_live_*,rk_live_*) и JWT (три base64url-сегмента). - Защита
redactSecrets()поMAX_CONTENT_BYTES = 1 МиБ— возвращает неизменённым с{ oversize: true }, чтобы вызывающий код мог разделить на чанки.
Health-плагин
checkCompositeStructureбольше не хардкодит «3 композита».checkExtraOptInрефакторен — искал удалённыйpackages/extra/.checkChangelogCurrencyтеперь проверяет иCHANGELOG.ru.md(билинг).
Audit-скрипты
audit-load-order.py: сообщениеexpected 14→expected 5.check-cleanroom.sh: удалены мёртвые EXCLUDE_PATTERNS дляpackages/compose/,packages/agentic/,shared/.
Дрейф документации
dynamic-workflow.md: «12 hours wall-clock» → «1 hour» (×3). «Direct MCP bindings planned» → «available since v0.14.0».bin/sffmc(bash) help: «13 packages / 13-check» → «5 / 9-check».CONTRIBUTING.md: v0.15.1 → v0.15.3.docs/install.md:SFFMC_VERSION=v0.15.0→v0.15.3(×2).CHANGELOG.md: устаревшие «v0.14.7» → «v0.14.9» (×2).
Внутренняя гигиена
- Устаревшие ссылки на внутренние плановые файлы зачищены в исходниках и одной утилите. Изменений в поведении нет.
See CHANGELOG.md (English) or CHANGELOG.ru.md (Russian) for full release notes.
v0.15.2 — Maintenance: full npm metadata + Russian CHANGELOG
Install
npm install -g @sffmc/safety @sffmc/memory @sffmc/runtime @sffmc/cognition{
"plugins": {
"@sffmc/safety": "npm:@sffmc/safety@^0.15.2",
"@sffmc/memory": "npm:@sffmc/memory@^0.15.2",
"@sffmc/runtime": "npm:@sffmc/runtime@^0.15.2",
"@sffmc/cognition": "npm:@sffmc/cognition@^0.15.2"
}
}What changed (EN)
Maintenance release. No breaking changes. No functional changes from v0.15.1.
Fixed — empty npm package pages
@sffmc/utilities, @sffmc/cognition, @sffmc/runtime shipped in v0.15.0 and v0.15.1 without description, keywords, bugs, or homepage fields in their package.json. The tarball content was complete (21–35 files per package, all working) but the npm registry page rendered as "no description available" for those three. Users browsing npmjs.com had no way to know what those packages did.
This release mirrors the structure that @sffmc/safety and @sffmc/memory already had:
@sffmc/utilities— "Shared SDK library for SFFMC plugins — loadConfig, mergeHooks, EventBus, FsOps, redactSecrets. Not a plugin entry; consumed viaworkspace:*by the other 4 packages."@sffmc/cognition— "Standalone package: max-mode parallel reasoning with judge selection + 18 markdown compose skills + plugin health diagnostics."@sffmc/runtime— "Standalone package: sandboxed JavaScript workflow orchestrator (quickjs-emscripten). Spawns sub-tasks, fans out work in parallel, pipelines multi-step jobs without losing context."
Each also got keyword arrays (5–7 terms each) and a homepage link to the per-package README on GitHub.
Added — Russian CHANGELOG entries
The bilingual documentation promise (README.md + README.ru.md, CHANGELOG.md + CHANGELOG.ru.md) had a gap: the Russian CHANGELOG was last synced at v0.14.x and didn't include v0.15.0 (consolidation), v0.15.1 (Windows CLI fix), or v0.15.2 (this release). All three now have Russian entries.
Version bump
All 6 package.json (root + 5 packages): 0.15.1 → 0.15.2. bun.lock regenerated with 5 version matches.
Что изменилось (RU)
Maintenance-релиз. Ломающих изменений нет. Функциональных изменений с v0.15.1 нет.
Исправлено — пустые страницы npm-пакетов
@sffmc/utilities, @sffmc/cognition, @sffmc/runtime были опубликованы в v0.15.0 и v0.15.1 без полей description, keywords, bugs, homepage в package.json. Содержимое тарболла было полным (21–35 файлов в каждом пакете, всё работало), но страница на npmjs.com отображалась как «описание отсутствует» для этих трёх. Пользователи, просматривающие npmjs.com, не могли понять, что делают эти пакеты.
Этот релиз зеркалит структуру, которая уже была у @sffmc/safety и @sffmc/memory:
@sffmc/utilities— «Shared SDK library for SFFMC plugins — loadConfig, mergeHooks, EventBus, FsOps, redactSecrets. Not a plugin entry; consumed viaworkspace:*by the other 4 packages».@sffmc/cognition— «Standalone package: max-mode parallel reasoning with judge selection + 18 markdown compose skills + plugin health diagnostics».@sffmc/runtime— «Standalone package: sandboxed JavaScript workflow orchestrator (quickjs-emscripten). Spawns sub-tasks, fans out work in parallel, pipelines multi-step jobs without losing context».
Каждый также получил массив ключевых слов (5–7 терминов в каждом) и ссылку на homepage в README пакета на GitHub.
Добавлено — записи CHANGELOG на русском
Promise билинговой документации (README.md + README.ru.md, CHANGELOG.md + CHANGELOG.ru.md) имел разрыв: русский CHANGELOG последний раз синхронизировался на v0.14.x и не включал v0.15.0 (консолидация), v0.15.1 (фикс Windows CLI) или v0.15.2 (этот релиз). Все три теперь имеют записи на русском.
Версия
Все 6 package.json (root + 5 пакетов): 0.15.1 → 0.15.2. bun.lock регенерирован с 5 совпадениями версий.
Recommendation / Рекомендация
EN: If you're on v0.15.1, you don't strictly need to upgrade to v0.15.2 — there's no functional change. But upgrading makes npmjs.com searchability better. npm install @sffmc/<pkg>@latest picks it up automatically.
RU: Если вы на v0.15.1, обновление до v0.15.2 не обязательно — функциональных изменений нет. Но после обновления страницы пакетов на npmjs.com будут информативнее. npm install @sffmc/<pkg>@latest подтянет автоматически.
See CHANGELOG.md (English) or CHANGELOG.ru.md (Russian) for full release notes.
v0.15.1 — Maintenance release: critical Windows CLI fix + docs polish
Install
npm install -g @sffmc/safety @sffmc/memory @sffmc/runtime @sffmc/cognition{
"plugins": {
"@sffmc/safety": "npm:@sffmc/safety@^0.15.1",
"@sffmc/memory": "npm:@sffmc/memory@^0.15.1",
"@sffmc/runtime": "npm:@sffmc/runtime@^0.15.1",
"@sffmc/cognition": "npm:@sffmc/cognition@^0.15.1"
}
}What changed (EN)
Maintenance release. No breaking changes. Recommend upgrade for users on Windows + for anyone who hit the docs drift catalogued in v0.15.0.
Critical
bin/sffmc.ps1functional regression — PowerShell installer has been shipping brokeninitsince v0.15.0:PLUGIN_DIRSstill listed 13 paths to deleted packages (agentic,watchdog,rules,auto-max,eos-stripper,log-whitelist,extra,max-mode,workflow,compose,health).sffmc initwas silently skipping them withUnknown package: agentic (skipping)warnings instead of adding the 4 valid plugins. Now matches the bash version. Windows users runningirm .../install.ps1 | iexget a complete install.
Fixed
-
Stale refs across all v0.15.0 docs —
docs/install.md,docs/getting-started.md,docs/drone-ci.md,docs/import-from-mimo.md,docs/migration-from-opencode.md,CONTRIBUTING.md,AGENTS.md,install.sh,.github/ISSUE_TEMPLATE/{bug_report,feature_request}.md,packages/{memory,safety}/*updated to reflect the actual 5-package layout (2 composites + 3 standalones,@sffmc/utilitiesas library). The line-7 paragraph ofgetting-started.mdthat read "@sffmc/safety, @sffmc/safety, @sffmc/safety, @sffmc/safety" (literal copy-paste from the EN source pre-bug) has been rewritten cleanly. -
Broken documentation links —
packages/memory/README.mdlinked to the deleted../extra/README.md;packages/safety/README.mdlinked to 5 sibling sub-feature paths that no longer existed as top-level packages. All repointed. -
install.shhelp text —sffmc init --all install all 13 packagesandsffmc doctor run 13-check diagnosticupdated to5 packagesand9-check diagnostic. -
packages/safety/skills/write-rule.md—bun test packages/rules/→bun test packages/safety/src/rules/(rules is now a sub-folder).
Added
- Real README content for
packages/runtime/README.md,packages/cognition/README.md,packages/utilities/README.md. They were 3-line placeholders auto-generated by the v0.15.0 P-1 migration; this release fills them in.
Что изменилось (RU)
Maintenance-релиз. Ломающих изменений нет. Рекомендуем обновиться пользователям Windows + тем, кто столкнулся с расхождениями в документации v0.15.0.
Критично
bin/sffmc.ps1— PowerShell CLI с v0.15.0 был сломан:PLUGIN_DIRSсодержал 13 путей к удалённым пакетам.sffmc init --minimalтихо пропускалagenticwarning'ом и регистрировал только 2 из 4 валидных плагинов. PLUGIN_DIRS сокращён до 4 валидных плагинов, PKG_MAP обновлён, help text исправлен.
Исправлено
-
Stale refs в 8 EN-source файлах —
docs/install.md,docs/getting-started.md,docs/drone-ci.md,docs/import-from-mimo.md,docs/migration-from-opencode.md,CONTRIBUTING.md,AGENTS.md,install.sh,.github/ISSUE_TEMPLATE/*,packages/{memory,safety}/*обновлены под актуальный 5-пакетный лейаут (2 композита + 3 автономных,@sffmc/utilitiesкак библиотека). Параграф 7 вgetting-started.mdкоторый читался как «@sffmc/safety, @sffmc/safety, @sffmc/safety, @sffmc/safety» (баг копипаста в английском source) переписан чисто. -
Сломанные ссылки —
packages/memory/README.mdуказывал на удалённый../extra/README.md;packages/safety/README.mdуказывал на 5 sibling-путей sub-feature, которых больше не существовало. Все перенаправлены. -
Help text в
install.sh—sffmc init --all install all 13 packagesиsffmc doctor run 13-check diagnosticобновлены до5 packagesи9-check diagnostic. -
packages/safety/skills/write-rule.md—bun test packages/rules/→bun test packages/safety/src/rules/(rules теперь под-папка).
Добавлено
- Реальные README для
packages/runtime/README.md,packages/cognition/README.md,packages/utilities/README.md. Они были 3-строчными placeholder'ами, сгенерированными автоматически при миграции v0.15.0 P-1; этот релиз их наполняет.
See CHANGELOG.md (English) or CHANGELOG.ru.md (Russian) for full release notes.
v0.15.0 — First public npm release
Install
npm install -g @sffmc/safety @sffmc/memory @sffmc/runtime @sffmc/cognition{
"plugins": {
"@sffmc/safety": "npm:@sffmc/safety@^0.15.0",
"@sffmc/memory": "npm:@sffmc/memory@^0.15.0",
"@sffmc/runtime": "npm:@sffmc/runtime@^0.15.0",
"@sffmc/cognition": "npm:@sffmc/cognition@^0.15.0"
}
}What changed (EN)
First public npm release. No breaking changes for users of the legacy monorepo (the consolidation is internal — every plugin name and API surface was preserved).
Changed (consolidated 13 → 5 packages)
- Package consolidation — 14 workspace members (13 packages +
shared/) consolidated into 5 packages:@sffmc/runtime(was@sffmc/workflow)@sffmc/cognition(was@sffmc/max-mode+@sffmc/compose+@sffmc/health; replaces dissolved@sffmc/agentic)@sffmc/utilities(wasshared/) — shipped as a library, not a plugin entry point@sffmc/safetyand@sffmc/memoryretained as composites; theircomposes[]is now empty
@sffmc/agenticcomposite dissolved — users must register@sffmc/runtimeand@sffmc/cognitionexplicitly inopencode.jsonplugins[]- Imports updated across all source code —
@sffmc/{workflow,max-mode,compose,health,rules,watchdog,auto-max,eos-stripper,log-whitelist,extra,agentic,shared}→@sffmc/{runtime,cognition,safety,memory,utilities}respectively
Added
- First public release to npm — all 4 installable packages (safety, memory, runtime, cognition) are now publicly available on the registry.
@sffmc/utilitiesis published as a library.
Migration notes
- Existing users of the legacy monorepo who pulled individual packages need to migrate to the 5-package layout. See
docs/migration-from-opencode.mdfor the step-by-step. @sffmc/utilitiesis consumed viaworkspace:*from the other 4 packages. Do not add it toopencode.jsonplugins[]— it has no plugin entry point and registering it would cause a double-registration crash.
Что изменилось (RU)
Первый публичный релиз на npm. Ломающих изменений для пользователей старого монорепо нет (консолидация внутренняя — имена плагинов и API сохранены).
Изменено (консолидация 13 → 5 пакетов)
- Консолидация пакетов — 14 workspace-членов (13 пакетов +
shared/) сведены в 5 пакетов:@sffmc/runtime(был@sffmc/workflow)@sffmc/cognition(был@sffmc/max-mode+@sffmc/compose+@sffmc/health; заменяет расформированный@sffmc/agentic)@sffmc/utilities(былshared/) — публикуется как библиотека, не как точка входа плагина@sffmc/safetyи@sffmc/memoryостаются композитами; ихcomposes[]теперь пуст
- Композит
@sffmc/agenticрасформирован — пользователи должны явно зарегистрировать@sffmc/runtimeи@sffmc/cognitionв массивеplugins[]файлаopencode.json - Импорты обновлены во всём коде —
@sffmc/{workflow,max-mode,compose,health,rules,watchdog,auto-max,eos-stripper,log-whitelist,extra,agentic,shared}→@sffmc/{runtime,cognition,safety,memory,utilities}соответственно
Добавлено
- Первый публичный релиз на npm — все 4 устанавливаемых пакета (safety, memory, runtime, cognition) теперь публично доступны в реестре.
@sffmc/utilitiesпубликуется как библиотека.
Заметки по миграции
- Существующие пользователи старого монорепо, которые подтягивали пакеты по отдельности, должны мигрировать на 5-пакетный лейаут. Пошаговая инструкция в
docs/migration-from-opencode.md. @sffmc/utilitiesподтягивается черезworkspace:*из остальных 4 пакетов. Не добавляйте его вplugins[]файлаopencode.json— у него нет точки входа плагина, регистрация приведёт к крашу двойной регистрации.
See CHANGELOG.md (English) or CHANGELOG.ru.md (Russian) for full release notes.
v0.14.9
v0.14.9 (2026-06-28)
Changed
- Dropped v1 checkpoint readers —
packages/extra/src/checkpoint.tsno longer exposesmigrateV1ToV2or theCheckpointHeaderV1type. The header parser auto-migrates any v1 file to v2 on read; the migrated file is atomically rewritten as v2 so subsequent reads hit the fast path.
v0.14.9 (2026-06-28)
Изменено
- Удалены reader'ы формата v1 —
packages/extra/src/checkpoint.tsбольше не экспортируетmigrateV1ToV2или типCheckpointHeaderV1. Парсер заголовка автоматически мигрирует любой файл v1 в v2 при чтении; мигрированный файл атомарно перезаписывается как v2, чтобы последующие чтения шли по быстрому пути.
v0.14.8
v0.14.8 (2026-06-28)
Changed
- Documentation split into English + Russian.
README.mdis now English-only with a language picker banner linking toREADME.ru.md.CHANGELOG.mdis now English-only; Russian translations live inCHANGELOG.ru.md. Both new files contain the same content as the original bilingual inline format, just split for cleaner per-language navigation.
v0.14.8 (2026-06-28)
Изменено
- Документация разделена на английский + русский.
README.mdтеперь только на английском; переключатель языка в начале ссылается наREADME.ru.md.CHANGELOG.mdтеперь только на английском; русские переводы находятся вCHANGELOG.ru.md. Оба новых файла содержат то же содержимое, что и оригинал в билингвальном inline-формате, просто разделены для более удобной навигации по языкам.
v0.14.5
What's Changed
Changed
- Checkpoint write batching —
_flushSessionwrites all bufferedToolCalls in a singleappendFileSynccall instead of N separate calls. On-disk file format is byte-identical to prior releases (one JSON-encodedToolCallper line, terminated with\n); existing readers (readToolCalls,readHeader) are unaffected.
Added
packages/extra/bench/checkpoint-flush.bench.ts— synthetic microbenchmark for_flushSessionthroughput. Drives thetool.execute.afterhook for 10/100/1000 calls and reports ops/sec plus file size. Run withbun run packages/extra/bench/checkpoint-flush.bench.ts.
Performance
Benchmarks (bun 1.3.14, default flushThreshold = 50):
| Buffer size | Throughput | File size |
|---|---|---|
| 10 calls | ~10k ops/sec | 1062 B |
| 100 calls | ~130k ops/sec | 9882 B |
| 1000 calls | ~350k ops/sec | 100782 B |
Sub-millisecond measurements are noisy; file sizes are byte-identical across runs, confirming the batched write produces the same content as the prior loop.
Что изменилось
Изменено
- Батчинг записи в checkpoint —
_flushSessionтеперь записывает все буферизованныеToolCallза один вызовappendFileSyncвместо N отдельных вызовов. Формат файла на диске побайтно идентичен предыдущим релизам (по одному JSON-сериализованномуToolCallна строку, оканчивающемуся на\n); существующие reader'ы (readToolCalls,readHeader) не затронуты.
Добавлено
packages/extra/bench/checkpoint-flush.bench.ts— синтетический микробенчмарк для пропускной способности_flushSession. Прогоняетtool.execute.afterhook на 10/100/1000 вызовов и сообщает ops/sec и размер файла. Запуск:bun run packages/extra/bench/checkpoint-flush.bench.ts.
Производительность
Бенчмарки (bun 1.3.14, flushThreshold = 50 по умолчанию):
| Размер буфера | Пропускная способность | Размер файла |
|---|---|---|
| 10 вызовов | ~10k ops/sec | 1062 Б |
| 100 вызовов | ~130k ops/sec | 9882 Б |
| 1000 вызовов | ~350k ops/sec | 100782 Б |
Измерения в субмиллисекундном диапазоне зашумлены; размеры файлов побайтно идентичны между прогонами, что подтверждает: батчированная запись даёт тот же контент, что и старый цикл.
Full Changelog: https://github.com/Rahspide/sffmc/blob/v0.14.5/CHANGELOG.md
SFFMC v0.12.0 — Workflow Resume + hardening + perf
v0.12.0 (2026-06-18)
Workflow Resume Passthrough + 6 P0 coverage tests + journal/checkpoint performance + per-session state isolation.
Added
- Workflow Resume Passthrough — when OpenCode restarts mid-workflow, in-flight runs are now marked "paused" (recoverable from journal) instead of "crashed". Use
runtime.resume({ runID })to continue. - Health check factory — 13 health checks consolidated behind a single factory pattern, removing duplicated boilerplate.
- Journal format v1 — journals now include a version header for forward compatibility. Existing v0 journals still parse correctly.
workflow:resumedevent — emitted when a paused workflow is resumed viaruntime.resume({ runID }).- 6 P0 coverage tests — race conditions in lock acquisition, agent abort at semaphore, depth-limit enforcement, budget-exceeded detection, debounced counter flush, structural error propagation.
Changed
- Performance: journal files now stream-parse on load (was full-read into memory). (workflow package)
- Performance:
readToolCallsreads the checkpoint file once instead of twice. (extra package) - Performance:
appendJournalSynccoalescesfsynccalls in a 50ms window; explicitflushJournalSync()API for durability. (workflow package)
Fixed
- Cross-session state leak in
auto-maxandmax-mode: per-session state previously stashed on the sharedctxobject could leak across sessions in long-running processes. Moved to per-instanceMap<sessionID, …>in plugin state. - Inconsistent logger usage: 10
console.*calls inextra/checkpoint.tsandextra/judge.tsmigrated to the sharedcreateLoggerhelper.
Removed
- 4 dead
MemoryConfigfields (reconBudgets.memory,.checkpoint,.taskTree,.agents) — onlyreconBudgets.tailwas actually read. - Unused
MAX_COMMANDimport and deadtriggeredLogfield inauto-max. - Duplicate
RichPluginContextre-declarations inextra/dream.tsandextra/judge.ts(now imported from@sffmc/shared).
Hygiene
- Pinned
@types/bunandbun-typesfrom"latest"to"1.3.14". Purged orphanednode_modules(stalebetter-sqlite3@11.10.0). - Test count: 570 passing (was 546).
v0.11.1
v0.11.1 (2026-06-17)
Post-v0.11.0 cleanup. No API changes.
Changed
- Path canonicalization:
~/.local/share/SFFMCand~/.config/SFFMCauto-rename to lowercasesffmcon next plugin load (one-shot, idempotent). All 11 packages updated. - Shared logger: 40+
console.warn/console.logcalls replaced with a sharedcreateLogger(prefix)helper across 8 packages (auto-max, eos-stripper, extra, log-whitelist, max-mode, safety, watchdog, workflow). - Composite workspace imports: safety, agentic, and memory composite packages now use
@sffmc/<name>workspace imports instead of relative paths. - Test utilities: 4 test helpers added to
@sffmc/workflow(makeMockCtx,makeSlowMockCtx,makeCountingMockCtx,makeRuntimeWithMockCtx) intests/test-utils.ts.
v0.11.0
v0.11.0 (2026-06-16)
max-mode and workflow onboarded into @sffmc/shared. No API changes for the public @sffmc/workflow surface (v0.10.0 breaking interface preserved).
Added
extractErrorType(output)andisToolError(output)in@sffmc/shared— unified error detection across packages. Replaces auto-max's loose regex with strict pattern matching.MAX_COMMAND,MAX_SUBCOMMANDS,MAX_PATTERN,MaxSubcommandin@sffmc/shared— shared/maxcommand handling across max-mode, auto-max, and watchdog. Fixes a bug where watchdog missed/max resetand/max clear.RichPluginContexttype in@sffmc/shared— extendsPluginContextwith optionalclient.session.message()andusage.totalTokens. Replaces separate interfaces in max-mode and workflow.
Fixed
- auto-max: false positive error detection for strings containing "failsafe" or "errorless"
- watchdog:
/max resetand/max clearcommands were not being recognized
Changed
- 3
require()calls converted to ES moduleimport(memory, workflow runtime, workflow persistence) - Removed redundant
yamldependencies from 4 packages (watchdog, auto-max, eos-stripper, log-whitelist) - Timer hygiene:
.unref()added to 2 timers to avoid blocking event loop shutdown - 5 shared states in
@sffmc/extra(checkpoint buffers, dream lock, timers) converted to on-demand factories — backward-compatible, existing imports preserved - max-mode and workflow now use
@sffmc/sharedfor shared types
Tests
- 21 new unit tests in
@sffmc/shared(13 error detection, 8 max-command parsing) - Total: 510 → 534 tests (+24, includes 3 existing test updates)