@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.
- package/electron-vite.config.ts +5 -0
- package/out/headless/index.mjs +2 -1
- package/out/headless/index.mjs.map +2 -2
- package/out/main/index.js +38 -6
- package/out/preload/index.js +3 -0
- package/out/renderer/assets/{cssMode-DkmdBgO7.js → cssMode-DbMmcl1h.js} +3 -3
- package/out/renderer/assets/{freemarker2-CI-gkP-3.js → freemarker2-CvaHiy92.js} +1 -1
- package/out/renderer/assets/{handlebars-D5tEqanR.js → handlebars-D58lUIOu.js} +1 -1
- package/out/renderer/assets/{html-fH93EYfn.js → html-D1h1aJbM.js} +1 -1
- package/out/renderer/assets/{htmlMode-CRicxcwK.js → htmlMode-BdkAp9qr.js} +3 -3
- package/out/renderer/assets/{index-BOOvUI7u.js → index-B60JU1yI.js} +461 -111
- package/out/renderer/assets/{index-ezC-iarf.css → index-DJFYmHjz.css} +89 -0
- package/out/renderer/assets/{javascript-D1Baz4fV.js → javascript-CXqZcnvb.js} +2 -2
- package/out/renderer/assets/{jsonMode-Bquqf3QN.js → jsonMode-BuVr-eSl.js} +3 -3
- package/out/renderer/assets/{liquid-ByOcPjBF.js → liquid-LKu0Wd0B.js} +1 -1
- package/out/renderer/assets/{lspLanguageFeatures-BxPLl0yy.js → lspLanguageFeatures-Cjr_4HGs.js} +1 -1
- package/out/renderer/assets/{mdx-yuNgx0rM.js → mdx-Bl84ILla.js} +1 -1
- package/out/renderer/assets/ort-wasm-simd-threaded.asyncify-DMmc6YqF.wasm +0 -0
- package/out/renderer/assets/{python-2OakgLlA.js → python-0sFd9G1k.js} +1 -1
- package/out/renderer/assets/{razor-DnIVMSwa.js → razor-Cqcu1rLJ.js} +1 -1
- package/out/renderer/assets/transformers.web-DtSCnG36.js +33668 -0
- package/out/renderer/assets/{tsMode-CRIrHuii.js → tsMode-CYd3NUkW.js} +1 -1
- package/out/renderer/assets/{typescript-DJ3C8Yly.js → typescript-rkc9lhpi.js} +1 -1
- package/out/renderer/assets/{xml-CalvD5_C.js → xml-EsHEUps1.js} +1 -1
- package/out/renderer/assets/{yaml-Cgs8pdVp.js → yaml-B9-nQ_s2.js} +1 -1
- package/out/renderer/index.html +2 -2
- package/package.json +2 -1
- package/src/main/index.ts +49 -2
- package/src/preload/index.ts +4 -0
- package/src/renderer/App.tsx +34 -2
- package/src/renderer/components/CtlsurfPanel.tsx +19 -3
- package/src/renderer/components/TerminalPanel.tsx +32 -1
- package/src/renderer/components/VoiceInput.tsx +313 -0
- package/src/renderer/lib/localWhisper.ts +88 -0
- 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
|
|
9250
|
+
if (address instanceof URL2) {
|
|
9251
9251
|
parsedUrl = address;
|
|
9252
9252
|
} else {
|
|
9253
9253
|
try {
|
|
9254
|
-
parsedUrl = new
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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) => {
|
package/out/preload/index.js
CHANGED
|
@@ -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-
|
|
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-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,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-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) {
|