@staff0rd/assist 0.92.1 → 0.92.3

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.
@@ -5,6 +5,7 @@ Never use `pip install` directly. All Python dependency management uses `uv`.
5
5
  Every `uv` command that touches this project MUST set `UV_PROJECT_ENVIRONMENT` to point to the home dir venv. This includes `uv sync`, `uv run`, and any other uv command. There must be no `.venv/`, `__pycache__/`, `*.egg-info/`, or any other generated artifacts in this directory.
6
6
 
7
7
  - Dependencies are declared in `pyproject.toml`
8
- - Bootstrap uses `uv sync --project <dir> --no-install-project` with `UV_PROJECT_ENVIRONMENT=~/.assist/voice/.venv`
8
+ - Runtime deps (torch, nemo, etc.) are in the `runtime` optional group; dev tools (ruff, xenon, radon) are in `dev`
9
+ - Bootstrap uses `uv sync --project <dir> --extra runtime --no-install-project` with `UV_PROJECT_ENVIRONMENT=~/.assist/voice/.venv`
9
10
  - To add a dependency: edit `pyproject.toml`, then run `UV_PROJECT_ENVIRONMENT=~/.assist/voice/.venv uv lock --project src/commands/voice/python`
10
11
  - No build system — this is a virtual project, not an installable package
@@ -2,7 +2,10 @@
2
2
  name = "assist-voice"
3
3
  version = "0.1.0"
4
4
  requires-python = ">=3.10"
