SessionSmith 0.1.4__tar.gz → 2.1.0__tar.gz

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.
Files changed (48) hide show
  1. sessionsmith-2.1.0/PKG-INFO +507 -0
  2. sessionsmith-2.1.0/SessionSmith/__init__.py +212 -0
  3. sessionsmith-2.1.0/SessionSmith/cli.py +1029 -0
  4. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/compare.py +19 -18
  5. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/core.py +225 -68
  6. sessionsmith-2.1.0/SessionSmith/crypto.py +205 -0
  7. sessionsmith-2.1.0/SessionSmith/error_handling.py +287 -0
  8. sessionsmith-2.1.0/SessionSmith/exceptions.py +374 -0
  9. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/formats.py +77 -75
  10. sessionsmith-2.1.0/SessionSmith/i18n.py +315 -0
  11. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/info.py +28 -30
  12. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/jupyter_utils.py +8 -9
  13. sessionsmith-2.1.0/SessionSmith/logging_config.py +194 -0
  14. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/manager.py +178 -245
  15. sessionsmith-2.1.0/SessionSmith/py.typed +3 -0
  16. sessionsmith-2.1.0/SessionSmith/remote_backends.py +277 -0
  17. sessionsmith-2.1.0/SessionSmith/resource_manager.py +336 -0
  18. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/serializers.py +19 -19
  19. sessionsmith-2.1.0/SessionSmith/ssm.py +3223 -0
  20. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/tracer.py +79 -80
  21. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/utils.py +16 -19
  22. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/visualizer.py +40 -39
  23. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/visualizer_arrays.py +33 -33
  24. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith/visualizer_generic.py +14 -14
  25. sessionsmith-2.1.0/SessionSmith.egg-info/PKG-INFO +507 -0
  26. sessionsmith-2.1.0/SessionSmith.egg-info/SOURCES.txt +40 -0
  27. sessionsmith-2.1.0/SessionSmith.egg-info/entry_points.txt +2 -0
  28. sessionsmith-2.1.0/SessionSmith.egg-info/requires.txt +32 -0
  29. sessionsmith-2.1.0/pyproject.toml +172 -0
  30. sessionsmith-2.1.0/readme.md +444 -0
  31. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/setup.py +11 -3
  32. sessionsmith-2.1.0/tests/test_cli.py +101 -0
  33. sessionsmith-2.1.0/tests/test_core.py +197 -0
  34. sessionsmith-2.1.0/tests/test_crypto.py +95 -0
  35. sessionsmith-2.1.0/tests/test_logging_config.py +106 -0
  36. sessionsmith-2.1.0/tests/test_remote_backends.py +166 -0
  37. sessionsmith-2.1.0/tests/test_ssm.py +676 -0
  38. sessionsmith-2.1.0/tests/test_verify.py +66 -0
  39. sessionsmith-0.1.4/PKG-INFO +0 -274
  40. sessionsmith-0.1.4/SessionSmith/__init__.py +0 -33
  41. sessionsmith-0.1.4/SessionSmith/version_control.py +0 -356
  42. sessionsmith-0.1.4/SessionSmith.egg-info/PKG-INFO +0 -274
  43. sessionsmith-0.1.4/SessionSmith.egg-info/SOURCES.txt +0 -21
  44. sessionsmith-0.1.4/SessionSmith.egg-info/requires.txt +0 -6
  45. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/LICENSE +0 -0
  46. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith.egg-info/dependency_links.txt +0 -0
  47. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/SessionSmith.egg-info/top_level.txt +0 -0
  48. {sessionsmith-0.1.4 → sessionsmith-2.1.0}/setup.cfg +0 -0
