voiceterm 1.0.64__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.
@@ -0,0 +1,104 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ .venv/
8
+ venv/
9
+ ENV/
10
+ env/
11
+ *.egg-info/
12
+ dist/
13
+ build/
14
+
15
+ # Rust
16
+ /src/target/
17
+ **/*.rs.bk
18
+ *.pdb
19
+ Cargo.lock
20
+
21
+ # TypeScript/Node
22
+ ts_cli/
23
+ ts_cli/node_modules/
24
+ ts_cli/dist/
25
+ node_modules/
26
+
27
+ # Audio/Media
28
+ *.wav
29
+ *.mp3
30
+ *.m4a
31
+
32
+ # Whisper models (too large for GitHub)
33
+ whisper_models/*.bin
34
+ whisper_models/*.ggml
35
+ whisper_models/*.onnx
36
+
37
+ # Whisper output
38
+ *.txt
39
+ *.srt
40
+ *.vtt
41
+ *.json
42
+
43
+ # IDE
44
+ .idea/
45
+ .vscode/
46
+ *.swp
47
+ *.swo
48
+ *~
49
+ .DS_Store
50
+
51
+ # Logs
52
+ *.log
53
+ logs/
54
+
55
+ # Temporary files
56
+ /tmp/
57
+ /temp/
58
+ *.tmp
59
+ /bin/
60
+
61
+ # Environment variables
62
+ .env
63
+ .env.local
64
+
65
+ # Test outputs
66
+ test_output/
67
+ *.test
68
+
69
+ # macOS
70
+ .DS_Store
71
+ .AppleDouble
72
+ .LSOverride
73
+ docs/Screenshot 2026-01-28 at 8.07.36 PM.png
74
+ docs/Screenshot 2026-01-28 at 8.15.12 PM.png
75
+
76
+ # Credentials (important!)
77
+ credentials.json
78
+ *.pem
79
+ *.key
80
+ *.cert
81
+
82
+ # Legacy scripts and binaries
83
+ /test
84
+ /voice
85
+
86
+ # Internal development docs
87
+ PROJECT_OVERVIEW.md
88
+ master_index.md
89
+ project.md
90
+ # Old docs paths (removed)
91
+ # dev/archive/ is tracked
92
+ **/PROJECT_OVERVIEW.md
93
+ **/master_index.md
94
+ /AGENTS.md
95
+ src/mutants.out*
96
+ claudeaudit.md
97
+
98
+ # AI tooling (local only)
99
+ CLAUDE.md
100
+ **/CLAUDE.md
101
+ .claude/
102
+ docs/active/claude_review*.md
103
+ docs/active/visual*.md
104
+ dev/active/DEV_MODE_PLAN.md
@@ -0,0 +1,52 @@
1
+ Metadata-Version: 2.4
2
+ Name: voiceterm
3
+ Version: 1.0.64
4
+ Summary: Python launcher for the VoiceTerm native CLI
5
+ Project-URL: Homepage, https://github.com/jguida941/voiceterm
6
+ Project-URL: Repository, https://github.com/jguida941/voiceterm
7
+ Project-URL: Issues, https://github.com/jguida941/voiceterm/issues
8
+ Author: VoiceTerm Maintainers
9
+ License: MIT
10
+ Keywords: claude,cli,codex,terminal,voice,whisper
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: MacOS
16
+ Classifier: Operating System :: POSIX :: Linux
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Topic :: Software Development :: User Interfaces
20
+ Requires-Python: >=3.9
21
+ Description-Content-Type: text/markdown
22
+
23
+ # VoiceTerm PyPI Package
24
+
25
+ This package installs a `voiceterm` launcher for Python environments.
26
+
27
+ On first run, the launcher bootstraps the native Rust CLI into:
28
+
29
+ - `~/.local/share/voiceterm/native/bin/voiceterm` (default)
30
+
31
+ It uses:
32
+
33
+ - `git clone` of the VoiceTerm repo
34
+ - `cargo install --path src --bin voiceterm`
35
+
36
+ ## Runtime requirements
37
+
38
+ - `git`
39
+ - Rust toolchain (`cargo`, `rustc`)
40
+
41
+ If you already have the native binary elsewhere, set:
42
+
43
+ - `VOICETERM_NATIVE_BIN=/absolute/path/to/voiceterm`
44
+
45
+ To override the bootstrap install root:
46
+
47
+ - `VOICETERM_PY_NATIVE_ROOT=/custom/root`
48
+
49
+ To override the source repo URL:
50
+
51
+ - `VOICETERM_REPO_URL=https://github.com/jguida941/voiceterm`
52
+
@@ -0,0 +1,30 @@
1
+ # VoiceTerm PyPI Package
2
+
3
+ This package installs a `voiceterm` launcher for Python environments.
4
+
5
+ On first run, the launcher bootstraps the native Rust CLI into:
6
+
7
+ - `~/.local/share/voiceterm/native/bin/voiceterm` (default)
8
+
9
+ It uses:
10
+
11
+ - `git clone` of the VoiceTerm repo
12
+ - `cargo install --path src --bin voiceterm`
13
+
14
+ ## Runtime requirements
15
+
16
+ - `git`
17
+ - Rust toolchain (`cargo`, `rustc`)
18
+
19
+ If you already have the native binary elsewhere, set:
20
+
21
+ - `VOICETERM_NATIVE_BIN=/absolute/path/to/voiceterm`
22
+
23
+ To override the bootstrap install root:
24
+
25
+ - `VOICETERM_PY_NATIVE_ROOT=/custom/root`
26
+
27
+ To override the source repo URL:
28
+
29
+ - `VOICETERM_REPO_URL=https://github.com/jguida941/voiceterm`
30
+
@@ -0,0 +1,36 @@
1
+ [build-system]
2
+ requires = ["hatchling>=1.24"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "voiceterm"
7
+ version = "1.0.64"
8
+ description = "Python launcher for the VoiceTerm native CLI"
9
+ readme = "README.md"
10
+ requires-python = ">=3.9"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "VoiceTerm Maintainers" }]
13
+ keywords = ["voice", "terminal", "codex", "claude", "whisper", "cli"]
14
+ classifiers = [
15
+ "Development Status :: 4 - Beta",
16
+ "Environment :: Console",
17
+ "Intended Audience :: Developers",
18
+ "License :: OSI Approved :: MIT License",
19
+ "Operating System :: MacOS",
20
+ "Operating System :: POSIX :: Linux",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3 :: Only",
23
+ "Topic :: Software Development :: User Interfaces",
24
+ ]
25
+
26
+ [project.urls]
27
+ Homepage = "https://github.com/jguida941/voiceterm"
28
+ Repository = "https://github.com/jguida941/voiceterm"
29
+ Issues = "https://github.com/jguida941/voiceterm/issues"
30
+
31
+ [project.scripts]
32
+ voiceterm = "voiceterm.cli:main"
33
+
34
+ [tool.hatch.build.targets.wheel]
35
+ packages = ["src/voiceterm"]
36
+
@@ -0,0 +1,6 @@
1
+ """VoiceTerm PyPI launcher package."""
2
+
3
+ __all__ = ["__version__"]
4
+
5
+ __version__ = "1.0.64"
6
+
@@ -0,0 +1,108 @@
1
+ """PyPI launcher for bootstrapping and running the native VoiceTerm binary."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ import shutil
7
+ import subprocess
8
+ import sys
9
+ import tempfile
10
+ from pathlib import Path
11
+
12
+
13
+ DEFAULT_REPO_URL = "https://github.com/jguida941/voiceterm"
14
+
15
+
16
+ def _native_root() -> Path:
17
+ configured = os.environ.get("VOICETERM_PY_NATIVE_ROOT")
18
+ if configured:
19
+ return Path(configured).expanduser()
20
+ return Path.home() / ".local" / "share" / "voiceterm" / "native"
21
+
22
+
23
+ def _native_bin() -> Path:
24
+ configured = os.environ.get("VOICETERM_NATIVE_BIN")
25
+ if configured:
26
+ return Path(configured).expanduser()
27
+ return _native_root() / "bin" / "voiceterm"
28
+
29
+
30
+ def _run(cmd: list[str], *, check: bool = True) -> subprocess.CompletedProcess[str]:
31
+ return subprocess.run(cmd, check=check, text=True)
32
+
33
+
34
+ def _bootstrap_native_bin() -> Path:
35
+ cargo = shutil.which("cargo")
36
+ git = shutil.which("git")
37
+ if not cargo or not git:
38
+ missing = []
39
+ if not git:
40
+ missing.append("git")
41
+ if not cargo:
42
+ missing.append("cargo")
43
+ raise RuntimeError(
44
+ "Missing required bootstrap tools: "
45
+ + ", ".join(missing)
46
+ + ". Install them or set VOICETERM_NATIVE_BIN."
47
+ )
48
+
49
+ root = _native_root()
50
+ root.mkdir(parents=True, exist_ok=True)
51
+ repo_url = os.environ.get("VOICETERM_REPO_URL", DEFAULT_REPO_URL)
52
+
53
+ with tempfile.TemporaryDirectory(prefix="voiceterm-bootstrap-") as tmp:
54
+ repo_dir = Path(tmp) / "repo"
55
+ _run([git, "clone", "--depth", "1", repo_url, str(repo_dir)])
56
+ manifest_dir = repo_dir / "src"
57
+ if not manifest_dir.exists():
58
+ raise RuntimeError(
59
+ f"Expected Cargo project at {manifest_dir}, but it does not exist."
60
+ )
61
+ _run(
62
+ [
63
+ cargo,
64
+ "install",
65
+ "--locked",
66
+ "--root",
67
+ str(root),
68
+ "--path",
69
+ str(manifest_dir),
70
+ "--bin",
71
+ "voiceterm",
72
+ ]
73
+ )
74
+
75
+ native = _native_bin()
76
+ if not native.exists():
77
+ raise RuntimeError(f"Bootstrap completed but binary was not found at {native}.")
78
+ return native
79
+
80
+
81
+ def _ensure_native_bin() -> Path:
82
+ native = _native_bin()
83
+ if native.exists():
84
+ return native
85
+ return _bootstrap_native_bin()
86
+
87
+
88
+ def main() -> int:
89
+ try:
90
+ native = _ensure_native_bin()
91
+ except Exception as err: # pragma: no cover - user-facing launcher error
92
+ print(f"voiceterm launcher error: {err}", file=sys.stderr)
93
+ print(
94
+ "Install native VoiceTerm manually or set VOICETERM_NATIVE_BIN.",
95
+ file=sys.stderr,
96
+ )
97
+ return 1
98
+
99
+ try:
100
+ completed = subprocess.run([str(native), *sys.argv[1:]])
101
+ return int(completed.returncode)
102
+ except KeyboardInterrupt:
103
+ return 130
104
+
105
+
106
+ if __name__ == "__main__":
107
+ raise SystemExit(main())
108
+