@quantiya/codevibe-codex-plugin 1.0.6 → 1.0.8

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 (66) hide show
  1. package/README.md +59 -106
  2. package/dist/server.js +22 -1051
  3. package/package.json +10 -12
  4. package/dist/approval-detector.d.ts +0 -38
  5. package/dist/approval-detector.d.ts.map +0 -1
  6. package/dist/approval-detector.js +0 -174
  7. package/dist/approval-detector.js.map +0 -1
  8. package/dist/appsync-client.d.ts +0 -69
  9. package/dist/appsync-client.d.ts.map +0 -1
  10. package/dist/appsync-client.js +0 -937
  11. package/dist/appsync-client.js.map +0 -1
  12. package/dist/auth-cli.d.ts +0 -11
  13. package/dist/auth-cli.d.ts.map +0 -1
  14. package/dist/auth-cli.js +0 -241
  15. package/dist/auth-cli.js.map +0 -1
  16. package/dist/config.d.ts +0 -29
  17. package/dist/config.d.ts.map +0 -1
  18. package/dist/config.js +0 -116
  19. package/dist/config.js.map +0 -1
  20. package/dist/crypto-service.d.ts +0 -115
  21. package/dist/crypto-service.d.ts.map +0 -1
  22. package/dist/crypto-service.js +0 -278
  23. package/dist/crypto-service.js.map +0 -1
  24. package/dist/event-mapper.d.ts +0 -39
  25. package/dist/event-mapper.d.ts.map +0 -1
  26. package/dist/event-mapper.js +0 -302
  27. package/dist/event-mapper.js.map +0 -1
  28. package/dist/key-manager.d.ts +0 -87
  29. package/dist/key-manager.d.ts.map +0 -1
  30. package/dist/key-manager.js +0 -287
  31. package/dist/key-manager.js.map +0 -1
  32. package/dist/logger.d.ts +0 -2
  33. package/dist/logger.d.ts.map +0 -1
  34. package/dist/logger.js +0 -18
  35. package/dist/logger.js.map +0 -1
  36. package/dist/prompt-parser.d.ts +0 -3
  37. package/dist/prompt-parser.d.ts.map +0 -1
  38. package/dist/prompt-parser.js +0 -8
  39. package/dist/prompt-parser.js.map +0 -1
  40. package/dist/prompt-responder.d.ts +0 -18
  41. package/dist/prompt-responder.d.ts.map +0 -1
  42. package/dist/prompt-responder.js +0 -78
  43. package/dist/prompt-responder.js.map +0 -1
  44. package/dist/server.d.ts +0 -8
  45. package/dist/server.d.ts.map +0 -1
  46. package/dist/server.js.map +0 -1
  47. package/dist/session-id-cache.d.ts +0 -16
  48. package/dist/session-id-cache.d.ts.map +0 -1
  49. package/dist/session-id-cache.js +0 -90
  50. package/dist/session-id-cache.js.map +0 -1
  51. package/dist/session-log-watcher.d.ts +0 -61
  52. package/dist/session-log-watcher.d.ts.map +0 -1
  53. package/dist/session-log-watcher.js +0 -372
  54. package/dist/session-log-watcher.js.map +0 -1
  55. package/dist/tmux-pane-observer.d.ts +0 -39
  56. package/dist/tmux-pane-observer.d.ts.map +0 -1
  57. package/dist/tmux-pane-observer.js +0 -255
  58. package/dist/tmux-pane-observer.js.map +0 -1
  59. package/dist/token-storage.d.ts +0 -39
  60. package/dist/token-storage.d.ts.map +0 -1
  61. package/dist/token-storage.js +0 -169
  62. package/dist/token-storage.js.map +0 -1
  63. package/dist/types.d.ts +0 -158
  64. package/dist/types.d.ts.map +0 -1
  65. package/dist/types.js +0 -17
  66. package/dist/types.js.map +0 -1
