witbitz-code 1.6.6__tar.gz → 1.6.8__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.6.6/src/witbitz_code.egg-info → witbitz_code-1.6.8}/PKG-INFO +2 -2
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/README.md +1 -1
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/pyproject.toml +1 -1
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/__init__.py +1 -1
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/cli.py +1 -1
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/link.py +2 -2
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/mkdir.py +13 -3
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/pair.py +1 -1
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/ui_static/index.html +1 -1
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/wizard.py +1 -1
- {witbitz_code-1.6.6 → witbitz_code-1.6.8/src/witbitz_code.egg-info}/PKG-INFO +2 -2
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_dirs.py +11 -1
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_wslstart.py +2 -1
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/LICENSE +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/setup.cfg +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/__main__.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/_js.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/account.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/asks.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/attachments.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/auto.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/auto_runner.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/codekeys.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/codetools.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/compress.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/computers.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/confidential.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/confidential_models.json +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/connector.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/devicelink.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/dirs.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/folders.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/gateway.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/icons/witbitz-code-wsl.ico +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/icons/witbitz-code.ico +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/keys.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/models.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/net.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/offered_models.json +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/opencode_plugins/notes-init.md +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/opencode_plugins/witbitz-media-server.mjs +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/opencode_plugins/witbitz-notes.js +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/opencode_plugins/witbitz-progress.js +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/outputs.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/pairings.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/payers.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/plugins.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/policy.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/ports.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/qr.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/receipt.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/relay.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/seen.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/tinfoil_read.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/tools_catalog.json +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/tools_probe.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/toolsetup.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/ui.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/ui_static/app.css +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/ui_static/app.js +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/uitools.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/uninstall.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/winagent.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/winbg.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/winconsole.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/wslstart.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code.egg-info/SOURCES.txt +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code.egg-info/dependency_links.txt +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code.egg-info/entry_points.txt +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code.egg-info/requires.txt +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code.egg-info/top_level.txt +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_asks.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_attachments.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_auto.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_cli.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_codekeys.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_codetools.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_confidential.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_connector_e2e.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_devicelink.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_files_and_compress.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_folders.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_outputs.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_pair_flows.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_plugins.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_policy.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_ports.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_ports_win.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_registry.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_relay_codec.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_setup.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_tools_probe.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_toolsetup.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_ui.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_uitools.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_uninstall.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_winagent.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_winbg.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_winconsole.py +0 -0
- {witbitz_code-1.6.6 → witbitz_code-1.6.8}/tests/test_windows_files.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: witbitz-code
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.8
|
|
4
4
|
Summary: Reach OpenCode on this computer from the Witbitz Spaces Code section, through an end-to-end sealed relay.
|
|
5
5
|
Author: Witbitz
|
|
6
6
|
License-Expression: MIT
|
|
@@ -50,7 +50,7 @@ witbitz-code setup
|
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
`setup` walks five steps and skips whatever is already done: it installs OpenCode if it is missing (it asks first), pairs
|
|
53
|
-
this computer (scan the QR code in Spaces → Settings →
|
|
53
|
+
this computer (scan the QR code in Spaces → Settings → Privacy & security → Add a device), which gives the computer **its
|
|
54
54
|
own keys from your Spaces account**, offers to install the tools the agent uses for audio, video, PDFs and scans (ffmpeg,
|
|
55
55
|
Poppler, Tesseract, … — with winget, Homebrew or one `sudo apt-get` line; it shows what it will run and asks once), then
|
|
56
56
|
starts `serve` in the window. Then open Code in Spaces. Leave it running (Ctrl-C
|
|
@@ -24,7 +24,7 @@ witbitz-code setup
|
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
`setup` walks five steps and skips whatever is already done: it installs OpenCode if it is missing (it asks first), pairs
|
|
27
|
-
this computer (scan the QR code in Spaces → Settings →
|
|
27
|
+
this computer (scan the QR code in Spaces → Settings → Privacy & security → Add a device), which gives the computer **its
|
|
28
28
|
own keys from your Spaces account**, offers to install the tools the agent uses for audio, video, PDFs and scans (ffmpeg,
|
|
29
29
|
Poppler, Tesseract, … — with winget, Homebrew or one `sudo apt-get` line; it shows what it will run and asks once), then
|
|
30
30
|
starts `serve` in the window. Then open Code in Spaces. Leave it running (Ctrl-C
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "witbitz-code"
|
|
7
|
-
version = "1.6.
|
|
7
|
+
version = "1.6.8"
|
|
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"
|
|
@@ -40,7 +40,7 @@ HELP = f"""witbitz-code {__version__} — reach OpenCode on this computer from t
|
|
|
40
40
|
the same in a page in your browser: status, pair / unpair / pair again, start and stop,
|
|
41
41
|
start when I log in (Windows and WSL); it serves while it runs. --background (Windows):
|
|
42
42
|
no window — the page's Quit stops it
|
|
43
|
-
pair [--name <name>] show a QR code; scan it in Spaces (Settings →
|
|
43
|
+
pair [--name <name>] show a QR code; scan it in Spaces (Settings → Privacy & security → Add a device)
|
|
44
44
|
serve [--port <n>] [--no-opencode]
|
|
45
45
|
start OpenCode on 127.0.0.1 with your account's keys, and the connector
|
|
46
46
|
status list this computer's pairings and their coding keys
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Make this computer an ADDED DEVICE of a Spaces account by device-link — tools/rc-link.mjs.
|
|
2
2
|
|
|
3
|
-
It shows a QR carrying an ephemeral PUBLIC key (no secret); a signed-in phone or desktop scans it (Settings →
|
|
4
|
-
|
|
3
|
+
It shows a QR carrying an ephemeral PUBLIC key (no secret); a signed-in phone or desktop scans it (Settings → Privacy & security →
|
|
4
|
+
Add a device) and seals the account to that key; this process opens the reply. The reply is relayed
|
|
5
5
|
content-blind through /api/link between two public keys the server cannot combine.
|
|
6
6
|
|
|
7
7
|
Unlike rc-link.mjs this never writes the account to disk: the pairing flow needs it only long enough to publish the
|
|
@@ -12,9 +12,10 @@ import ntpath
|
|
|
12
12
|
import os
|
|
13
13
|
import posixpath
|
|
14
14
|
import re
|
|
15
|
+
import unicodedata
|
|
15
16
|
|
|
16
17
|
MKDIR_ROUTE = "/witbitz/mkdir"
|
|
17
|
-
|
|
18
|
+
_PUNCT = set("._ ()-")
|
|
18
19
|
_WIN_ABS = re.compile(r"^[A-Za-z]:[\\/]")
|
|
19
20
|
|
|
20
21
|
|
|
@@ -22,12 +23,21 @@ def _error(st: int, message: str) -> tuple[int, str]:
|
|
|
22
23
|
return st, json.dumps({"error": message}, ensure_ascii=False, separators=(",", ":"))
|
|
23
24
|
|
|
24
25
|
|
|
26
|
+
def _ok_char(ch: str) -> bool:
|
|
27
|
+
# letters, digits and combining marks of ANY script (Hebrew, Arabic, …) plus . _ space ( ) - — ⇄ code-mkdir.mjs. A control
|
|
28
|
+
# or an invisible direction mark (category C*) is not a letter, so it stays out.
|
|
29
|
+
return ch in _PUNCT or unicodedata.category(ch)[0] in ("L", "N", "M")
|
|
30
|
+
|
|
31
|
+
|
|
25
32
|
def _clean(n: object) -> bool:
|
|
26
|
-
s =
|
|
27
|
-
return bool(s) and len(s) <= 120 and
|
|
33
|
+
s = unicodedata.normalize("NFC", n) if isinstance(n, str) else ""
|
|
34
|
+
return (bool(s) and len(s) <= 120 and s[0] != "." and all(_ok_char(c) for c in s)
|
|
35
|
+
and ".." not in s and not re.search(r"[/\\\0]", s))
|
|
28
36
|
|
|
29
37
|
|
|
30
38
|
def mkdir_in(*, root: object, rel: object, name: object) -> tuple[int, str]:
|
|
39
|
+
if isinstance(name, str):
|
|
40
|
+
name = unicodedata.normalize("NFC", name) # one spelling of a name, whatever keyboard typed it
|
|
31
41
|
if not _clean(name):
|
|
32
42
|
return _error(400, "a folder name: no /, . or .., and not hidden")
|
|
33
43
|
win = isinstance(root, str) and bool(_WIN_ABS.match(root))
|
|
@@ -112,7 +112,7 @@ async def _publish_entry(call: net.ApiCall, e: dict, out: Callable, err: Callabl
|
|
|
112
112
|
async def _link_by_qr(link_fn: LinkFn | None, out: Callable, err: Callable) -> dict | None:
|
|
113
113
|
"""The QR ritual: show the Add-a-device QR and wait for a signed-in device to seal the account to this computer. The
|
|
114
114
|
account stays in memory; an expired or failed scan changes nothing."""
|
|
115
|
-
out("witbitz-code: on your phone open Spaces → Settings →
|
|
115
|
+
out("witbitz-code: on your phone open Spaces → Settings → Privacy & security → Add a device, and scan the QR below "
|
|
116
116
|
"with the account to pair.\n")
|
|
117
117
|
account = await (link_fn() if link_fn else link.link_node())
|
|
118
118
|
if not account:
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
<section class="card" id="pairCard" hidden>
|
|
34
34
|
<h2>Pair with your Spaces account</h2>
|
|
35
35
|
<ol class="steps">
|
|
36
|
-
<li>On your phone, open <b>Spaces → Settings →
|
|
36
|
+
<li>On your phone, open <b>Spaces → Settings → Privacy & security → Add a device</b>.</li>
|
|
37
37
|
<li>Scan this code with the account that should reach this computer.</li>
|
|
38
38
|
</ol>
|
|
39
39
|
<div class="qr-wrap"><img id="qr" alt="Pairing code — scan it in Spaces" width="260" height="260"></div>
|
|
@@ -173,7 +173,7 @@ async def run_setup(d: Deps) -> dict:
|
|
|
173
173
|
d.say(f" {named(gone)} was removed from your Witbitz account, so this computer pairs again.")
|
|
174
174
|
mine = []
|
|
175
175
|
if not mine:
|
|
176
|
-
d.say(" On your phone, open Spaces → Settings →
|
|
176
|
+
d.say(" On your phone, open Spaces → Settings → Privacy & security → Add a device, and scan the code below.\n")
|
|
177
177
|
await d.pair(port)
|
|
178
178
|
everything = d.all_pairings()
|
|
179
179
|
mine = on(everything, port)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: witbitz-code
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.8
|
|
4
4
|
Summary: Reach OpenCode on this computer from the Witbitz Spaces Code section, through an end-to-end sealed relay.
|
|
5
5
|
Author: Witbitz
|
|
6
6
|
License-Expression: MIT
|
|
@@ -50,7 +50,7 @@ witbitz-code setup
|
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
`setup` walks five steps and skips whatever is already done: it installs OpenCode if it is missing (it asks first), pairs
|
|
53
|
-
this computer (scan the QR code in Spaces → Settings →
|
|
53
|
+
this computer (scan the QR code in Spaces → Settings → Privacy & security → Add a device), which gives the computer **its
|
|
54
54
|
own keys from your Spaces account**, offers to install the tools the agent uses for audio, video, PDFs and scans (ffmpeg,
|
|
55
55
|
Poppler, Tesseract, … — with winget, Homebrew or one `sudo apt-get` line; it shows what it will run and asks once), then
|
|
56
56
|
starts `serve` in the window. Then open Code in Spaces. Leave it running (Ctrl-C
|
|
@@ -52,9 +52,19 @@ def test_the_javascript_lists_the_same():
|
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
def test_new_folder_names_are_one_clean_leaf_on_both_kinds_of_root(tmp_path):
|
|
55
|
-
for bad in ["..", ".x", "a/b", "a\\b", "\\x", "", "a\x00b", "
|
|
55
|
+
for bad in ["..", ".x", "a/b", "a\\b", "\\x", "", "a\x00b", "a\u202eb"]: # "é" is a letter now (any script, 2026-10-11)
|
|
56
56
|
assert mkdir.mkdir_in(root=str(tmp_path), rel=".", name=bad)[0] == 400, bad
|
|
57
57
|
assert mkdir.mkdir_in(root="relative", rel=".", name="x")[0] == 400
|
|
58
58
|
assert mkdir.mkdir_in(root="C:\\Users\\nobody-here", rel=".", name="x")[0] == 404, "a Windows root is a root (not on this computer)"
|
|
59
59
|
assert mkdir.mkdir_in(root=str(tmp_path), rel="..", name="x")[0] == 403, "never above the root"
|
|
60
60
|
assert mkdir.mkdir_in(root=str(tmp_path), rel=".", name="ok one")[0] == 200 and (tmp_path / "ok one").is_dir()
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def test_mkdir_any_script_name_is_made(tmp_path):
|
|
64
|
+
# the owner, 2026-10-11: "making a directory in hebrew does not work" (it was ASCII only) — ⇄ tools/code-mkdir.test.mjs
|
|
65
|
+
for name in ["ערך 3", "עבודה (2)", "Ünïcode", "مشروع", "项目-1"]:
|
|
66
|
+
assert mkdir.mkdir_in(root=str(tmp_path), rel=".", name=name)[0] == 200, name
|
|
67
|
+
for bad in ["x\u202eexe", "a\u200fb", "a\u2066b"]:
|
|
68
|
+
assert mkdir.mkdir_in(root=str(tmp_path), rel=".", name=bad)[0] == 400, repr(bad)
|
|
69
|
+
assert mkdir.mkdir_in(root=str(tmp_path), rel=".", name="U\u0308ber")[0] == 200
|
|
70
|
+
assert "\u00dcber" in [p.name for p in tmp_path.iterdir()], "stored composed (NFC)"
|
|
@@ -53,7 +53,8 @@ def test_the_windows_login_start_runs_pythonw_in_the_background_when_it_is_there
|
|
|
53
53
|
assert launcher_only["args"] == "--no-browser" and launcher_only["target"].endswith("Witbitz Code.cmd'")
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
def test_wsl_runs_headless_held_by_a_hidden_wsl_exe():
|
|
56
|
+
def test_wsl_runs_headless_held_by_a_hidden_wsl_exe(monkeypatch):
|
|
57
|
+
monkeypatch.setenv("WSL_DISTRO_NAME", "UbuntuD") # the runner is plain Linux: the entry is named by the distro
|
|
57
58
|
from witbitz_code import wslstart as ws
|
|
58
59
|
seen = []
|
|
59
60
|
ok, why = ws.launch_background(ps=lambda script: seen.append(script) or (0, "ok"), which=lambda n: "/home/a/.local/bin/witbitz-code",
|
|
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.6.6 → witbitz_code-1.6.8}/src/witbitz_code/opencode_plugins/witbitz-media-server.mjs
RENAMED
|
File without changes
|
{witbitz_code-1.6.6 → witbitz_code-1.6.8}/src/witbitz_code/opencode_plugins/witbitz-notes.js
RENAMED
|
File without changes
|
{witbitz_code-1.6.6 → witbitz_code-1.6.8}/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
|