find-my-session 0.1.1__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.
- find_my_session-0.1.1/LICENSE +21 -0
- find_my_session-0.1.1/PKG-INFO +185 -0
- find_my_session-0.1.1/README.md +149 -0
- find_my_session-0.1.1/core/fms_lib/__init__.py +1 -0
- find_my_session-0.1.1/core/fms_lib/cli.py +398 -0
- find_my_session-0.1.1/core/fms_lib/diagnostics.py +303 -0
- find_my_session-0.1.1/core/fms_lib/errors.py +4 -0
- find_my_session-0.1.1/core/fms_lib/fingerprint.py +319 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/__init__.py +1 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/antigravity.py +45 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/antigravity_cli.py +23 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/antigravity_family.py +637 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/base.py +66 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/claude_code.py +587 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/cline.py +733 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/codearts_agent.py +756 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/codex.py +995 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/common.py +98 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/cursor.py +858 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/deepseek.py +710 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/grok_build.py +775 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/kimi_code.py +886 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/minimax_code.py +1179 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/qoder.py +14 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/qoder_cn.py +14 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/qoder_family.py +556 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/workbuddy.py +22 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/workbuddy_cn.py +23 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/workbuddy_family.py +656 -0
- find_my_session-0.1.1/core/fms_lib/harnesses/zcode.py +824 -0
- find_my_session-0.1.1/core/fms_lib/models.py +164 -0
- find_my_session-0.1.1/core/fms_lib/registry.py +155 -0
- find_my_session-0.1.1/core/fms_lib/render.py +254 -0
- find_my_session-0.1.1/core/fms_lib/search.py +69 -0
- find_my_session-0.1.1/core/fms_lib/service.py +315 -0
- find_my_session-0.1.1/core/fms_lib/util.py +246 -0
- find_my_session-0.1.1/find_my_session.egg-info/PKG-INFO +185 -0
- find_my_session-0.1.1/find_my_session.egg-info/SOURCES.txt +72 -0
- find_my_session-0.1.1/find_my_session.egg-info/dependency_links.txt +1 -0
- find_my_session-0.1.1/find_my_session.egg-info/entry_points.txt +3 -0
- find_my_session-0.1.1/find_my_session.egg-info/requires.txt +6 -0
- find_my_session-0.1.1/find_my_session.egg-info/top_level.txt +2 -0
- find_my_session-0.1.1/fms_ui/__init__.py +0 -0
- find_my_session-0.1.1/fms_ui/server.py +282 -0
- find_my_session-0.1.1/fms_ui/session_cache.py +226 -0
- find_my_session-0.1.1/fms_ui/static/app.js +19 -0
- find_my_session-0.1.1/fms_ui/static/favicon.svg +7 -0
- find_my_session-0.1.1/fms_ui/static/index.html +16 -0
- find_my_session-0.1.1/fms_ui/static/styles.css +1 -0
- find_my_session-0.1.1/fms_ui/static/theme-init.js +16 -0
- find_my_session-0.1.1/pyproject.toml +96 -0
- find_my_session-0.1.1/setup.cfg +4 -0
- find_my_session-0.1.1/tests/test_antigravity.py +1044 -0
- find_my_session-0.1.1/tests/test_artifacts.py +123 -0
- find_my_session-0.1.1/tests/test_claude.py +583 -0
- find_my_session-0.1.1/tests/test_cli.py +1101 -0
- find_my_session-0.1.1/tests/test_cline.py +473 -0
- find_my_session-0.1.1/tests/test_codearts.py +553 -0
- find_my_session-0.1.1/tests/test_codex.py +590 -0
- find_my_session-0.1.1/tests/test_common.py +106 -0
- find_my_session-0.1.1/tests/test_cursor.py +429 -0
- find_my_session-0.1.1/tests/test_deepseek.py +606 -0
- find_my_session-0.1.1/tests/test_diagnostics.py +726 -0
- find_my_session-0.1.1/tests/test_grok.py +639 -0
- find_my_session-0.1.1/tests/test_kimi.py +503 -0
- find_my_session-0.1.1/tests/test_minimax_code.py +697 -0
- find_my_session-0.1.1/tests/test_performance.py +170 -0
- find_my_session-0.1.1/tests/test_project_metadata.py +46 -0
- find_my_session-0.1.1/tests/test_qoder.py +103 -0
- find_my_session-0.1.1/tests/test_release.py +202 -0
- find_my_session-0.1.1/tests/test_session_cache.py +306 -0
- find_my_session-0.1.1/tests/test_ui.py +412 -0
- find_my_session-0.1.1/tests/test_workbuddy.py +1048 -0
- find_my_session-0.1.1/tests/test_zcode.py +514 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 find-my-session contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: find-my-session
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: Read-only, cross-harness agent-session finder and handoff tool
|
|
5
|
+
Author: find-my-session contributors
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/SomeNoneAI/find-my-session
|
|
8
|
+
Project-URL: Repository, https://github.com/SomeNoneAI/find-my-session
|
|
9
|
+
Project-URL: Issues, https://github.com/SomeNoneAI/find-my-session/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/SomeNoneAI/find-my-session/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: Roadmap, https://github.com/SomeNoneAI/find-my-session/blob/main/ROADMAP.md
|
|
12
|
+
Keywords: agent,ai,claude-code,cli,codex,developer-tools,handoff,session-search
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Operating System :: MacOS
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
26
|
+
Classifier: Topic :: Utilities
|
|
27
|
+
Requires-Python: >=3.9
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
32
|
+
Requires-Dist: coverage>=7.6; extra == "dev"
|
|
33
|
+
Requires-Dist: mypy<2,>=1.11; extra == "dev"
|
|
34
|
+
Requires-Dist: ruff>=0.9; extra == "dev"
|
|
35
|
+
Dynamic: license-file
|
|
36
|
+
|
|
37
|
+
# find-my-session
|
|
38
|
+
|
|
39
|
+
[](https://github.com/SomeNoneAI/find-my-session/actions/workflows/ci.yml)
|
|
40
|
+
[](https://pypi.org/project/find-my-session/)
|
|
41
|
+
[](pyproject.toml)
|
|
42
|
+
[](LICENSE)
|
|
43
|
+
|
|
44
|
+
A local, read-only session finder and handoff tool for coding agents, shipped in two forms that share one `fms_lib` core:
|
|
45
|
+
|
|
46
|
+
- **find-my-session-skill** — an agent skill (`fms` CLI) that finds the right session across harnesses and prints a low-token handoff digest instead of the whole transcript.
|
|
47
|
+
- **find-my-session-ui** — a human-friendly browser panel for the same stores.
|
|
48
|
+
|
|
49
|
+
When a harness runs out of quota, you usually remember *what* you were doing but not *where* the session lives. `fms` answers that with one compact command.
|
|
50
|
+
|
|
51
|
+

|
|
52
|
+
|
|
53
|
+

|
|
54
|
+
|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
Screenshots use synthetic fixture data.
|
|
58
|
+
|
|
59
|
+
[中文说明](README.zh-CN.md)
|
|
60
|
+
|
|
61
|
+
## Supported harnesses
|
|
62
|
+
|
|
63
|
+
Sixteen adapters are ready; two more are planned. Verified versions, surfaces, and caveats live in the [compatibility matrix](docs/compatibility.md); per-harness store details live in [references/](skills/find-my-session/references/).
|
|
64
|
+
|
|
65
|
+
| Harness | Ref prefix | Store |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| Qoder CN | `qoder-cn` | `~/.qoder-cn` |
|
|
68
|
+
| Qoder (international) | `qoder` | `~/.qoder` |
|
|
69
|
+
| Kimi Code | `kimi-code` | `~/.kimi-code` |
|
|
70
|
+
| ZCode | `zcode` | `~/.zcode` |
|
|
71
|
+
| CodeArts Agent | `codearts-agent` | `~/.codeartsdoer` |
|
|
72
|
+
| ChatGPT Codex | `codex` | `~/.codex` |
|
|
73
|
+
| DeepSeek Harness | `deepseek` | `~/.dsh` |
|
|
74
|
+
| Claude Code | `claude-code` | `~/.claude` |
|
|
75
|
+
| Cline | `cline` | `~/.cline` |
|
|
76
|
+
| Grok Build | `grok-build` | `~/.grok` |
|
|
77
|
+
| WorkBuddy AI | `workbuddy` | `~/.workbuddy-ai` |
|
|
78
|
+
| WorkBuddy (domestic) | `workbuddy-cn` | `~/.workbuddy` |
|
|
79
|
+
| Antigravity | `antigravity` | `~/.gemini/antigravity` |
|
|
80
|
+
| Antigravity CLI | `antigravity-cli` | `~/.gemini/antigravity-cli` |
|
|
81
|
+
| MiniMax Code | `minimax-code` | `~/.minimax/v2` |
|
|
82
|
+
| Cursor | `cursor` | `~/.cursor/projects` |
|
|
83
|
+
| CodeBuddy | `codebuddy` (planned) | `~/.codebuddy` |
|
|
84
|
+
| Cline (VS Code extension) | `cline-vscode` (planned) | VS Code globalStorage |
|
|
85
|
+
|
|
86
|
+
## Requirements
|
|
87
|
+
|
|
88
|
+
- Python 3.9 or newer; macOS or Linux. Python 3.9 is end-of-life upstream and 0.2 is planned to require 3.10+ (see [ROADMAP.md](ROADMAP.md)).
|
|
89
|
+
- No third-party Python packages
|
|
90
|
+
- Compressed stores (`codex` `.jsonl.zst`, `deepseek` `.zstd`) need a zstd decoder: Python 3.14+ or the `zstd` CLI; otherwise those sessions are skipped
|
|
91
|
+
- Windows is exercised by an experimental, non-blocking CI job but is not supported yet; see [ROADMAP.md](ROADMAP.md)
|
|
92
|
+
|
|
93
|
+
## Install
|
|
94
|
+
|
|
95
|
+
### CLI and UI commands
|
|
96
|
+
|
|
97
|
+
`pipx install find-my-session` installs the `fms` and `fms-ui` commands from PyPI. To run an unreleased commit, install from Git instead: `pipx install git+https://github.com/SomeNoneAI/find-my-session.git`. Use `pipx upgrade find-my-session` to upgrade or `pipx uninstall find-my-session` to remove them. With `uv`, `uvx --from find-my-session fms ...` runs the PyPI release without a permanent install.
|
|
98
|
+
|
|
99
|
+
### For agents: the skill
|
|
100
|
+
|
|
101
|
+
1. **Release ZIP.** Each GitHub Release publishes `find-my-session-skill.zip`. Download it from the [latest release](https://github.com/SomeNoneAI/find-my-session/releases/latest), then install it into your harness (for example, upload it in Qoder Desktop under **Extensions → Skills**, or unzip it and link the directory into your harness's skills folder).
|
|
102
|
+
2. **Source checkout.**
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
git clone https://github.com/SomeNoneAI/find-my-session.git
|
|
106
|
+
cd find-my-session
|
|
107
|
+
qoderclicn skills link "$PWD/skills/find-my-session" # Qoder CN CLI; Claude Code: symlink into ~/.claude/skills
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
From a checkout you can also run the CLI directly as `python3 skills/find-my-session/scripts/fms`, or run `python3 tools/build_artifacts.py` to build `dist/find-my-session-skill.zip` yourself. To remove a linked skill, delete its symlink from the harness's skills folder.
|
|
111
|
+
|
|
112
|
+
### For humans: the UI panel
|
|
113
|
+
|
|
114
|
+
1. **Release ZIP.** Download `find-my-session-ui.zip` from the [latest release](https://github.com/SomeNoneAI/find-my-session/releases/latest), extract it, and run `python3 fms-ui` from the extracted directory (or `./fms-ui` when your extractor preserves executable bits). Replace that directory to upgrade or delete it to uninstall.
|
|
115
|
+
2. **pipx.** The same pipx install above provides the `fms-ui` command.
|
|
116
|
+
3. **Source checkout.** Run `fms_ui/fms-ui` (use `--no-browser --port 8765` to pick a port without opening a browser).
|
|
117
|
+
|
|
118
|
+
The panel starts a read-only server on `127.0.0.1` with keyword and metadata filters, session overviews, paged user prompts, recent turns, and copyable refs. The static frontend uses only same-origin JSON APIs — no Node.js, no external assets. Language follows the local system, with an explicit zh/en switch. The interface also follows the system light/dark preference, with a manual toggle and a non-black dark palette. The frontend is built with Vue 3 + TypeScript + Vite; Node.js is needed only when developing it from `fms_ui/frontend/`, never to run the panel.
|
|
119
|
+
|
|
120
|
+
## Quick start
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
fms harnesses # list ready and planned harnesses
|
|
124
|
+
fms search "quota handoff" --harness kimi-code # find sessions by keywords
|
|
125
|
+
fms latest --harness kimi-code --cwd . # most recent session in this repo
|
|
126
|
+
fms show kimi-code:e5f6a7b8 # low-token handoff digest
|
|
127
|
+
fms prompts kimi-code:e5f6a7b8 --count # count human prompts, then page with --limit/--offset
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Search prefers an explicit `--harness`; omit the query to list recent sessions. Archived sessions are excluded from `search`/`latest` unless `--include-archived` is passed. `show` stays read-only and prints the raw source path so an agent can grep the original file when the digest is not enough.
|
|
131
|
+
|
|
132
|
+
## Commands
|
|
133
|
+
|
|
134
|
+
| Command | Purpose |
|
|
135
|
+
| --- | --- |
|
|
136
|
+
| `fms harnesses` | List ready and planned harnesses, variants, and stores. |
|
|
137
|
+
| `fms search [query ...]` | Search session metadata by keywords; omit the query to list recent sessions. |
|
|
138
|
+
| `fms latest` | Return the most recent matching session. |
|
|
139
|
+
| `fms show <ref>` | Print a handoff digest for one session. |
|
|
140
|
+
| `fms prompts <ref>` | List every human prompt in one session; count, page, and order them. |
|
|
141
|
+
| `fms doctor [--harness] [--json] [--fingerprint]` | Check the local environment and stores (decoder availability, readable roots, per-harness health); `--fingerprint` adds a content-free shape summary for drift reports. |
|
|
142
|
+
|
|
143
|
+
## Useful options
|
|
144
|
+
|
|
145
|
+
| Option | Applies to | Meaning |
|
|
146
|
+
| --- | --- | --- |
|
|
147
|
+
| `--harness NAME[,NAME]` | search, latest, show, prompts, doctor | Restrict lookup to a harness. Recommended for speed and precision. |
|
|
148
|
+
| `--cwd PATH` | search, latest | Match a session whose working directory contains, or is contained by, `PATH`. |
|
|
149
|
+
| `--since 7d` / `--since 2026-10-01` | search, latest | Filter by last update time. |
|
|
150
|
+
| `--limit N` | search, latest, prompts | Limit results or prompts; `0` means unlimited. |
|
|
151
|
+
| `--offset N` | prompts | Skip the first N prompts. |
|
|
152
|
+
| `--order oldest/newest` | prompts | Page order; original indices are preserved. |
|
|
153
|
+
| `--count` | prompts | Print only the total prompt count. |
|
|
154
|
+
| `--deep` | search, latest | Also scan full transcripts. Slower; still prints metadata only. |
|
|
155
|
+
| `--include-archived` | search, latest | Include archived sessions. Off by default. |
|
|
156
|
+
| `--verbose` | search, latest | Warn about skipped sessions on stderr without changing stdout. |
|
|
157
|
+
| `--messages N` / `--chars N` / `--summary-chars N` | show | Cap turns, per-message characters, and summary characters. |
|
|
158
|
+
| `--json` | harnesses, search, latest, prompts, doctor | Machine-readable output; use `--format json` for `show`. See [docs/json-output.md](docs/json-output.md) for the field contract. |
|
|
159
|
+
|
|
160
|
+
Session references use `harness:session-prefix` (for example `kimi-code:e5f6a7b8`); a raw transcript path from a supported store works too. Desktop/CLI surfaces that share one store share one ref space — see the [compatibility matrix](docs/compatibility.md) for which surfaces are verified.
|
|
161
|
+
|
|
162
|
+
## Privacy and safety
|
|
163
|
+
|
|
164
|
+
- Everything runs locally; the CLI makes no network requests.
|
|
165
|
+
- The CLI only reads session files and databases, opening SQLite stores read-only; it never edits or deletes session content.
|
|
166
|
+
- Search output is metadata-only; `show` and `prompts` can print conversation content, so treat their output like the original transcript.
|
|
167
|
+
|
|
168
|
+
## Development and documentation
|
|
169
|
+
|
|
170
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md) — setup, tests, and how to add or verify a harness.
|
|
171
|
+
- [docs/compatibility.md](docs/compatibility.md) — the detailed, per-harness compatibility matrix.
|
|
172
|
+
- [docs/json-output.md](docs/json-output.md) — the `--json` field contract and pre-1.0 stability policy.
|
|
173
|
+
- [ROADMAP.md](ROADMAP.md) — near-term plans.
|
|
174
|
+
- [SECURITY.md](SECURITY.md) — supported versions and private vulnerability reporting.
|
|
175
|
+
- [skills/find-my-session/references/](skills/find-my-session/references/) — per-harness store schemas and verification recipes; start with [extending.md](skills/find-my-session/references/extending.md) to add a harness.
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
python3 -m unittest discover -s tests -v
|
|
179
|
+
python3 -m compileall -q core fms_ui skills/find-my-session/scripts tools tests
|
|
180
|
+
python3 tools/build_artifacts.py # rebuild dist/find-my-session-skill(.zip) and dist/find-my-session-ui(.zip)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## License
|
|
184
|
+
|
|
185
|
+
MIT. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# find-my-session
|
|
2
|
+
|
|
3
|
+
[](https://github.com/SomeNoneAI/find-my-session/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/find-my-session/)
|
|
5
|
+
[](pyproject.toml)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
A local, read-only session finder and handoff tool for coding agents, shipped in two forms that share one `fms_lib` core:
|
|
9
|
+
|
|
10
|
+
- **find-my-session-skill** — an agent skill (`fms` CLI) that finds the right session across harnesses and prints a low-token handoff digest instead of the whole transcript.
|
|
11
|
+
- **find-my-session-ui** — a human-friendly browser panel for the same stores.
|
|
12
|
+
|
|
13
|
+
When a harness runs out of quota, you usually remember *what* you were doing but not *where* the session lives. `fms` answers that with one compact command.
|
|
14
|
+
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+

|
|
18
|
+
|
|
19
|
+

|
|
20
|
+
|
|
21
|
+
Screenshots use synthetic fixture data.
|
|
22
|
+
|
|
23
|
+
[中文说明](README.zh-CN.md)
|
|
24
|
+
|
|
25
|
+
## Supported harnesses
|
|
26
|
+
|
|
27
|
+
Sixteen adapters are ready; two more are planned. Verified versions, surfaces, and caveats live in the [compatibility matrix](docs/compatibility.md); per-harness store details live in [references/](skills/find-my-session/references/).
|
|
28
|
+
|
|
29
|
+
| Harness | Ref prefix | Store |
|
|
30
|
+
| --- | --- | --- |
|
|
31
|
+
| Qoder CN | `qoder-cn` | `~/.qoder-cn` |
|
|
32
|
+
| Qoder (international) | `qoder` | `~/.qoder` |
|
|
33
|
+
| Kimi Code | `kimi-code` | `~/.kimi-code` |
|
|
34
|
+
| ZCode | `zcode` | `~/.zcode` |
|
|
35
|
+
| CodeArts Agent | `codearts-agent` | `~/.codeartsdoer` |
|
|
36
|
+
| ChatGPT Codex | `codex` | `~/.codex` |
|
|
37
|
+
| DeepSeek Harness | `deepseek` | `~/.dsh` |
|
|
38
|
+
| Claude Code | `claude-code` | `~/.claude` |
|
|
39
|
+
| Cline | `cline` | `~/.cline` |
|
|
40
|
+
| Grok Build | `grok-build` | `~/.grok` |
|
|
41
|
+
| WorkBuddy AI | `workbuddy` | `~/.workbuddy-ai` |
|
|
42
|
+
| WorkBuddy (domestic) | `workbuddy-cn` | `~/.workbuddy` |
|
|
43
|
+
| Antigravity | `antigravity` | `~/.gemini/antigravity` |
|
|
44
|
+
| Antigravity CLI | `antigravity-cli` | `~/.gemini/antigravity-cli` |
|
|
45
|
+
| MiniMax Code | `minimax-code` | `~/.minimax/v2` |
|
|
46
|
+
| Cursor | `cursor` | `~/.cursor/projects` |
|
|
47
|
+
| CodeBuddy | `codebuddy` (planned) | `~/.codebuddy` |
|
|
48
|
+
| Cline (VS Code extension) | `cline-vscode` (planned) | VS Code globalStorage |
|
|
49
|
+
|
|
50
|
+
## Requirements
|
|
51
|
+
|
|
52
|
+
- Python 3.9 or newer; macOS or Linux. Python 3.9 is end-of-life upstream and 0.2 is planned to require 3.10+ (see [ROADMAP.md](ROADMAP.md)).
|
|
53
|
+
- No third-party Python packages
|
|
54
|
+
- Compressed stores (`codex` `.jsonl.zst`, `deepseek` `.zstd`) need a zstd decoder: Python 3.14+ or the `zstd` CLI; otherwise those sessions are skipped
|
|
55
|
+
- Windows is exercised by an experimental, non-blocking CI job but is not supported yet; see [ROADMAP.md](ROADMAP.md)
|
|
56
|
+
|
|
57
|
+
## Install
|
|
58
|
+
|
|
59
|
+
### CLI and UI commands
|
|
60
|
+
|
|
61
|
+
`pipx install find-my-session` installs the `fms` and `fms-ui` commands from PyPI. To run an unreleased commit, install from Git instead: `pipx install git+https://github.com/SomeNoneAI/find-my-session.git`. Use `pipx upgrade find-my-session` to upgrade or `pipx uninstall find-my-session` to remove them. With `uv`, `uvx --from find-my-session fms ...` runs the PyPI release without a permanent install.
|
|
62
|
+
|
|
63
|
+
### For agents: the skill
|
|
64
|
+
|
|
65
|
+
1. **Release ZIP.** Each GitHub Release publishes `find-my-session-skill.zip`. Download it from the [latest release](https://github.com/SomeNoneAI/find-my-session/releases/latest), then install it into your harness (for example, upload it in Qoder Desktop under **Extensions → Skills**, or unzip it and link the directory into your harness's skills folder).
|
|
66
|
+
2. **Source checkout.**
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
git clone https://github.com/SomeNoneAI/find-my-session.git
|
|
70
|
+
cd find-my-session
|
|
71
|
+
qoderclicn skills link "$PWD/skills/find-my-session" # Qoder CN CLI; Claude Code: symlink into ~/.claude/skills
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
From a checkout you can also run the CLI directly as `python3 skills/find-my-session/scripts/fms`, or run `python3 tools/build_artifacts.py` to build `dist/find-my-session-skill.zip` yourself. To remove a linked skill, delete its symlink from the harness's skills folder.
|
|
75
|
+
|
|
76
|
+
### For humans: the UI panel
|
|
77
|
+
|
|
78
|
+
1. **Release ZIP.** Download `find-my-session-ui.zip` from the [latest release](https://github.com/SomeNoneAI/find-my-session/releases/latest), extract it, and run `python3 fms-ui` from the extracted directory (or `./fms-ui` when your extractor preserves executable bits). Replace that directory to upgrade or delete it to uninstall.
|
|
79
|
+
2. **pipx.** The same pipx install above provides the `fms-ui` command.
|
|
80
|
+
3. **Source checkout.** Run `fms_ui/fms-ui` (use `--no-browser --port 8765` to pick a port without opening a browser).
|
|
81
|
+
|
|
82
|
+
The panel starts a read-only server on `127.0.0.1` with keyword and metadata filters, session overviews, paged user prompts, recent turns, and copyable refs. The static frontend uses only same-origin JSON APIs — no Node.js, no external assets. Language follows the local system, with an explicit zh/en switch. The interface also follows the system light/dark preference, with a manual toggle and a non-black dark palette. The frontend is built with Vue 3 + TypeScript + Vite; Node.js is needed only when developing it from `fms_ui/frontend/`, never to run the panel.
|
|
83
|
+
|
|
84
|
+
## Quick start
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
fms harnesses # list ready and planned harnesses
|
|
88
|
+
fms search "quota handoff" --harness kimi-code # find sessions by keywords
|
|
89
|
+
fms latest --harness kimi-code --cwd . # most recent session in this repo
|
|
90
|
+
fms show kimi-code:e5f6a7b8 # low-token handoff digest
|
|
91
|
+
fms prompts kimi-code:e5f6a7b8 --count # count human prompts, then page with --limit/--offset
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Search prefers an explicit `--harness`; omit the query to list recent sessions. Archived sessions are excluded from `search`/`latest` unless `--include-archived` is passed. `show` stays read-only and prints the raw source path so an agent can grep the original file when the digest is not enough.
|
|
95
|
+
|
|
96
|
+
## Commands
|
|
97
|
+
|
|
98
|
+
| Command | Purpose |
|
|
99
|
+
| --- | --- |
|
|
100
|
+
| `fms harnesses` | List ready and planned harnesses, variants, and stores. |
|
|
101
|
+
| `fms search [query ...]` | Search session metadata by keywords; omit the query to list recent sessions. |
|
|
102
|
+
| `fms latest` | Return the most recent matching session. |
|
|
103
|
+
| `fms show <ref>` | Print a handoff digest for one session. |
|
|
104
|
+
| `fms prompts <ref>` | List every human prompt in one session; count, page, and order them. |
|
|
105
|
+
| `fms doctor [--harness] [--json] [--fingerprint]` | Check the local environment and stores (decoder availability, readable roots, per-harness health); `--fingerprint` adds a content-free shape summary for drift reports. |
|
|
106
|
+
|
|
107
|
+
## Useful options
|
|
108
|
+
|
|
109
|
+
| Option | Applies to | Meaning |
|
|
110
|
+
| --- | --- | --- |
|
|
111
|
+
| `--harness NAME[,NAME]` | search, latest, show, prompts, doctor | Restrict lookup to a harness. Recommended for speed and precision. |
|
|
112
|
+
| `--cwd PATH` | search, latest | Match a session whose working directory contains, or is contained by, `PATH`. |
|
|
113
|
+
| `--since 7d` / `--since 2026-10-01` | search, latest | Filter by last update time. |
|
|
114
|
+
| `--limit N` | search, latest, prompts | Limit results or prompts; `0` means unlimited. |
|
|
115
|
+
| `--offset N` | prompts | Skip the first N prompts. |
|
|
116
|
+
| `--order oldest/newest` | prompts | Page order; original indices are preserved. |
|
|
117
|
+
| `--count` | prompts | Print only the total prompt count. |
|
|
118
|
+
| `--deep` | search, latest | Also scan full transcripts. Slower; still prints metadata only. |
|
|
119
|
+
| `--include-archived` | search, latest | Include archived sessions. Off by default. |
|
|
120
|
+
| `--verbose` | search, latest | Warn about skipped sessions on stderr without changing stdout. |
|
|
121
|
+
| `--messages N` / `--chars N` / `--summary-chars N` | show | Cap turns, per-message characters, and summary characters. |
|
|
122
|
+
| `--json` | harnesses, search, latest, prompts, doctor | Machine-readable output; use `--format json` for `show`. See [docs/json-output.md](docs/json-output.md) for the field contract. |
|
|
123
|
+
|
|
124
|
+
Session references use `harness:session-prefix` (for example `kimi-code:e5f6a7b8`); a raw transcript path from a supported store works too. Desktop/CLI surfaces that share one store share one ref space — see the [compatibility matrix](docs/compatibility.md) for which surfaces are verified.
|
|
125
|
+
|
|
126
|
+
## Privacy and safety
|
|
127
|
+
|
|
128
|
+
- Everything runs locally; the CLI makes no network requests.
|
|
129
|
+
- The CLI only reads session files and databases, opening SQLite stores read-only; it never edits or deletes session content.
|
|
130
|
+
- Search output is metadata-only; `show` and `prompts` can print conversation content, so treat their output like the original transcript.
|
|
131
|
+
|
|
132
|
+
## Development and documentation
|
|
133
|
+
|
|
134
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md) — setup, tests, and how to add or verify a harness.
|
|
135
|
+
- [docs/compatibility.md](docs/compatibility.md) — the detailed, per-harness compatibility matrix.
|
|
136
|
+
- [docs/json-output.md](docs/json-output.md) — the `--json` field contract and pre-1.0 stability policy.
|
|
137
|
+
- [ROADMAP.md](ROADMAP.md) — near-term plans.
|
|
138
|
+
- [SECURITY.md](SECURITY.md) — supported versions and private vulnerability reporting.
|
|
139
|
+
- [skills/find-my-session/references/](skills/find-my-session/references/) — per-harness store schemas and verification recipes; start with [extending.md](skills/find-my-session/references/extending.md) to add a harness.
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
python3 -m unittest discover -s tests -v
|
|
143
|
+
python3 -m compileall -q core fms_ui skills/find-my-session/scripts tools tests
|
|
144
|
+
python3 tools/build_artifacts.py # rebuild dist/find-my-session-skill(.zip) and dist/find-my-session-ui(.zip)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## License
|
|
148
|
+
|
|
149
|
+
MIT. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.1"
|