quicksave-shared 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/crypto.d.ts +103 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +239 -0
- package/dist/crypto.js.map +1 -0
- package/dist/crypto.test.d.ts +2 -0
- package/dist/crypto.test.d.ts.map +1 -0
- package/dist/crypto.test.js +246 -0
- package/dist/crypto.test.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol.d.ts +37 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +74 -0
- package/dist/protocol.js.map +1 -0
- package/dist/protocol.test.d.ts +2 -0
- package/dist/protocol.test.d.ts.map +1 -0
- package/dist/protocol.test.js +155 -0
- package/dist/protocol.test.js.map +1 -0
- package/dist/types.d.ts +242 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +41 -0
- package/src/crypto.test.ts +337 -0
- package/src/crypto.ts +335 -0
- package/src/index.ts +8 -0
- package/src/protocol.test.ts +197 -0
- package/src/protocol.ts +92 -0
- package/src/types.ts +400 -0
- package/tsconfig.json +10 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/vitest.config.ts +9 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAG3B,cAAc,aAAa,CAAC;AAG5B,cAAc,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,mBAAmB;AACnB,cAAc,aAAa,CAAC;AAE5B,qBAAqB;AACrB,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Message, MessageType } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a unique message ID
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateMessageId(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Create a typed message
|
|
8
|
+
*/
|
|
9
|
+
export declare function createMessage<T>(type: MessageType, payload: T): Message<T>;
|
|
10
|
+
/**
|
|
11
|
+
* Create a request message and return both the message and a response handler
|
|
12
|
+
*/
|
|
13
|
+
export declare function createRequest<TReq>(type: MessageType, payload: TReq): {
|
|
14
|
+
message: Message<TReq>;
|
|
15
|
+
responseType: MessageType;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Parse and validate a message
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseMessage(data: string): Message;
|
|
21
|
+
/**
|
|
22
|
+
* Serialize a message to JSON
|
|
23
|
+
*/
|
|
24
|
+
export declare function serializeMessage(message: Message): string;
|
|
25
|
+
/**
|
|
26
|
+
* Type guard for response messages
|
|
27
|
+
*/
|
|
28
|
+
export declare function isResponseMessage(message: Message): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Get the request type from a response type
|
|
31
|
+
*/
|
|
32
|
+
export declare function getRequestType(responseType: MessageType): MessageType;
|
|
33
|
+
/**
|
|
34
|
+
* Request types and their expected response types
|
|
35
|
+
*/
|
|
36
|
+
export declare const REQUEST_RESPONSE_MAP: Record<string, string>;
|
|
37
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAO1E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAChC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,IAAI,GACZ;IACD,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,YAAY,EAAE,WAAW,CAAC;CAC3B,CAIA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAclD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,WAAW,GAAG,WAAW,CAErE;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAYvD,CAAC"}
|
package/dist/protocol.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a unique message ID
|
|
3
|
+
*/
|
|
4
|
+
export function generateMessageId() {
|
|
5
|
+
return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Create a typed message
|
|
9
|
+
*/
|
|
10
|
+
export function createMessage(type, payload) {
|
|
11
|
+
return {
|
|
12
|
+
id: generateMessageId(),
|
|
13
|
+
type,
|
|
14
|
+
payload,
|
|
15
|
+
timestamp: Date.now(),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a request message and return both the message and a response handler
|
|
20
|
+
*/
|
|
21
|
+
export function createRequest(type, payload) {
|
|
22
|
+
const message = createMessage(type, payload);
|
|
23
|
+
const responseType = `${type}:response`;
|
|
24
|
+
return { message, responseType };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse and validate a message
|
|
28
|
+
*/
|
|
29
|
+
export function parseMessage(data) {
|
|
30
|
+
const parsed = JSON.parse(data);
|
|
31
|
+
if (typeof parsed !== 'object' ||
|
|
32
|
+
parsed === null ||
|
|
33
|
+
typeof parsed.id !== 'string' ||
|
|
34
|
+
typeof parsed.type !== 'string' ||
|
|
35
|
+
typeof parsed.timestamp !== 'number') {
|
|
36
|
+
throw new Error('Invalid message format');
|
|
37
|
+
}
|
|
38
|
+
return parsed;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Serialize a message to JSON
|
|
42
|
+
*/
|
|
43
|
+
export function serializeMessage(message) {
|
|
44
|
+
return JSON.stringify(message);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Type guard for response messages
|
|
48
|
+
*/
|
|
49
|
+
export function isResponseMessage(message) {
|
|
50
|
+
return message.type.endsWith(':response');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the request type from a response type
|
|
54
|
+
*/
|
|
55
|
+
export function getRequestType(responseType) {
|
|
56
|
+
return responseType.replace(':response', '');
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Request types and their expected response types
|
|
60
|
+
*/
|
|
61
|
+
export const REQUEST_RESPONSE_MAP = {
|
|
62
|
+
'git:status': 'git:status:response',
|
|
63
|
+
'git:diff': 'git:diff:response',
|
|
64
|
+
'git:stage': 'git:stage:response',
|
|
65
|
+
'git:unstage': 'git:unstage:response',
|
|
66
|
+
'git:commit': 'git:commit:response',
|
|
67
|
+
'git:log': 'git:log:response',
|
|
68
|
+
'git:branches': 'git:branches:response',
|
|
69
|
+
'git:checkout': 'git:checkout:response',
|
|
70
|
+
'git:discard': 'git:discard:response',
|
|
71
|
+
handshake: 'handshake:ack',
|
|
72
|
+
ping: 'pong',
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAI,IAAiB,EAAE,OAAU;IAC5D,OAAO;QACL,EAAE,EAAE,iBAAiB,EAAE;QACvB,IAAI;QACJ,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAiB,EACjB,OAAa;IAKb,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,GAAG,IAAI,WAA0B,CAAC;IACvD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEhC,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;QAC7B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC/B,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EACpC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,MAAiB,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,YAAyB;IACtD,OAAO,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAgB,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,YAAY,EAAE,qBAAqB;IACnC,UAAU,EAAE,mBAAmB;IAC/B,WAAW,EAAE,oBAAoB;IACjC,aAAa,EAAE,sBAAsB;IACrC,YAAY,EAAE,qBAAqB;IACnC,SAAS,EAAE,kBAAkB;IAC7B,cAAc,EAAE,uBAAuB;IACvC,cAAc,EAAE,uBAAuB;IACvC,aAAa,EAAE,sBAAsB;IACrC,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,MAAM;CACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.test.d.ts","sourceRoot":"","sources":["../src/protocol.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { generateMessageId, createMessage, createRequest, parseMessage, serializeMessage, isResponseMessage, getRequestType, REQUEST_RESPONSE_MAP, } from './protocol.js';
|
|
3
|
+
describe('generateMessageId', () => {
|
|
4
|
+
it('should generate unique IDs', () => {
|
|
5
|
+
const ids = new Set();
|
|
6
|
+
for (let i = 0; i < 100; i++) {
|
|
7
|
+
ids.add(generateMessageId());
|
|
8
|
+
}
|
|
9
|
+
expect(ids.size).toBe(100);
|
|
10
|
+
});
|
|
11
|
+
it('should generate IDs with expected format', () => {
|
|
12
|
+
const id = generateMessageId();
|
|
13
|
+
// Format: timestamp-randomString
|
|
14
|
+
expect(id).toMatch(/^\d+-[a-z0-9]+$/);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
describe('createMessage', () => {
|
|
18
|
+
it('should create a properly structured message', () => {
|
|
19
|
+
const payload = { test: 'data' };
|
|
20
|
+
const message = createMessage('ping', payload);
|
|
21
|
+
expect(message.id).toBeDefined();
|
|
22
|
+
expect(message.type).toBe('ping');
|
|
23
|
+
expect(message.payload).toEqual(payload);
|
|
24
|
+
expect(message.timestamp).toBeDefined();
|
|
25
|
+
expect(typeof message.timestamp).toBe('number');
|
|
26
|
+
});
|
|
27
|
+
it('should create unique IDs for each message', () => {
|
|
28
|
+
const msg1 = createMessage('ping', {});
|
|
29
|
+
const msg2 = createMessage('ping', {});
|
|
30
|
+
expect(msg1.id).not.toBe(msg2.id);
|
|
31
|
+
});
|
|
32
|
+
it('should set timestamp close to current time', () => {
|
|
33
|
+
const before = Date.now();
|
|
34
|
+
const message = createMessage('pong', { timestamp: 0 });
|
|
35
|
+
const after = Date.now();
|
|
36
|
+
expect(message.timestamp).toBeGreaterThanOrEqual(before);
|
|
37
|
+
expect(message.timestamp).toBeLessThanOrEqual(after);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('createRequest', () => {
|
|
41
|
+
it('should create request with correct response type', () => {
|
|
42
|
+
const { message, responseType } = createRequest('git:status', { path: '/' });
|
|
43
|
+
expect(message.type).toBe('git:status');
|
|
44
|
+
expect(message.payload).toEqual({ path: '/' });
|
|
45
|
+
expect(responseType).toBe('git:status:response');
|
|
46
|
+
});
|
|
47
|
+
it('should work with different request types', () => {
|
|
48
|
+
const types = ['git:diff', 'git:stage', 'git:commit', 'git:log'];
|
|
49
|
+
for (const type of types) {
|
|
50
|
+
const { responseType } = createRequest(type, {});
|
|
51
|
+
expect(responseType).toBe(`${type}:response`);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('parseMessage', () => {
|
|
56
|
+
it('should parse valid JSON message', () => {
|
|
57
|
+
const original = createMessage('ping', { data: 'test' });
|
|
58
|
+
const json = JSON.stringify(original);
|
|
59
|
+
const parsed = parseMessage(json);
|
|
60
|
+
expect(parsed.id).toBe(original.id);
|
|
61
|
+
expect(parsed.type).toBe(original.type);
|
|
62
|
+
expect(parsed.payload).toEqual(original.payload);
|
|
63
|
+
expect(parsed.timestamp).toBe(original.timestamp);
|
|
64
|
+
});
|
|
65
|
+
it('should throw on invalid JSON', () => {
|
|
66
|
+
expect(() => parseMessage('not valid json')).toThrow();
|
|
67
|
+
});
|
|
68
|
+
it('should throw on missing id', () => {
|
|
69
|
+
const invalid = JSON.stringify({ type: 'ping', payload: {}, timestamp: 123 });
|
|
70
|
+
expect(() => parseMessage(invalid)).toThrow('Invalid message format');
|
|
71
|
+
});
|
|
72
|
+
it('should throw on missing type', () => {
|
|
73
|
+
const invalid = JSON.stringify({ id: '123', payload: {}, timestamp: 123 });
|
|
74
|
+
expect(() => parseMessage(invalid)).toThrow('Invalid message format');
|
|
75
|
+
});
|
|
76
|
+
it('should throw on missing timestamp', () => {
|
|
77
|
+
const invalid = JSON.stringify({ id: '123', type: 'ping', payload: {} });
|
|
78
|
+
expect(() => parseMessage(invalid)).toThrow('Invalid message format');
|
|
79
|
+
});
|
|
80
|
+
it('should throw on null message', () => {
|
|
81
|
+
expect(() => parseMessage('null')).toThrow('Invalid message format');
|
|
82
|
+
});
|
|
83
|
+
it('should throw on array', () => {
|
|
84
|
+
expect(() => parseMessage('[]')).toThrow('Invalid message format');
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('serializeMessage', () => {
|
|
88
|
+
it('should serialize message to JSON string', () => {
|
|
89
|
+
const message = createMessage('ping', { test: true });
|
|
90
|
+
const json = serializeMessage(message);
|
|
91
|
+
expect(typeof json).toBe('string');
|
|
92
|
+
const parsed = JSON.parse(json);
|
|
93
|
+
expect(parsed.id).toBe(message.id);
|
|
94
|
+
expect(parsed.type).toBe(message.type);
|
|
95
|
+
expect(parsed.payload).toEqual(message.payload);
|
|
96
|
+
});
|
|
97
|
+
it('should produce valid JSON that can be parsed back', () => {
|
|
98
|
+
const original = createMessage('git:status:response', {
|
|
99
|
+
branch: 'main',
|
|
100
|
+
staged: [],
|
|
101
|
+
unstaged: [],
|
|
102
|
+
untracked: [],
|
|
103
|
+
ahead: 0,
|
|
104
|
+
behind: 0,
|
|
105
|
+
});
|
|
106
|
+
const json = serializeMessage(original);
|
|
107
|
+
const parsed = parseMessage(json);
|
|
108
|
+
expect(parsed).toEqual(original);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe('isResponseMessage', () => {
|
|
112
|
+
it('should identify response messages', () => {
|
|
113
|
+
expect(isResponseMessage({ id: '1', type: 'git:status:response', payload: {}, timestamp: 1 })).toBe(true);
|
|
114
|
+
expect(isResponseMessage({ id: '1', type: 'git:diff:response', payload: {}, timestamp: 1 })).toBe(true);
|
|
115
|
+
expect(isResponseMessage({ id: '1', type: 'handshake:ack', payload: {}, timestamp: 1 })).toBe(false);
|
|
116
|
+
});
|
|
117
|
+
it('should identify non-response messages', () => {
|
|
118
|
+
expect(isResponseMessage({ id: '1', type: 'ping', payload: {}, timestamp: 1 })).toBe(false);
|
|
119
|
+
expect(isResponseMessage({ id: '1', type: 'git:status', payload: {}, timestamp: 1 })).toBe(false);
|
|
120
|
+
expect(isResponseMessage({ id: '1', type: 'handshake', payload: {}, timestamp: 1 })).toBe(false);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('getRequestType', () => {
|
|
124
|
+
it('should extract request type from response type', () => {
|
|
125
|
+
expect(getRequestType('git:status:response')).toBe('git:status');
|
|
126
|
+
expect(getRequestType('git:diff:response')).toBe('git:diff');
|
|
127
|
+
expect(getRequestType('git:commit:response')).toBe('git:commit');
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe('REQUEST_RESPONSE_MAP', () => {
|
|
131
|
+
it('should contain all git operations', () => {
|
|
132
|
+
const expectedOperations = [
|
|
133
|
+
'git:status',
|
|
134
|
+
'git:diff',
|
|
135
|
+
'git:stage',
|
|
136
|
+
'git:unstage',
|
|
137
|
+
'git:commit',
|
|
138
|
+
'git:log',
|
|
139
|
+
'git:branches',
|
|
140
|
+
'git:checkout',
|
|
141
|
+
'git:discard',
|
|
142
|
+
];
|
|
143
|
+
for (const op of expectedOperations) {
|
|
144
|
+
expect(REQUEST_RESPONSE_MAP[op]).toBeDefined();
|
|
145
|
+
expect(REQUEST_RESPONSE_MAP[op]).toBe(`${op}:response`);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
it('should contain handshake mapping', () => {
|
|
149
|
+
expect(REQUEST_RESPONSE_MAP['handshake']).toBe('handshake:ack');
|
|
150
|
+
});
|
|
151
|
+
it('should contain ping/pong mapping', () => {
|
|
152
|
+
expect(REQUEST_RESPONSE_MAP['ping']).toBe('pong');
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=protocol.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.test.js","sourceRoot":"","sources":["../src/protocol.test.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
export interface Message<T = unknown> {
|
|
2
|
+
id: string;
|
|
3
|
+
type: MessageType;
|
|
4
|
+
payload: T;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
}
|
|
7
|
+
export type MessageType = 'ping' | 'pong' | 'handshake' | 'handshake:ack' | 'git:status' | 'git:status:response' | 'git:diff' | 'git:diff:response' | 'git:stage' | 'git:stage:response' | 'git:unstage' | 'git:unstage:response' | 'git:stage-patch' | 'git:stage-patch:response' | 'git:unstage-patch' | 'git:unstage-patch:response' | 'git:commit' | 'git:commit:response' | 'git:log' | 'git:log:response' | 'git:branches' | 'git:branches:response' | 'git:checkout' | 'git:checkout:response' | 'git:discard' | 'git:discard:response' | 'ai:generate-commit-summary' | 'ai:generate-commit-summary:response' | 'ai:set-api-key' | 'ai:set-api-key:response' | 'ai:get-api-key-status' | 'ai:get-api-key-status:response' | 'agent:list-repos' | 'agent:list-repos:response' | 'agent:switch-repo' | 'agent:switch-repo:response' | 'agent:browse-directory' | 'agent:browse-directory:response' | 'agent:add-repo' | 'agent:add-repo:response' | 'error';
|
|
8
|
+
export type FileStatus = 'added' | 'modified' | 'deleted' | 'renamed' | 'copied';
|
|
9
|
+
export interface FileChange {
|
|
10
|
+
path: string;
|
|
11
|
+
status: FileStatus;
|
|
12
|
+
oldPath?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface GitStatus {
|
|
15
|
+
branch: string;
|
|
16
|
+
ahead: number;
|
|
17
|
+
behind: number;
|
|
18
|
+
staged: FileChange[];
|
|
19
|
+
unstaged: FileChange[];
|
|
20
|
+
untracked: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface DiffHunk {
|
|
23
|
+
oldStart: number;
|
|
24
|
+
oldLines: number;
|
|
25
|
+
newStart: number;
|
|
26
|
+
newLines: number;
|
|
27
|
+
content: string;
|
|
28
|
+
}
|
|
29
|
+
export interface FileDiff {
|
|
30
|
+
path: string;
|
|
31
|
+
oldPath?: string;
|
|
32
|
+
hunks: DiffHunk[];
|
|
33
|
+
isBinary: boolean;
|
|
34
|
+
truncated?: boolean;
|
|
35
|
+
truncatedReason?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface Commit {
|
|
38
|
+
hash: string;
|
|
39
|
+
shortHash: string;
|
|
40
|
+
message: string;
|
|
41
|
+
author: string;
|
|
42
|
+
email: string;
|
|
43
|
+
date: string;
|
|
44
|
+
}
|
|
45
|
+
export interface Branch {
|
|
46
|
+
name: string;
|
|
47
|
+
current: boolean;
|
|
48
|
+
remote?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface Repository {
|
|
51
|
+
path: string;
|
|
52
|
+
name: string;
|
|
53
|
+
currentBranch?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface HandshakePayload {
|
|
56
|
+
publicKey: string;
|
|
57
|
+
license?: License;
|
|
58
|
+
}
|
|
59
|
+
export interface HandshakeAckPayload {
|
|
60
|
+
success: boolean;
|
|
61
|
+
agentVersion: string;
|
|
62
|
+
repoPath: string;
|
|
63
|
+
availableRepos?: Repository[];
|
|
64
|
+
}
|
|
65
|
+
export interface StatusRequestPayload {
|
|
66
|
+
path?: string;
|
|
67
|
+
}
|
|
68
|
+
export type StatusResponsePayload = GitStatus;
|
|
69
|
+
export interface DiffRequestPayload {
|
|
70
|
+
path: string;
|
|
71
|
+
staged?: boolean;
|
|
72
|
+
}
|
|
73
|
+
export type DiffResponsePayload = FileDiff;
|
|
74
|
+
export interface StageRequestPayload {
|
|
75
|
+
paths: string[];
|
|
76
|
+
}
|
|
77
|
+
export interface StageResponsePayload {
|
|
78
|
+
success: boolean;
|
|
79
|
+
error?: string;
|
|
80
|
+
}
|
|
81
|
+
export type UnstageRequestPayload = StageRequestPayload;
|
|
82
|
+
export type UnstageResponsePayload = StageResponsePayload;
|
|
83
|
+
export interface StagePatchRequestPayload {
|
|
84
|
+
patch: string;
|
|
85
|
+
}
|
|
86
|
+
export interface StagePatchResponsePayload {
|
|
87
|
+
success: boolean;
|
|
88
|
+
error?: string;
|
|
89
|
+
}
|
|
90
|
+
export type UnstagePatchRequestPayload = StagePatchRequestPayload;
|
|
91
|
+
export type UnstagePatchResponsePayload = StagePatchResponsePayload;
|
|
92
|
+
export interface CommitRequestPayload {
|
|
93
|
+
message: string;
|
|
94
|
+
description?: string;
|
|
95
|
+
}
|
|
96
|
+
export interface CommitResponsePayload {
|
|
97
|
+
success: boolean;
|
|
98
|
+
hash?: string;
|
|
99
|
+
error?: string;
|
|
100
|
+
}
|
|
101
|
+
export interface LogRequestPayload {
|
|
102
|
+
limit?: number;
|
|
103
|
+
}
|
|
104
|
+
export interface LogResponsePayload {
|
|
105
|
+
commits: Commit[];
|
|
106
|
+
}
|
|
107
|
+
export type BranchesRequestPayload = Record<string, never>;
|
|
108
|
+
export interface BranchesResponsePayload {
|
|
109
|
+
branches: Branch[];
|
|
110
|
+
current: string;
|
|
111
|
+
}
|
|
112
|
+
export interface CheckoutRequestPayload {
|
|
113
|
+
branch: string;
|
|
114
|
+
create?: boolean;
|
|
115
|
+
}
|
|
116
|
+
export interface CheckoutResponsePayload {
|
|
117
|
+
success: boolean;
|
|
118
|
+
error?: string;
|
|
119
|
+
}
|
|
120
|
+
export interface DiscardRequestPayload {
|
|
121
|
+
paths: string[];
|
|
122
|
+
}
|
|
123
|
+
export interface DiscardResponsePayload {
|
|
124
|
+
success: boolean;
|
|
125
|
+
error?: string;
|
|
126
|
+
}
|
|
127
|
+
export interface ErrorPayload {
|
|
128
|
+
code: string;
|
|
129
|
+
message: string;
|
|
130
|
+
details?: unknown;
|
|
131
|
+
}
|
|
132
|
+
export type ListReposRequestPayload = Record<string, never>;
|
|
133
|
+
export interface ListReposResponsePayload {
|
|
134
|
+
repos: Repository[];
|
|
135
|
+
current: string;
|
|
136
|
+
}
|
|
137
|
+
export interface SwitchRepoRequestPayload {
|
|
138
|
+
path: string;
|
|
139
|
+
}
|
|
140
|
+
export interface SwitchRepoResponsePayload {
|
|
141
|
+
success: boolean;
|
|
142
|
+
newPath: string;
|
|
143
|
+
error?: string;
|
|
144
|
+
}
|
|
145
|
+
export interface BrowseDirectoryRequestPayload {
|
|
146
|
+
path: string;
|
|
147
|
+
}
|
|
148
|
+
export interface DirectoryEntry {
|
|
149
|
+
name: string;
|
|
150
|
+
path: string;
|
|
151
|
+
isDirectory: boolean;
|
|
152
|
+
isGitRepo: boolean;
|
|
153
|
+
}
|
|
154
|
+
export interface BrowseDirectoryResponsePayload {
|
|
155
|
+
path: string;
|
|
156
|
+
parentPath: string | null;
|
|
157
|
+
entries: DirectoryEntry[];
|
|
158
|
+
error?: string;
|
|
159
|
+
}
|
|
160
|
+
export interface AddRepoRequestPayload {
|
|
161
|
+
path: string;
|
|
162
|
+
}
|
|
163
|
+
export interface AddRepoResponsePayload {
|
|
164
|
+
success: boolean;
|
|
165
|
+
repo?: Repository;
|
|
166
|
+
error?: string;
|
|
167
|
+
}
|
|
168
|
+
export interface License {
|
|
169
|
+
version: 1;
|
|
170
|
+
publicKey: string;
|
|
171
|
+
issuedAt: number;
|
|
172
|
+
type: 'pro';
|
|
173
|
+
signature: string;
|
|
174
|
+
}
|
|
175
|
+
export type SignalingMessageType = 'peer-connected' | 'peer-offline' | 'data' | 'bye';
|
|
176
|
+
export interface SignalingMessage {
|
|
177
|
+
type: SignalingMessageType;
|
|
178
|
+
payload?: unknown;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Key exchange message - PWA sends encrypted session DEK to Agent
|
|
182
|
+
* This provides forward secrecy: if Agent is compromised, only current session is exposed
|
|
183
|
+
*/
|
|
184
|
+
export interface KeyExchangeV2 {
|
|
185
|
+
type: 'key-exchange';
|
|
186
|
+
version: 2;
|
|
187
|
+
encryptedDEK: string;
|
|
188
|
+
timestamp: number;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* V2 key exchange acknowledgment from Agent
|
|
192
|
+
*/
|
|
193
|
+
export interface KeyExchangeV2Ack {
|
|
194
|
+
type: 'key-exchange-ack';
|
|
195
|
+
version: 2;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Key exchange message type
|
|
199
|
+
*/
|
|
200
|
+
export type KeyExchangeMessage = KeyExchangeV2;
|
|
201
|
+
export type ConnectionState = 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'error';
|
|
202
|
+
export interface ConnectionInfo {
|
|
203
|
+
state: ConnectionState;
|
|
204
|
+
agentId: string;
|
|
205
|
+
signalingServer: string;
|
|
206
|
+
connectedAt?: number;
|
|
207
|
+
error?: string;
|
|
208
|
+
}
|
|
209
|
+
export type ClaudeModel = 'claude-haiku-4-5' | 'claude-sonnet-4-5' | 'claude-opus-4-5';
|
|
210
|
+
export declare const CLAUDE_MODELS: {
|
|
211
|
+
id: ClaudeModel;
|
|
212
|
+
name: string;
|
|
213
|
+
description: string;
|
|
214
|
+
}[];
|
|
215
|
+
export interface GenerateCommitSummaryRequestPayload {
|
|
216
|
+
context?: string;
|
|
217
|
+
model?: ClaudeModel;
|
|
218
|
+
}
|
|
219
|
+
export interface TokenUsage {
|
|
220
|
+
inputTokens: number;
|
|
221
|
+
outputTokens: number;
|
|
222
|
+
}
|
|
223
|
+
export interface GenerateCommitSummaryResponsePayload {
|
|
224
|
+
success: boolean;
|
|
225
|
+
summary?: string;
|
|
226
|
+
description?: string;
|
|
227
|
+
error?: string;
|
|
228
|
+
errorCode?: 'NO_API_KEY' | 'NO_STAGED_CHANGES' | 'API_ERROR' | 'RATE_LIMITED';
|
|
229
|
+
tokenUsage?: TokenUsage;
|
|
230
|
+
cached?: boolean;
|
|
231
|
+
}
|
|
232
|
+
export interface SetApiKeyRequestPayload {
|
|
233
|
+
apiKey: string;
|
|
234
|
+
}
|
|
235
|
+
export interface SetApiKeyResponsePayload {
|
|
236
|
+
success: boolean;
|
|
237
|
+
error?: string;
|
|
238
|
+
}
|
|
239
|
+
export interface GetApiKeyStatusResponsePayload {
|
|
240
|
+
configured: boolean;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Message Types
|
|
3
|
+
// ============================================================================
|
|
4
|
+
export const CLAUDE_MODELS = [
|
|
5
|
+
{ id: 'claude-haiku-4-5', name: 'Haiku', description: 'Fast & affordable' },
|
|
6
|
+
{ id: 'claude-sonnet-4-5', name: 'Sonnet', description: 'Balanced speed & quality' },
|
|
7
|
+
{ id: 'claude-opus-4-5', name: 'Opus', description: 'Highest quality' },
|
|
8
|
+
];
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAsW/E,MAAM,CAAC,MAAM,aAAa,GAA6D;IACrF,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE;IAC3E,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;IACpF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE;CACxE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "quicksave-shared",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"branch": "stable"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
},
|
|
16
|
+
"./crypto": {
|
|
17
|
+
"import": "./dist/crypto.js",
|
|
18
|
+
"types": "./dist/crypto.d.ts"
|
|
19
|
+
},
|
|
20
|
+
"./protocol": {
|
|
21
|
+
"import": "./dist/protocol.js",
|
|
22
|
+
"types": "./dist/protocol.d.ts"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"tweetnacl": "^1.0.3",
|
|
27
|
+
"tweetnacl-util": "^0.15.1"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"typescript": "^5.3.3",
|
|
31
|
+
"vitest": "^1.2.0"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc",
|
|
35
|
+
"dev": "tsc --watch",
|
|
36
|
+
"typecheck": "tsc --noEmit",
|
|
37
|
+
"test": "vitest run",
|
|
38
|
+
"test:unit": "vitest run",
|
|
39
|
+
"test:watch": "vitest"
|
|
40
|
+
}
|
|
41
|
+
}
|