memorysync-cli 1.6.0__tar.gz → 1.6.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.
Files changed (28) hide show
  1. memorysync_cli-1.6.1/.gitignore +15 -0
  2. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/LICENSE +21 -21
  3. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/PKG-INFO +1 -1
  4. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/README.md +159 -159
  5. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/pyproject.toml +79 -79
  6. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/__init__.py +13 -13
  7. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/__main__.py +9 -9
  8. memorysync_cli-1.6.1/src/memorysync_cli/_version.py +1 -0
  9. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/args.py +231 -231
  10. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/commands/__init__.py +6 -6
  11. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/commands/admin.py +586 -586
  12. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/commands/init.py +360 -355
  13. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/commands/memory.py +30 -1
  14. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/commands/source.py +132 -132
  15. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/commands/tooling.py +238 -238
  16. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/completions.py +150 -150
  17. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/config.py +213 -213
  18. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/credentials.py +301 -301
  19. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/errors.py +124 -124
  20. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/evaluation.py +54 -54
  21. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/http.py +568 -557
  22. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/main.py +403 -403
  23. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/output.py +358 -358
  24. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/registry.py +101 -101
  25. memorysync_cli-1.6.0/.gitignore +0 -66
  26. memorysync_cli-1.6.0/src/memorysync_cli/_version.py +0 -1
  27. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/commands/migrate.py +0 -0
  28. {memorysync_cli-1.6.0 → memorysync_cli-1.6.1}/src/memorysync_cli/registry.json +0 -0
@@ -0,0 +1,15 @@
1
+ *.iml
2
+ .gradle
3
+ /local.properties
4
+ /.idea/caches
5
+ /.idea/libraries
6
+ /.idea/modules.xml
7
+ /.idea/workspace.xml
8
+ /.idea/navEditor.xml
9
+ /.idea/assetWizardSettings.xml
10
+ .DS_Store
11
+ /build
12
+ /captures
13
+ .externalNativeBuild
14
+ .cxx
15
+ local.properties
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 MemorySync
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.
1
+ MIT License
2
+
3
+ Copyright (c) 2025 MemorySync
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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: memorysync-cli
3
- Version: 1.6.0
3
+ Version: 1.6.1
4
4
  Summary: MemorySync from your terminal. Zero dependencies.
5
5
  Project-URL: Documentation, https://docs.memorysync.io/cli
6
6
  Project-URL: Homepage, https://memorysync.io/cli
