@phenx-inc/ctlsurf 0.14.0 → 0.14.2

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 (23) hide show
  1. package/README.md +36 -0
  2. package/out/headless/index.mjs +11 -2
  3. package/out/headless/index.mjs.map +2 -2
  4. package/out/renderer/assets/{cssMode-7adWSORr.js → cssMode-bQYoCKra.js} +3 -3
  5. package/out/renderer/assets/{freemarker2-BkLLWnzk.js → freemarker2-BS1ERQl_.js} +1 -1
  6. package/out/renderer/assets/{handlebars-Cinfm9fZ.js → handlebars-B-ZEHRLr.js} +1 -1
  7. package/out/renderer/assets/{html-vl9fkHKL.js → html-lk9e1Lkl.js} +1 -1
  8. package/out/renderer/assets/{htmlMode-BtGqkTNI.js → htmlMode-Ds1eMYgM.js} +3 -3
  9. package/out/renderer/assets/{index-BhrV6ld-.js → index-BJNR4hRK.js} +43 -22
  10. package/out/renderer/assets/{javascript-B7CCdfuW.js → javascript-D6OeziKX.js} +2 -2
  11. package/out/renderer/assets/{jsonMode-ut9LWBMJ.js → jsonMode-t5SESE75.js} +3 -3
  12. package/out/renderer/assets/{liquid-DVDJ0lKt.js → liquid-B5Wjh0p_.js} +1 -1
  13. package/out/renderer/assets/{lspLanguageFeatures-BbMj8Wsc.js → lspLanguageFeatures-BEgiDCIW.js} +1 -1
  14. package/out/renderer/assets/{mdx-CcQzYB0J.js → mdx-ByNAXh8t.js} +1 -1
  15. package/out/renderer/assets/{python-Byy7wKMv.js → python-CIFO0XQW.js} +1 -1
  16. package/out/renderer/assets/{razor-D1xi_wMM.js → razor-LXHhGcNO.js} +1 -1
  17. package/out/renderer/assets/{tsMode-DJPzbn5i.js → tsMode-WiO8CDaI.js} +1 -1
  18. package/out/renderer/assets/{typescript-BuVaU7i3.js → typescript-ZBQlq256.js} +1 -1
  19. package/out/renderer/assets/{xml-rzc91O3d.js → xml-DBaLJlQU.js} +1 -1
  20. package/out/renderer/assets/{yaml-fAOzQMge.js → yaml-CId9skah.js} +1 -1
  21. package/out/renderer/index.html +1 -1
  22. package/package.json +13 -4
  23. package/src/renderer/components/TerminalPanel.tsx +29 -0
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages } from "./index-BhrV6ld-.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-BbMj8Wsc.js";
3
- import { h, i, j, t, k } from "./lspLanguageFeatures-BbMj8Wsc.js";
1
+ import { c as createWebWorker, l as languages } from "./index-BJNR4hRK.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-BEgiDCIW.js";
3
+ import { h, i, j, t, k } from "./lspLanguageFeatures-BEgiDCIW.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-BhrV6ld-.js";
1
+ import { l as languages } from "./index-BJNR4hRK.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "assign",
4
4
  "flush",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BhrV6ld-.js";
1
+ import { l as languages } from "./index-BJNR4hRK.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BhrV6ld-.js";
1
+ import { l as languages } from "./index-BJNR4hRK.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-BhrV6ld-.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-BbMj8Wsc.js";
3
- import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-BbMj8Wsc.js";
1
+ import { c as createWebWorker, l as languages } from "./index-BJNR4hRK.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-BEgiDCIW.js";
3
+ import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-BEgiDCIW.js";
4
4
  const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
