witbitz-code 1.10.0__tar.gz → 1.10.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.
- {witbitz_code-1.10.0/src/witbitz_code.egg-info → witbitz_code-1.10.1}/PKG-INFO +1 -1
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/pyproject.toml +1 -1
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/__init__.py +1 -1
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/ui_static/app.js +3 -3
- {witbitz_code-1.10.0 → witbitz_code-1.10.1/src/witbitz_code.egg-info}/PKG-INFO +1 -1
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code.egg-info/SOURCES.txt +1 -0
- witbitz_code-1.10.1/tests/test_ui_page.py +50 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/LICENSE +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/README.md +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/setup.cfg +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/__main__.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/_js.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/account.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/asks.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/attachments.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/auto.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/auto_runner.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/browse.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/browsetree.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/cli.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/codekeys.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/codetools.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/compress.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/computers.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/confidential.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/confidential_models.json +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/connector.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/devicelink.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/dirs.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/folders.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/gateway.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/icons/witbitz-code-wsl.ico +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/icons/witbitz-code.ico +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/images.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/keys.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/link.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/mkdir.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/models.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/net.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/offered_models.json +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/notes-init.md +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-browse-cdp.mjs +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-browse-local.mjs +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-browse-publisher.mjs +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-browse-tree.mjs +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-browser.js +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-media-server.mjs +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-notes.js +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-progress.js +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/outputs.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/pair.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/pairings.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/payers.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/plugins.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/policy.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/ports.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/qr.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/receipt.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/relay.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/remind.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/seccheck.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/seen.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/selfupdate.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/tinfoil_read.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/tools_catalog.json +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/tools_probe.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/toolsetup.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/ui.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/ui_static/app.css +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/ui_static/index.html +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/uitools.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/uninstall.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/winagent.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/winbg.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/winconsole.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/wizard.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/wslstart.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code.egg-info/dependency_links.txt +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code.egg-info/entry_points.txt +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code.egg-info/requires.txt +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code.egg-info/top_level.txt +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_asks.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_attachments.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_auto.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_browse.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_browsetree.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_cli.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_codekeys.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_codetools.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_confidential.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_connector_e2e.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_devicelink.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_dirs.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_files_and_compress.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_folders.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_images.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_outputs.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_pair_flows.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_plugins.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_policy.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_ports.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_ports_win.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_registry.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_relay_codec.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_remind.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_seccheck.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_selfupdate.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_setup.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_tools_probe.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_toolsetup.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_ui.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_uitools.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_uninstall.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_winagent.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_winbg.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_winconsole.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_windows_files.py +0 -0
- {witbitz_code-1.10.0 → witbitz_code-1.10.1}/tests/test_wslstart.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "witbitz-code"
|
|
7
|
-
version = "1.10.
|
|
7
|
+
version = "1.10.1"
|
|
8
8
|
description = "Reach OpenCode on this computer from the Witbitz Spaces Code section, through an end-to-end sealed relay."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -65,7 +65,7 @@ function render(s) {
|
|
|
65
65
|
if (s.paired.length > 1 && p.computer) { // by the pairing's own id: by email it took both of one email's pairings
|
|
66
66
|
const out = document.createElement('button'); out.type = 'button'; out.className = 'ghost danger small'; out.textContent = 'Unpair'
|
|
67
67
|
out.disabled = !!s.busy
|
|
68
|
-
out.onclick = () => act('/api/unpair', { computer: p.computer }, `Unpair ${
|
|
68
|
+
out.onclick = () => act('/api/unpair', { computer: p.computer }, `Unpair ${pairingLabel(p)}? Code there stops reaching this computer; the others keep it.`)
|
|
69
69
|
li.append(out)
|
|
70
70
|
}
|
|
71
71
|
list.append(li)
|
|
@@ -144,13 +144,13 @@ async function act(path, body, ask) {
|
|
|
144
144
|
return ok
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
const
|
|
147
|
+
const pairingLabel = (p) => `${p.account || 'your account'}${p.app ? ' (' + p.app + ')' : ''}`
|
|
148
148
|
|
|
149
149
|
/** Which pairing (Pair again) → its unpair body; {} = the only one; null = cancelled. */
|
|
150
150
|
function pairingOf() {
|
|
151
151
|
const ps = (state && state.paired) || []
|
|
152
152
|
if (ps.length <= 1) return {}
|
|
153
|
-
const pick = window.prompt('This computer is paired several times. Which one? Type its number:\n' + ps.map((p, i) => `${i + 1}. ${
|
|
153
|
+
const pick = window.prompt('This computer is paired several times. Which one? Type its number:\n' + ps.map((p, i) => `${i + 1}. ${pairingLabel(p)}`).join('\n'), '1')
|
|
154
154
|
const p = pick && ps[Number(pick) - 1]
|
|
155
155
|
return p ? { computer: p.computer } : null
|
|
156
156
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""The page in a real browser: a row's Unpair, clicked (the owner, 2026-10-22: "unpair button does nothing" — the click threw
|
|
2
|
+
"label is not a function": the row helper was shadowed by render()'s own `label`). Skipped where no browser is installed."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import glob
|
|
7
|
+
import os
|
|
8
|
+
|
|
9
|
+
import pytest
|
|
10
|
+
|
|
11
|
+
import test_ui as T
|
|
12
|
+
|
|
13
|
+
pw = pytest.importorskip("playwright.async_api")
|
|
14
|
+
CHROME = next(iter(sorted(glob.glob(os.path.expanduser("~/.cache/ms-playwright/chromium-*/chrome-linux*/chrome")))), None)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@pytest.mark.skipif(not CHROME, reason="no Chromium installed for Playwright")
|
|
18
|
+
def test_a_row_s_unpair_asks_then_unpairs_only_that_pairing():
|
|
19
|
+
async def go():
|
|
20
|
+
vaulted = {**T.DESK, "idx": {"room": "r2"}, "computerId": "c-vaulted", "origin": "https://spaces.witbitz.chat",
|
|
21
|
+
"opencodeUrl": "http://127.0.0.1:4098"}
|
|
22
|
+
w = T.TwoAccounts([T.DESK, vaulted])
|
|
23
|
+
m = w.manager(listening=set())
|
|
24
|
+
srv, base = await T.with_server(m)
|
|
25
|
+
await m.start_serving()
|
|
26
|
+
try:
|
|
27
|
+
async with pw.async_playwright() as p:
|
|
28
|
+
b = await p.chromium.launch(executable_path=CHROME)
|
|
29
|
+
pg = await b.new_page()
|
|
30
|
+
said, errors = [], []
|
|
31
|
+
pg.on("dialog", lambda d: (said.append(d.message), asyncio.ensure_future(d.accept())))
|
|
32
|
+
pg.on("pageerror", lambda e: errors.append(str(e)))
|
|
33
|
+
await pg.goto(f"{base}/?t=T0KEN")
|
|
34
|
+
await pg.wait_for_selector("#paired li:nth-child(2) button")
|
|
35
|
+
assert "vaulted app" in await pg.text_content("#paired li:nth-child(2)")
|
|
36
|
+
await pg.click("#paired li:nth-child(2) button")
|
|
37
|
+
for _ in range(60):
|
|
38
|
+
if w.pair_calls:
|
|
39
|
+
break
|
|
40
|
+
await asyncio.sleep(0.05)
|
|
41
|
+
await b.close()
|
|
42
|
+
assert errors == [], errors
|
|
43
|
+
assert said and "(vaulted app)" in said[0]
|
|
44
|
+
assert w.pair_calls == [["--unpair", "--computer", "c-vaulted"]]
|
|
45
|
+
assert [p.get("computerId") for p in w.pairings] == ["c"]
|
|
46
|
+
finally:
|
|
47
|
+
await m.shutdown()
|
|
48
|
+
await srv.close()
|
|
49
|
+
|
|
50
|
+
asyncio.run(go())
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-browse-cdp.mjs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-browser.js
RENAMED
|
File without changes
|
|
File without changes
|
{witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-notes.js
RENAMED
|
File without changes
|
{witbitz_code-1.10.0 → witbitz_code-1.10.1}/src/witbitz_code/opencode_plugins/witbitz-progress.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|