speechflow 2.4.1 → 2.4.2

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.
Files changed (60) hide show
  1. package/.ase/service.log +446 -0
  2. package/.ase/service.yaml +1 -1
  3. package/.ase/task/TASK-flush.md +44 -0
  4. package/CHANGELOG.md +17 -0
  5. package/README.md +10 -9
  6. package/etc/speechflow.yaml +1 -1
  7. package/etc/stx.conf +21 -21
  8. package/package.json +9 -5
  9. package/speechflow-cli/dst/speechflow-main-cli.js +2 -2
  10. package/speechflow-cli/dst/speechflow-main-cli.js.map +1 -1
  11. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js +2 -0
  12. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js.map +1 -1
  13. package/speechflow-cli/dst/speechflow-node-a2a-gender.js +2 -1
  14. package/speechflow-cli/dst/speechflow-node-a2a-gender.js.map +1 -1
  15. package/speechflow-cli/dst/speechflow-node-a2a-meter.js +28 -12
  16. package/speechflow-cli/dst/speechflow-node-a2a-meter.js.map +1 -1
  17. package/speechflow-cli/dst/speechflow-node-a2a-pitch.js +9 -15
  18. package/speechflow-cli/dst/speechflow-node-a2a-pitch.js.map +1 -1
  19. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.d.ts +3 -0
  20. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +149 -101
  21. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -1
  22. package/speechflow-cli/dst/speechflow-node-t2t-opus.js.map +1 -1
  23. package/speechflow-cli/dst/speechflow-node-xio-exec.js +6 -4
  24. package/speechflow-cli/dst/speechflow-node-xio-exec.js.map +1 -1
  25. package/speechflow-cli/dst/speechflow-util-llm.js +8 -1
  26. package/speechflow-cli/dst/speechflow-util-llm.js.map +1 -1
  27. package/speechflow-cli/etc/oxlint.jsonc +4 -0
  28. package/speechflow-cli/etc/stx.conf +4 -4
  29. package/speechflow-cli/package.json +52 -45
  30. package/speechflow-cli/src/speechflow-main-cli.ts +1 -1
  31. package/speechflow-cli/src/speechflow-node-a2a-ffmpeg.ts +3 -1
  32. package/speechflow-cli/src/speechflow-node-a2a-gender.ts +3 -2
  33. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +30 -13
  34. package/speechflow-cli/src/speechflow-node-a2a-pitch.ts +12 -20
  35. package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +162 -108
  36. package/speechflow-cli/src/speechflow-node-t2t-opus.ts +1 -1
  37. package/speechflow-cli/src/speechflow-node-xio-exec.ts +7 -5
  38. package/speechflow-cli/src/speechflow-util-llm.ts +10 -2
  39. package/speechflow-ui-db/dst/app-font-fa-brands-400.woff2 +0 -0
  40. package/speechflow-ui-db/dst/app-font-fa-regular-400.woff2 +0 -0
  41. package/speechflow-ui-db/dst/app-font-fa-solid-900.woff2 +0 -0
  42. package/speechflow-ui-db/dst/app-font-fa-v4compatibility.woff2 +0 -0
  43. package/speechflow-ui-db/dst/index.css +1 -1
  44. package/speechflow-ui-db/dst/index.js +579 -57
  45. package/speechflow-ui-db/etc/stx.conf +3 -2
  46. package/speechflow-ui-db/etc/vite-client.mts +1 -1
  47. package/speechflow-ui-db/package.json +26 -21
  48. package/speechflow-ui-st/dst/app-font-fa-brands-400.woff2 +0 -0
  49. package/speechflow-ui-st/dst/app-font-fa-regular-400.woff2 +0 -0
  50. package/speechflow-ui-st/dst/app-font-fa-solid-900.woff2 +0 -0
  51. package/speechflow-ui-st/dst/app-font-fa-v4compatibility.woff2 +0 -0
  52. package/speechflow-ui-st/dst/index.css +1 -1
  53. package/speechflow-ui-st/dst/index.js +593 -71
  54. package/speechflow-ui-st/etc/stx.conf +3 -2
  55. package/speechflow-ui-st/etc/vite-client.mts +6 -0
  56. package/speechflow-ui-st/package.json +26 -21
  57. package/speechflow-cli/package.d/sherpa-onnx+1.12.25.patch +0 -12
  58. /package/speechflow-cli/package.d/{@typescript-eslint+typescript-estree+8.60.0.patch → @typescript-eslint+typescript-estree+8.64.0.patch} +0 -0
  59. /package/speechflow-ui-db/package.d/{@typescript-eslint+typescript-estree+8.60.0.patch → @typescript-eslint+typescript-estree+8.64.0.patch} +0 -0
  60. /package/speechflow-ui-st/package.d/{@typescript-eslint+typescript-estree+8.60.0.patch → @typescript-eslint+typescript-estree+8.64.0.patch} +0 -0
package/.ase/service.log CHANGED
@@ -10355,3 +10355,449 @@ ase: [2026-05-31 21:09:50.677]: [INFO]: mcp: GET /mcp
10355
10355
  ase: [2026-05-31 21:14:52.618]: [INFO]: mcp: GET /mcp
10356
10356
  ase: [2026-05-31 21:19:54.578]: [INFO]: mcp: GET /mcp
10357
10357
  ase: [2026-05-31 21:24:56.537]: [INFO]: mcp: GET /mcp
