@bitkyc08/opencodex 2.6.17 → 2.6.18
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/README.md +9 -0
- package/bin/ocx.mjs +70 -5
- package/gui/dist/assets/index-DDcEW0Cm.css +1 -0
- package/gui/dist/assets/index-DbTEyo46.js +9 -0
- package/gui/dist/index.html +2 -2
- package/package.json +3 -1
- package/src/adapters/anthropic.ts +9 -2
- package/src/adapters/base.ts +6 -0
- package/src/adapters/cursor/arg-codec.ts +38 -0
- package/src/adapters/cursor/arg-normalize.ts +88 -0
- package/src/adapters/cursor/cursor-errors.ts +85 -0
- package/src/adapters/cursor/discovery.ts +144 -0
- package/src/adapters/cursor/effort-map.ts +74 -0
- package/src/adapters/cursor/exec-policy.ts +44 -0
- package/src/adapters/cursor/framing.ts +136 -0
- package/src/adapters/cursor/gen/agent_pb.ts +15274 -0
- package/src/adapters/cursor/kv-store.ts +25 -0
- package/src/adapters/cursor/live-models.ts +93 -0
- package/src/adapters/cursor/live-smoke-gate.ts +41 -0
- package/src/adapters/cursor/live-transport.ts +758 -0
- package/src/adapters/cursor/mcp-config.ts +42 -0
- package/src/adapters/cursor/mcp-manager.ts +236 -0
- package/src/adapters/cursor/message-mapper.ts +46 -0
- package/src/adapters/cursor/native-exec-common.ts +55 -0
- package/src/adapters/cursor/native-exec-desktop.ts +177 -0
- package/src/adapters/cursor/native-exec-fs.ts +284 -0
- package/src/adapters/cursor/native-exec-mcp.ts +151 -0
- package/src/adapters/cursor/native-exec-network.ts +32 -0
- package/src/adapters/cursor/native-exec-shell.ts +191 -0
- package/src/adapters/cursor/native-exec-tools.ts +118 -0
- package/src/adapters/cursor/native-exec.ts +177 -0
- package/src/adapters/cursor/protobuf-events.ts +309 -0
- package/src/adapters/cursor/protobuf-request.ts +347 -0
- package/src/adapters/cursor/request-builder.ts +98 -0
- package/src/adapters/cursor/tool-definitions.ts +301 -0
- package/src/adapters/cursor/transport-retry.ts +116 -0
- package/src/adapters/cursor/transport.ts +47 -0
- package/src/adapters/cursor/types.ts +36 -0
- package/src/adapters/cursor.ts +99 -0
- package/src/adapters/google.ts +7 -1
- package/src/adapters/kiro.ts +15 -0
- package/src/adapters/openai-chat.ts +7 -2
- package/src/adapters/run-turn-queue.ts +58 -0
- package/src/adapters/tool-catalog-nudge.ts +71 -0
- package/src/bridge.ts +7 -1
- package/src/cli-help.ts +9 -2
- package/src/cli-status.ts +7 -5
- package/src/cli.ts +122 -79
- package/src/codex-catalog.ts +213 -71
- package/src/codex-history-provider.ts +31 -14
- package/src/codex-inject.ts +17 -9
- package/src/codex-paths.ts +2 -1
- package/src/codex-shim.ts +30 -7
- package/src/codex-sync.ts +70 -0
- package/src/config.ts +58 -2
- package/src/doctor.ts +4 -2
- package/src/index.ts +1 -0
- package/src/model-cache.ts +22 -2
- package/src/oauth/callback-server.ts +44 -16
- package/src/oauth/cursor.ts +188 -0
- package/src/oauth/index.ts +29 -3
- package/src/oauth/key-providers.ts +20 -33
- package/src/oauth/login-cli.ts +7 -4
- package/src/open-url.ts +5 -1
- package/src/ports.ts +13 -0
- package/src/process-control.ts +76 -0
- package/src/provider-label.ts +10 -5
- package/src/providers/derive.ts +30 -3
- package/src/providers/registry.ts +39 -1
- package/src/proxy-liveness.ts +122 -0
- package/src/responses/parser.ts +1 -0
- package/src/responses/state.ts +83 -0
- package/src/router.ts +38 -23
- package/src/server/adapter-resolve.ts +3 -0
- package/src/server.ts +130 -18
- package/src/service.ts +94 -32
- package/src/types.ts +24 -1
- package/src/update-job.ts +360 -0
- package/src/update.ts +73 -11
- package/src/usage-log.ts +3 -3
- package/src/usage-summary.ts +3 -2
- package/src/win-paths.ts +68 -0
- package/gui/dist/assets/index-DIBiVVC0.css +0 -1
- package/gui/dist/assets/index-DcnD944i.js +0 -9
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
export const CONNECT_FRAME_HEADER_BYTES = 5;
|
|
2
|
+
export const CONNECT_FLAG_COMPRESSED = 0x01;
|
|
3
|
+
export const CONNECT_FLAG_END_STREAM = 0x02;
|
|
4
|
+
export const MAX_CONNECT_FRAME_PAYLOAD_BYTES = 0xffffffff;
|
|
5
|
+
|
|
6
|
+
export type ConnectFrameErrorCode =
|
|
7
|
+
| "invalid_offset"
|
|
8
|
+
| "invalid_flags"
|
|
9
|
+
| "payload_too_large"
|
|
10
|
+
| "frame_incomplete";
|
|
11
|
+
|
|
12
|
+
export interface ConnectFrame {
|
|
13
|
+
flags: number;
|
|
14
|
+
payload: Uint8Array;
|
|
15
|
+
compressed: boolean;
|
|
16
|
+
endStream: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface DecodedConnectFrame {
|
|
20
|
+
frame: ConnectFrame;
|
|
21
|
+
readBytes: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface DecodedConnectFrames {
|
|
25
|
+
frames: ConnectFrame[];
|
|
26
|
+
remainder: Uint8Array;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export class ConnectFrameError extends Error {
|
|
30
|
+
constructor(
|
|
31
|
+
public readonly code: ConnectFrameErrorCode,
|
|
32
|
+
message: string,
|
|
33
|
+
) {
|
|
34
|
+
super(message);
|
|
35
|
+
this.name = "ConnectFrameError";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function isConnectFrameCompressed(flags: number): boolean {
|
|
40
|
+
return (flags & CONNECT_FLAG_COMPRESSED) === CONNECT_FLAG_COMPRESSED;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function isConnectFrameEndStream(flags: number): boolean {
|
|
44
|
+
return (flags & CONNECT_FLAG_END_STREAM) === CONNECT_FLAG_END_STREAM;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function encodeConnectFrame(
|
|
48
|
+
payload: Uint8Array,
|
|
49
|
+
options: { flags?: number; compressed?: boolean; endStream?: boolean } = {},
|
|
50
|
+
): Uint8Array {
|
|
51
|
+
if (payload.length > MAX_CONNECT_FRAME_PAYLOAD_BYTES) {
|
|
52
|
+
throw new ConnectFrameError("payload_too_large", `Connect frame payload too large: ${payload.length}`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
let flags = options.flags ?? 0;
|
|
56
|
+
assertByte(flags, "invalid_flags", `Connect frame flags must be a byte: ${flags}`);
|
|
57
|
+
if (options.compressed) flags |= CONNECT_FLAG_COMPRESSED;
|
|
58
|
+
if (options.endStream) flags |= CONNECT_FLAG_END_STREAM;
|
|
59
|
+
|
|
60
|
+
const frame = new Uint8Array(CONNECT_FRAME_HEADER_BYTES + payload.length);
|
|
61
|
+
frame[0] = flags;
|
|
62
|
+
new DataView(frame.buffer, frame.byteOffset, frame.byteLength)
|
|
63
|
+
.setUint32(1, payload.length, false);
|
|
64
|
+
frame.set(payload, CONNECT_FRAME_HEADER_BYTES);
|
|
65
|
+
return frame;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function tryDecodeConnectFrame(input: Uint8Array, offset = 0): DecodedConnectFrame | null {
|
|
69
|
+
assertOffset(input, offset);
|
|
70
|
+
if (input.length - offset < CONNECT_FRAME_HEADER_BYTES) return null;
|
|
71
|
+
|
|
72
|
+
const view = new DataView(input.buffer, input.byteOffset + offset, input.byteLength - offset);
|
|
73
|
+
const flags = view.getUint8(0);
|
|
74
|
+
const length = view.getUint32(1, false);
|
|
75
|
+
const readBytes = CONNECT_FRAME_HEADER_BYTES + length;
|
|
76
|
+
if (input.length - offset < readBytes) return null;
|
|
77
|
+
|
|
78
|
+
const payloadStart = offset + CONNECT_FRAME_HEADER_BYTES;
|
|
79
|
+
const payloadEnd = payloadStart + length;
|
|
80
|
+
const payload = input.slice(payloadStart, payloadEnd);
|
|
81
|
+
return {
|
|
82
|
+
frame: {
|
|
83
|
+
flags,
|
|
84
|
+
payload,
|
|
85
|
+
compressed: isConnectFrameCompressed(flags),
|
|
86
|
+
endStream: isConnectFrameEndStream(flags),
|
|
87
|
+
},
|
|
88
|
+
readBytes,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function decodeConnectFrame(input: Uint8Array, offset = 0): DecodedConnectFrame {
|
|
93
|
+
const decoded = tryDecodeConnectFrame(input, offset);
|
|
94
|
+
if (!decoded) {
|
|
95
|
+
throw new ConnectFrameError("frame_incomplete", "Incomplete Connect frame");
|
|
96
|
+
}
|
|
97
|
+
return decoded;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function decodeConnectFrames(input: Uint8Array): ConnectFrame[] {
|
|
101
|
+
const frames: ConnectFrame[] = [];
|
|
102
|
+
let offset = 0;
|
|
103
|
+
while (offset < input.length) {
|
|
104
|
+
const decoded = decodeConnectFrame(input, offset);
|
|
105
|
+
frames.push(decoded.frame);
|
|
106
|
+
offset += decoded.readBytes;
|
|
107
|
+
}
|
|
108
|
+
return frames;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function decodeAvailableConnectFrames(input: Uint8Array): DecodedConnectFrames {
|
|
112
|
+
const frames: ConnectFrame[] = [];
|
|
113
|
+
let offset = 0;
|
|
114
|
+
while (offset < input.length) {
|
|
115
|
+
const decoded = tryDecodeConnectFrame(input, offset);
|
|
116
|
+
if (!decoded) break;
|
|
117
|
+
frames.push(decoded.frame);
|
|
118
|
+
offset += decoded.readBytes;
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
frames,
|
|
122
|
+
remainder: offset === input.length ? new Uint8Array() : input.slice(offset),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function assertOffset(input: Uint8Array, offset: number): void {
|
|
127
|
+
if (!Number.isInteger(offset) || offset < 0 || offset > input.length) {
|
|
128
|
+
throw new ConnectFrameError("invalid_offset", `Invalid Connect frame offset: ${offset}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function assertByte(value: number, code: ConnectFrameErrorCode, message: string): void {
|
|
133
|
+
if (!Number.isInteger(value) || value < 0 || value > 0xff) {
|
|
134
|
+
throw new ConnectFrameError(code, message);
|
|
135
|
+
}
|
|
136
|
+
}
|