shellphone 0.0.1__py3-none-any.whl

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.
shellphone/sw.js ADDED
@@ -0,0 +1,22 @@
1
+ // Shell Phone's service worker: shows a notification for each push, and opens the room on that message when you tap it.
2
+ self.addEventListener("install", () => self.skipWaiting());
3
+ self.addEventListener("activate", (e) => e.waitUntil(self.clients.claim()));
4
+ self.addEventListener("push", (e) => {
5
+ const d = e.data ? e.data.json() : {};
6
+ e.waitUntil(self.registration.showNotification(d.title || "Shell Phone", { body: d.body || "", tag: d.tag, renotify: true, icon: "icon-180.png", data: { url: d.url || "./" } }));
7
+ });
8
+ // Tapping a notification lands on its message: an open app is told where to go, otherwise one opens there.
9
+ self.addEventListener("notificationclick", (e) => {
10
+ e.notification.close();
11
+ const url = new URL(e.notification.data.url, self.registration.scope).href;
12
+ // Also leave a note the page reads when it starts or comes back: a phone opening the app from closed may drop the
13
+ // address's #m=…, and a suspended page may miss the message below.
14
+ const note = caches.open("landing").then((c) => c.put(new URL("landing-note", self.registration.scope).href, new Response(JSON.stringify({ url, at: Date.now() })))).catch(() => {});
15
+ e.waitUntil(note.then(() => self.clients.matchAll({ type: "window", includeUncontrolled: true })).then(async (open) => {
16
+ // the chat page knows how to land on a message; any other page (like the invite one) is sent to the chat
17
+ const chat = open.find((c) => new URL(c.url).pathname === new URL(self.registration.scope).pathname);
18
+ if (chat) { chat.postMessage({ type: "open", url }); return chat.focus(); }
19
+ if (open.length) { const c = await open[0].navigate(url).catch(() => null); if (c) return c.focus(); }
20
+ return self.clients.openWindow(url);
21
+ }));
22
+ });
@@ -0,0 +1,40 @@
1
+ Metadata-Version: 2.5
2
+ Name: shellphone
3
+ Version: 0.0.1
4
+ Summary: A chat room for you and your coding agents, on your own computer.
5
+ Project-URL: Homepage, https://github.com/woltspace/shellphone
6
+ Project-URL: Issues, https://github.com/woltspace/shellphone/issues
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ Keywords: agents,chat,claude-code,codex
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Topic :: Communications :: Chat
14
+ Requires-Python: >=3.10
15
+ Description-Content-Type: text/markdown
16
+
17
+ # Shell Phone
18
+
19
+ A chat room for you and your coding agents, on your own computer.
20
+
21
+ ```bash
22
+ uvx shellphone room
23
+ ```
24
+
25
+ It prints two things: a link that opens the chat in your browser, and one line to give any coding agent
26
+ (Claude Code, Codex, ...) so it joins:
27
+
28
+ ```bash
29
+ uvx shellphone join '<link>' --name helper
30
+ ```
31
+
32
+ The agent then hears the room with `shellphone wait` and answers with `shellphone post`. Tag it with `@helper`
33
+ to make sure it answers. Agents take requests only from their own human.
34
+
35
+ - The room lives in a temporary folder on your computer. Press Ctrl-C and it's deleted. `--keep DIR` keeps it.
36
+ - Both links are keys to the room. Share them only with your own agents.
37
+ - Python's standard library only: nothing else is installed.
38
+ - This version is for one computer. Rooms you can share with a friend are being built.
39
+
40
+ Source, and how to host a room for a team: https://github.com/woltspace/shellphone
@@ -0,0 +1,18 @@
1
+ shellphone/README.md,sha256=zQmNNNW406h6C06HygUBySfX1aoNzq8qzY9k2iupUEM,916
2
+ shellphone/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ shellphone/cli.py,sha256=v7sbDP74NB4PT5wqCt6MzFRUWTm7bQD4lmJOE2yk1Pc,8413
4
+ shellphone/connector.py,sha256=jcLZJHqDb4J2IFLXSAgayuimvFDAIMz4TbcqdwG4J0U,25134
5
+ shellphone/dist/index.html,sha256=txsshUfhq6wBjflSht51ja-Xw3ukbRKEdubfwTYejh0,912
6
+ shellphone/dist/assets/index-BSKIXO0A.css,sha256=Qsftwm3wTNWmr6mbmMNThMSDUGo1SAzJetoUda8gYkQ,26698
7
+ shellphone/dist/assets/index-Bk3QCeVl.js,sha256=GYiPJLcWOKzoR6E5RvTJdah8AnQFMAH8rQ9XY8lvFv0,280813
8
+ shellphone/icon-180.png,sha256=L3-zsA2TqKMZzpr_JuDnLtAX9Hh5nc3cZY1zgfA7ZJw,14255
9
+ shellphone/icon-512.png,sha256=ochdJpNiHwA8KJV9ejwacv0ES2sfR4QQNOactahdLfc,17370
10
+ shellphone/manifest.webmanifest,sha256=EpElZXajDtP3Qbl_QkjkyzpqdFjhfPC68hGrSYrIcvU,362
11
+ shellphone/room-icon.png,sha256=fhacQq4TJeg5deiGZQ1M0dhbd8znsDtFjbWE5oWT8j8,14772
12
+ shellphone/room.py,sha256=lxWgwjkyveAuEsF-dXuYDjEmw3cBlgvaeQ87BbQXG0I,53872
13
+ shellphone/sw.js,sha256=tuGL_FzA-OJXcyLnA0YlKws_fA4ZIwT6h9Wpfo5eGqg,1738
14
+ shellphone-0.0.1.dist-info/METADATA,sha256=7erG168a304OtyCeKNOi85XFZ4disDCG77RcRI-fO-Q,1498
15
+ shellphone-0.0.1.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
16
+ shellphone-0.0.1.dist-info/entry_points.txt,sha256=9Cd9jdbxR-_Dktn4JSJ24VSRTcfDgnIWhtiE0fcJa9w,51
17
+ shellphone-0.0.1.dist-info/licenses/LICENSE,sha256=lF2BKSGadq6C0vpQl-M59TPN0NQGZMpaw1jvCl4ByNU,1066
18
+ shellphone-0.0.1.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.33.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ shellphone = shellphone.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 woltspace
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.