10358
+ ase: [2026-07-18 12:55:41.884]: [INFO]: service: listening on port 42085
10359
+ ase: [2026-07-18 12:55:42.020]: [INFO]: mcp: POST /mcp [initialize]
10360
+ ase: [2026-07-18 12:55:42.035]: [INFO]: mcp: POST /mcp [tools/list]
10361
+ ase: [2026-07-18 12:55:42.041]: [INFO]: mcp: POST /mcp [notifications/initialized]
10362
+ ase: [2026-07-18 12:55:42.046]: [INFO]: mcp: GET /mcp
10363
+ ase: [2026-07-18 12:58:41.126]: [INFO]: mcp: POST /mcp [initialize]
10364
+ ase: [2026-07-18 12:58:41.135]: [INFO]: mcp: POST /mcp [notifications/initialized]
10365
+ ase: [2026-07-18 12:58:41.139]: [INFO]: mcp: POST /mcp [tools/list]
10366
+ ase: [2026-07-18 12:58:41.146]: [INFO]: mcp: GET /mcp
10367
+ ase: [2026-07-18 13:00:59.830]: [INFO]: mcp: POST /mcp [initialize]
10368
+ ase: [2026-07-18 13:00:59.839]: [INFO]: mcp: POST /mcp [tools/list]
10369
+ ase: [2026-07-18 13:00:59.844]: [INFO]: mcp: POST /mcp [notifications/initialized]
10370
+ ase: [2026-07-18 13:00:59.848]: [INFO]: mcp: GET /mcp
10371
+ ase: [2026-07-18 13:32:41.867]: [INFO]: service: idle timeout reached, stopping
10372
+ ase: [2026-07-18 14:47:16.297]: [INFO]: service: listening on port 43535
10373
+ ase: [2026-07-18 14:47:16.420]: [INFO]: mcp: POST /mcp [initialize]
10374
+ ase: [2026-07-18 14:47:16.437]: [INFO]: mcp: POST /mcp [tools/list]
10375
+ ase: [2026-07-18 14:47:16.443]: [INFO]: mcp: POST /mcp [notifications/initialized]
10376
+ ase: [2026-07-18 14:47:16.449]: [INFO]: mcp: GET /mcp
10377
+ ase: [2026-07-18 15:22:16.321]: [INFO]: service: idle timeout reached, stopping
10378
+ ase: [2026-07-18 15:25:46.962]: [INFO]: service: listening on port 42639
10379
+ ase: [2026-07-18 15:25:47.023]: [INFO]: mcp: POST /mcp [initialize]
10380
+ ase: [2026-07-18 15:25:47.039]: [INFO]: mcp: POST /mcp [tools/list]
10381
+ ase: [2026-07-18 15:25:47.045]: [INFO]: mcp: POST /mcp [notifications/initialized]
10382
+ ase: [2026-07-18 15:25:47.052]: [INFO]: mcp: GET /mcp
10383
+ ase: [2026-07-18 15:30:49.016]: [INFO]: mcp: GET /mcp
10384
+ ase: [2026-07-18 15:35:51.025]: [INFO]: mcp: GET /mcp
10385
+ ase: [2026-07-18 15:40:52.968]: [INFO]: mcp: GET /mcp
10386
+ ase: [2026-07-18 15:45:55.029]: [INFO]: mcp: GET /mcp
10387
+ ase: [2026-07-18 15:50:57.352]: [INFO]: mcp: GET /mcp
10388
+ ase: [2026-07-18 15:55:59.671]: [INFO]: mcp: GET /mcp
10389
+ ase: [2026-07-18 16:01:01.995]: [INFO]: mcp: GET /mcp
10390
+ ase: [2026-07-18 16:06:04.237]: [INFO]: mcp: GET /mcp
10391
+ ase: [2026-07-18 16:11:06.209]: [INFO]: mcp: GET /mcp
10392
+ ase: [2026-07-18 16:16:08.187]: [INFO]: mcp: GET /mcp
10393
+ ase: [2026-07-18 16:21:10.166]: [INFO]: mcp: GET /mcp
10394
+ ase: [2026-07-18 16:26:12.147]: [INFO]: mcp: GET /mcp
10395
+ ase: [2026-07-18 16:31:14.131]: [INFO]: mcp: GET /mcp
10396
+ ase: [2026-07-18 16:36:16.111]: [INFO]: mcp: GET /mcp
10397
+ ase: [2026-07-18 16:41:18.095]: [INFO]: mcp: GET /mcp
10398
+ ase: [2026-07-18 16:51:06.553]: [INFO]: mcp: POST /mcp [initialize]
10399
+ ase: [2026-07-18 16:51:06.562]: [INFO]: mcp: POST /mcp [notifications/initialized]
10400
+ ase: [2026-07-18 16:51:06.564]: [INFO]: mcp: POST /mcp [tools/list]
10401
+ ase: [2026-07-18 16:51:06.568]: [INFO]: mcp: GET /mcp
10402
+ ase: [2026-07-18 16:59:27.768]: [INFO]: mcp: POST /mcp [initialize]
10403
+ ase: [2026-07-18 16:59:27.778]: [INFO]: mcp: POST /mcp [tools/list]
10404
+ ase: [2026-07-18 16:59:27.782]: [INFO]: mcp: POST /mcp [notifications/initialized]
10405
+ ase: [2026-07-18 16:59:27.788]: [INFO]: mcp: GET /mcp
10406
+ ase: [2026-07-18 17:04:14.770]: [INFO]: mcp: POST /mcp [initialize]
10407
+ ase: [2026-07-18 17:04:14.779]: [INFO]: mcp: POST /mcp [notifications/initialized]
10408
+ ase: [2026-07-18 17:04:14.782]: [INFO]: mcp: POST /mcp [tools/list]
10409
+ ase: [2026-07-18 17:04:14.785]: [INFO]: mcp: GET /mcp
10410
+ ase: [2026-07-18 17:34:47.034]: [INFO]: service: idle timeout reached, stopping
10411
+ ase: [2026-07-18 18:21:25.221]: [INFO]: service: listening on port 42096
10412
+ ase: [2026-07-18 18:21:25.353]: [INFO]: mcp: POST /mcp [initialize]
10413
+ ase: [2026-07-18 18:21:25.368]: [INFO]: mcp: POST /mcp [notifications/initialized]
10414
+ ase: [2026-07-18 18:21:25.371]: [INFO]: mcp: POST /mcp [tools/list]
10415
+ ase: [2026-07-18 18:21:25.378]: [INFO]: mcp: GET /mcp
10416
+ ase: [2026-07-18 18:24:21.578]: [INFO]: mcp: POST /mcp [initialize]
10417
+ ase: [2026-07-18 18:24:21.590]: [INFO]: mcp: POST /mcp [tools/list]
10418
+ ase: [2026-07-18 18:24:21.594]: [INFO]: mcp: POST /mcp [notifications/initialized]
10419
+ ase: [2026-07-18 18:24:21.598]: [INFO]: mcp: GET /mcp
10420
+ ase: [2026-07-18 18:58:25.261]: [INFO]: service: idle timeout reached, stopping
10421
+ ase: [2026-07-18 19:13:07.950]: [INFO]: service: listening on port 42663
10422
+ ase: [2026-07-18 19:13:08.012]: [INFO]: mcp: POST /mcp [initialize]
10423
+ ase: [2026-07-18 19:13:08.028]: [INFO]: mcp: POST /mcp [tools/list]
10424
+ ase: [2026-07-18 19:13:08.034]: [INFO]: mcp: POST /mcp [notifications/initialized]
10425
+ ase: [2026-07-18 19:13:08.040]: [INFO]: mcp: GET /mcp
10426
+ ase: [2026-07-18 19:17:52.826]: [INFO]: mcp: POST /mcp [initialize]
10427
+ ase: [2026-07-18 19:17:52.837]: [INFO]: mcp: POST /mcp [tools/list]
10428
+ ase: [2026-07-18 19:17:52.842]: [INFO]: mcp: POST /mcp [notifications/initialized]
10429
+ ase: [2026-07-18 19:17:52.847]: [INFO]: mcp: GET /mcp
10430
+ ase: [2026-07-18 19:21:52.488]: [INFO]: mcp: POST /mcp [initialize]
10431
+ ase: [2026-07-18 19:21:52.497]: [INFO]: mcp: POST /mcp [tools/list]
10432
+ ase: [2026-07-18 19:21:52.501]: [INFO]: mcp: POST /mcp [notifications/initialized]
10433
+ ase: [2026-07-18 19:21:52.507]: [INFO]: mcp: GET /mcp
10434
+ ase: [2026-07-18 19:27:02.773]: [INFO]: mcp: POST /mcp [initialize]
10435
+ ase: [2026-07-18 19:27:02.783]: [INFO]: mcp: POST /mcp [notifications/initialized]
10436
+ ase: [2026-07-18 19:27:02.786]: [INFO]: mcp: POST /mcp [tools/list]
10437
+ ase: [2026-07-18 19:27:02.789]: [INFO]: mcp: GET /mcp
10438
+ ase: [2026-07-18 19:32:16.666]: [INFO]: mcp: POST /mcp [initialize]
10439
+ ase: [2026-07-18 19:32:16.682]: [INFO]: mcp: POST /mcp [notifications/initialized]
10440
+ ase: [2026-07-18 19:32:16.685]: [INFO]: mcp: POST /mcp [tools/list]
10441
+ ase: [2026-07-18 19:32:16.688]: [INFO]: mcp: GET /mcp
10442
+ ase: [2026-07-18 19:37:18.662]: [INFO]: mcp: GET /mcp
10443
+ ase: [2026-07-18 19:39:00.159]: [INFO]: mcp: POST /mcp [initialize]
10444
+ ase: [2026-07-18 19:39:00.168]: [INFO]: mcp: POST /mcp [tools/list]
10445
+ ase: [2026-07-18 19:39:00.171]: [INFO]: mcp: POST /mcp [notifications/initialized]
10446
+ ase: [2026-07-18 19:39:00.181]: [INFO]: mcp: GET /mcp
10447
+ ase: [2026-07-18 19:41:08.057]: [INFO]: mcp: POST /mcp [initialize]
10448
+ ase: [2026-07-18 19:41:08.065]: [INFO]: mcp: POST /mcp [tools/list]
10449
+ ase: [2026-07-18 19:41:08.068]: [INFO]: mcp: POST /mcp [notifications/initialized]
10450
+ ase: [2026-07-18 19:41:08.073]: [INFO]: mcp: GET /mcp
10451
+ ase: [2026-07-18 19:45:47.456]: [INFO]: mcp: POST /mcp [initialize]
10452
+ ase: [2026-07-18 19:45:47.465]: [INFO]: mcp: POST /mcp [notifications/initialized]
10453
+ ase: [2026-07-18 19:45:47.467]: [INFO]: mcp: POST /mcp [tools/list]
10454
+ ase: [2026-07-18 19:45:47.471]: [INFO]: mcp: GET /mcp
10455
+ ase: [2026-07-18 19:48:24.820]: [INFO]: mcp: POST /mcp [initialize]
10456
+ ase: [2026-07-18 19:48:24.828]: [INFO]: mcp: POST /mcp [tools/list]
10457
+ ase: [2026-07-18 19:48:24.831]: [INFO]: mcp: POST /mcp [notifications/initialized]
10458
+ ase: [2026-07-18 19:48:24.835]: [INFO]: mcp: GET /mcp
10459
+ ase: [2026-07-18 19:53:26.793]: [INFO]: mcp: GET /mcp
10460
+ ase: [2026-07-18 19:58:28.676]: [INFO]: mcp: GET /mcp
10461
+ ase: [2026-07-18 20:03:30.630]: [INFO]: mcp: GET /mcp
10462
+ ase: [2026-07-18 20:08:32.595]: [INFO]: mcp: GET /mcp
10463
+ ase: [2026-07-18 20:09:31.838]: [INFO]: mcp: POST /mcp [initialize]
10464
+ ase: [2026-07-18 20:09:31.845]: [INFO]: mcp: POST /mcp [tools/list]
10465
+ ase: [2026-07-18 20:09:31.848]: [INFO]: mcp: POST /mcp [notifications/initialized]
10466
+ ase: [2026-07-18 20:09:31.853]: [INFO]: mcp: GET /mcp
10467
+ ase: [2026-07-18 20:12:54.295]: [INFO]: mcp: POST /mcp [initialize]
10468
+ ase: [2026-07-18 20:12:54.303]: [INFO]: mcp: POST /mcp [tools/list]
10469
+ ase: [2026-07-18 20:12:54.306]: [INFO]: mcp: POST /mcp [notifications/initialized]
10470
+ ase: [2026-07-18 20:12:54.313]: [INFO]: mcp: GET /mcp
10471
+ ase: [2026-07-18 20:17:56.255]: [INFO]: mcp: GET /mcp
10472
+ ase: [2026-07-18 20:22:58.235]: [INFO]: mcp: GET /mcp
10473
+ ase: [2026-07-18 20:28:00.333]: [INFO]: mcp: GET /mcp
10474
+ ase: [2026-07-18 20:33:02.702]: [INFO]: mcp: GET /mcp
10475
+ ase: [2026-07-18 20:38:05.082]: [INFO]: mcp: GET /mcp
10476
+ ase: [2026-07-18 20:43:07.438]: [INFO]: mcp: GET /mcp
10477
+ ase: [2026-07-18 20:48:09.789]: [INFO]: mcp: GET /mcp
10478
+ ase: [2026-07-18 20:53:12.127]: [INFO]: mcp: GET /mcp
10479
+ ase: [2026-07-18 20:58:14.445]: [INFO]: mcp: GET /mcp
10480
+ ase: [2026-07-18 21:03:16.774]: [INFO]: mcp: GET /mcp
10481
+ ase: [2026-07-18 21:08:19.022]: [INFO]: mcp: GET /mcp
10482
+ ase: [2026-07-18 21:13:21.377]: [INFO]: mcp: GET /mcp
10483
+ ase: [2026-07-18 21:18:23.697]: [INFO]: mcp: GET /mcp
10484
+ ase: [2026-07-18 21:23:26.004]: [INFO]: mcp: GET /mcp
10485
+ ase: [2026-07-18 21:28:28.343]: [INFO]: mcp: GET /mcp
10486
+ ase: [2026-07-18 21:33:30.651]: [INFO]: mcp: GET /mcp
10487
+ ase: [2026-07-18 21:38:32.985]: [INFO]: mcp: GET /mcp
10488
+ ase: [2026-07-18 21:43:35.361]: [INFO]: mcp: GET /mcp
10489
+ ase: [2026-07-18 21:48:37.667]: [INFO]: mcp: GET /mcp
10490
+ ase: [2026-07-18 21:53:39.989]: [INFO]: mcp: GET /mcp
10491
+ ase: [2026-07-18 21:58:42.366]: [INFO]: mcp: GET /mcp
10492
+ ase: [2026-07-18 22:03:44.669]: [INFO]: mcp: GET /mcp
10493
+ ase: [2026-07-18 22:08:47.012]: [INFO]: mcp: GET /mcp
10494
+ ase: [2026-07-18 22:13:49.343]: [INFO]: mcp: GET /mcp
10495
+ ase: [2026-07-18 22:18:51.645]: [INFO]: mcp: GET /mcp
10496
+ ase: [2026-07-18 22:23:53.941]: [INFO]: mcp: GET /mcp
10497
+ ase: [2026-07-18 22:28:56.270]: [INFO]: mcp: GET /mcp
10498
+ ase: [2026-07-18 22:33:58.568]: [INFO]: mcp: GET /mcp
10499
+ ase: [2026-07-18 22:39:00.913]: [INFO]: mcp: GET /mcp
10500
+ ase: [2026-07-18 22:44:03.237]: [INFO]: mcp: GET /mcp
10501
+ ase: [2026-07-18 22:49:05.561]: [INFO]: mcp: GET /mcp
10502
+ ase: [2026-07-18 22:54:07.846]: [INFO]: mcp: GET /mcp
10503
+ ase: [2026-07-18 23:03:36.527]: [INFO]: mcp: POST /mcp [initialize]
10504
+ ase: [2026-07-18 23:03:36.534]: [INFO]: mcp: POST /mcp [notifications/initialized]
10505
+ ase: [2026-07-18 23:03:36.537]: [INFO]: mcp: POST /mcp [tools/list]
10506
+ ase: [2026-07-18 23:03:36.540]: [INFO]: mcp: GET /mcp
10507
+ ase: [2026-07-18 23:05:25.695]: [INFO]: mcp: POST /mcp [tools/call] ase_config_set {"key":"agent.skill","val":"ase-code-lint","scope":"session:ac2d5a7e-6a01-43ec-98cc-21f01d5a25ff"}
10508
+ ase: [2026-07-18 23:08:38.482]: [INFO]: mcp: GET /mcp
10509
+ ase: [2026-07-18 23:13:40.449]: [INFO]: mcp: GET /mcp
10510
+ ase: [2026-07-18 23:18:42.437]: [INFO]: mcp: GET /mcp
10511
+ ase: [2026-07-18 23:23:44.419]: [INFO]: mcp: GET /mcp
10512
+ ase: [2026-07-18 23:28:46.388]: [INFO]: mcp: GET /mcp
10513
+ ase: [2026-07-18 23:33:48.345]: [INFO]: mcp: GET /mcp
10514
+ ase: [2026-07-18 23:38:50.308]: [INFO]: mcp: GET /mcp
10515
+ ase: [2026-07-18 23:43:52.293]: [INFO]: mcp: GET /mcp
10516
+ ase: [2026-07-18 23:48:54.258]: [INFO]: mcp: GET /mcp
10517
+ ase: [2026-07-18 23:53:56.206]: [INFO]: mcp: GET /mcp
10518
+ ase: [2026-07-18 23:58:58.167]: [INFO]: mcp: GET /mcp
10519
+ ase: [2026-07-19 00:04:00.139]: [INFO]: mcp: GET /mcp
10520
+ ase: [2026-07-19 00:09:02.109]: [INFO]: mcp: GET /mcp
10521
+ ase: [2026-07-19 00:14:04.060]: [INFO]: mcp: GET /mcp
10522
+ ase: [2026-07-19 00:19:06.038]: [INFO]: mcp: GET /mcp
10523
+ ase: [2026-07-19 00:24:07.977]: [INFO]: mcp: GET /mcp
10524
+ ase: [2026-07-19 00:29:09.950]: [INFO]: mcp: GET /mcp
10525
+ ase: [2026-07-19 00:34:11.936]: [INFO]: mcp: GET /mcp
10526
+ ase: [2026-07-19 00:39:13.917]: [INFO]: mcp: GET /mcp
10527
+ ase: [2026-07-19 00:44:15.876]: [INFO]: mcp: GET /mcp
10528
+ ase: [2026-07-19 00:49:17.838]: [INFO]: mcp: GET /mcp
10529
+ ase: [2026-07-19 00:54:19.799]: [INFO]: mcp: GET /mcp
10530
+ ase: [2026-07-19 00:59:21.760]: [INFO]: mcp: GET /mcp
10531
+ ase: [2026-07-19 01:04:23.732]: [INFO]: mcp: GET /mcp
10532
+ ase: [2026-07-19 01:09:25.700]: [INFO]: mcp: GET /mcp
10533
+ ase: [2026-07-19 01:14:27.687]: [INFO]: mcp: GET /mcp
10534
+ ase: [2026-07-19 01:19:29.656]: [INFO]: mcp: GET /mcp
10535
+ ase: [2026-07-19 01:24:31.640]: [INFO]: mcp: GET /mcp
10536
+ ase: [2026-07-19 01:29:33.606]: [INFO]: mcp: GET /mcp
10537
+ ase: [2026-07-19 01:34:35.573]: [INFO]: mcp: GET /mcp
10538
+ ase: [2026-07-19 01:39:37.539]: [INFO]: mcp: GET /mcp
10539
+ ase: [2026-07-19 01:44:39.649]: [INFO]: mcp: GET /mcp
10540
+ ase: [2026-07-19 01:49:41.953]: [INFO]: mcp: GET /mcp
10541
+ ase: [2026-07-19 01:54:44.251]: [INFO]: mcp: GET /mcp
10542
+ ase: [2026-07-19 01:59:46.575]: [INFO]: mcp: GET /mcp
10543
+ ase: [2026-07-19 02:04:48.830]: [INFO]: mcp: GET /mcp
10544
+ ase: [2026-07-19 02:09:51.115]: [INFO]: mcp: GET /mcp
10545
+ ase: [2026-07-19 02:14:53.427]: [INFO]: mcp: GET /mcp
10546
+ ase: [2026-07-19 02:19:55.801]: [INFO]: mcp: GET /mcp
10547
+ ase: [2026-07-19 02:24:58.129]: [INFO]: mcp: GET /mcp
10548
+ ase: [2026-07-19 02:30:00.469]: [INFO]: mcp: GET /mcp
10549
+ ase: [2026-07-19 02:35:02.774]: [INFO]: mcp: GET /mcp
10550
+ ase: [2026-07-19 02:40:05.111]: [INFO]: mcp: GET /mcp
10551
+ ase: [2026-07-19 02:45:07.407]: [INFO]: mcp: GET /mcp
10552
+ ase: [2026-07-19 02:50:09.182]: [INFO]: mcp: GET /mcp
10553
+ ase: [2026-07-19 02:55:11.455]: [INFO]: mcp: GET /mcp
10554
+ ase: [2026-07-19 03:00:13.772]: [INFO]: mcp: GET /mcp
10555
+ ase: [2026-07-19 03:05:16.062]: [INFO]: mcp: GET /mcp
10556
+ ase: [2026-07-19 03:10:18.373]: [INFO]: mcp: GET /mcp
10557
+ ase: [2026-07-19 03:15:20.679]: [INFO]: mcp: GET /mcp
10558
+ ase: [2026-07-19 03:20:22.984]: [INFO]: mcp: GET /mcp
10559
+ ase: [2026-07-19 03:25:25.272]: [INFO]: mcp: GET /mcp
10560
+ ase: [2026-07-19 03:30:27.599]: [INFO]: mcp: GET /mcp
10561
+ ase: [2026-07-19 03:35:29.939]: [INFO]: mcp: GET /mcp
10562
+ ase: [2026-07-19 03:40:32.263]: [INFO]: mcp: GET /mcp
10563
+ ase: [2026-07-19 03:45:34.566]: [INFO]: mcp: GET /mcp
10564
+ ase: [2026-07-19 03:50:36.898]: [INFO]: mcp: GET /mcp
10565
+ ase: [2026-07-19 03:55:39.211]: [INFO]: mcp: GET /mcp
10566
+ ase: [2026-07-19 04:00:41.521]: [INFO]: mcp: GET /mcp
10567
+ ase: [2026-07-19 04:05:43.812]: [INFO]: mcp: GET /mcp
10568
+ ase: [2026-07-19 04:10:46.114]: [INFO]: mcp: GET /mcp
10569
+ ase: [2026-07-19 04:15:48.443]: [INFO]: mcp: GET /mcp
10570
+ ase: [2026-07-19 04:20:50.767]: [INFO]: mcp: GET /mcp
10571
+ ase: [2026-07-19 04:25:53.061]: [INFO]: mcp: GET /mcp
10572
+ ase: [2026-07-19 04:30:55.394]: [INFO]: mcp: GET /mcp
10573
+ ase: [2026-07-19 04:35:57.709]: [INFO]: mcp: GET /mcp
10574
+ ase: [2026-07-19 04:41:00.044]: [INFO]: mcp: GET /mcp
10575
+ ase: [2026-07-19 04:46:02.345]: [INFO]: mcp: GET /mcp
10576
+ ase: [2026-07-19 04:51:04.672]: [INFO]: mcp: GET /mcp
10577
+ ase: [2026-07-19 04:56:06.953]: [INFO]: mcp: GET /mcp
10578
+ ase: [2026-07-19 05:01:09.268]: [INFO]: mcp: GET /mcp
10579
+ ase: [2026-07-19 05:06:11.576]: [INFO]: mcp: GET /mcp
10580
+ ase: [2026-07-19 05:11:13.924]: [INFO]: mcp: GET /mcp
10581
+ ase: [2026-07-19 05:16:16.216]: [INFO]: mcp: GET /mcp
10582
+ ase: [2026-07-19 05:21:18.559]: [INFO]: mcp: GET /mcp
10583
+ ase: [2026-07-19 05:26:20.891]: [INFO]: mcp: GET /mcp
10584
+ ase: [2026-07-19 05:31:23.212]: [INFO]: mcp: GET /mcp
10585
+ ase: [2026-07-19 05:36:25.512]: [INFO]: mcp: GET /mcp
10586
+ ase: [2026-07-19 05:41:27.844]: [INFO]: mcp: GET /mcp
10587
+ ase: [2026-07-19 05:46:30.146]: [INFO]: mcp: GET /mcp
10588
+ ase: [2026-07-19 05:51:32.483]: [INFO]: mcp: GET /mcp
10589
+ ase: [2026-07-19 05:56:34.783]: [INFO]: mcp: GET /mcp
10590
+ ase: [2026-07-19 06:01:37.078]: [INFO]: mcp: GET /mcp
10591
+ ase: [2026-07-19 06:06:39.381]: [INFO]: mcp: GET /mcp
10592
+ ase: [2026-07-19 06:11:41.653]: [INFO]: mcp: GET /mcp
10593
+ ase: [2026-07-19 06:16:43.962]: [INFO]: mcp: GET /mcp
10594
+ ase: [2026-07-19 06:21:46.289]: [INFO]: mcp: GET /mcp
10595
+ ase: [2026-07-19 06:26:48.599]: [INFO]: mcp: GET /mcp
10596
+ ase: [2026-07-19 06:31:50.916]: [INFO]: mcp: GET /mcp
10597
+ ase: [2026-07-19 06:36:53.248]: [INFO]: mcp: GET /mcp
10598
+ ase: [2026-07-19 06:41:55.532]: [INFO]: mcp: GET /mcp
10599
+ ase: [2026-07-19 06:46:57.871]: [INFO]: mcp: GET /mcp
10600
+ ase: [2026-07-19 06:52:00.191]: [INFO]: mcp: GET /mcp
10601
+ ase: [2026-07-19 06:57:02.486]: [INFO]: mcp: GET /mcp
10602
+ ase: [2026-07-19 07:02:04.819]: [INFO]: mcp: GET /mcp
10603
+ ase: [2026-07-19 07:07:07.129]: [INFO]: mcp: GET /mcp
10604
+ ase: [2026-07-19 07:12:09.456]: [INFO]: mcp: GET /mcp
10605
+ ase: [2026-07-19 07:17:11.782]: [INFO]: mcp: GET /mcp
10606
+ ase: [2026-07-19 07:22:14.083]: [INFO]: mcp: GET /mcp
10607
+ ase: [2026-07-19 07:27:16.418]: [INFO]: mcp: GET /mcp
10608
+ ase: [2026-07-19 07:32:18.721]: [INFO]: mcp: GET /mcp
10609
+ ase: [2026-07-19 07:37:21.080]: [INFO]: mcp: GET /mcp
10610
+ ase: [2026-07-19 07:42:23.396]: [INFO]: mcp: GET /mcp
10611
+ ase: [2026-07-19 07:47:25.695]: [INFO]: mcp: GET /mcp
10612
+ ase: [2026-07-19 07:52:28.032]: [INFO]: mcp: GET /mcp
10613
+ ase: [2026-07-19 07:57:30.379]: [INFO]: mcp: GET /mcp
10614
+ ase: [2026-07-19 08:02:32.665]: [INFO]: mcp: GET /mcp
10615
+ ase: [2026-07-19 08:07:35.007]: [INFO]: mcp: GET /mcp
10616
+ ase: [2026-07-19 08:12:37.342]: [INFO]: mcp: GET /mcp
10617
+ ase: [2026-07-19 08:17:39.664]: [INFO]: mcp: GET /mcp
10618
+ ase: [2026-07-19 08:22:41.985]: [INFO]: mcp: GET /mcp
10619
+ ase: [2026-07-19 08:27:44.289]: [INFO]: mcp: GET /mcp
10620
+ ase: [2026-07-19 08:32:46.599]: [INFO]: mcp: GET /mcp
10621
+ ase: [2026-07-19 08:37:48.934]: [INFO]: mcp: GET /mcp
10622
+ ase: [2026-07-19 08:42:51.263]: [INFO]: mcp: GET /mcp
10623
+ ase: [2026-07-19 08:47:53.614]: [INFO]: mcp: GET /mcp
10624
+ ase: [2026-07-19 08:52:55.931]: [INFO]: mcp: GET /mcp
10625
+ ase: [2026-07-19 08:57:58.220]: [INFO]: mcp: GET /mcp
10626
+ ase: [2026-07-19 09:03:00.524]: [INFO]: mcp: GET /mcp
10627
+ ase: [2026-07-19 09:08:02.805]: [INFO]: mcp: GET /mcp
10628
+ ase: [2026-07-19 09:13:05.125]: [INFO]: mcp: GET /mcp
10629
+ ase: [2026-07-19 09:18:07.461]: [INFO]: mcp: GET /mcp
10630
+ ase: [2026-07-19 09:23:09.789]: [INFO]: mcp: GET /mcp
10631
+ ase: [2026-07-19 09:28:12.108]: [INFO]: mcp: GET /mcp
10632
+ ase: [2026-07-19 09:33:14.441]: [INFO]: mcp: GET /mcp
10633
+ ase: [2026-07-19 09:38:16.728]: [INFO]: mcp: GET /mcp
10634
+ ase: [2026-07-19 09:43:18.928]: [INFO]: mcp: GET /mcp
10635
+ ase: [2026-07-19 09:48:20.918]: [INFO]: mcp: GET /mcp
10636
+ ase: [2026-07-19 09:53:22.886]: [INFO]: mcp: GET /mcp
10637
+ ase: [2026-07-19 09:58:24.871]: [INFO]: mcp: GET /mcp
10638
+ ase: [2026-07-19 10:03:26.841]: [INFO]: mcp: GET /mcp
10639
+ ase: [2026-07-19 10:08:28.827]: [INFO]: mcp: GET /mcp
10640
+ ase: [2026-07-19 10:13:30.808]: [INFO]: mcp: GET /mcp
10641
+ ase: [2026-07-19 10:18:32.776]: [INFO]: mcp: GET /mcp
10642
+ ase: [2026-07-19 10:23:34.759]: [INFO]: mcp: GET /mcp
10643
+ ase: [2026-07-19 10:28:36.759]: [INFO]: mcp: GET /mcp
10644
+ ase: [2026-07-19 10:33:38.735]: [INFO]: mcp: GET /mcp
10645
+ ase: [2026-07-19 10:38:40.725]: [INFO]: mcp: GET /mcp
10646
+ ase: [2026-07-19 10:43:42.710]: [INFO]: mcp: GET /mcp
10647
+ ase: [2026-07-19 10:48:44.695]: [INFO]: mcp: GET /mcp
10648
+ ase: [2026-07-19 10:53:46.666]: [INFO]: mcp: GET /mcp
10649
+ ase: [2026-07-19 10:58:48.653]: [INFO]: mcp: GET /mcp
10650
+ ase: [2026-07-19 11:03:50.629]: [INFO]: mcp: GET /mcp
10651
+ ase: [2026-07-19 11:08:52.634]: [INFO]: mcp: GET /mcp
10652
+ ase: [2026-07-19 11:13:54.631]: [INFO]: mcp: GET /mcp
10653
+ ase: [2026-07-19 11:18:56.599]: [INFO]: mcp: GET /mcp
10654
+ ase: [2026-07-19 11:23:58.572]: [INFO]: mcp: GET /mcp
10655
+ ase: [2026-07-19 11:29:00.553]: [INFO]: mcp: GET /mcp
10656
+ ase: [2026-07-19 11:34:02.534]: [INFO]: mcp: GET /mcp
10657
+ ase: [2026-07-19 11:39:04.506]: [INFO]: mcp: GET /mcp
10658
+ ase: [2026-07-19 11:44:06.470]: [INFO]: mcp: GET /mcp
10659
+ ase: [2026-07-19 11:49:08.443]: [INFO]: mcp: GET /mcp
10660
+ ase: [2026-07-19 11:54:10.490]: [INFO]: mcp: GET /mcp
10661
+ ase: [2026-07-19 11:59:12.870]: [INFO]: mcp: GET /mcp
10662
+ ase: [2026-07-19 12:04:15.216]: [INFO]: mcp: GET /mcp
10663
+ ase: [2026-07-19 12:09:17.537]: [INFO]: mcp: GET /mcp
10664
+ ase: [2026-07-19 12:14:19.863]: [INFO]: mcp: GET /mcp
10665
+ ase: [2026-07-19 12:19:22.189]: [INFO]: mcp: GET /mcp
10666
+ ase: [2026-07-19 12:24:24.501]: [INFO]: mcp: GET /mcp
10667
+ ase: [2026-07-19 12:29:26.848]: [INFO]: mcp: GET /mcp
10668
+ ase: [2026-07-19 12:34:29.176]: [INFO]: mcp: GET /mcp
10669
+ ase: [2026-07-19 12:39:31.506]: [INFO]: mcp: GET /mcp
10670
+ ase: [2026-07-19 12:44:33.811]: [INFO]: mcp: GET /mcp
10671
+ ase: [2026-07-19 12:49:35.796]: [INFO]: mcp: GET /mcp
10672
+ ase: [2026-07-19 12:54:37.780]: [INFO]: mcp: GET /mcp
10673
+ ase: [2026-07-19 12:59:39.766]: [INFO]: mcp: GET /mcp
10674
+ ase: [2026-07-19 13:04:41.722]: [INFO]: mcp: GET /mcp
10675
+ ase: [2026-07-19 13:09:43.736]: [INFO]: mcp: GET /mcp
10676
+ ase: [2026-07-19 13:14:45.782]: [INFO]: mcp: GET /mcp
10677
+ ase: [2026-07-19 13:19:48.099]: [INFO]: mcp: GET /mcp
10678
+ ase: [2026-07-19 13:24:50.094]: [INFO]: mcp: GET /mcp
10679
+ ase: [2026-07-19 13:29:52.060]: [INFO]: mcp: GET /mcp
10680
+ ase: [2026-07-19 13:34:54.029]: [INFO]: mcp: GET /mcp
10681
+ ase: [2026-07-19 13:39:55.984]: [INFO]: mcp: GET /mcp
10682
+ ase: [2026-07-19 13:44:57.961]: [INFO]: mcp: GET /mcp
10683
+ ase: [2026-07-19 13:49:59.925]: [INFO]: mcp: GET /mcp
10684
+ ase: [2026-07-19 13:55:01.899]: [INFO]: mcp: GET /mcp
10685
+ ase: [2026-07-19 14:00:03.865]: [INFO]: mcp: GET /mcp
10686
+ ase: [2026-07-19 14:05:05.819]: [INFO]: mcp: GET /mcp
10687
+ ase: [2026-07-19 14:10:07.768]: [INFO]: mcp: GET /mcp
10688
+ ase: [2026-07-19 14:15:09.756]: [INFO]: mcp: GET /mcp
10689
+ ase: [2026-07-19 14:20:11.704]: [INFO]: mcp: GET /mcp
10690
+ ase: [2026-07-19 14:25:13.704]: [INFO]: mcp: GET /mcp
10691
+ ase: [2026-07-19 14:30:15.695]: [INFO]: mcp: GET /mcp
10692
+ ase: [2026-07-19 14:35:17.672]: [INFO]: mcp: GET /mcp
10693
+ ase: [2026-07-19 14:40:19.639]: [INFO]: mcp: GET /mcp
10694
+ ase: [2026-07-19 14:45:21.611]: [INFO]: mcp: GET /mcp
10695
+ ase: [2026-07-19 14:50:23.575]: [INFO]: mcp: GET /mcp
10696
+ ase: [2026-07-19 14:55:25.537]: [INFO]: mcp: GET /mcp
10697
+ ase: [2026-07-19 15:00:27.524]: [INFO]: mcp: GET /mcp
10698
+ ase: [2026-07-19 15:05:29.527]: [INFO]: mcp: GET /mcp
10699
+ ase: [2026-07-19 15:10:31.512]: [INFO]: mcp: GET /mcp
10700
+ ase: [2026-07-19 15:15:33.495]: [INFO]: mcp: GET /mcp
10701
+ ase: [2026-07-19 15:20:35.462]: [INFO]: mcp: GET /mcp
10702
+ ase: [2026-07-19 15:25:37.445]: [INFO]: mcp: GET /mcp
10703
+ ase: [2026-07-19 15:30:39.423]: [INFO]: mcp: GET /mcp
10704
+ ase: [2026-07-19 15:35:41.373]: [INFO]: mcp: GET /mcp
10705
+ ase: [2026-07-19 15:40:43.309]: [INFO]: mcp: GET /mcp
10706
+ ase: [2026-07-19 15:45:45.265]: [INFO]: mcp: GET /mcp
10707
+ ase: [2026-07-19 15:50:47.251]: [INFO]: mcp: GET /mcp
10708
+ ase: [2026-07-19 15:55:49.242]: [INFO]: mcp: GET /mcp
10709
+ ase: [2026-07-19 16:00:51.232]: [INFO]: mcp: GET /mcp
10710
+ ase: [2026-07-19 16:05:53.202]: [INFO]: mcp: GET /mcp
10711
+ ase: [2026-07-19 16:10:55.330]: [INFO]: mcp: GET /mcp
10712
+ ase: [2026-07-19 16:15:57.620]: [INFO]: mcp: GET /mcp
10713
+ ase: [2026-07-19 16:20:59.968]: [INFO]: mcp: GET /mcp
10714
+ ase: [2026-07-19 16:26:02.315]: [INFO]: mcp: GET /mcp
10715
+ ase: [2026-07-19 16:31:04.644]: [INFO]: mcp: GET /mcp
10716
+ ase: [2026-07-19 16:36:06.935]: [INFO]: mcp: GET /mcp
10717
+ ase: [2026-07-19 16:41:09.287]: [INFO]: mcp: GET /mcp
10718
+ ase: [2026-07-19 16:46:10.988]: [INFO]: mcp: GET /mcp
10719
+ ase: [2026-07-19 16:51:12.962]: [INFO]: mcp: GET /mcp
10720
+ ase: [2026-07-19 16:56:14.964]: [INFO]: mcp: GET /mcp
10721
+ ase: [2026-07-19 17:01:16.936]: [INFO]: mcp: GET /mcp
10722
+ ase: [2026-07-19 17:06:18.968]: [INFO]: mcp: GET /mcp
10723
+ ase: [2026-07-19 17:11:21.257]: [INFO]: mcp: GET /mcp
10724
+ ase: [2026-07-19 17:16:23.556]: [INFO]: mcp: GET /mcp
10725
+ ase: [2026-07-19 17:21:25.872]: [INFO]: mcp: GET /mcp
10726
+ ase: [2026-07-19 17:26:28.206]: [INFO]: mcp: GET /mcp
10727
+ ase: [2026-07-19 17:31:30.505]: [INFO]: mcp: GET /mcp
10728
+ ase: [2026-07-19 17:36:32.812]: [INFO]: mcp: GET /mcp
10729
+ ase: [2026-07-19 17:41:35.111]: [INFO]: mcp: GET /mcp
10730
+ ase: [2026-07-19 17:46:37.394]: [INFO]: mcp: GET /mcp
10731
+ ase: [2026-07-19 17:51:39.523]: [INFO]: mcp: GET /mcp
10732
+ ase: [2026-07-19 17:56:41.521]: [INFO]: mcp: GET /mcp
10733
+ ase: [2026-07-19 18:01:43.464]: [INFO]: mcp: GET /mcp
10734
+ ase: [2026-07-19 18:06:45.412]: [INFO]: mcp: GET /mcp
10735
+ ase: [2026-07-19 18:11:47.354]: [INFO]: mcp: GET /mcp
10736
+ ase: [2026-07-19 18:16:49.304]: [INFO]: mcp: GET /mcp
10737
+ ase: [2026-07-19 18:21:51.238]: [INFO]: mcp: GET /mcp
10738
+ ase: [2026-07-19 18:26:53.197]: [INFO]: mcp: GET /mcp
10739
+ ase: [2026-07-19 18:31:55.242]: [INFO]: mcp: GET /mcp
10740
+ ase: [2026-07-19 18:36:57.571]: [INFO]: mcp: GET /mcp
10741
+ ase: [2026-07-19 18:41:59.956]: [INFO]: mcp: GET /mcp
10742
+ ase: [2026-07-19 18:47:02.285]: [INFO]: mcp: GET /mcp
10743
+ ase: [2026-07-19 18:52:04.364]: [INFO]: mcp: GET /mcp
10744
+ ase: [2026-07-19 18:57:06.348]: [INFO]: mcp: GET /mcp
10745
+ ase: [2026-07-19 19:02:08.323]: [INFO]: mcp: GET /mcp
10746
+ ase: [2026-07-19 19:07:10.305]: [INFO]: mcp: GET /mcp
10747
+ ase: [2026-07-19 19:12:12.284]: [INFO]: mcp: GET /mcp
10748
+ ase: [2026-07-19 19:17:14.265]: [INFO]: mcp: GET /mcp
10749
+ ase: [2026-07-19 19:22:16.184]: [INFO]: mcp: GET /mcp
10750
+ ase: [2026-07-19 19:27:18.153]: [INFO]: mcp: GET /mcp
10751
+ ase: [2026-07-19 19:32:20.131]: [INFO]: mcp: GET /mcp
10752
+ ase: [2026-07-19 19:37:22.097]: [INFO]: mcp: GET /mcp
10753
+ ase: [2026-07-19 19:42:24.066]: [INFO]: mcp: GET /mcp
10754
+ ase: [2026-07-19 19:47:26.034]: [INFO]: mcp: GET /mcp
10755
+ ase: [2026-07-19 19:52:28.006]: [INFO]: mcp: GET /mcp
10756
+ ase: [2026-07-19 19:57:30.014]: [INFO]: mcp: GET /mcp
10757
+ ase: [2026-07-19 20:02:31.981]: [INFO]: mcp: GET /mcp
10758
+ ase: [2026-07-19 20:07:33.927]: [INFO]: mcp: GET /mcp
10759
+ ase: [2026-07-19 20:12:35.902]: [INFO]: mcp: GET /mcp
10760
+ ase: [2026-07-19 20:13:55.644]: [INFO]: mcp: POST /mcp [tools/call] ase_config_delete {"key":"agent.skill","scope":"session:ac2d5a7e-6a01-43ec-98cc-21f01d5a25ff"}
10761
+ ase: [2026-07-19 20:46:09.548]: [INFO]: service: idle timeout reached, stopping
10762
+ ase: [2026-07-23 18:20:15.867]: [INFO]: service: listening on port 43501
10763
+ ase: [2026-07-23 18:20:15.930]: [INFO]: mcp: POST /mcp [initialize]
10764
+ ase: [2026-07-23 18:20:15.944]: [INFO]: mcp: POST /mcp [tools/list]
10765
+ ase: [2026-07-23 18:20:15.949]: [INFO]: mcp: POST /mcp [notifications/initialized]
10766
+ ase: [2026-07-23 18:20:15.954]: [INFO]: mcp: GET /mcp
10767
+ ase: [2026-07-23 18:25:17.888]: [INFO]: mcp: GET /mcp
10768
+ ase: [2026-07-23 18:30:19.824]: [INFO]: mcp: GET /mcp
10769
+ ase: [2026-07-23 18:35:21.757]: [INFO]: mcp: GET /mcp
10770
+ ase: [2026-07-23 18:40:23.700]: [INFO]: mcp: GET /mcp
10771
+ ase: [2026-07-23 18:45:25.649]: [INFO]: mcp: GET /mcp
10772
+ ase: [2026-07-23 18:47:24.476]: [INFO]: mcp: POST /mcp [tools/call] ase_task_id {"id":"flush","session":"86a1d3af-95c3-4416-a4cd-10554f3bb643"}
10773
+ ase: [2026-07-23 18:50:27.560]: [INFO]: mcp: GET /mcp
10774
+ ase: [2026-07-23 18:55:29.766]: [INFO]: mcp: GET /mcp
10775
+ ase: [2026-07-23 19:00:31.730]: [INFO]: mcp: GET /mcp
10776
+ ase: [2026-07-23 19:05:34.039]: [INFO]: mcp: GET /mcp
10777
+ ase: [2026-07-23 19:10:36.352]: [INFO]: mcp: GET /mcp
10778
+ ase: [2026-07-23 19:15:38.619]: [INFO]: mcp: GET /mcp
10779
+ ase: [2026-07-23 19:20:40.925]: [INFO]: mcp: GET /mcp
10780
+ ase: [2026-07-23 19:25:43.228]: [INFO]: mcp: GET /mcp
10781
+ ase: [2026-07-23 19:30:45.537]: [INFO]: mcp: GET /mcp
10782
+ ase: [2026-07-23 19:35:47.851]: [INFO]: mcp: GET /mcp
10783
+ ase: [2026-07-23 19:40:50.210]: [INFO]: mcp: GET /mcp
10784
+ ase: [2026-07-23 19:45:52.536]: [INFO]: mcp: GET /mcp
10785
+ ase: [2026-07-23 19:50:54.851]: [INFO]: mcp: GET /mcp
10786
+ ase: [2026-07-23 19:53:16.100]: [INFO]: mcp: POST /mcp [tools/call] ase_timestamp {"format":"yyyy-LL-dd HH:mm"}
10787
+ ase: [2026-07-23 19:53:26.247]: [INFO]: mcp: POST /mcp [tools/call] ase_task_save {"id":"flush","text":"\n# TASK flush: Re-emit last interim chunk as final on suspend\n\n⎈ Created: 2026-07-23 19:53\n⚙ Modified: 2026-07-23 19:53\n\n## CONTEXT\n\n- **WHAT**: The `a2t-deepgram` node tracks its *last emitted text chunk* and, upon *suspension*,\n re-emits it as a `final` chunk in case it was still an `intermediate` (non-final) one.\n\n- **WHY**: When the node is suspended mid-utterance, the Deepgram connection is torn down and no\n `final` result will ever arrive, so the dashboard keeps showing the last text as *non-final*\n forever. Re-emitting it as `final` lets the downstream `t2t-sentence` node flush it via its\n existing merge/timeout logic, so the last message ends up *final* everywhere downstream.\n\n## CHANGES\n\n- **Track last chunk**: In `speechflow-node-a2t-deepgram.ts` add private state\n `lastChunk: SpeechFlowChunk | null = null`, set in the Deepgram `Results` handler whenever a\n text chunk is written to `this.queue`, and reset to `null` in `open()`.\n\n- **Flush on suspend**: In `setSuspended()`, after `closeConnection()` in the suspend branch,\n if `this.lastChunk` is an `intermediate` chunk and `this.queue` exists, write a `clone()` with\n `kind = \"final\"` into `this.queue` and update `this.lastChunk` to that clone, preventing a\n double re-emission on repeated suspend/unsuspend cycles.\n\n- **ChangeLog entry**: Add a new entry to `CHANGELOG.md`, aligned with its existing style:\n `- IMPROVEMENT: re-emit last intermediate chunk as final when suspending \"a2t-deepgram\" node`.\n\n## VERIFICATION\n\n- **Lint**: `npm start lint` in `speechflow-cli/` passes without new findings.\n\n- **Build**: `npm start build` in `speechflow-cli/` compiles the TypeScript sources cleanly.\n\n- **Runtime**: Run the `npm start test` pipeline, suspend the DeepGram node mid-utterance via the\n dashboard, and observe that the last non-final message is repeated as a *final* one (after the\n `t2t-sentence` timeout of 3s).\n"}
10788
+ ase: [2026-07-23 19:54:09.031]: [INFO]: mcp: POST /mcp [tools/call] ase_getopt {"name":"ase-task-edit","spec":"--help|-h --plan|-p=(none|OVERWRITE|REFINE|PRESERVE) --dry|-d --next|-n=(none|DONE|GRILL|PREFLIGHT|IMPLEMENT)... --int-reuse-task","args":"--int-reuse-task"}
10789
+ ase: [2026-07-23 19:55:31.261]: [INFO]: mcp: POST /mcp [tools/call] ase_task_load {"id":"flush"}
10790
+ ase: [2026-07-23 19:55:56.922]: [INFO]: mcp: GET /mcp
10791
+ ase: [2026-07-23 20:00:58.847]: [INFO]: mcp: GET /mcp
10792
+ ase: [2026-07-23 20:06:00.755]: [INFO]: mcp: GET /mcp
10793
+ ase: [2026-07-23 20:11:02.689]: [INFO]: mcp: GET /mcp
10794
+ ase: [2026-07-23 20:16:04.607]: [INFO]: mcp: GET /mcp
10795
+ ase: [2026-07-23 20:17:18.959]: [INFO]: mcp: POST /mcp [tools/call] ase_timestamp {"format":"yyyy-LL-dd HH:mm"}
10796
+ ase: [2026-07-23 20:17:29.392]: [INFO]: mcp: POST /mcp [tools/call] ase_task_save {"id":"flush","text":"\n# TASK flush: Re-emit last interim chunk as final on suspend\n\n⎈ Created: 2026-07-23 19:53\n⚙ Modified: 2026-07-23 20:17\n\n## CONTEXT\n\n- **WHAT**: The `a2t-deepgram` node tracks its *last emitted text chunk* and, upon *suspension*,\n re-emits it as a `final` chunk with an appended `…` truncation marker in case it was still an\n `intermediate` (non-final) one.\n\n- **WHY**: When the node is suspended mid-utterance, the Deepgram connection is torn down and no\n `final` result will ever arrive, so the dashboard keeps showing the last text as *non-final*\n forever. Re-emitting it as `final` with a trailing `…` lets the downstream `t2t-sentence` node\n treat it as a completed sentence and flush it immediately, so the last message ends up *final*\n everywhere downstream.\n\n## CHANGES\n\n- **Track last chunk**: In `speechflow-node-a2t-deepgram.ts` add private state\n `lastChunk: SpeechFlowChunk | null = null`, set in the Deepgram `Results` handler whenever a\n text chunk is written to `this.queue`, and reset to `null` in `open()`.\n\n- **Flush on suspend**: In `setSuspended()`, after `closeConnection()` in the suspend branch,\n if `this.lastChunk` is an `intermediate` chunk and `this.queue` exists, write a `clone()` with\n `kind = \"final\"` and the payload appended with a `…` ellipsis (truncation marker and sentence\n boundary for `t2t-sentence`, causing an immediate flush) into `this.queue`, and update\n `this.lastChunk` to that clone, preventing a double re-emission on repeated suspend/unsuspend\n cycles.\n\n- **ChangeLog entry**: Append a new entry to the existing `2.4.2 (2026-07-18)` section of\n `CHANGELOG.md`, aligned with its existing style:\n `- IMPROVEMENT: re-emit last intermediate chunk as final when suspending \"a2t-deepgram\" node`.\n\n## VERIFICATION\n\n- **Lint**: `npm start lint` in `speechflow-cli/` passes without new findings.\n\n- **Build**: `npm start build` in `speechflow-cli/` compiles the TypeScript sources cleanly.\n\n- **Runtime**: Run the `npm start test` pipeline, suspend the DeepGram node mid-utterance via the\n dashboard, and observe that the last non-final message is immediately repeated as a *final*\n one with a trailing `…`.\n"}
10797
+ ase: [2026-07-23 20:21:06.510]: [INFO]: mcp: GET /mcp
10798
+ ase: [2026-07-23 20:22:32.009]: [INFO]: mcp: POST /mcp [tools/call] ase_getopt {"name":"ase-task-implement","spec":"--help|-h --next|-n=(none|DONE|DELETE)... --int-reuse-task","args":"--int-reuse-task"}
10799
+ ase: [2026-07-23 20:26:08.426]: [INFO]: mcp: GET /mcp
10800
+ ase: [2026-07-23 20:31:10.346]: [INFO]: mcp: GET /mcp
10801
+ ase: [2026-07-23 20:36:12.316]: [INFO]: mcp: GET /mcp
10802
+ ase: [2026-07-23 20:41:14.254]: [INFO]: mcp: GET /mcp
10803
+ ase: [2026-07-23 20:41:23.339]: [INFO]: mcp: POST /mcp [tools/call] ase_artifact_list {"kind":["spec","arch","code","docs","infr","othr"]}
package/.ase/service.yaml CHANGED
@@ -1 +1 @@
1
- port: 43898
1
+ port: 43501
@@ -0,0 +1,44 @@
1
+
2
+ # TASK flush: Re-emit last interim chunk as final on suspend
3
+
4
+ ⎈ Created: 2026-07-23 19:53
5
+ ⚙ Modified: 2026-07-23 20:17
6
+
7
+ ## CONTEXT
8
+
9
+ - **WHAT**: The `a2t-deepgram` node tracks its *last emitted text chunk* and, upon *suspension*,
10
+ re-emits it as a `final` chunk with an appended `…` truncation marker in case it was still an
11
+ `intermediate` (non-final) one.
12
+
13
+ - **WHY**: When the node is suspended mid-utterance, the Deepgram connection is torn down and no
14
+ `final` result will ever arrive, so the dashboard keeps showing the last text as *non-final*
15
+ forever. Re-emitting it as `final` with a trailing `…` lets the downstream `t2t-sentence` node
16
+ treat it as a completed sentence and flush it immediately, so the last message ends up *final*
17
+ everywhere downstream.
18
+
19
+ ## CHANGES
20
+
21
+ - **Track last chunk**: In `speechflow-node-a2t-deepgram.ts` add private state
22
+ `lastChunk: SpeechFlowChunk | null = null`, set in the Deepgram `Results` handler whenever a
23
+ text chunk is written to `this.queue`, and reset to `null` in `open()`.
24
+
25
+ - **Flush on suspend**: In `setSuspended()`, after `closeConnection()` in the suspend branch,
26
+ if `this.lastChunk` is an `intermediate` chunk and `this.queue` exists, write a `clone()` with
27
+ `kind = "final"` and the payload appended with a `…` ellipsis (truncation marker and sentence
28
+ boundary for `t2t-sentence`, causing an immediate flush) into `this.queue`, and update
29
+ `this.lastChunk` to that clone, preventing a double re-emission on repeated suspend/unsuspend
30
+ cycles.
31
+
32
+ - **ChangeLog entry**: Append a new entry to the existing `2.4.2 (2026-07-18)` section of
33
+ `CHANGELOG.md`, aligned with its existing style:
34
+ `- IMPROVEMENT: re-emit last intermediate chunk as final when suspending "a2t-deepgram" node`.
35
+
36
+ ## VERIFICATION
37
+
38
+ - **Lint**: `npm start lint` in `speechflow-cli/` passes without new findings.
39
+
40
+ - **Build**: `npm start build` in `speechflow-cli/` compiles the TypeScript sources cleanly.
41
+
42
+ - **Runtime**: Run the `npm start test` pipeline, suspend the DeepGram node mid-utterance via the
43
+ dashboard, and observe that the last non-final message is immediately repeated as a *final*
44
+ one with a trailing `…`.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
  ChangeLog
