@phenx-inc/ctlsurf 0.7.0 → 0.9.0
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.
- package/out/headless/index.mjs +169 -10
- package/out/headless/index.mjs.map +2 -2
- package/out/main/index.js +175 -9
- package/out/preload/index.js +10 -0
- package/out/renderer/assets/{cssMode-eTXVdAkZ.js → cssMode-BdYp0fp9.js} +3 -3
- package/out/renderer/assets/{freemarker2-B5BKaiK4.js → freemarker2-Cya-9zr-.js} +1 -1
- package/out/renderer/assets/{handlebars-BIdLd2wU.js → handlebars-EJs9W5Ub.js} +1 -1
- package/out/renderer/assets/{html-BXL4cnLS.js → html-Ex4qy2lh.js} +1 -1
- package/out/renderer/assets/{htmlMode-46N3XG2c.js → htmlMode-CCm0aJ6C.js} +3 -3
- package/out/renderer/assets/{index-dRvutfbl.js → index-Cj7K9-Ba.js} +823 -137
- package/out/renderer/assets/{index-Cf-RsxoC.css → index-nvsNYP5c.css} +229 -0
- package/out/renderer/assets/{javascript-n_iZZzDX.js → javascript-B2niCouI.js} +2 -2
- package/out/renderer/assets/{jsonMode-DXDczSNu.js → jsonMode-BgCUHaFo.js} +3 -3
- package/out/renderer/assets/{liquid-B1QweUh7.js → liquid-DOQmSo4G.js} +1 -1
- package/out/renderer/assets/{lspLanguageFeatures-DqzMqkRk.js → lspLanguageFeatures-8SIcRAMh.js} +1 -1
- package/out/renderer/assets/{mdx-BCv8lm5e.js → mdx-DuKdGNKE.js} +1 -1
- package/out/renderer/assets/{python-BLNzYwDv.js → python-BUa4XFG-.js} +1 -1
- package/out/renderer/assets/{razor-CvAww8bG.js → razor-BUw8jho0.js} +1 -1
- package/out/renderer/assets/{transformers.web-DtSCnG36.js → transformers.web-_PuZoIho.js} +824 -19
- package/out/renderer/assets/{tsMode-C7m6Kr5E.js → tsMode-8FLRnobw.js} +1 -1
- package/out/renderer/assets/{typescript-DhPw4VVg.js → typescript-rdwAjCi4.js} +1 -1
- package/out/renderer/assets/{xml-B0WLFJ2U.js → xml-HOzT59Qg.js} +1 -1
- package/out/renderer/assets/{yaml-BWyn9Wd7.js → yaml-B81JfLsW.js} +1 -1
- package/out/renderer/index.html +64 -2
- package/out/repro-toggle.mjs +305 -0
- package/package.json +1 -1
- package/src/main/index.ts +9 -0
- package/src/main/orchestrator.ts +51 -10
- package/src/main/transcripts.ts +134 -0
- package/src/preload/index.ts +14 -0
- package/src/renderer/App.tsx +30 -11
- package/src/renderer/components/FloatingMic.tsx +48 -0
- package/src/renderer/components/SpeakControls.tsx +235 -0
- package/src/renderer/components/VoiceInput.tsx +183 -140
- package/src/renderer/index.html +62 -0
- package/src/renderer/lib/localWhisper.ts +94 -6
- package/src/renderer/lib/speech.ts +317 -0
- package/src/renderer/styles.css +229 -0
|
@@ -8087,6 +8087,40 @@ html, body, #root {
|
|
|
8087
8087
|
}
|
|
8088
8088
|
.floating-mic-hide:hover { color: #f7768e; }
|
|
8089
8089
|
|
|
8090
|
+
/* Smaller sibling of the round mic: read the last agent reply aloud. */
|
|
8091
|
+
.floating-mic-read {
|
|
8092
|
+
width: 30px;
|
|
8093
|
+
height: 30px;
|
|
8094
|
+
border-radius: 50%;
|
|
8095
|
+
display: inline-flex;
|
|
8096
|
+
align-items: center;
|
|
8097
|
+
justify-content: center;
|
|
8098
|
+
background: #2a2b3d;
|
|
8099
|
+
border: 1px solid #3b3d57;
|
|
8100
|
+
color: #a9b1d6;
|
|
8101
|
+
cursor: pointer;
|
|
8102
|
+
transition: all 0.15s;
|
|
8103
|
+
}
|
|
8104
|
+
.floating-mic-read:hover { border-color: #565f89; color: #c0caf5; }
|
|
8105
|
+
.floating-mic-read.speaking {
|
|
8106
|
+
color: #7aa2f7;
|
|
8107
|
+
border-color: #7aa2f7;
|
|
8108
|
+
}
|
|
8109
|
+
.floating-mic-note {
|
|
8110
|
+
position: absolute;
|
|
8111
|
+
bottom: -22px;
|
|
8112
|
+
left: 50%;
|
|
8113
|
+
transform: translateX(-50%);
|
|
8114
|
+
white-space: nowrap;
|
|
8115
|
+
font-size: 11px;
|
|
8116
|
+
color: #565f89;
|
|
8117
|
+
background: #16161e;
|
|
8118
|
+
border: 1px solid #3b3d57;
|
|
8119
|
+
border-radius: 6px;
|
|
8120
|
+
padding: 2px 6px;
|
|
8121
|
+
pointer-events: none;
|
|
8122
|
+
}
|
|
8123
|
+
|
|
8090
8124
|
.voice-btn-floating {
|
|
8091
8125
|
width: 48px;
|
|
8092
8126
|
height: 48px;
|
|
@@ -8119,6 +8153,201 @@ html, body, #root {
|
|
|
8119
8153
|
margin-bottom: 8px;
|
|
8120
8154
|
}
|
|
8121
8155
|
|
|
8156
|
+
/* Mic source picker (small caret badge on the round mic + dropdown) */
|
|
8157
|
+
.voice-source-btn {
|
|
8158
|
+
position: absolute;
|
|
8159
|
+
bottom: -3px;
|
|
8160
|
+
right: -3px;
|
|
8161
|
+
width: 18px;
|
|
8162
|
+
height: 18px;
|
|
8163
|
+
border-radius: 50%;
|
|
8164
|
+
display: inline-flex;
|
|
8165
|
+
align-items: center;
|
|
8166
|
+
justify-content: center;
|
|
8167
|
+
padding: 0;
|
|
8168
|
+
font-size: 10px;
|
|
8169
|
+
line-height: 1;
|
|
8170
|
+
background: #2a2b3d;
|
|
8171
|
+
border: 1px solid #3b3d57;
|
|
8172
|
+
color: #a9b1d6;
|
|
8173
|
+
cursor: pointer;
|
|
8174
|
+
z-index: 60;
|
|
8175
|
+
}
|
|
8176
|
+
.voice-source-btn:hover {
|
|
8177
|
+
border-color: #7aa2f7;
|
|
8178
|
+
color: #c0caf5;
|
|
8179
|
+
}
|
|
8180
|
+
.voice-source-menu {
|
|
8181
|
+
position: absolute;
|
|
8182
|
+
bottom: 100%;
|
|
8183
|
+
right: 0;
|
|
8184
|
+
margin-bottom: 10px;
|
|
8185
|
+
min-width: 200px;
|
|
8186
|
+
max-width: 280px;
|
|
8187
|
+
padding: 4px;
|
|
8188
|
+
background: #16161e;
|
|
8189
|
+
border: 1px solid #3b3d57;
|
|
8190
|
+
border-radius: 8px;
|
|
8191
|
+
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.5);
|
|
8192
|
+
z-index: 300;
|
|
8193
|
+
}
|
|
8194
|
+
.voice-source-head {
|
|
8195
|
+
font-size: 10px;
|
|
8196
|
+
text-transform: uppercase;
|
|
8197
|
+
letter-spacing: 0.04em;
|
|
8198
|
+
color: #565f89;
|
|
8199
|
+
padding: 4px 8px 6px;
|
|
8200
|
+
}
|
|
8201
|
+
.voice-source-item {
|
|
8202
|
+
display: flex;
|
|
8203
|
+
align-items: center;
|
|
8204
|
+
gap: 6px;
|
|
8205
|
+
width: 100%;
|
|
8206
|
+
padding: 5px 8px;
|
|
8207
|
+
border: none;
|
|
8208
|
+
border-radius: 5px;
|
|
8209
|
+
background: transparent;
|
|
8210
|
+
color: #a9b1d6;
|
|
8211
|
+
font-size: 12px;
|
|
8212
|
+
text-align: left;
|
|
8213
|
+
cursor: pointer;
|
|
8214
|
+
}
|
|
8215
|
+
.voice-source-item:hover { background: #1f2335; }
|
|
8216
|
+
.voice-source-item.active { color: #7aa2f7; }
|
|
8217
|
+
.voice-source-check {
|
|
8218
|
+
flex: 0 0 12px;
|
|
8219
|
+
width: 12px;
|
|
8220
|
+
color: #7aa2f7;
|
|
8221
|
+
font-size: 11px;
|
|
8222
|
+
}
|
|
8223
|
+
.voice-source-label {
|
|
8224
|
+
overflow: hidden;
|
|
8225
|
+
text-overflow: ellipsis;
|
|
8226
|
+
white-space: nowrap;
|
|
8227
|
+
}
|
|
8228
|
+
.voice-source-empty {
|
|
8229
|
+
padding: 6px 8px;
|
|
8230
|
+
font-size: 11px;
|
|
8231
|
+
color: #565f89;
|
|
8232
|
+
}
|
|
8233
|
+
|
|
8234
|
+
/* Spoken-replies titlebar control */
|
|
8235
|
+
.speak-controls {
|
|
8236
|
+
position: relative;
|
|
8237
|
+
display: inline-flex;
|
|
8238
|
+
align-items: center;
|
|
8239
|
+
}
|
|
8240
|
+
.speak-btn.active {
|
|
8241
|
+
color: #7aa2f7;
|
|
8242
|
+
border-color: #7aa2f7;
|
|
8243
|
+
}
|
|
8244
|
+
.speak-pct {
|
|
8245
|
+
font-size: 9px;
|
|
8246
|
+
margin-left: 3px;
|
|
8247
|
+
color: #e0af68;
|
|
8248
|
+
}
|
|
8249
|
+
.speak-caret {
|
|
8250
|
+
padding: 0 3px;
|
|
8251
|
+
font-size: 10px;
|
|
8252
|
+
min-width: 0;
|
|
8253
|
+
}
|
|
8254
|
+
.speak-stop {
|
|
8255
|
+
color: #f7768e;
|
|
8256
|
+
border-color: #f7768e;
|
|
8257
|
+
}
|
|
8258
|
+
.speak-stop:hover { background: #2d2030; }
|
|
8259
|
+
.speak-error {
|
|
8260
|
+
position: absolute;
|
|
8261
|
+
top: 100%;
|
|
8262
|
+
right: 0;
|
|
8263
|
+
margin-top: 6px;
|
|
8264
|
+
max-width: 340px;
|
|
8265
|
+
padding: 4px 9px;
|
|
8266
|
+
border-radius: 5px;
|
|
8267
|
+
font-size: 11px;
|
|
8268
|
+
line-height: 1.3;
|
|
8269
|
+
white-space: normal;
|
|
8270
|
+
word-break: break-word;
|
|
8271
|
+
background: #2d2030;
|
|
8272
|
+
color: #f7768e;
|
|
8273
|
+
border: 1px solid #f7768e;
|
|
8274
|
+
z-index: 60;
|
|
8275
|
+
}
|
|
8276
|
+
.speak-menu {
|
|
8277
|
+
position: absolute;
|
|
8278
|
+
top: 100%;
|
|
8279
|
+
right: 0;
|
|
8280
|
+
margin-top: 6px;
|
|
8281
|
+
min-width: 220px;
|
|
8282
|
+
max-width: 280px;
|
|
8283
|
+
padding: 6px;
|
|
8284
|
+
background: #16161e;
|
|
8285
|
+
border: 1px solid #3b3d57;
|
|
8286
|
+
border-radius: 8px;
|
|
8287
|
+
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.5);
|
|
8288
|
+
z-index: 300;
|
|
8289
|
+
}
|
|
8290
|
+
.speak-menu-head {
|
|
8291
|
+
font-size: 10px;
|
|
8292
|
+
text-transform: uppercase;
|
|
8293
|
+
letter-spacing: 0.04em;
|
|
8294
|
+
color: #565f89;
|
|
8295
|
+
padding: 6px 6px 4px;
|
|
8296
|
+
}
|
|
8297
|
+
.speak-menu-item {
|
|
8298
|
+
display: flex;
|
|
8299
|
+
align-items: center;
|
|
8300
|
+
gap: 6px;
|
|
8301
|
+
width: 100%;
|
|
8302
|
+
padding: 5px 6px;
|
|
8303
|
+
border: none;
|
|
8304
|
+
border-radius: 5px;
|
|
8305
|
+
background: transparent;
|
|
8306
|
+
color: #a9b1d6;
|
|
8307
|
+
font-size: 12px;
|
|
8308
|
+
text-align: left;
|
|
8309
|
+
cursor: pointer;
|
|
8310
|
+
}
|
|
8311
|
+
.speak-menu-item:hover { background: #1f2335; }
|
|
8312
|
+
.speak-menu-item.active { color: #7aa2f7; }
|
|
8313
|
+
.speak-menu-check {
|
|
8314
|
+
flex: 0 0 12px;
|
|
8315
|
+
width: 12px;
|
|
8316
|
+
color: #7aa2f7;
|
|
8317
|
+
font-size: 11px;
|
|
8318
|
+
}
|
|
8319
|
+
.speak-select {
|
|
8320
|
+
width: 100%;
|
|
8321
|
+
margin: 2px 0 4px;
|
|
8322
|
+
padding: 4px 6px;
|
|
8323
|
+
background: #1f2335;
|
|
8324
|
+
color: #a9b1d6;
|
|
8325
|
+
border: 1px solid #3b3d57;
|
|
8326
|
+
border-radius: 5px;
|
|
8327
|
+
font-size: 12px;
|
|
8328
|
+
}
|
|
8329
|
+
.speak-rate {
|
|
8330
|
+
width: 100%;
|
|
8331
|
+
margin: 2px 0 6px;
|
|
8332
|
+
accent-color: #7aa2f7;
|
|
8333
|
+
}
|
|
8334
|
+
.speak-menu-row {
|
|
8335
|
+
display: flex;
|
|
8336
|
+
gap: 6px;
|
|
8337
|
+
padding: 2px 0 0;
|
|
8338
|
+
}
|
|
8339
|
+
.speak-menu-btn {
|
|
8340
|
+
flex: 1;
|
|
8341
|
+
padding: 5px 6px;
|
|
8342
|
+
background: #2a2b3d;
|
|
8343
|
+
color: #a9b1d6;
|
|
8344
|
+
border: 1px solid #3b3d57;
|
|
8345
|
+
border-radius: 5px;
|
|
8346
|
+
font-size: 12px;
|
|
8347
|
+
cursor: pointer;
|
|
8348
|
+
}
|
|
8349
|
+
.speak-menu-btn:hover { border-color: #7aa2f7; color: #c0caf5; }
|
|
8350
|
+
|
|
8122
8351
|
/* Editor panel */
|
|
8123
8352
|
.editor-panel {
|
|
8124
8353
|
display: flex;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { conf as conf$1, language as language$1 } from "./typescript-
|
|
2
|
-
import "./index-
|
|
1
|
+
import { conf as conf$1, language as language$1 } from "./typescript-rdwAjCi4.js";
|
|
2
|
+
import "./index-Cj7K9-Ba.js";
|
|
3
3
|
const conf = conf$1;
|
|
4
4
|
const language = {
|
|
5
5
|
// Set defaultToken to invalid to see what you do not tokenize yet
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as createWebWorker, l as languages, e as editor } from "./index-
|
|
2
|
-
import { f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter, H as HoverAdapter, b as DocumentSymbolAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, S as SelectionRangeAdapter, e as DiagnosticsAdapter } from "./lspLanguageFeatures-
|
|
3
|
-
import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-
|
|
1
|
+
import { c as createWebWorker, l as languages, e as editor } from "./index-Cj7K9-Ba.js";
|
|
2
|
+
import { f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter, H as HoverAdapter, b as DocumentSymbolAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, S as SelectionRangeAdapter, e as DiagnosticsAdapter } from "./lspLanguageFeatures-8SIcRAMh.js";
|
|
3
|
+
import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-8SIcRAMh.js";
|
|
4
4
|
const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
|
|
5
5
|
class WorkerManager {
|
|
6
6
|
constructor(defaults) {
|
package/out/renderer/assets/{lspLanguageFeatures-DqzMqkRk.js → lspLanguageFeatures-8SIcRAMh.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-
|
|
1
|
+
import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-Cj7K9-Ba.js";
|
|
2
2
|
var DocumentUri;
|
|
3
3
|
(function(DocumentUri2) {
|
|
4
4
|
function is(value) {
|