@tom2012/cc-web 2026.4.22-a → 2026.4.22-c

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 (132) hide show
  1. package/README.md +1 -1
  2. package/backend/dist/adapters/claude/usage.d.ts +29 -0
  3. package/backend/dist/adapters/claude/usage.d.ts.map +1 -0
  4. package/backend/dist/adapters/claude/usage.js +202 -0
  5. package/backend/dist/adapters/claude/usage.js.map +1 -0
  6. package/backend/dist/adapters/claude-adapter.d.ts +1 -0
  7. package/backend/dist/adapters/claude-adapter.d.ts.map +1 -1
  8. package/backend/dist/adapters/claude-adapter.js +7 -4
  9. package/backend/dist/adapters/claude-adapter.js.map +1 -1
  10. package/backend/dist/adapters/codex-adapter.d.ts +18 -1
  11. package/backend/dist/adapters/codex-adapter.d.ts.map +1 -1
  12. package/backend/dist/adapters/codex-adapter.js +163 -20
  13. package/backend/dist/adapters/codex-adapter.js.map +1 -1
  14. package/backend/dist/adapters/gemini-adapter.d.ts +1 -0
  15. package/backend/dist/adapters/gemini-adapter.d.ts.map +1 -1
  16. package/backend/dist/adapters/gemini-adapter.js +1 -0
  17. package/backend/dist/adapters/gemini-adapter.js.map +1 -1
  18. package/backend/dist/adapters/opencode-adapter.d.ts +1 -0
  19. package/backend/dist/adapters/opencode-adapter.d.ts.map +1 -1
  20. package/backend/dist/adapters/opencode-adapter.js +1 -0
  21. package/backend/dist/adapters/opencode-adapter.js.map +1 -1
  22. package/backend/dist/adapters/qwen-adapter.d.ts +1 -0
  23. package/backend/dist/adapters/qwen-adapter.d.ts.map +1 -1
  24. package/backend/dist/adapters/qwen-adapter.js +1 -0
  25. package/backend/dist/adapters/qwen-adapter.js.map +1 -1
  26. package/backend/dist/adapters/terminal-adapter.d.ts +1 -0
  27. package/backend/dist/adapters/terminal-adapter.d.ts.map +1 -1
  28. package/backend/dist/adapters/terminal-adapter.js +1 -0
  29. package/backend/dist/adapters/terminal-adapter.js.map +1 -1
  30. package/backend/dist/adapters/types.d.ts +10 -0
  31. package/backend/dist/adapters/types.d.ts.map +1 -1
  32. package/backend/dist/agent-prompts.d.ts +14 -10
  33. package/backend/dist/agent-prompts.d.ts.map +1 -1
  34. package/backend/dist/agent-prompts.js +51 -21
  35. package/backend/dist/agent-prompts.js.map +1 -1
  36. package/backend/dist/approval-manager.d.ts +10 -0
  37. package/backend/dist/approval-manager.d.ts.map +1 -1
  38. package/backend/dist/approval-manager.js +14 -2
  39. package/backend/dist/approval-manager.js.map +1 -1
  40. package/backend/dist/auth.d.ts.map +1 -1
  41. package/backend/dist/auth.js +15 -2
  42. package/backend/dist/auth.js.map +1 -1
  43. package/backend/dist/config.d.ts.map +1 -1
  44. package/backend/dist/config.js +3 -1
  45. package/backend/dist/config.js.map +1 -1
  46. package/backend/dist/hooks-manager.d.ts +9 -0
  47. package/backend/dist/hooks-manager.d.ts.map +1 -1
  48. package/backend/dist/hooks-manager.js +14 -3
  49. package/backend/dist/hooks-manager.js.map +1 -1
  50. package/backend/dist/index.d.ts.map +1 -1
  51. package/backend/dist/index.js +49 -13
  52. package/backend/dist/index.js.map +1 -1
  53. package/backend/dist/logger.d.ts +47 -0
  54. package/backend/dist/logger.d.ts.map +1 -0
  55. package/backend/dist/logger.js +355 -0
  56. package/backend/dist/logger.js.map +1 -0
  57. package/backend/dist/memory-prompts.d.ts +3 -2
  58. package/backend/dist/memory-prompts.d.ts.map +1 -1
  59. package/backend/dist/memory-prompts.js +10 -10
  60. package/backend/dist/memory-prompts.js.map +1 -1
  61. package/backend/dist/middleware/request-log.d.ts +3 -0
  62. package/backend/dist/middleware/request-log.d.ts.map +1 -0
  63. package/backend/dist/middleware/request-log.js +97 -0
  64. package/backend/dist/middleware/request-log.js.map +1 -0
  65. package/backend/dist/notify-service.d.ts.map +1 -1
  66. package/backend/dist/notify-service.js +3 -1
  67. package/backend/dist/notify-service.js.map +1 -1
  68. package/backend/dist/plugin-manager.d.ts.map +1 -1
  69. package/backend/dist/plugin-manager.js +8 -6
  70. package/backend/dist/plugin-manager.js.map +1 -1
  71. package/backend/dist/routes/agent-prompts.d.ts.map +1 -1
  72. package/backend/dist/routes/agent-prompts.js +28 -26
  73. package/backend/dist/routes/agent-prompts.js.map +1 -1
  74. package/backend/dist/routes/auth.d.ts.map +1 -1
  75. package/backend/dist/routes/auth.js +3 -1
  76. package/backend/dist/routes/auth.js.map +1 -1
  77. package/backend/dist/routes/hooks.d.ts.map +1 -1
  78. package/backend/dist/routes/hooks.js +19 -0
  79. package/backend/dist/routes/hooks.js.map +1 -1
  80. package/backend/dist/routes/memory-prompts.d.ts.map +1 -1
  81. package/backend/dist/routes/memory-prompts.js +13 -11
  82. package/backend/dist/routes/memory-prompts.js.map +1 -1
  83. package/backend/dist/routes/projects.d.ts.map +1 -1
  84. package/backend/dist/routes/projects.js +12 -3
  85. package/backend/dist/routes/projects.js.map +1 -1
  86. package/backend/dist/routes/skillhub.d.ts.map +1 -1
  87. package/backend/dist/routes/skillhub.js +4 -2
  88. package/backend/dist/routes/skillhub.js.map +1 -1
  89. package/backend/dist/routes/update.d.ts.map +1 -1
  90. package/backend/dist/routes/update.js +24 -6
  91. package/backend/dist/routes/update.js.map +1 -1
  92. package/backend/dist/session-manager.d.ts.map +1 -1
  93. package/backend/dist/session-manager.js +66 -16
  94. package/backend/dist/session-manager.js.map +1 -1
  95. package/backend/dist/sync-scheduler.d.ts.map +1 -1
  96. package/backend/dist/sync-scheduler.js +41 -2
  97. package/backend/dist/sync-scheduler.js.map +1 -1
  98. package/backend/dist/sync-service.d.ts +3 -1
  99. package/backend/dist/sync-service.d.ts.map +1 -1
  100. package/backend/dist/sync-service.js +18 -6
  101. package/backend/dist/sync-service.js.map +1 -1
  102. package/backend/dist/terminal-manager.d.ts +4 -1
  103. package/backend/dist/terminal-manager.d.ts.map +1 -1
  104. package/backend/dist/terminal-manager.js +31 -8
  105. package/backend/dist/terminal-manager.js.map +1 -1
  106. package/backend/dist/usage-terminal.d.ts.map +1 -1
  107. package/backend/dist/usage-terminal.js +5 -3
  108. package/backend/dist/usage-terminal.js.map +1 -1
  109. package/backend/package-lock.json +153 -0
  110. package/backend/package.json +2 -0
  111. package/bin/ccweb.js +3 -1
  112. package/frontend/dist/assets/AssistantMessageContent-D9UiFFE2.js +13 -0
  113. package/frontend/dist/assets/{GraphPreview-oSG5zw4O.js → GraphPreview-MfS2qFbu.js} +1 -1
  114. package/frontend/dist/assets/{MobilePage-DNkQnE7-.js → MobilePage-C32pb6m8.js} +3 -3
  115. package/frontend/dist/assets/{OfficePreview-C5YVCs_i.js → OfficePreview-BTOmTUcw.js} +2 -2
  116. package/frontend/dist/assets/ProjectPage-Dhxpa8db.js +26 -0
  117. package/frontend/dist/assets/{SettingsPage-BBVvLPDr.js → SettingsPage-ChzjDTNX.js} +2 -2
  118. package/frontend/dist/assets/{SkillHubPage-fxW189Ca.js → SkillHubPage-DKtZOrUk.js} +3 -3
  119. package/frontend/dist/assets/{chevron-down-DwQtRZFp.js → chevron-down-CDoIuDnn.js} +1 -1
  120. package/frontend/dist/assets/{chevron-up-B43U8MiF.js → chevron-up-jGWs6GMh.js} +1 -1
  121. package/frontend/dist/assets/index-CPwZI53Z.js +75 -0
  122. package/frontend/dist/assets/{index-DHlRaHat.js → index-D7HRanYr.js} +1 -1
  123. package/frontend/dist/assets/{index-CqX-dw66.js → index-DqgIuQ6k.js} +1 -1
  124. package/frontend/dist/assets/index-t3Zp9UzI.css +1 -0
  125. package/frontend/dist/assets/{jszip.min-COVqv5KF.js → jszip.min-BRHGpQBe.js} +1 -1
  126. package/frontend/dist/assets/{search-Bg2yBV9K.js → search-DM1GyKez.js} +1 -1
  127. package/frontend/dist/index.html +2 -2
  128. package/package.json +1 -1
  129. package/frontend/dist/assets/AssistantMessageContent-Cbd8kEKb.js +0 -13
  130. package/frontend/dist/assets/ProjectPage-BI-45S2D.js +0 -26
  131. package/frontend/dist/assets/index-CjKxGpPA.css +0 -1
  132. package/frontend/dist/assets/index-CjiPKISh.js +0 -75
