@hexidecibel/companion 0.0.1 → 0.1.1
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/__tests__/task-parser.test.js +29 -29
- package/dist/__tests__/task-parser.test.js.map +1 -1
- package/dist/anthropic-usage.d.ts.map +1 -1
- package/dist/anthropic-usage.js +1 -1
- package/dist/anthropic-usage.js.map +1 -1
- package/dist/cert-generator.d.ts.map +1 -1
- package/dist/cert-generator.js +4 -21
- package/dist/cert-generator.js.map +1 -1
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +413 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -7
- package/dist/config.js.map +1 -1
- package/dist/escalation.d.ts +51 -0
- package/dist/escalation.d.ts.map +1 -0
- package/dist/escalation.js +198 -0
- package/dist/escalation.js.map +1 -0
- package/dist/index.js +67 -30
- package/dist/index.js.map +1 -1
- package/dist/input-injector.d.ts.map +1 -1
- package/dist/input-injector.js +9 -5
- package/dist/input-injector.js.map +1 -1
- package/dist/notification-store.d.ts +35 -0
- package/dist/notification-store.d.ts.map +1 -0
- package/dist/notification-store.js +272 -0
- package/dist/notification-store.js.map +1 -0
- package/dist/parser.d.ts +15 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +106 -61
- package/dist/parser.js.map +1 -1
- package/dist/push.d.ts +18 -26
- package/dist/push.d.ts.map +1 -1
- package/dist/push.js +90 -184
- package/dist/push.js.map +1 -1
- package/dist/qr-server.d.ts.map +1 -1
- package/dist/qr-server.js +159 -139
- package/dist/qr-server.js.map +1 -1
- package/dist/rules-engine.d.ts +20 -0
- package/dist/rules-engine.d.ts.map +1 -0
- package/dist/rules-engine.js +71 -0
- package/dist/rules-engine.js.map +1 -0
- package/dist/scaffold/claude-commands.d.ts +18 -0
- package/dist/scaffold/claude-commands.d.ts.map +1 -0
- package/dist/scaffold/claude-commands.js +352 -0
- package/dist/scaffold/claude-commands.js.map +1 -0
- package/dist/scaffold/generator.d.ts.map +1 -1
- package/dist/scaffold/generator.js +26 -1
- package/dist/scaffold/generator.js.map +1 -1
- package/dist/scaffold/scorer.d.ts +19 -0
- package/dist/scaffold/scorer.d.ts.map +1 -0
- package/dist/scaffold/scorer.js +92 -0
- package/dist/scaffold/scorer.js.map +1 -0
- package/dist/scaffold/templates/go-cli.d.ts +3 -0
- package/dist/scaffold/templates/go-cli.d.ts.map +1 -0
- package/dist/scaffold/templates/go-cli.js +249 -0
- package/dist/scaffold/templates/go-cli.js.map +1 -0
- package/dist/scaffold/templates/index.d.ts.map +1 -1
- package/dist/scaffold/templates/index.js +8 -2
- package/dist/scaffold/templates/index.js.map +1 -1
- package/dist/scaffold/templates/nextjs.d.ts +3 -0
- package/dist/scaffold/templates/nextjs.d.ts.map +1 -0
- package/dist/scaffold/templates/nextjs.js +336 -0
- package/dist/scaffold/templates/nextjs.js.map +1 -0
- package/dist/scaffold/templates/node-express.d.ts.map +1 -1
- package/dist/scaffold/templates/node-express.js +170 -157
- package/dist/scaffold/templates/node-express.js.map +1 -1
- package/dist/scaffold/templates/python-fastapi.d.ts.map +1 -1
- package/dist/scaffold/templates/python-fastapi.js +234 -221
- package/dist/scaffold/templates/python-fastapi.js.map +1 -1
- package/dist/scaffold/templates/react-mui-website.d.ts.map +1 -1
- package/dist/scaffold/templates/react-mui-website.js +337 -324
- package/dist/scaffold/templates/react-mui-website.js.map +1 -1
- package/dist/scaffold/templates/react-typescript.d.ts.map +1 -1
- package/dist/scaffold/templates/react-typescript.js +219 -206
- package/dist/scaffold/templates/react-typescript.js.map +1 -1
- package/dist/scaffold/templates/typescript-library.d.ts +3 -0
- package/dist/scaffold/templates/typescript-library.d.ts.map +1 -0
- package/dist/scaffold/templates/typescript-library.js +241 -0
- package/dist/scaffold/templates/typescript-library.js.map +1 -0
- package/dist/scaffold/types.d.ts +7 -0
- package/dist/scaffold/types.d.ts.map +1 -1
- package/dist/subagent-watcher.d.ts.map +1 -1
- package/dist/subagent-watcher.js +3 -3
- package/dist/subagent-watcher.js.map +1 -1
- package/dist/tmux-manager.d.ts +37 -0
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +165 -5
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tool-config.d.ts.map +1 -1
- package/dist/tool-config.js +2 -2
- package/dist/tool-config.js.map +1 -1
- package/dist/types.d.ts +85 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -1
- package/dist/watcher.d.ts +7 -0
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +118 -9
- package/dist/watcher.js.map +1 -1
- package/dist/websocket.d.ts +16 -2
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +758 -117
- package/dist/websocket.js.map +1 -1
- package/dist/work-group-manager.d.ts +69 -0
- package/dist/work-group-manager.d.ts.map +1 -0
- package/dist/work-group-manager.js +610 -0
- package/dist/work-group-manager.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.typescriptLibraryTemplate = void 0;
|
|
4
|
+
exports.typescriptLibraryTemplate = {
|
|
5
|
+
id: 'typescript-library',
|
|
6
|
+
name: 'TypeScript Library',
|
|
7
|
+
description: 'Publishable npm package with tsup bundler and vitest',
|
|
8
|
+
type: 'library',
|
|
9
|
+
icon: '📦',
|
|
10
|
+
tags: ['typescript', 'npm', 'library', 'package', 'tsup'],
|
|
11
|
+
scoring: {
|
|
12
|
+
primaryKeywords: ['npm', 'package', 'library', 'module', 'tsup'],
|
|
13
|
+
secondaryKeywords: ['publish', 'bundle', 'sdk', 'utility', 'reusable', 'export'],
|
|
14
|
+
useCases: [
|
|
15
|
+
'npm package',
|
|
16
|
+
'typescript library',
|
|
17
|
+
'utility package',
|
|
18
|
+
'npm utility',
|
|
19
|
+
'shared library',
|
|
20
|
+
'sdk package',
|
|
21
|
+
],
|
|
22
|
+
typeSignals: { library: 3, package: 3, npm: 3, sdk: 2, module: 2, utility: 1 },
|
|
23
|
+
},
|
|
24
|
+
files: [
|
|
25
|
+
{
|
|
26
|
+
path: 'package.json',
|
|
27
|
+
template: `{
|
|
28
|
+
"name": "{{projectName}}",
|
|
29
|
+
"version": "0.1.0",
|
|
30
|
+
"description": "{{projectDescription}}",
|
|
31
|
+
"main": "./dist/index.js",
|
|
32
|
+
"module": "./dist/index.mjs",
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"exports": {
|
|
35
|
+
".": {
|
|
36
|
+
"import": "./dist/index.mjs",
|
|
37
|
+
"require": "./dist/index.js",
|
|
38
|
+
"types": "./dist/index.d.ts"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"files": ["dist"],
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsup",
|
|
44
|
+
"dev": "tsup --watch",
|
|
45
|
+
"test": "vitest",
|
|
46
|
+
"test:run": "vitest run",
|
|
47
|
+
"lint": "eslint src/",
|
|
48
|
+
"typecheck": "tsc --noEmit",
|
|
49
|
+
"prepublishOnly": "npm run build"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"eslint": "^9.13.0",
|
|
53
|
+
"tsup": "^8.3.0",
|
|
54
|
+
"typescript": "^5.6.3",
|
|
55
|
+
"vitest": "^2.1.4"
|
|
56
|
+
},
|
|
57
|
+
"keywords": [],
|
|
58
|
+
"license": "MIT"
|
|
59
|
+
}`,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
path: 'tsconfig.json',
|
|
63
|
+
template: `{
|
|
64
|
+
"compilerOptions": {
|
|
65
|
+
"target": "ES2020",
|
|
66
|
+
"module": "ESNext",
|
|
67
|
+
"moduleResolution": "bundler",
|
|
68
|
+
"declaration": true,
|
|
69
|
+
"declarationMap": true,
|
|
70
|
+
"sourceMap": true,
|
|
71
|
+
"outDir": "./dist",
|
|
72
|
+
"rootDir": "./src",
|
|
73
|
+
"strict": true,
|
|
74
|
+
"esModuleInterop": true,
|
|
75
|
+
"skipLibCheck": true,
|
|
76
|
+
"forceConsistentCasingInFileNames": true,
|
|
77
|
+
"resolveJsonModule": true,
|
|
78
|
+
"isolatedModules": true
|
|
79
|
+
},
|
|
80
|
+
"include": ["src"],
|
|
81
|
+
"exclude": ["node_modules", "dist", "**/*.test.ts"]
|
|
82
|
+
}`,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
path: 'tsup.config.ts',
|
|
86
|
+
template: `import { defineConfig } from 'tsup';
|
|
87
|
+
|
|
88
|
+
export default defineConfig({
|
|
89
|
+
entry: ['src/index.ts'],
|
|
90
|
+
format: ['cjs', 'esm'],
|
|
91
|
+
dts: true,
|
|
92
|
+
clean: true,
|
|
93
|
+
sourcemap: true,
|
|
94
|
+
});`,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
path: 'src/index.ts',
|
|
98
|
+
template: `/**
|
|
99
|
+
* {{projectName}}
|
|
100
|
+
* {{projectDescription}}
|
|
101
|
+
*/
|
|
102
|
+
|
|
103
|
+
export { greet } from './greet';
|
|
104
|
+
export type { GreetOptions } from './greet';`,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
path: 'src/greet.ts',
|
|
108
|
+
template: `export interface GreetOptions {
|
|
109
|
+
name: string;
|
|
110
|
+
greeting?: string;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Generate a greeting message.
|
|
115
|
+
*/
|
|
116
|
+
export function greet(options: GreetOptions): string {
|
|
117
|
+
const { name, greeting = 'Hello' } = options;
|
|
118
|
+
return \`\${greeting}, \${name}!\`;
|
|
119
|
+
}`,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
path: 'src/__tests__/greet.test.ts',
|
|
123
|
+
template: `import { describe, it, expect } from 'vitest';
|
|
124
|
+
import { greet } from '../greet';
|
|
125
|
+
|
|
126
|
+
describe('greet', () => {
|
|
127
|
+
it('returns default greeting', () => {
|
|
128
|
+
expect(greet({ name: 'World' })).toBe('Hello, World!');
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('uses custom greeting', () => {
|
|
132
|
+
expect(greet({ name: 'World', greeting: 'Hi' })).toBe('Hi, World!');
|
|
133
|
+
});
|
|
134
|
+
});`,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
path: '.gitignore',
|
|
138
|
+
template: `# Dependencies
|
|
139
|
+
node_modules
|
|
140
|
+
|
|
141
|
+
# Build
|
|
142
|
+
dist
|
|
143
|
+
|
|
144
|
+
# Coverage
|
|
145
|
+
coverage
|
|
146
|
+
|
|
147
|
+
# Editor
|
|
148
|
+
.vscode/*
|
|
149
|
+
!.vscode/extensions.json
|
|
150
|
+
.idea
|
|
151
|
+
|
|
152
|
+
# Logs
|
|
153
|
+
*.log
|
|
154
|
+
npm-debug.log*
|
|
155
|
+
|
|
156
|
+
# OS
|
|
157
|
+
.DS_Store`,
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
path: 'CLAUDE.md',
|
|
161
|
+
template: `# {{projectName}}
|
|
162
|
+
|
|
163
|
+
{{projectDescription}}
|
|
164
|
+
|
|
165
|
+
## Tech Stack
|
|
166
|
+
- TypeScript with strict mode
|
|
167
|
+
- tsup for bundling (CJS + ESM)
|
|
168
|
+
- vitest for testing
|
|
169
|
+
|
|
170
|
+
## Project Structure
|
|
171
|
+
\`\`\`
|
|
172
|
+
src/
|
|
173
|
+
├── index.ts # Public API exports
|
|
174
|
+
├── greet.ts # Example module
|
|
175
|
+
└── __tests__/
|
|
176
|
+
└── greet.test.ts # Tests
|
|
177
|
+
\`\`\`
|
|
178
|
+
|
|
179
|
+
## Commands
|
|
180
|
+
- \`npm run build\` - Build with tsup (CJS + ESM + types)
|
|
181
|
+
- \`npm run dev\` - Watch mode
|
|
182
|
+
- \`npm test\` - Run tests in watch mode
|
|
183
|
+
- \`npm run test:run\` - Run tests once
|
|
184
|
+
- \`npm run typecheck\` - Type check
|
|
185
|
+
- \`npm run lint\` - Lint
|
|
186
|
+
|
|
187
|
+
## Development Notes
|
|
188
|
+
- Export all public API from \`src/index.ts\`
|
|
189
|
+
- Add new modules in \`src/\`
|
|
190
|
+
- Add tests in \`src/__tests__/\`
|
|
191
|
+
- Package supports both CJS and ESM consumers
|
|
192
|
+
- Run \`npm publish\` to publish (builds automatically via prepublishOnly)`,
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
path: 'README.md',
|
|
196
|
+
template: `# {{projectName}}
|
|
197
|
+
|
|
198
|
+
{{projectDescription}}
|
|
199
|
+
|
|
200
|
+
## Install
|
|
201
|
+
|
|
202
|
+
\`\`\`bash
|
|
203
|
+
npm install {{projectName}}
|
|
204
|
+
\`\`\`
|
|
205
|
+
|
|
206
|
+
## Usage
|
|
207
|
+
|
|
208
|
+
\`\`\`typescript
|
|
209
|
+
import { greet } from '{{projectName}}';
|
|
210
|
+
|
|
211
|
+
console.log(greet({ name: 'World' }));
|
|
212
|
+
// => "Hello, World!"
|
|
213
|
+
\`\`\`
|
|
214
|
+
|
|
215
|
+
## API
|
|
216
|
+
|
|
217
|
+
### \`greet(options)\`
|
|
218
|
+
|
|
219
|
+
Generate a greeting message.
|
|
220
|
+
|
|
221
|
+
- \`options.name\` - Name to greet (required)
|
|
222
|
+
- \`options.greeting\` - Custom greeting prefix (default: "Hello")
|
|
223
|
+
|
|
224
|
+
## Development
|
|
225
|
+
|
|
226
|
+
\`\`\`bash
|
|
227
|
+
npm install
|
|
228
|
+
npm test
|
|
229
|
+
npm run build
|
|
230
|
+
\`\`\``,
|
|
231
|
+
},
|
|
232
|
+
],
|
|
233
|
+
postCreate: [
|
|
234
|
+
{
|
|
235
|
+
command: 'npm install',
|
|
236
|
+
description: 'Installing dependencies',
|
|
237
|
+
},
|
|
238
|
+
],
|
|
239
|
+
recommendedSkills: ['test', 'build'],
|
|
240
|
+
};
|
|
241
|
+
//# sourceMappingURL=typescript-library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-library.js","sourceRoot":"","sources":["../../../src/scaffold/templates/typescript-library.ts"],"names":[],"mappings":";;;AAEa,QAAA,yBAAyB,GAAkB;IACtD,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,sDAAsD;IACnE,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IACzD,OAAO,EAAE;QACP,eAAe,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;QAChE,iBAAiB,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;QAChF,QAAQ,EAAE;YACR,aAAa;YACb,oBAAoB;YACpB,iBAAiB;YACjB,aAAa;YACb,gBAAgB;YAChB,aAAa;SACd;QACD,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;KAC/E;IACD,KAAK,EAAE;QACL;YACE,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCd;SACG;QACD;YACE,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;EAmBd;SACG;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE;;;;;;;;IAQZ;SACC;QACD;YACE,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE;;;;;;6CAM6B;SACxC;QACD;YACE,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE;;;;;;;;;;;EAWd;SACG;QACD;YACE,IAAI,EAAE,6BAA6B;YACnC,QAAQ,EAAE;;;;;;;;;;;IAWZ;SACC;QACD;YACE,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;UAmBN;SACL;QACD;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2EA+B2D;SACtE;QACD;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCT;SACF;KACF;IACD,UAAU,EAAE;QACV;YACE,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,yBAAyB;SACvC;KACF;IACD,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;CACrC,CAAC"}
|
package/dist/scaffold/types.d.ts
CHANGED
|
@@ -8,6 +8,12 @@ export interface ScaffoldFile {
|
|
|
8
8
|
path: string;
|
|
9
9
|
content: string;
|
|
10
10
|
}
|
|
11
|
+
export interface TemplateScoring {
|
|
12
|
+
primaryKeywords: string[];
|
|
13
|
+
secondaryKeywords: string[];
|
|
14
|
+
useCases: string[];
|
|
15
|
+
typeSignals: Record<string, number>;
|
|
16
|
+
}
|
|
11
17
|
export interface StackTemplate {
|
|
12
18
|
id: string;
|
|
13
19
|
name: string;
|
|
@@ -15,6 +21,7 @@ export interface StackTemplate {
|
|
|
15
21
|
type: 'frontend' | 'backend' | 'fullstack' | 'library' | 'cli';
|
|
16
22
|
icon: string;
|
|
17
23
|
tags: string[];
|
|
24
|
+
scoring?: TemplateScoring;
|
|
18
25
|
files: {
|
|
19
26
|
path: string;
|
|
20
27
|
template: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scaffold/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;IAC/D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scaffold/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;IAC/D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAGD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IAEJ,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;IAEJ,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAGD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,WAAW,EAAE,OAAO,CAAC;QACrB,aAAa,EAAE,OAAO,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;CACH;AAGD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-watcher.d.ts","sourceRoot":"","sources":["../src/subagent-watcher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AA+BrE,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,eAAe,CAA+B;gBAE1C,QAAQ,EAAE,MAAM;IAM5B,OAAO,CAAC,OAAO;IAcf,KAAK,IAAI,IAAI;IA8Bb,IAAI,IAAI,IAAI;IAWZ,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"subagent-watcher.d.ts","sourceRoot":"","sources":["../src/subagent-watcher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AA+BrE,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,eAAe,CAA+B;gBAE1C,QAAQ,EAAE,MAAM;IAM5B,OAAO,CAAC,OAAO;IAcf,KAAK,IAAI,IAAI;IA8Bb,IAAI,IAAI,IAAI;IAWZ,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,iBAAiB;IA8FzB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS;IAwD3C,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE;IAIlD;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG;QAC/B,KAAK,EAAE,QAAQ,CAAC;QAChB,UAAU,EAAE,qBAAqB,EAAE,CAAC;KACrC,GAAG,IAAI;CAyCT"}
|
package/dist/subagent-watcher.js
CHANGED
|
@@ -126,7 +126,7 @@ class SubAgentWatcher extends events_1.EventEmitter {
|
|
|
126
126
|
if (!fs.existsSync(filePath))
|
|
127
127
|
return null;
|
|
128
128
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
129
|
-
const lines = content.split('\n').filter(line => line.trim());
|
|
129
|
+
const lines = content.split('\n').filter((line) => line.trim());
|
|
130
130
|
if (lines.length === 0)
|
|
131
131
|
return null;
|
|
132
132
|
let agentId = '';
|
|
@@ -135,7 +135,7 @@ class SubAgentWatcher extends events_1.EventEmitter {
|
|
|
135
135
|
let startedAt = 0;
|
|
136
136
|
let completedAt;
|
|
137
137
|
let description = '';
|
|
138
|
-
|
|
138
|
+
const subagentType = '';
|
|
139
139
|
let messageCount = 0;
|
|
140
140
|
let lastActivity = 0;
|
|
141
141
|
let lastContent = '';
|
|
@@ -157,7 +157,7 @@ class SubAgentWatcher extends events_1.EventEmitter {
|
|
|
157
157
|
messageCount++;
|
|
158
158
|
const content = typeof entry.message.content === 'string'
|
|
159
159
|
? entry.message.content
|
|
160
|
-
: entry.message.content.map(c => c.text || '').join('');
|
|
160
|
+
: entry.message.content.map((c) => c.text || '').join('');
|
|
161
161
|
if (!description && content) {
|
|
162
162
|
// Use first 100 chars of first user message as description
|
|
163
163
|
description = content.substring(0, 100);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-watcher.js","sourceRoot":"","sources":["../src/subagent-watcher.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"subagent-watcher.js","sourceRoot":"","sources":["../src/subagent-watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/tmux-manager.d.ts
CHANGED
|
@@ -5,6 +5,17 @@ export interface TmuxSessionInfo {
|
|
|
5
5
|
windows: number;
|
|
6
6
|
workingDir?: string;
|
|
7
7
|
}
|
|
8
|
+
export interface WorktreeInfo {
|
|
9
|
+
path: string;
|
|
10
|
+
branch: string;
|
|
11
|
+
isMain: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface WorktreeResult {
|
|
14
|
+
success: boolean;
|
|
15
|
+
worktreePath?: string;
|
|
16
|
+
branch?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
8
19
|
export declare class TmuxManager {
|
|
9
20
|
private sessionPrefix;
|
|
10
21
|
constructor(sessionPrefix?: string);
|
|
@@ -42,6 +53,12 @@ export declare class TmuxManager {
|
|
|
42
53
|
* Send input to a specific session
|
|
43
54
|
*/
|
|
44
55
|
sendKeys(sessionName: string, keys: string): Promise<boolean>;
|
|
56
|
+
/**
|
|
57
|
+
* Send raw (non-literal) keys to a tmux session.
|
|
58
|
+
* Unlike sendKeys() which uses -l for literal text, this sends key names
|
|
59
|
+
* directly so tmux interprets them (e.g. "Up", "Down", "C-c", "Enter").
|
|
60
|
+
*/
|
|
61
|
+
sendRawKeys(sessionName: string, keys: string[]): Promise<boolean>;
|
|
45
62
|
/**
|
|
46
63
|
* Send Enter key to a session
|
|
47
64
|
*/
|
|
@@ -67,5 +84,25 @@ export declare class TmuxManager {
|
|
|
67
84
|
* Generate a unique session name based on directory
|
|
68
85
|
*/
|
|
69
86
|
generateSessionName(workingDir: string): string;
|
|
87
|
+
/**
|
|
88
|
+
* Check if a directory is a git repository
|
|
89
|
+
*/
|
|
90
|
+
isGitRepo(dir: string): Promise<boolean>;
|
|
91
|
+
/**
|
|
92
|
+
* Create a git worktree from a repository directory.
|
|
93
|
+
* Returns the path to the new worktree and the branch name.
|
|
94
|
+
*/
|
|
95
|
+
createWorktree(repoDir: string, branchName?: string): Promise<WorktreeResult>;
|
|
96
|
+
/**
|
|
97
|
+
* Remove a git worktree and its directory.
|
|
98
|
+
*/
|
|
99
|
+
removeWorktree(repoDir: string, worktreePath: string): Promise<{
|
|
100
|
+
success: boolean;
|
|
101
|
+
error?: string;
|
|
102
|
+
}>;
|
|
103
|
+
/**
|
|
104
|
+
* List all worktrees for a git repository.
|
|
105
|
+
*/
|
|
106
|
+
listWorktrees(dir: string): Promise<WorktreeInfo[]>;
|
|
70
107
|
}
|
|
71
108
|
//# sourceMappingURL=tmux-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-manager.d.ts","sourceRoot":"","sources":["../src/tmux-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tmux-manager.d.ts","sourceRoot":"","sources":["../src/tmux-manager.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,GAAE,MAAoB;IAI/C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAwChD;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASnD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhD;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9C;;OAEG;IACG,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAoChD;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAsC9E;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBnE;;;;OAIG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBxE;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUtD;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1D;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAc1D;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;;OAGG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAW5E;;OAEG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAS/C;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9C;;;OAGG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA2BnF;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAUhD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CA8C1D"}
|
package/dist/tmux-manager.js
CHANGED
|
@@ -1,8 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.TmuxManager = void 0;
|
|
4
37
|
const child_process_1 = require("child_process");
|
|
5
38
|
const util_1 = require("util");
|
|
39
|
+
const path = __importStar(require("path"));
|
|
6
40
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
7
41
|
class TmuxManager {
|
|
8
42
|
sessionPrefix;
|
|
@@ -101,7 +135,7 @@ class TmuxManager {
|
|
|
101
135
|
// Start CLI in the session if requested
|
|
102
136
|
if (startCli) {
|
|
103
137
|
// Small delay to let the session initialize
|
|
104
|
-
await new Promise(resolve => setTimeout(resolve, 200));
|
|
138
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
105
139
|
// Send the CLI command
|
|
106
140
|
await execAsync(`tmux send-keys -t "${safeName}" "claude" Enter`);
|
|
107
141
|
console.log(`TmuxManager: Started CLI in session "${safeName}"`);
|
|
@@ -123,15 +157,15 @@ class TmuxManager {
|
|
|
123
157
|
try {
|
|
124
158
|
// Send Ctrl+C to interrupt any running operation
|
|
125
159
|
await execAsync(`tmux send-keys -t "${name}" C-c`);
|
|
126
|
-
await new Promise(resolve => setTimeout(resolve, 300));
|
|
160
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
127
161
|
// Send Ctrl+D to exit gracefully (preferred over "exit")
|
|
128
162
|
await execAsync(`tmux send-keys -t "${name}" C-d`);
|
|
129
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
163
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
130
164
|
// If still alive, try "exit" command
|
|
131
165
|
const stillAlive = await this.sessionExists(name);
|
|
132
166
|
if (stillAlive) {
|
|
133
167
|
await execAsync(`tmux send-keys -t "${name}" "exit" Enter`);
|
|
134
|
-
await new Promise(resolve => setTimeout(resolve, 500));
|
|
168
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
135
169
|
}
|
|
136
170
|
}
|
|
137
171
|
catch {
|
|
@@ -172,6 +206,28 @@ class TmuxManager {
|
|
|
172
206
|
return false;
|
|
173
207
|
}
|
|
174
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Send raw (non-literal) keys to a tmux session.
|
|
211
|
+
* Unlike sendKeys() which uses -l for literal text, this sends key names
|
|
212
|
+
* directly so tmux interprets them (e.g. "Up", "Down", "C-c", "Enter").
|
|
213
|
+
*/
|
|
214
|
+
async sendRawKeys(sessionName, keys) {
|
|
215
|
+
try {
|
|
216
|
+
for (const key of keys) {
|
|
217
|
+
// Validate key contains only safe characters (alphanumeric, dash, plus for combos like C-c)
|
|
218
|
+
if (!/^[a-zA-Z0-9\-+]+$/.test(key)) {
|
|
219
|
+
console.error(`TmuxManager: Rejecting unsafe raw key: "${key}"`);
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
await execAsync(`tmux send-keys -t "${sessionName}" ${key}`);
|
|
223
|
+
}
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
console.error(`TmuxManager: Failed to send raw keys to "${sessionName}":`, err);
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
175
231
|
/**
|
|
176
232
|
* Send Enter key to a session
|
|
177
233
|
*/
|
|
@@ -204,7 +260,10 @@ class TmuxManager {
|
|
|
204
260
|
async listDirectories(basePath) {
|
|
205
261
|
try {
|
|
206
262
|
const { stdout } = await execAsync(`find "${basePath}" -maxdepth 1 -type d 2>/dev/null | head -50`);
|
|
207
|
-
return stdout
|
|
263
|
+
return stdout
|
|
264
|
+
.trim()
|
|
265
|
+
.split('\n')
|
|
266
|
+
.filter((d) => d && d !== basePath);
|
|
208
267
|
}
|
|
209
268
|
catch {
|
|
210
269
|
return [];
|
|
@@ -238,6 +297,107 @@ class TmuxManager {
|
|
|
238
297
|
const timestamp = Date.now().toString(36);
|
|
239
298
|
return `${this.sessionPrefix}-${safeName}-${timestamp}`;
|
|
240
299
|
}
|
|
300
|
+
// --- Git Worktree Support ---
|
|
301
|
+
/**
|
|
302
|
+
* Check if a directory is a git repository
|
|
303
|
+
*/
|
|
304
|
+
async isGitRepo(dir) {
|
|
305
|
+
try {
|
|
306
|
+
await execAsync('git rev-parse --is-inside-work-tree', { cwd: dir });
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Create a git worktree from a repository directory.
|
|
315
|
+
* Returns the path to the new worktree and the branch name.
|
|
316
|
+
*/
|
|
317
|
+
async createWorktree(repoDir, branchName) {
|
|
318
|
+
// Verify it's a git repo
|
|
319
|
+
if (!(await this.isGitRepo(repoDir))) {
|
|
320
|
+
return { success: false, error: 'not a git repository' };
|
|
321
|
+
}
|
|
322
|
+
// Get the git root (in case repoDir is a subdirectory)
|
|
323
|
+
const { stdout: gitRoot } = await execAsync('git rev-parse --show-toplevel', { cwd: repoDir });
|
|
324
|
+
const rootDir = gitRoot.trim();
|
|
325
|
+
// Generate branch name if not provided
|
|
326
|
+
const branch = branchName || `wt-${Date.now().toString(36)}`;
|
|
327
|
+
const safeBranch = branch.replace(/[^a-zA-Z0-9_-]/g, '-');
|
|
328
|
+
// Worktree path: sibling directory named <repo>-wt-<branch>
|
|
329
|
+
const repoName = path.basename(rootDir);
|
|
330
|
+
const worktreePath = path.join(path.dirname(rootDir), `${repoName}-wt-${safeBranch}`);
|
|
331
|
+
try {
|
|
332
|
+
await execAsync(`git worktree add "${worktreePath}" -b "${safeBranch}"`, { cwd: rootDir });
|
|
333
|
+
return { success: true, worktreePath, branch: safeBranch };
|
|
334
|
+
}
|
|
335
|
+
catch (err) {
|
|
336
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
337
|
+
return { success: false, error: message };
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Remove a git worktree and its directory.
|
|
342
|
+
*/
|
|
343
|
+
async removeWorktree(repoDir, worktreePath) {
|
|
344
|
+
try {
|
|
345
|
+
await execAsync(`git worktree remove "${worktreePath}" --force`, { cwd: repoDir });
|
|
346
|
+
return { success: true };
|
|
347
|
+
}
|
|
348
|
+
catch (err) {
|
|
349
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
350
|
+
return { success: false, error: message };
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* List all worktrees for a git repository.
|
|
355
|
+
*/
|
|
356
|
+
async listWorktrees(dir) {
|
|
357
|
+
if (!(await this.isGitRepo(dir))) {
|
|
358
|
+
return [];
|
|
359
|
+
}
|
|
360
|
+
try {
|
|
361
|
+
const { stdout } = await execAsync('git worktree list --porcelain', { cwd: dir });
|
|
362
|
+
const worktrees = [];
|
|
363
|
+
let current = {};
|
|
364
|
+
for (const line of stdout.split('\n')) {
|
|
365
|
+
if (line.startsWith('worktree ')) {
|
|
366
|
+
if (current.path) {
|
|
367
|
+
worktrees.push(current);
|
|
368
|
+
}
|
|
369
|
+
current = { path: line.replace('worktree ', ''), isMain: false };
|
|
370
|
+
}
|
|
371
|
+
else if (line.startsWith('branch ')) {
|
|
372
|
+
// branch refs/heads/main → main
|
|
373
|
+
const ref = line.replace('branch ', '');
|
|
374
|
+
current.branch = ref.replace('refs/heads/', '');
|
|
375
|
+
}
|
|
376
|
+
else if (line === 'bare') {
|
|
377
|
+
current.isMain = true;
|
|
378
|
+
}
|
|
379
|
+
else if (line === '') {
|
|
380
|
+
// Empty line ends a worktree entry
|
|
381
|
+
if (current.path) {
|
|
382
|
+
worktrees.push({
|
|
383
|
+
path: current.path,
|
|
384
|
+
branch: current.branch || 'HEAD',
|
|
385
|
+
isMain: current.isMain || false,
|
|
386
|
+
});
|
|
387
|
+
current = {};
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
// Mark the first worktree as main (it's the original repo)
|
|
392
|
+
if (worktrees.length > 0) {
|
|
393
|
+
worktrees[0].isMain = true;
|
|
394
|
+
}
|
|
395
|
+
return worktrees;
|
|
396
|
+
}
|
|
397
|
+
catch {
|
|
398
|
+
return [];
|
|
399
|
+
}
|
|
400
|
+
}
|
|
241
401
|
}
|
|
242
402
|
exports.TmuxManager = TmuxManager;
|
|
243
403
|
//# sourceMappingURL=tmux-manager.js.map
|