@phenx-inc/ctlsurf 0.5.1 → 0.6.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 (35) hide show
  1. package/electron-vite.config.ts +5 -0
  2. package/out/headless/index.mjs +2 -1
  3. package/out/headless/index.mjs.map +2 -2
  4. package/out/main/index.js +38 -6
  5. package/out/preload/index.js +3 -0
  6. package/out/renderer/assets/{cssMode-DkmdBgO7.js → cssMode-DbMmcl1h.js} +3 -3
  7. package/out/renderer/assets/{freemarker2-CI-gkP-3.js → freemarker2-CvaHiy92.js} +1 -1
  8. package/out/renderer/assets/{handlebars-D5tEqanR.js → handlebars-D58lUIOu.js} +1 -1
  9. package/out/renderer/assets/{html-fH93EYfn.js → html-D1h1aJbM.js} +1 -1
  10. package/out/renderer/assets/{htmlMode-CRicxcwK.js → htmlMode-BdkAp9qr.js} +3 -3
  11. package/out/renderer/assets/{index-BOOvUI7u.js → index-B60JU1yI.js} +461 -111
  12. package/out/renderer/assets/{index-ezC-iarf.css → index-DJFYmHjz.css} +89 -0
  13. package/out/renderer/assets/{javascript-D1Baz4fV.js → javascript-CXqZcnvb.js} +2 -2
  14. package/out/renderer/assets/{jsonMode-Bquqf3QN.js → jsonMode-BuVr-eSl.js} +3 -3
  15. package/out/renderer/assets/{liquid-ByOcPjBF.js → liquid-LKu0Wd0B.js} +1 -1
  16. package/out/renderer/assets/{lspLanguageFeatures-BxPLl0yy.js → lspLanguageFeatures-Cjr_4HGs.js} +1 -1
  17. package/out/renderer/assets/{mdx-yuNgx0rM.js → mdx-Bl84ILla.js} +1 -1
  18. package/out/renderer/assets/ort-wasm-simd-threaded.asyncify-DMmc6YqF.wasm +0 -0
  19. package/out/renderer/assets/{python-2OakgLlA.js → python-0sFd9G1k.js} +1 -1
  20. package/out/renderer/assets/{razor-DnIVMSwa.js → razor-Cqcu1rLJ.js} +1 -1
  21. package/out/renderer/assets/transformers.web-DtSCnG36.js +33668 -0
  22. package/out/renderer/assets/{tsMode-CRIrHuii.js → tsMode-CYd3NUkW.js} +1 -1
  23. package/out/renderer/assets/{typescript-DJ3C8Yly.js → typescript-rkc9lhpi.js} +1 -1
  24. package/out/renderer/assets/{xml-CalvD5_C.js → xml-EsHEUps1.js} +1 -1
  25. package/out/renderer/assets/{yaml-Cgs8pdVp.js → yaml-B9-nQ_s2.js} +1 -1
  26. package/out/renderer/index.html +2 -2
  27. package/package.json +2 -1
  28. package/src/main/index.ts +49 -2
  29. package/src/preload/index.ts +4 -0
  30. package/src/renderer/App.tsx +34 -2
  31. package/src/renderer/components/CtlsurfPanel.tsx +19 -3
  32. package/src/renderer/components/TerminalPanel.tsx +32 -1
  33. package/src/renderer/components/VoiceInput.tsx +313 -0
  34. package/src/renderer/lib/localWhisper.ts +88 -0
  35. package/src/renderer/styles.css +89 -0
package/out/main/index.js CHANGED
@@ -8754,7 +8754,7 @@ function requireWebsocket() {
8754
8754
  const tls = require$$4;
8755
8755
  const { randomBytes, createHash } = require$$1;
8756
8756
  const { Duplex, Readable } = require$$0$2;
8757
- const { URL } = require$$7;
8757
+ const { URL: URL2 } = require$$7;
8758
8758
  const PerMessageDeflate = requirePermessageDeflate();
8759
8759
  const Receiver = requireReceiver();
8760
8760
  const Sender = requireSender();
@@ -9247,11 +9247,11 @@ function requireWebsocket() {
9247
9247
  );
9248
9248
  }
9249
9249
  let parsedUrl;
