@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.
Files changed (34) hide show
  1. package/out/headless/index.mjs +26 -10
  2. package/out/headless/index.mjs.map +2 -2
  3. package/out/main/index.js +31 -9
  4. package/out/preload/index.js +8 -0
  5. package/out/renderer/assets/{cssMode-DbMmcl1h.js → cssMode-BQN8v2ok.js} +3 -3
  6. package/out/renderer/assets/{freemarker2-CvaHiy92.js → freemarker2-DbxGYYVp.js} +1 -1
  7. package/out/renderer/assets/{handlebars-D58lUIOu.js → handlebars-3auU1CAd.js} +1 -1
  8. package/out/renderer/assets/{html-D1h1aJbM.js → html-D8xFiRmI.js} +1 -1
  9. package/out/renderer/assets/{htmlMode-BdkAp9qr.js → htmlMode-M3MApZ4n.js} +3 -3
  10. package/out/renderer/assets/{index-B60JU1yI.js → index---H6cxNl.js} +854 -38
  11. package/out/renderer/assets/{index-DJFYmHjz.css → index-B-iM7dFC.css} +269 -0
  12. package/out/renderer/assets/{javascript-CXqZcnvb.js → javascript-BO_ViZM5.js} +2 -2
  13. package/out/renderer/assets/{jsonMode-BuVr-eSl.js → jsonMode-CKp2zvZu.js} +3 -3
  14. package/out/renderer/assets/{liquid-LKu0Wd0B.js → liquid-C1eHcrht.js} +1 -1
  15. package/out/renderer/assets/{lspLanguageFeatures-Cjr_4HGs.js → lspLanguageFeatures-CHWJx_Tl.js} +1 -1
  16. package/out/renderer/assets/{mdx-Bl84ILla.js → mdx-Qqdtk7fL.js} +1 -1
  17. package/out/renderer/assets/{python-0sFd9G1k.js → python-DKu7rNbs.js} +1 -1
  18. package/out/renderer/assets/{razor-Cqcu1rLJ.js → razor-BOMpCo6z.js} +1 -1
  19. package/out/renderer/assets/{tsMode-CYd3NUkW.js → tsMode-yAjlPR-D.js} +1 -1
  20. package/out/renderer/assets/{typescript-rkc9lhpi.js → typescript-BiJRCUcL.js} +1 -1
  21. package/out/renderer/assets/{xml-EsHEUps1.js → xml-D4PvYeQq.js} +1 -1
  22. package/out/renderer/assets/{yaml-B9-nQ_s2.js → yaml-BeHVkmnS.js} +1 -1
  23. package/out/renderer/index.html +2 -2
  24. package/package.json +1 -1
  25. package/src/main/index.ts +7 -0
  26. package/src/main/orchestrator.ts +38 -9
  27. package/src/preload/index.ts +11 -0
  28. package/src/renderer/App.tsx +39 -6
  29. package/src/renderer/components/FloatingMic.tsx +128 -0
  30. package/src/renderer/components/SpeakControls.tsx +235 -0
  31. package/src/renderer/components/VoiceInput.tsx +170 -6
  32. package/src/renderer/lib/localWhisper.ts +48 -4
  33. package/src/renderer/lib/speech.ts +299 -0
  34. package/src/renderer/styles.css +269 -0
@@ -5471,7 +5471,7 @@ var require_package = __commonJS({
5471
5471
  "package.json"(exports, module) {
5472
5472
  module.exports = {
5473
5473
  name: "@phenx-inc/ctlsurf",
5474
- version: "0.6.0",
5474
+ version: "0.8.0",
5475
5475
  description: "Agent-agnostic terminal and desktop app for ctlsurf \u2014 run Claude Code, Codex, or any coding agent with live session logging and remote control",
5476
5476
  main: "out/main/index.js",
5477
5477
  bin: {
@@ -7179,31 +7179,47 @@ var Orchestrator = class {
7179
7179
  get logChatEnabled() {
7180
7180
  return !!this.settings.logChat;
7181
7181
  }
7182
+ get speakRepliesEnabled() {
7183
+ return !!this.settings.speakReplies;
7184
+ }
7182
7185
  setLogChat(enabled) {
7183
7186
  this.settings.logChat = enabled;
7184
7187
  this.saveSettings();
7185
7188
  this.bridge.setLoggingEnabled(enabled);
7186
- if (!enabled) {
7187
- this.stopChatLogging();
7188
- } else if (this.activeTabId) {
7189
- const tab = this.tabs.get(this.activeTabId);
7190
- if (tab) this.startChatLogging(tab.agent, tab.cwd);
7191
- }
7189
+ this.restartActiveChatLogging();
7190
+ }
7191
+ setSpeakReplies(enabled) {
7192
+ this.settings.speakReplies = enabled;
7193
+ this.saveSettings();
7194
+ this.restartActiveChatLogging();
7195
+ }
7196
+ // Re-evaluate the transcript tailer for the active tab against the current
7197
+ // logChat / speakReplies flags. Both setters funnel through here.
7198
+ restartActiveChatLogging() {
7199
+ this.stopChatLogging();
7200
+ if (!this.activeTabId) return;
7201
+ const tab = this.tabs.get(this.activeTabId);
7202
+ if (tab) this.startChatLogging(tab.agent, tab.cwd);
7192
7203
  }
7193
7204
  // Agents with native session transcripts (Claude Code, Codex) get exact
7194
7205
  // chat text tailed from their JSONL logs; everything else falls back to
7195
7206
  // the terminal screen-scraper bridge.
7196
7207
  startChatLogging(agent, cwd) {
7197
7208
  this.stopChatLogging();
7198
- if (!this.settings.logChat) return;
7209
+ if (!this.settings.logChat && !this.settings.speakReplies) return;
7199
7210
  if (supportsTranscriptLogging(agent.id)) {
7200
7211
  this.transcriptTailer = new TranscriptTailer({
7201
7212
  agentId: agent.id,
7202
7213
  cwd,
7203
- sink: (entry) => this.workerWs.sendChatLog(entry)
7214
+ sink: (entry) => {
7215
+ if (this.settings.logChat) this.workerWs.sendChatLog(entry);
7216
+ if (this.settings.speakReplies && entry.type === "terminal_output") {
7217
+ this.events.onAgentMessage?.(entry.content);
7218
+ }
7219
+ }
7204
7220
  });
7205
7221
  this.transcriptTailer.start();
7206
- } else {
7222
+ } else if (this.settings.logChat) {
7207
7223
  this.bridge.startSession();
7208
7224
  }
7209
7225
  }