@phenx-inc/ctlsurf 0.6.0 → 0.8.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 +26 -10
- package/out/headless/index.mjs.map +2 -2
- package/out/main/index.js +31 -9
- package/out/preload/index.js +8 -0
- package/out/renderer/assets/{cssMode-DbMmcl1h.js → cssMode-BQN8v2ok.js} +3 -3
- package/out/renderer/assets/{freemarker2-CvaHiy92.js → freemarker2-DbxGYYVp.js} +1 -1
- package/out/renderer/assets/{handlebars-D58lUIOu.js → handlebars-3auU1CAd.js} +1 -1
- package/out/renderer/assets/{html-D1h1aJbM.js → html-D8xFiRmI.js} +1 -1
- package/out/renderer/assets/{htmlMode-BdkAp9qr.js → htmlMode-M3MApZ4n.js} +3 -3
- package/out/renderer/assets/{index-B60JU1yI.js → index---H6cxNl.js} +854 -38
- package/out/renderer/assets/{index-DJFYmHjz.css → index-B-iM7dFC.css} +269 -0
- package/out/renderer/assets/{javascript-CXqZcnvb.js → javascript-BO_ViZM5.js} +2 -2
- package/out/renderer/assets/{jsonMode-BuVr-eSl.js → jsonMode-CKp2zvZu.js} +3 -3
- package/out/renderer/assets/{liquid-LKu0Wd0B.js → liquid-C1eHcrht.js} +1 -1
- package/out/renderer/assets/{lspLanguageFeatures-Cjr_4HGs.js → lspLanguageFeatures-CHWJx_Tl.js} +1 -1
- package/out/renderer/assets/{mdx-Bl84ILla.js → mdx-Qqdtk7fL.js} +1 -1
- package/out/renderer/assets/{python-0sFd9G1k.js → python-DKu7rNbs.js} +1 -1
- package/out/renderer/assets/{razor-Cqcu1rLJ.js → razor-BOMpCo6z.js} +1 -1
- package/out/renderer/assets/{tsMode-CYd3NUkW.js → tsMode-yAjlPR-D.js} +1 -1
- package/out/renderer/assets/{typescript-rkc9lhpi.js → typescript-BiJRCUcL.js} +1 -1
- package/out/renderer/assets/{xml-EsHEUps1.js → xml-D4PvYeQq.js} +1 -1
- package/out/renderer/assets/{yaml-B9-nQ_s2.js → yaml-BeHVkmnS.js} +1 -1
- package/out/renderer/index.html +2 -2
- package/package.json +1 -1
- package/src/main/index.ts +7 -0
- package/src/main/orchestrator.ts +38 -9
- package/src/preload/index.ts +11 -0
- package/src/renderer/App.tsx +39 -6
- package/src/renderer/components/FloatingMic.tsx +128 -0
- package/src/renderer/components/SpeakControls.tsx +235 -0
- package/src/renderer/components/VoiceInput.tsx +170 -6
- package/src/renderer/lib/localWhisper.ts +48 -4
- package/src/renderer/lib/speech.ts +299 -0
- package/src/renderer/styles.css +269 -0
package/out/main/index.js
CHANGED
|
@@ -11008,31 +11008,47 @@ class Orchestrator {
|
|
|
11008
11008
|
get logChatEnabled() {
|
|
11009
11009
|
return !!this.settings.logChat;
|
|
11010
11010
|
}
|
|
11011
|
+
get speakRepliesEnabled() {
|
|
11012
|
+
return !!this.settings.speakReplies;
|
|
11013
|
+
}
|
|
11011
11014
|
setLogChat(enabled) {
|
|
11012
11015
|
this.settings.logChat = enabled;
|
|
11013
11016
|
this.saveSettings();
|
|
11014
11017
|
this.bridge.setLoggingEnabled(enabled);
|
|
11015
|
-
|
|
11016
|
-
|
|
11017
|
-
|
|
11018
|
-
|
|
11019
|
-
|
|
11020
|
-
|
|
11018
|
+
this.restartActiveChatLogging();
|
|
11019
|
+
}
|
|
11020
|
+
setSpeakReplies(enabled) {
|
|
11021
|
+
this.settings.speakReplies = enabled;
|
|
11022
|
+
this.saveSettings();
|
|
11023
|
+
this.restartActiveChatLogging();
|
|
11024
|
+
}
|
|
11025
|
+
// Re-evaluate the transcript tailer for the active tab against the current
|
|
11026
|
+
// logChat / speakReplies flags. Both setters funnel through here.
|
|
11027
|
+
restartActiveChatLogging() {
|
|
11028
|
+
this.stopChatLogging();
|
|
11029
|
+
if (!this.activeTabId) return;
|
|
11030
|
+
const tab = this.tabs.get(this.activeTabId);
|
|
11031
|
+
if (tab) this.startChatLogging(tab.agent, tab.cwd);
|
|
11021
11032
|
}
|
|
11022
11033
|
// Agents with native session transcripts (Claude Code, Codex) get exact
|
|
11023
11034
|
// chat text tailed from their JSONL logs; everything else falls back to
|
|
11024
11035
|
// the terminal screen-scraper bridge.
|
|
11025
11036
|
startChatLogging(agent, cwd) {
|
|
11026
11037
|
this.stopChatLogging();
|
|
11027
|
-
if (!this.settings.logChat) return;
|
|
11038
|
+
if (!this.settings.logChat && !this.settings.speakReplies) return;
|
|
11028
11039
|
if (supportsTranscriptLogging(agent.id)) {
|
|
11029
11040
|
this.transcriptTailer = new TranscriptTailer({
|
|
11030
11041
|
agentId: agent.id,
|
|
11031
11042
|
cwd,
|
|
11032
|
-
sink: (entry) =>
|
|
11043
|
+
sink: (entry) => {
|
|
11044
|
+
if (this.settings.logChat) this.workerWs.sendChatLog(entry);
|
|
11045
|
+
if (this.settings.speakReplies && entry.type === "terminal_output") {
|
|
11046
|
+
this.events.onAgentMessage?.(entry.content);
|
|
11047
|
+
}
|
|
11048
|
+
}
|
|
11033
11049
|
});
|
|
11034
11050
|
this.transcriptTailer.start();
|
|
11035
|
-
} else {
|
|
11051
|
+
} else if (this.settings.logChat) {
|
|
11036
11052
|
this.bridge.startSession();
|
|
11037
11053
|
}
|
|
11038
11054
|
}
|
|
@@ -11536,6 +11552,7 @@ const orchestrator = new Orchestrator(
|
|
|
11536
11552
|
onWorkerMessage: (message) => mainWindow?.webContents.send("worker:message", message),
|
|
11537
11553
|
onWorkerRegistered: (data) => mainWindow?.webContents.send("worker:registered", data),
|
|
11538
11554
|
onProjectChanged: (name) => mainWindow?.webContents.send("app:projectChanged", name),
|
|
11555
|
+
onAgentMessage: (text) => mainWindow?.webContents.send("agent:message", text),
|
|
11539
11556
|
onCwdChanged: () => {
|
|
11540
11557
|
mainWindow?.webContents.send("app:cwdChanged");
|
|
11541
11558
|
updateProjectBadge(orchestrator.cwd);
|
|
@@ -11771,6 +11788,11 @@ electron.ipcMain.handle("logchat:set", (_event, enabled) => {
|
|
|
11771
11788
|
orchestrator.setLogChat(!!enabled);
|
|
11772
11789
|
return { enabled: orchestrator.logChatEnabled };
|
|
11773
11790
|
});
|
|
11791
|
+
electron.ipcMain.handle("speak:get", () => ({ enabled: orchestrator.speakRepliesEnabled }));
|
|
11792
|
+
electron.ipcMain.handle("speak:set", (_event, enabled) => {
|
|
11793
|
+
orchestrator.setSpeakReplies(!!enabled);
|
|
11794
|
+
return { enabled: orchestrator.speakRepliesEnabled };
|
|
11795
|
+
});
|
|
11774
11796
|
electron.ipcMain.handle("tracking:get", () => ({ active: orchestrator.isActiveTabTracking() }));
|
|
11775
11797
|
electron.ipcMain.handle("tracking:set", async (_event, enabled) => {
|
|
11776
11798
|
await orchestrator.setActiveTabTracking(enabled);
|
package/out/preload/index.js
CHANGED
|
@@ -61,6 +61,14 @@ const api = {
|
|
|
61
61
|
// Chat logging (global)
|
|
62
62
|
getLogChat: () => electron.ipcRenderer.invoke("logchat:get"),
|
|
63
63
|
setLogChat: (enabled) => electron.ipcRenderer.invoke("logchat:set", enabled),
|
|
64
|
+
// Speak agent replies (global, Electron-only)
|
|
65
|
+
getSpeakReplies: () => electron.ipcRenderer.invoke("speak:get"),
|
|
66
|
+
setSpeakReplies: (enabled) => electron.ipcRenderer.invoke("speak:set", enabled),
|
|
67
|
+
onAgentMessage: (callback) => {
|
|
68
|
+
const listener = (_event, text) => callback(text);
|
|
69
|
+
electron.ipcRenderer.on("agent:message", listener);
|
|
70
|
+
return () => electron.ipcRenderer.removeListener("agent:message", listener);
|
|
71
|
+
},
|
|
64
72
|
// Filesystem
|
|
65
73
|
readDir: (dirPath) => electron.ipcRenderer.invoke("fs:readDir", dirPath),
|
|
66
74
|
readFile: (filePath) => electron.ipcRenderer.invoke("fs:readFile", filePath),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as createWebWorker, l as languages } from "./index
|
|
2
|
-
import { C as CompletionAdapter, H as HoverAdapter, D as DocumentHighlightAdapter, a as DefinitionAdapter, R as ReferenceAdapter, b as DocumentSymbolAdapter, c as RenameAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, e as DiagnosticsAdapter, S as SelectionRangeAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider } from "./lspLanguageFeatures-
|
|
3
|
-
import { h, i, j, t, k } from "./lspLanguageFeatures-
|
|
1
|
+
import { c as createWebWorker, l as languages } from "./index---H6cxNl.js";
|
|
2
|
+
import { C as CompletionAdapter, H as HoverAdapter, D as DocumentHighlightAdapter, a as DefinitionAdapter, R as ReferenceAdapter, b as DocumentSymbolAdapter, c as RenameAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, e as DiagnosticsAdapter, S as SelectionRangeAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider } from "./lspLanguageFeatures-CHWJx_Tl.js";
|
|
3
|
+
import { h, i, j, t, k } from "./lspLanguageFeatures-CHWJx_Tl.js";
|
|
4
4
|
const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
|
|
5
5
|
class WorkerManager {
|
|
6
6
|
constructor(defaults) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as createWebWorker, l as languages } from "./index
|
|
2
|
-
import { H as HoverAdapter, D as DocumentHighlightAdapter, h as DocumentLinkAdapter, F as FoldingRangeAdapter, b as DocumentSymbolAdapter, S as SelectionRangeAdapter, c as RenameAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter } from "./lspLanguageFeatures-
|
|
3
|
-
import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-
|
|
1
|
+
import { c as createWebWorker, l as languages } from "./index---H6cxNl.js";
|
|
2
|
+
import { H as HoverAdapter, D as DocumentHighlightAdapter, h as DocumentLinkAdapter, F as FoldingRangeAdapter, b as DocumentSymbolAdapter, S as SelectionRangeAdapter, c as RenameAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter } from "./lspLanguageFeatures-CHWJx_Tl.js";
|
|
3
|
+
import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-CHWJx_Tl.js";
|
|
4
4
|
const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
|
|
5
5
|
class WorkerManager {
|
|
6
6
|
constructor(defaults) {
|