9250
- if (address instanceof URL) {
9250
+ if (address instanceof URL2) {
9251
9251
  parsedUrl = address;
9252
9252
  } else {
9253
9253
  try {
9254
- parsedUrl = new URL(address);
9254
+ parsedUrl = new URL2(address);
9255
9255
  } catch {
9256
9256
  throw new SyntaxError(`Invalid URL: ${address}`);
9257
9257
  }
@@ -9388,7 +9388,7 @@ function requireWebsocket() {
9388
9388
  req.abort();
9389
9389
  let addr;
9390
9390
  try {
9391
- addr = new URL(location, address);
9391
+ addr = new URL2(location, address);
9392
9392
  } catch (e) {
9393
9393
  const err = new SyntaxError(`Invalid URL: ${location}`);
9394
9394
  emitErrorAndClose(websocket2, err);
@@ -11558,6 +11558,9 @@ function createWindow() {
11558
11558
  webviewTag: true
11559
11559
  }
11560
11560
  });
11561
+ mainWindow.webContents.session.setPermissionRequestHandler((_wc, _permission, callback) => {
11562
+ callback(true);
11563
+ });
11561
11564
  if (process.env.ELECTRON_RENDERER_URL) {
11562
11565
  mainWindow.loadURL(process.env.ELECTRON_RENDERER_URL);
11563
11566
  } else {
@@ -11682,10 +11685,13 @@ electron.ipcMain.handle("worker:createProject", async () => {
11682
11685
  return { ok: false, error: err.message };
11683
11686
  }
11684
11687
  });
11685
- electron.ipcMain.handle("worker:getWebviewInfo", async () => {
11688
+ function getCtlsurfFrontendUrl() {
11686
11689
  const profile = orchestrator.getActiveProfile();
11687
11690
  const baseUrl = profile.baseUrl || process.env.CTLSURF_BASE_URL || "https://app.ctlsurf.com";
11688
- const frontendUrl = baseUrl.includes("localhost:8000") ? baseUrl.replace(":8000", ":88") : baseUrl;
11691
+ return baseUrl.includes("localhost:8000") ? baseUrl.replace(":8000", ":88") : baseUrl;
11692
+ }
11693
+ electron.ipcMain.handle("worker:getWebviewInfo", async () => {
11694
+ const frontendUrl = getCtlsurfFrontendUrl();
11689
11695
  if (!orchestrator.ctlsurfApi.getApiKey()) {
11690
11696
  return { frontendUrl: `${frontendUrl}?embed=1`, authenticated: false };
11691
11697
  }
@@ -11726,6 +11732,32 @@ electron.ipcMain.handle("worker:getWebviewInfo", async () => {
11726
11732
  return { frontendUrl: `${frontendUrl}?embed=1`, authenticated: false };
11727
11733
  }
11728
11734
  });
11735
+ electron.ipcMain.handle("worker:getEmbedUrl", async (_event, targetUrl) => {
11736
+ try {
11737
+ if (!targetUrl) return null;
11738
+ const frontendUrl = getCtlsurfFrontendUrl();
11739
+ const profile = orchestrator.getActiveProfile();
11740
+ const rawBaseUrl = profile.baseUrl || process.env.CTLSURF_BASE_URL || "https://app.ctlsurf.com";
11741
+ const target = new URL(targetUrl);
11742
+ const front = new URL(frontendUrl);
11743
+ const origins = /* @__PURE__ */ new Set([front.origin]);
11744
+ try {
11745
+ origins.add(new URL(rawBaseUrl).origin);
11746
+ } catch {
11747
+ }
11748
+ if (!origins.has(target.origin)) return null;
11749
+ const out = new URL(target.pathname + target.search + target.hash, front.origin);
11750
+ out.searchParams.set("embed", "1");
11751
+ if (orchestrator.ctlsurfApi.getApiKey()) {
11752
+ const { code } = await orchestrator.ctlsurfApi.getAuthCode();
11753
+ out.searchParams.set("_code", code);
11754
+ }
11755
+ return out.toString();
11756
+ } catch (err) {
11757
+ log("[worker] getEmbedUrl failed:", err?.message);
11758
+ return null;
11759
+ }
11760
+ });
11729
11761
  electron.ipcMain.handle("profiles:list", () => orchestrator.listProfiles());
11730
11762
  electron.ipcMain.handle("profiles:get", (_event, id) => orchestrator.getProfile(id));
11731
11763
  electron.ipcMain.handle("profiles:save", (_event, id, data) => {
@@ -70,6 +70,9 @@ const api = {
70
70
  getWorkerId: () => electron.ipcRenderer.invoke("worker:getWorkerId"),
71
71
  createProject: () => electron.ipcRenderer.invoke("worker:createProject"),
72
72
  getWebviewInfo: () => electron.ipcRenderer.invoke("worker:getWebviewInfo"),
73
+ // Resolve a terminal-printed URL to an authenticated ctlsurf embed URL, or
74
+ // null if it isn't a ctlsurf link (caller opens those externally).
75
+ getEmbedUrl: (targetUrl) => electron.ipcRenderer.invoke("worker:getEmbedUrl", targetUrl),
73
76
  onWorkerStatus: (callback) => {
74
77
  const listener = (_event, status) => callback(status);
75
78
  electron.ipcRenderer.on("worker:status", listener);
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages } from "./index-BOOvUI7u.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-BxPLl0yy.js";
3
- import { h, i, j, t, k } from "./lspLanguageFeatures-BxPLl0yy.js";
1
+ import { c as createWebWorker, l as languages } from "./index-B60JU1yI.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-Cjr_4HGs.js";
3
+ import { h, i, j, t, k } from "./lspLanguageFeatures-Cjr_4HGs.js";
4
4
  const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
5
5
  class WorkerManager {
6
6
  constructor(defaults) {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BOOvUI7u.js";
1
+ import { l as languages } from "./index-B60JU1yI.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "assign",
4
4
  "flush",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BOOvUI7u.js";
1
+ import { l as languages } from "./index-B60JU1yI.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BOOvUI7u.js";
1
+ import { l as languages } from "./index-B60JU1yI.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages } from "./index-BOOvUI7u.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-BxPLl0yy.js";
3
- import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-BxPLl0yy.js";
1
+ import { c as createWebWorker, l as languages } from "./index-B60JU1yI.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-Cjr_4HGs.js";
3
+ import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-Cjr_4HGs.js";
4
4
  const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
5
5
  class WorkerManager {
6
6
  constructor(defaults) {