chartremotely 0.2.12__tar.gz → 0.2.14__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.
- {chartremotely-0.2.12 → chartremotely-0.2.14}/PKG-INFO +42 -8
- {chartremotely-0.2.12 → chartremotely-0.2.14}/README.md +40 -7
- chartremotely-0.2.12/chartremotely/assets/shortcut-template.plist → chartremotely-0.2.14/chartremotely/assets/shortcut.plist +378 -782
- chartremotely-0.2.14/chartremotely/displays.py +129 -0
- chartremotely-0.2.14/chartremotely/hearing.py +261 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/requestlog.py +12 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/server.py +66 -4
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/setup.py +26 -6
- chartremotely-0.2.14/chartremotely/shortcut.py +102 -0
- chartremotely-0.2.14/chartremotely/voice.py +174 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely.egg-info/PKG-INFO +42 -8
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely.egg-info/SOURCES.txt +7 -2
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely.egg-info/requires.txt +3 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/pyproject.toml +4 -1
- chartremotely-0.2.14/tests/test_hearing.py +306 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_patron.py +1 -15
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_relay.py +4 -2
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_setup.py +69 -20
- chartremotely-0.2.14/tests/test_voice.py +282 -0
- chartremotely-0.2.12/chartremotely/shortcut.py +0 -56
- {chartremotely-0.2.12 → chartremotely-0.2.14}/LICENSE +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/__init__.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/answer.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/ax.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/cli.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/config.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/doctor.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/guilock.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/keystore.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/layout.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/mcpclient.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/patron.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/popups.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/push.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/recent.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/registry.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/relay.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/resolve.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/scales.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/screen.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/services.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/snapshot.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/studies.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/symbol.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/tailnet.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/timeframe.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/understand.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/vocab.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely/window.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely.egg-info/dependency_links.txt +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely.egg-info/entry_points.txt +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/chartremotely.egg-info/top_level.txt +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/setup.cfg +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_popups.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_push.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_recent.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_requestlog.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_resolve.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_scales.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_screen.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_snapshot.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_stamp_changelog.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_timeframe.py +0 -0
- {chartremotely-0.2.12 → chartremotely-0.2.14}/tests/test_understand.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chartremotely
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.14
|
|
4
4
|
Summary: Remote control of desktop charting applications on macOS
|
|
5
5
|
Author: Lonnie VanZandt
|
|
6
6
|
License:
|
|
@@ -215,6 +215,7 @@ Requires-Dist: pyobjc-framework-ApplicationServices>=10; extra == "macos"
|
|
|
215
215
|
Requires-Dist: pyobjc-framework-Cocoa>=10; extra == "macos"
|
|
216
216
|
Requires-Dist: pyobjc-framework-Quartz>=10; extra == "macos"
|
|
217
217
|
Requires-Dist: pyobjc-framework-Security>=10; extra == "macos"
|
|
218
|
+
Requires-Dist: mlx-whisper>=0.4.3; (sys_platform == "darwin" and platform_machine == "arm64") and extra == "macos"
|
|
218
219
|
Provides-Extra: setup
|
|
219
220
|
Requires-Dist: tollbooth-dpyc[nostr]==0.90.0; extra == "setup"
|
|
220
221
|
Provides-Extra: dev
|
|
@@ -315,11 +316,40 @@ ignores everything sent to it.
|
|
|
315
316
|
|
|
316
317
|
## Voice
|
|
317
318
|
|
|
318
|
-
"Hey Siri, ChartRemotely"
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
319
|
+
"Hey Siri, ChartRemotely", then **one sentence**:
|
|
320
|
+
|
|
321
|
+
> "Palantir, half, on mac mini." · "Shopify thirty minutes." · "Nvidia daily." · "GE hourly on the studio."
|
|
322
|
+
|
|
323
|
+
Say the company, the scale, and - if it is not this Mac - "on" the display.
|
|
324
|
+
The Shortcut records for about six seconds (tap to finish sooner where your
|
|
325
|
+
device offers it) and sends the recording to the Mac that made it. That Mac
|
|
326
|
+
hears it with **Whisper, running locally** on its own GPU (`mlx-whisper`,
|
|
327
|
+
Apple silicon only) - nothing is sent to Apple or anyone else to transcribe -
|
|
328
|
+
primed with the words it expects: the ten scale mnemonics, bar phrases like
|
|
329
|
+
"thirty minutes", the companies you chart lately and the names of your
|
|
330
|
+
displays. The recording is deleted as soon as it is heard; only the text is
|
|
331
|
+
logged.
|
|
332
|
+
|
|
333
|
+
If something is missing or unclear you are asked, and the Shortcut listens
|
|
334
|
+
again (up to three times), keeping what it already understood: "I heard
|
|
335
|
+
Nvidia but no scale. Say the scale, like half or daily. I'm listening." -
|
|
336
|
+
"Daily." Or "Did you mean PS (Pershing Square) or MSGS (Madison Square
|
|
337
|
+
Garden)? Say the one you meant. I'm listening."
|
|
338
|
+
|
|
339
|
+
**First run.** `chartremotely setup` fetches the speech model,
|
|
340
|
+
`whisper-large-v3-turbo` (about 1.6 GB, once, from Hugging Face). The
|
|
341
|
+
listener loads it when it starts, so a sentence takes about a second to hear.
|
|
342
|
+
Setup also learns your display names (the free `chart_agent_status`, asked at
|
|
343
|
+
most every four hours) so "on the studio" is understood.
|
|
344
|
+
|
|
345
|
+
**One Shortcut: talk, or type when it asks.** When the recording has
|
|
346
|
+
nothing in it - no microphone, silence, noise, or a Mac that cannot hear yet
|
|
347
|
+
- "ChartRemotely" shows one text box instead: *Type your request, e.g.
|
|
348
|
+
Palantir half on mac mini*. Type the same sentence and press Return; it is
|
|
349
|
+
understood the same way and costs the same. If something is missing, the box
|
|
350
|
+
comes back with the question ("I heard Nvidia but no scale. Type the scale,
|
|
351
|
+
like half or daily."). On a Mac the Shortcut goes straight to the box: Record
|
|
352
|
+
Audio waits forever on a Mac without a microphone, and a Mac has a keyboard.
|
|
323
353
|
|
|
324
354
|
The Shortcut talks to one Mac — the one that made it. That Mac looks up the
|
|
325
355
|
company and the scale itself (free: a table, never the chart), then acts as
|
|
@@ -355,7 +385,8 @@ Palantir; "shop if y" is Shopify); when two companies are too close to call
|
|
|
355
385
|
you are asked - "Did you mean PS (Pershing Square) or MSGS (Madison Square
|
|
356
386
|
Garden)?" - rather than shown the wrong chart, and the symbols you chart
|
|
357
387
|
lately settle a near-tie. `understand()` parses a whole sentence the same way
|
|
358
|
-
("Palantir half on the mini")
|
|
388
|
+
("Palantir half on the mini") - that is what the ChartRemotely Shortcut
|
|
389
|
+
uses on the sentence Whisper heard.
|
|
359
390
|
|
|
360
391
|
Each command handled is logged as one line — time, the command's first word,
|
|
361
392
|
the "Where?" as said, what was heard for a company or scale lookup, and the
|
|
@@ -397,7 +428,10 @@ and runs `chartremotely setup`, which:
|
|
|
397
428
|
3. gives the Mac its tailnet address with `tailscale serve`;
|
|
398
429
|
4. installs the listener and the relay as launchd agents;
|
|
399
430
|
5. asks macOS for Accessibility and Screen Recording for the Python that runs them;
|
|
400
|
-
6.
|
|
431
|
+
6. fetches the Whisper speech model (about 1.6 GB, once) and your display names;
|
|
432
|
+
7. makes this Mac's Shortcut, "ChartRemotely" (talk, or type when it asks),
|
|
433
|
+
opens it for import, and removes a "ChartRemotely Ask" an older setup left
|
|
434
|
+
in your library.
|
|
401
435
|
|
|
402
436
|
Run it again at any time: finished steps are skipped. `chartremotely doctor`
|
|
403
437
|
reports anything still missing.
|
|
@@ -91,11 +91,40 @@ ignores everything sent to it.
|
|
|
91
91
|
|
|
92
92
|
## Voice
|
|
93
93
|
|
|
94
|
-
"Hey Siri, ChartRemotely"
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
"Hey Siri, ChartRemotely", then **one sentence**:
|
|
95
|
+
|
|
96
|
+
> "Palantir, half, on mac mini." · "Shopify thirty minutes." · "Nvidia daily." · "GE hourly on the studio."
|
|
97
|
+
|
|
98
|
+
Say the company, the scale, and - if it is not this Mac - "on" the display.
|
|
99
|
+
The Shortcut records for about six seconds (tap to finish sooner where your
|
|
100
|
+
device offers it) and sends the recording to the Mac that made it. That Mac
|
|
101
|
+
hears it with **Whisper, running locally** on its own GPU (`mlx-whisper`,
|
|
102
|
+
Apple silicon only) - nothing is sent to Apple or anyone else to transcribe -
|
|
103
|
+
primed with the words it expects: the ten scale mnemonics, bar phrases like
|
|
104
|
+
"thirty minutes", the companies you chart lately and the names of your
|
|
105
|
+
displays. The recording is deleted as soon as it is heard; only the text is
|
|
106
|
+
logged.
|
|
107
|
+
|
|
108
|
+
If something is missing or unclear you are asked, and the Shortcut listens
|
|
109
|
+
again (up to three times), keeping what it already understood: "I heard
|
|
110
|
+
Nvidia but no scale. Say the scale, like half or daily. I'm listening." -
|
|
111
|
+
"Daily." Or "Did you mean PS (Pershing Square) or MSGS (Madison Square
|
|
112
|
+
Garden)? Say the one you meant. I'm listening."
|
|
113
|
+
|
|
114
|
+
**First run.** `chartremotely setup` fetches the speech model,
|
|
115
|
+
`whisper-large-v3-turbo` (about 1.6 GB, once, from Hugging Face). The
|
|
116
|
+
listener loads it when it starts, so a sentence takes about a second to hear.
|
|
117
|
+
Setup also learns your display names (the free `chart_agent_status`, asked at
|
|
118
|
+
most every four hours) so "on the studio" is understood.
|
|
119
|
+
|
|
120
|
+
**One Shortcut: talk, or type when it asks.** When the recording has
|
|
121
|
+
nothing in it - no microphone, silence, noise, or a Mac that cannot hear yet
|
|
122
|
+
- "ChartRemotely" shows one text box instead: *Type your request, e.g.
|
|
123
|
+
Palantir half on mac mini*. Type the same sentence and press Return; it is
|
|
124
|
+
understood the same way and costs the same. If something is missing, the box
|
|
125
|
+
comes back with the question ("I heard Nvidia but no scale. Type the scale,
|
|
126
|
+
like half or daily."). On a Mac the Shortcut goes straight to the box: Record
|
|
127
|
+
Audio waits forever on a Mac without a microphone, and a Mac has a keyboard.
|
|
99
128
|
|
|
100
129
|
The Shortcut talks to one Mac — the one that made it. That Mac looks up the
|
|
101
130
|
company and the scale itself (free: a table, never the chart), then acts as
|
|
@@ -131,7 +160,8 @@ Palantir; "shop if y" is Shopify); when two companies are too close to call
|
|
|
131
160
|
you are asked - "Did you mean PS (Pershing Square) or MSGS (Madison Square
|
|
132
161
|
Garden)?" - rather than shown the wrong chart, and the symbols you chart
|
|
133
162
|
lately settle a near-tie. `understand()` parses a whole sentence the same way
|
|
134
|
-
("Palantir half on the mini")
|
|
163
|
+
("Palantir half on the mini") - that is what the ChartRemotely Shortcut
|
|
164
|
+
uses on the sentence Whisper heard.
|
|
135
165
|
|
|
136
166
|
Each command handled is logged as one line — time, the command's first word,
|
|
137
167
|
the "Where?" as said, what was heard for a company or scale lookup, and the
|
|
@@ -173,7 +203,10 @@ and runs `chartremotely setup`, which:
|
|
|
173
203
|
3. gives the Mac its tailnet address with `tailscale serve`;
|
|
174
204
|
4. installs the listener and the relay as launchd agents;
|
|
175
205
|
5. asks macOS for Accessibility and Screen Recording for the Python that runs them;
|
|
176
|
-
6.
|
|
206
|
+
6. fetches the Whisper speech model (about 1.6 GB, once) and your display names;
|
|
207
|
+
7. makes this Mac's Shortcut, "ChartRemotely" (talk, or type when it asks),
|
|
208
|
+
opens it for import, and removes a "ChartRemotely Ask" an older setup left
|
|
209
|
+
in your library.
|
|
177
210
|
|
|
178
211
|
Run it again at any time: finished steps are skipped. `chartremotely doctor`
|
|
179
212
|
reports anything still missing.
|