@@ -23,6 +23,8 @@
23
23
  "minimatch": "^10.2.4",
24
24
  "multer": "^2.1.1",
25
25
  "node-pty": "^1.0.0",
26
+ "pino": "^10.3.1",
27
+ "pino-roll": "^4.0.0",
26
28
  "simple-git": "^3.33.0",
27
29
  "uuid": "^9.0.1",
28
30
  "ws": "^8.16.0"
@@ -190,6 +192,12 @@
190
192
  }
191
193
  }
192
194
  },
195
+ "node_modules/@pinojs/redact": {
196
+ "version": "0.4.0",
197
+ "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
198
+ "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==",
199
+ "license": "MIT"
200
+ },
193
201
  "node_modules/@tsconfig/node10": {
194
202
  "version": "1.0.12",
195
203
  "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz",
@@ -548,6 +556,15 @@
548
556
  "license": "MIT",
549
557
  "peer": true
550
558
  },
559
+ "node_modules/atomic-sleep": {
560
+ "version": "1.0.0",
561
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
562
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
563
+ "license": "MIT",
564
+ "engines": {
565
+ "node": ">=8.0.0"
566
+ }
567
+ },
551
568
  "node_modules/balanced-match": {
552
569
  "version": "4.0.4",
553
570
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
@@ -844,6 +861,16 @@
844
861
  "node": ">= 12"
845
862
  }