5
- dependencies = [
5
+ dependencies = []
6
+
7
+ [project.optional-dependencies]
8
+ runtime = [
6
9
  "onnxruntime>=1.17",
7
10
  "sounddevice>=0.4",
8
11
  "numpy>=1.24",
@@ -10,8 +13,6 @@ dependencies = [
10
13
  "silero-vad>=5.1",
11
14
  "torch>=2.0",
12
15
  ]
13
-
14
- [project.optional-dependencies]
15
16
  dev = [
16
17
  "radon>=6.0",
17
18
  "ruff>=0.8",
@@ -240,7 +240,14 @@ wheels = [
240
240
  name = "assist-voice"
241
241
  version = "0.1.0"
242
242
  source = { virtual = "." }
243
- dependencies = [
243
+
244
+ [package.optional-dependencies]
245
+ dev = [
246
+ { name = "radon" },
247
+ { name = "ruff" },
248
+ { name = "xenon" },
249
+ ]
250
+ runtime = [
244
251
  { name = "nemo-toolkit", extra = ["asr"] },
245
252
  { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
246
253
  { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
@@ -250,26 +257,19 @@ dependencies = [
250
257
  { name = "torch" },
251
258
  ]
252
259
 
253
- [package.optional-dependencies]
254
- dev = [
255
- { name = "radon" },
256
- { name = "ruff" },
257
- { name = "xenon" },
258
- ]
259
-
260
260
  [package.metadata]
261
261
  requires-dist = [
262
- { name = "nemo-toolkit", extras = ["asr"], specifier = ">=1.22" },
263
- { name = "numpy", specifier = ">=1.24" },
264
- { name = "onnxruntime", specifier = ">=1.17" },
262
+ { name = "nemo-toolkit", extras = ["asr"], marker = "extra == 'runtime'", specifier = ">=1.22" },
263
+ { name = "numpy", marker = "extra == 'runtime'", specifier = ">=1.24" },
264
+ { name = "onnxruntime", marker = "extra == 'runtime'", specifier = ">=1.17" },
265
265
  { name = "radon", marker = "extra == 'dev'", specifier = ">=6.0" },
266
266
  { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.8" },
267
- { name = "silero-vad", specifier = ">=5.1" },
268
- { name = "sounddevice", specifier = ">=0.4" },
269
- { name = "torch", specifier = ">=2.0", index = "https://download.pytorch.org/whl/cu124" },
267
+ { name = "silero-vad", marker = "extra == 'runtime'", specifier = ">=5.1" },
268
+ { name = "sounddevice", marker = "extra == 'runtime'", specifier = ">=0.4" },
269
+ { name = "torch", marker = "extra == 'runtime'", specifier = ">=2.0", index = "https://download.pytorch.org/whl/cu124" },
270
270
  { name = "xenon", marker = "extra == 'dev'", specifier = ">=0.9" },
271
271
  ]
272
- provides-extras = ["dev"]
272
+ provides-extras = ["runtime", "dev"]
273
273
 
274
274
  [[package]]
275
275
  name = "asttokens"
@@ -1398,6 +1398,7 @@ wheels = [
1398
1398
  { url = "https://files.pythonhosted.org/packages/38/3f/9859f655d11901e7b2996c6e3d33e0caa9a1d4572c3bc61ed0faa64b2f4c/greenlet-3.3.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9bc885b89709d901859cf95179ec9f6bb67a3d2bb1f0e88456461bd4b7f8fd0d", size = 277747, upload-time = "2026-02-20T20:16:21.325Z" },
1399
1399
  { url = "https://files.pythonhosted.org/packages/fb/07/cb284a8b5c6498dbd7cba35d31380bb123d7dceaa7907f606c8ff5993cbf/greenlet-3.3.2-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b568183cf65b94919be4438dc28416b234b678c608cafac8874dfeeb2a9bbe13", size = 579202, upload-time = "2026-02-20T20:47:28.955Z" },
1400
1400
  { url = "https://files.pythonhosted.org/packages/ed/45/67922992b3a152f726163b19f890a85129a992f39607a2a53155de3448b8/greenlet-3.3.2-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:527fec58dc9f90efd594b9b700662ed3fb2493c2122067ac9c740d98080a620e", size = 590620, upload-time = "2026-02-20T20:55:55.581Z" },
1401
+ { url = "https://files.pythonhosted.org/packages/03/5f/6e2a7d80c353587751ef3d44bb947f0565ec008a2e0927821c007e96d3a7/greenlet-3.3.2-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:508c7f01f1791fbc8e011bd508f6794cb95397fdb198a46cb6635eb5b78d85a7", size = 602132, upload-time = "2026-02-20T21:02:43.261Z" },
1401
1402
  { url = "https://files.pythonhosted.org/packages/ad/55/9f1ebb5a825215fadcc0f7d5073f6e79e3007e3282b14b22d6aba7ca6cb8/greenlet-3.3.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ad0c8917dd42a819fe77e6bdfcb84e3379c0de956469301d9fd36427a1ca501f", size = 591729, upload-time = "2026-02-20T20:20:58.395Z" },
1402
1403
  { url = "https://files.pythonhosted.org/packages/24/b4/21f5455773d37f94b866eb3cf5caed88d6cea6dd2c6e1f9c34f463cba3ec/greenlet-3.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:97245cc10e5515dbc8c3104b2928f7f02b6813002770cfaffaf9a6e0fc2b94ef", size = 1551946, upload-time = "2026-02-20T20:49:31.102Z" },
1403
1404
  { url = "https://files.pythonhosted.org/packages/00/68/91f061a926abead128fe1a87f0b453ccf07368666bd59ffa46016627a930/greenlet-3.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8c1fdd7d1b309ff0da81d60a9688a8bd044ac4e18b250320a96fc68d31c209ca", size = 1618494, upload-time = "2026-02-20T20:21:06.541Z" },
@@ -1405,6 +1406,7 @@ wheels = [
1405
1406
  { url = "https://files.pythonhosted.org/packages/f3/47/16400cb42d18d7a6bb46f0626852c1718612e35dcb0dffa16bbaffdf5dd2/greenlet-3.3.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:c56692189a7d1c7606cb794be0a8381470d95c57ce5be03fb3d0ef57c7853b86", size = 278890, upload-time = "2026-02-20T20:19:39.263Z" },
1406
1407
  { url = "https://files.pythonhosted.org/packages/a3/90/42762b77a5b6aa96cd8c0e80612663d39211e8ae8a6cd47c7f1249a66262/greenlet-3.3.2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ebd458fa8285960f382841da585e02201b53a5ec2bac6b156fc623b5ce4499f", size = 581120, upload-time = "2026-02-20T20:47:30.161Z" },
1407
1408
  { url = "https://files.pythonhosted.org/packages/bf/6f/f3d64f4fa0a9c7b5c5b3c810ff1df614540d5aa7d519261b53fba55d4df9/greenlet-3.3.2-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a443358b33c4ec7b05b79a7c8b466f5d275025e750298be7340f8fc63dff2a55", size = 594363, upload-time = "2026-02-20T20:55:56.965Z" },
1409
+ { url = "https://files.pythonhosted.org/packages/9c/8b/1430a04657735a3f23116c2e0d5eb10220928846e4537a938a41b350bed6/greenlet-3.3.2-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4375a58e49522698d3e70cc0b801c19433021b5c37686f7ce9c65b0d5c8677d2", size = 605046, upload-time = "2026-02-20T21:02:45.234Z" },
1408
1410
  { url = "https://files.pythonhosted.org/packages/72/83/3e06a52aca8128bdd4dcd67e932b809e76a96ab8c232a8b025b2850264c5/greenlet-3.3.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e2cd90d413acbf5e77ae41e5d3c9b3ac1d011a756d7284d7f3f2b806bbd6358", size = 594156, upload-time = "2026-02-20T20:20:59.955Z" },
1409
1411
  { url = "https://files.pythonhosted.org/packages/70/79/0de5e62b873e08fe3cef7dbe84e5c4bc0e8ed0c7ff131bccb8405cd107c8/greenlet-3.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:442b6057453c8cb29b4fb36a2ac689382fc71112273726e2423f7f17dc73bf99", size = 1554649, upload-time = "2026-02-20T20:49:32.293Z" },
1410
1412
  { url = "https://files.pythonhosted.org/packages/5a/00/32d30dee8389dc36d42170a9c66217757289e2afb0de59a3565260f38373/greenlet-3.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:45abe8eb6339518180d5a7fa47fa01945414d7cca5ecb745346fc6a87d2750be", size = 1619472, upload-time = "2026-02-20T20:21:07.966Z" },
@@ -1413,6 +1415,7 @@ wheels = [
1413
1415
  { url = "https://files.pythonhosted.org/packages/ea/ab/1608e5a7578e62113506740b88066bf09888322a311cff602105e619bd87/greenlet-3.3.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:ac8d61d4343b799d1e526db579833d72f23759c71e07181c2d2944e429eb09cd", size = 280358, upload-time = "2026-02-20T20:17:43.971Z" },
1414
1416
  { url = "https://files.pythonhosted.org/packages/a5/23/0eae412a4ade4e6623ff7626e38998cb9b11e9ff1ebacaa021e4e108ec15/greenlet-3.3.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ceec72030dae6ac0c8ed7591b96b70410a8be370b6a477b1dbc072856ad02bd", size = 601217, upload-time = "2026-02-20T20:47:31.462Z" },
1415
1417
  { url = "https://files.pythonhosted.org/packages/f8/16/5b1678a9c07098ecb9ab2dd159fafaf12e963293e61ee8d10ecb55273e5e/greenlet-3.3.2-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2a5be83a45ce6188c045bcc44b0ee037d6a518978de9a5d97438548b953a1ac", size = 611792, upload-time = "2026-02-20T20:55:58.423Z" },
1418
+ { url = "https://files.pythonhosted.org/packages/5c/c5/cc09412a29e43406eba18d61c70baa936e299bc27e074e2be3806ed29098/greenlet-3.3.2-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ae9e21c84035c490506c17002f5c8ab25f980205c3e61ddb3a2a2a2e6c411fcb", size = 626250, upload-time = "2026-02-20T21:02:46.596Z" },
1416
1419
  { url = "https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43e99d1749147ac21dde49b99c9abffcbc1e2d55c67501465ef0930d6e78e070", size = 613875, upload-time = "2026-02-20T20:21:01.102Z" },
1417
1420
  { url = "https://files.pythonhosted.org/packages/fc/dd/845f249c3fcd69e32df80cdab059b4be8b766ef5830a3d0aa9d6cad55beb/greenlet-3.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c956a19350e2c37f2c48b336a3afb4bff120b36076d9d7fb68cb44e05d95b79", size = 1571467, upload-time = "2026-02-20T20:49:33.495Z" },
1418
1421
  { url = "https://files.pythonhosted.org/packages/2a/50/2649fe21fcc2b56659a452868e695634722a6655ba245d9f77f5656010bf/greenlet-3.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6c6f8ba97d17a1e7d664151284cb3315fc5f8353e75221ed4324f84eb162b395", size = 1640001, upload-time = "2026-02-20T20:21:09.154Z" },
@@ -1421,6 +1424,7 @@ wheels = [
1421
1424
  { url = "https://files.pythonhosted.org/packages/ac/48/f8b875fa7dea7dd9b33245e37f065af59df6a25af2f9561efa8d822fde51/greenlet-3.3.2-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:aa6ac98bdfd716a749b84d4034486863fd81c3abde9aa3cf8eff9127981a4ae4", size = 279120, upload-time = "2026-02-20T20:19:01.9Z" },
1422
1425
  { url = "https://files.pythonhosted.org/packages/49/8d/9771d03e7a8b1ee456511961e1b97a6d77ae1dea4a34a5b98eee706689d3/greenlet-3.3.2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab0c7e7901a00bc0a7284907273dc165b32e0d109a6713babd04471327ff7986", size = 603238, upload-time = "2026-02-20T20:47:32.873Z" },
1423
1426
  { url = "https://files.pythonhosted.org/packages/59/0e/4223c2bbb63cd5c97f28ffb2a8aee71bdfb30b323c35d409450f51b91e3e/greenlet-3.3.2-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d248d8c23c67d2291ffd47af766e2a3aa9fa1c6703155c099feb11f526c63a92", size = 614219, upload-time = "2026-02-20T20:55:59.817Z" },
1427
+ { url = "https://files.pythonhosted.org/packages/94/2b/4d012a69759ac9d77210b8bfb128bc621125f5b20fc398bce3940d036b1c/greenlet-3.3.2-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ccd21bb86944ca9be6d967cf7691e658e43417782bce90b5d2faeda0ff78a7dd", size = 628268, upload-time = "2026-02-20T21:02:48.024Z" },
1424
1428
  { url = "https://files.pythonhosted.org/packages/7a/34/259b28ea7a2a0c904b11cd36c79b8cef8019b26ee5dbe24e73b469dea347/greenlet-3.3.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b6997d360a4e6a4e936c0f9625b1c20416b8a0ea18a8e19cabbefc712e7397ab", size = 616774, upload-time = "2026-02-20T20:21:02.454Z" },
1425
1429
  { url = "https://files.pythonhosted.org/packages/0a/03/996c2d1689d486a6e199cb0f1cf9e4aa940c500e01bdf201299d7d61fa69/greenlet-3.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:64970c33a50551c7c50491671265d8954046cb6e8e2999aacdd60e439b70418a", size = 1571277, upload-time = "2026-02-20T20:49:34.795Z" },
1426
1430
  { url = "https://files.pythonhosted.org/packages/d9/c4/2570fc07f34a39f2caf0bf9f24b0a1a0a47bc2e8e465b2c2424821389dfc/greenlet-3.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1a9172f5bf6bd88e6ba5a84e0a68afeac9dc7b6b412b245dd64f52d83c81e55b", size = 1640455, upload-time = "2026-02-20T20:21:10.261Z" },
@@ -1429,6 +1433,7 @@ wheels = [
1429
1433
  { url = "https://files.pythonhosted.org/packages/3f/ae/8bffcbd373b57a5992cd077cbe8858fff39110480a9d50697091faea6f39/greenlet-3.3.2-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:8d1658d7291f9859beed69a776c10822a0a799bc4bfe1bd4272bb60e62507dab", size = 279650, upload-time = "2026-02-20T20:18:00.783Z" },
1430
1434
  { url = "https://files.pythonhosted.org/packages/d1/c0/45f93f348fa49abf32ac8439938726c480bd96b2a3c6f4d949ec0124b69f/greenlet-3.3.2-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18cb1b7337bca281915b3c5d5ae19f4e76d35e1df80f4ad3c1a7be91fadf1082", size = 650295, upload-time = "2026-02-20T20:47:34.036Z" },
1431
1435
  { url = "https://files.pythonhosted.org/packages/b3/de/dd7589b3f2b8372069ab3e4763ea5329940fc7ad9dcd3e272a37516d7c9b/greenlet-3.3.2-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2e47408e8ce1c6f1ceea0dffcdf6ebb85cc09e55c7af407c99f1112016e45e9", size = 662163, upload-time = "2026-02-20T20:56:01.295Z" },
1436
+ { url = "https://files.pythonhosted.org/packages/cd/ac/85804f74f1ccea31ba518dcc8ee6f14c79f73fe36fa1beba38930806df09/greenlet-3.3.2-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e3cb43ce200f59483eb82949bf1835a99cf43d7571e900d7c8d5c62cdf25d2f9", size = 675371, upload-time = "2026-02-20T21:02:49.664Z" },
1432
1437
  { url = "https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63d10328839d1973e5ba35e98cccbca71b232b14051fd957b6f8b6e8e80d0506", size = 664160, upload-time = "2026-02-20T20:21:04.015Z" },
1433
1438
  { url = "https://files.pythonhosted.org/packages/48/cf/56832f0c8255d27f6c35d41b5ec91168d74ec721d85f01a12131eec6b93c/greenlet-3.3.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e4ab3cfb02993c8cc248ea73d7dae6cec0253e9afa311c9b37e603ca9fad2ce", size = 1619181, upload-time = "2026-02-20T20:49:36.052Z" },
1434
1439
  { url = "https://files.pythonhosted.org/packages/0a/23/b90b60a4aabb4cec0796e55f25ffbfb579a907c3898cd2905c8918acaa16/greenlet-3.3.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94ad81f0fd3c0c0681a018a976e5c2bd2ca2d9d94895f23e7bb1af4e8af4e2d5", size = 1687713, upload-time = "2026-02-20T20:21:11.684Z" },
@@ -1437,6 +1442,7 @@ wheels = [
1437
1442
  { url = "https://files.pythonhosted.org/packages/98/6d/8f2ef704e614bcf58ed43cfb8d87afa1c285e98194ab2cfad351bf04f81e/greenlet-3.3.2-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:e26e72bec7ab387ac80caa7496e0f908ff954f31065b0ffc1f8ecb1338b11b54", size = 286617, upload-time = "2026-02-20T20:19:29.856Z" },
1438
1443
  { url = "https://files.pythonhosted.org/packages/5e/0d/93894161d307c6ea237a43988f27eba0947b360b99ac5239ad3fe09f0b47/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b466dff7a4ffda6ca975979bab80bdadde979e29fc947ac3be4451428d8b0e4", size = 655189, upload-time = "2026-02-20T20:47:35.742Z" },
1439
1444
  { url = "https://files.pythonhosted.org/packages/f5/2c/d2d506ebd8abcb57386ec4f7ba20f4030cbe56eae541bc6fd6ef399c0b41/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b8bddc5b73c9720bea487b3bffdb1840fe4e3656fba3bd40aa1489e9f37877ff", size = 658225, upload-time = "2026-02-20T20:56:02.527Z" },
1445
+ { url = "https://files.pythonhosted.org/packages/d1/67/8197b7e7e602150938049d8e7f30de1660cfb87e4c8ee349b42b67bdb2e1/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:59b3e2c40f6706b05a9cd299c836c6aa2378cabe25d021acd80f13abf81181cf", size = 666581, upload-time = "2026-02-20T21:02:51.526Z" },
1440
1446
  { url = "https://files.pythonhosted.org/packages/8e/30/3a09155fbf728673a1dea713572d2d31159f824a37c22da82127056c44e4/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b26b0f4428b871a751968285a1ac9648944cea09807177ac639b030bddebcea4", size = 657907, upload-time = "2026-02-20T20:21:05.259Z" },
1441
1447
  { url = "https://files.pythonhosted.org/packages/f3/fd/d05a4b7acd0154ed758797f0a43b4c0962a843bedfe980115e842c5b2d08/greenlet-3.3.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1fb39a11ee2e4d94be9a76671482be9398560955c9e568550de0224e41104727", size = 1618857, upload-time = "2026-02-20T20:49:37.309Z" },
1442
1448
  { url = "https://files.pythonhosted.org/packages/6f/e1/50ee92a5db521de8f35075b5eff060dd43d39ebd46c2181a2042f7070385/greenlet-3.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:20154044d9085151bc309e7689d6f7ba10027f8f5a8c0676ad398b951913d89e", size = 1680010, upload-time = "2026-02-20T20:21:13.427Z" },
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import { Command } from "commander";
6
6
  // package.json
7
7
  var package_default = {
8
8
  name: "@staff0rd/assist",
9
- version: "0.92.1",
9
+ version: "0.92.3",
10
10
  type: "module",
11
11
  main: "dist/index.js",
12
12
  bin: {
@@ -1424,7 +1424,10 @@ Total: ${lines.length} hardcoded color(s)`);
1424
1424
  // src/commands/verify/run/resolveEntries.ts
1425
1425
  import * as path13 from "path";
1426
1426
  function quoteIfNeeded(arg) {
1427
- return arg.includes(" ") ? `"${arg}"` : arg;
1427
+ if (/[^a-zA-Z0-9_./:=@%^+,-]/.test(arg)) {
1428
+ return `'${arg.replace(/'/g, "'\\''")}'`;
1429
+ }
1430
+ return arg;
1428
1431
  }
1429
1432
  function buildFullCommand(command, args) {
1430
1433
  return [quoteIfNeeded(command), ...(args ?? []).map(quoteIfNeeded)].join(" ");
@@ -1497,6 +1500,32 @@ Total: ${folders.length} venv folder(s)`);
1497
1500
  }
1498
1501
  }
1499
1502
 
1503
+ // src/commands/verify/run/filterByChangedFiles.ts
1504
+ import { minimatch as minimatch2 } from "minimatch";
1505
+
1506
+ // src/commands/verify/run/getChangedFiles.ts
1507
+ import { execSync as execSync7 } from "child_process";
1508
+ function getChangedFiles() {
1509
+ const output = execSync7("git diff --name-only HEAD", {
1510
+ encoding: "utf-8"
1511
+ }).trim();
1512
+ if (output === "") return [];
1513
+ return output.split("\n");
1514
+ }
1515
+
1516
+ // src/commands/verify/run/filterByChangedFiles.ts
1517
+ function filterByChangedFiles(entries) {
1518
+ const hasFilters = entries.some((e) => e.filter);
1519
+ if (!hasFilters) return entries;
1520
+ const changedFiles = getChangedFiles();
1521
+ return entries.filter((entry) => {
1522
+ const { filter } = entry;
1523
+ if (!filter) return true;
1524
+ if (changedFiles.length === 0) return false;
1525
+ return changedFiles.some((file) => minimatch2(file, filter));
1526
+ });
1527
+ }
1528
+
1500
1529
  // src/commands/verify/run/createTimerCallback/printTaskStatuses.ts
1501
1530
  function formatDuration(ms) {
1502
1531
  if (ms < 1e3) {
@@ -1539,32 +1568,6 @@ function initTaskStatuses(scripts) {
1539
1568
  return scripts.map((script) => ({ script, startTime: Date.now() }));
1540
1569
  }
1541
1570
 
1542
- // src/commands/verify/run/filterByChangedFiles.ts
1543
- import { minimatch as minimatch2 } from "minimatch";
1544
-
1545
- // src/commands/verify/run/getChangedFiles.ts
1546
- import { execSync as execSync7 } from "child_process";
1547
- function getChangedFiles() {
1548
- const output = execSync7("git diff --name-only HEAD", {
1549
- encoding: "utf-8"
1550
- }).trim();
1551
- if (output === "") return [];
1552
- return output.split("\n");
1553
- }
1554
-
1555
- // src/commands/verify/run/filterByChangedFiles.ts
1556
- function filterByChangedFiles(entries) {
1557
- const hasFilters = entries.some((e) => e.filter);
1558
- if (!hasFilters) return entries;
1559
- const changedFiles = getChangedFiles();
1560
- return entries.filter((entry) => {
1561
- const { filter } = entry;
1562
- if (!filter) return true;
1563
- if (changedFiles.length === 0) return false;
1564
- return changedFiles.some((file) => minimatch2(file, filter));
1565
- });
1566
- }
1567
-
1568
1571
  // src/commands/verify/run/spawnCommand.ts
1569
1572
  import { spawn } from "child_process";
1570
1573
 
@@ -1580,17 +1583,20 @@ function expandEnv(env) {
1580
1583
  }
1581
1584
 
1582
1585
  // src/commands/verify/run/spawnCommand.ts
1583
- var isClaudeCode = !!process.env.CLAUDECODE;
1586
+ var suppressOutput = !!process.env.CLAUDECODE;
1587
+ function setVerbose(verbose) {
1588
+ if (verbose) suppressOutput = false;
1589
+ }
1584
1590
  function spawnCommand(fullCommand, cwd, env) {
1585
1591
  return spawn(fullCommand, [], {
1586
- stdio: isClaudeCode ? "pipe" : "inherit",
1592
+ stdio: suppressOutput ? "pipe" : "inherit",
1587
1593
  shell: true,
1588
1594
  cwd: cwd ?? process.cwd(),
1589
1595
  env: env ? { ...process.env, ...expandEnv(env) } : void 0
1590
1596
  });
1591
1597
  }
1592
1598
  function collectOutput(child) {
1593
- if (!isClaudeCode) return [];
1599
+ if (!suppressOutput) return [];
1594
1600
  const chunks = [];
1595
1601
  child.stdout?.on("data", (data) => chunks.push(data));
1596
1602
  child.stderr?.on("data", (data) => chunks.push(data));
@@ -1602,7 +1608,7 @@ function flushIfFailed(exitCode, chunks) {
1602
1608
  }
1603
1609
  }
1604
1610
 
1605
- // src/commands/verify/run/index.ts
1611
+ // src/commands/verify/run/runAllEntries.ts
1606
1612
  function runEntry(entry, onComplete) {
1607
1613
  return new Promise((resolve3) => {
1608
1614
  const child = spawnCommand(entry.fullCommand, entry.cwd, entry.env);
@@ -1615,6 +1621,11 @@ function runEntry(entry, onComplete) {
1615
1621
  });
1616
1622
  });
1617
1623
  }
1624
+ function exitIfFailed(failed) {
1625
+ if (failed.length === 0) return;
1626
+ logFailedScripts(failed);
1627
+ process.exit(1);
1628
+ }
1618
1629
  function runAllEntries(entries, timer) {
1619
1630
  const taskStatuses = initTaskStatuses(entries.map((e) => e.name));
1620
1631
  return Promise.all(
@@ -1626,29 +1637,27 @@ function runAllEntries(entries, timer) {
1626
1637
  )
1627
1638
  );
1628
1639
  }
1640
+ function handleResults(results, totalCount) {
1641
+ exitIfFailed(results.filter((r) => r.code !== 0));
1642
+ console.log(`
1643
+ All ${totalCount} verify command(s) passed`);
1644
+ }
1645
+
1646
+ // src/commands/verify/run/index.ts
1629
1647
  function printEntryList(entries) {
1630
1648
  console.log(`Running ${entries.length} verify command(s) in parallel:`);
1631
1649
  for (const entry of entries) {
1632
1650
  console.log(` - ${entry.name}`);
1633
1651
  }
1634
1652
  }
1635
- function exitIfFailed(failed) {
1636
- if (failed.length === 0) return;
1637
- logFailedScripts(failed);
1638
- process.exit(1);
1639
- }
1640
- function handleResults(results, totalCount) {
1641
- exitIfFailed(results.filter((r) => r.code !== 0));
1642
- console.log(`
1643
- All ${totalCount} verify command(s) passed`);
1644
- }
1645
1653
  async function run(options2 = {}) {
1654
+ setVerbose(!!options2.verbose);
1646
1655
  const allEntries = resolveEntries();
1656
+ const entries = options2.all ? allEntries : filterByChangedFiles(allEntries);
1647
1657
  if (allEntries.length === 0) {
1648
1658
  console.log("No verify commands found");
1649
1659
  return;
1650
1660
  }
1651
- const entries = options2.all ? allEntries : filterByChangedFiles(allEntries);
1652
1661
  if (entries.length === 0) {
1653
1662
  console.log("No verify commands matched changed files \u2014 skipping");
1654
1663
  return;
@@ -3629,7 +3638,7 @@ import { join as join16 } from "path";
3629
3638
  import { stringify } from "yaml";
3630
3639
 
3631
3640
  // src/lib/isClaudeCode.ts
3632
- function isClaudeCode2() {
3641
+ function isClaudeCode() {
3633
3642
  return process.env.CLAUDECODE !== void 0;
3634
3643
  }
3635
3644
 
@@ -3730,7 +3739,7 @@ function formatForHuman(comment2) {
3730
3739
 
3731
3740
  // src/commands/prs/listComments/index.ts
3732
3741
  function formatComment(comment2) {
3733
- return isClaudeCode2() ? JSON.stringify(comment2) : formatForHuman(comment2);
3742
+ return isClaudeCode() ? JSON.stringify(comment2) : formatForHuman(comment2);
3734
3743
  }
3735
3744
  function printComments(comments) {
3736
3745
  if (comments.length === 0) {
@@ -5369,7 +5378,7 @@ function registerVerify(program2) {
5369
5378
  const verifyCommand = program2.command("verify").description("Run all verify:* commands in parallel").argument(
5370
5379
  "[scope]",
5371
5380
  'Use "all" to run all checks, ignoring diff-based filters'
5372
- ).option("--timer", "Show timing information for each task as they complete").action((scope, options2) => {
5381
+ ).option("--timer", "Show timing information for each task as they complete").option("--verbose", "Show all output (bypass CLAUDECODE suppression)").action((scope, options2) => {
5373
5382
  if (scope && scope !== "all") {
5374
5383
  console.error(
5375
5384
  `Unknown scope: "${scope}". Use "all" to run all checks.`
@@ -5484,10 +5493,13 @@ function bootstrapVenv() {
5484
5493
  if (existsSync24(getVenvPython())) return;
5485
5494
  console.log("Setting up Python environment...");
5486
5495
  const pythonDir = getPythonDir();
5487
- execSync25(`uv sync --project "${pythonDir}" --no-install-project`, {
5488
- stdio: "inherit",
5489
- env: { ...process.env, UV_PROJECT_ENVIRONMENT: voicePaths.venv }
5490
- });
5496
+ execSync25(
5497
+ `uv sync --project "${pythonDir}" --extra runtime --no-install-project`,
5498
+ {
5499
+ stdio: "inherit",
5500
+ env: { ...process.env, UV_PROJECT_ENVIRONMENT: voicePaths.venv }
5501
+ }
5502
+ );
5491
5503
  }
5492
5504
  function writeLockFile(pid) {
5493
5505
  const lockFile = getLockFile();
@@ -5934,7 +5946,10 @@ function add2() {
5934
5946
 
5935
5947
  // src/commands/run/index.ts
5936
5948
  function quoteIfNeeded2(arg) {
5937
- return arg.includes(" ") ? `"${arg}"` : arg;
5949
+ if (/[^a-zA-Z0-9_./:=@%^+,-]/.test(arg)) {
5950
+ return `'${arg.replace(/'/g, "'\\''")}'`;
5951
+ }
5952
+ return arg;
5938
5953
  }
5939
5954
  function buildCommand(command, configArgs, extraArgs) {
5940
5955
  const allArgs = [...configArgs, ...extraArgs];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@staff0rd/assist",
3
- "version": "0.92.1",
3
+ "version": "0.92.3",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {