dmux 1.0.8 → 1.2.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.
@@ -0,0 +1,412 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { execSync } from 'child_process';
4
+ import path from 'path';
5
+ const SimpleEnhancedInput = ({ value, onChange, placeholder = '', onSubmit, onCancel, isActive = true, workingDirectory = process.cwd() }) => {
6
+ const [cursorPosition, setCursorPosition] = useState(0);
7
+ const [showAutocomplete, setShowAutocomplete] = useState(false);
8
+ const [autocompleteQuery, setAutocompleteQuery] = useState('');
9
+ const [autocompleteStartPos, setAutocompleteStartPos] = useState(0);
10
+ const [fileMatches, setFileMatches] = useState([]);
11
+ const [selectedMatchIndex, setSelectedMatchIndex] = useState(0);
12
+ // Update cursor when value changes externally
13
+ useEffect(() => {
14
+ // Only update cursor to end if value actually changed and we're not already editing
15
+ if (value.length > 0 && cursorPosition === 0) {
16
+ // This is initial value, keep cursor at 0
17
+ }
18
+ else if (value === '') {
19
+ setCursorPosition(0);
20
+ }
21
+ }, [value]);
22
+ // Search for files when autocomplete query changes or when @ is typed
23
+ useEffect(() => {
24
+ if (showAutocomplete) {
25
+ searchFiles(autocompleteQuery);
26
+ }
27
+ else {
28
+ setFileMatches([]);
29
+ }
30
+ }, [autocompleteQuery, showAutocomplete]);
31
+ const searchFiles = async (query) => {
32
+ try {
33
+ // Directories to exclude from search
34
+ const excludeDirs = [
35
+ 'node_modules',
36
+ '.git',
37
+ 'dist',
38
+ 'build',
39
+ '.next',
40
+ '.nuxt',
41
+ '.cache',
42
+ 'coverage',
43
+ '.vscode',
44
+ '.idea',
45
+ 'vendor',
46
+ 'target',
47
+ '.pnpm-store',
48
+ '__pycache__',
49
+ '.pytest_cache',
50
+ '.tox',
51
+ 'venv',
52
+ '.venv',
53
+ 'env',
54
+ '.env'
55
+ ];
56
+ // Build exclude arguments for find command
57
+ const excludeArgs = excludeDirs.map(dir => `-path "*/${dir}" -prune -o`).join(' ');
58
+ // If query is empty, show root directory files
59
+ let searchCmd;
60
+ let dirSearchCmd;
61
+ if (query === '') {
62
+ // Show files and directories in the root of the working directory (excluding common dirs)
63
+ searchCmd = `find "${workingDirectory}" -maxdepth 1 \\( ${excludeArgs} -type f -print \\) 2>/dev/null | head -20`;
64
+ dirSearchCmd = `find "${workingDirectory}" -maxdepth 1 \\( ${excludeArgs} -type d -print \\) 2>/dev/null | grep -v "^${workingDirectory}$" | head -10`;
65
+ }
66
+ else {
67
+ // Search for files matching the query (excluding common dirs)
68
+ searchCmd = `find "${workingDirectory}" \\( ${excludeArgs} -type f -name "*${query}*" -print \\) 2>/dev/null | head -20`;
69
+ dirSearchCmd = `find "${workingDirectory}" \\( ${excludeArgs} -type d -name "*${query}*" -print \\) 2>/dev/null | head -10`;
70
+ }
71
+ let fileResults = [];
72
+ let dirResults = [];
73
+ try {
74
+ fileResults = execSync(searchCmd, { encoding: 'utf-8' }).trim().split('\n').filter(Boolean);
75
+ }
76
+ catch { }
77
+ try {
78
+ dirResults = execSync(dirSearchCmd, { encoding: 'utf-8' }).trim().split('\n').filter(Boolean);
79
+ }
80
+ catch { }
81
+ const matches = [];
82
+ // Helper to check if path contains excluded directories
83
+ const isExcluded = (filepath) => {
84
+ const excludedPatterns = [
85
+ 'node_modules', '.git', 'dist', 'build', '.next', '.nuxt',
86
+ '.cache', 'coverage', '.vscode', '.idea', 'vendor', 'target',
87
+ '.pnpm-store', '__pycache__', '.pytest_cache', '.tox',
88
+ 'venv', '.venv', 'env', '.env'
89
+ ];
90
+ return excludedPatterns.some(pattern => filepath.includes(`/${pattern}/`) || filepath.endsWith(`/${pattern}`));
91
+ };
92
+ // Process directory matches
93
+ for (const dirPath of dirResults) {
94
+ if (isExcluded(dirPath))
95
+ continue;
96
+ const relativePath = path.relative(workingDirectory, dirPath);
97
+ if (relativePath && !relativePath.startsWith('..')) {
98
+ matches.push({
99
+ path: dirPath,
100
+ displayPath: relativePath + '/',
101
+ type: 'directory'
102
+ });
103
+ }
104
+ }
105
+ // Process file matches
106
+ for (const filePath of fileResults) {
107
+ if (isExcluded(filePath))
108
+ continue;
109
+ const relativePath = path.relative(workingDirectory, filePath);
110
+ if (relativePath && !relativePath.startsWith('..')) {
111
+ matches.push({
112
+ path: filePath,
113
+ displayPath: relativePath,
114
+ type: 'file'
115
+ });
116
+ }
117
+ }
118
+ // Sort by relevance
119
+ matches.sort((a, b) => {
120
+ const aScore = a.displayPath.length;
121
+ const bScore = b.displayPath.length;
122
+ return aScore - bScore;
123
+ });
124
+ setFileMatches(matches.slice(0, 10));
125
+ setSelectedMatchIndex(0);
126
+ }
127
+ catch (error) {
128
+ setFileMatches([]);
129
+ }
130
+ };
131
+ const insertText = (text, position) => {
132
+ const before = value.slice(0, position);
133
+ const after = value.slice(position);
134
+ const newValue = before + text + after;
135
+ onChange(newValue);
136
+ setCursorPosition(position + text.length);
137
+ };
138
+ const deleteText = (start, end) => {
139
+ const before = value.slice(0, start);
140
+ const after = value.slice(end);
141
+ const newValue = before + after;
142
+ onChange(newValue);
143
+ setCursorPosition(start);
144
+ };
145
+ const moveCursor = (position) => {
146
+ const clampedPosition = Math.max(0, Math.min(value.length, position));
147
+ setCursorPosition(clampedPosition);
148
+ };
149
+ const findWordBoundary = (text, position, direction) => {
150
+ const wordRegex = /\w/;
151
+ let pos = position;
152
+ if (direction === 'left') {
153
+ // Skip any non-word chars
154
+ while (pos > 0 && !wordRegex.test(text[pos - 1])) {
155
+ pos--;
156
+ }
157
+ // Skip the word
158
+ while (pos > 0 && wordRegex.test(text[pos - 1])) {
159
+ pos--;
160
+ }
161
+ }
162
+ else {
163
+ // Skip any non-word chars
164
+ while (pos < text.length && !wordRegex.test(text[pos])) {
165
+ pos++;
166
+ }
167
+ // Skip the word
168
+ while (pos < text.length && wordRegex.test(text[pos])) {
169
+ pos++;
170
+ }
171
+ }
172
+ return pos;
173
+ };
174
+ const completeFileReference = (match) => {
175
+ const before = value.slice(0, autocompleteStartPos);
176
+ const after = value.slice(cursorPosition);
177
+ const newValue = before + match.displayPath + after;
178
+ onChange(newValue);
179
+ setCursorPosition(autocompleteStartPos + match.displayPath.length);
180
+ setShowAutocomplete(false);
181
+ setAutocompleteQuery('');
182
+ };
183
+ useInput((input, key) => {
184
+ // Only handle input when active
185
+ if (!isActive)
186
+ return;
187
+ // Handle autocomplete navigation
188
+ if (showAutocomplete) {
189
+ if (key.escape) {
190
+ setShowAutocomplete(false);
191
+ setAutocompleteQuery('');
192
+ return;
193
+ }
194
+ else if (key.upArrow) {
195
+ setSelectedMatchIndex(Math.max(0, selectedMatchIndex - 1));
196
+ return;
197
+ }
198
+ else if (key.downArrow) {
199
+ setSelectedMatchIndex(Math.min(fileMatches.length - 1, selectedMatchIndex + 1));
200
+ return;
201
+ }
202
+ else if (key.return || key.tab) {
203
+ if (fileMatches.length > 0) {
204
+ completeFileReference(fileMatches[selectedMatchIndex]);
205
+ }
206
+ return;
207
+ }
208
+ }
209
+ // Handle special keys
210
+ if (key.escape) {
211
+ onCancel?.();
212
+ return;
213
+ }
214
+ if (key.return && !key.shift) {
215
+ onSubmit?.();
216
+ return;
217
+ }
218
+ if (key.return && key.shift) {
219
+ // Insert newline for multiline input
220
+ insertText('\n', cursorPosition);
221
+ return;
222
+ }
223
+ // Line navigation with up/down arrows (when not in autocomplete)
224
+ if (!showAutocomplete && key.upArrow) {
225
+ // Move cursor up one line
226
+ const lines = value.split('\n');
227
+ let currentPos = 0;
228
+ let lineIndex = 0;
229
+ let columnIndex = 0;
230
+ // Find current line and column
231
+ for (let i = 0; i < lines.length; i++) {
232
+ const lineLength = lines[i].length;
233
+ if (currentPos + lineLength >= cursorPosition) {
234
+ lineIndex = i;
235
+ columnIndex = cursorPosition - currentPos;
236
+ break;
237
+ }
238
+ currentPos += lineLength + 1; // +1 for newline
239
+ }
240
+ // Move to previous line if possible
241
+ if (lineIndex > 0) {
242
+ const prevLineLength = lines[lineIndex - 1].length;
243
+ const newColumn = Math.min(columnIndex, prevLineLength);
244
+ let newPos = 0;
245
+ for (let i = 0; i < lineIndex - 1; i++) {
246
+ newPos += lines[i].length + 1;
247
+ }
248
+ newPos += newColumn;
249
+ moveCursor(newPos);
250
+ }
251
+ return;
252
+ }
253
+ if (!showAutocomplete && key.downArrow) {
254
+ // Move cursor down one line
255
+ const lines = value.split('\n');
256
+ let currentPos = 0;
257
+ let lineIndex = 0;
258
+ let columnIndex = 0;
259
+ // Find current line and column
260
+ for (let i = 0; i < lines.length; i++) {
261
+ const lineLength = lines[i].length;
262
+ if (currentPos + lineLength >= cursorPosition) {
263
+ lineIndex = i;
264
+ columnIndex = cursorPosition - currentPos;
265
+ break;
266
+ }
267
+ currentPos += lineLength + 1; // +1 for newline
268
+ }
269
+ // Move to next line if possible
270
+ if (lineIndex < lines.length - 1) {
271
+ const nextLineLength = lines[lineIndex + 1].length;
272
+ const newColumn = Math.min(columnIndex, nextLineLength);
273
+ let newPos = 0;
274
+ for (let i = 0; i <= lineIndex; i++) {
275
+ newPos += lines[i].length + 1;
276
+ }
277
+ newPos += newColumn;
278
+ moveCursor(newPos);
279
+ }
280
+ else {
281
+ // At last line, move to end
282
+ moveCursor(value.length);
283
+ }
284
+ return;
285
+ }
286
+ // Cursor movement
287
+ if (key.leftArrow) {
288
+ if (key.meta || key.alt || key.option) {
289
+ // Move to previous word
290
+ const newPos = findWordBoundary(value, cursorPosition, 'left');
291
+ moveCursor(newPos);
292
+ }
293
+ else {
294
+ moveCursor(cursorPosition - 1);
295
+ }
296
+ return;
297
+ }
298
+ if (key.rightArrow) {
299
+ if (key.meta || key.alt || key.option) {
300
+ // Move to next word
301
+ const newPos = findWordBoundary(value, cursorPosition, 'right');
302
+ moveCursor(newPos);
303
+ }
304
+ else {
305
+ moveCursor(cursorPosition + 1);
306
+ }
307
+ return;
308
+ }
309
+ // Home/End keys - Ctrl+A / Ctrl+E
310
+ if (key.ctrl && input === 'a') {
311
+ moveCursor(0);
312
+ return;
313
+ }
314
+ if (key.ctrl && input === 'e') {
315
+ moveCursor(value.length);
316
+ return;
317
+ }
318
+ // Deletion
319
+ if (key.backspace || key.delete) {
320
+ if (key.meta || key.alt || key.option) {
321
+ // Delete word
322
+ const wordStart = findWordBoundary(value, cursorPosition, 'left');
323
+ deleteText(wordStart, cursorPosition);
324
+ }
325
+ else if (cursorPosition > 0) {
326
+ deleteText(cursorPosition - 1, cursorPosition);
327
+ }
328
+ return;
329
+ }
330
+ // Text input
331
+ if (input && !key.ctrl && !key.meta) {
332
+ // Check for @ symbol to trigger autocomplete
333
+ if (input === '@') {
334
+ setShowAutocomplete(true);
335
+ setAutocompleteStartPos(cursorPosition + 1);
336
+ setAutocompleteQuery('');
337
+ insertText(input, cursorPosition);
338
+ }
339
+ else if (showAutocomplete) {
340
+ // Update autocomplete query
341
+ insertText(input, cursorPosition);
342
+ const newQuery = value.slice(autocompleteStartPos, cursorPosition + 1) + input;
343
+ setAutocompleteQuery(newQuery);
344
+ }
345
+ else {
346
+ insertText(input, cursorPosition);
347
+ }
348
+ }
349
+ });
350
+ // Build display with cursor (handles multiline)
351
+ const getDisplayWithCursor = () => {
352
+ const before = value.slice(0, cursorPosition);
353
+ const after = value.slice(cursorPosition);
354
+ const cursorChar = after[0] || ' ';
355
+ const remaining = after.slice(1);
356
+ // For multiline, we need to handle newlines properly
357
+ const beforeLines = before.split('\n');
358
+ const cursorAndAfter = cursorChar + remaining;
359
+ const afterLines = cursorAndAfter.split('\n');
360
+ // If we have multiple lines, render them separately
361
+ if (beforeLines.length > 1 || afterLines.length > 1) {
362
+ return (React.createElement(Box, { flexDirection: "column" }, beforeLines.map((line, i) => {
363
+ if (i < beforeLines.length - 1) {
364
+ // Complete lines before cursor line
365
+ return React.createElement(Text, { key: `before-${i}` }, line);
366
+ }
367
+ else {
368
+ // Last line before cursor + cursor + first line after cursor
369
+ const firstAfterLine = afterLines[0];
370
+ const cursorIsNewline = cursorChar === '\n';
371
+ if (cursorIsNewline) {
372
+ // Cursor is on a newline
373
+ return (React.createElement(Box, { key: `cursor-line`, flexDirection: "column" },
374
+ React.createElement(Box, null,
375
+ React.createElement(Text, null, line),
376
+ React.createElement(Text, { inverse: true }, " ")),
377
+ afterLines.slice(1).map((afterLine, j) => (React.createElement(Text, { key: `after-${j}` }, afterLine)))));
378
+ }
379
+ else {
380
+ // Normal cursor in middle of text
381
+ const cursorLineChar = firstAfterLine[0] || ' ';
382
+ const restOfLine = firstAfterLine.slice(1);
383
+ return (React.createElement(Box, { key: `cursor-line`, flexDirection: "column" },
384
+ React.createElement(Box, null,
385
+ React.createElement(Text, null, line),
386
+ React.createElement(Text, { inverse: true }, cursorLineChar),
387
+ React.createElement(Text, null, restOfLine)),
388
+ afterLines.slice(1).map((afterLine, j) => (React.createElement(Text, { key: `after-${j}` }, afterLine)))));
389
+ }
390
+ }
391
+ })));
392
+ }
393
+ // Single line display
394
+ return (React.createElement(React.Fragment, null,
395
+ React.createElement(Text, null, before),
396
+ React.createElement(Text, { inverse: true }, cursorChar),
397
+ React.createElement(Text, null, remaining)));
398
+ };
399
+ return (React.createElement(Box, { flexDirection: "column" },
400
+ React.createElement(Box, null, value ? (getDisplayWithCursor()) : (React.createElement(React.Fragment, null,
401
+ React.createElement(Text, { inverse: true }, " "),
402
+ placeholder && React.createElement(Text, { dimColor: true }, placeholder)))),
403
+ showAutocomplete && fileMatches.length > 0 && (React.createElement(Box, { flexDirection: "column", marginTop: 1, borderStyle: "single", borderColor: "cyan", paddingX: 1 },
404
+ React.createElement(Text, { color: "cyan", dimColor: true }, autocompleteQuery ? `Files matching: @${autocompleteQuery}` : 'Files in current directory:'),
405
+ fileMatches.map((match, index) => (React.createElement(Box, { key: match.path },
406
+ React.createElement(Text, { color: index === selectedMatchIndex ? 'cyan' : 'gray' },
407
+ index === selectedMatchIndex ? '▶ ' : ' ',
408
+ match.displayPath)))),
409
+ React.createElement(Text, { dimColor: true, italic: true }, "\u2191\u2193 to select, Tab/Enter to complete, Esc to cancel")))));
410
+ };
411
+ export default SimpleEnhancedInput;
412
+ //# sourceMappingURL=SimpleEnhancedInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleEnhancedInput.js","sourceRoot":"","sources":["../src/SimpleEnhancedInput.tsx"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -49,12 +49,21 @@ class Dmux {
49
49
  console.log(chalk.yellow(`Creating new tmux session for project: ${this.projectName}...`));
50
50
  // Create new session first
51
51
  execSync(`tmux new-session -d -s ${this.sessionName}`, { stdio: 'inherit' });
52
+ // Set pane title for the main dmux pane
53
+ execSync(`tmux select-pane -t ${this.sessionName} -T "dmux-${this.projectName}"`, { stdio: 'inherit' });
52
54
  // Send dmux command to the new session
53
55
  execSync(`tmux send-keys -t ${this.sessionName} "dmux" Enter`, { stdio: 'inherit' });
54
56
  }
55
57
  execSync(`tmux attach-session -t ${this.sessionName}`, { stdio: 'inherit' });
56
58
  return;
57
59
  }
60
+ // Set pane title for the current pane running dmux
61
+ try {
62
+ execSync(`tmux select-pane -T "dmux-${this.projectName}"`, { stdio: 'pipe' });
63
+ }
64
+ catch {
65
+ // Ignore if it fails (might not have permission or tmux version doesn't support it)
66
+ }
58
67
  // Launch the Ink app
59
68
  render(React.createElement(DmuxApp, {
60
69
  dmuxDir: this.dmuxDir,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dmux",
3
- "version": "1.0.8",
3
+ "version": "1.2.0",
4
4
  "description": "Tmux pane manager with AI agent integration for parallel development workflows",
5
5
  "type": "module",
6
6
  "author": "Justin Schroeder",