846
863
  },
864
+ "node_modules/date-fns": {
865
+ "version": "4.1.0",
866
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
867
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
868
+ "license": "MIT",
869
+ "funding": {
870
+ "type": "github",
871
+ "url": "https://github.com/sponsors/kossnocorp"
872
+ }
873
+ },
847
874
  "node_modules/debug": {
848
875
  "version": "2.6.9",
849
876
  "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -1960,6 +1987,15 @@
1960
1987
  "url": "https://github.com/sponsors/ljharb"
1961
1988
  }
1962
1989
  },
1990
+ "node_modules/on-exit-leak-free": {
1991
+ "version": "2.1.2",
1992
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
1993
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
1994
+ "license": "MIT",
1995
+ "engines": {
1996
+ "node": ">=14.0.0"
1997
+ }
1998
+ },
1963
1999
  "node_modules/on-finished": {
1964
2000
  "version": "2.4.1",
1965
2001
  "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -2027,6 +2063,69 @@
2027
2063
  "url": "https://github.com/sponsors/jonschlinkert"
2028
2064
  }
2029
2065
  },
2066
+ "node_modules/pino": {
2067
+ "version": "10.3.1",
2068
+ "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
2069
+ "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
2070
+ "license": "MIT",
2071
+ "dependencies": {
2072
+ "@pinojs/redact": "^0.4.0",
2073
+ "atomic-sleep": "^1.0.0",
2074
+ "on-exit-leak-free": "^2.1.0",
2075
+ "pino-abstract-transport": "^3.0.0",
2076
+ "pino-std-serializers": "^7.0.0",
2077
+ "process-warning": "^5.0.0",
2078
+ "quick-format-unescaped": "^4.0.3",
2079
+ "real-require": "^0.2.0",
2080
+ "safe-stable-stringify": "^2.3.1",
2081
+ "sonic-boom": "^4.0.1",
2082
+ "thread-stream": "^4.0.0"
2083
+ },
2084
+ "bin": {
2085
+ "pino": "bin.js"
2086
+ }
2087
+ },
2088
+ "node_modules/pino-abstract-transport": {
2089
+ "version": "3.0.0",
2090
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
2091
+ "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
2092
+ "license": "MIT",
2093
+ "dependencies": {
2094
+ "split2": "^4.0.0"
2095
+ }
2096
+ },
2097
+ "node_modules/pino-roll": {
2098
+ "version": "4.0.0",
2099
+ "resolved": "https://registry.npmjs.org/pino-roll/-/pino-roll-4.0.0.tgz",
2100
+ "integrity": "sha512-axI1aQaIxXdw1F4OFFli1EDxIrdYNGLowkw/ZoZogX8oCSLHUghzwVVXUS8U+xD/Savwa5IXpiXmsSGKFX/7Sg==",
2101
+ "license": "MIT",
2102
+ "dependencies": {
2103
+ "date-fns": "^4.1.0",
2104
+ "sonic-boom": "^4.0.1"
2105
+ }
2106
+ },
2107
+ "node_modules/pino-std-serializers": {
2108
+ "version": "7.1.0",
2109
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
2110
+ "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==",
2111
+ "license": "MIT"
2112
+ },
2113
+ "node_modules/process-warning": {
2114
+ "version": "5.0.0",
2115
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
2116
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==",
2117
+ "funding": [
2118
+ {
2119
+ "type": "github",
2120
+ "url": "https://github.com/sponsors/fastify"
2121
+ },
2122
+ {
2123
+ "type": "opencollective",
2124
+ "url": "https://opencollective.com/fastify"
2125
+ }
2126
+ ],
2127
+ "license": "MIT"
2128
+ },
2030
2129
  "node_modules/proxy-addr": {
2031
2130
  "version": "2.0.7",
2032
2131
  "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -2055,6 +2154,12 @@
2055
2154
  "url": "https://github.com/sponsors/ljharb"
2056
2155
  }
