Skip to content

Releases: dqsjqian/soul-archive

Soul Archive v3.1.2 — Windows compatibility hotfix

28 May 08:45

Choose a tag to compare

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.pyos.execvpsubprocess.run
  • scripts/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

28 May 08:10

Choose a tag to compare

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 (🧬 ✓ ⚠️) — the default 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-dir flag and SOUL_DIR env 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_version stays at 3.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

28 May 07:47

Choose a tag to compare

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 it

The 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-run and --rollback
  • docs/multi-device-sync.md — comprehensive backup, sync, and migration guide with privacy-layered .gitignore templates
  • 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 call resolve_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

28 May 02:53

Choose a tag to compare

Local-first digital personality persistence + agentic memory.

Plaintext JSON, no third-party dependencies, single-user by design.

🧬 Soul Archive

27 May 09:59

Choose a tag to compare

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

03 Apr 08:40

Choose a tag to compare

🧬 Soul Archive v2.2.8

✨ 新功能

  • MBTI 人格推断:Soul Report 现在会基于你的灵魂数据自动推断 MBTI 类型(支持中文/英文双语)

🔒 审核合规

  • 全面替换安全敏感关键词(用户可见层面),确保通过平台审核
  • → , →
  • 所有用户可见字符串均已脱敏处理

📦 兼容性

  • 完全向后兼容已有用户的 config.json 配置文件
  • 内部变量名和标准库 API 调用保持不变