3
3
  =========
4
4
 
5
+ 2.4.2 (2026-07-23)
6
+ ------------------
7
+
8
+ - IMPROVEMENT: re-emit last intermediate chunk as final when suspending "a2t-deepgram" node
9
+ - IMPROVEMENT: skip balance fetch in "a2t-deepgram" status if no admin API key is configured
10
+ - BUGFIX: in "a2t-deepgram", mark node as no longer suspended only once the connection was re-opened
11
+ - BUGFIX: discard half-established connection on open failure in "a2t-deepgram" node
12
+ - BUGFIX: correctly destroy internal queue and avoid stale callback state in "a2t-deepgram" node
13
+ - UPDATE: upgrade to Deepgram SDK v5
14
+ - UPDATE: upgrade to Google SDK v2.1
15
+ - UPDATE: upgrade to HuggingFace Transformer v4
16
+ - UPDATE: upgrade SoundTouch audio worklet in "a2a-pitch" node
17
+ - UPDATE: switch sample configuration "etc/speechflow.yaml" to the msg Filmstudio variant
18
+ - UPDATE: explicitly allow NPM dependency install scripts via "allowScripts"
19
+ - UPDATE: upgrade NPM dependencies and patches
20
+ - CLEANUP: cleanup "a2t-deepgram" node (redundancies, naming, connection close reuse)
21
+
5
22
  2.4.1 (2026-05-31)