@@ -1,278 +0,0 @@
1
- "use strict";
2
- //
3
- // crypto-service.ts
4
- // CodeVibe Codex Plugin
5
- //
6
- // End-to-end encryption service using ECDH P-256 and AES-256-GCM
7
- //
8
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
- if (k2 === undefined) k2 = k;
10
- var desc = Object.getOwnPropertyDescriptor(m, k);
11
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
- desc = { enumerable: true, get: function() { return m[k]; } };
13
- }
14
- Object.defineProperty(o, k2, desc);
15
- }) : (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- }));
19
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
- Object.defineProperty(o, "default", { enumerable: true, value: v });
21
- }) : function(o, v) {
22
- o["default"] = v;
23
- });
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.cryptoService = exports.CryptoService = exports.ENCRYPTION_VERSION = exports.CryptoError = void 0;
43
- const crypto = __importStar(require("crypto"));
44
- // Errors that can occur during cryptographic operations
45
- class CryptoError extends Error {
46
- constructor(message) {
47
- super(message);
48
- this.name = 'CryptoError';
49
- }
50
- }
51
- exports.CryptoError = CryptoError;
52
- // Current encryption version for future algorithm upgrades
53
- exports.ENCRYPTION_VERSION = 1;
54
- // HKDF info string for key derivation
55
- const HKDF_INFO = 'CodeVibe E2E v1';
56
- /**
57
- * Service for end-to-end encryption operations
58
- */
59
- class CryptoService {
60
- constructor() { }
61
- static getInstance() {
62
- if (!CryptoService.instance) {
63
- CryptoService.instance = new CryptoService();
64
- }
65
- return CryptoService.instance;
66
- }
67
- // MARK: - Key Generation
68
- /**
69
- * Generate a new ECDH P-256 key pair
70
- * @returns Object with privateKey (PEM), publicKey (base64 raw)
71
- */
72
- generateKeyPair() {
73
- const ecdh = crypto.createECDH('prime256v1');
74
- ecdh.generateKeys();
75
- // Get raw public key (uncompressed format without 0x04 prefix for compatibility)
76
- const publicKeyRaw = ecdh.getPublicKey();
77
- const publicKeyBase64 = publicKeyRaw.subarray(1).toString('base64'); // Skip 0x04 prefix
78
- // Get private key as raw bytes
79
- const privateKeyRaw = ecdh.getPrivateKey();
80
- const privateKeyBase64 = privateKeyRaw.toString('base64');
81
- return {
82
- privateKey: privateKeyBase64,
83
- publicKey: publicKeyBase64,
84
- };
85
- }
86
- /**
87
- * Generate a random 256-bit session key
88
- * @returns Base64-encoded session key
89
- */
90
- generateSessionKey() {
91
- const keyData = crypto.randomBytes(32); // 256 bits
92
- return keyData.toString('base64');
93
- }
94
- // MARK: - Key Derivation
95
- /**
96
- * Derive a shared secret using ECDH and HKDF
97
- * @param privateKeyBase64 Our private key (base64)
98
- * @param publicKeyBase64 Other party's public key (base64)
99
- * @returns 256-bit derived key as Buffer
100
- */
101
- deriveSharedKey(privateKeyBase64, publicKeyBase64) {
102
- try {
103
- const ecdh = crypto.createECDH('prime256v1');
104
- const privateKeyRaw = Buffer.from(privateKeyBase64, 'base64');
105
- ecdh.setPrivateKey(privateKeyRaw);
106
- // Add 0x04 prefix for uncompressed public key format
107
- const publicKeyRaw = Buffer.concat([
108
- Buffer.from([0x04]),
109
- Buffer.from(publicKeyBase64, 'base64'),
110
- ]);
111
- const sharedSecret = ecdh.computeSecret(publicKeyRaw);
112
- // Derive key using HKDF-SHA256
113
- const derivedKey = crypto.hkdfSync('sha256', sharedSecret, Buffer.alloc(0), // Empty salt
114
- Buffer.from(HKDF_INFO, 'utf8'), 32 // 256 bits
115
- );
116
- return Buffer.from(derivedKey);
117
- }
118
- catch (error) {
119
- throw new CryptoError(`Failed to derive shared key: ${error}`);
120
- }
121
- }
122
- // MARK: - Session Key Encryption
123
- /**
124
- * Encrypt a session key for a target device using ECDH
125
- * @param sessionKeyBase64 The session key to encrypt (base64)
126
- * @param targetPublicKeyBase64 Target device's public key (base64)
127
- * @returns EncryptedSessionKey containing encrypted key and ephemeral public key
128
- */
129
- encryptSessionKey(sessionKeyBase64, targetPublicKeyBase64) {
130
- // Generate ephemeral key pair for this encryption
131
- const ephemeralKeyPair = this.generateKeyPair();
132
- // Derive shared key using ephemeral private + target public
133
- const sharedKey = this.deriveSharedKey(ephemeralKeyPair.privateKey, targetPublicKeyBase64);
134
- // Encrypt session key with derived key
135
- const sessionKeyData = Buffer.from(sessionKeyBase64, 'base64');
136
- const encryptedData = this.encrypt(sessionKeyData, sharedKey);
137
- return {
138
- encryptedKey: encryptedData.toString('base64'),
139
- ephemeralPublicKey: ephemeralKeyPair.publicKey,
140
- };
141
- }
142
- /**
143
- * Decrypt a session key using our private key
144
- * @param encryptedSessionKey The encrypted session key data
145
- * @param privateKeyBase64 Our device's private key (base64)
146
- * @returns Decrypted session key (base64)
147
- */
148
- decryptSessionKey(encryptedSessionKey, privateKeyBase64) {
149
- // Derive shared key using our private + ephemeral public
150
- const sharedKey = this.deriveSharedKey(privateKeyBase64, encryptedSessionKey.ephemeralPublicKey);
151
- // Decrypt session key
152
- const encryptedData = Buffer.from(encryptedSessionKey.encryptedKey, 'base64');
153
- const decryptedData = this.decrypt(encryptedData, sharedKey);
154
- return decryptedData.toString('base64');
155
- }
156
- // MARK: - Content Encryption/Decryption
157
- /**
158
- * Encrypt content using AES-256-GCM
159
- * @param content String content to encrypt
160
- * @param sessionKeyBase64 Session key (base64)
161
- * @returns Base64-encoded ciphertext (nonce + ciphertext + tag)
162
- */
163
- encryptContent(content, sessionKeyBase64) {
164
- const sessionKey = Buffer.from(sessionKeyBase64, 'base64');
165
- const contentData = Buffer.from(content, 'utf8');
166
- const encryptedData = this.encrypt(contentData, sessionKey);
167
- return encryptedData.toString('base64');
168
- }
169
- /**
170
- * Decrypt content using AES-256-GCM
171
- * @param encryptedContent Base64-encoded ciphertext
172
- * @param sessionKeyBase64 Session key (base64)
173
- * @returns Decrypted string content
174
- */
175
- decryptContent(encryptedContent, sessionKeyBase64) {
176
- const sessionKey = Buffer.from(sessionKeyBase64, 'base64');
177
- const encryptedData = Buffer.from(encryptedContent, 'base64');
178
- const decryptedData = this.decrypt(encryptedData, sessionKey);
179
- return decryptedData.toString('utf8');
180
- }
181
- /**
182
- * Encrypt JSON-serializable metadata
183
- * @param metadata Object to encrypt
184
- * @param sessionKeyBase64 Session key (base64)
185
- * @returns Base64-encoded encrypted JSON
186
- */
187
- encryptMetadata(metadata, sessionKeyBase64) {
188
- const jsonString = JSON.stringify(metadata);
189
- return this.encryptContent(jsonString, sessionKeyBase64);
190
- }
191
- /**
192
- * Decrypt encrypted metadata
193
- * @param encryptedMetadata Base64-encoded encrypted JSON
194
- * @param sessionKeyBase64 Session key (base64)
195
- * @returns Decrypted object
196
- */
197
- decryptMetadata(encryptedMetadata, sessionKeyBase64) {
198
- const jsonString = this.decryptContent(encryptedMetadata, sessionKeyBase64);
199
- return JSON.parse(jsonString);
200
- }
201
- // MARK: - Binary Data Encryption (for attachments)
202
- /**
203
- * Encrypt binary data using AES-256-GCM
204
- * @param data Binary data to encrypt (Buffer)
205
- * @param sessionKeyBase64 Session key (base64)
206
- * @returns Encrypted data (Buffer containing nonce + ciphertext + tag)
207
- */
208
- encryptData(data, sessionKeyBase64) {
209
- const sessionKey = Buffer.from(sessionKeyBase64, 'base64');
210
- return this.encrypt(data, sessionKey);
211
- }
212
- /**
213
- * Decrypt binary data using AES-256-GCM
214
- * @param encryptedData Encrypted data (Buffer containing nonce + ciphertext + tag)
215
- * @param sessionKeyBase64 Session key (base64)
216
- * @returns Decrypted binary data (Buffer)
217
- */
218
- decryptData(encryptedData, sessionKeyBase64) {
219
- const sessionKey = Buffer.from(sessionKeyBase64, 'base64');
220
- return this.decrypt(encryptedData, sessionKey);
221
- }
222
- // MARK: - Low-level Encryption
223
- /**
224
- * Encrypt data using AES-256-GCM
225
- * @param data Data to encrypt
226
- * @param key Symmetric key (32 bytes)
227
- * @returns Combined nonce + ciphertext + tag
228
- */
229
- encrypt(data, key) {
230
- // Generate random 12-byte nonce (IV)
231
- const nonce = crypto.randomBytes(12);
232
- const cipher = crypto.createCipheriv('aes-256-gcm', key, nonce);
233
- const ciphertext = Buffer.concat([cipher.update(data), cipher.final()]);
234
- const tag = cipher.getAuthTag();
235
- // Combine: nonce (12 bytes) + ciphertext + tag (16 bytes)
236
- return Buffer.concat([nonce, ciphertext, tag]);
237
- }
238
- /**
239
- * Decrypt data using AES-256-GCM
240
- * @param data Combined nonce + ciphertext + tag
241
- * @param key Symmetric key (32 bytes)
242
- * @returns Decrypted data
243
- */
244
- decrypt(data, key) {
245
- // Extract: nonce (12 bytes) + ciphertext + tag (16 bytes)
246
- const nonce = data.subarray(0, 12);
247
- const tag = data.subarray(data.length - 16);
248
- const ciphertext = data.subarray(12, data.length - 16);
249
- const decipher = crypto.createDecipheriv('aes-256-gcm', key, nonce);
250
- decipher.setAuthTag(tag);
251
- try {
252
- const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
253
- return decrypted;
254
- }
255
- catch (error) {
256
- throw new CryptoError('Decryption failed: Invalid ciphertext or authentication tag');
257
- }
258
- }
259
- // MARK: - Key Serialization
260
- /**
261
- * Serialize a private key for storage
262
- * Note: Private key is already base64 from generateKeyPair
263
- */
264
- serializePrivateKey(privateKeyBase64) {
265
- return privateKeyBase64;
266
- }
267
- /**
268
- * Deserialize a private key from storage
269
- * Note: Private key is already base64
270
- */
271
- deserializePrivateKey(base64) {
272
- return base64;
273
- }
274
- }
275
- exports.CryptoService = CryptoService;
276
- // Export singleton instance
277
- exports.cryptoService = CryptoService.getInstance();
278
- //# sourceMappingURL=crypto-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto-service.js","sourceRoot":"","sources":["../src/crypto-service.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,oBAAoB;AACpB,wBAAwB;AACxB,EAAE;AACF,iEAAiE;AACjE,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,+CAAiC;AAGjC,wDAAwD;AACxD,MAAa,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AALD,kCAKC;AAED,2DAA2D;AAC9C,QAAA,kBAAkB,GAAG,CAAC,CAAC;AAEpC,sCAAsC;AACtC,MAAM,SAAS,GAAG,iBAAiB,CAAC;AAEpC;;GAEG;AACH,MAAa,aAAa;IAGxB,gBAAuB,CAAC;IAExB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,yBAAyB;IAEzB;;;OAGG;IACH,eAAe;QACb,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,iFAAiF;QACjF,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,eAAe,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB;QAExF,+BAA+B;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE1D,OAAO;YACL,UAAU,EAAE,gBAAgB;YAC5B,SAAS,EAAE,eAAe;SAC3B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,kBAAkB;QAChB,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;QACnD,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,yBAAyB;IAEzB;;;;;OAKG;IACH,eAAe,CAAC,gBAAwB,EAAE,eAAuB;QAC/D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YAC9D,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;YAElC,qDAAqD;YACrD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;aACvC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAEtD,+BAA+B;YAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAChC,QAAQ,EACR,YAAY,EACZ,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa;YAC9B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAC9B,EAAE,CAAC,WAAW;aACf,CAAC;YAEF,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,WAAW,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,iCAAiC;IAEjC;;;;;OAKG;IACH,iBAAiB,CACf,gBAAwB,EACxB,qBAA6B;QAE7B,kDAAkD;QAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEhD,4DAA4D;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CACpC,gBAAgB,CAAC,UAAU,EAC3B,qBAAqB,CACtB,CAAC;QAEF,uCAAuC;QACvC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAE9D,OAAO;YACL,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC9C,kBAAkB,EAAE,gBAAgB,CAAC,SAAS;SAC/C,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CACf,mBAAwC,EACxC,gBAAwB;QAExB,yDAAyD;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CACpC,gBAAgB,EAChB,mBAAmB,CAAC,kBAAkB,CACvC,CAAC;QAEF,sBAAsB;QACtB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAE7D,OAAO,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,wCAAwC;IAExC;;;;;OAKG;IACH,cAAc,CAAC,OAAe,EAAE,gBAAwB;QACtD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC5D,OAAO,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,gBAAwB,EAAE,gBAAwB;QAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC9D,OAAO,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACH,eAAe,CACb,QAA6B,EAC7B,gBAAwB;QAExB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACH,eAAe,CACb,iBAAyB,EACzB,gBAAwB;QAExB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,mDAAmD;IAEnD;;;;;OAKG;IACH,WAAW,CAAC,IAAY,EAAE,gBAAwB;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,aAAqB,EAAE,gBAAwB;QACzD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,+BAA+B;IAE/B;;;;;OAKG;IACK,OAAO,CAAC,IAAY,EAAE,GAAW;QACvC,qCAAqC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAEhC,0DAA0D;QAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IAED;;;;;OAKG;IACK,OAAO,CAAC,IAAY,EAAE,GAAW;QACvC,0DAA0D;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAEvD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACpE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACjF,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,WAAW,CAAC,6DAA6D,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,4BAA4B;IAE5B;;;OAGG;IACH,mBAAmB,CAAC,gBAAwB;QAC1C,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,MAAc;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AApRD,sCAoRC;AAED,4BAA4B;AACf,QAAA,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC"}
@@ -1,39 +0,0 @@
1
- import { CreateEventInput } from '@quantiya/codevibe-core';
2
- import { CodexLogEntry } from './types';
3
- /**
4
- * Map a Codex log entry to a CodeVibe event
5
- * Returns null if the entry should not be synced
6
- */
7
- export declare function mapLogEntryToEvent(entry: CodexLogEntry, sessionId: string): CreateEventInput | null;
8
- /**
9
- * Extract old and new strings from a Codex apply_patch payload.
10
- * Parses unified-diff-style hunks into old/new content for iOS diff preview.
11
- */
12
- export declare function extractOldNewFromPatch(patch: string): {
13
- oldString: string;
14
- newString: string;
15
- };
16
- /**
17
- * Extract file path from patch content
18
- * Patch format: *** Begin Patch\n*** Update File: path\n...
19
- */
20
- export declare function extractFileFromPatch(input: string): {
21
- filePath: string;
22
- } | null;
23
- /**
24
- * Clear pending calls (call on session end)
25
- */
26
- export declare function clearPendingCalls(): void;
27
- /**
28
- * Get count of pending calls (for approval detection)
29
- */
30
- export declare function getPendingCallsCount(): number;
31
- /**
32
- * Get pending call info by ID
33
- */
34
- export declare function getPendingCall(callId: string): {
35
- name: string;
36
- input: string;
37
- eventId: string;
38
- } | undefined;
39
- //# sourceMappingURL=event-mapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-mapper.d.ts","sourceRoot":"","sources":["../src/event-mapper.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAexC;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,GAChB,gBAAgB,GAAG,IAAI,CA6LzB;AA2CD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAwB9F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU/E;AAWD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAE3G"}
@@ -1,302 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mapLogEntryToEvent = mapLogEntryToEvent;
4
- exports.extractOldNewFromPatch = extractOldNewFromPatch;
5
- exports.extractFileFromPatch = extractFileFromPatch;
6
- exports.clearPendingCalls = clearPendingCalls;
7
- exports.getPendingCallsCount = getPendingCallsCount;
8
- exports.getPendingCall = getPendingCall;
9
- const uuid_1 = require("uuid");
10
- const codevibe_core_1 = require("@quantiya/codevibe-core");
11
- const logger_1 = require("./logger");
12
- /**
13
- * Maps Codex JSONL log entries to CodeVibe events
14
- *
15
- * Codex log entry types:
16
- * - session_meta: Session metadata (handled by watcher)
17
- * - event_msg: User/agent messages, reasoning, token counts
18
- * - response_item: Function calls and outputs
19
- * - turn_context: Turn metadata (ignored)
20
- */
21
- // Track pending function calls to match with outputs
22
- const pendingCalls = new Map();
23
- /**
24
- * Map a Codex log entry to a CodeVibe event
25
- * Returns null if the entry should not be synced
26
- */
27
- function mapLogEntryToEvent(entry, sessionId) {
28
- const base = {
29
- sessionId,
30
- source: codevibe_core_1.EventSource.DESKTOP,
31
- };
32
- // Handle event_msg types
33
- if (entry.type === 'event_msg' && entry.payload) {
34
- const payloadType = entry.payload.type;
35
- switch (payloadType) {
36
- case 'user_message':
37
- return {
38
- ...base,
39
- type: codevibe_core_1.EventType.USER_PROMPT,
40
- content: entry.payload.message || '',
41
- metadata: {
42
- images: entry.payload.images || [],
43
- },
44
- };
45
- case 'agent_message':
46
- return {
47
- ...base,
48
- type: codevibe_core_1.EventType.ASSISTANT_RESPONSE,
49
- content: entry.payload.message || '',
50
- };
51
- case 'agent_reasoning':
52
- // Send as REASONING event type for visual indicator in iOS
53
- return {
54
- ...base,
55
- type: codevibe_core_1.EventType.REASONING,
56
- content: entry.payload.text || '',
57
- };
58
- case 'token_count':
59
- // Skip token counts - could be used for metadata updates
60
- logger_1.logger.debug('Skipping token_count entry');
61
- return null;
62
- default:
63
- logger_1.logger.debug('Unknown event_msg type', { type: payloadType });
64
- return null;
65
- }
66
- }
67
- // Handle response_item types (tool calls)
68
- if (entry.type === 'response_item' && entry.payload) {
69
- const itemType = entry.payload.type;
70
- // Function call start (shell commands, etc.)
71
- if (itemType === 'function_call') {
72
- const { name, arguments: args, call_id } = entry.payload;
73
- // Parse arguments
74
- let parsedArgs = {};
75
- try {
76
- parsedArgs = JSON.parse(args || '{}');
77
- }
78
- catch {
79
- parsedArgs = { raw: args };
80
- }
81
- // Generate event ID so we can update it later
82
- const eventId = (0, uuid_1.v4)();
83
- // Store for matching with output
84
- pendingCalls.set(call_id, {
85
- name,
86
- input: args,
87
- eventId,
88
- });
89
- // Map tool name to friendly name
90
- const toolName = mapToolName(name);
91
- const content = formatToolCallContent(name, parsedArgs);
92
- return {
93
- ...base,
94
- type: codevibe_core_1.EventType.TOOL_USE,
95
- content,
96
- metadata: {
97
- toolName,
98
- toolInput: parsedArgs,
99
- callId: call_id,
100
- status: 'running',
101
- },
102
- };
103
- }
104
- // Function call output
105
- if (itemType === 'function_call_output') {
106
- const { call_id, output } = entry.payload;
107
- const pending = pendingCalls.get(call_id);
108
- pendingCalls.delete(call_id);
109
- const toolName = pending?.name ? mapToolName(pending.name) : 'Tool';
110
- const truncatedOutput = truncateOutput(output, 500);
111
- return {
112
- ...base,
113
- type: codevibe_core_1.EventType.TOOL_USE,
114
- content: `${toolName} completed:\n${truncatedOutput}`,
115
- metadata: {
116
- toolName,
117
- toolOutput: output,
118
- callId: call_id,
119
- status: 'completed',
120
- },
121
- };
122
- }
123
- // Custom tool call (file edits with apply_patch)
124
- if (itemType === 'custom_tool_call') {
125
- const { name, call_id, input, status } = entry.payload;
126
- // Store for matching with output
127
- pendingCalls.set(call_id, {
128
- name,
129
- input,
130
- eventId: (0, uuid_1.v4)(),
131
- });
132
- // Parse the patch to extract file info and diff content
133
- const fileInfo = extractFileFromPatch(input);
134
- const { oldString, newString } = extractOldNewFromPatch(input);
135
- const content = fileInfo
136
- ? `Editing: ${fileInfo.filePath}`
137
- : `Applying patch`;
138
- return {
139
- ...base,
140
- type: codevibe_core_1.EventType.TOOL_USE,
141
- content,
142
- metadata: {
143
- tool_name: 'Edit',
144
- tool_input: {
145
- file_path: fileInfo?.filePath || '',
146
- old_string: oldString,
147
- new_string: newString,
148
- },
149
- callId: call_id,
150
- status: status || 'running',
151
- },
152
- };
153
- }
154
- // Custom tool call output
155
- if (itemType === 'custom_tool_call_output') {
156
- const { call_id, output } = entry.payload;
157
- const pending = pendingCalls.get(call_id);
158
- pendingCalls.delete(call_id);
159
- // Parse output JSON
160
- let parsedOutput = {};
161
- try {
162
- parsedOutput = JSON.parse(output || '{}');
163
- }
164
- catch {
165
- parsedOutput = { raw: output };
166
- }
167
- const success = parsedOutput.output?.includes('Success') || !parsedOutput.error;
168
- return {
169
- ...base,
170
- type: codevibe_core_1.EventType.TOOL_USE,
171
- content: success ? 'File edit applied successfully' : `Edit failed: ${parsedOutput.error || 'Unknown error'}`,
172
- metadata: {
173
- toolName: 'Edit',
174
- toolOutput: parsedOutput,
175
- callId: call_id,
176
- status: 'completed',
177
- success,
178
- },
179
- };
180
- }
181
- logger_1.logger.debug('Unknown response_item type', { type: itemType });
182
- return null;
183
- }
184
- // Skip turn_context and other types
185
- if (entry.type === 'turn_context') {
186
- logger_1.logger.debug('Skipping turn_context entry');
187
- return null;
188
- }
189
- logger_1.logger.debug('Unhandled log entry type', { type: entry.type });
190
- return null;
191
- }
192
- /**
193
- * Map Codex tool names to friendly display names
194
- */
195
- function mapToolName(name) {
196
- const mapping = {
197
- 'shell_command': 'Bash',
198
- 'shell': 'Bash',
199
- 'apply_patch': 'Edit',
200
- 'write_file': 'Write',
201
- 'read_file': 'Read',
202
- 'list_files': 'Glob',
203
- 'search_files': 'Grep',
204
- 'web_search': 'WebSearch',
205
- 'web_fetch': 'WebFetch',
206
- };
207
- return mapping[name] || name;
208
- }
209
- /**
210
- * Format tool call content for display
211
- */
212
- function formatToolCallContent(name, args) {
213
- switch (name) {
214
- case 'shell_command':
215
- case 'shell':
216
- return `Running: ${args.command || 'command'}`;
217
- case 'read_file':
218
- return `Reading: ${args.file_path || args.path || 'file'}`;
219
- case 'write_file':
220
- return `Writing: ${args.file_path || args.path || 'file'}`;
221
- case 'list_files':
222
- return `Listing: ${args.path || '.'}`;
223
- case 'search_files':
224
- return `Searching for: ${args.pattern || args.query || 'pattern'}`;
225
- case 'web_search':
226
- return `Searching web: ${args.query || 'query'}`;
227
- default:
228
- return `Running ${mapToolName(name)}`;
229
- }
230
- }
231
- /**
232
- * Extract old and new strings from a Codex apply_patch payload.
233
- * Parses unified-diff-style hunks into old/new content for iOS diff preview.
234
- */
235
- function extractOldNewFromPatch(patch) {
236
- const oldLines = [];
237
- const newLines = [];
238
- const hunkHeaderPattern = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/;
239
- for (const line of patch.split('\n')) {
240
- if (hunkHeaderPattern.test(line) || line.startsWith('***') || line.startsWith('---') || line.startsWith('+++')) {
241
- continue;
242
- }
243
- if (line.startsWith('-')) {
244
- oldLines.push(line.slice(1));
245
- }
246
- else if (line.startsWith('+')) {
247
- newLines.push(line.slice(1));
248
- }
249
- else if (line.startsWith(' ')) {
250
- const ctx = line.slice(1);
251
- oldLines.push(ctx);
252
- newLines.push(ctx);
253
- }
254
- }
255
- return {
256
- oldString: oldLines.join('\n'),
257
- newString: newLines.join('\n'),
258
- };
259
- }
260
- /**
261
- * Extract file path from patch content
262
- * Patch format: *** Begin Patch\n*** Update File: path\n...
263
- */
264
- function extractFileFromPatch(input) {
265
- if (!input)
266
- return null;
267
- // Match "*** Update File: path" or "*** Add File: path"
268
- const match = input.match(/\*\*\* (?:Update|Add|Delete) File: (.+)/);
269
- if (match) {
270
- return { filePath: match[1].trim() };
271
- }
272
- return null;
273
- }
274
- /**
275
- * Truncate output for display
276
- */
277
- function truncateOutput(output, maxLength) {
278
- if (!output)
279
- return '';
280
- if (output.length <= maxLength)
281
- return output;
282
- return output.substring(0, maxLength) + '...';
283
- }
284
- /**
285
- * Clear pending calls (call on session end)
286
- */
287
- function clearPendingCalls() {
288
- pendingCalls.clear();
289
- }
290
- /**
291
- * Get count of pending calls (for approval detection)
292
- */
293
- function getPendingCallsCount() {
294
- return pendingCalls.size;
295
- }
296
- /**
297
- * Get pending call info by ID
298
- */
299
- function getPendingCall(callId) {
300
- return pendingCalls.get(callId);
301
- }
302
- //# sourceMappingURL=event-mapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-mapper.js","sourceRoot":"","sources":["../src/event-mapper.ts"],"names":[],"mappings":"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"}