2057
2156
  },
2157
+ "node_modules/quick-format-unescaped": {
2158
+ "version": "4.0.4",
2159
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
2160
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
2161
+ "license": "MIT"
2162
+ },
2058
2163
  "node_modules/range-parser": {
2059
2164
  "version": "1.2.1",
2060
2165
  "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -2106,6 +2211,15 @@
2106
2211
  "node": ">=8.10.0"
2107
2212
  }
2108
2213
  },
2214
+ "node_modules/real-require": {
2215
+ "version": "0.2.0",
2216
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
2217
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
2218
+ "license": "MIT",
2219
+ "engines": {
2220
+ "node": ">= 12.13.0"
2221
+ }
2222
+ },
2109
2223
  "node_modules/resolve": {
2110
2224
  "version": "1.22.11",
2111
2225
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
@@ -2161,6 +2275,15 @@
2161
2275
  ],
2162
2276
  "license": "MIT"
2163
2277
  },
2278
+ "node_modules/safe-stable-stringify": {
2279
+ "version": "2.5.0",
2280
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
2281
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
2282
+ "license": "MIT",
2283
+ "engines": {
2284
+ "node": ">=10"
2285
+ }
2286
+ },
2164
2287
  "node_modules/safer-buffer": {
2165
2288
  "version": "2.1.2",
2166
2289
  "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -2340,6 +2463,15 @@
2340
2463
  "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
2341
2464
  "license": "MIT"
2342
2465
  },
