@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.
Files changed (109) hide show
  1. package/dist/__tests__/task-parser.test.d.ts +2 -0
  2. package/dist/__tests__/task-parser.test.d.ts.map +1 -0
  3. package/dist/__tests__/task-parser.test.js +79 -0
  4. package/dist/__tests__/task-parser.test.js.map +1 -0
  5. package/dist/anthropic-usage.d.ts +5 -0
  6. package/dist/anthropic-usage.d.ts.map +1 -0
  7. package/dist/anthropic-usage.js +112 -0
  8. package/dist/anthropic-usage.js.map +1 -0
  9. package/dist/cert-generator.d.ts +15 -0
  10. package/dist/cert-generator.d.ts.map +1 -0
  11. package/dist/cert-generator.js +298 -0
  12. package/dist/cert-generator.js.map +1 -0
  13. package/dist/config.d.ts +4 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +122 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/encryption.d.ts +28 -0
  18. package/dist/encryption.d.ts.map +1 -0
  19. package/dist/encryption.js +95 -0
  20. package/dist/encryption.js.map +1 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +211 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/input-injector.d.ts +21 -0
  26. package/dist/input-injector.d.ts.map +1 -0
  27. package/dist/input-injector.js +126 -0
  28. package/dist/input-injector.js.map +1 -0
  29. package/dist/mdns.d.ts +11 -0
  30. package/dist/mdns.d.ts.map +1 -0
  31. package/dist/mdns.js +93 -0
  32. package/dist/mdns.js.map +1 -0
  33. package/dist/parser.d.ts +43 -0
  34. package/dist/parser.d.ts.map +1 -0
  35. package/dist/parser.js +800 -0
  36. package/dist/parser.js.map +1 -0
  37. package/dist/push.d.ts +38 -0
  38. package/dist/push.d.ts.map +1 -0
  39. package/dist/push.js +359 -0
  40. package/dist/push.js.map +1 -0
  41. package/dist/qr-server.d.ts +13 -0
  42. package/dist/qr-server.d.ts.map +1 -0
  43. package/dist/qr-server.js +421 -0
  44. package/dist/qr-server.js.map +1 -0
  45. package/dist/scaffold/generator.d.ts +11 -0
  46. package/dist/scaffold/generator.d.ts.map +1 -0
  47. package/dist/scaffold/generator.js +206 -0
  48. package/dist/scaffold/generator.js.map +1 -0
  49. package/dist/scaffold/templates/index.d.ts +5 -0
  50. package/dist/scaffold/templates/index.d.ts.map +1 -0
  51. package/dist/scaffold/templates/index.js +22 -0
  52. package/dist/scaffold/templates/index.js.map +1 -0
  53. package/dist/scaffold/templates/node-express.d.ts +3 -0
  54. package/dist/scaffold/templates/node-express.d.ts.map +1 -0
  55. package/dist/scaffold/templates/node-express.js +218 -0
  56. package/dist/scaffold/templates/node-express.js.map +1 -0
  57. package/dist/scaffold/templates/python-fastapi.d.ts +3 -0
  58. package/dist/scaffold/templates/python-fastapi.d.ts.map +1 -0
  59. package/dist/scaffold/templates/python-fastapi.js +302 -0
  60. package/dist/scaffold/templates/python-fastapi.js.map +1 -0
  61. package/dist/scaffold/templates/react-mui-website.d.ts +3 -0
  62. package/dist/scaffold/templates/react-mui-website.d.ts.map +1 -0
  63. package/dist/scaffold/templates/react-mui-website.js +405 -0
  64. package/dist/scaffold/templates/react-mui-website.js.map +1 -0
  65. package/dist/scaffold/templates/react-typescript.d.ts +3 -0
  66. package/dist/scaffold/templates/react-typescript.d.ts.map +1 -0
  67. package/dist/scaffold/templates/react-typescript.js +275 -0
  68. package/dist/scaffold/templates/react-typescript.js.map +1 -0
  69. package/dist/scaffold/types.d.ts +55 -0
  70. package/dist/scaffold/types.d.ts.map +1 -0
  71. package/dist/scaffold/types.js +3 -0
  72. package/dist/scaffold/types.js.map +1 -0
  73. package/dist/subagent-watcher.d.ts +24 -0
  74. package/dist/subagent-watcher.d.ts.map +1 -0
  75. package/dist/subagent-watcher.js +307 -0
  76. package/dist/subagent-watcher.js.map +1 -0
  77. package/dist/tls.d.ts +10 -0
  78. package/dist/tls.d.ts.map +1 -0
  79. package/dist/tls.js +77 -0
  80. package/dist/tls.js.map +1 -0
  81. package/dist/tmux-manager.d.ts +71 -0
  82. package/dist/tmux-manager.d.ts.map +1 -0
  83. package/dist/tmux-manager.js +243 -0
  84. package/dist/tmux-manager.js.map +1 -0
  85. package/dist/tool-config.d.ts +33 -0
  86. package/dist/tool-config.d.ts.map +1 -0
  87. package/dist/tool-config.js +211 -0
  88. package/dist/tool-config.js.map +1 -0
  89. package/dist/types.d.ts +218 -0
  90. package/dist/types.d.ts.map +1 -0
  91. package/dist/types.js +3 -0
  92. package/dist/types.js.map +1 -0
  93. package/dist/watcher.d.ts +63 -0
  94. package/dist/watcher.d.ts.map +1 -0
  95. package/dist/watcher.js +596 -0
  96. package/dist/watcher.js.map +1 -0
  97. package/dist/watcher.test.d.ts +2 -0
  98. package/dist/watcher.test.d.ts.map +1 -0
  99. package/dist/watcher.test.js +110 -0
  100. package/dist/watcher.test.js.map +1 -0
  101. package/dist/websocket.d.ts +62 -0
  102. package/dist/websocket.d.ts.map +1 -0
  103. package/dist/websocket.js +1695 -0
  104. package/dist/websocket.js.map +1 -0
  105. package/package.json +71 -0
  106. package/scripts/build.sh +23 -0
  107. package/scripts/install-remote.sh +18 -0
  108. package/scripts/install.sh +558 -0
  109. 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"}