@@ -1,159 +1,159 @@
1
- # memorysync-cli (Python)
2
-
3
- MemorySync from your terminal. Zero dependencies.
4
-
5
- The same CLI as the npm package `memorysync-cli`, implemented in Python. Same 21
6
- commands, same flags, same output formats, same exit codes. The two are
7
- interchangeable, so you only need one.
8
-
9
- ```bash
10
- pipx install memorysync-cli
11
- ```
12
-
13
- `pipx` is recommended because this is an application rather than a library. `pip
14
- install` works too, but outside a virtual environment it fails on
15
- externally-managed Pythons — Homebrew and most Linux distributions — with
16
- `externally-managed-environment` ([PEP 668](https://peps.python.org/pep-0668/)).
17
-
18
- Requires Python 3.9 or newer.
19
-
20
- ### `memorysync: command not found` after installing
21
-
22
- The install worked; your shell cannot see the directory `pipx` puts binaries in.
23
- Run `pipx ensurepath`, then reopen the terminal. Or invoke it by full path —
24
- `pipx list` prints the location.
25
-
26
- To skip `PATH` entirely:
27
-
28
- ```bash
29
- pipx run --spec memorysync-cli memorysync <command>
30
- ```
31
-
32
- `--spec` is needed because `pipx run memorysync-cli` looks for a console script
33
- named after the package, and this package's scripts are `memorysync` and `msync`.
34
-
35
- ### Both CLIs installed? Only one `memorysync` can win
36
-
37
- The npm package installs the same two command names, so whichever directory comes
38
- first on `PATH` answers. To run *this* one specifically, use the full path from
39
- `pipx list`, or `pipx run --spec` as above.
40
-
41
- `python -m memorysync_cli` works only when the package is installed into that
42
- interpreter with `pip install`. After a `pipx` install it will report
43
- `No module named memorysync_cli`, because pipx deliberately isolates the package
44
- in its own virtualenv.
45
-
46
- ## Getting started
47
-
48
- ```bash
49
- memorysync init # store a key, pick a default user
50
- memorysync add "Prefers pnpm" --user alice
51
- memorysync search "package manager" --user alice
52
- memorysync quota # how much of the plan is left
53
- ```
54
-
55
- Both `memorysync` and `msync` are installed; `msync` is just shorter.
56
-
57
- ## Parity is enforced, not promised
58
-
59
- Both CLIs read one generated command tree, so `help --json` is byte-identical
60
- between them. The test suite runs both and compares stdout for every offline
61
- command, including all four completion scripts, and compares exit codes for each
62
- failure mode. A command added to one and not the other fails the build.
63
-
64
- That matters because the alternative does not hold. Mem0 ships a Node and a Python
65
- CLI and documents them as identical; their Python CLI answers `help --json` with
66
- twelve commands while their Node CLI answers with a name, a version and a
67
- description and no commands at all, and the two sit on different versions.
68
-
69
- ## Zero dependencies
70
-
71
- `argparse`, `urllib.request` and `json` cover everything. Mem0's Python CLI depends
72
- on httpx, rich and typer.
73
-
74
- Every dependency is code on a customer's machine that they cannot audit on our
75
- behalf, which matters more for a closed-source tool because nobody else is reading
76
- our lockfile. A table and eight colours do not justify it.
77
-
78
- ## Agent mode
79
-
80
- Pass `--json` (or `--agent`) before the command for one JSON envelope, no colour,
81
- no spinners, errors as JSON with a non-zero exit:
82
-
83
- ```bash
84
- memorysync --json search "preferences" --user alice
85
- ```
86
-
87
- `data` is always a list, for every command. An agent parses one shape rather than
88
- remembering which commands return an object.
89
-
90
- ```bash
91
- memorysync help --json # the whole command tree, for self-discovery
92
- ```
93
-
94
- ## Exit codes
95
-
96
- A script can branch on the cause rather than parsing prose.
97
-
98
- | Code | Meaning |
99
- |------|---------|
100
- | 0 | Success |
101
- | 1 | Unclassified failure |
102
- | 2 | Usage: unknown command, bad flag, bad value |
103
- | 3 | Auth: missing, expired or revoked credentials |
104
- | 4 | Quota: a plan limit is reached |
105
- | 5 | Network: unreachable or timed out |
106
- | 6 | Not found |
107
- | 130 | Interrupted |
108
-
109
- Code 4 earns its place. Over a plan limit the API returns success with an empty
110
- result rather than an error, deliberately, so an assistant never narrates billing
111
- state to an end user. From a terminal that silence is unhelpful, so the CLI reads
112
- usage and turns it into a distinct code — otherwise an exhausted plan is
113
- indistinguishable from an empty database.
114
-
115
- ## Where your key is stored
116
-
117
- Never in the config file. In order: `MEMORYSYNC_API_KEY`, then the OS keychain,
118
- then an owner-only encrypted file.
119
-
120
- | Platform | Storage |
121
- |---|---|
122
- | macOS | Keychain, via `security` |
123
- | Linux | Keyring, via `secret-tool`, when libsecret is present |
124
- | Windows | Owner-only encrypted file |
125
-
126
- Windows has no scriptable Credential Manager path that avoids a dependency, so it
127
- uses the file tier. That is the same on the Node CLI. The file is `0600` and its
128
- contents are tied to the machine and user, which stops a casual `cat` or a backup
129
- scraper; anyone who can already run code as you can read it. The keychain is
130
- better, which is why it is tried first.
131
-
132
- ## Deleting
133
-
134
- `delete` is two-step by default: without `--yes` it previews and changes nothing.
135
-
136
- `delete --all` clears that one end user's memories and nothing else. No form of any
137
- command can delete an account, a project or an API key.
138
-
139
- To clear every memory for an end user through the API directly, use a wide filter
140
- on `DELETE /memory/forget`, for example `{"before": "<now>"}`. Not
141
- `/memory/user/purge`: despite its path it is not end-user scoped and erases the
142
- account behind the credential.
143
-
144
- ## Environment variables
145
-
146
- | Variable | Purpose |
147
- |---|---|
148
- | `MEMORYSYNC_API_KEY` | Key, highest priority |
149
- | `MEMORYSYNC_BASE_URL` | API base URL |
150
- | `MEMORYSYNC_USER` | Default end user |
151
- | `MEMORYSYNC_PROJECT` | Default project |
152
- | `MEMORYSYNC_PROFILE` | Named profile |
153
- | `MEMORYSYNC_OUTPUT` | Default output format |
154
- | `MEMORYSYNC_CONFIG_DIR` | Where config and credentials live |
155
- | `NO_COLOR` | Disable colour |
156
-
157
- ## Documentation
158
-
159
- <https://docs.memorysync.io/cli>
1
+ # memorysync-cli (Python)
2
+
3
+ MemorySync from your terminal. Zero dependencies.
4
+
5
+ The same CLI as the npm package `memorysync-cli`, implemented in Python. Same 21
6
+ commands, same flags, same output formats, same exit codes. The two are
7
+ interchangeable, so you only need one.
8
+
9
+ ```bash
10
+ pipx install memorysync-cli
11
+ ```
12
+
13
+ `pipx` is recommended because this is an application rather than a library. `pip
14
+ install` works too, but outside a virtual environment it fails on
15
+ externally-managed Pythons — Homebrew and most Linux distributions — with
16
+ `externally-managed-environment` ([PEP 668](https://peps.python.org/pep-0668/)).
17
+
18
+ Requires Python 3.9 or newer.
19
+
20
+ ### `memorysync: command not found` after installing
21
+
22
+ The install worked; your shell cannot see the directory `pipx` puts binaries in.
23
+ Run `pipx ensurepath`, then reopen the terminal. Or invoke it by full path —
24
+ `pipx list` prints the location.
25
+
26
+ To skip `PATH` entirely:
27
+
28
+ ```bash
29
+ pipx run --spec memorysync-cli memorysync <command>
30
+ ```
31
+
32
+ `--spec` is needed because `pipx run memorysync-cli` looks for a console script
33
+ named after the package, and this package's scripts are `memorysync` and `msync`.
34
+
35
+ ### Both CLIs installed? Only one `memorysync` can win
36
+
37
+ The npm package installs the same two command names, so whichever directory comes
38
+ first on `PATH` answers. To run *this* one specifically, use the full path from
39
+ `pipx list`, or `pipx run --spec` as above.
40
+
41
+ `python -m memorysync_cli` works only when the package is installed into that
42
+ interpreter with `pip install`. After a `pipx` install it will report
43
+ `No module named memorysync_cli`, because pipx deliberately isolates the package
44
+ in its own virtualenv.
45
+
46
+ ## Getting started
47
+
48
+ ```bash
49
+ memorysync init # store a key, pick a default user
50
+ memorysync add "Prefers pnpm" --user alice
51
+ memorysync search "package manager" --user alice
52
+ memorysync quota # how much of the plan is left
53
+ ```
54
+
55
+ Both `memorysync` and `msync` are installed; `msync` is just shorter.
56
+
57
+ ## Parity is enforced, not promised
58
+
59
+ Both CLIs read one generated command tree, so `help --json` is byte-identical
60
+ between them. The test suite runs both and compares stdout for every offline
61
+ command, including all four completion scripts, and compares exit codes for each
62
+ failure mode. A command added to one and not the other fails the build.
63
+
64
+ That matters because the alternative does not hold. Mem0 ships a Node and a Python
65
+ CLI and documents them as identical; their Python CLI answers `help --json` with
66
+ twelve commands while their Node CLI answers with a name, a version and a
67
+ description and no commands at all, and the two sit on different versions.
68
+
69
+ ## Zero dependencies
70
+
71
+ `argparse`, `urllib.request` and `json` cover everything. Mem0's Python CLI depends
72
+ on httpx, rich and typer.
73
+
74
+ Every dependency is code on a customer's machine that they cannot audit on our
75
+ behalf, which matters more for a closed-source tool because nobody else is reading
76
+ our lockfile. A table and eight colours do not justify it.
77
+
78
+ ## Agent mode
79
+
80
+ Pass `--json` (or `--agent`) before the command for one JSON envelope, no colour,
81
+ no spinners, errors as JSON with a non-zero exit:
82
+
83
+ ```bash
84
+ memorysync --json search "preferences" --user alice
85
+ ```
86
+
87
+ `data` is always a list, for every command. An agent parses one shape rather than
88
+ remembering which commands return an object.
89
+
90
+ ```bash
91
+ memorysync help --json # the whole command tree, for self-discovery
92
+ ```
93
+
94
+ ## Exit codes
95
+
96
+ A script can branch on the cause rather than parsing prose.
97
+
98
+ | Code | Meaning |
99
+ |------|---------|
100
+ | 0 | Success |
101
+ | 1 | Unclassified failure |
102
+ | 2 | Usage: unknown command, bad flag, bad value |
103
+ | 3 | Auth: missing, expired or revoked credentials |
104
+ | 4 | Quota: a plan limit is reached |
105
+ | 5 | Network: unreachable or timed out |
106
+ | 6 | Not found |
107
+ | 130 | Interrupted |
108
+
109
+ Code 4 earns its place. Over a plan limit the API returns success with an empty
110
+ result rather than an error, deliberately, so an assistant never narrates billing
111
+ state to an end user. From a terminal that silence is unhelpful, so the CLI reads
112
+ usage and turns it into a distinct code — otherwise an exhausted plan is
113
+ indistinguishable from an empty database.
114
+
115
+ ## Where your key is stored
116
+
117
+ Never in the config file. In order: `MEMORYSYNC_API_KEY`, then the OS keychain,
118
+ then an owner-only encrypted file.
119
+
120
+ | Platform | Storage |
121
+ |---|---|
122
+ | macOS | Keychain, via `security` |
123
+ | Linux | Keyring, via `secret-tool`, when libsecret is present |
124
+ | Windows | Owner-only encrypted file |
125
+
126
+ Windows has no scriptable Credential Manager path that avoids a dependency, so it
127
+ uses the file tier. That is the same on the Node CLI. The file is `0600` and its
128
+ contents are tied to the machine and user, which stops a casual `cat` or a backup
129
+ scraper; anyone who can already run code as you can read it. The keychain is
130
+ better, which is why it is tried first.
131
+
132
+ ## Deleting
133
+
134
+ `delete` is two-step by default: without `--yes` it previews and changes nothing.
135
+
136
+ `delete --all` clears that one end user's memories and nothing else. No form of any
137
+ command can delete an account, a project or an API key.
138
+
139
+ To clear every memory for an end user through the API directly, use a wide filter
140
+ on `DELETE /memory/forget`, for example `{"before": "<now>"}`. Not
141
+ `/memory/user/purge`: despite its path it is not end-user scoped and erases the
142
+ account behind the credential.
143
+
144
+ ## Environment variables
145
+
146
+ | Variable | Purpose |
147
+ |---|---|
148
+ | `MEMORYSYNC_API_KEY` | Key, highest priority |
149
+ | `MEMORYSYNC_BASE_URL` | API base URL |
150
+ | `MEMORYSYNC_USER` | Default end user |
151
+ | `MEMORYSYNC_PROJECT` | Default project |
152
+ | `MEMORYSYNC_PROFILE` | Named profile |
153
+ | `MEMORYSYNC_OUTPUT` | Default output format |
154
+ | `MEMORYSYNC_CONFIG_DIR` | Where config and credentials live |
155
+ | `NO_COLOR` | Disable colour |
156
+
157
+ ## Documentation
158
+
159
+ <https://docs.memorysync.io/cli>
@@ -1,79 +1,79 @@
1
- [build-system]
2
- requires = ["hatchling"]
3
- build-backend = "hatchling.build"
4
-
5
- [project]
6
- name = "memorysync-cli"
7
- # Taken from _version.py rather than written here. The Node CLI shipped 1.0.1
8
- # reporting 1.0.0 because the number lived in two places and one was bumped, and
9
- # the Python SDK shipped 1.7.1 reporting 1.7.0 for the same reason. One source.
10
- dynamic = ["version"]
11
- description = "MemorySync from your terminal. Zero dependencies."
12
- readme = "README.md"
13
- license = { text = "MIT" }
14
- # 3.9, matching the memorysync SDK. Mem0's CLI requires 3.10+, so this reaches
15
- # one more Python version than the only competitor shipping a Python CLI.
16
- requires-python = ">=3.9"
17
- authors = [{ name = "MemorySync" }]
18
- keywords = [
19
- "memorysync",
20
- "memory",
21
- "cli",
22
- "agent-memory",
23
- "long-term-memory",
24
- "ai-agents",
25
- "llm",
26
- "terminal",
27
- ]
28
- classifiers = [
29
- "Development Status :: 5 - Production/Stable",
30
- "Environment :: Console",
31
- "Intended Audience :: Developers",
32
- "License :: OSI Approved :: MIT License",
33
- "Programming Language :: Python :: 3",
34
- "Programming Language :: Python :: 3.9",
35
- "Programming Language :: Python :: 3.10",
36
- "Programming Language :: Python :: 3.11",
37
- "Programming Language :: Python :: 3.12",
38
- "Programming Language :: Python :: 3.13",
39
- "Topic :: Software Development :: Libraries",
40
- "Topic :: Utilities",
41
- ]
42
-
43
- # Deliberately empty.
44
- #
45
- # Mem0's Python CLI depends on httpx, rich and typer; their Node CLI on
46
- # commander, chalk, cli-table3, ora and boxen. Every one of those is code we would
47
- # be putting on a customer's machine that they cannot audit on our behalf, which
48
- # matters more for a closed-source tool because nobody else is reading our
49
- # lockfile. argparse, urllib.request and json cover all of it.
50
- dependencies = []
51
-
52
- [project.urls]
53
- Documentation = "https://docs.memorysync.io/cli"
54
- Homepage = "https://memorysync.io/cli"
55
-
56
- [project.scripts]
57
- # Both names, matching the Node CLI. The two implementations are interchangeable,
58
- # so whichever is on PATH behaves identically and nobody needs both.
59
- memorysync = "memorysync_cli.main:run"
60
- msync = "memorysync_cli.main:run"
61
-
62
- [tool.hatch.version]
63
- path = "src/memorysync_cli/_version.py"
64
-
65
- [tool.hatch.build.targets.wheel]
66
- packages = ["src/memorysync_cli"]
67
-
68
- [tool.hatch.build.targets.wheel.force-include]
69
- # registry.json is generated from the Node CLI and must be in the wheel: it is
70
- # the command surface, read at runtime, not a build-time convenience.
71
- "src/memorysync_cli/registry.json" = "memorysync_cli/registry.json"
72
-
73
- [tool.hatch.build.targets.sdist]
74
- include = [
75
- "src/memorysync_cli",
76
- "README.md",
77
- "LICENSE",
78
- "pyproject.toml",
79
- ]
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "memorysync-cli"
7
+ # Taken from _version.py rather than written here. The Node CLI shipped 1.0.1
8
+ # reporting 1.0.0 because the number lived in two places and one was bumped, and
9
+ # the Python SDK shipped 1.7.1 reporting 1.7.0 for the same reason. One source.
10
+ dynamic = ["version"]
11
+ description = "MemorySync from your terminal. Zero dependencies."
12
+ readme = "README.md"
13
+ license = { text = "MIT" }
14
+ # 3.9, matching the memorysync SDK. Mem0's CLI requires 3.10+, so this reaches
15
+ # one more Python version than the only competitor shipping a Python CLI.
16
+ requires-python = ">=3.9"
17
+ authors = [{ name = "MemorySync" }]
18
+ keywords = [
19
+ "memorysync",
20
+ "memory",
21
+ "cli",
22
+ "agent-memory",
23
+ "long-term-memory",
24
+ "ai-agents",
25
+ "llm",
26
+ "terminal",
27
+ ]
28
+ classifiers = [
29
+ "Development Status :: 5 - Production/Stable",
30
+ "Environment :: Console",
31
+ "Intended Audience :: Developers",
32
+ "License :: OSI Approved :: MIT License",
33
+ "Programming Language :: Python :: 3",
34
+ "Programming Language :: Python :: 3.9",
35
+ "Programming Language :: Python :: 3.10",
36
+ "Programming Language :: Python :: 3.11",
37
+ "Programming Language :: Python :: 3.12",
38
+ "Programming Language :: Python :: 3.13",
39
+ "Topic :: Software Development :: Libraries",
40
+ "Topic :: Utilities",
41
+ ]
42
+
43
+ # Deliberately empty.
44
+ #
45
+ # Mem0's Python CLI depends on httpx, rich and typer; their Node CLI on
46
+ # commander, chalk, cli-table3, ora and boxen. Every one of those is code we would
47
+ # be putting on a customer's machine that they cannot audit on our behalf, which
48
+ # matters more for a closed-source tool because nobody else is reading our
49
+ # lockfile. argparse, urllib.request and json cover all of it.
50
+ dependencies = []
51
+
52
+ [project.urls]
53
+ Documentation = "https://docs.memorysync.io/cli"
54
+ Homepage = "https://memorysync.io/cli"
55
+
56
+ [project.scripts]
57
+ # Both names, matching the Node CLI. The two implementations are interchangeable,
58
+ # so whichever is on PATH behaves identically and nobody needs both.
59
+ memorysync = "memorysync_cli.main:run"
60
+ msync = "memorysync_cli.main:run"
61
+
62
+ [tool.hatch.version]
63
+ path = "src/memorysync_cli/_version.py"
64
+
65
+ [tool.hatch.build.targets.wheel]
66
+ packages = ["src/memorysync_cli"]
67
+
68
+ [tool.hatch.build.targets.wheel.force-include]
69
+ # registry.json is generated from the Node CLI and must be in the wheel: it is
70
+ # the command surface, read at runtime, not a build-time convenience.
71
+ "src/memorysync_cli/registry.json" = "memorysync_cli/registry.json"
72
+
73
+ [tool.hatch.build.targets.sdist]
74
+ include = [
75
+ "src/memorysync_cli",
76
+ "README.md",
77
+ "LICENSE",
78
+ "pyproject.toml",
79
+ ]
@@ -1,13 +1,13 @@
1
- """MemorySync command-line interface.
2
-
3
- A Python implementation of the same CLI as the npm package ``memorysync-cli``,
4
- with the same commands, flags, output formats and exit codes. The two are
5
- interchangeable: whichever is on PATH behaves identically, so you only need one.
6
-
7
- Both read their command surface from one generated declaration, so ``help --json``
8
- is byte-identical between them rather than kept aligned by review.
9
- """
10
-
11
- from ._version import __version__
12
-
13
- __all__ = ["__version__"]
1
+ """MemorySync command-line interface.
2
+
3
+ A Python implementation of the same CLI as the npm package ``memorysync-cli``,
4
+ with the same commands, flags, output formats and exit codes. The two are
5
+ interchangeable: whichever is on PATH behaves identically, so you only need one.
6
+
7
+ Both read their command surface from one generated declaration, so ``help --json``
8
+ is byte-identical between them rather than kept aligned by review.
9
+ """
10
+
11
+ from ._version import __version__
12
+
13
+ __all__ = ["__version__"]
@@ -1,9 +1,9 @@
1
- """Allow ``python -m memorysync_cli`` alongside the installed console scripts.
2
-
3
- Useful during development and in environments where a wheel's scripts directory is
4
- not on PATH, which is common inside CI containers.
5
- """
6
-
7
- from .main import run
8
-
9
- run()
1
+ """Allow ``python -m memorysync_cli`` alongside the installed console scripts.
2
+
3
+ Useful during development and in environments where a wheel's scripts directory is
4
+ not on PATH, which is common inside CI containers.
5
+ """
6
+
7
+ from .main import run
8
+
9
+ run()
@@ -0,0 +1 @@
1
+ __version__ = "1.6.1"