6
23
  ------------------
7
24
 
package/README.md CHANGED
@@ -34,7 +34,7 @@ speech-to-speech).
34
34
  - local audio Speex, RNNoise, and GTCRN noise suppression,
35
35
  - local audio compressor and expander dynamics processing,
36
36
  - local audio gain adjustment,
37
- - local audio pitch shifting and time stretching,
37
+ - local audio pitch shifting,
38
38
  - local audio gap filler processing,
39
39
  - remote-controlable audio muting,
40
40
  - cloud-based speech-to-text conversion with
@@ -803,13 +803,15 @@ The following nodes process audio chunks only.
803
803
  | **db** | 0 | 0 | `n >= -60 && n <= 60` |
804
804
 
805
805
  - Node: **a2a-pitch**<br/>
806
- Purpose: **audio pitch shifting and time stretching**<br/>
806
+ Purpose: **audio pitch shifting**<br/>
807
807
  Example: `a2a-pitch(pitch: 1.2, semitones: 3)`
808
808
 
809
- > This node performs real-time pitch shifting and time stretching on
810
- > audio streams using the SoundTouch algorithm. It can adjust pitch
811
- > without changing tempo, change tempo without affecting pitch, or
812
- > modify both independently.
809
+ > This node performs real-time pitch shifting on audio streams using
810
+ > the SoundTouch algorithm. It adjusts the pitch while preserving the
811
+ > duration of the audio, i.e. the output always has the same length as
812
+ > the input. The effective pitch factor is `pitch * 2^(semitones/12) /
813
+ > rate`, so **pitch** and **semitones** combine, while **rate** merely
814
+ > compensates for an upstream playback rate change.
813
815
 
