@gajae-code/agent-core 0.10.1 → 0.10.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 +6 -0
- package/dist/types/agent.d.ts +1 -1
- package/dist/types/types.d.ts +1 -1
- package/package.json +4 -4
- package/src/agent.ts +1 -1
- package/src/compaction/openai.ts +16 -5
- package/src/types.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.10.2] - 2026-07-14
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Extended the gpt-5.6 `Request blocked (code=invalid_prompt)` fix to the compaction paths that bypass the streaming transport. Remote OpenAI compaction (`/responses/compact`, `compaction.remoteEnabled` default on — the "remote compact task" in openai/codex#32028) built its native `input` from reasoning signatures, verbatim history items, and message/tool text without neutralizing leaked Harmony control-token markers (e.g. `<|channel|>analysis`), so gpt-5.6 rejected the compaction request and, on retry, could escalate to account-level blocking. `requestOpenAiRemoteCompaction` now neutralizes reserved control tokens across the whole outgoing `input`, and the generic `requestRemoteCompaction` prompt/systemPrompt are neutralized too. Local summarization was already covered by the streaming-transport request-boundary fix.
|
|
10
|
+
|
|
5
11
|
## [0.10.0] - 2026-07-12
|
|
6
12
|
|
|
7
13
|
### Fixed
|
package/dist/types/agent.d.ts
CHANGED
|
@@ -310,7 +310,7 @@ export declare class Agent {
|
|
|
310
310
|
emitExternalEvent(event: AgentEvent): void;
|
|
311
311
|
createExternalEventEmitterForCurrentRun(): ((event: AgentEvent) => void) | undefined;
|
|
312
312
|
setSystemPrompt(v: string[]): void;
|
|
313
|
-
setModel(m: Model): void;
|
|
313
|
+
setModel(m: Model | undefined): void;
|
|
314
314
|
setThinkingLevel(l: Effort | undefined): void;
|
|
315
315
|
setSteeringMode(mode: "all" | "one-at-a-time"): void;
|
|
316
316
|
getSteeringMode(): "all" | "one-at-a-time";
|
package/dist/types/types.d.ts
CHANGED
|
@@ -308,7 +308,7 @@ export type AgentMessage = Message | CustomAgentMessages[keyof CustomAgentMessag
|
|
|
308
308
|
*/
|
|
309
309
|
export interface AgentState {
|
|
310
310
|
systemPrompt: string[];
|
|
311
|
-
model: Model;
|
|
311
|
+
model: Model | undefined;
|
|
312
312
|
thinkingLevel?: Effort;
|
|
313
313
|
tools: AgentTool<any>[];
|
|
314
314
|
messages: AgentMessage[];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@gajae-code/agent-core",
|
|
4
|
-
"version": "0.10.
|
|
4
|
+
"version": "0.10.2",
|
|
5
5
|
"description": "General-purpose agent with transport abstraction, state management, and attachment support",
|
|
6
6
|
"homepage": "https://gajae-code.com",
|
|
7
7
|
"author": "Yeachan-Heo and Gajae Code Contributors",
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"fmt": "biome format --write ."
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@gajae-code/ai": "0.10.
|
|
36
|
-
"@gajae-code/natives": "0.10.
|
|
37
|
-
"@gajae-code/utils": "0.10.
|
|
35
|
+
"@gajae-code/ai": "0.10.2",
|
|
36
|
+
"@gajae-code/natives": "0.10.2",
|
|
37
|
+
"@gajae-code/utils": "0.10.2",
|
|
38
38
|
"@opentelemetry/api": "^1.9.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
package/src/agent.ts
CHANGED
package/src/compaction/openai.ts
CHANGED
|
@@ -24,6 +24,8 @@ import type { AssistantMessage, Message, Model } from "@gajae-code/ai/types";
|
|
|
24
24
|
import {
|
|
25
25
|
getOpenAIResponsesHistoryItems,
|
|
26
26
|
getOpenAIResponsesHistoryPayload,
|
|
27
|
+
neutralizeReservedControlTokens,
|
|
28
|
+
neutralizeResponsesInputControlTokens,
|
|
27
29
|
normalizeResponsesToolCallId,
|
|
28
30
|
} from "@gajae-code/ai/utils";
|
|
29
31
|
import { $env, logger } from "@gajae-code/utils";
|
|
@@ -479,10 +481,12 @@ export async function requestOpenAiRemoteCompaction(
|
|
|
479
481
|
const endpoint = resolveOpenAiCompactEndpoint(model, options?.authCredentialType);
|
|
480
482
|
const request: OpenAiRemoteCompactionRequest = {
|
|
481
483
|
model: model.id,
|
|
482
|
-
input:
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
484
|
+
input: neutralizeResponsesInputControlTokens(
|
|
485
|
+
trimOpenAiCompactInput(
|
|
486
|
+
compactInput,
|
|
487
|
+
resolveOpenAiCompactInputBudget(model.contextWindow, model.maxTokens),
|
|
488
|
+
instructions,
|
|
489
|
+
),
|
|
486
490
|
),
|
|
487
491
|
instructions,
|
|
488
492
|
};
|
|
@@ -553,10 +557,17 @@ export async function requestRemoteCompaction(
|
|
|
553
557
|
request: RemoteCompactionRequest,
|
|
554
558
|
signal?: AbortSignal,
|
|
555
559
|
): Promise<RemoteCompactionResponse> {
|
|
560
|
+
// The prompt embeds the serialized transcript, which can carry leaked Harmony
|
|
561
|
+
// control-token markers (e.g. `<|channel|>analysis`) from model output; a
|
|
562
|
+
// gpt-5.6-backed summarization endpoint rejects those with `Request blocked`.
|
|
563
|
+
const sanitizedRequest: RemoteCompactionRequest = {
|
|
564
|
+
systemPrompt: neutralizeReservedControlTokens(request.systemPrompt),
|
|
565
|
+
prompt: neutralizeReservedControlTokens(request.prompt),
|
|
566
|
+
};
|
|
556
567
|
const response = await fetch(endpoint, {
|
|
557
568
|
method: "POST",
|
|
558
569
|
headers: { "content-type": "application/json" },
|
|
559
|
-
body: JSON.stringify(
|
|
570
|
+
body: JSON.stringify(sanitizedRequest),
|
|
560
571
|
signal,
|
|
561
572
|
});
|
|
562
573
|
|
package/src/types.ts
CHANGED
|
@@ -357,7 +357,7 @@ export type AgentMessage = Message | CustomAgentMessages[keyof CustomAgentMessag
|
|
|
357
357
|
*/
|
|
358
358
|
export interface AgentState {
|
|
359
359
|
systemPrompt: string[];
|
|
360
|
-
model: Model;
|
|
360
|
+
model: Model | undefined;
|
|
361
361
|
thinkingLevel?: Effort;
|
|
362
362
|
tools: AgentTool<any>[];
|
|
363
363
|
messages: AgentMessage[]; // Can include attachments + custom message types
|