5
5
  class WorkerManager {
6
6
  constructor(defaults) {
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cssMode-7adWSORr.js","./lspLanguageFeatures-BbMj8Wsc.js","./htmlMode-BtGqkTNI.js","./jsonMode-ut9LWBMJ.js","./javascript-B7CCdfuW.js","./typescript-BuVaU7i3.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cssMode-bQYoCKra.js","./lspLanguageFeatures-BEgiDCIW.js","./htmlMode-Ds1eMYgM.js","./jsonMode-t5SESE75.js","./javascript-D6OeziKX.js","./typescript-ZBQlq256.js"])))=>i.map(i=>d[i]);
2
2
  function getDefaultExportFromCjs(x) {
3
3
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
4
4
  }
@@ -19286,6 +19286,12 @@ function getOrCreateTerminal(tabId, onExit) {
19286
19286
  // Off by default on macOS; without this a right-click would reselect the
19287
19287
  // word under the cursor and clobber a multi-line table selection.
19288
19288
  rightClickSelectsWord: false,
19289
+ // A mouse-tracking TUI (notably tmux with `set -g mouse on`) swallows plain
19290
+ // drags, so they yank into a remote tmux buffer instead of selecting here.
19291
+ // Option+drag is the only way back to a local selection on macOS, and xterm
19292
+ // gates it behind this flag. Elsewhere Shift+drag already does it. Costs us
19293
+ // Option+drag column-select on macOS, which nothing here relies on.
19294
+ macOptionClickForcesSelection: true,
19289
19295
  fontSize: 14,
19290
19296
  fontFamily: "'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'SF Mono', monospace",
19291
19297
  theme: {
@@ -19317,6 +19323,21 @@ function getOrCreateTerminal(tabId, onExit) {
19317
19323
  const fitAddon = new addonFitExports.FitAddon();
19318
19324
  terminal.loadAddon(fitAddon);
19319
19325
  terminal.loadAddon(new addonWebLinksExports.WebLinksAddon(handleTerminalLink));
19326
+ terminal.parser.registerOscHandler(52, (data) => {
19327
+ const payload = data.slice(data.indexOf(";") + 1);
19328
+ if (!payload || payload === "?") return false;
19329
+ if (payload.length > 14e5) return false;
19330
+ let text2;
19331
+ try {
19332
+ const bin = atob(payload);
19333
+ text2 = new TextDecoder().decode(Uint8Array.from(bin, (c) => c.charCodeAt(0)));
19334
+ } catch (err) {
19335
+ console.warn("[copy] OSC 52 payload was not valid base64", err);
19336
+ return false;
19337
+ }
19338
+ copyTextValue(text2);
19339
+ return true;
19340
+ });
19320
19341
  terminal.attachCustomKeyEventHandler((e) => {
19321
19342
  if (e.type !== "keydown") return true;
19322
19343
  if (e.key === "PageUp" || e.key === "PageDown" || e.key === "Home" || e.key === "End") {
@@ -208167,7 +208188,7 @@ const lessDefaults = new LanguageServiceDefaultsImpl$3(
208167
208188
  modeConfigurationDefault$2
208168
208189
  );
208169
208190
  function getMode$3() {
208170
- return __vitePreload(() => import("./cssMode-7adWSORr.js"), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
208191
+ return __vitePreload(() => import("./cssMode-bQYoCKra.js"), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
208171
208192
  }
208172
208193
  languages.onLanguage("less", () => {
208173
208194
  getMode$3().then((mode2) => mode2.setupMode(lessDefaults));
@@ -208272,7 +208293,7 @@ const razorLanguageService = registerHTMLLanguageService(
208272
208293
  );
208273
208294
  const razorDefaults = razorLanguageService.defaults;
208274
208295
  function getMode$2() {
208275
- return __vitePreload(() => import("./htmlMode-BtGqkTNI.js"), true ? __vite__mapDeps([2,1]) : void 0, import.meta.url);
208296
+ return __vitePreload(() => import("./htmlMode-Ds1eMYgM.js"), true ? __vite__mapDeps([2,1]) : void 0, import.meta.url);
208276
208297
  }
208277
208298
  function registerHTMLLanguageService(languageId, options = optionsDefault, modeConfiguration = getConfigurationDefault(languageId)) {
208278
208299
  const defaults = new LanguageServiceDefaultsImpl$2(languageId, options, modeConfiguration);
@@ -208356,7 +208377,7 @@ const jsonDefaults = new LanguageServiceDefaultsImpl$1(
208356
208377
  );
208357
208378
  const getWorker$1 = () => getMode$1().then((mode2) => mode2.getWorker());
208358
208379
  function getMode$1() {
208359
- return __vitePreload(() => import("./jsonMode-ut9LWBMJ.js"), true ? __vite__mapDeps([3,1]) : void 0, import.meta.url);
208380
+ return __vitePreload(() => import("./jsonMode-t5SESE75.js"), true ? __vite__mapDeps([3,1]) : void 0, import.meta.url);
208360
208381
  }
208361
208382
  languages.register({
208362
208383
  id: "json",
@@ -208602,7 +208623,7 @@ const getJavaScriptWorker = () => {
208602
208623
  return getMode().then((mode) => mode.getJavaScriptWorker());
208603
208624
  };
208604
208625
  function getMode() {
208605
- return __vitePreload(() => import("./tsMode-DJPzbn5i.js"), true ? [] : void 0, import.meta.url);
208626
+ return __vitePreload(() => import("./tsMode-WiO8CDaI.js"), true ? [] : void 0, import.meta.url);
208606
208627
  }
208607
208628
  languages.onLanguage("typescript", () => {
208608
208629
  return getMode().then((mode) => mode.setupTypeScript(typescriptDefaults));
@@ -208797,49 +208818,49 @@ registerLanguage({
208797
208818
  extensions: [".ftl", ".ftlh", ".ftlx"],
208798
208819
  aliases: ["FreeMarker2", "Apache FreeMarker2"],
208799
208820
  loader: () => {
208800
- return __vitePreload(() => import("./freemarker2-BkLLWnzk.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
208821
+ return __vitePreload(() => import("./freemarker2-BS1ERQl_.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
208801
208822
  }
208802
208823
  });
208803
208824
  registerLanguage({
208804
208825
  id: "freemarker2.tag-angle.interpolation-dollar",
208805
208826
  aliases: ["FreeMarker2 (Angle/Dollar)", "Apache FreeMarker2 (Angle/Dollar)"],
208806
208827
  loader: () => {
208807
- return __vitePreload(() => import("./freemarker2-BkLLWnzk.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationDollar);
208828
+ return __vitePreload(() => import("./freemarker2-BS1ERQl_.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationDollar);
208808
208829
  }
208809
208830
  });
208810
208831
  registerLanguage({
208811
208832
  id: "freemarker2.tag-bracket.interpolation-dollar",
208812
208833
  aliases: ["FreeMarker2 (Bracket/Dollar)", "Apache FreeMarker2 (Bracket/Dollar)"],
208813
208834
  loader: () => {
208814
- return __vitePreload(() => import("./freemarker2-BkLLWnzk.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationDollar);
208835
+ return __vitePreload(() => import("./freemarker2-BS1ERQl_.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationDollar);
208815
208836
  }
208816
208837
  });
208817
208838
  registerLanguage({
208818
208839
  id: "freemarker2.tag-angle.interpolation-bracket",
208819
208840
  aliases: ["FreeMarker2 (Angle/Bracket)", "Apache FreeMarker2 (Angle/Bracket)"],
208820
208841
  loader: () => {
208821
- return __vitePreload(() => import("./freemarker2-BkLLWnzk.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationBracket);
208842
+ return __vitePreload(() => import("./freemarker2-BS1ERQl_.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationBracket);
208822
208843
  }
208823
208844
  });
208824
208845
  registerLanguage({
208825
208846
  id: "freemarker2.tag-bracket.interpolation-bracket",
208826
208847
  aliases: ["FreeMarker2 (Bracket/Bracket)", "Apache FreeMarker2 (Bracket/Bracket)"],
208827
208848
  loader: () => {
208828
- return __vitePreload(() => import("./freemarker2-BkLLWnzk.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationBracket);
208849
+ return __vitePreload(() => import("./freemarker2-BS1ERQl_.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationBracket);
208829
208850
  }
208830
208851
  });
208831
208852
  registerLanguage({
208832
208853
  id: "freemarker2.tag-auto.interpolation-dollar",
208833
208854
  aliases: ["FreeMarker2 (Auto/Dollar)", "Apache FreeMarker2 (Auto/Dollar)"],
208834
208855
  loader: () => {
208835
- return __vitePreload(() => import("./freemarker2-BkLLWnzk.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
208856
+ return __vitePreload(() => import("./freemarker2-BS1ERQl_.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
208836
208857
  }
208837
208858
  });
208838
208859
  registerLanguage({
208839
208860
  id: "freemarker2.tag-auto.interpolation-bracket",
208840
208861
  aliases: ["FreeMarker2 (Auto/Bracket)", "Apache FreeMarker2 (Auto/Bracket)"],
208841
208862
  loader: () => {
208842
- return __vitePreload(() => import("./freemarker2-BkLLWnzk.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationBracket);
208863
+ return __vitePreload(() => import("./freemarker2-BS1ERQl_.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationBracket);
208843
208864
  }
208844
208865
  });
208845
208866
  registerLanguage({
@@ -208860,7 +208881,7 @@ registerLanguage({
208860
208881
  extensions: [".handlebars", ".hbs"],
208861
208882
  aliases: ["Handlebars", "handlebars", "hbs"],
208862
208883
  mimetypes: ["text/x-handlebars-template"],
208863
- loader: () => __vitePreload(() => import("./handlebars-Cinfm9fZ.js"), true ? [] : void 0, import.meta.url)
208884
+ loader: () => __vitePreload(() => import("./handlebars-B-ZEHRLr.js"), true ? [] : void 0, import.meta.url)
208864
208885
  });
208865
208886
  registerLanguage({
208866
208887
  id: "hcl",
@@ -208873,7 +208894,7 @@ registerLanguage({
208873
208894
  extensions: [".html", ".htm", ".shtml", ".xhtml", ".mdoc", ".jsp", ".asp", ".aspx", ".jshtm"],
208874
208895
  aliases: ["HTML", "htm", "html", "xhtml"],
208875
208896
  mimetypes: ["text/html", "text/x-jshtm", "text/template", "text/ng-template"],
208876
- loader: () => __vitePreload(() => import("./html-vl9fkHKL.js"), true ? [] : void 0, import.meta.url)
208897
+ loader: () => __vitePreload(() => import("./html-lk9e1Lkl.js"), true ? [] : void 0, import.meta.url)
208877
208898
  });
208878
208899
  registerLanguage({
208879
208900
  id: "ini",
@@ -208896,7 +208917,7 @@ registerLanguage({
208896
208917
  filenames: ["jakefile"],
208897
208918
  aliases: ["JavaScript", "javascript", "js"],
208898
208919
  mimetypes: ["text/javascript"],
208899
- loader: () => __vitePreload(() => import("./javascript-B7CCdfuW.js"), true ? __vite__mapDeps([4,5]) : void 0, import.meta.url)
208920
+ loader: () => __vitePreload(() => import("./javascript-D6OeziKX.js"), true ? __vite__mapDeps([4,5]) : void 0, import.meta.url)
208900
208921
  });
208901
208922
  registerLanguage({
208902
208923
  id: "julia",
@@ -208935,7 +208956,7 @@ registerLanguage({
208935
208956
  extensions: [".liquid", ".html.liquid"],
208936
208957
  aliases: ["Liquid", "liquid"],
208937
208958
  mimetypes: ["application/liquid"],
208938
- loader: () => __vitePreload(() => import("./liquid-DVDJ0lKt.js"), true ? [] : void 0, import.meta.url)
208959
+ loader: () => __vitePreload(() => import("./liquid-B5Wjh0p_.js"), true ? [] : void 0, import.meta.url)
208939
208960
  });
208940
208961
  registerLanguage({
208941
208962
  id: "m3",
@@ -208953,7 +208974,7 @@ registerLanguage({
208953
208974
  id: "mdx",
208954
208975
  extensions: [".mdx"],
208955
208976
  aliases: ["MDX", "mdx"],
208956
- loader: () => __vitePreload(() => import("./mdx-CcQzYB0J.js"), true ? [] : void 0, import.meta.url)
208977
+ loader: () => __vitePreload(() => import("./mdx-ByNAXh8t.js"), true ? [] : void 0, import.meta.url)
208957
208978
  });
208958
208979
  registerLanguage({
208959
208980
  id: "mips",
@@ -209052,7 +209073,7 @@ registerLanguage({
209052
209073
  extensions: [".py", ".rpy", ".pyw", ".cpy", ".gyp", ".gypi"],
209053
209074
  aliases: ["Python", "py"],
209054
209075
  firstLine: "^#!/.*\\bpython[0-9.-]*\\b",
209055
- loader: () => __vitePreload(() => import("./python-Byy7wKMv.js"), true ? [] : void 0, import.meta.url)
209076
+ loader: () => __vitePreload(() => import("./python-CIFO0XQW.js"), true ? [] : void 0, import.meta.url)
209056
209077
  });
209057
209078
  registerLanguage({
209058
209079
  id: "qsharp",
@@ -209071,7 +209092,7 @@ registerLanguage({
209071
209092
  extensions: [".cshtml"],
209072
209093
  aliases: ["Razor", "razor"],
209073
209094
  mimetypes: ["text/x-cshtml"],
209074
- loader: () => __vitePreload(() => import("./razor-D1xi_wMM.js"), true ? [] : void 0, import.meta.url)
209095
+ loader: () => __vitePreload(() => import("./razor-LXHhGcNO.js"), true ? [] : void 0, import.meta.url)
209075
209096
  });
209076
209097
  registerLanguage({
209077
209098
  id: "redis",
@@ -209204,7 +209225,7 @@ registerLanguage({
209204
209225
  aliases: ["TypeScript", "ts", "typescript"],
209205
209226
  mimetypes: ["text/typescript"],
209206
209227
  loader: () => {
209207
- return __vitePreload(() => import("./typescript-BuVaU7i3.js"), true ? [] : void 0, import.meta.url);
209228
+ return __vitePreload(() => import("./typescript-ZBQlq256.js"), true ? [] : void 0, import.meta.url);
209208
209229
  }
209209
209230
  });
209210
209231
  registerLanguage({
@@ -209249,14 +209270,14 @@ registerLanguage({
209249
209270
  firstLine: "(\\<\\?xml.*)|(\\<svg)|(\\<\\!doctype\\s+svg)",
209250
209271
  aliases: ["XML", "xml"],
209251
209272
  mimetypes: ["text/xml", "application/xml", "application/xaml+xml", "application/xml-dtd"],
209252
- loader: () => __vitePreload(() => import("./xml-rzc91O3d.js"), true ? [] : void 0, import.meta.url)
209273
+ loader: () => __vitePreload(() => import("./xml-DBaLJlQU.js"), true ? [] : void 0, import.meta.url)
209253
209274
  });
209254
209275
  registerLanguage({
209255
209276
  id: "yaml",
209256
209277
  extensions: [".yaml", ".yml"],
209257
209278
  aliases: ["YAML", "yaml", "YML", "yml"],
209258
209279
  mimetypes: ["application/x-yaml", "text/x-yaml"],
209259
- loader: () => __vitePreload(() => import("./yaml-fAOzQMge.js"), true ? [] : void 0, import.meta.url)
209280
+ loader: () => __vitePreload(() => import("./yaml-CId9skah.js"), true ? [] : void 0, import.meta.url)
209260
209281
  });
209261
209282
  var __defProp = Object.defineProperty;
209262
209283
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -1,5 +1,5 @@
1
- import { conf as conf$1, language as language$1 } from "./typescript-BuVaU7i3.js";
2
- import "./index-BhrV6ld-.js";
1
+ import { conf as conf$1, language as language$1 } from "./typescript-ZBQlq256.js";
2
+ import "./index-BJNR4hRK.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-BhrV6ld-.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-BbMj8Wsc.js";
3
- import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-BbMj8Wsc.js";
1
+ import { c as createWebWorker, l as languages, e as editor } from "./index-BJNR4hRK.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-BEgiDCIW.js";
3
+ import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-BEgiDCIW.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-BhrV6ld-.js";
1
+ import { l as languages } from "./index-BJNR4hRK.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-BhrV6ld-.js";
1
+ import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-BJNR4hRK.js";
2
2
  var DocumentUri;
3
3
  (function(DocumentUri2) {
4
4
  function is(value) {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BhrV6ld-.js";
1
+ import { l as languages } from "./index-BJNR4hRK.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  blockComment: ["{/*", "*/}"]
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BhrV6ld-.js";
1
+ import { l as languages } from "./index-BJNR4hRK.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  lineComment: "#",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BhrV6ld-.js";
1
+ import { l as languages } from "./index-BJNR4hRK.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { c as createWebWorker, e as editor, U as Uri, a as MarkerTag, M as MarkerSeverity, l as languages, t as typescriptDefaults, R as Range } from "./index-BhrV6ld-.js";
1
+ import { c as createWebWorker, e as editor, U as Uri, a as MarkerTag, M as MarkerSeverity, l as languages, t as typescriptDefaults, R as Range } from "./index-BJNR4hRK.js";
2
2
  class WorkerManager {
3
3
  constructor(_modeId, _defaults) {
4
4
  this._modeId = _modeId;
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BhrV6ld-.js";
1
+ import { l as languages } from "./index-BJNR4hRK.js";
2
2
  const conf = {
3
3
  wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
4
4
  comments: {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BhrV6ld-.js";
1
+ import { l as languages } from "./index-BJNR4hRK.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  blockComment: ["<!--", "-->"]
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-BhrV6ld-.js";
1
+ import { l as languages } from "./index-BJNR4hRK.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  lineComment: "#"
@@ -49,7 +49,7 @@
49
49
  color: #565f89;
50
50
  }
51
51
  </style>
52
- <script type="module" crossorigin src="./assets/index-BhrV6ld-.js"></script>
52
+ <script type="module" crossorigin src="./assets/index-BJNR4hRK.js"></script>
53
53
  <link rel="stylesheet" crossorigin href="./assets/index-BpCORklm.css">
54
54
  </head>
55
55
  <body>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@phenx-inc/ctlsurf",
3
- "version": "0.14.0",
4
- "description": "Agent-agnostic terminal and desktop app for ctlsurf — run Claude Code, Codex, or any coding agent with live session logging and remote control",
3
+ "version": "0.14.2",
4
+ "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",
5
5
  "main": "out/main/index.js",
6
6
  "bin": {
7
7
  "ctlsurf": "./bin/ctlsurf-worker.js",
@@ -36,7 +36,12 @@
36
36
  "codex",
37
37
  "electron",
38
38
  "node-pty",
39
- "xterm"
39
+ "xterm",
40
+ "ai-agent",
41
+ "mcp",
42
+ "agent-observability",
43
+ "provenance",
44
+ "time-tracking"
40
45
  ],
41
46
  "license": "SEE LICENSE IN LICENSE",
42
47
  "engines": {
@@ -74,5 +79,9 @@
74
79
  "optionalDependencies": {
75
80
  "bufferutil": "^4.1.0",
76
81
  "utf-8-validate": "^6.0.6"
82
+ },
83
+ "homepage": "https://ctlsurf.com",
84
+ "bugs": {
85
+ "email": "phenx@phenx.io"
77
86
  }
78
- }
87
+ }
@@ -189,6 +189,12 @@ function getOrCreateTerminal(tabId: string, onExit: (tabId: string) => void): {
189
189
  // Off by default on macOS; without this a right-click would reselect the
190
190
  // word under the cursor and clobber a multi-line table selection.
191
191
  rightClickSelectsWord: false,
192
+ // A mouse-tracking TUI (notably tmux with `set -g mouse on`) swallows plain
193
+ // drags, so they yank into a remote tmux buffer instead of selecting here.
194
+ // Option+drag is the only way back to a local selection on macOS, and xterm
195
+ // gates it behind this flag. Elsewhere Shift+drag already does it. Costs us
196
+ // Option+drag column-select on macOS, which nothing here relies on.
197
+ macOptionClickForcesSelection: true,
192
198
  fontSize: 14,
193
199
  fontFamily: "'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'SF Mono', monospace",
194
200
  theme: {
@@ -222,6 +228,29 @@ function getOrCreateTerminal(tabId: string, onExit: (tabId: string) => void): {
222
228
  terminal.loadAddon(fitAddon)
223
229
  terminal.loadAddon(new WebLinksAddon(handleTerminalLink))
224
230
 
231
+ // OSC 52 — how a remote program (tmux's mouse-drag yank, vim, an agent TUI)
232
+ // asks the terminal it's attached to for a system-clipboard write. Real
233
+ // terminals honour it; xterm ships no handler, so those yanks used to vanish.
234
+ // Payload is `<targets>;<base64>`; `?` is a read-back request we decline
235
+ // rather than answer, so the remote can never exfiltrate the clipboard.
236
+ terminal.parser.registerOscHandler(52, (data) => {
237
+ const payload = data.slice(data.indexOf(';') + 1)
238
+ if (!payload || payload === '?') return false
239
+ // ~1MB of base64. A runaway program shouldn't be able to wedge the main
240
+ // process with an unbounded clipboard write.
241
+ if (payload.length > 1_400_000) return false
242
+ let text: string
243
+ try {
244
+ const bin = atob(payload)
245
+ text = new TextDecoder().decode(Uint8Array.from(bin, (c) => c.charCodeAt(0)))
246
+ } catch (err) {
247
+ console.warn('[copy] OSC 52 payload was not valid base64', err)
248
+ return false
249
+ }
250
+ copyTextValue(text)
251
+ return true
252
+ })
253
+
225
254
  // Selection actions via ⌘/Ctrl+Shift+[C|E|S] → copy / convert-to-table /
226
255
  // read-aloud. Handled here (not as DOM listeners) so they work even while a
227
256
  // mouse-tracking TUI is running, where right-click and mouse selection are