@young1lin/dsh-gpt-sub 0.1.1 → 0.1.2
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/CHANGELOG.md +10 -0
- package/README.md +21 -14
- package/cordis.patch.yml +1 -1
- package/lib/compaction-state.d.ts +22 -0
- package/lib/compaction-state.d.ts.map +1 -0
- package/lib/compaction-state.js +43 -0
- package/lib/compaction-state.js.map +1 -0
- package/lib/compaction.d.ts +20 -0
- package/lib/compaction.d.ts.map +1 -0
- package/lib/compaction.js +188 -0
- package/lib/compaction.js.map +1 -0
- package/lib/index.d.ts +3 -9
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -9
- package/lib/index.js.map +1 -1
- package/lib/native-bridge.d.ts +87 -0
- package/lib/native-bridge.d.ts.map +1 -0
- package/lib/native-bridge.js +251 -0
- package/lib/native-bridge.js.map +1 -0
- package/lib/native-history.d.ts +70 -0
- package/lib/native-history.d.ts.map +1 -0
- package/lib/native-history.js +120 -0
- package/lib/native-history.js.map +1 -0
- package/lib/types.d.ts +6 -0
- package/lib/types.d.ts.map +1 -1
- package/package.json +36 -9
- package/src/compaction-state.ts +52 -0
- package/src/compaction.ts +188 -0
- package/src/index.ts +10 -9
- package/src/native-bridge.ts +288 -0
- package/src/native-history.ts +140 -0
- package/src/types.ts +6 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/** Codex native compaction and checkpoint replay through resolved pi-ai requests. */
|
|
2
|
+
import { Service, type Context } from '@deepseek-ai/cordis';
|
|
3
|
+
import { type Message, type StreamChunk } from '@deepseek-ai/dsh-llm';
|
|
4
|
+
import { normalizeContext } from '@earendil-works/pi-ai/utils/transcript';
|
|
5
|
+
import { convertResponsesMessages } from '@earendil-works/pi-ai/api/openai-responses-shared';
|
|
6
|
+
import type { ModelThinkingLevel } from '@earendil-works/pi-ai';
|
|
7
|
+
/** Native compaction request bounds configured by the plugin. */
|
|
8
|
+
export interface NativeBridgeConfig {
|
|
9
|
+
nativeCompactionTimeoutMs: number;
|
|
10
|
+
nativeRetainTokens: number;
|
|
11
|
+
nativeResponseMaxBytes: number;
|
|
12
|
+
}
|
|
13
|
+
/** Options the pi-ai SDK accepts for one native request stream. */
|
|
14
|
+
export interface PiAiNativeStreamOptions {
|
|
15
|
+
apiKey?: string;
|
|
16
|
+
reasoning?: ModelThinkingLevel;
|
|
17
|
+
maxRetries?: number;
|
|
18
|
+
signal?: AbortSignal;
|
|
19
|
+
headers?: Record<string, string | null | undefined>;
|
|
20
|
+
transport?: string;
|
|
21
|
+
fetch?: typeof fetch;
|
|
22
|
+
onPayload?: (payload: unknown, model: unknown) => unknown | Promise<unknown>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Native request the llm-pi-ai/stream extension hands to listeners.
|
|
26
|
+
* Mirrors the extension's own shape; declared locally so this plugin also
|
|
27
|
+
* typechecks against adapters that do not ship the extension yet.
|
|
28
|
+
*/
|
|
29
|
+
export interface PiAiNativeRequest {
|
|
30
|
+
options: {
|
|
31
|
+
provider: string;
|
|
32
|
+
model: string;
|
|
33
|
+
purpose?: string;
|
|
34
|
+
messages: Message[];
|
|
35
|
+
sessionId?: string | number;
|
|
36
|
+
reasoningEffort?: string;
|
|
37
|
+
};
|
|
38
|
+
model: Parameters<typeof convertResponsesMessages>[0];
|
|
39
|
+
context: Parameters<typeof normalizeContext>[0];
|
|
40
|
+
streamOptions: PiAiNativeStreamOptions;
|
|
41
|
+
stream: (options: PiAiNativeStreamOptions) => AsyncIterable<StreamChunk>;
|
|
42
|
+
}
|
|
43
|
+
/** Whether the host's llm-pi-ai adapter emits native requests through the stream extension. */
|
|
44
|
+
export declare function hasPiAiNativeStream(): boolean;
|
|
45
|
+
/** Listener for one native request; call next() to defer to the SDK dispatch. */
|
|
46
|
+
export type PiAiNativeStreamListener = (request: PiAiNativeRequest, next: () => AsyncIterable<StreamChunk>) => AsyncIterable<StreamChunk>;
|
|
47
|
+
/**
|
|
48
|
+
* Register a native stream listener. The event key is provided by the
|
|
49
|
+
* extension's typings when present; typed loosely here so registration also
|
|
50
|
+
* compiles — and stays dormant — where the extension is absent.
|
|
51
|
+
*/
|
|
52
|
+
export declare function onPiAiNativeStream(ctx: Context, listener: PiAiNativeStreamListener): () => boolean;
|
|
53
|
+
/** Drive one native request through the registered listeners, as the extension does. */
|
|
54
|
+
export declare function waterfallPiAiNativeStream(ctx: Context, request: PiAiNativeRequest, next: () => AsyncIterable<StreamChunk>): AsyncIterable<StreamChunk>;
|
|
55
|
+
declare module '@deepseek-ai/cordis' {
|
|
56
|
+
interface Context {
|
|
57
|
+
gptSubNative: CodexNativeBridge;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Expand persisted checkpoints immediately before the SDK sends its payload.
|
|
62
|
+
* @param request - prepared pi-ai request.
|
|
63
|
+
* @param payload - provider-native request body.
|
|
64
|
+
* @returns body with native checkpoint items restored.
|
|
65
|
+
*/
|
|
66
|
+
export declare function replayPayload(request: PiAiNativeRequest, payload: unknown): unknown;
|
|
67
|
+
/**
|
|
68
|
+
* Resolve the Responses endpoint from the captured model descriptor.
|
|
69
|
+
* @param baseUrl - configured native model endpoint.
|
|
70
|
+
* @returns Codex Responses URL.
|
|
71
|
+
*/
|
|
72
|
+
export declare function codexResponsesUrl(baseUrl: string): string;
|
|
73
|
+
/** Plugin-owned native request execution, cancelled before its proxy is closed. */
|
|
74
|
+
export declare class CodexNativeBridge extends Service {
|
|
75
|
+
private readonly config;
|
|
76
|
+
private readonly fetchImpl;
|
|
77
|
+
private readonly stopping;
|
|
78
|
+
private readonly active;
|
|
79
|
+
constructor(ctx: Context, config: NativeBridgeConfig, fetchImpl?: typeof fetch);
|
|
80
|
+
/**
|
|
81
|
+
* Abort and await all native compaction requests before transport teardown.
|
|
82
|
+
* @returns completion of every active request.
|
|
83
|
+
*/
|
|
84
|
+
stop(): Promise<void>;
|
|
85
|
+
private compact;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=native-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-bridge.d.ts","sourceRoot":"","sources":["../src/native-bridge.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,sBAAsB,CAAA;AAEhG,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAyB,MAAM,mDAAmD,CAAA;AAGnH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAM/D,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,yBAAyB,EAAE,MAAM,CAAA;IACjC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,sBAAsB,EAAE,MAAM,CAAA;CAC/B;AAED,mEAAmE;AACnE,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,kBAAkB,CAAA;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAC7E;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,OAAO,EAAE,CAAA;QACnB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QAC3B,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,CAAA;IACD,KAAK,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAA;IACrD,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,aAAa,EAAE,uBAAuB,CAAA;IACtC,MAAM,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,aAAa,CAAC,WAAW,CAAC,CAAA;CACzE;AASD,+FAA+F;AAC/F,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,iFAAiF;AACjF,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC,WAAW,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,CAAA;AAEzI;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,wBAAwB,GAAG,MAAM,OAAO,CAElG;AAED,wFAAwF;AACxF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC,WAAW,CAAC,CAEtJ;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QAAG,YAAY,EAAE,iBAAiB,CAAA;KAAE;CACtD;AAYD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAInF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED,mFAAmF;AACnF,qBAAa,iBAAkB,SAAQ,OAAO;IAIlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAsB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHjG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;gBAEtC,GAAG,EAAE,OAAO,EAAmB,MAAM,EAAE,kBAAkB,EAAmB,SAAS,GAAE,OAAO,KAAa;IA8BvH;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAKZ,OAAO;CA2HvB"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/** Codex native compaction and checkpoint replay through resolved pi-ai requests. */
|
|
2
|
+
import { Service } from '@deepseek-ai/cordis';
|
|
3
|
+
import { LlmError } from '@deepseek-ai/dsh-llm';
|
|
4
|
+
import * as PiAi from '@deepseek-ai/dsh-llm-pi-ai';
|
|
5
|
+
import { normalizeContext } from '@earendil-works/pi-ai/utils/transcript';
|
|
6
|
+
import { convertResponsesMessages, convertResponsesTools } from '@earendil-works/pi-ai/api/openai-responses-shared';
|
|
7
|
+
import { createParser } from 'eventsource-parser';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { expandCheckpoints, nativeItemsSchema, readCheckpoint, retainUserItems, } from "./native-history.js";
|
|
10
|
+
/**
|
|
11
|
+
* Event name published by the llm-pi-ai/stream extension. Falls back to the
|
|
12
|
+
* wire name so the plugin loads — inert — on hosts whose adapter does not
|
|
13
|
+
* emit it yet; nothing fires and ordinary SDK dispatch is unchanged.
|
|
14
|
+
*/
|
|
15
|
+
const PI_AI_NATIVE_STREAM_EVENT = PiAi.PI_AI_NATIVE_STREAM_EVENT ?? 'llm-pi-ai/stream';
|
|
16
|
+
/** Whether the host's llm-pi-ai adapter emits native requests through the stream extension. */
|
|
17
|
+
export function hasPiAiNativeStream() {
|
|
18
|
+
return PiAi.PI_AI_NATIVE_STREAM_EVENT !== undefined;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Register a native stream listener. The event key is provided by the
|
|
22
|
+
* extension's typings when present; typed loosely here so registration also
|
|
23
|
+
* compiles — and stays dormant — where the extension is absent.
|
|
24
|
+
*/
|
|
25
|
+
export function onPiAiNativeStream(ctx, listener) {
|
|
26
|
+
return ctx.on(PI_AI_NATIVE_STREAM_EVENT, listener);
|
|
27
|
+
}
|
|
28
|
+
/** Drive one native request through the registered listeners, as the extension does. */
|
|
29
|
+
export function waterfallPiAiNativeStream(ctx, request, next) {
|
|
30
|
+
return ctx.waterfall(PI_AI_NATIVE_STREAM_EVENT, request, next);
|
|
31
|
+
}
|
|
32
|
+
const jsonObject = z.record(z.string(), z.unknown());
|
|
33
|
+
const claimsSchema = z.object({
|
|
34
|
+
'https://api.openai.com/auth': z.object({ chatgpt_account_id: z.string().min(1) }),
|
|
35
|
+
});
|
|
36
|
+
const usageSchema = z.object({
|
|
37
|
+
input_tokens: z.number().int().nonnegative(),
|
|
38
|
+
output_tokens: z.number().int().nonnegative(),
|
|
39
|
+
input_tokens_details: z.object({ cached_tokens: z.number().int().nonnegative().optional() }).optional(),
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Expand persisted checkpoints immediately before the SDK sends its payload.
|
|
43
|
+
* @param request - prepared pi-ai request.
|
|
44
|
+
* @param payload - provider-native request body.
|
|
45
|
+
* @returns body with native checkpoint items restored.
|
|
46
|
+
*/
|
|
47
|
+
export function replayPayload(request, payload) {
|
|
48
|
+
const body = jsonObject.parse(payload);
|
|
49
|
+
const input = nativeItemsSchema.parse(body['input']);
|
|
50
|
+
return { ...body, input: expandCheckpoints(input, request.options.messages, request.options.provider, request.options.model) };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the Responses endpoint from the captured model descriptor.
|
|
54
|
+
* @param baseUrl - configured native model endpoint.
|
|
55
|
+
* @returns Codex Responses URL.
|
|
56
|
+
*/
|
|
57
|
+
export function codexResponsesUrl(baseUrl) {
|
|
58
|
+
const base = baseUrl.replace(/\/+$/, '');
|
|
59
|
+
if (base.endsWith('/codex/responses'))
|
|
60
|
+
return base;
|
|
61
|
+
if (base.endsWith('/codex'))
|
|
62
|
+
return `${base}/responses`;
|
|
63
|
+
return `${base}/codex/responses`;
|
|
64
|
+
}
|
|
65
|
+
/** Plugin-owned native request execution, cancelled before its proxy is closed. */
|
|
66
|
+
export class CodexNativeBridge extends Service {
|
|
67
|
+
config;
|
|
68
|
+
fetchImpl;
|
|
69
|
+
stopping = new AbortController();
|
|
70
|
+
active = new Set();
|
|
71
|
+
constructor(ctx, config, fetchImpl = fetch) {
|
|
72
|
+
super(ctx, 'gptSubNative');
|
|
73
|
+
this.config = config;
|
|
74
|
+
this.fetchImpl = fetchImpl;
|
|
75
|
+
onPiAiNativeStream(ctx, (request, next) => {
|
|
76
|
+
if (request.options.provider !== 'openai-codex')
|
|
77
|
+
return next();
|
|
78
|
+
if (request.model.api !== 'openai-codex-responses') {
|
|
79
|
+
throw new LlmError('Codex native compaction requires the openai-codex-responses protocol', 'INVALID_CONFIG');
|
|
80
|
+
}
|
|
81
|
+
if (request.options.purpose === 'compaction')
|
|
82
|
+
return this.compact(request);
|
|
83
|
+
const checkpoints = request.options.messages.some(message => 'source' in message && readCheckpoint(message.source) !== undefined);
|
|
84
|
+
if (!checkpoints)
|
|
85
|
+
return next();
|
|
86
|
+
return request.stream({
|
|
87
|
+
...request.streamOptions,
|
|
88
|
+
onPayload: payload => replayPayload(request, payload),
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
ctx.on('llm/stream', (options, next) => {
|
|
92
|
+
for (const message of options.messages) {
|
|
93
|
+
if (!('source' in message))
|
|
94
|
+
continue;
|
|
95
|
+
const checkpoint = readCheckpoint(message.source);
|
|
96
|
+
if (checkpoint !== undefined && (checkpoint.provider !== options.provider || checkpoint.model !== options.model)) {
|
|
97
|
+
throw new LlmError(`This Session contains a Codex checkpoint for ${checkpoint.model}; use the same model or start a new Session`, 'UNSUPPORTED_CONTENT');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return next();
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Abort and await all native compaction requests before transport teardown.
|
|
105
|
+
* @returns completion of every active request.
|
|
106
|
+
*/
|
|
107
|
+
async stop() {
|
|
108
|
+
this.stopping.abort(new Error('Codex subscription plugin unloaded'));
|
|
109
|
+
await Promise.all(this.active);
|
|
110
|
+
}
|
|
111
|
+
async *compact(request) {
|
|
112
|
+
let settle = () => undefined;
|
|
113
|
+
const done = new Promise(resolve => { settle = resolve; });
|
|
114
|
+
this.active.add(done);
|
|
115
|
+
const signal = AbortSignal.any([
|
|
116
|
+
this.stopping.signal,
|
|
117
|
+
AbortSignal.timeout(this.config.nativeCompactionTimeoutMs),
|
|
118
|
+
...request.streamOptions.signal === undefined ? [] : [request.streamOptions.signal],
|
|
119
|
+
]);
|
|
120
|
+
let reader;
|
|
121
|
+
try {
|
|
122
|
+
signal.throwIfAborted();
|
|
123
|
+
const token = request.streamOptions.apiKey;
|
|
124
|
+
if (token === undefined)
|
|
125
|
+
throw new LlmError('Codex native compaction requires a resolved subscription token', 'MISSING_CREDENTIAL');
|
|
126
|
+
const payloadPart = token.split('.')[1];
|
|
127
|
+
if (payloadPart === undefined)
|
|
128
|
+
throw new LlmError('Codex subscription token is not a JWT', 'MISSING_CREDENTIAL');
|
|
129
|
+
const account = claimsSchema.parse(JSON.parse(Buffer.from(payloadPart, 'base64url').toString('utf8')));
|
|
130
|
+
const serialized = convertResponsesMessages(request.model, normalizeContext(request.context), new Set(['openai', 'openai-codex', 'azure-openai-responses']), {
|
|
131
|
+
includeSystemPrompt: false,
|
|
132
|
+
});
|
|
133
|
+
const input = expandCheckpoints(nativeItemsSchema.parse(JSON.parse(JSON.stringify(serialized))), request.options.messages, request.options.provider, request.options.model);
|
|
134
|
+
const body = {
|
|
135
|
+
model: request.model.id,
|
|
136
|
+
store: false,
|
|
137
|
+
stream: true,
|
|
138
|
+
instructions: request.context.systemPrompt ?? '',
|
|
139
|
+
input: [...input, { type: 'compaction_trigger' }],
|
|
140
|
+
parallel_tool_calls: true,
|
|
141
|
+
include: ['reasoning.encrypted_content'],
|
|
142
|
+
...request.options.sessionId === undefined ? {} : { prompt_cache_key: String(request.options.sessionId) },
|
|
143
|
+
};
|
|
144
|
+
if (request.context.tools !== undefined)
|
|
145
|
+
body['tools'] = convertResponsesTools(request.context.tools, { strict: null });
|
|
146
|
+
const reasoning = request.streamOptions.reasoning;
|
|
147
|
+
if (reasoning !== undefined) {
|
|
148
|
+
const effort = request.model.thinkingLevelMap?.[reasoning] ?? reasoning;
|
|
149
|
+
body['reasoning'] = { effort, summary: 'auto' };
|
|
150
|
+
}
|
|
151
|
+
const headers = new Headers();
|
|
152
|
+
for (const [name, value] of Object.entries({ ...request.model.headers, ...request.streamOptions.headers })) {
|
|
153
|
+
if (value !== null && value !== undefined)
|
|
154
|
+
headers.set(name, value);
|
|
155
|
+
}
|
|
156
|
+
headers.set('authorization', `Bearer ${token}`);
|
|
157
|
+
headers.set('chatgpt-account-id', account['https://api.openai.com/auth'].chatgpt_account_id);
|
|
158
|
+
headers.set('originator', 'codex_cli_rs');
|
|
159
|
+
headers.set('OpenAI-Beta', 'responses=experimental');
|
|
160
|
+
headers.set('content-type', 'application/json');
|
|
161
|
+
headers.set('accept', 'text/event-stream');
|
|
162
|
+
if (request.options.sessionId !== undefined)
|
|
163
|
+
headers.set('session-id', String(request.options.sessionId));
|
|
164
|
+
const response = await this.fetchImpl(codexResponsesUrl(request.model.baseUrl), {
|
|
165
|
+
method: 'POST', headers, body: JSON.stringify(body), signal,
|
|
166
|
+
});
|
|
167
|
+
if (!response.ok)
|
|
168
|
+
throw new LlmError(`Codex native compaction HTTP ${response.status}: ${await response.text()}`, 'CODEX_COMPACTION_HTTP_ERROR');
|
|
169
|
+
if (response.body === null)
|
|
170
|
+
throw new LlmError('Codex native compaction returned no response stream', 'STREAM_CLOSED');
|
|
171
|
+
reader = response.body.getReader();
|
|
172
|
+
const events = [];
|
|
173
|
+
let parseError;
|
|
174
|
+
const parser = createParser({ onEvent: event => events.push(event.data), onError: error => { parseError = error; } });
|
|
175
|
+
const decoder = new TextDecoder();
|
|
176
|
+
let receivedBytes = 0;
|
|
177
|
+
let compaction;
|
|
178
|
+
let compactionCount = 0;
|
|
179
|
+
let completed;
|
|
180
|
+
while (completed === undefined) {
|
|
181
|
+
const chunk = await reader.read();
|
|
182
|
+
if (chunk.done) {
|
|
183
|
+
parser.feed(decoder.decode());
|
|
184
|
+
if (events.length === 0)
|
|
185
|
+
throw new LlmError('Codex compaction stream closed before response.completed', 'STREAM_CLOSED');
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
receivedBytes += chunk.value.byteLength;
|
|
189
|
+
if (receivedBytes > this.config.nativeResponseMaxBytes)
|
|
190
|
+
throw new LlmError('Codex compaction response exceeded nativeResponseMaxBytes', 'CODEX_COMPACTION_RESPONSE_LIMIT');
|
|
191
|
+
parser.feed(decoder.decode(chunk.value, { stream: true }));
|
|
192
|
+
}
|
|
193
|
+
if (parseError !== undefined)
|
|
194
|
+
throw parseError;
|
|
195
|
+
for (const data of events.splice(0)) {
|
|
196
|
+
if (data === '[DONE]')
|
|
197
|
+
continue;
|
|
198
|
+
const event = jsonObject.parse(JSON.parse(data));
|
|
199
|
+
if (event['type'] === 'response.output_item.done') {
|
|
200
|
+
const item = nativeItemsSchema.element.parse(event['item']);
|
|
201
|
+
if (item['type'] === 'compaction') {
|
|
202
|
+
compaction = item;
|
|
203
|
+
compactionCount += 1;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else if (event['type'] === 'response.completed')
|
|
207
|
+
completed = jsonObject.parse(event['response']);
|
|
208
|
+
else if (event['type'] === 'error' || event['type'] === 'response.failed' || event['type'] === 'response.incomplete') {
|
|
209
|
+
throw new LlmError(`Codex native compaction failed: ${data}`, 'CODEX_COMPACTION_ERROR');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
signal.throwIfAborted();
|
|
213
|
+
if (chunk.done && completed === undefined)
|
|
214
|
+
throw new LlmError('Codex compaction stream closed before response.completed', 'STREAM_CLOSED');
|
|
215
|
+
}
|
|
216
|
+
if (compactionCount !== 1 || compaction === undefined || typeof compaction['encrypted_content'] !== 'string' || compaction['encrypted_content'].length === 0) {
|
|
217
|
+
throw new LlmError(`Codex native compaction expected one encrypted compaction item, received ${compactionCount}`, 'INVALID_REPLAY_STATE');
|
|
218
|
+
}
|
|
219
|
+
const responseId = z.string().min(1).parse(completed['id']);
|
|
220
|
+
const usage = usageSchema.parse(completed['usage']);
|
|
221
|
+
const cached = usage.input_tokens_details?.cached_tokens ?? 0;
|
|
222
|
+
const tokenUsage = {
|
|
223
|
+
inputTokens: Math.max(0, usage.input_tokens - cached),
|
|
224
|
+
outputTokens: usage.output_tokens,
|
|
225
|
+
cacheReadTokens: cached,
|
|
226
|
+
totalTokens: usage.input_tokens + usage.output_tokens,
|
|
227
|
+
};
|
|
228
|
+
yield {
|
|
229
|
+
type: 'block-end', index: 0,
|
|
230
|
+
block: {
|
|
231
|
+
type: 'codex-compaction-result', item: compaction, responseId,
|
|
232
|
+
summaryTokens: usage.output_tokens,
|
|
233
|
+
retained: retainUserItems(input, this.config.nativeRetainTokens),
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
yield { type: 'usage', usage: tokenUsage };
|
|
237
|
+
yield { type: 'finish', reason: { kind: 'stop' } };
|
|
238
|
+
}
|
|
239
|
+
finally {
|
|
240
|
+
try {
|
|
241
|
+
await reader?.cancel();
|
|
242
|
+
}
|
|
243
|
+
finally {
|
|
244
|
+
reader?.releaseLock();
|
|
245
|
+
this.active.delete(done);
|
|
246
|
+
settle();
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=native-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-bridge.js","sourceRoot":"","sources":["../src/native-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/** Persisted Codex compaction windows and their Responses input projection. */
|
|
2
|
+
import type { ContentBlock, MessageSource, RequestMessage } from '@deepseek-ai/dsh-llm';
|
|
3
|
+
import type { CompactionCheckpointSource } from '@deepseek-ai/dsh-compaction/checkpoint';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
/** Lossless JSON validation for provider-native Responses items. */
|
|
6
|
+
export declare const nativeItemsSchema: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodJSONSchema>>;
|
|
7
|
+
/** One lossless provider-native Responses input item. */
|
|
8
|
+
export type NativeItem = z.infer<typeof nativeItemsSchema>[number];
|
|
9
|
+
declare const checkpointSchema: z.ZodObject<{
|
|
10
|
+
version: z.ZodLiteral<1>;
|
|
11
|
+
provider: z.ZodLiteral<"openai-codex">;
|
|
12
|
+
model: z.ZodString;
|
|
13
|
+
items: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodJSONSchema>>;
|
|
14
|
+
contextTokens: z.ZodNumber;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
/** Native window carried by a persisted replacement message. */
|
|
17
|
+
export type CodexCheckpoint = z.infer<typeof checkpointSchema>;
|
|
18
|
+
/** Backend-independent checkpoint identity with plugin-owned native state. */
|
|
19
|
+
export type CodexCheckpointSource = CompactionCheckpointSource & {
|
|
20
|
+
readonly nativeCodex: CodexCheckpoint;
|
|
21
|
+
};
|
|
22
|
+
/** Completed native compaction output and the retained user messages. */
|
|
23
|
+
export interface NativeCompactionResultBlock {
|
|
24
|
+
type: 'codex-compaction-result';
|
|
25
|
+
item: NativeItem;
|
|
26
|
+
retained: NativeItem[];
|
|
27
|
+
responseId: string;
|
|
28
|
+
summaryTokens: number;
|
|
29
|
+
}
|
|
30
|
+
declare module '@deepseek-ai/dsh-llm' {
|
|
31
|
+
interface ContentBlockMap {
|
|
32
|
+
'codex-compaction-result': NativeCompactionResultBlock;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Validate plugin state restored with one checkpoint source.
|
|
37
|
+
* @param source - source of the durable message.
|
|
38
|
+
* @returns native state, or undefined for other producers.
|
|
39
|
+
*/
|
|
40
|
+
export declare function readCheckpoint(source: MessageSource): CodexCheckpoint | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Replace logged checkpoint markers with their exact native items.
|
|
43
|
+
* @param input - serialized Responses input.
|
|
44
|
+
* @param messages - durable history that produced the input.
|
|
45
|
+
* @param provider - captured provider route.
|
|
46
|
+
* @param model - captured model id.
|
|
47
|
+
* @returns input with each checkpoint expanded once, preserving order.
|
|
48
|
+
*/
|
|
49
|
+
export declare function expandCheckpoints(input: readonly NativeItem[], messages: readonly RequestMessage[], provider: string, model: string): NativeItem[];
|
|
50
|
+
/**
|
|
51
|
+
* Retain recent user items within a structural token budget.
|
|
52
|
+
* @param input - expanded native history sent for compaction.
|
|
53
|
+
* @param budget - maximum estimated tokens retained verbatim.
|
|
54
|
+
* @returns recent user items in conversation order.
|
|
55
|
+
*/
|
|
56
|
+
export declare function retainUserItems(input: readonly NativeItem[], budget: number): NativeItem[];
|
|
57
|
+
/**
|
|
58
|
+
* Estimate a plaintext native item's serialized token cost.
|
|
59
|
+
* @param item - retained user item, excluding encrypted compaction state.
|
|
60
|
+
* @returns conservative structural token estimate.
|
|
61
|
+
*/
|
|
62
|
+
export declare function nativeItemTokens(item: NativeItem): number;
|
|
63
|
+
/**
|
|
64
|
+
* Read the completed compaction block assembled from the auxiliary stream.
|
|
65
|
+
* @param blocks - complete auxiliary output.
|
|
66
|
+
* @returns the unique native compaction result.
|
|
67
|
+
*/
|
|
68
|
+
export declare function nativeResult(blocks: readonly ContentBlock[]): NativeCompactionResultBlock;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=native-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-history.d.ts","sourceRoot":"","sources":["../src/native-history.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACvF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAA;AACxF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,uDAA0C,CAAA;AACxE,yDAAyD;AACzD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAA;AAClE,QAAA,MAAM,gBAAgB;;;;;;iBAMpB,CAAA;AAEF,gEAAgE;AAChE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE9D,8EAA8E;AAC9E,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,GAAG;IAAE,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAA;CAAE,CAAA;AAE1G,yEAAyE;AACzE,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,yBAAyB,CAAA;IAC/B,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,eAAe;QACvB,yBAAyB,EAAE,2BAA2B,CAAA;KACvD;CACF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,eAAe,GAAG,SAAS,CAYjF;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,QAAQ,EAAE,SAAS,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GACjG,UAAU,EAAE,CA+Bd;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAW1F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,2BAA2B,CAMzF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** Lossless JSON validation for provider-native Responses items. */
|
|
3
|
+
export const nativeItemsSchema = z.array(z.record(z.string(), z.json()));
|
|
4
|
+
const checkpointSchema = z.object({
|
|
5
|
+
version: z.literal(1),
|
|
6
|
+
provider: z.literal('openai-codex'),
|
|
7
|
+
model: z.string().min(1),
|
|
8
|
+
items: nativeItemsSchema.min(1),
|
|
9
|
+
contextTokens: z.number().int().nonnegative(),
|
|
10
|
+
});
|
|
11
|
+
/**
|
|
12
|
+
* Validate plugin state restored with one checkpoint source.
|
|
13
|
+
* @param source - source of the durable message.
|
|
14
|
+
* @returns native state, or undefined for other producers.
|
|
15
|
+
*/
|
|
16
|
+
export function readCheckpoint(source) {
|
|
17
|
+
if (!('nativeCodex' in source))
|
|
18
|
+
return undefined;
|
|
19
|
+
if (source.kind !== 'compact-checkpoint')
|
|
20
|
+
throw new Error('Codex native state requires a compaction checkpoint');
|
|
21
|
+
const state = checkpointSchema.parse(source.nativeCodex);
|
|
22
|
+
if (state.items.filter(item => item['type'] === 'compaction').length !== 1) {
|
|
23
|
+
throw new Error('Codex checkpoint must contain exactly one compaction item');
|
|
24
|
+
}
|
|
25
|
+
const item = state.items.find(value => value['type'] === 'compaction');
|
|
26
|
+
if (typeof item?.['encrypted_content'] !== 'string' || item['encrypted_content'].length === 0) {
|
|
27
|
+
throw new Error('Codex checkpoint is missing encrypted_content');
|
|
28
|
+
}
|
|
29
|
+
return state;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Replace logged checkpoint markers with their exact native items.
|
|
33
|
+
* @param input - serialized Responses input.
|
|
34
|
+
* @param messages - durable history that produced the input.
|
|
35
|
+
* @param provider - captured provider route.
|
|
36
|
+
* @param model - captured model id.
|
|
37
|
+
* @returns input with each checkpoint expanded once, preserving order.
|
|
38
|
+
*/
|
|
39
|
+
export function expandCheckpoints(input, messages, provider, model) {
|
|
40
|
+
const checkpoints = new Map();
|
|
41
|
+
for (const message of messages) {
|
|
42
|
+
if (!('source' in message))
|
|
43
|
+
continue;
|
|
44
|
+
const state = readCheckpoint(message.source);
|
|
45
|
+
if (state === undefined)
|
|
46
|
+
continue;
|
|
47
|
+
if (state.provider !== provider || state.model !== model) {
|
|
48
|
+
throw new Error(`Codex checkpoint belongs to ${state.provider}/${state.model}; start a new Session to use ${provider}/${model}`);
|
|
49
|
+
}
|
|
50
|
+
const marker = message.content.filter(block => block.type === 'text').map(block => block.text).join('');
|
|
51
|
+
if (marker.length === 0 || checkpoints.has(marker))
|
|
52
|
+
throw new Error('invalid Codex checkpoint marker');
|
|
53
|
+
checkpoints.set(marker, state);
|
|
54
|
+
}
|
|
55
|
+
if (checkpoints.size === 0)
|
|
56
|
+
return [...input];
|
|
57
|
+
const remaining = new Set(checkpoints.keys());
|
|
58
|
+
const output = [];
|
|
59
|
+
for (const item of input) {
|
|
60
|
+
const content = item['content'];
|
|
61
|
+
const text = item['role'] === 'user' && Array.isArray(content)
|
|
62
|
+
? content.map(value => typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
63
|
+
&& value['type'] === 'input_text' && typeof value['text'] === 'string' ? value['text'] : '').join('')
|
|
64
|
+
: '';
|
|
65
|
+
const checkpoint = checkpoints.get(text);
|
|
66
|
+
if (checkpoint === undefined)
|
|
67
|
+
output.push(item);
|
|
68
|
+
else {
|
|
69
|
+
if (!remaining.delete(text))
|
|
70
|
+
throw new Error('Codex checkpoint marker was serialized more than once');
|
|
71
|
+
output.push(...checkpoint.items);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (remaining.size > 0)
|
|
75
|
+
throw new Error('Codex checkpoint marker was lost during request conversion');
|
|
76
|
+
return output;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Retain recent user items within a structural token budget.
|
|
80
|
+
* @param input - expanded native history sent for compaction.
|
|
81
|
+
* @param budget - maximum estimated tokens retained verbatim.
|
|
82
|
+
* @returns recent user items in conversation order.
|
|
83
|
+
*/
|
|
84
|
+
export function retainUserItems(input, budget) {
|
|
85
|
+
const retained = [];
|
|
86
|
+
let remaining = budget;
|
|
87
|
+
for (const item of [...input].reverse()) {
|
|
88
|
+
if (item['role'] !== 'user' || (item['type'] !== undefined && item['type'] !== 'message'))
|
|
89
|
+
continue;
|
|
90
|
+
const price = nativeItemTokens(item);
|
|
91
|
+
if (price > remaining)
|
|
92
|
+
break;
|
|
93
|
+
retained.push(item);
|
|
94
|
+
remaining -= price;
|
|
95
|
+
}
|
|
96
|
+
return retained.reverse();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Estimate a plaintext native item's serialized token cost.
|
|
100
|
+
* @param item - retained user item, excluding encrypted compaction state.
|
|
101
|
+
* @returns conservative structural token estimate.
|
|
102
|
+
*/
|
|
103
|
+
export function nativeItemTokens(item) {
|
|
104
|
+
return Math.ceil(JSON.stringify(item).length / 4) + 4;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Read the completed compaction block assembled from the auxiliary stream.
|
|
108
|
+
* @param blocks - complete auxiliary output.
|
|
109
|
+
* @returns the unique native compaction result.
|
|
110
|
+
*/
|
|
111
|
+
export function nativeResult(blocks) {
|
|
112
|
+
const results = blocks.filter(block => block.type === 'codex-compaction-result');
|
|
113
|
+
if (results.length !== 1)
|
|
114
|
+
throw new Error('native Codex compaction did not return exactly one result');
|
|
115
|
+
const result = results[0];
|
|
116
|
+
if (result === undefined)
|
|
117
|
+
throw new Error('native Codex compaction result is missing');
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=native-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-history.js","sourceRoot":"","sources":["../src/native-history.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -14,5 +14,11 @@ export interface Config {
|
|
|
14
14
|
bootstrapRetries: number;
|
|
15
15
|
/** Where the panel's runtime overrides (proxy, credential file) are persisted. */
|
|
16
16
|
stateFile: string;
|
|
17
|
+
/** Total timeout for a native Codex compaction request. */
|
|
18
|
+
nativeCompactionTimeoutMs: number;
|
|
19
|
+
/** Recent user-message budget retained alongside the encrypted summary. */
|
|
20
|
+
nativeRetainTokens: number;
|
|
21
|
+
/** Maximum streamed bytes accepted from one native compaction response. */
|
|
22
|
+
nativeResponseMaxBytes: number;
|
|
17
23
|
}
|
|
18
24
|
//# sourceMappingURL=types.d.ts.map
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,WAAW,MAAM;IACrB,iGAAiG;IACjG,QAAQ,EAAE,MAAM,CAAA;IAChB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAA;IAChB,wEAAwE;IACxE,oBAAoB,EAAE,MAAM,CAAA;IAC5B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAA;IAChB,wEAAwE;IACxE,mBAAmB,EAAE,MAAM,CAAA;IAC3B,+EAA+E;IAC/E,gBAAgB,EAAE,MAAM,CAAA;IACxB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,WAAW,MAAM;IACrB,iGAAiG;IACjG,QAAQ,EAAE,MAAM,CAAA;IAChB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAA;IAChB,wEAAwE;IACxE,oBAAoB,EAAE,MAAM,CAAA;IAC5B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAA;IAChB,wEAAwE;IACxE,mBAAmB,EAAE,MAAM,CAAA;IAC3B,+EAA+E;IAC/E,gBAAgB,EAAE,MAAM,CAAA;IACxB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAA;IACjB,2DAA2D;IAC3D,yBAAyB,EAAE,MAAM,CAAA;IACjC,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAA;IAC1B,2EAA2E;IAC3E,sBAAsB,EAAE,MAAM,CAAA;CAC/B"}
|