sessionkit 0.2.1__tar.gz → 0.3.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.
- {sessionkit-0.2.1 → sessionkit-0.3.0}/PKG-INFO +66 -24
- {sessionkit-0.2.1 → sessionkit-0.3.0}/README.md +60 -18
- sessionkit-0.2.1/pyproject.toml.orig → sessionkit-0.3.0/pyproject.toml +12 -14
- {sessionkit-0.2.1 → sessionkit-0.3.0}/src/sessionkit/cli.py +4 -0
- {sessionkit-0.2.1 → sessionkit-0.3.0}/src/sessionkit/setup.py +39 -4
- sessionkit-0.2.1/pyproject.toml +0 -54
- {sessionkit-0.2.1 → sessionkit-0.3.0}/LICENSE +0 -0
- {sessionkit-0.2.1 → sessionkit-0.3.0}/src/sessionkit/__init__.py +0 -0
- {sessionkit-0.2.1 → sessionkit-0.3.0}/src/sessionkit/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sessionkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Session Kit gives your Claude Code sessions voice, mail, a phone line and a tmux sidebar, in one install.
|
|
5
5
|
Author: Mike Bailey
|
|
6
6
|
Author-email: Mike Bailey <mike@sessionkit.ai>
|
|
@@ -8,11 +8,11 @@ License-Expression: AGPL-3.0-or-later
|
|
|
8
8
|
License-File: LICENSE
|
|
9
9
|
Classifier: Development Status :: 3 - Alpha
|
|
10
10
|
Requires-Dist: click>=8.1
|
|
11
|
-
Requires-Dist: sessionmail>=0.
|
|
12
|
-
Requires-Dist: sessiontools>=0.
|
|
13
|
-
Requires-Dist: sessionphone[media]>=0.
|
|
14
|
-
Requires-Dist: sessionview>=0.
|
|
15
|
-
Requires-Dist: sessionvoice[capture]>=0.
|
|
11
|
+
Requires-Dist: sessionmail>=0.3.0
|
|
12
|
+
Requires-Dist: sessiontools>=0.3.0
|
|
13
|
+
Requires-Dist: sessionphone[media]>=0.3.0
|
|
14
|
+
Requires-Dist: sessionview>=0.3.0
|
|
15
|
+
Requires-Dist: sessionvoice[capture]>=0.3.0
|
|
16
16
|
Requires-Python: >=3.11, <3.15
|
|
17
17
|
Project-URL: Homepage, https://github.com/sessionkit/sessionkit
|
|
18
18
|
Project-URL: Repository, https://github.com/sessionkit/sessionkit
|
|
@@ -26,9 +26,14 @@ Code plugins.
|
|
|
26
26
|
|
|
27
27
|
## Installation
|
|
28
28
|
|
|
29
|
-
You need macOS
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
You need macOS, [Claude Code][claude-code], and [Homebrew][brew] or at
|
|
30
|
+
least Apple's Command Line Tools. Homebrew installs the Command Line Tools
|
|
31
|
+
for you ([prerequisites][prereqs]), and the kit needs two of their tools:
|
|
32
|
+
the plugin lines clone with git, and the ears build a Swift helper with
|
|
33
|
+
`swiftc`. Without Homebrew, run `xcode-select --install` to get the Command
|
|
34
|
+
Line Tools alone. If you do not have uv yet, install it with
|
|
35
|
+
`curl -LsSf https://astral.sh/uv/install.sh | sh`, then open a new terminal
|
|
36
|
+
(or run `source ~/.local/bin/env`).
|
|
32
37
|
|
|
33
38
|
```bash
|
|
34
39
|
uv tool install --python 3.14 sessionkit
|
|
@@ -37,18 +42,42 @@ claude plugin install sessionkit@sessionkit
|
|
|
37
42
|
```
|
|
38
43
|
|
|
39
44
|
The first line puts the commands on your PATH. The other two install the
|
|
40
|
-
kit's plugin and the five family plugins it depends on.
|
|
41
|
-
(or restart it) to load them.
|
|
45
|
+
kit's plugin and the five family plugins it depends on.
|
|
42
46
|
|
|
43
47
|
- **Keep `--python 3.14`.** Without it, uv takes the Python it finds: 3.15,
|
|
44
48
|
where a voice library has no build yet and the install fails, or the
|
|
45
49
|
Command Line Tools' 3.11. The kit is tested on 3.14.
|
|
50
|
+
- **Upgrade with `uv tool upgrade sessionkit`.** It keeps the Python the
|
|
51
|
+
install chose. To reinstall, give the pin again:
|
|
52
|
+
`uv tool install --python 3.14 --reinstall sessionkit`. Without it, uv
|
|
53
|
+
drops the pin from its record, or, with `--force`, builds the kit again on
|
|
54
|
+
the Python it finds.
|
|
46
55
|
- **A dialog may ask to install the Command Line Tools.** On a Mac without
|
|
47
56
|
them, the first `uv tool install` opens it. Click Install and let it
|
|
48
57
|
finish: the plugin lines need the git it brings.
|
|
49
|
-
- **Phone calls are installed,
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
- **Phone calls are installed, and walked for a session started with
|
|
59
|
+
`session start <name>`.** A fresh Mac took a real call and passed. A plain
|
|
60
|
+
`claude` session does not hear calls you make to it yet. Whether the phone
|
|
61
|
+
bot signs its mail to your Claude follows your mail carrier:
|
|
62
|
+
[bot mail signing][phone-signing].
|
|
63
|
+
|
|
64
|
+
**Then quit Claude Code and start it again**, every window of it, before you
|
|
65
|
+
run anything else. A plugin installed from the shell loads only when Claude
|
|
66
|
+
Code starts, so a session that was already open has no plugin commands on
|
|
67
|
+
its PATH, and no plugin hooks.
|
|
68
|
+
|
|
69
|
+
The three lines leave the ears without the model they listen with. Fetch it
|
|
70
|
+
once:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
ears install
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
It downloads the 2.3 MB voice-activity model to
|
|
77
|
+
`~/.cache/ears/silero_vad.onnx` (network, no sudo) and prints `done`. Without
|
|
78
|
+
it the ears cannot hear you, and `ears services install`, the step that
|
|
79
|
+
starts them ([hearing and speaking][hearing]), refuses with
|
|
80
|
+
`silero MISSING`. The Swift helper is built later, when those services start.
|
|
52
81
|
|
|
53
82
|
- **The mail hooks start off.** They tell an agent about new mail between
|
|
54
83
|
its tool calls. To turn them on, set `"hooks": true` in
|
|
@@ -79,12 +108,12 @@ sessionkit --version
|
|
|
79
108
|
It lists the kit and each family package, with its version:
|
|
80
109
|
|
|
81
110
|
```text
|
|
82
|
-
sessionkit, version 0.
|
|
83
|
-
sessionmail 0.
|
|
84
|
-
sessiontools 0.
|
|
85
|
-
sessionphone 0.
|
|
86
|
-
sessionview 0.
|
|
87
|
-
sessionvoice 0.
|
|
111
|
+
sessionkit, version 0.3.0
|
|
112
|
+
sessionmail 0.3.0
|
|
113
|
+
sessiontools 0.3.0
|
|
114
|
+
sessionphone 0.3.0
|
|
115
|
+
sessionview 0.3.0
|
|
116
|
+
sessionvoice 0.3.0
|
|
88
117
|
```
|
|
89
118
|
|
|
90
119
|
Start Claude with `session start claude`, never a bare `claude`: mail to
|
|
@@ -109,6 +138,14 @@ mouth say --device default "the build is green" # speak one line
|
|
|
109
138
|
output; `mouth devices` lists the others.
|
|
110
139
|
- **To hear you**, the ears need a speech-to-text server: [hearing and
|
|
111
140
|
speaking][hearing].
|
|
141
|
+
- **Your agent talks with the kit's mouth and ears.** sessionvoice's ears
|
|
142
|
+
skill sets the default:
|
|
143
|
+
|
|
144
|
+
> **With the kit, an agent talks through the kit's own mouth and ears: it
|
|
145
|
+
> speaks with `mouth say` and listens by arming the ears with `ears-arm`. That
|
|
146
|
+
> is the default whenever the user asks it to talk, speak, listen or use voice,
|
|
147
|
+
> even on a host that also has VoiceMode's `converse` tool. It uses `converse`
|
|
148
|
+
> only when the user asks for converse by name.**
|
|
112
149
|
|
|
113
150
|
## Uninstall
|
|
114
151
|
|
|
@@ -117,8 +154,9 @@ claude plugin marketplace remove sessionkit
|
|
|
117
154
|
uv tool uninstall sessionkit
|
|
118
155
|
```
|
|
119
156
|
|
|
120
|
-
Removing the marketplace removes its six plugins too
|
|
121
|
-
data have their own steps:
|
|
157
|
+
Removing the marketplace removes its six plugins too, but not the copies they
|
|
158
|
+
ran from. Those copies, the services and your data have their own steps:
|
|
159
|
+
[uninstall][uninstall].
|
|
122
160
|
|
|
123
161
|
## Usage
|
|
124
162
|
|
|
@@ -133,7 +171,9 @@ Session Kit installs these together:
|
|
|
133
171
|
- [sessiontools][pkg-tools]: sessions, status and idle. `session`.
|
|
134
172
|
- [sessionvoice][pkg-voice]: ambient voice. `ears` hears; `mouth` speaks.
|
|
135
173
|
- [sessionphone][pkg-phone]: phone calls to a session over Delta Chat.
|
|
136
|
-
Installed,
|
|
174
|
+
Installed, and walked on a fresh Mac for a session started with
|
|
175
|
+
`session start <name>`. A plain `claude` session does not hear calls you
|
|
176
|
+
make to it yet.
|
|
137
177
|
- [sessionview][pkg-view]: a tmux sidebar of your projects and your agents.
|
|
138
178
|
|
|
139
179
|
## Components
|
|
@@ -164,13 +204,15 @@ The rules for changing the kit: [AGENTS.md][agents].
|
|
|
164
204
|
|
|
165
205
|
## Status
|
|
166
206
|
|
|
167
|
-
Alpha, 0.
|
|
207
|
+
Alpha, 0.3.0. Tested on macOS 27 on Apple silicon; Linux and Windows are
|
|
168
208
|
untested. What you may still hit: [known gaps][gaps].
|
|
169
209
|
|
|
170
210
|
Licence: [AGPL-3.0][licence].
|
|
171
211
|
|
|
172
212
|
[claude-code]: https://claude.ai/code
|
|
213
|
+
[brew]: https://brew.sh
|
|
173
214
|
[install]: INSTALL.md
|
|
215
|
+
[prereqs]: INSTALL.md#1-prerequisites-human
|
|
174
216
|
[checks]: INSTALL.md#4-first-checks
|
|
175
217
|
[hearing]: INSTALL.md#5-hearing-and-speaking-it-hears-me-and-speaks
|
|
176
218
|
[mail]: INSTALL.md#mail-between-agents
|
|
@@ -6,9 +6,14 @@ Code plugins.
|
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
9
|
-
You need macOS
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
You need macOS, [Claude Code][claude-code], and [Homebrew][brew] or at
|
|
10
|
+
least Apple's Command Line Tools. Homebrew installs the Command Line Tools
|
|
11
|
+
for you ([prerequisites][prereqs]), and the kit needs two of their tools:
|
|
12
|
+
the plugin lines clone with git, and the ears build a Swift helper with
|
|
13
|
+
`swiftc`. Without Homebrew, run `xcode-select --install` to get the Command
|
|
14
|
+
Line Tools alone. If you do not have uv yet, install it with
|
|
15
|
+
`curl -LsSf https://astral.sh/uv/install.sh | sh`, then open a new terminal
|
|
16
|
+
(or run `source ~/.local/bin/env`).
|
|
12
17
|
|
|
13
18
|
```bash
|
|
14
19
|
uv tool install --python 3.14 sessionkit
|
|
@@ -17,18 +22,42 @@ claude plugin install sessionkit@sessionkit
|
|
|
17
22
|
```
|
|
18
23
|
|
|
19
24
|
The first line puts the commands on your PATH. The other two install the
|
|
20
|
-
kit's plugin and the five family plugins it depends on.
|
|
21
|
-
(or restart it) to load them.
|
|
25
|
+
kit's plugin and the five family plugins it depends on.
|
|
22
26
|
|
|
23
27
|
- **Keep `--python 3.14`.** Without it, uv takes the Python it finds: 3.15,
|
|
24
28
|
where a voice library has no build yet and the install fails, or the
|
|
25
29
|
Command Line Tools' 3.11. The kit is tested on 3.14.
|
|
30
|
+
- **Upgrade with `uv tool upgrade sessionkit`.** It keeps the Python the
|
|
31
|
+
install chose. To reinstall, give the pin again:
|
|
32
|
+
`uv tool install --python 3.14 --reinstall sessionkit`. Without it, uv
|
|
33
|
+
drops the pin from its record, or, with `--force`, builds the kit again on
|
|
34
|
+
the Python it finds.
|
|
26
35
|
- **A dialog may ask to install the Command Line Tools.** On a Mac without
|
|
27
36
|
them, the first `uv tool install` opens it. Click Install and let it
|
|
28
37
|
finish: the plugin lines need the git it brings.
|
|
29
|
-
- **Phone calls are installed,
|
|
30
|
-
|
|
31
|
-
|
|
38
|
+
- **Phone calls are installed, and walked for a session started with
|
|
39
|
+
`session start <name>`.** A fresh Mac took a real call and passed. A plain
|
|
40
|
+
`claude` session does not hear calls you make to it yet. Whether the phone
|
|
41
|
+
bot signs its mail to your Claude follows your mail carrier:
|
|
42
|
+
[bot mail signing][phone-signing].
|
|
43
|
+
|
|
44
|
+
**Then quit Claude Code and start it again**, every window of it, before you
|
|
45
|
+
run anything else. A plugin installed from the shell loads only when Claude
|
|
46
|
+
Code starts, so a session that was already open has no plugin commands on
|
|
47
|
+
its PATH, and no plugin hooks.
|
|
48
|
+
|
|
49
|
+
The three lines leave the ears without the model they listen with. Fetch it
|
|
50
|
+
once:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
ears install
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
It downloads the 2.3 MB voice-activity model to
|
|
57
|
+
`~/.cache/ears/silero_vad.onnx` (network, no sudo) and prints `done`. Without
|
|
58
|
+
it the ears cannot hear you, and `ears services install`, the step that
|
|
59
|
+
starts them ([hearing and speaking][hearing]), refuses with
|
|
60
|
+
`silero MISSING`. The Swift helper is built later, when those services start.
|
|
32
61
|
|
|
33
62
|
- **The mail hooks start off.** They tell an agent about new mail between
|
|
34
63
|
its tool calls. To turn them on, set `"hooks": true` in
|
|
@@ -59,12 +88,12 @@ sessionkit --version
|
|
|
59
88
|
It lists the kit and each family package, with its version:
|
|
60
89
|
|
|
61
90
|
```text
|
|
62
|
-
sessionkit, version 0.
|
|
63
|
-
sessionmail 0.
|
|
64
|
-
sessiontools 0.
|
|
65
|
-
sessionphone 0.
|
|
66
|
-
sessionview 0.
|
|
67
|
-
sessionvoice 0.
|
|
91
|
+
sessionkit, version 0.3.0
|
|
92
|
+
sessionmail 0.3.0
|
|
93
|
+
sessiontools 0.3.0
|
|
94
|
+
sessionphone 0.3.0
|
|
95
|
+
sessionview 0.3.0
|
|
96
|
+
sessionvoice 0.3.0
|
|
68
97
|
```
|
|
69
98
|
|
|
70
99
|
Start Claude with `session start claude`, never a bare `claude`: mail to
|
|
@@ -89,6 +118,14 @@ mouth say --device default "the build is green" # speak one line
|
|
|
89
118
|
output; `mouth devices` lists the others.
|
|
90
119
|
- **To hear you**, the ears need a speech-to-text server: [hearing and
|
|
91
120
|
speaking][hearing].
|
|
121
|
+
- **Your agent talks with the kit's mouth and ears.** sessionvoice's ears
|
|
122
|
+
skill sets the default:
|
|
123
|
+
|
|
124
|
+
> **With the kit, an agent talks through the kit's own mouth and ears: it
|
|
125
|
+
> speaks with `mouth say` and listens by arming the ears with `ears-arm`. That
|
|
126
|
+
> is the default whenever the user asks it to talk, speak, listen or use voice,
|
|
127
|
+
> even on a host that also has VoiceMode's `converse` tool. It uses `converse`
|
|
128
|
+
> only when the user asks for converse by name.**
|
|
92
129
|
|
|
93
130
|
## Uninstall
|
|
94
131
|
|
|
@@ -97,8 +134,9 @@ claude plugin marketplace remove sessionkit
|
|
|
97
134
|
uv tool uninstall sessionkit
|
|
98
135
|
```
|
|
99
136
|
|
|
100
|
-
Removing the marketplace removes its six plugins too
|
|
101
|
-
data have their own steps:
|
|
137
|
+
Removing the marketplace removes its six plugins too, but not the copies they
|
|
138
|
+
ran from. Those copies, the services and your data have their own steps:
|
|
139
|
+
[uninstall][uninstall].
|
|
102
140
|
|
|
103
141
|
## Usage
|
|
104
142
|
|
|
@@ -113,7 +151,9 @@ Session Kit installs these together:
|
|
|
113
151
|
- [sessiontools][pkg-tools]: sessions, status and idle. `session`.
|
|
114
152
|
- [sessionvoice][pkg-voice]: ambient voice. `ears` hears; `mouth` speaks.
|
|
115
153
|
- [sessionphone][pkg-phone]: phone calls to a session over Delta Chat.
|
|
116
|
-
Installed,
|
|
154
|
+
Installed, and walked on a fresh Mac for a session started with
|
|
155
|
+
`session start <name>`. A plain `claude` session does not hear calls you
|
|
156
|
+
make to it yet.
|
|
117
157
|
- [sessionview][pkg-view]: a tmux sidebar of your projects and your agents.
|
|
118
158
|
|
|
119
159
|
## Components
|
|
@@ -144,13 +184,15 @@ The rules for changing the kit: [AGENTS.md][agents].
|
|
|
144
184
|
|
|
145
185
|
## Status
|
|
146
186
|
|
|
147
|
-
Alpha, 0.
|
|
187
|
+
Alpha, 0.3.0. Tested on macOS 27 on Apple silicon; Linux and Windows are
|
|
148
188
|
untested. What you may still hit: [known gaps][gaps].
|
|
149
189
|
|
|
150
190
|
Licence: [AGPL-3.0][licence].
|
|
151
191
|
|
|
152
192
|
[claude-code]: https://claude.ai/code
|
|
193
|
+
[brew]: https://brew.sh
|
|
153
194
|
[install]: INSTALL.md
|
|
195
|
+
[prereqs]: INSTALL.md#1-prerequisites-human
|
|
154
196
|
[checks]: INSTALL.md#4-first-checks
|
|
155
197
|
[hearing]: INSTALL.md#5-hearing-and-speaking-it-hears-me-and-speaks
|
|
156
198
|
[mail]: INSTALL.md#mail-between-agents
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sessionkit"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.0"
|
|
4
4
|
description = "Session Kit gives your Claude Code sessions voice, mail, a phone line and a tmux sidebar, in one install."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "AGPL-3.0-or-later"
|
|
@@ -10,12 +10,10 @@ authors = [
|
|
|
10
10
|
{ name = "Mike Bailey", email = "mike@sessionkit.ai" }
|
|
11
11
|
]
|
|
12
12
|
requires-python = ">=3.11,<3.15"
|
|
13
|
-
# The family, one install. Floored at 0.
|
|
14
|
-
#
|
|
15
|
-
# 0.1
|
|
16
|
-
#
|
|
17
|
-
# drop, phone's 0.2.1 sends unsigned under the drop carrier, and voice's 0.2.1
|
|
18
|
-
# installer sets the drop carrier.
|
|
13
|
+
# The family, one install. Floored at 0.3.0: the kit is released and tested
|
|
14
|
+
# with the family's 0.3.0, so it needs every family package at 0.3.0 or
|
|
15
|
+
# later, and PyPI's 0.0.1 name placeholders and the 0.1.0 alphas must never
|
|
16
|
+
# satisfy these.
|
|
19
17
|
# sessionphone with its media extra: the bot, calls and `sessionphone web` need it.
|
|
20
18
|
# sessionvoice with its capture extra, so the ears can hear the room.
|
|
21
19
|
# This is the RULED list, kept in tests/_ruled_deps.py with the ruling;
|
|
@@ -23,11 +21,11 @@ requires-python = ">=3.11,<3.15"
|
|
|
23
21
|
# uv.lock drift from it.
|
|
24
22
|
dependencies = [
|
|
25
23
|
"click>=8.1",
|
|
26
|
-
"sessionmail>=0.
|
|
27
|
-
"sessiontools>=0.
|
|
28
|
-
"sessionphone[media]>=0.
|
|
29
|
-
"sessionview>=0.
|
|
30
|
-
"sessionvoice[capture]>=0.
|
|
24
|
+
"sessionmail>=0.3.0",
|
|
25
|
+
"sessiontools>=0.3.0",
|
|
26
|
+
"sessionphone[media]>=0.3.0",
|
|
27
|
+
"sessionview>=0.3.0",
|
|
28
|
+
"sessionvoice[capture]>=0.3.0",
|
|
31
29
|
]
|
|
32
30
|
|
|
33
31
|
[project.urls]
|
|
@@ -40,8 +38,8 @@ Repository = "https://github.com/sessionkit/sessionkit"
|
|
|
40
38
|
# `uv tool install sessionkit` would put `sessionkit` alone on the PATH.
|
|
41
39
|
# Each entry point is the child's own target, copied verbatim; re-measure them
|
|
42
40
|
# at each child's HEAD whenever a child adds, renames or drops a command.
|
|
43
|
-
# Measured from each child's
|
|
44
|
-
# tools
|
|
41
|
+
# Measured from each child's 0.3.0 wheel (entry_points.txt), by wheel sha256:
|
|
42
|
+
# mail 8e4d9476, tools 8d089699, phone ac402a39, view 3942f119, voice ebc1b65c.
|
|
45
43
|
# sessionview's four commands share one target: `sessionview:main` reads the
|
|
46
44
|
# name it was run as and runs that command.
|
|
47
45
|
# The kit itself still ships no `session` of its own: `session` below is
|
|
@@ -127,6 +127,10 @@ def setup(mailbox: str | None, address: str | None, agent: str, dry_run: bool) -
|
|
|
127
127
|
layout, is left as it is. It ends with the one launch step:
|
|
128
128
|
`session start NAME`.
|
|
129
129
|
|
|
130
|
+
Before that step it asks `ears backends`, read only. If the ears'
|
|
131
|
+
voice-activity model is missing, it says one line naming `ears install`.
|
|
132
|
+
It never runs `ears install`, and the line never changes the exit.
|
|
133
|
+
|
|
130
134
|
Exit 0 all done, 1 refused or failed, 2 usage, 4 done what it could,
|
|
131
135
|
mail steps left for you. See INSTALL.md, "Operator and administrators"
|
|
132
136
|
and "Mail between agents".
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"""`sessionkit setup`: make this host's mail ready, write the operator, then
|
|
2
2
|
define the assistant (`run_agent`: the file `session start NAME` resolves, and
|
|
3
|
-
the box it hears, so a seat started that way hears mail to NAME).
|
|
3
|
+
the box it hears, so a seat started that way hears mail to NAME). Last, it
|
|
4
|
+
asks `ears backends` whether the ears' model is there, and says so when it is
|
|
5
|
+
not (`ears_model_missing`): read only, never `ears install`, never the exit.
|
|
4
6
|
|
|
5
7
|
Mail first. sessionmail's mail setup verb (argv in `MAIL_SETUP_ARGV`) makes
|
|
6
8
|
the mail root and the first boxes, the operator's box among them, and the
|
|
@@ -636,6 +638,34 @@ def run_agent(
|
|
|
636
638
|
return Outcome(EXIT_OK, lines)
|
|
637
639
|
|
|
638
640
|
|
|
641
|
+
# --- the ears' model: read, never fetched -------------------------------------
|
|
642
|
+
|
|
643
|
+
# sessionvoice's read-only probe. Its last line is `silero ok: PATH` or
|
|
644
|
+
# `silero no model: ears install` (sessionvoice 0.2.1, `ears backends`).
|
|
645
|
+
EARS_BACKENDS_ARGV = ("ears", "backends")
|
|
646
|
+
# The probe answers in well under a second; a slow one is never waited on.
|
|
647
|
+
EARS_PROBE_TIMEOUT = 5.0
|
|
648
|
+
EARS_MODEL_LINE = (
|
|
649
|
+
"The ears have no voice-activity model, so they cannot hear you: "
|
|
650
|
+
"run `ears install` to fetch it."
|
|
651
|
+
)
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
def ears_model_missing(environ: Mapping[str, str]) -> bool:
|
|
655
|
+
"""True only when `ears backends` answers, exit 0, with a `silero` line
|
|
656
|
+
saying `no model`. `ears` not on the PATH (no voice here), a timeout, a
|
|
657
|
+
failure or output we do not know all read as False: say nothing. Setup
|
|
658
|
+
never runs `ears install`; the user does."""
|
|
659
|
+
done = _run(EARS_BACKENDS_ARGV, environ, timeout=EARS_PROBE_TIMEOUT)
|
|
660
|
+
if done is None or done.returncode != 0:
|
|
661
|
+
return False
|
|
662
|
+
for line in (done.stdout or "").splitlines():
|
|
663
|
+
name, _, state = line.strip().partition(" ")
|
|
664
|
+
if name == "silero":
|
|
665
|
+
return state.strip().startswith("no model")
|
|
666
|
+
return False
|
|
667
|
+
|
|
668
|
+
|
|
639
669
|
# --- the run ------------------------------------------------------------------
|
|
640
670
|
|
|
641
671
|
|
|
@@ -700,9 +730,11 @@ def run_setup(
|
|
|
700
730
|
because the operator is written only for a box that exists, and the
|
|
701
731
|
mail setup verb is what makes the operator's box and the agent's. The
|
|
702
732
|
exit is the worst of the three: 1 if any refused or failed, else 4 if
|
|
703
|
-
mail left steps for you, else 0.
|
|
704
|
-
|
|
705
|
-
|
|
733
|
+
mail left steps for you, else 0. Then `ears backends` is asked, read
|
|
734
|
+
only: when the ears' model is missing, one line (EARS_MODEL_LINE) names
|
|
735
|
+
`ears install`; it never changes the exit. With the agent defined, the
|
|
736
|
+
run ends on the one launch step (LAUNCH_SENTENCE). MAILBOX / ADDRESS /
|
|
737
|
+
AGENT are already shape-checked by the caller.
|
|
706
738
|
"""
|
|
707
739
|
environ = os.environ if environ is None else environ
|
|
708
740
|
resolved = Path.home() if home is None else home
|
|
@@ -733,6 +765,9 @@ def run_setup(
|
|
|
733
765
|
lines.append(
|
|
734
766
|
f"Would ask `{_verb()}` for the agent's box {agent!r} (--box {agent})."
|
|
735
767
|
)
|
|
768
|
+
# Read only, and never part of the exit: 4 means mail steps are left.
|
|
769
|
+
if ears_model_missing(environ):
|
|
770
|
+
lines.append(EARS_MODEL_LINE)
|
|
736
771
|
if defined.code == EXIT_OK:
|
|
737
772
|
lines.append(launch_sentence(agent))
|
|
738
773
|
return Outcome(code, lines)
|
sessionkit-0.2.1/pyproject.toml
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "sessionkit"
|
|
3
|
-
version = "0.2.1"
|
|
4
|
-
description = "Session Kit gives your Claude Code sessions voice, mail, a phone line and a tmux sidebar, in one install."
|
|
5
|
-
readme = "README.md"
|
|
6
|
-
license = "AGPL-3.0-or-later"
|
|
7
|
-
license-files = ["LICENSE"]
|
|
8
|
-
classifiers = ["Development Status :: 3 - Alpha"]
|
|
9
|
-
requires-python = ">=3.11,<3.15"
|
|
10
|
-
dependencies = [
|
|
11
|
-
"click>=8.1",
|
|
12
|
-
"sessionmail>=0.2.1",
|
|
13
|
-
"sessiontools>=0.2.0",
|
|
14
|
-
"sessionphone[media]>=0.2.1",
|
|
15
|
-
"sessionview>=0.2.0",
|
|
16
|
-
"sessionvoice[capture]>=0.2.1",
|
|
17
|
-
]
|
|
18
|
-
|
|
19
|
-
[[project.authors]]
|
|
20
|
-
name = "Mike Bailey"
|
|
21
|
-
email = "mike@sessionkit.ai"
|
|
22
|
-
|
|
23
|
-
[project.urls]
|
|
24
|
-
Homepage = "https://github.com/sessionkit/sessionkit"
|
|
25
|
-
Repository = "https://github.com/sessionkit/sessionkit"
|
|
26
|
-
|
|
27
|
-
[project.scripts]
|
|
28
|
-
sessionkit = "sessionkit.cli:main"
|
|
29
|
-
message = "sessionmail.message:cli"
|
|
30
|
-
pager = "sessionmail.pager:cli"
|
|
31
|
-
memory = "sessionmail.memory:cli"
|
|
32
|
-
session = "sessiontools.cli:main"
|
|
33
|
-
sessionphone = "sessionphone.cli:main"
|
|
34
|
-
sessionview = "sessionview:main"
|
|
35
|
-
sessionview-config = "sessionview:main"
|
|
36
|
-
sessionview-session = "sessionview:main"
|
|
37
|
-
sessionview-messages = "sessionview:main"
|
|
38
|
-
ears = "ears.cli:main"
|
|
39
|
-
ears-serve = "ears.serve:main"
|
|
40
|
-
mouth = "mouth.__main__:main"
|
|
41
|
-
talk = "talk.cli:main"
|
|
42
|
-
|
|
43
|
-
[build-system]
|
|
44
|
-
requires = ["uv_build>=0.11.9,<0.12.0"]
|
|
45
|
-
build-backend = "uv_build"
|
|
46
|
-
|
|
47
|
-
[dependency-groups]
|
|
48
|
-
dev = [
|
|
49
|
-
"pytest>=8",
|
|
50
|
-
"ruff>=0.6",
|
|
51
|
-
]
|
|
52
|
-
|
|
53
|
-
[tool.pytest.ini_options]
|
|
54
|
-
testpaths = ["tests"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|