814
816
  | Port | Payload |
815
817
  | ------- | ----------- |
@@ -818,9 +820,8 @@ The following nodes process audio chunks only.
818
820
 
819
821
  | Parameter | Position | Default | Requirement |
820
822
  | -------------- | --------- | -------- | ------------------------ |
821
- | **rate** | *none* | 1.0 | `0.25 <= n <= 4.0` |
822
- | **tempo** | *none* | 1.0 | `0.25 <= n <= 4.0` |
823
- | **pitch** | *none* | 1.0 | `0.25 <= n <= 4.0` |
823
+ | **rate** | *none* | 1.0 | `0.1 <= n <= 8.0` |
824
+ | **pitch** | *none* | 1.0 | `0.1 <= n <= 8.0` |
824
825
  | **semitones** | *none* | 0.0 | `-24 <= n <= 24` |
825
826
 
826
827
  - Node: **a2a-filler**<br/>
@@ -103,7 +103,7 @@ studio-translation: |
103
103
  xio-file(path: `${env.SPEECHFLOW_DATADIR}/program-de.srt`, mode: "w", type: "text"),
104
104
  x2x-trace(type: "text", dashboard: "text-de-final", mode: "sink") /* DE-Final */
105
105
  },
106
- t2t-deepl(src: "de", dst: "en") | {
106
+ t2t-google(src: "de", dst: "en") | {
107
107
  x2x-trace(type: "text", dashboard: "text-en-interim", mode: "sink"),
108
108
  t2t-subtitle(mode: "render", addr: env.SPEECHFLOW_IPADDR, port: 8686),
109
109
  x2x-filter(name: "final", type: "text", var: "kind", op: "==", val: "final") | {