@@ -0,0 +1,507 @@
1
+ Metadata-Version: 2.4
2
+ Name: SessionSmith
3
+ Version: 2.1.0
4
+ Summary: Git-style session management for Python. Save, restore, and track your variables with ease.
5
+ Home-page: https://github.com/yut0takagi/SessionSmith
6
+ Author: YutoTAKAGI
7
+ Author-email: YutoTAKAGI <yutotkg.1040@gmail.com>
8
+ License: MIT
9
+ Project-URL: Homepage, https://github.com/yut0takagi/SessionSmith
10
+ Project-URL: Documentation, https://github.com/yut0takagi/SessionSmith/tree/main/docs
11
+ Project-URL: Repository, https://github.com/yut0takagi/SessionSmith.git
12
+ Project-URL: Issues, https://github.com/yut0takagi/SessionSmith/issues
13
+ Project-URL: Changelog, https://github.com/yut0takagi/SessionSmith/blob/main/CHANGELOG.md
14
+ Keywords: jupyter,notebook,session,save,load,pickle,serialization,algorithm,tracer,visualization,cli,git,version-control,checkpoint,machine-learning,long-running,recovery
15
+ Classifier: Development Status :: 4 - Beta
16
+ Classifier: Environment :: Console
17
+ Classifier: Framework :: Jupyter
18
+ Classifier: Intended Audience :: Developers
19
+ Classifier: Intended Audience :: Science/Research
20
+ Classifier: License :: OSI Approved :: MIT License
21
+ Classifier: Operating System :: OS Independent
22
+ Classifier: Programming Language :: Python :: 3
23
+ Classifier: Programming Language :: Python :: 3.9
24
+ Classifier: Programming Language :: Python :: 3.10
25
+ Classifier: Programming Language :: Python :: 3.11
26
+ Classifier: Programming Language :: Python :: 3.12
27
+ Classifier: Topic :: Scientific/Engineering
28
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
29
+ Classifier: Topic :: Software Development :: Version Control
30
+ Classifier: Typing :: Typed
31
+ Requires-Python: >=3.9
32
+ Description-Content-Type: text/markdown
33
+ License-File: LICENSE
34
+ Provides-Extra: visualization
35
+ Requires-Dist: matplotlib>=3.5.0; extra == "visualization"
36
+ Provides-Extra: crypto
37
+ Requires-Dist: cryptography>=3.4; extra == "crypto"
38
+ Provides-Extra: s3
39
+ Requires-Dist: boto3>=1.26; extra == "s3"
40
+ Provides-Extra: gcs
41
+ Requires-Dist: google-cloud-storage>=2.0; extra == "gcs"
42
+ Provides-Extra: cloud
43
+ Requires-Dist: boto3>=1.26; extra == "cloud"
44
+ Requires-Dist: google-cloud-storage>=2.0; extra == "cloud"
45
+ Provides-Extra: dev
46
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
47
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
48
+ Requires-Dist: pytest-timeout>=2.1.0; extra == "dev"
49
+ Requires-Dist: black>=23.0.0; extra == "dev"
50
+ Requires-Dist: isort>=5.12.0; extra == "dev"
51
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
52
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
53
+ Requires-Dist: cryptography>=3.4; extra == "dev"
54
+ Provides-Extra: all
55
+ Requires-Dist: matplotlib>=3.5.0; extra == "all"
56
+ Requires-Dist: cryptography>=3.4; extra == "all"
57
+ Requires-Dist: boto3>=1.26; extra == "all"
58
+ Requires-Dist: google-cloud-storage>=2.0; extra == "all"
59
+ Dynamic: author
60
+ Dynamic: home-page
61
+ Dynamic: license-file
62
+ Dynamic: requires-python
63
+
64
+ # SessionSmith
65
+
66
+ **SessionSmith** は、Jupyter Notebook や Python 実行時のセッション(変数・オブジェクト)を Git 風に管理できる堅牢なライブラリです。機械学習の長時間学習にも対応したチェックポイント機能を備えています。
67
+
68
+ ## ⚠️ セキュリティ警告
69
+
70
+ **重要**: このライブラリは`pickle`を使用しています。信頼できないソースからのセッションファイルをロードしないでください。悪意のあるpickleファイルは任意のコードを実行する可能性があります。
71
+
72
+ - ✅ 信頼できるソースからのファイルのみをロードしてください
73
+ - ✅ 不審なファイルをロードする前に、`verify_session()`で検証してください
74
+ - ✅ 本番環境では、セッションファイルの保存場所へのアクセスを制限してください
75
+
76
+ ## 特徴
77
+
78
+ - 🚀 **簡単**: たった2行で保存&復元
79
+ - 🔧 **SSM**: Git風のセッション管理(`.ssm/` ディレクトリベース)
80
+ - 🔄 **常時記録**: クラッシュ対策の自動保存
81
+ - ⏱️ **チェックポイント**: 機械学習の長時間学習に対応(定期自動保存、中断時復元)
82
+ - 📦 **複数形式対応**: pickle(デフォルト)、JSON、MessagePack、HDF5
83
+ - 🔍 **自動検出**: ファイル拡張子から形式を自動検出
84
+ - 🗜️ **圧縮対応**: gzip/bz2圧縮でディスク容量を節約
85
+ - 📊 **情報表示**: セッションの詳細情報を確認
86
+ - 🔄 **比較機能**: 2つのセッションを比較
87
+ - 💾 **自動バックアップ**: 定期的な自動保存
88
+ - 🏷️ **バージョン管理**: Git風のコミット・チェックアウト機能
89
+ - 📈 **アルゴリズムトレーサー**: 1行ごとの変数状態記録・可視化
90
+ - 🎨 **可視化**: アルゴリズムの実行をアニメーションで表示
91
+ - 🚀 **拡張機能対応**: Cursor/VSCode拡張機能でコードを書かずに実行可能
92
+ - 🌐 **多言語対応**: 日本語・英語のエラーメッセージに対応
93
+ - 🛡️ **堅牢なエラーハンドリング**: リトライ、詳細なエラー情報、コンテキスト管理
94
+ - ☁️ **クラウドリモート**(v2.1.0): S3 / GCS / HTTP へ `push` / `pull`
95
+ - 🔐 **暗号化・改ざん検出**(v2.1.0): 認証付き暗号でのエクスポート、HMAC 署名による検証
96
+ - 📝 **構造化ロギング**(v2.1.0): ログレベル・ファイル出力・JSON ログ
97
+
98
+ ## インストール
99
+
100
+ ### pip でインストール(推奨)
101
+
102
+ ```bash
103
+ pip install SessionSmith
104
+ ```
105
+
106
+ ### Homebrew でインストール
107
+
108
+ ```bash
109
+ # 現在のリポジトリから直接インストール
110
+ brew install yut0takagi/SessionSmith/sessionsmith
111
+
112
+ # または、ローカルファイルからインストール
113
+ brew install --build-from-source ./Formula/sessionsmith.rb
114
+ ```
115
+
116
+ 可視化機能を使う場合:
117
+
118
+ ```bash
119
+ pip install SessionSmith[visualization]
120
+ # または
121
+ pip install matplotlib
122
+ ```
123
+
124
+ オプション機能(v2.1.0):
125
+
126
+ ```bash
127
+ pip install SessionSmith[crypto] # 暗号化(cryptography)
128
+ pip install SessionSmith[s3] # S3 リモート(boto3)
129
+ pip install SessionSmith[gcs] # GCS リモート(google-cloud-storage)
130
+ pip install SessionSmith[cloud] # S3 + GCS
131
+ pip install SessionSmith[all] # すべて
132
+ ```
133
+
134
+ > 署名(HMAC)・構造化ロギングは追加依存なしで利用できます。
135
+
136
+ ## クイックスタート
137
+
138
+ ### SSM - Git風セッション管理(推奨)
139
+
140
+ ```python
141
+ from SessionSmith import ssm
142
+
143
+ # 初期化(.ssm/ ディレクトリを作成)
144
+ ssm.init()
145
+
146
+ # 変数を作成
147
+ a = 1
148
+ b = [1, 2, 3]
149
+ model = train_model()
150
+
151
+ # コミット
152
+ ssm.commit("Initial state")
153
+
154
+ # 履歴を見る
155
+ ssm.log()
156
+
157
+ # ブランチ機能
158
+ ssm.branch('feature', create=True) # ブランチ作成
159
+ ssm.checkout_branch('feature') # ブランチ切り替え
160
+
161
+ # マージ機能
162
+ ssm.merge('feature') # ブランチをマージ
163
+
164
+ # タグ機能
165
+ ssm.tag('v1.0.0') # タグ作成
166
+ ssm.checkout_tag('v1.0.0') # タグからチェックアウト
167
+
168
+ # リモート機能
169
+ ssm.remote_add('origin', '/path/to/remote') # リモート追加
170
+ ssm.push('origin', 'main') # プッシュ
171
+ ssm.pull('origin', 'main') # プル
172
+
173
+ # 常時記録を有効化(クラッシュ対策)
174
+ ssm.continuous()
175
+
176
+ # 以前の状態に復元
177
+ ssm.checkout("abc123")
178
+
179
+ # クラッシュ後の復元
180
+ ssm.recover()
181
+ ```
182
+
183
+ ### チェックポイント(長時間学習対応)
184
+
185
+ 機械学習の学習ループなど、長時間実行されるタスクに最適です。
186
+
187
+ ```python
188
+ from SessionSmith import ssm
189
+
190
+ ssm.init()
191
+
192
+ # 5分ごとに自動チェックポイント
193
+ with ssm.checkpoint(interval=300) as cp:
194
+ for epoch in range(1000):
195
+ loss = train()
196
+ acc = validate()
197
+
198
+ # 手動チェックポイント + メトリクス記録
199
+ cp.step(loss=loss, accuracy=acc)
200
+
201
+ # 学習が長くなっても自動保存される
202
+ # Ctrl+C で中断しても自動保存される
203
+
204
+ # 中断後に復元
205
+ ssm.restore_checkpoint()
206
+
207
+ # チェックポイント一覧
208
+ ssm.list_checkpoints()
209
+ ```
210
+
211
+ **チェックポイントの特徴:**
212
+ - ⏱️ 定期的な自動保存(バックグラウンド)
213
+ - 🛑 シグナル(Ctrl+C)での中断時に自動保存
214
+ - 💥 例外発生時に緊急保存
215
+ - 📊 メトリクスの追跡(loss, accuracy など)
216
+ - 🧹 古いチェックポイントの自動削除
217
+
218
+ ### 形式変換(.pkl/.json との互換性)
219
+
220
+ ```python
221
+ from SessionSmith import ssm
222
+
223
+ ssm.init()
224
+ ssm.commit("checkpoint")
225
+
226
+ # SSM → 従来形式へエクスポート
227
+ ssm.export("backup.pkl")
228
+ ssm.export("data.json")
229
+
230
+ # 従来形式 → SSMへインポート
231
+ ssm.import_session("old_session.pkl")
232
+
233
+ # 形式変換
234
+ ssm.convert("data.pkl", "data.json")
235
+ ```
236
+
237
+ ### 多言語対応(日本語・英語)
238
+
239
+ ```python
240
+ from SessionSmith import set_language, get_language
241
+
242
+ # 日本語に設定
243
+ set_language('ja')
244
+ # または環境変数で設定: export SESSIONSMITH_LANG=ja
245
+
246
+ # 英語に設定
247
+ set_language('en')
248
+
249
+ # 自動検出(システムのロケールから判定)
250
+ set_language('auto')
251
+
252
+ # 現在の言語を確認
253
+ lang = get_language() # 'ja' または 'en'
254
+ ```
255
+
256
+ エラーメッセージや情報メッセージが設定した言語で表示されます。
257
+ SSMが初期化されている場合、言語設定は自動的に `.ssm/config` に保存されます。
258
+
259
+ ### クラウド / URL リモート(v2.1.0)
260
+
261
+ ```python
262
+ from SessionSmith import ssm
263
+
264
+ ssm.init()
265
+ ssm.commit("experiment v1")
266
+
267
+ # クラウドリモートを登録して push / pull
268
+ ssm.remote_add("cloud", "s3://my-bucket/experiments") # S3
269
+ # ssm.remote_add("cloud", "gs://my-bucket/experiments") # GCS
270
+ # ssm.remote_add("cloud", "file:///shared/ssm-remote") # 共有ディレクトリ
271
+ ssm.push("cloud", "main")
272
+
273
+ # 別マシン / 別リポジトリから取得
274
+ ssm.pull("cloud", "main")
275
+
276
+ # HTTP(S) 越しの読み取り(pull のみ)
277
+ ssm.remote_add("mirror", "https://example.com/ssm-repo")
278
+ ssm.pull("mirror", "main")
279
+ ```
280
+
281
+ ### 暗号化・改ざん検出(v2.1.0)
282
+
283
+ ```python
284
+ from SessionSmith import ssm
285
+
286
+ # --- 暗号化(要 pip install SessionSmith[crypto])---
287
+ ssm.export("backup.pkl", password="my-secret") # 暗号化してエクスポート
288
+ ssm.import_session("backup.pkl", password="my-secret") # 復号してインポート
289
+ ssm.push("cloud", "main", password="my-secret") # リモート上のデータを暗号化
290
+
291
+ # --- 改ざん検出(HMAC 署名・追加依存なし)---
292
+ ssm.config("sign_key", "team-secret") # 署名鍵を設定(環境変数 SESSIONSMITH_SIGN_KEY でも可)
293
+ ssm.commit("signed snapshot") # 以降のコミットに署名が付与される
294
+
295
+ result = ssm.verify() # 整合性(再ハッシュ)と署名を検証
296
+ # {'integrity_ok': True, 'signed': True, 'signature_ok': True, 'issues': []}
297
+ ```
298
+
299
+ ### 構造化ロギング(v2.1.0)
300
+
301
+ ```python
302
+ from SessionSmith import setup_logging, enable_debug, set_log_level
303
+
304
+ setup_logging(level="INFO", log_file="ssm.log") # ファイル出力(ローテーション付き)
305
+ setup_logging(level="INFO", json_format=True) # JSON 構造化ログ
306
+ enable_debug() # デバッグモード
307
+
308
+ # 環境変数でも設定可能:
309
+ # SESSIONSMITH_LOG_LEVEL=DEBUG
310
+ # SESSIONSMITH_LOG_FILE=ssm.log
311
+ # SESSIONSMITH_LOG_JSON=1
312
+ ```
313
+
314
+ ### レガシーAPI(後方互換性)
315
+
316
+ > ⚠️ 以下のAPIは後方互換性のために残されています。新規開発では `ssm` の使用を推奨します。
317
+ >
318
+ > **注意**: `save_session()` と `load_session()` は、デフォルトでSSM(`.ssm/`ディレクトリ)に統合されています。
319
+ > 全てのセッションは`.ssm/`ディレクトリ内に保存され、バージョン管理されます。
320
+
321
+ ```python
322
+ from SessionSmith import save_session, load_session
323
+
324
+ # セッション保存(.ssm/ディレクトリに自動保存、バージョン管理付き)
325
+ save_session("my_session.pkl") # SSMにコミット + オプションで.pklにもエクスポート
326
+
327
+ # セッション復元(SSMの最新コミットから読み込み)
328
+ load_session() # ファイルパスなしで最新コミットから読み込み
329
+ load_session("my_session.pkl") # ファイルが存在する場合はインポートしてから読み込み
330
+
331
+ # JSON形式で保存(安全、可読性)
332
+ save_session("my_session.json") # SSMにコミット + オプションで.jsonにもエクスポート
333
+
334
+ # 従来通りファイルに直接保存する場合(use_ssm=False)
335
+ save_session("my_session.pkl", use_ssm=False)
336
+ load_session("my_session.pkl", use_ssm=False)
337
+ ```
338
+
339
+ ### CLI ツール
340
+
341
+ ```bash
342
+ # 初期化
343
+ ssm init
344
+
345
+ # 状態確認
346
+ ssm status
347
+
348
+ # コミット
349
+ ssm commit -m "Add training data"
350
+
351
+ # 履歴
352
+ ssm log --oneline
353
+
354
+ # 監視モード(定期スナップショット)
355
+ ssm watch --interval 10
356
+
357
+ # ダッシュボード(Webブラウザ)
358
+ ssm dashboard
359
+
360
+ # 統計
361
+ ssm stats --graph
362
+ ```
363
+
364
+ ## 主な機能
365
+
366
+ ### 1. SSM(Git風セッション管理)
367
+ - `.ssm/` ディレクトリベースのセッション管理
368
+ - コミット、履歴、チェックアウト
369
+ - ブランチ機能(分岐・切り替え)
370
+ - マージ機能(複数ブランチの統合)
371
+ - タグ機能(コミットへの名前付け)
372
+ - リモートリポジトリとの同期(push/pull)
373
+ - 常時記録(クラッシュ対策)
374
+ - CLIツール `ssm` コマンド
375
+
376
+ ### 2. チェックポイント(長時間学習対応)
377
+ - 定期的な自動保存
378
+ - 中断・例外時の緊急保存
379
+ - メトリクス追跡
380
+ - 復元機能
381
+
382
+ ### 3. 基本的な保存・復元
383
+ - 変数の選択的保存・復元
384
+ - 圧縮サポート(gzip/bz2)
385
+ - Jupyter Notebook内部変数の自動除外
386
+
387
+ ### 4. SessionManagerクラス
388
+ - セッション管理の簡素化
389
+ - 自動バックアップ機能
390
+ - 常時記録機能
391
+
392
+ ### 5. CLI ツール
393
+ - `ssm watch` - 監視モード
394
+ - `ssm stats` - 統計分析
395
+ - `ssm dashboard` - Webダッシュボード
396
+
397
+ ### 6. セッション情報・比較
398
+ - セッション情報の表示
399
+ - 2つのセッションの比較
400
+ - セッションファイルの検証
401
+
402
+ ### 7. アルゴリズム実行トレーサー
403
+ - 1行ごとの変数状態記録
404
+ - 可視化(アニメーション)
405
+ - トレースデータの保存・読み込み
406
+
407
+ ## ⚠️ 複数ファイル使用時の注意事項
408
+
409
+ Python notebookで複数のファイルからインポートしたり、複数のファイルで同一変数名を使用する場合、変数名の衝突に注意してください。
410
+
411
+ - **変数名の衝突**: 複数のnotebookファイルから同じ`.ssm/`ディレクトリを使用する場合、同じ変数名が使われると衝突が発生する可能性があります
412
+ - **自動検出**: SSMは異なるファイルからのコミットを自動的に検出し、変数名の衝突を警告します
413
+ - **推奨**: ファイルごとに異なる変数名を使用するか、ファイル名をプレフィックスとして使用してください
414
+
415
+ 詳細は [基本的な使い方](docs/getting-started.md#複数ファイル使用時の注意事項) を参照してください。
416
+
417
+ ## 詳細なドキュメント
418
+
419
+ 詳細な使い方は以下のドキュメントを参照してください:
420
+
421
+ - 🚀 [SSM - Git風セッション管理](docs/ssm-guide.md) - `.ssm/` ディレクトリベースの管理
422
+ - 💻 [CLI リファレンス](docs/cli-reference.md) - コマンドラインツールの使い方
423
+ - 📖 [基本的な使い方](docs/getting-started.md) - 保存・復元の詳細
424
+ - 📈 [アルゴリズムトレーサー](docs/algorithm-tracer.md) - トレース・可視化機能
425
+ - 🌐 [国際化(i18n)ガイド](docs/i18n-guide.md) - 多言語対応(日本語・英語)
426
+ - 📚 [APIリファレンス](docs/api-reference.md) - 全APIの詳細
427
+
428
+ ## 使用例
429
+
430
+ ### 機械学習ワークフロー
431
+
432
+ ```python
433
+ from SessionSmith import ssm
434
+
435
+ # 初期化
436
+ ssm.init()
437
+
438
+ # データ準備
439
+ X_train, y_train = load_data()
440
+ model = create_model()
441
+
442
+ ssm.commit("Data loaded")
443
+
444
+ # モデル学習(長時間)
445
+ with ssm.checkpoint(interval=600) as cp: # 10分ごと
446
+ for epoch in range(100):
447
+ for batch in dataloader:
448
+ loss = model.train_step(batch)
449
+
450
+ val_loss = validate(model)
451
+ cp.step(epoch=epoch, loss=loss, val_loss=val_loss)
452
+
453
+ print(f"Epoch {epoch}: loss={loss:.4f}")
454
+
455
+ # 学習完了時にコミット
456
+ ssm.commit("Training complete")
457
+
458
+ # バックアップをエクスポート
459
+ ssm.export("trained_model.pkl")
460
+ ```
461
+
462
+ ### アルゴリズム可視化
463
+
464
+ ```python
465
+ from SessionSmith import AlgorithmTracer, visualize_algorithm_trace
466
+
467
+ with AlgorithmTracer(target_variables=["arr"]) as tracer:
468
+ bubble_sort(arr)
469
+
470
+ visualize_algorithm_trace(
471
+ trace_data=tracer.get_trace_data(),
472
+ output_file="animation.gif",
473
+ target_variables=["arr"]
474
+ )
475
+ ```
476
+
477
+ ## Cursor/VSCode拡張機能
478
+
479
+ SessionSmithには、Cursor/VSCode用の拡張機能が用意されています。コードを書かずに、GUIからセッションの保存・復元が可能です。
480
+
481
+ ### インストール
482
+
483
+ **Open VSX Registryから:**
484
+ 1. Cursor/VSCodeでコマンドパレット(Cmd+Shift+P / Ctrl+Shift+P)を開く
485
+ 2. `Extensions: Install Extension` を選択
486
+ 3. `SessionSmith` を検索してインストール
487
+
488
+ または、以下のURLから直接インストール:
489
+ - https://open-vsx.org/extension/yut0takagi/sessionsmith
490
+
491
+ ### 機能
492
+
493
+ - 🌳 **Session Graph(v0.2.0〜)**: `.ssm/` のコミット履歴を gitgraph 風に可視化。
494
+ ブランチのレーン色分け、マージの分岐・合流、ブランチ/タグ/HEADバッジ、コミット詳細
495
+ (変数一覧・署名状態)、GUI からの Checkout / Branch / Tag / Commit に対応
496
+ - 🗂 **Sessions ビュー(v0.2.0〜)**: アクティビティバーにブランチ・タグ・コミットのツリー表示
497
+ - ✅ **Save Session**: 現在のPythonセッション(変数)を保存
498
+ - ✅ **Load Session**: セッションファイルを選択して変数を復元
499
+ - ✅ **Show Session Info**: セッションファイルの情報を表示
500
+ - ✅ **Notebook対応**: Jupyter Notebookでセルを追加せずに実行
501
+ - ✅ **自動検出**: Pythonインタープリターを自動検出(仮想環境対応)
502
+
503
+ 詳細は [extension/README.md](extension/README.md) を参照してください。
504
+
505
+ ## ライセンス
506
+
507
+ MIT