voice-mode 4.3.1__py3-none-any.whl → 4.4.0__py3-none-any.whl
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.
- voice_mode/__version__.py +1 -1
- voice_mode/cli.py +3 -2
- voice_mode/cli_commands/claude.py +6 -199
- voice_mode/cli_commands/hook.py +13 -16
- voice_mode/frontend/.next/BUILD_ID +1 -1
- voice_mode/frontend/.next/app-build-manifest.json +5 -5
- voice_mode/frontend/.next/build-manifest.json +3 -3
- voice_mode/frontend/.next/next-minimal-server.js.nft.json +1 -1
- voice_mode/frontend/.next/next-server.js.nft.json +1 -1
- voice_mode/frontend/.next/prerender-manifest.json +1 -1
- voice_mode/frontend/.next/required-server-files.json +1 -1
- voice_mode/frontend/.next/server/app/_not-found/page.js +1 -1
- voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- voice_mode/frontend/.next/server/app/_not-found.html +1 -1
- voice_mode/frontend/.next/server/app/_not-found.rsc +1 -1
- voice_mode/frontend/.next/server/app/api/connection-details/route.js +2 -2
- voice_mode/frontend/.next/server/app/favicon.ico/route.js +2 -2
- voice_mode/frontend/.next/server/app/index.html +1 -1
- voice_mode/frontend/.next/server/app/index.rsc +2 -2
- voice_mode/frontend/.next/server/app/page.js +3 -3
- voice_mode/frontend/.next/server/app/page_client-reference-manifest.js +1 -1
- voice_mode/frontend/.next/server/chunks/994.js +1 -1
- voice_mode/frontend/.next/server/middleware-build-manifest.js +1 -1
- voice_mode/frontend/.next/server/next-font-manifest.js +1 -1
- voice_mode/frontend/.next/server/next-font-manifest.json +1 -1
- voice_mode/frontend/.next/server/pages/404.html +1 -1
- voice_mode/frontend/.next/server/pages/500.html +1 -1
- voice_mode/frontend/.next/server/server-reference-manifest.json +1 -1
- voice_mode/frontend/.next/standalone/.next/BUILD_ID +1 -1
- voice_mode/frontend/.next/standalone/.next/app-build-manifest.json +5 -5
- voice_mode/frontend/.next/standalone/.next/build-manifest.json +3 -3
- voice_mode/frontend/.next/standalone/.next/prerender-manifest.json +1 -1
- voice_mode/frontend/.next/standalone/.next/required-server-files.json +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js +2 -2
- voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js +2 -2
- voice_mode/frontend/.next/standalone/.next/server/app/index.html +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/index.rsc +2 -2
- voice_mode/frontend/.next/standalone/.next/server/app/page.js +3 -3
- voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/chunks/994.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json +1 -1
- voice_mode/frontend/.next/standalone/.next/server/pages/404.html +1 -1
- voice_mode/frontend/.next/standalone/.next/server/pages/500.html +1 -1
- voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- voice_mode/frontend/.next/standalone/server.js +1 -1
- voice_mode/frontend/.next/static/chunks/app/{layout-b52135f331b36caf.js → layout-917e8410913fe899.js} +1 -1
- voice_mode/frontend/.next/static/chunks/app/{page-43b7b45e01f0aa87.js → page-ae0d14863ed895ea.js} +1 -1
- voice_mode/frontend/.next/static/chunks/{main-app-80dc9078926fc708.js → main-app-836e76fc70b52220.js} +1 -1
- voice_mode/frontend/.next/trace +43 -43
- voice_mode/frontend/.next/types/app/api/connection-details/route.ts +1 -1
- voice_mode/frontend/.next/types/app/layout.ts +1 -1
- voice_mode/frontend/.next/types/app/page.ts +1 -1
- voice_mode/frontend/package-lock.json +9 -9
- voice_mode/statistics_tracking.py +42 -0
- voice_mode/tools/__init__.py +41 -15
- voice_mode/tools/converse.py +1 -1
- voice_mode/tools/statistics.py +0 -33
- {voice_mode-4.3.1.dist-info → voice_mode-4.4.0.dist-info}/METADATA +33 -40
- {voice_mode-4.3.1.dist-info → voice_mode-4.4.0.dist-info}/RECORD +69 -69
- voice_mode/tools/claude_thinking.py +0 -285
- /voice_mode/frontend/.next/static/{uZHYPdRYOObTZ3MQHekp0 → WhZriRkBKVNPSmCnOFRav}/_buildManifest.js +0 -0
- /voice_mode/frontend/.next/static/{uZHYPdRYOObTZ3MQHekp0 → WhZriRkBKVNPSmCnOFRav}/_ssgManifest.js +0 -0
- {voice_mode-4.3.1.dist-info → voice_mode-4.4.0.dist-info}/WHEEL +0 -0
- {voice_mode-4.3.1.dist-info → voice_mode-4.4.0.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
voice_mode/__init__.py,sha256=PDCwE2rrm8yyYxEiQQJkznQ_4xYp3DWIxGSB84K_mnI,346
|
2
2
|
voice_mode/__main__.py,sha256=td-njie1XgkR-NrQjOEUse4TSJBC8DAmYywHum3V6WQ,138
|
3
|
-
voice_mode/__version__.py,sha256=
|
4
|
-
voice_mode/cli.py,sha256=
|
3
|
+
voice_mode/__version__.py,sha256=tV8n3x_DPfYZxj7h0DvKLePay0Aaj6xaN3Vuf2opCRQ,100
|
4
|
+
voice_mode/cli.py,sha256=SlG44DUOFZs4bvZrj7wjHebYf093jUx3hQOIZpp5-U4,74628
|
5
5
|
voice_mode/config.py,sha256=GZzhp6D_20tVx5Utxny9R2CX2PHFdsJxPJBQBZtT0Os,36397
|
6
6
|
voice_mode/conversation_logger.py,sha256=Nar92xabhaVmMKdZdLmgoYckK9fGAVVYWdass3-EI1I,9363
|
7
7
|
voice_mode/core.py,sha256=WACixDHS23UMhmBJKN2zgDqeWtpAdXHOSduDc3fmOio,28452
|
@@ -12,12 +12,13 @@ voice_mode/server.py,sha256=IhdTtraP51UlmN_yKDAk_ZBBxtkDOEdBV6B4olu7uVA,3044
|
|
12
12
|
voice_mode/shared.py,sha256=dr6rki6lKPtn6lhkZSXbIJl-rhK9dKXAw6eYpHFhUOU,3468
|
13
13
|
voice_mode/simple_failover.py,sha256=1LvbxZNXJOX2Ai6vGJ_Rwaa5_1A0TsL5hXHb_PvZoT0,6070
|
14
14
|
voice_mode/statistics.py,sha256=ckssYzOJMMgCfmmGNlCRhX4o9y0LWN9Gt42WlEUI3DE,15785
|
15
|
+
voice_mode/statistics_tracking.py,sha256=4F5dW0zSOFvWrw86Zl0hHdOCW9mVLlyGh01Mf8Ex_Fk,1568
|
15
16
|
voice_mode/streaming.py,sha256=AP0dPt8jAGnM_i3qhtPe4334EBQryWxOJ6NPt48tHvE,21744
|
16
17
|
voice_mode/version.py,sha256=rgv7tThj3fBO006bhff3iz_TlfE5uQS4Gws-9xf8YIc,2452
|
17
18
|
voice_mode/cli_commands/__init__.py,sha256=qaIkE-dtA0_s400BfX7h6IIoFQlNrXwGLbuHRhGUjWA,32
|
18
|
-
voice_mode/cli_commands/claude.py,sha256=
|
19
|
+
voice_mode/cli_commands/claude.py,sha256=IjyvTg3639f74926gLAgIxqBBHq0aWcKex_l-zApdxE,287
|
19
20
|
voice_mode/cli_commands/exchanges.py,sha256=R8k_MtiZmDG7ST974MoDTkUKgvGgLNESzTjg2dvZRoY,16828
|
20
|
-
voice_mode/cli_commands/hook.py,sha256=
|
21
|
+
voice_mode/cli_commands/hook.py,sha256=72azdD0_kHlqfDRgo8udqsHYZzAftsvXgFf4LFEMBc0,7374
|
21
22
|
voice_mode/cli_commands/pronounce_commands.py,sha256=uznL2OYGc-asQGSLciHo--o-nyuQV-ZS8ZMoBjmD6o0,7941
|
22
23
|
voice_mode/cli_commands/transcribe.py,sha256=z5R8_66hRhNR-9vBWTj5gkPgbf6xV7dCxE0fpASUSJ8,4200
|
23
24
|
voice_mode/data/default_pronunciation.yaml,sha256=LD3TRi2R4A9h8CG5sg9tqF-fLgpMdy7je4A2irLWXY0,6048
|
@@ -32,64 +33,64 @@ voice_mode/exchanges/stats.py,sha256=UVnJnVuqmd64T_iqBLVLPjTIDoyZwRg-MZUFJMHHWxg
|
|
32
33
|
voice_mode/frontend/README.md,sha256=uosvWgNiWL_sP9liv-wnDNdPmJ3oFiLstXygxyzcN7A,2131
|
33
34
|
voice_mode/frontend/next-env.d.ts,sha256=ndnWQs24fU1bMXMhfgxFQps-R6b1z1-w6tbGROxf7QE,228
|
34
35
|
voice_mode/frontend/next.config.mjs,sha256=5kqiwwjpFblS_IHlnDJh7ELk_3rldB6pcSXIbrkytpQ,767
|
35
|
-
voice_mode/frontend/package-lock.json,sha256=
|
36
|
+
voice_mode/frontend/package-lock.json,sha256=vqrs3_WQ7rdirFXkdJcnTNtsVLiJOxDMTAoibKAPgL4,143483
|
36
37
|
voice_mode/frontend/package.json,sha256=BUOh3UiaHq1D0Bww-jy2EjhOi-47rjOipeUqXONJndo,1150
|
37
38
|
voice_mode/frontend/pnpm-lock.yaml,sha256=DSl1H3fb4tNVrHjsc5HbflJJIr95erkADNeUoFY21x4,127796
|
38
39
|
voice_mode/frontend/postcss.config.mjs,sha256=76ZcZeF9UdWFcO3OnXArBgT99qm422Wvrtjwda-IZ8c,157
|
39
40
|
voice_mode/frontend/tailwind.config.ts,sha256=w0mWCjy3kwryNcqgub24YLbmd2V9EvOmWSYHmsFdpkY,264
|
40
41
|
voice_mode/frontend/tsconfig.json,sha256=VCAvHW01ulHD2uoyv2fo2iRWjsDLDDQfoLXtLOsXTy0,574
|
41
|
-
voice_mode/frontend/.next/BUILD_ID,sha256=
|
42
|
-
voice_mode/frontend/.next/app-build-manifest.json,sha256=
|
42
|
+
voice_mode/frontend/.next/BUILD_ID,sha256=apzCf11yUFhlif5VrDHXPXuiuBQdW27iRG_xCUZhbiQ,21
|
43
|
+
voice_mode/frontend/.next/app-build-manifest.json,sha256=1seKzELnFrkVNpwMOed_LeW0jMK3fUWORQlcJLn9p_A,1010
|
43
44
|
voice_mode/frontend/.next/app-path-routes-manifest.json,sha256=-WXlpEHFoCBUDPfxzUJleLsfZiEUU-rU0hRMZ8AVIJI,140
|
44
|
-
voice_mode/frontend/.next/build-manifest.json,sha256=
|
45
|
+
voice_mode/frontend/.next/build-manifest.json,sha256=tr7-7wcNQk5xdKJoi-EyOts8x8N3oH1Fvaml7LDIVH4,968
|
45
46
|
voice_mode/frontend/.next/export-marker.json,sha256=ALjrM5QMj5hmGX14xIc2wIFDfLaFKlK3n1wQpwjMagI,94
|
46
47
|
voice_mode/frontend/.next/images-manifest.json,sha256=Z1eB8ppSn86wfAon69Z5DSKbg7IoIvyGB8uCu88xGjs,511
|
47
|
-
voice_mode/frontend/.next/next-minimal-server.js.nft.json,sha256=
|
48
|
-
voice_mode/frontend/.next/next-server.js.nft.json,sha256=
|
48
|
+
voice_mode/frontend/.next/next-minimal-server.js.nft.json,sha256=Ed0BK__L6SAZeFDdbpzYFw20jzqNf6xvqs4jD8XFJoM,7314
|
49
|
+
voice_mode/frontend/.next/next-server.js.nft.json,sha256=JJq52AeIl7BAtYXCVyVdrkX1um47lwWMK3MamD8yEIE,109011
|
49
50
|
voice_mode/frontend/.next/package.json,sha256=CRoE-mfHkHuY4Qb8_4uWThMSl1T85y0k8wJbl8SIf6M,20
|
50
|
-
voice_mode/frontend/.next/prerender-manifest.json,sha256=
|
51
|
+
voice_mode/frontend/.next/prerender-manifest.json,sha256=5HcdBF1n4qO6-7OqlAODVQDuxZTsLn759ElrT6Zu-2g,959
|
51
52
|
voice_mode/frontend/.next/react-loadable-manifest.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
|
52
|
-
voice_mode/frontend/.next/required-server-files.json,sha256=
|
53
|
+
voice_mode/frontend/.next/required-server-files.json,sha256=DvMxkZnUCyygtYvwAR8zL-RQN1MjkWNJyldD5HwsdFw,4748
|
53
54
|
voice_mode/frontend/.next/routes-manifest.json,sha256=DqV6K_WLiS6wKvdr8TpF7-uBhH7xbrg7xeznwWaeO70,831
|
54
|
-
voice_mode/frontend/.next/trace,sha256=
|
55
|
+
voice_mode/frontend/.next/trace,sha256=P0quSCovZcvUH2TNFum6cIwsLrdyYxzxPvTuf8pffkI,898490
|
55
56
|
voice_mode/frontend/.next/server/app-paths-manifest.json,sha256=Xyxtr52aubW5XDHj7Ms66qiSJfwCkBVeL3ekU8uh2os,202
|
56
57
|
voice_mode/frontend/.next/server/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
|
57
58
|
voice_mode/frontend/.next/server/functions-config-manifest.json,sha256=CUXUfXux-dC5WRXm4vr6xa3f-RKEsEV1aG-hO3KK0CE,56
|
58
59
|
voice_mode/frontend/.next/server/interception-route-rewrite-manifest.js,sha256=_FEz5ArPCeZRewc93XtcDCGNCZOISJAiEPLME_COHIE,48
|
59
|
-
voice_mode/frontend/.next/server/middleware-build-manifest.js,sha256=
|
60
|
+
voice_mode/frontend/.next/server/middleware-build-manifest.js,sha256=l0g9lKYzWVBq8L9yL3nR16nqf2I5BwaZsI1J1q7aXKY,888
|
60
61
|
voice_mode/frontend/.next/server/middleware-manifest.json,sha256=CoUgvH4Hb3rnF8LWJxOZDIPoo9dGJvMno4RLwFBOIQw,83
|
61
62
|
voice_mode/frontend/.next/server/middleware-react-loadable-manifest.js,sha256=rS557JHipUQIQNo9i9IiwnmztMR-ialoMnpm9ssS64I,36
|
62
|
-
voice_mode/frontend/.next/server/next-font-manifest.js,sha256
|
63
|
-
voice_mode/frontend/.next/server/next-font-manifest.json,sha256=
|
63
|
+
voice_mode/frontend/.next/server/next-font-manifest.js,sha256=-pTFIuyIkT-x3N7B9FDvuHkgKaI4hzLO8SpOdEvjOaQ,228
|
64
|
+
voice_mode/frontend/.next/server/next-font-manifest.json,sha256=HVn8OwAedhReEuMho8GMmDoHHGdlyna6wm2sOOdl3N4,199
|
64
65
|
voice_mode/frontend/.next/server/pages-manifest.json,sha256=CtIVJgXR_t73dArygJmC6GsgbxLMM1N2fAUgg0-bUc8,111
|
65
66
|
voice_mode/frontend/.next/server/server-reference-manifest.js,sha256=zgEAbADh9jvL_kGz9-3SYNlptB0KMjtwXETh753xPYw,123
|
66
|
-
voice_mode/frontend/.next/server/server-reference-manifest.json,sha256=
|
67
|
+
voice_mode/frontend/.next/server/server-reference-manifest.json,sha256=hUtxwUWKvW2GoTCOHesW6sHu423LZ5Qt688x2Qq7Awk,84
|
67
68
|
voice_mode/frontend/.next/server/webpack-runtime.js,sha256=mmuyol21D9il2KNetWeEUG5OBu3z05WsphIyIbwvads,1469
|
68
|
-
voice_mode/frontend/.next/server/app/_not-found.html,sha256=
|
69
|
+
voice_mode/frontend/.next/server/app/_not-found.html,sha256=0NG6oWKMo5AqetKNj7efEvuIrqJr_FLK_P20OIagKbA,6752
|
69
70
|
voice_mode/frontend/.next/server/app/_not-found.meta,sha256=8-vSzkZIhJgJ7_uOmMyzHNf5QN3Exhbk-5ObKal4lrc,142
|
70
|
-
voice_mode/frontend/.next/server/app/_not-found.rsc,sha256=
|
71
|
+
voice_mode/frontend/.next/server/app/_not-found.rsc,sha256=_pkHshYQql_14zagy3_1PqU4HoHVL1bgIkymijMqb4c,3621
|
71
72
|
voice_mode/frontend/.next/server/app/favicon.ico.body,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
|
72
73
|
voice_mode/frontend/.next/server/app/favicon.ico.meta,sha256=iac7LJDMkBlPpPPzKMbIDSh2bqoxNKhYx_5nQjo5Tds,211
|
73
|
-
voice_mode/frontend/.next/server/app/index.html,sha256=
|
74
|
+
voice_mode/frontend/.next/server/app/index.html,sha256=jUE4CEWKttBf-A7ME8M9jx8OC4G4NL5E1GjjeqV2BCc,5396
|
74
75
|
voice_mode/frontend/.next/server/app/index.meta,sha256=BDswoSxeaM0dEV3Vl3-2HNVKE5mS5NQhBYZcQQt5mnQ,80
|
75
|
-
voice_mode/frontend/.next/server/app/index.rsc,sha256=
|
76
|
-
voice_mode/frontend/.next/server/app/page.js,sha256=
|
76
|
+
voice_mode/frontend/.next/server/app/index.rsc,sha256=XWJKHea8MGkTii80AwtSfgnUiVIlcO7KKtHbyATGsSc,2438
|
77
|
+
voice_mode/frontend/.next/server/app/page.js,sha256=OBrbBm9UkpUOpwsV0pdTVhuNNBLI992do4TOO0Cadpw,611918
|
77
78
|
voice_mode/frontend/.next/server/app/page.js.nft.json,sha256=6plKkaMV7NDsYDUQsMAnayayODq1vS_l6nRXRrm9Trg,1168
|
78
|
-
voice_mode/frontend/.next/server/app/page_client-reference-manifest.js,sha256=
|
79
|
-
voice_mode/frontend/.next/server/app/_not-found/page.js,sha256=
|
79
|
+
voice_mode/frontend/.next/server/app/page_client-reference-manifest.js,sha256=iw6WAH8F9RODwXqKv1eNr5FaMyRe0HUCXe2lgfR24OI,4174
|
80
|
+
voice_mode/frontend/.next/server/app/_not-found/page.js,sha256=Zn1nvzF96FTG_uIWzqULBvrU05kQZt0YzF-SkRc2CUw,3386
|
80
81
|
voice_mode/frontend/.next/server/app/_not-found/page.js.nft.json,sha256=7Z_Wav7koMsnepi3GignvrVRYuDbzwvKqqg84LuoSis,1195
|
81
|
-
voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=
|
82
|
-
voice_mode/frontend/.next/server/app/api/connection-details/route.js,sha256=
|
82
|
+
voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=UkXIfBWo94vmIB1IoZ_T0B1VylPSZquJj5UI6HK4_lI,4277
|
83
|
+
voice_mode/frontend/.next/server/app/api/connection-details/route.js,sha256=poKHj544J_PuennfZGFjLpceLIatkmmIXwKuMFQMhSo,121019
|
83
84
|
voice_mode/frontend/.next/server/app/api/connection-details/route.js.nft.json,sha256=qjdiqEpb5s6iSOQsC1MI3A0_sVjbF9Eh1t1mR_VcS9o,1327
|
84
|
-
voice_mode/frontend/.next/server/app/favicon.ico/route.js,sha256=
|
85
|
+
voice_mode/frontend/.next/server/app/favicon.ico/route.js,sha256=j1ENvniMzEBKfZwzv6v1aH2xCRcQVc_DVwl3KSHRZLM,66225
|
85
86
|
voice_mode/frontend/.next/server/app/favicon.ico/route.js.nft.json,sha256=xn4G0NuxuIbLuaN_3PVtjN4lYs5MWduPcvqhdZwRNkQ,1248
|
86
87
|
voice_mode/frontend/.next/server/chunks/463.js,sha256=9Fg9G6vSgz6lLnnirTbzQKyy5MQAf59a16SvYM0xDFc,6201
|
87
88
|
voice_mode/frontend/.next/server/chunks/682.js,sha256=dxTmuBsZ77qjHYtQvwM0HeoE4FnESxOOpTnhW3ABg18,33636
|
88
89
|
voice_mode/frontend/.next/server/chunks/948.js,sha256=2QNDLi5TnS9qLpgKRmsx_sJzO2vtdQJIRn124o6fjeI,57650
|
89
|
-
voice_mode/frontend/.next/server/chunks/994.js,sha256=
|
90
|
+
voice_mode/frontend/.next/server/chunks/994.js,sha256=LKxli1Q12bHvRK5T2aroAuCcTNS44XSW09a0-d-llfc,95353
|
90
91
|
voice_mode/frontend/.next/server/chunks/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
|
91
|
-
voice_mode/frontend/.next/server/pages/404.html,sha256=
|
92
|
-
voice_mode/frontend/.next/server/pages/500.html,sha256=
|
92
|
+
voice_mode/frontend/.next/server/pages/404.html,sha256=0NG6oWKMo5AqetKNj7efEvuIrqJr_FLK_P20OIagKbA,6752
|
93
|
+
voice_mode/frontend/.next/server/pages/500.html,sha256=hDwMgJlm36BruqH1LnwKP6QOP_VV-9vwMsW-BHqR3RY,1995
|
93
94
|
voice_mode/frontend/.next/server/pages/_app.js,sha256=xv0yBH2BTySxH6d7_oFG8KbedK3Jhvvg9SQ7pSaSPrE,3291
|
94
95
|
voice_mode/frontend/.next/server/pages/_app.js.nft.json,sha256=4DM09IfF6_ws-h14UVrroVq0Ri8tNeDEwwZ2c244nKM,517
|
95
96
|
voice_mode/frontend/.next/server/pages/_document.js,sha256=q-VJKG6tPCpEYWhP0UobYWG_naYdKPuqkRpb4HGMV_Y,378
|
@@ -97,68 +98,70 @@ voice_mode/frontend/.next/server/pages/_document.js.nft.json,sha256=7WnWXoJIsRyt
|
|
97
98
|
voice_mode/frontend/.next/server/pages/_error.js,sha256=1se20NEwePcXdV17_wUw4YhoMwVAenxiXI74aXSRqzU,8619
|
98
99
|
voice_mode/frontend/.next/server/pages/_error.js.nft.json,sha256=uK8O79iTeItVu_-Dz90fkTMA1GYxQEpTWU8TndjkfVQ,1855
|
99
100
|
voice_mode/frontend/.next/standalone/package.json,sha256=BUOh3UiaHq1D0Bww-jy2EjhOi-47rjOipeUqXONJndo,1150
|
100
|
-
voice_mode/frontend/.next/standalone/server.js,sha256=
|
101
|
-
voice_mode/frontend/.next/standalone/.next/BUILD_ID,sha256=
|
102
|
-
voice_mode/frontend/.next/standalone/.next/app-build-manifest.json,sha256=
|
101
|
+
voice_mode/frontend/.next/standalone/server.js,sha256=kFYg7QthM3UXXJDVm20WpK_7gKLbtNinu_9eduCcn5g,4741
|
102
|
+
voice_mode/frontend/.next/standalone/.next/BUILD_ID,sha256=apzCf11yUFhlif5VrDHXPXuiuBQdW27iRG_xCUZhbiQ,21
|
103
|
+
voice_mode/frontend/.next/standalone/.next/app-build-manifest.json,sha256=1seKzELnFrkVNpwMOed_LeW0jMK3fUWORQlcJLn9p_A,1010
|
103
104
|
voice_mode/frontend/.next/standalone/.next/app-path-routes-manifest.json,sha256=-WXlpEHFoCBUDPfxzUJleLsfZiEUU-rU0hRMZ8AVIJI,140
|
104
|
-
voice_mode/frontend/.next/standalone/.next/build-manifest.json,sha256=
|
105
|
+
voice_mode/frontend/.next/standalone/.next/build-manifest.json,sha256=tr7-7wcNQk5xdKJoi-EyOts8x8N3oH1Fvaml7LDIVH4,968
|
105
106
|
voice_mode/frontend/.next/standalone/.next/package.json,sha256=CRoE-mfHkHuY4Qb8_4uWThMSl1T85y0k8wJbl8SIf6M,20
|
106
|
-
voice_mode/frontend/.next/standalone/.next/prerender-manifest.json,sha256=
|
107
|
+
voice_mode/frontend/.next/standalone/.next/prerender-manifest.json,sha256=5HcdBF1n4qO6-7OqlAODVQDuxZTsLn759ElrT6Zu-2g,959
|
107
108
|
voice_mode/frontend/.next/standalone/.next/react-loadable-manifest.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
|
108
|
-
voice_mode/frontend/.next/standalone/.next/required-server-files.json,sha256=
|
109
|
+
voice_mode/frontend/.next/standalone/.next/required-server-files.json,sha256=DvMxkZnUCyygtYvwAR8zL-RQN1MjkWNJyldD5HwsdFw,4748
|
109
110
|
voice_mode/frontend/.next/standalone/.next/routes-manifest.json,sha256=DqV6K_WLiS6wKvdr8TpF7-uBhH7xbrg7xeznwWaeO70,831
|
110
111
|
voice_mode/frontend/.next/standalone/.next/server/app-paths-manifest.json,sha256=Xyxtr52aubW5XDHj7Ms66qiSJfwCkBVeL3ekU8uh2os,202
|
111
112
|
voice_mode/frontend/.next/standalone/.next/server/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
|
112
|
-
voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js,sha256=
|
113
|
+
voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js,sha256=l0g9lKYzWVBq8L9yL3nR16nqf2I5BwaZsI1J1q7aXKY,888
|
113
114
|
voice_mode/frontend/.next/standalone/.next/server/middleware-manifest.json,sha256=CoUgvH4Hb3rnF8LWJxOZDIPoo9dGJvMno4RLwFBOIQw,83
|
114
115
|
voice_mode/frontend/.next/standalone/.next/server/middleware-react-loadable-manifest.js,sha256=rS557JHipUQIQNo9i9IiwnmztMR-ialoMnpm9ssS64I,36
|
115
|
-
voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js,sha256
|
116
|
-
voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json,sha256=
|
116
|
+
voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js,sha256=-pTFIuyIkT-x3N7B9FDvuHkgKaI4hzLO8SpOdEvjOaQ,228
|
117
|
+
voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json,sha256=HVn8OwAedhReEuMho8GMmDoHHGdlyna6wm2sOOdl3N4,199
|
117
118
|
voice_mode/frontend/.next/standalone/.next/server/pages-manifest.json,sha256=CtIVJgXR_t73dArygJmC6GsgbxLMM1N2fAUgg0-bUc8,111
|
118
119
|
voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.js,sha256=zgEAbADh9jvL_kGz9-3SYNlptB0KMjtwXETh753xPYw,123
|
119
|
-
voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json,sha256=
|
120
|
+
voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json,sha256=hUtxwUWKvW2GoTCOHesW6sHu423LZ5Qt688x2Qq7Awk,84
|
120
121
|
voice_mode/frontend/.next/standalone/.next/server/webpack-runtime.js,sha256=mmuyol21D9il2KNetWeEUG5OBu3z05WsphIyIbwvads,1469
|
121
|
-
voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html,sha256=
|
122
|
+
voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html,sha256=0NG6oWKMo5AqetKNj7efEvuIrqJr_FLK_P20OIagKbA,6752
|
122
123
|
voice_mode/frontend/.next/standalone/.next/server/app/_not-found.meta,sha256=8-vSzkZIhJgJ7_uOmMyzHNf5QN3Exhbk-5ObKal4lrc,142
|
123
|
-
voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc,sha256=
|
124
|
+
voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc,sha256=_pkHshYQql_14zagy3_1PqU4HoHVL1bgIkymijMqb4c,3621
|
124
125
|
voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico.body,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
|
125
126
|
voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico.meta,sha256=iac7LJDMkBlPpPPzKMbIDSh2bqoxNKhYx_5nQjo5Tds,211
|
126
|
-
voice_mode/frontend/.next/standalone/.next/server/app/index.html,sha256=
|
127
|
+
voice_mode/frontend/.next/standalone/.next/server/app/index.html,sha256=jUE4CEWKttBf-A7ME8M9jx8OC4G4NL5E1GjjeqV2BCc,5396
|
127
128
|
voice_mode/frontend/.next/standalone/.next/server/app/index.meta,sha256=BDswoSxeaM0dEV3Vl3-2HNVKE5mS5NQhBYZcQQt5mnQ,80
|
128
|
-
voice_mode/frontend/.next/standalone/.next/server/app/index.rsc,sha256=
|
129
|
-
voice_mode/frontend/.next/standalone/.next/server/app/page.js,sha256=
|
129
|
+
voice_mode/frontend/.next/standalone/.next/server/app/index.rsc,sha256=XWJKHea8MGkTii80AwtSfgnUiVIlcO7KKtHbyATGsSc,2438
|
130
|
+
voice_mode/frontend/.next/standalone/.next/server/app/page.js,sha256=OBrbBm9UkpUOpwsV0pdTVhuNNBLI992do4TOO0Cadpw,611918
|
130
131
|
voice_mode/frontend/.next/standalone/.next/server/app/page.js.nft.json,sha256=6plKkaMV7NDsYDUQsMAnayayODq1vS_l6nRXRrm9Trg,1168
|
131
|
-
voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js,sha256=
|
132
|
-
voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js,sha256=
|
132
|
+
voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js,sha256=iw6WAH8F9RODwXqKv1eNr5FaMyRe0HUCXe2lgfR24OI,4174
|
133
|
+
voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js,sha256=Zn1nvzF96FTG_uIWzqULBvrU05kQZt0YzF-SkRc2CUw,3386
|
133
134
|
voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js.nft.json,sha256=7Z_Wav7koMsnepi3GignvrVRYuDbzwvKqqg84LuoSis,1195
|
134
|
-
voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=
|
135
|
-
voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js,sha256=
|
135
|
+
voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=UkXIfBWo94vmIB1IoZ_T0B1VylPSZquJj5UI6HK4_lI,4277
|
136
|
+
voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js,sha256=poKHj544J_PuennfZGFjLpceLIatkmmIXwKuMFQMhSo,121019
|
136
137
|
voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js.nft.json,sha256=qjdiqEpb5s6iSOQsC1MI3A0_sVjbF9Eh1t1mR_VcS9o,1327
|
137
|
-
voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js,sha256=
|
138
|
+
voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js,sha256=j1ENvniMzEBKfZwzv6v1aH2xCRcQVc_DVwl3KSHRZLM,66225
|
138
139
|
voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json,sha256=xn4G0NuxuIbLuaN_3PVtjN4lYs5MWduPcvqhdZwRNkQ,1248
|
139
140
|
voice_mode/frontend/.next/standalone/.next/server/chunks/463.js,sha256=9Fg9G6vSgz6lLnnirTbzQKyy5MQAf59a16SvYM0xDFc,6201
|
140
141
|
voice_mode/frontend/.next/standalone/.next/server/chunks/682.js,sha256=dxTmuBsZ77qjHYtQvwM0HeoE4FnESxOOpTnhW3ABg18,33636
|
141
142
|
voice_mode/frontend/.next/standalone/.next/server/chunks/948.js,sha256=2QNDLi5TnS9qLpgKRmsx_sJzO2vtdQJIRn124o6fjeI,57650
|
142
|
-
voice_mode/frontend/.next/standalone/.next/server/chunks/994.js,sha256=
|
143
|
-
voice_mode/frontend/.next/standalone/.next/server/pages/404.html,sha256=
|
144
|
-
voice_mode/frontend/.next/standalone/.next/server/pages/500.html,sha256=
|
143
|
+
voice_mode/frontend/.next/standalone/.next/server/chunks/994.js,sha256=LKxli1Q12bHvRK5T2aroAuCcTNS44XSW09a0-d-llfc,95353
|
144
|
+
voice_mode/frontend/.next/standalone/.next/server/pages/404.html,sha256=0NG6oWKMo5AqetKNj7efEvuIrqJr_FLK_P20OIagKbA,6752
|
145
|
+
voice_mode/frontend/.next/standalone/.next/server/pages/500.html,sha256=hDwMgJlm36BruqH1LnwKP6QOP_VV-9vwMsW-BHqR3RY,1995
|
145
146
|
voice_mode/frontend/.next/standalone/.next/server/pages/_app.js,sha256=xv0yBH2BTySxH6d7_oFG8KbedK3Jhvvg9SQ7pSaSPrE,3291
|
146
147
|
voice_mode/frontend/.next/standalone/.next/server/pages/_app.js.nft.json,sha256=4DM09IfF6_ws-h14UVrroVq0Ri8tNeDEwwZ2c244nKM,517
|
147
148
|
voice_mode/frontend/.next/standalone/.next/server/pages/_document.js,sha256=q-VJKG6tPCpEYWhP0UobYWG_naYdKPuqkRpb4HGMV_Y,378
|
148
149
|
voice_mode/frontend/.next/standalone/.next/server/pages/_document.js.nft.json,sha256=7WnWXoJIsRytU5c-NAEx-tGGNI1TP2CMldwr8xtDQYk,1932
|
149
150
|
voice_mode/frontend/.next/standalone/.next/server/pages/_error.js,sha256=1se20NEwePcXdV17_wUw4YhoMwVAenxiXI74aXSRqzU,8619
|
150
151
|
voice_mode/frontend/.next/standalone/.next/server/pages/_error.js.nft.json,sha256=uK8O79iTeItVu_-Dz90fkTMA1GYxQEpTWU8TndjkfVQ,1855
|
152
|
+
voice_mode/frontend/.next/static/WhZriRkBKVNPSmCnOFRav/_buildManifest.js,sha256=UGi5XJhF4u-NRxMqU360JM2afxCS1essSVUEqY6sl5c,224
|
153
|
+
voice_mode/frontend/.next/static/WhZriRkBKVNPSmCnOFRav/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
151
154
|
voice_mode/frontend/.next/static/chunks/117-40bc79a2b97edb21.js,sha256=sKMdOWIlJELukIK1QNRwH8hweTr_NgWzvc-bHWrZ9zM,123528
|
152
155
|
voice_mode/frontend/.next/static/chunks/144d3bae-2d5f122b82426d88.js,sha256=tGa8lG7iuv-oxVEA7BdFJPmskDLIVXYnDOBb6j4_zp8,383332
|
153
156
|
voice_mode/frontend/.next/static/chunks/471-bd4b96a33883dfa2.js,sha256=qT-fK-XMK3eAlXh2APHuRcKfG9EriUu-tXTEcNYWUp0,194375
|
154
157
|
voice_mode/frontend/.next/static/chunks/fd9d1056-af324d327b243cf1.js,sha256=uL3flIHYWdZI4eBQ-DIus97-PdP5vRP0xE3W8uz1q4A,172834
|
155
158
|
voice_mode/frontend/.next/static/chunks/framework-f66176bb897dc684.js,sha256=QlDVPwvHVuzi3daQoAit0df9yIdSjGcfTf6NkW13h7c,139978
|
156
159
|
voice_mode/frontend/.next/static/chunks/main-3163eca598b76a9f.js,sha256=IwuNOgi-ik3KFA_tnaPvAfRY5q6hTp4DRK1lkjkWdwQ,116431
|
157
|
-
voice_mode/frontend/.next/static/chunks/main-app-
|
160
|
+
voice_mode/frontend/.next/static/chunks/main-app-836e76fc70b52220.js,sha256=ifBeWGbYl3ueevSC-Hq_-TqqTQ_Rz5EapOytl9DyVEc,461
|
158
161
|
voice_mode/frontend/.next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
|
159
162
|
voice_mode/frontend/.next/static/chunks/webpack-0ea9b80f19935b70.js,sha256=1Us0m_ZxEgMEb2DAN4ePlpq9Fv7QqUxcuV2CqICEB5w,3605
|
160
|
-
voice_mode/frontend/.next/static/chunks/app/layout-
|
161
|
-
voice_mode/frontend/.next/static/chunks/app/page-
|
163
|
+
voice_mode/frontend/.next/static/chunks/app/layout-917e8410913fe899.js,sha256=o8hIVf6jqkiO2tZft4kHmfw11ZEuFOk4mVGn0LG41zo,507
|
164
|
+
voice_mode/frontend/.next/static/chunks/app/page-ae0d14863ed895ea.js,sha256=DY2O5F9kK-HXkh0fyWNxtA4BsdNWFFBPX82EUyWkuOY,7666
|
162
165
|
voice_mode/frontend/.next/static/chunks/app/_not-found/page-5011050e402ab9c8.js,sha256=u5LYOU4LZ2HFeEcz6xZqSflSnU4WDt-TnQNu3CdcEWk,1745
|
163
166
|
voice_mode/frontend/.next/static/chunks/pages/_app-72b849fbd24ac258.js,sha256=QN-PY1h1HDIO4K4ZYwFl6rtEeaxWCynYauVLK_oWmzE,280
|
164
167
|
voice_mode/frontend/.next/static/chunks/pages/_error-7ba65e1336b92748.js,sha256=oxr2dz6MkKWnm3jN3fWb2RPhCHB4-JgrzVMS_wTNr_E,247
|
@@ -166,12 +169,10 @@ voice_mode/frontend/.next/static/css/a2f49a47752b5010.css,sha256=7geCVBj6YoIVhB9
|
|
166
169
|
voice_mode/frontend/.next/static/media/01099be941da1820-s.woff2,sha256=ZaNN8qxUZFV4kxOD_j6TGAYAHwR01MPDQloeIbMgCeg,10436
|
167
170
|
voice_mode/frontend/.next/static/media/39883d31a7792467-s.p.woff2,sha256=i_qVPOm6vZ-H4B0Mk_d5yUQR_YKsz4XRc-8J2R_QWKs,14620
|
168
171
|
voice_mode/frontend/.next/static/media/6368404d2e8d66fe-s.woff2,sha256=2GFQ1JjbLJOSmwrIsgCHPVMSJpcx2QX2i13kJbg8IFE,4464
|
169
|
-
voice_mode/frontend/.next/static/uZHYPdRYOObTZ3MQHekp0/_buildManifest.js,sha256=UGi5XJhF4u-NRxMqU360JM2afxCS1essSVUEqY6sl5c,224
|
170
|
-
voice_mode/frontend/.next/static/uZHYPdRYOObTZ3MQHekp0/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
171
172
|
voice_mode/frontend/.next/types/package.json,sha256=49WkothVGqUsWgHSoO-y4GotlxG09cXx0g3m4hgH4s0,18
|
172
|
-
voice_mode/frontend/.next/types/app/layout.ts,sha256
|
173
|
-
voice_mode/frontend/.next/types/app/page.ts,sha256=
|
174
|
-
voice_mode/frontend/.next/types/app/api/connection-details/route.ts,sha256=
|
173
|
+
voice_mode/frontend/.next/types/app/layout.ts,sha256=4V_reYkFT229SOfNXS2anS2cf_zQhuipHxYEewuMUKY,3510
|
174
|
+
voice_mode/frontend/.next/types/app/page.ts,sha256=afRkU7-bWq2HNfMKiS_pA8zSgXrSIliu549K33L38-M,3498
|
175
|
+
voice_mode/frontend/.next/types/app/api/connection-details/route.ts,sha256=1i8YogQ5xogsd9mlNKMmy7BlUya6_4fUjNSSjC4FoY8,8530
|
175
176
|
voice_mode/frontend/app/favicon.ico,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
|
176
177
|
voice_mode/frontend/app/globals.css,sha256=yMCx8ta7sGyt40nzBTlRR644nlAGGYt73zj7e9YLgl4,362
|
177
178
|
voice_mode/frontend/app/layout.tsx,sha256=Q0LYcf_Z8GT8zDhlWgk7XEZArp2ZS2HpB1tmv3epp68,537
|
@@ -207,17 +208,16 @@ voice_mode/templates/systemd/voicemode-frontend.service,sha256=sWIu_9e24Zo3OKP3X
|
|
207
208
|
voice_mode/templates/systemd/voicemode-kokoro.service,sha256=5JGv_Xf9u2MvmbGLBQtNy07i3T0-KsJHPF06FkN40ms,927
|
208
209
|
voice_mode/templates/systemd/voicemode-livekit.service,sha256=hVjT4Vd0SOABXGYbp9iF9R6SWtXXLfRXt7i1xbud6Lg,692
|
209
210
|
voice_mode/templates/systemd/voicemode-whisper.service,sha256=aa5gIHI9xKF0M_DY6SO95QHRFhkV2JOzmFVo2U8RhN4,844
|
210
|
-
voice_mode/tools/__init__.py,sha256=
|
211
|
-
voice_mode/tools/claude_thinking.py,sha256=MKKhk1gxCKmAEKyCmO0iccB491VHJI_LueyUpLAD5Rw,11028
|
211
|
+
voice_mode/tools/__init__.py,sha256=7ii1uJf_AU0iG1PokCqChs8wuj4t9j90Si17aUhVd7I,2182
|
212
212
|
voice_mode/tools/configuration_management.py,sha256=jR6WYsrkeWRohI8_9kk48YQ6GNwdiMAuTXx3vln_m4w,12748
|
213
|
-
voice_mode/tools/converse.py,sha256=
|
213
|
+
voice_mode/tools/converse.py,sha256=O6KnpOwIVubm6YXhm6758dnHk496OGMHIjKiFXu1ahY,104929
|
214
214
|
voice_mode/tools/dependencies.py,sha256=V72gS_bD0pCmW_be2Hxs_cEnIoNPFKlK7rE9cLMTDGE,6670
|
215
215
|
voice_mode/tools/devices.py,sha256=v0KV-Rix2lKZMFfVcobHiJB_6NnPAJsuZI5LXYHlgl0,10446
|
216
216
|
voice_mode/tools/diagnostics.py,sha256=pWl9wwaBMJubBKhWOVbNIGeYet84ECVshtPok-v2pl8,2059
|
217
217
|
voice_mode/tools/pronounce.py,sha256=neyJXqQxclI8wUAnLOGBCfMXHzvS31NBuaEnt6GLovA,8915
|
218
218
|
voice_mode/tools/providers.py,sha256=KuO5lFmSHjYUoK3hjIqx3l7XeNOLPMAeXQnTtH00Iow,7768
|
219
219
|
voice_mode/tools/service.py,sha256=ll7BsUdSaXSGjtElZf7vSmOspe92ZIyIB-UaYbLrdf4,46454
|
220
|
-
voice_mode/tools/statistics.py,sha256=
|
220
|
+
voice_mode/tools/statistics.py,sha256=5vIbC6-BMxwSjP8BclKjJv-LGm50ncB8Ex9XXmZgRfo,8003
|
221
221
|
voice_mode/tools/voice_registry.py,sha256=iw3O4C8lsdon9fr1ZMchc0Uq7MmSmTOYReY9NfQlEhU,2354
|
222
222
|
voice_mode/tools/services/list_versions.py,sha256=r_FzHG_2dVxEzDXfxVfPInchGq1h9_4yvJ9ySkinsJk,2573
|
223
223
|
voice_mode/tools/services/version_info.py,sha256=K5CzUlaIpHJKDnudfCeIydOwIhaDTOM59e8FQ1Yyj4A,11344
|
@@ -260,7 +260,7 @@ voice_mode/utils/services/kokoro_helpers.py,sha256=57NsS1i4ptk5Gg3zm5g68QhtV3aU3
|
|
260
260
|
voice_mode/utils/services/livekit_helpers.py,sha256=OFw0GxVIJAZE2m9dGCDZVegWD-LnMO6iSjcOUDgAA9U,3627
|
261
261
|
voice_mode/utils/services/whisper_helpers.py,sha256=1Oy9TR5g5-l6j07KaWlAoijkCUDGaTWIz__BXvV0TWw,19632
|
262
262
|
voice_mode/utils/services/whisper_version.py,sha256=68e0Oa-tG73IJlla-e3P0sh_qzBF4ToYBe4KKZ2FvEY,4861
|
263
|
-
voice_mode-4.
|
264
|
-
voice_mode-4.
|
265
|
-
voice_mode-4.
|
266
|
-
voice_mode-4.
|
263
|
+
voice_mode-4.4.0.dist-info/METADATA,sha256=jvl63NjWEB_JV3Rrt7ymb7DeTcXfohKQSADAsJB_Rpg,24278
|
264
|
+
voice_mode-4.4.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
265
|
+
voice_mode-4.4.0.dist-info/entry_points.txt,sha256=hS5faHc0R5Fde3Z_uvz8u6YkRIYtvh17X8tVN90Rbro,95
|
266
|
+
voice_mode-4.4.0.dist-info/RECORD,,
|
@@ -1,285 +0,0 @@
|
|
1
|
-
"""Claude Code message extraction tools for Think Out Loud mode and conversation analysis."""
|
2
|
-
|
3
|
-
import json
|
4
|
-
import logging
|
5
|
-
import os
|
6
|
-
from pathlib import Path
|
7
|
-
from typing import Optional, List, Dict, Any
|
8
|
-
from datetime import datetime
|
9
|
-
|
10
|
-
from voice_mode.server import mcp
|
11
|
-
from voice_mode.config import THINK_OUT_LOUD_ENABLED
|
12
|
-
|
13
|
-
logger = logging.getLogger("voice-mode")
|
14
|
-
|
15
|
-
|
16
|
-
def find_claude_log_file(working_dir: Optional[str] = None) -> Optional[Path]:
|
17
|
-
"""Find the current Claude Code conversation log file.
|
18
|
-
|
19
|
-
Args:
|
20
|
-
working_dir: The working directory (defaults to CWD)
|
21
|
-
|
22
|
-
Returns:
|
23
|
-
Path to the most recent JSONL log file, or None if not found
|
24
|
-
"""
|
25
|
-
if working_dir is None:
|
26
|
-
working_dir = os.getcwd()
|
27
|
-
|
28
|
-
logger.debug(f"Looking for Claude logs in working_dir: {working_dir}")
|
29
|
-
|
30
|
-
# Transform path: /Users/admin/Code/github.com/project → -Users-admin-Code-github-com-project
|
31
|
-
# Note: Both slashes and dots are replaced with hyphens
|
32
|
-
project_dir = working_dir.replace('/', '-').replace('.', '-')
|
33
|
-
logger.debug(f"Transformed project dir: {project_dir}")
|
34
|
-
|
35
|
-
# Build path to Claude logs
|
36
|
-
claude_base = Path.home() / '.claude' / 'projects'
|
37
|
-
log_dir = claude_base / project_dir
|
38
|
-
logger.debug(f"Claude log directory: {log_dir}")
|
39
|
-
|
40
|
-
if not log_dir.exists():
|
41
|
-
logger.warning(f"Claude log directory does not exist: {log_dir}")
|
42
|
-
return None
|
43
|
-
|
44
|
-
# Find most recent .jsonl file
|
45
|
-
log_files = sorted(
|
46
|
-
log_dir.glob('*.jsonl'),
|
47
|
-
key=lambda p: p.stat().st_mtime,
|
48
|
-
reverse=True
|
49
|
-
)
|
50
|
-
|
51
|
-
if log_files:
|
52
|
-
logger.info(f"Found {len(log_files)} Claude log files, using most recent: {log_files[0].name}")
|
53
|
-
return log_files[0]
|
54
|
-
else:
|
55
|
-
logger.warning(f"No .jsonl files found in {log_dir}")
|
56
|
-
return None
|
57
|
-
|
58
|
-
|
59
|
-
def extract_messages_from_log(log_file: Path, last_n: int = 2, message_types: Optional[List[str]] = None) -> List[Dict[str, Any]]:
|
60
|
-
"""Extract messages from Claude Code JSONL log.
|
61
|
-
|
62
|
-
Args:
|
63
|
-
log_file: Path to the JSONL log file
|
64
|
-
last_n: Number of most recent messages to return (default: 2)
|
65
|
-
message_types: Optional list of message types to filter ('user', 'assistant', 'system')
|
66
|
-
If None, returns all message types
|
67
|
-
|
68
|
-
Returns:
|
69
|
-
List of messages with metadata
|
70
|
-
"""
|
71
|
-
logger.debug(f"Extracting {last_n} messages from {log_file}, types={message_types}")
|
72
|
-
messages = []
|
73
|
-
|
74
|
-
try:
|
75
|
-
with open(log_file, 'r') as f:
|
76
|
-
lines = f.readlines()
|
77
|
-
|
78
|
-
logger.debug(f"Read {len(lines)} lines from log file")
|
79
|
-
|
80
|
-
# Process lines in reverse to get most recent first
|
81
|
-
for i, line in enumerate(reversed(lines)):
|
82
|
-
if not line.strip():
|
83
|
-
continue
|
84
|
-
|
85
|
-
try:
|
86
|
-
entry = json.loads(line)
|
87
|
-
entry_type = entry.get('type')
|
88
|
-
|
89
|
-
# Filter by message type if specified
|
90
|
-
if message_types and entry_type not in message_types:
|
91
|
-
continue
|
92
|
-
|
93
|
-
# Extract user or assistant messages
|
94
|
-
if entry_type in ['user', 'assistant']:
|
95
|
-
logger.debug(f"Found {entry_type} message at line {len(lines) - i}")
|
96
|
-
message = entry.get('message', {})
|
97
|
-
|
98
|
-
# Build message info
|
99
|
-
message_info = {
|
100
|
-
'type': entry_type,
|
101
|
-
'role': message.get('role'),
|
102
|
-
'content': message.get('content', []),
|
103
|
-
'timestamp': entry.get('timestamp'),
|
104
|
-
'uuid': entry.get('uuid'),
|
105
|
-
'model': message.get('model') if entry_type == 'assistant' else None
|
106
|
-
}
|
107
|
-
|
108
|
-
# Add usage info for assistant messages
|
109
|
-
if entry_type == 'assistant' and 'usage' in message:
|
110
|
-
message_info['usage'] = message['usage']
|
111
|
-
|
112
|
-
messages.append(message_info)
|
113
|
-
|
114
|
-
if len(messages) >= last_n:
|
115
|
-
logger.info(f"Extracted {len(messages)} messages successfully")
|
116
|
-
return messages
|
117
|
-
|
118
|
-
except json.JSONDecodeError as e:
|
119
|
-
logger.debug(f"Skipping invalid JSON at line {len(lines) - i}: {e}")
|
120
|
-
continue
|
121
|
-
|
122
|
-
except Exception as e:
|
123
|
-
logger.error(f"Error reading log file {log_file}: {e}")
|
124
|
-
|
125
|
-
logger.info(f"Extracted {len(messages)} messages (requested {last_n})")
|
126
|
-
return messages
|
127
|
-
|
128
|
-
|
129
|
-
def extract_thinking_from_messages(messages: List[Dict[str, Any]]) -> List[str]:
|
130
|
-
"""Extract thinking content from a list of messages.
|
131
|
-
|
132
|
-
Args:
|
133
|
-
messages: List of message dictionaries
|
134
|
-
|
135
|
-
Returns:
|
136
|
-
List of thinking text strings
|
137
|
-
"""
|
138
|
-
thinking_texts = []
|
139
|
-
|
140
|
-
for message in messages:
|
141
|
-
if message.get('type') == 'assistant':
|
142
|
-
content = message.get('content', [])
|
143
|
-
for item in content:
|
144
|
-
if isinstance(item, dict) and item.get('type') == 'thinking':
|
145
|
-
text = item.get('text', '').strip()
|
146
|
-
if text:
|
147
|
-
thinking_texts.append(text)
|
148
|
-
|
149
|
-
return thinking_texts
|
150
|
-
|
151
|
-
|
152
|
-
@mcp.tool
|
153
|
-
def get_claude_messages(
|
154
|
-
last_n: int = 2,
|
155
|
-
working_dir: Optional[str] = None,
|
156
|
-
message_types: Optional[List[str]] = None,
|
157
|
-
format: str = "full"
|
158
|
-
) -> str:
|
159
|
-
"""Extract messages from Claude Code conversation logs.
|
160
|
-
|
161
|
-
This tool reads Claude Code's conversation logs to extract recent messages
|
162
|
-
for Think Out Loud mode and conversation analysis.
|
163
|
-
|
164
|
-
Args:
|
165
|
-
last_n: Number of most recent messages to return (default: 2)
|
166
|
-
working_dir: Working directory to find logs for (defaults to CWD)
|
167
|
-
message_types: Optional list to filter by type ('user', 'assistant').
|
168
|
-
If None, returns all types.
|
169
|
-
format: Output format - 'full' (complete message), 'text' (just text content),
|
170
|
-
'thinking' (just thinking content)
|
171
|
-
|
172
|
-
Returns:
|
173
|
-
The extracted messages in the requested format
|
174
|
-
"""
|
175
|
-
logger.debug(f"get_claude_messages called: last_n={last_n}, working_dir={working_dir}, types={message_types}, format={format}")
|
176
|
-
|
177
|
-
# Check if Think Out Loud mode is enabled
|
178
|
-
if not THINK_OUT_LOUD_ENABLED:
|
179
|
-
logger.warning("Think Out Loud mode is not enabled")
|
180
|
-
return "Think Out Loud mode is not enabled. Set VOICEMODE_THINK_OUT_LOUD=true to enable."
|
181
|
-
|
182
|
-
# Find the log file
|
183
|
-
log_file = find_claude_log_file(working_dir)
|
184
|
-
if not log_file:
|
185
|
-
return f"Could not find Claude Code logs for directory: {working_dir or os.getcwd()}"
|
186
|
-
|
187
|
-
# Extract messages
|
188
|
-
messages = extract_messages_from_log(log_file, last_n, message_types)
|
189
|
-
|
190
|
-
if not messages:
|
191
|
-
return f"No messages found in recent Claude Code logs."
|
192
|
-
|
193
|
-
# Format output based on requested format
|
194
|
-
if format == "thinking":
|
195
|
-
# Extract only thinking content
|
196
|
-
thinking_texts = extract_thinking_from_messages(messages)
|
197
|
-
if not thinking_texts:
|
198
|
-
return "No thinking content found in recent messages."
|
199
|
-
if len(thinking_texts) == 1:
|
200
|
-
return thinking_texts[0]
|
201
|
-
return "\n\n=== Next Thinking ===\n\n".join(thinking_texts)
|
202
|
-
|
203
|
-
elif format == "text":
|
204
|
-
# Extract just the text content
|
205
|
-
result = []
|
206
|
-
for msg in messages:
|
207
|
-
content_text = []
|
208
|
-
for item in msg.get('content', []):
|
209
|
-
if isinstance(item, dict):
|
210
|
-
if item.get('type') == 'text':
|
211
|
-
content_text.append(item.get('text', ''))
|
212
|
-
elif item.get('type') == 'thinking':
|
213
|
-
content_text.append(f"[Thinking: {item.get('text', '')}]")
|
214
|
-
if content_text:
|
215
|
-
result.append(f"{msg['type'].title()}: {' '.join(content_text)}")
|
216
|
-
return "\n\n".join(result)
|
217
|
-
|
218
|
-
else: # format == "full"
|
219
|
-
# Return complete message structure
|
220
|
-
result = []
|
221
|
-
for i, msg in enumerate(messages, 1):
|
222
|
-
result.append(f"=== Message {i} ===")
|
223
|
-
result.append(f"Type: {msg['type']}")
|
224
|
-
result.append(f"Timestamp: {msg.get('timestamp', 'Unknown')}")
|
225
|
-
if msg.get('model'):
|
226
|
-
result.append(f"Model: {msg['model']}")
|
227
|
-
|
228
|
-
# Format content
|
229
|
-
content = msg.get('content', [])
|
230
|
-
if content:
|
231
|
-
result.append("Content:")
|
232
|
-
for item in content:
|
233
|
-
if isinstance(item, dict):
|
234
|
-
item_type = item.get('type', 'unknown')
|
235
|
-
if item_type == 'text':
|
236
|
-
result.append(f" [Text]: {item.get('text', '')}")
|
237
|
-
elif item_type == 'thinking':
|
238
|
-
result.append(f" [Thinking]: {item.get('text', '')}")
|
239
|
-
elif item_type == 'tool_use':
|
240
|
-
result.append(f" [Tool Use]: {item.get('name', '')}")
|
241
|
-
elif item_type == 'tool_result':
|
242
|
-
result.append(f" [Tool Result]: {item.get('content', '')[:100]}...")
|
243
|
-
result.append("")
|
244
|
-
|
245
|
-
return "\n".join(result).strip()
|
246
|
-
|
247
|
-
|
248
|
-
@mcp.tool
|
249
|
-
def check_claude_context() -> str:
|
250
|
-
"""Check if running in Claude Code context.
|
251
|
-
|
252
|
-
Returns information about the Claude Code environment including:
|
253
|
-
- Whether Claude Code logs are accessible
|
254
|
-
- Current working directory
|
255
|
-
- Log file location if found
|
256
|
-
"""
|
257
|
-
working_dir = os.getcwd()
|
258
|
-
log_file = find_claude_log_file(working_dir)
|
259
|
-
|
260
|
-
result = []
|
261
|
-
result.append(f"Working Directory: {working_dir}")
|
262
|
-
result.append(f"Claude Logs Found: {'Yes' if log_file else 'No'}")
|
263
|
-
|
264
|
-
if log_file:
|
265
|
-
result.append(f"Log File: {log_file}")
|
266
|
-
result.append(f"Log Size: {log_file.stat().st_size:,} bytes")
|
267
|
-
|
268
|
-
# Check for recent activity
|
269
|
-
mtime = datetime.fromtimestamp(log_file.stat().st_mtime)
|
270
|
-
now = datetime.now()
|
271
|
-
age = now - mtime
|
272
|
-
|
273
|
-
if age.total_seconds() < 60:
|
274
|
-
result.append(f"Last Updated: {int(age.total_seconds())} seconds ago")
|
275
|
-
elif age.total_seconds() < 3600:
|
276
|
-
result.append(f"Last Updated: {int(age.total_seconds() / 60)} minutes ago")
|
277
|
-
else:
|
278
|
-
result.append(f"Last Updated: {int(age.total_seconds() / 3600)} hours ago")
|
279
|
-
else:
|
280
|
-
project_dir = working_dir.replace('/', '-')
|
281
|
-
expected_path = Path.home() / '.claude' / 'projects' / project_dir
|
282
|
-
result.append(f"Expected Log Location: {expected_path}")
|
283
|
-
result.append("Note: Logs are only created when using Claude Code (claude.ai/code)")
|
284
|
-
|
285
|
-
return "\n".join(result)
|
/voice_mode/frontend/.next/static/{uZHYPdRYOObTZ3MQHekp0 → WhZriRkBKVNPSmCnOFRav}/_buildManifest.js
RENAMED
File without changes
|
/voice_mode/frontend/.next/static/{uZHYPdRYOObTZ3MQHekp0 → WhZriRkBKVNPSmCnOFRav}/_ssgManifest.js
RENAMED
File without changes
|
File without changes
|
File without changes
|