@hexidecibel/companion 0.0.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.d.ts +2 -0
- package/dist/__tests__/task-parser.test.d.ts.map +1 -0
- package/dist/__tests__/task-parser.test.js +79 -0
- package/dist/__tests__/task-parser.test.js.map +1 -0
- package/dist/anthropic-usage.d.ts +5 -0
- package/dist/anthropic-usage.d.ts.map +1 -0
- package/dist/anthropic-usage.js +112 -0
- package/dist/anthropic-usage.js.map +1 -0
- package/dist/cert-generator.d.ts +15 -0
- package/dist/cert-generator.d.ts.map +1 -0
- package/dist/cert-generator.js +298 -0
- package/dist/cert-generator.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +122 -0
- package/dist/config.js.map +1 -0
- package/dist/encryption.d.ts +28 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +95 -0
- package/dist/encryption.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +211 -0
- package/dist/index.js.map +1 -0
- package/dist/input-injector.d.ts +21 -0
- package/dist/input-injector.d.ts.map +1 -0
- package/dist/input-injector.js +126 -0
- package/dist/input-injector.js.map +1 -0
- package/dist/mdns.d.ts +11 -0
- package/dist/mdns.d.ts.map +1 -0
- package/dist/mdns.js +93 -0
- package/dist/mdns.js.map +1 -0
- package/dist/parser.d.ts +43 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +800 -0
- package/dist/parser.js.map +1 -0
- package/dist/push.d.ts +38 -0
- package/dist/push.d.ts.map +1 -0
- package/dist/push.js +359 -0
- package/dist/push.js.map +1 -0
- package/dist/qr-server.d.ts +13 -0
- package/dist/qr-server.d.ts.map +1 -0
- package/dist/qr-server.js +421 -0
- package/dist/qr-server.js.map +1 -0
- package/dist/scaffold/generator.d.ts +11 -0
- package/dist/scaffold/generator.d.ts.map +1 -0
- package/dist/scaffold/generator.js +206 -0
- package/dist/scaffold/generator.js.map +1 -0
- package/dist/scaffold/templates/index.d.ts +5 -0
- package/dist/scaffold/templates/index.d.ts.map +1 -0
- package/dist/scaffold/templates/index.js +22 -0
- package/dist/scaffold/templates/index.js.map +1 -0
- package/dist/scaffold/templates/node-express.d.ts +3 -0
- package/dist/scaffold/templates/node-express.d.ts.map +1 -0
- package/dist/scaffold/templates/node-express.js +218 -0
- package/dist/scaffold/templates/node-express.js.map +1 -0
- package/dist/scaffold/templates/python-fastapi.d.ts +3 -0
- package/dist/scaffold/templates/python-fastapi.d.ts.map +1 -0
- package/dist/scaffold/templates/python-fastapi.js +302 -0
- package/dist/scaffold/templates/python-fastapi.js.map +1 -0
- package/dist/scaffold/templates/react-mui-website.d.ts +3 -0
- package/dist/scaffold/templates/react-mui-website.d.ts.map +1 -0
- package/dist/scaffold/templates/react-mui-website.js +405 -0
- package/dist/scaffold/templates/react-mui-website.js.map +1 -0
- package/dist/scaffold/templates/react-typescript.d.ts +3 -0
- package/dist/scaffold/templates/react-typescript.d.ts.map +1 -0
- package/dist/scaffold/templates/react-typescript.js +275 -0
- package/dist/scaffold/templates/react-typescript.js.map +1 -0
- package/dist/scaffold/types.d.ts +55 -0
- package/dist/scaffold/types.d.ts.map +1 -0
- package/dist/scaffold/types.js +3 -0
- package/dist/scaffold/types.js.map +1 -0
- package/dist/subagent-watcher.d.ts +24 -0
- package/dist/subagent-watcher.d.ts.map +1 -0
- package/dist/subagent-watcher.js +307 -0
- package/dist/subagent-watcher.js.map +1 -0
- package/dist/tls.d.ts +10 -0
- package/dist/tls.d.ts.map +1 -0
- package/dist/tls.js +77 -0
- package/dist/tls.js.map +1 -0
- package/dist/tmux-manager.d.ts +71 -0
- package/dist/tmux-manager.d.ts.map +1 -0
- package/dist/tmux-manager.js +243 -0
- package/dist/tmux-manager.js.map +1 -0
- package/dist/tool-config.d.ts +33 -0
- package/dist/tool-config.d.ts.map +1 -0
- package/dist/tool-config.js +211 -0
- package/dist/tool-config.js.map +1 -0
- package/dist/types.d.ts +218 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/watcher.d.ts +63 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +596 -0
- package/dist/watcher.js.map +1 -0
- package/dist/watcher.test.d.ts +2 -0
- package/dist/watcher.test.d.ts.map +1 -0
- package/dist/watcher.test.js +110 -0
- package/dist/watcher.test.js.map +1 -0
- package/dist/websocket.d.ts +62 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +1695 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +71 -0
- package/scripts/build.sh +23 -0
- package/scripts/install-remote.sh +18 -0
- package/scripts/install.sh +558 -0
- package/scripts/uninstall.sh +113 -0
|
@@ -0,0 +1,110 @@
|
|
|
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
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const fs = __importStar(require("fs"));
|
|
37
|
+
// Test the path decoding logic
|
|
38
|
+
// The problem: -Users-chriscushman-local-src-hexi-photo-gallery
|
|
39
|
+
// should decode to /Users/chriscushman/local/src/hexi-photo-gallery
|
|
40
|
+
// NOT /Users/chriscushman/local/src/hexi/photo/gallery
|
|
41
|
+
function smartDecodePath(encoded) {
|
|
42
|
+
const withoutLeading = encoded.replace(/^-/, '');
|
|
43
|
+
const parts = withoutLeading.split('-');
|
|
44
|
+
let currentPath = '';
|
|
45
|
+
let i = 0;
|
|
46
|
+
while (i < parts.length) {
|
|
47
|
+
const part = parts[i];
|
|
48
|
+
const testWithSlash = currentPath ? `${currentPath}/${part}` : `/${part}`;
|
|
49
|
+
let foundWithDash = false;
|
|
50
|
+
if (currentPath && i < parts.length) {
|
|
51
|
+
for (let j = i; j < parts.length; j++) {
|
|
52
|
+
const dashJoined = currentPath + '-' + parts.slice(i, j + 1).join('-');
|
|
53
|
+
console.log(` Trying dash join: ${dashJoined}`);
|
|
54
|
+
if (fs.existsSync(dashJoined) && fs.statSync(dashJoined).isDirectory()) {
|
|
55
|
+
console.log(` Found! ${dashJoined}`);
|
|
56
|
+
currentPath = dashJoined;
|
|
57
|
+
i = j + 1;
|
|
58
|
+
foundWithDash = true;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!foundWithDash) {
|
|
64
|
+
console.log(` Using slash: ${testWithSlash}`);
|
|
65
|
+
currentPath = testWithSlash;
|
|
66
|
+
i++;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
console.log(` Final path: ${currentPath}, exists: ${fs.existsSync(currentPath)}`);
|
|
70
|
+
if (!fs.existsSync(currentPath)) {
|
|
71
|
+
return '/' + withoutLeading.replace(/-/g, '/');
|
|
72
|
+
}
|
|
73
|
+
return currentPath;
|
|
74
|
+
}
|
|
75
|
+
// Run tests
|
|
76
|
+
console.log('Testing path decoding...\n');
|
|
77
|
+
const testCases = [
|
|
78
|
+
{
|
|
79
|
+
encoded: '-Users-chriscushman-local-src-hexi-photo-gallery',
|
|
80
|
+
expected: '/Users/chriscushman/local/src/hexi-photo-gallery',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
encoded: '-Users-chriscushman-local-src-claude-companion',
|
|
84
|
+
expected: '/Users/chriscushman/local/src/claude-companion',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
encoded: '-Users-chriscushman',
|
|
88
|
+
expected: '/Users/chriscushman',
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
let passed = 0;
|
|
92
|
+
let failed = 0;
|
|
93
|
+
for (const tc of testCases) {
|
|
94
|
+
console.log(`Testing: ${tc.encoded}`);
|
|
95
|
+
const result = smartDecodePath(tc.encoded);
|
|
96
|
+
const ok = result === tc.expected;
|
|
97
|
+
if (ok) {
|
|
98
|
+
console.log(`✓ PASS`);
|
|
99
|
+
passed++;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.log(`✗ FAIL`);
|
|
103
|
+
console.log(` Expected: ${tc.expected}`);
|
|
104
|
+
console.log(` Got: ${result}`);
|
|
105
|
+
failed++;
|
|
106
|
+
}
|
|
107
|
+
console.log();
|
|
108
|
+
}
|
|
109
|
+
console.log(`\nResults: ${passed} passed, ${failed} failed`);
|
|
110
|
+
//# sourceMappingURL=watcher.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.test.js","sourceRoot":"","sources":["../src/watcher.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Server } from 'http';
|
|
2
|
+
import { SessionWatcher } from './watcher';
|
|
3
|
+
import { InputInjector } from './input-injector';
|
|
4
|
+
import { PushNotificationService } from './push';
|
|
5
|
+
import { TmuxManager } from './tmux-manager';
|
|
6
|
+
import { DaemonConfig } from './types';
|
|
7
|
+
import { SubAgentWatcher } from './subagent-watcher';
|
|
8
|
+
export declare class WebSocketHandler {
|
|
9
|
+
private wss;
|
|
10
|
+
private clients;
|
|
11
|
+
private token;
|
|
12
|
+
private watcher;
|
|
13
|
+
private subAgentWatcher;
|
|
14
|
+
private injector;
|
|
15
|
+
private push;
|
|
16
|
+
private tmux;
|
|
17
|
+
private tmuxSessionConfigs;
|
|
18
|
+
private config;
|
|
19
|
+
private clientErrors;
|
|
20
|
+
private readonly MAX_CLIENT_ERRORS;
|
|
21
|
+
private scrollLogs;
|
|
22
|
+
private readonly MAX_SCROLL_LOGS;
|
|
23
|
+
autoApproveEnabled: boolean;
|
|
24
|
+
constructor(server: Server, config: DaemonConfig, watcher: SessionWatcher, injector: InputInjector, push: PushNotificationService, tmux?: TmuxManager, subAgentWatcher?: SubAgentWatcher);
|
|
25
|
+
private loadTmuxSessionConfigs;
|
|
26
|
+
private saveTmuxSessionConfigs;
|
|
27
|
+
private storeTmuxSessionConfig;
|
|
28
|
+
private handleConnection;
|
|
29
|
+
private handleMessage;
|
|
30
|
+
private handleSendInput;
|
|
31
|
+
private handleSendImage;
|
|
32
|
+
private handleUploadImage;
|
|
33
|
+
private handleSendWithImages;
|
|
34
|
+
/**
|
|
35
|
+
* Handle session switch synchronously - waits for tmux switch to complete
|
|
36
|
+
* before returning success. This prevents race conditions.
|
|
37
|
+
*/
|
|
38
|
+
private handleSwitchSession;
|
|
39
|
+
private handleRotateToken;
|
|
40
|
+
private handleListTmuxSessions;
|
|
41
|
+
private handleCreateTmuxSession;
|
|
42
|
+
private handleKillTmuxSession;
|
|
43
|
+
private handleSwitchTmuxSession;
|
|
44
|
+
private handleRecreateTmuxSession;
|
|
45
|
+
private handleBrowseDirectories;
|
|
46
|
+
private handleReadFile;
|
|
47
|
+
private handleDownloadFile;
|
|
48
|
+
private handleGetApiUsage;
|
|
49
|
+
private handleGetAgentTree;
|
|
50
|
+
private handleGetAgentDetail;
|
|
51
|
+
private handleClientError;
|
|
52
|
+
private handleGetClientErrors;
|
|
53
|
+
private handleScrollLog;
|
|
54
|
+
private handleGetScrollLogs;
|
|
55
|
+
private handleGetUsage;
|
|
56
|
+
private send;
|
|
57
|
+
private sendError;
|
|
58
|
+
private broadcast;
|
|
59
|
+
getConnectedClientCount(): number;
|
|
60
|
+
getAuthenticatedClientCount(): number;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,MAAM,EAAE,MAAM,MAAM,CAAC;AAM/C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAuC,YAAY,EAAqB,MAAM,SAAS,CAAC;AAI/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAyBrD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAM;IACxC,OAAO,CAAC,UAAU,CAAoE;IACtF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IAChC,kBAAkB,EAAE,OAAO,CAAS;gBAGzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,uBAAuB,EAC7B,IAAI,CAAC,EAAE,WAAW,EAClB,eAAe,CAAC,EAAE,eAAe;IAkDnC,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,aAAa;YA+hBP,eAAe;YAoDf,eAAe;YAmDf,iBAAiB;YA0CjB,oBAAoB;IAoDlC;;;OAGG;YACW,mBAAmB;IAiEjC,OAAO,CAAC,iBAAiB;YAgDX,sBAAsB;YA4BtB,uBAAuB;YAuEvB,qBAAqB;YA+CrB,uBAAuB;YA+EvB,yBAAyB;YAmFzB,uBAAuB;YA8DvB,cAAc;YAoHd,kBAAkB;YAkHlB,iBAAiB;IAoD/B,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,oBAAoB;IAsD5B,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,cAAc;IA+CtB,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,SAAS;IAqBjB,uBAAuB,IAAI,MAAM;IAIjC,2BAA2B,IAAI,MAAM;CAGtC"}
|