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.
- voiceterm-1.0.64/.gitignore +104 -0
- voiceterm-1.0.64/PKG-INFO +52 -0
- voiceterm-1.0.64/README.md +30 -0
- voiceterm-1.0.64/pyproject.toml +36 -0
- voiceterm-1.0.64/src/voiceterm/__init__.py +6 -0
- voiceterm-1.0.64/src/voiceterm/cli.py +108 -0
|
@@ -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,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
|
+
|