Releases: dqsjqian/soul-archive
Soul Archive v3.1.2 — Windows compatibility hotfix
What changed
Hotfix for two Windows-specific bugs reported by user testing on v3.1.1.
Bug 1 — soul.py subcommands produced empty output on Windows Git Bash
Symptom: Commands like soul status / soul init returned exit code 0 with no visible output. The script ran, but nothing reached the terminal.
Root cause: os.execvp() on Windows (especially under Git Bash / MSYS) does not reliably propagate the child process's stdout back to the parent shell. The current process gets replaced, but the new process's stdout doesn't always re-bind to the parent shell's pipe.
Fix: replace os.execvp() with subprocess.run() + sys.exit(result.returncode). File descriptors stay stable across the call; signal propagation handled correctly. Cross-platform identical behavior.
Bug 2 — soul_paths.py raised UnicodeEncodeError when run directly on Chinese Windows
Symptom:
UnicodeEncodeError: 'gbk' codec can't encode character '\\U0001f9ec'
Root cause: soul_paths.py was the only script not given the UTF-8 stdout/stderr reconfigure guard introduced in v3.1.1, because it was classified as a 'library module' rather than an entrypoint. But its __main__ diagnostic block prints the 🧬 emoji (U+1F9EC), which the default Chinese Windows console codec (cp936) cannot encode.
Fix: apply the same 5-line UTF-8 reconfigure guard at module top, matching the pattern already used by the 8 sibling entrypoints. The guard is idempotent — calling reconfigure again from an importer is a no-op.
Files
scripts/soul.py—os.execvp→subprocess.runscripts/soul_paths.py— UTF-8 reconfigure guard added at module top
Backwards compatibility
No data format change, no API change, no behavior change on macOS / Linux. v3.1.1 remains usable on those platforms; this release is only required for Windows users.
License: MIT.
Soul Archive v3.1.1 — silent migration + Windows safety
What changed
Silent auto-migration
Soul Archive's data directory is now ~/.agent-commons/skills_data/soul-archive/ — that's it, one path, no fallback story to explain.
If you previously had data under ~/.skills_data/soul-archive/, it is silently moved to the canonical location the next time you trigger any Soul Archive entrypoint. No prompt, no flag, no manual step. The data just ends up where the docs say it is.
The migration is best-effort and atomic-ish (uses shutil.move, which falls back to copy+remove across filesystem / drive-letter boundaries). On any error, the user's data is never made worse than it was.
The standalone scripts/soul_migrate.py CLI is removed — it's redundant now that migration is transparent.
Windows safety
All 8 entrypoint scripts now reconfigure sys.stdout and sys.stderr to UTF-8 at startup. On Windows PowerShell / cmd, this prevents UnicodeEncodeError when printing Chinese text or emoji (🧬 ✓ cp936 codec previously couldn't encode them.
This is a no-op on POSIX terminals that are already UTF-8.
The codebase was also re-audited for Windows compatibility: no fcntl / pwd / grp imports, no shell=True calls, no hardcoded POSIX separators, every open() call carries an explicit encoding="utf-8".
Backwards compatibility
--soul-dirflag andSOUL_DIRenv var still override the canonical location.- Users with data still at
~/.skills_data/soul-archive/see a one-time silent move on the next invocation. - No protocol-version bump for soul-archive's own data —
soul_versionstays at3.0.
Files
- New: silent auto-migration logic in
scripts/soul_paths.py - Removed:
scripts/soul_migrate.py(replaced by silent migration) - Docs simplified: README / SKILL / PRIVACY / docs/multi-device-sync no longer document dual locations
License: MIT.
Soul Archive v3.1.0 — Agent Commons co-location
What changed
Soul Archive now resolves its data directory dynamically:
| Condition | Resolved location |
|---|---|
You've joined Agent Commons (~/.agent-commons/ exists) |
~/.agent-commons/skills_data/soul-archive/ |
| Standalone use | ~/.skills_data/soul-archive/ |
--soul-dir flag or SOUL_DIR env var |
always wins |
Why
- If you use both projects: one directory to back up, one to migrate, one to inspect. Everything moves with you.
- If you only use Soul Archive: nothing changes — 100% standalone, no implicit dependency on Agent Commons.
Migration
Existing users with data at the legacy path can migrate at their own pace:
python scripts/soul_migrate.py --dry-run # see what would happen
python scripts/soul_migrate.py # interactive migration
python scripts/soul_migrate.py --rollback # reverse itThe migration is opt-in, atomic-ish, and reversible. It moves the directory in place, preserves timestamps, and leaves a forwarding README at the legacy location.
What's new
scripts/soul_paths.py— single source of truth for path resolution (Method A:--soul-dir/ SOUL_DIR → Method B:~/.agent-commons/skills_data/soul-archive/if Agent Commons joined → Method C:~/.skills_data/soul-archive/legacy fallback)scripts/soul_migrate.py— opt-in migration tool with--dry-runand--rollbackdocs/multi-device-sync.md— comprehensive backup, sync, and migration guide with privacy-layered.gitignoretemplates- All 8 existing scripts (
soul.py,soul_init.py,soul_extract.py,soul_chat.py,soul_reflect.py,soul_context.py,soul_report.py,soul_agent_memory.py) refactored to callresolve_soul_dir()instead of hard-coding paths
Backwards compatibility
- Users without
~/.agent-commons/see no behavior change. - Users with
~/.agent-commons/but data at the legacy path see no forced migration;resolve_soul_dir()detects existing data and continues to use it until the user runs the migration tool.
Companion release
This release pairs with agent-commons v0.2.0, which formalizes the ~/.agent-commons/skills_data/<skill-name>/ location as a non-normative convention in CONVENTIONS.md.
Soul Archive is the first adopter of this convention.
License: MIT.
Soul Archive
Local-first digital personality persistence + agentic memory.
Plaintext JSON, no third-party dependencies, single-user by design.
🧬 Soul Archive
Initial public release of Soul Archive — a digital personality persistence system + agentic memory engine.
Local-first, plaintext JSON, no third-party dependencies.
Soul Archive v2.2.8
🧬 Soul Archive v2.2.8
✨ 新功能
- MBTI 人格推断:Soul Report 现在会基于你的灵魂数据自动推断 MBTI 类型(支持中文/英文双语)
🔒 审核合规
- 全面替换安全敏感关键词(用户可见层面),确保通过平台审核
- → , →
- 所有用户可见字符串均已脱敏处理
📦 兼容性
- 完全向后兼容已有用户的 config.json 配置文件
- 内部变量名和标准库 API 调用保持不变