2466
+ "node_modules/sonic-boom": {
2467
+ "version": "4.2.1",
2468
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
2469
+ "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
2470
+ "license": "MIT",
2471
+ "dependencies": {
2472
+ "atomic-sleep": "^1.0.0"
2473
+ }
2474
+ },
2343
2475
  "node_modules/source-map": {
2344
2476
  "version": "0.6.1",
2345
2477
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -2361,6 +2493,15 @@
2361
2493
  "source-map": "^0.6.0"
2362
2494
  }
2363
2495
  },
2496
+ "node_modules/split2": {
2497
+ "version": "4.2.0",
2498
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
2499
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
2500
+ "license": "ISC",
2501
+ "engines": {
2502
+ "node": ">= 10.x"
2503
+ }
2504
+ },
2364
2505
  "node_modules/statuses": {
2365
2506
  "version": "2.0.2",
2366
2507
  "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
@@ -2420,6 +2561,18 @@
2420
2561
  "url": "https://github.com/sponsors/ljharb"
2421
2562
  }
2422
2563
  },
2564
+ "node_modules/thread-stream": {
2565
+ "version": "4.0.0",
2566
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz",
2567
+ "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==",
2568
+ "license": "MIT",
2569
+ "dependencies": {
2570
+ "real-require": "^0.2.0"
2571
+ },
2572
+ "engines": {
2573
+ "node": ">=20"
2574
+ }
2575
+ },
2423
2576
  "node_modules/to-regex-range": {
2424
2577
  "version": "5.0.1",
2425
2578
  "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -22,6 +22,8 @@
22
22
  "minimatch": "^10.2.4",
23
23
  "multer": "^2.1.1",
24
24
  "node-pty": "^1.0.0",
25
+ "pino": "^10.3.1",
26
+ "pino-roll": "^4.0.0",
25
27
  "simple-git": "^3.33.0",
26
28
  "uuid": "^9.0.1",
27
29
  "ws": "^8.16.0"
package/bin/ccweb.js CHANGED
@@ -649,7 +649,9 @@ const accessModeFlag = args.includes('--local') ? 'local'
649
649
  if (process.platform === 'win32') {
650
650
  execSync(`Get-Content -Wait "${LOG_FILE}"`, { shell: 'powershell', stdio: 'inherit' });
651
651
  } else {
652
- execFileSync('tail', ['-f', LOG_FILE], { stdio: 'inherit' });
652
+ // -F (not -f) so tail follows rename/rotation — structured logs
653
+ // live in ~/.ccweb/logs/ccweb-<date>.log which rotates daily.
654
+ execFileSync('tail', ['-F', LOG_FILE], { stdio: 'inherit' });
653
655
  }
654
656
  } catch {}
655
657
  break;