Dashboard › opencode-lore › Session 0e5Qhokmvwan
0e5QhokmvwanR31lBPerform a strict READ-ONLY independent adversarial correctness review in /home/byk/Code/opencode-lore-responses-projection-security. Do not edit files or mutate VCS. Candidate stable change zlsmzkntqzzxsqvyxzzpxltmrsprymww, commit a3fa555bdcabb376aa33278bdb76007269f1940a. Base literal 2cbf40060c67df229731cf1b9e34d5bf22ec2145. Expected plain diff SHA-256 a7e914bd8ffb704f8fba2798f9de95fd4668b7212a485304c1cf7c056c278a40; expected changed paths exactly packages/gateway/src/pipeline.ts and packages/gateway/test/openai-responses-recall-aware-stream.test.ts. Read AGENTS.md, quality/REVIEW.md, relevant package scripts, every changed line and relevant callers. Verify identity/status/conflicts/scope/hash before and after. Review all hidden-output/public output_index behavior: direct sparse principal frames vs dense terminal output, late lower/higher streamed and terminal-discovered recall, deferred/continuation coordinates, synthetic anchors, contiguous sequence emission, malformed/opaque/unindexed/indexed extension redaction, allowlisted codex.rate_limits internal accumulation, created_at normalization, retained-state ordering, unresolved sparse tools, retries/baselines, terminal consistency, cancellation/backpressure, exact-once callbacks, resource bounds, and complexity. Evaluate fail-first and guard-removal discrimination. You may run focused tests but not the exhaustive suite (delegated separately). Report non-empty PASS/CONCERN/MUST-FIX findings with exact current file:line evidence and residual risks. End exactly MERGE or DO-NOT-MERGE.
<skill_content name="jj-guide"> # Skill: jj-guide # jj Guide for AI Agents Jujutsu (jj) is a Git-compatible VCS with mutable commits, automatic snapshotting, no staging area, and first-class conflicts. This skill teaches you how to use it safely from a non-interactive agent environment. If `.jj/` exists in the repo root, this is a jj repo. **Use `jj` commands, not `git`.** In a colocated repo (`.jj/` *and* `.git/`), git tools can read the state, but mutations should go through `jj` so the operation log stays consistent. ## Critical Rules - **NEVER** use interactive flags (`-i`, `--interactive`). TUI prompts hang in agent environments. This applies to `jj split -i`, `jj squash -i`, `jj commit -i`, `jj resolve`, `jj diffedit`, etc. - **ALWAYS** pass `-m "msg"` when describing/committing. Without `-m`, an editor opens and hangs. - **VERIFY** mutations with `jj st` and `jj log` after `squash`, `abandon`, `rebase`, `restore`, `commit`. ...
<path>/home/byk/Code/opencode-lore-responses-projection-security</path> <type>directory</type> <entries> .craft.yml .git .github/ .gitignore .jj/ .lore.md .oxfmtrc.json .oxlintrc.json AGENTS.md CHANGELOG.md codecov.yml LICENSE node_modules/ package.json packages/ patches/ pnpm-lock.yaml pnpm-workspace.yaml quality/ README.md scripts/ stryker.config.mjs supabase/ tsconfig.base.json tsconfig.json vitest.config.ts vitest.evals.config.ts vitest.mutation.config.ts (28 entries) </entries>
The working copy has no changes. Working copy (@) : lnvrxqoq 884f9b00 (empty) (no description set) Parent commit (@-): zlsmzknt a3fa555b fix/responses-hidden-output* | fix(responses): harden hidden-output projection Warning: These bookmarks have conflicts: fix/responses-private-references Hint: Use `jj bookmark list` to see details. Use `jj bookmark set <name> -r <rev>` to resolve.
lnvrxqoqsqutpvpxvnppskkmmmsztwus 884f9b007c89e71800dbebc00af2e22f0454e592 parents=a3fa555bdcabb376aa33278bdb76007269f1940a conflict=false empty=true description= zlsmzkntqzzxsqvyxzzpxltmrsprymww a3fa555bdcabb376aa33278bdb76007269f1940a parents=583020fad43e1481470aac2588251b8636d16251 conflict=false empty=false description=fix(responses): harden hidden-output projection pxrvwsvvkmpoxnsqmrkwrnlqvvkoltwz 2cbf40060c67df229731cf1b9e34d5bf22ec2145 parents=e977b4b1da8f8197c3238466d41de0bccd8eb054 conflict=false empty=false description=feat(cch): add seeds for Claude Code up to 2.1.272 (#1780)
M packages/gateway/src/pipeline.ts M packages/gateway/test/openai-responses-recall-aware-stream.test.ts
c4e0f41b3ce8f3cb96fc080925f58b36b6127799bb50918d47d683330431af02 -
c4e0f41b3ce8f3cb96fc080925f58b36b6127799bb50918d47d683330431af02 -
a7e914bd8ffb704f8fba2798f9de95fd4668b7212a485304c1cf7c056c278a40 -
...output truncated...
Full output saved to: /home/byk/.local/share/opencode/tool-output/tool_0aae0c7110010UfGYYPLlx3GZT
+ event,
+ JSON.stringify({ ...parsed, output_index: visibleIndex }),
+ );
+ }
+ return encoder.encode(output);
+ }
+
let resumeDemand: (() => void) | undefined;
const cleanupAbort = (): void =>
signal.removeEventListener("abort", onStreamAbort);
@@ -10023,6 +10132,7 @@
| undefined;
let continuationFailureReported = false;
let recallDetected = false;
+ let projectionInvalid = false;
type PrincipalFailureCategory =
| "principal_transport"
| "principal_resource_limit"
@@ -10058,8 +10168,129 @@
// Recall items are gateway-internal and must stay hidden on every exit,
// including failures raised before marker replacement. ...
packages/gateway/src/pipeline.ts | 449 +++++++++++--- ...est/openai-responses-recall-aware-stream.test.ts | 698 +++++++++++++++++++++- 2 files changed, 1051 insertions(+), 96 deletions(-)
<path>/home/byk/Code/opencode-lore-responses-projection-security/AGENTS.md</path> <type>file</type> <content> 1: <!-- This section is maintained by the coding agent via lore (https://github.com/BYK/loreai) --> 2: ## Long-term Knowledge 3: 4: For long-term knowledge entries managed by [lore](https://github.com/BYK/loreai) (gotchas, patterns, decisions, architecture), see [`.lore.md`](.lore.md) in the project root. 5: <!-- End lore-managed section --> 6: 7: ## Review 8: 9: See [`quality/REVIEW.md`](quality/REVIEW.md) for the review heuristics and workflow — regression-test discipline, adversarial-order state setup, fan-out registry coverage, recurring bug-class batteries, and the two-reviewer rule. Every non-trivial PR requires an adversarial correctness review before merge. 10: 11: # Project Overview 12: 13: Lore is a **three-tier memory architecture** for AI coding agents. ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/quality/REVIEW.md</path> <type>file</type> <content> 1: # Review Heuristics — Lore 2: 3: This document codifies the review bar for pull requests. It exists because 4: adversarial review has repeatedly caught correctness bugs that a green test 5: suite missed — skip/early-return branches, lifecycle sequences, and fan-out 6: registry gaps. Institutionalizing these patterns so they compound. 7: 8: The review workflow (§6) is referenced from AGENTS.md. 9: 10: --- 11: 12: ## 1. Regression-test discipline 13: 14: Every adversarial-review finding that surfaces a defect **must** land a 15: deterministic regression test in the same PR. The test: 16: - fails on the base branch (proving it reproduces the bug), 17: - passes on the fix (proving the fix works), 18: - drives the *real* precondition, not an artificially-constructed state (e.g. ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/package.json</path>
<type>file</type>
<content>
1: {
2: "name": "lore-monorepo",
3: "private": true,
4: "type": "module",
5: "license": "FSL-1.1-Apache-2.0",
6: "description": "Monorepo root for Lore — three-tier memory architecture",
7: "main": "./packages/opencode/src/index.ts",
8: "exports": {
9: ".": "./packages/opencode/src/index.ts"
10: },
11: "packageManager": "pnpm@10.28.0",
12: "volta": {
13: "node": "24.16.0",
14: "pnpm": "10.28.0"
15: },
16: "pnpm": {
17: "onlyBuiltDependencies": [
18: "esbuild",
19: "onnxruntime-node",
20: "sharp"
21: ],
22: "overrides": {
23: "basic-ftp": "5.3.1",
24: "ip-address": "10.2.0",
25: "fast-xml-parser": "5.7.3",
26: "@huggingface/hub": "2.11.0",
27: "onnxruntime-node": "1.27.0",
28: "yaml": ">=2.8.3",
29: "esbuild": ">=0.28.1",
30: "@opentelemetry/core": ">=2.8.0",
31: ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/package.json</path>
<type>file</type>
<content>
1: {
2: "name": "@loreai/gateway",
3: "version": "0.40.0",
4: "type": "module",
5: "license": "FSL-1.1-Apache-2.0",
6: "description": "Lore as a transparent LLM proxy — context management for any AI coding client",
7: "main": "./dist/index.cjs",
8: "types": "./dist/index.d.cts",
9: "exports": {
10: ".": {
11: "types": "./dist/index.d.cts",
12: "bun": "./dist/index.bun.js",
13: "require": "./dist/index.cjs",
14: "default": "./dist/index.cjs"
15: }
16: },
17: "bin": {
18: "lore": "./dist/bin.cjs",
19: "lore-gateway": "./dist/bin.cjs"
20: },
21: "scripts": {
22: "typecheck": "tsc --noEmit",
23: "build": "tsx script/build.ts",
24: "bundle": "tsx script/bundle.ts",
25: "build:binary": "tsx script/build.ts --binary",
26: "build:binary:sea": "tsx script/build-binary-sea.ts",
27: ...
<path>/home/byk/.local/share/opencode/tool-output/tool_0aae0c7110010UfGYYPLlx3GZT</path> <type>file</type> <content> 1: packages/gateway/src/pipeline.ts | 449 +++++++++++--- 2: ...est/openai-responses-recall-aware-stream.test.ts | 698 +++++++++++++++++++++- 3: 2 files changed, 1051 insertions(+), 96 deletions(-) 4: diff --git a/packages/gateway/src/pipeline.ts b/packages/gateway/src/pipeline.ts 5: index 004e03b3e2..9aa7944751 100644 6: --- a/packages/gateway/src/pipeline.ts 7: +++ b/packages/gateway/src/pipeline.ts 8: @@ -8057,6 +8057,21 @@ 9: const sseInactivityMs = opts.sseInactivityMs ?? FOREGROUND_SSE_INACTIVITY_MS; 10: const maxPrincipalTransportRetries = 1; 11: const maxRecallContinuationTransportRetries = 1; 12: + const isSemanticResponsesEvent = (event: string): boolean => 13: + event === "response.created" || 14: + event === "response.in_progress" || 15: + event === "response.completed" || 16: + event === "response.done" || 17: + ...
<path>/home/byk/.local/share/opencode/tool-output/tool_0aae0c7110010UfGYYPLlx3GZT</path>
<type>file</type>
<content>
1359: + ]);
1360: + const client = streamResponsesRecallAware(
1361: + streamFrom([
1362: + created("resp_private_diagnostic_principal", "gpt-5.6-terra"),
1363: + recallCall(0, { query: "private recall query" }),
1364: + ...(source === "principal"
1365: + ? [rawSSEEvent("diagnostic", privateDiagnostic)]
1366: + : []),
1367: + completed("resp_private_diagnostic_principal"),
1368: + ]),
1369: + {
1370: + onComplete: () => {},
1371: + onRecall: async ({ query }) => ({
1372: + anchorText: buildAnchor(query),
1373: + resultText: "private recall result",
1374: + }),
1375: + runFollowUp: async () => {
1376: + if (!followUp.body) throw new Error("missing follow-up body");
1377: + return { reader: ...
Found 2 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts:
Line 7794: export function streamResponsesRecallAware(
Line 12107: function sanitizedUpstreamErrorResponse(response: Response): Response {
Found 41 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts:
Line 205: applyResponsesEvent,
Line 7932: const normalizeCodexEvent = (
Line 8382: applyResponsesEvent(state, "response.output_item.added", {
Line 9154: applyResponsesEvent(acc, "response.output_item.added", {
Line 9159: const validateResponseLifecycle = (
Line 9275: const assertOutputLifecyclesComplete = (
Line 9359: const assertTerminalOutputMatches = (
Line 9445: applyResponsesEvent(acc, "response.output_item.done", {
Line 9472: const consumeReferenceEvent = (
Line 9746: const shiftedOutputIndex = (index: number, offset: number): number => {
Line 9978: function visibleOutputIndexMap(
Line 9988: function remapVisibleOutputIndices(
Line 10281: remapVisibleOutputIndices(
Line 10381: applyResponsesEvent(state, event, parsed);
Line 10402: const normalizationState ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
150: unattributedBucketPath,
151: type ProjectPathResult,
152: } from "./config";
153: import {
154: generateSessionID,
155: fingerprintMessages,
156: MESSAGE_COUNT_PROXIMITY_THRESHOLD,
157: KNOWN_SESSION_HEADERS,
158: extractKnownSessionHeader,
159: isClaudeCodeSubagent,
160: learnHeaders,
161: observeHeaderValues,
162: isCredentialHeaderName,
163: } from "./session";
164: import {
165: detectCompactionRequest,
166: isStructuralCompaction,
167: isMetaRequest,
168: LORE_AGENT_HEADER,
169: extractPreviousSummary,
170: buildCompactionResponse,
171: assembleOfflineCompaction,
172: scaleUsageForClient,
173: maxReportedUsageForModel,
174: clientMeteredContextWindow,
175: requestEnablesLongContext,
176: MAX_OUTPUT_RESERVE,
177: DEFAULT_MAX_REPORTED_USAGE,
178: } from "./compaction";
179: import {
180: ...
Found 22 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/stream/openai-responses.ts:
Line 8: * response.created → response.in_progress →
Line 48: export interface ResponsesAccState {
Line 582: export function applyResponsesEvent(
Line 588: case "codex.rate_limits": {
Line 592: const quota: Record<string, unknown> = { type: "codex.rate_limits" };
Line 605: case "response.created":
Line 815: export function finalizeResponsesAcc(
Line 934: event === "response.created" ||
Line 956: event === "response.created" &&
Line 1662: event === "response.created" ||
Line 1692: event === "response.created" &&
Line 1750: export function normalizeCodexResponsesEvent(
Line 2383: export function formatResponsesEvent(event: string, data: string): string {
Line 2628: created_at: Math.floor(Date.now() / 1000),
Line 2712: * response.created → response.in_progress →
...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/stream/openai-responses.ts</path> <type>file</type> <content> 1: /** 2: * OpenAI Responses API SSE stream accumulator. 3: * 4: * Parses upstream Responses API streaming events and accumulates the full 5: * response into a `GatewayResponse`. The Responses API uses a different 6: * SSE event lifecycle than Anthropic: 7: * 8: * response.created → response.in_progress → 9: * response.output_item.added → response.output_text.delta (repeated) → 10: * response.output_item.done → response.function_call_arguments.delta → 11: * response.function_call_arguments.done → 12: * response.completed 13: * 14: * Reuses `parseSSEStream` from the Anthropic stream module since the 15: * underlying SSE wire format is the same. ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/stream/openai-responses.ts</path>
<type>file</type>
<content>
540: return finalizedContent.length > 0
541: ? { ...snapshot, content: finalizedContent }
542: : snapshot;
543: }
544:
545: /** Validated unsuccessful terminal, carrying usage for accounting-only paths. */
546: export class ResponsesTerminalError extends Error {
547: constructor(
548: readonly response: GatewayResponse,
549: readonly status: string,
550: ) {
551: super(`upstream Responses request ended with status ${status}`);
552: this.name = "ResponsesTerminalError";
553: }
554: }
555:
556: export function makeResponsesAccState(): ResponsesAccState {
557: return {
558: id: "",
559: model: "",
560: stopReason: "end_turn",
561: usage: { inputTokens: 0, outputTokens: 0 },
562: items: new Map(),
563: rawItems: new Map(),
564: itemIndexById: new Map(),
565: callIndexById: new ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/stream/openai-responses.ts</path>
<type>file</type>
<content>
900: };
901: }
902:
903: // ---------------------------------------------------------------------------
904: // Stream accumulator (buffered)
905: // ---------------------------------------------------------------------------
906:
907: function validatePublicResponsesEvent(
908: state: ResponsesAccState,
909: event: string,
910: parsed: Record<string, unknown>,
911: maxSparseIndex: number,
912: ): void {
913: const outputIndex = parsed.output_index;
914: const validOutputIndex =
915: Number.isSafeInteger(outputIndex) &&
916: (outputIndex as number) >= 0 &&
917: (outputIndex as number) < maxSparseIndex;
918: const item = validOutputIndex
919: ? state.items.get(outputIndex as number)
920: : undefined;
921: const malformed = (): never => {
922: throw new Error("malformed Responses stream ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/stream/openai-responses.ts</path>
<type>file</type>
<content>
1580:
1581: const existing = state.rawItems.get(outputIndex);
1582: if (event === "response.output_item.added" && existing) {
1583: malformedResponsesEvent();
1584: }
1585: if (event === "response.output_item.done" && existing) {
1586: if (
1587: existing.type !== item.type ||
1588: (isNonEmptyString(existing.id) &&
1589: isNonEmptyString(item.id) &&
1590: existing.id !== item.id)
1591: ) {
1592: malformedResponsesEvent();
1593: }
1594: } else if (event === "response.output_item.done") {
1595: const seedItem = { ...item };
1596: delete seedItem.content;
1597: applyResponsesEvent(state, "response.output_item.added", {
1598: output_index: outputIndex,
1599: item: seedItem,
1600: });
1601: }
1602: if (event === "response.output_item.done") {
1603: ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
7720: resumeDemand?.();
7721: resumeDemand = undefined;
7722: if (keepaliveTimer) clearTimeout(keepaliveTimer);
7723: keepaliveTimer = null;
7724: cancelled = true;
7725: streamSignal.removeEventListener("abort", onStreamAbort);
7726: clearRecallDeadline();
7727: recallAbort.abort(new DOMException("client disconnected", "AbortError"));
7728: if (activeReader) {
7729: cancelAndReleaseReader(activeReader);
7730: activeReader = null;
7731: }
7732: },
7733: });
7734:
7735: const response = new Response(stream, {
7736: status: 200,
7737: headers: {
7738: "content-type": "text/event-stream",
7739: "cache-control": "no-cache",
7740: connection: "keep-alive",
7741: },
7742: });
7743: if (!recallPersistence || recallContext?.onTransactionReady) ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
8920: if (
8921: normalized?.type !== "tool_use" ||
8922: typeof item?.arguments !== "string"
8923: ) {
8924: throw new Error(
8925: `Responses output_item.done changed arguments for index ${outputIndex}`,
8926: );
8927: }
8928: if (
8929: (lifecycle.argumentDeltaSeen || lifecycle.argumentsDone) &&
8930: item.arguments !== lifecycle.argumentDeltas
8931: ) {
8932: throw new Error(
8933: `Responses output_item.done changed arguments for index ${outputIndex}`,
8934: );
8935: }
8936: if (!lifecycle.argumentDeltaSeen && !lifecycle.argumentsDone) {
8937: lifecycle.argumentDeltas = item.arguments;
8938: lifecycle.argumentsDone = true;
8939: ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
10180: const middle = low + Math.floor((high - low) / 2);
10181: if ((visibleOutputSources[middle] ?? 0) < sourceIndex)
10182: low = middle + 1;
10183: else high = middle;
10184: }
10185: return low;
10186: };
10187: const syncVisibleOutputIndex = (sourceIndex: number): boolean => {
10188: const visible =
10189: state.rawItems.has(sourceIndex) || state.items.has(sourceIndex);
10190: const hidden =
10191: recallIndices.has(sourceIndex) ||
10192: unresolvedToolIndices.has(sourceIndex) ||
10193: referenceIndices.has(sourceIndex);
10194: const existing = visibleOutputIndices.get(sourceIndex);
10195: if (!visible || hidden) {
10196: if (existing === undefined) return ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
11349: continuationRetryBaseline.transactionalEvents;
11350: transactionalBytes =
11351: continuationRetryBaseline.transactionalBytes;
11352: retainedStateBytes =
11353: continuationRetryBaseline.retainedStateBytes;
11354: hiddenRecallBytes =
11355: continuationRetryBaseline.hiddenRecallBytes;
11356: outputIdentities.clear();
11357: for (const identity of continuationRetryBaseline.outputIdentities) {
11358: outputIdentities.add(identity);
11359: }
11360: referenceIdentities.clear();
11361: for (const identity of ...
Found 100 matches (more matches available) /home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/test/openai-responses-recall-aware-stream.test.ts: Line 99: if (!Number.isSafeInteger(data.output_index)) continue; Line 108: expect(terminalOutput?.output?.[data.output_index as number]?.id).toBe( Line 124: output_index: outputIndex, Line 133: output_index: outputIndex, Line 138: output_index: outputIndex, Line 156: output_index: outputIndex, Line 166: output_index: outputIndex, Line 171: output_index: outputIndex, Line 228: output_index: outputIndex, Line 232: output_index: outputIndex, Line 238: output_index: outputIndex, Line 244: output_index: outputIndex, Line 458: // recall call at output_index 0 Line 460: // a real (non-recall) tool_call at output_index 1 Line 462: output_index: 1, Line 471: output_index: 1, Line 476: ...
Found 100 matches (more matches available)
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/test/openai-responses-recall-aware-stream.test.ts:
Line 263: onComplete: () => {},
Line 305: onComplete: () => completeCalls++,
Line 326: test("forwards a principal response.failed exactly once when no recall occurs", async () => {
Line 340: onComplete: () => {},
Line 369: onComplete: () => {},
Line 407: onComplete: () => {},
Line 432: onComplete: (response) => {
Line 489: onComplete: (response) => {
Line 546: onComplete: () => {},
Line 603: onComplete: () => {},
Line 654: onComplete: () => {},
Line 681: onComplete: () => {},
Line 715: onComplete: () => {},
Line 743: onComplete: () => {},
Line 770: onComplete: () => {},
Line 808: onComplete: () => {},
Line 849: onComplete: (response, ...
Found 14 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/test/openai-responses-recall-aware-stream.test.ts:
Line 6216: const unindexedEvent = `event: extension\ndata: ${"x".repeat(1024 * 1024)}\n\n`;
Line 6244: expect(output).not.toContain("event: extension");
Line 6252: const firstEvent = `event: extension\ndata: ${"a".repeat(600 * 1024)}\n\n`;
Line 6253: const secondEvent = `event: extension\ndata: ${"b".repeat(600 * 1024)}\n\n`;
Line 6298: expect(out).not.toContain("event: extension");
Line 6306: const extension = `event: extension\ndata: ${"x".repeat(600 * 1024)}\n\n`;
Line 6313: extension,
Line 6323: extension,
Line 6353: expect(out).not.toContain("event: extension");
Line 6354: expect(out).not.toContain(extension);
Line 8267: ["object", '{"private_extension":"private created-at object"}'],
Line 8379: name: "terminal extension fields",
Line ...
Found 21 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/test/openai-responses-recall-aware-stream.test.ts:
Line 5577: encrypted_content: "opaque",
Line 5586: encrypted_content: "opaque",
Line 6213: test("drops unindexed continuation output without consuming the transactional limit", async () => {
Line 8199: sseEvent("response.custom", { secret: "must-not-leak" }),
Line 8224: "never exposes non-semantic %s frames after recall interception",
Line 8229: created("resp_private_diagnostic_followup", "gpt-5.6-terra"),
Line 8231: ? [rawSSEEvent("diagnostic", privateDiagnostic)]
Line 8233: textItem(0, "safe answer", "msg_private_diagnostic_answer"),
Line 8234: completed("resp_private_diagnostic_followup"),
Line 8238: created("resp_private_diagnostic_principal", "gpt-5.6-terra"),
Line 8241: ? ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/test/openai-responses-recall-aware-stream.test.ts</path>
<type>file</type>
<content>
8080: query: "architecture",
8081: scope: null,
8082: id: null,
8083: ids: null,
8084: detailOffset: null,
8085: detailLimit: null,
8086: },
8087: expected: {
8088: query: "architecture",
8089: scope: undefined,
8090: id: undefined,
8091: ids: undefined,
8092: detailOffset: undefined,
8093: detailLimit: undefined,
8094: },
8095: },
8096: {
8097: mode: "single-id detail",
8098: args: {
8099: query: null,
8100: scope: null,
8101: id: "k:one",
8102: ids: null,
8103: detailOffset: 10,
8104: detailLimit: 20,
8105: },
8106: expected: {
8107: query: "",
8108: scope: undefined,
8109: id: "k:one",
8110: ids: ...
○ zlsmzkntqzzx a3fa555bdcab fix(responses): harden hidden-output projection ○ ozrmvotwxzuy 583020fad43e fix(responses): stabilize sparse principal projection ○ unznwpylspzq ab979df5cddf fix(responses): project hidden output consistently ◆ pxrvwsvvkmpo 2cbf40060c67 feat(cch): add seeds for Claude Code up to 2.1.272 (#1780) │ ~
--- zlsmzkntqzzxsqvyxzzpxltmrsprymww a3fa555bdcabb376aa33278bdb76007269f1940a fix(responses): harden hidden-output projection --- ozrmvotwxzuykyvutstpwpzukpptktxv 583020fad43e1481470aac2588251b8636d16251 fix(responses): stabilize sparse principal projection --- unznwpylspzqykmnpxwnnswmnzpspxzq ab979df5cddfec3952680e423e39564664e881fe fix(responses): project hidden output consistently --- pxrvwsvvkmpoxnsqmrkwrnlqvvkoltwz 2cbf40060c67df229731cf1b9e34d5bf22ec2145 feat(cch): add seeds for Claude Code up to 2.1.272 (#1780) ## Summary Automated cch seed extraction for 2 Claude Code version(s). - **Versions:** 2.1.272 2.1.271 - **WORKER_VERSION pinned to:** 2.1.272 - **Extracted by:** `scripts/extract-cch-seed.ts` - **Method:** Oracle pair generation via local capture server + binary scan This PR updates `VERSION_SEEDS` and `WORKER_VERSION` in `packages/gateway/src/cch.ts` so the gateway can sign billing headers for these Claude Code versions. ...
diff --git a/packages/gateway/src/pipeline.ts b/packages/gateway/src/pipeline.ts
index df963c9d36..9aa7944751 100644
--- a/packages/gateway/src/pipeline.ts
+++ b/packages/gateway/src/pipeline.ts
@@ -8057,6 +8057,21 @@
const sseInactivityMs = opts.sseInactivityMs ?? FOREGROUND_SSE_INACTIVITY_MS;
const maxPrincipalTransportRetries = 1;
const maxRecallContinuationTransportRetries = 1;
+ const isSemanticResponsesEvent = (event: string): boolean =>
+ event === "response.created" ||
+ event === "response.in_progress" ||
+ event === "response.completed" ||
+ event === "response.done" ||
+ event === "response.incomplete" ||
+ event === "response.failed" ||
+ event === "response.output_item.added" ||
+ event === "response.output_item.done" ||
+ event.startsWith("response.output_text.") ||
+ event.startsWith("response.refusal.") ||
+ event.startsWith("response.function_call_arguments.") ||
+ event.startsWith("response.content_part.") ||
+ ...
Found 11 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/test/codex-usage-provisional.test.ts:
Line 22: type: "codex.rate_limits",
Line 48: `event: codex.rate_limits\ndata: ${JSON.stringify(quota)}\n\n${await response.text()}`,
Line 104: .filter((frame) => frame.startsWith("event: codex.rate_limits\n"))
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/test/codex-usage-metadata.test.ts:
Line 11: type: "codex.rate_limits",
Line 58: .filter((frame) => frame.startsWith("event: codex.rate_limits\n"))
Line 72: expect(body.indexOf("codex.rate_limits")).toBeLessThan(
Line 130: `${await upstream([]).text()}event: codex.rate_limits\ndata: ${JSON.stringify(limits)}\n\n`,
Line 169: type: "codex.rate_limits",
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/test/recall-buffered-transaction.test.ts:
Line 65: type: ...
Found 10 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/translate/types.ts:
Line 349: codexRateLimits?: Array<Record<string, unknown>>;
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/translate/openai-responses.ts:
Line 1281: for (const quota of resp.codexRateLimits ?? []) {
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/stream/openai-responses.ts:
Line 60: codexRateLimits?: Array<Record<string, unknown>>;
Line 602: (state.codexRateLimits ??= []).push(quota);
Line 897: ...(state.codexRateLimits
Line 898: ? { codexRateLimits: state.codexRateLimits }
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts:
Line 18717: if (currentResp.codexRateLimits?.length) {
Line 18718: continuationResp.codexRateLimits = [
Line 18719: ...currentResp.codexRateLimits,
Line 18720: ...
Found 2 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts:
Line 7794: export function streamResponsesRecallAware(
Line 18931: streamResponsesRecallAware(upstreamResponse, {
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
18580: log.info(
18581: `recall (non-stream, depth=${recallDepth}, codex=${followUpRequiresStream}): executing follow-up for session ${sessionState.sessionID.slice(0, 16)}`,
18582: );
18583: const jsonRecallCtx: RecallFollowUpCtx = {
18584: forward: (r, signal) =>
18585: forwardToUpstream(
18586: r,
18587: config,
18588: undefined,
18589: {
18590: ...cacheOptions,
18591: cacheConversation: false,
18592: },
18593: signal,
18594: requestUpstreamRoute,
18595: ),
18596: parseJSON: (response, protocol, signal) =>
18597: accumulateNonStreamResponse(
18598: response,
18599: protocol,
18600: false,
18601: signal,
18602: ...
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/translate/openai-responses.ts</path>
<type>file</type>
<content>
1250: const encoder = new TextEncoder();
1251:
1252: const stream = new ReadableStream({
1253: start(controller) {
1254: const respId = resp.id.startsWith("resp_") ? resp.id : `resp_${resp.id}`;
1255: const created = Math.floor(Date.now() / 1000);
1256:
1257: function emit(eventType: string, data: Record<string, unknown>) {
1258: controller.enqueue(
1259: encoder.encode(
1260: `event: ${eventType}\ndata: ${JSON.stringify(data)}\n\n`,
1261: ),
1262: );
1263: }
1264:
1265: // response.created
1266: emit("response.created", {
1267: type: "response.created",
1268: response: {
1269: id: respId,
1270: object: "response",
1271: created_at: created,
1272: model: resp.model,
1273: ...
Found 4 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/test/openai-responses-recall-aware-stream.test.ts:
Line 1713: test("rejects terminal function calls changing the streamed tool name", async () => {
Line 2677: test("allows a terminal-discovered recall that preserves sparse visible output positions", async () => {
Line 2760: test("fails closed when a terminal-discovered recall would reindex visible output", async () => {
Line 2836: test("redacts a sparse terminal-discovered recall before status validation", async () => {
Found 1 matches /home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/stream/openai-responses.ts: Line 349: export function responsesDoneItemMatchesAdded(
<path>/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/stream/openai-responses.ts</path>
<type>file</type>
<content>
300: sparseValueExtends(actual[field], value),
301: );
302: }
303: return isDeepStrictEqual(actual, established);
304: }
305:
306: function sparseTextPartsExtend(actual: unknown, established: unknown): boolean {
307: if (!Array.isArray(established)) return established === undefined;
308: if (!Array.isArray(actual) || actual.length < established.length)
309: return false;
310: return established.every((rawPart, index) => {
311: const actualPart = actual[index];
312: if (!isRecord(rawPart) || !isRecord(actualPart)) return false;
313: return Object.entries(rawPart).every(([field, value]) => {
314: if (
315: (field === "text" || field === "refusal") &&
316: typeof value === "string"
317: ) {
318: return (
319: typeof actualPart[field] === "string" &&
320: ...
RUN v4.1.8 /home/byk/Code/opencode-lore-responses-projection-security
Test Files 1 passed (1)
Tests 223 passed (223)
Start at 15:56:00
Duration 12.15s (transform 6.32s, setup 847ms, import 9.52s, tests 1.51s, environment 0ms)
Found 8 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/ui.ts:
Line 183: created_at: number;
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/cli/data.ts:
Line 1422: created_at: number;
Line 1558: created_at: number;
Line 1629: created_at: number;
Line 1657: messages: Array<{ role: string; content: string; created_at: number }>;
Line 1662: created_at: number;
Line 1702: created_at: number;
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/src/pipeline.ts:
Line 9237: throw new Error("Responses terminal event has invalid created_at");
The working copy has no changes. Working copy (@) : lnvrxqoq 884f9b00 (empty) (no description set) Parent commit (@-): zlsmzknt a3fa555b fix/responses-hidden-output* | fix(responses): harden hidden-output projection Warning: These bookmarks have conflicts: fix/responses-private-references Hint: Use `jj bookmark list` to see details. Use `jj bookmark set <name> -r <rev>` to resolve.
lnvrxqoqsqutpvpxvnppskkmmmsztwus 884f9b007c89e71800dbebc00af2e22f0454e592 parents=a3fa555bdcabb376aa33278bdb76007269f1940a conflict=false empty=true description= zlsmzkntqzzxsqvyxzzpxltmrsprymww a3fa555bdcabb376aa33278bdb76007269f1940a parents=583020fad43e1481470aac2588251b8636d16251 conflict=false empty=false description=fix(responses): harden hidden-output projection pxrvwsvvkmpoxnsqmrkwrnlqvvkoltwz 2cbf40060c67df229731cf1b9e34d5bf22ec2145 parents=e977b4b1da8f8197c3238466d41de0bccd8eb054 conflict=false empty=false description=feat(cch): add seeds for Claude Code up to 2.1.272 (#1780)
M packages/gateway/src/pipeline.ts M packages/gateway/test/openai-responses-recall-aware-stream.test.ts
a7e914bd8ffb704f8fba2798f9de95fd4668b7212a485304c1cf7c056c278a40 -
Found 14 matches
/home/byk/Code/opencode-lore-responses-projection-security/packages/gateway/test/openai-responses-recall-aware-stream.test.ts:
Line 326: test("forwards a principal response.failed exactly once when no recall occurs", async () => {
Line 2614: test("executes an added-only recall finalized by terminal arguments exactly once", async () => {
Line 2677: test("allows a terminal-discovered recall that preserves sparse visible output positions", async () => {
Line 2760: test("fails closed when a terminal-discovered recall would reindex visible output", async () => {
Line 4936: test("rejects continuation index arithmetic beyond safe integers", async () => {
Line 5830: const sequenceNumbers = [...out.matchAll(/"sequence_number":(\d+)/g)].map(
Line 5833: expect(sequenceNumbers).toEqual(sequenceNumbers.map((_, index) => index));
Line 5837: test("places continuation after deferred principal output without index collisions", async () => {
...
Terminal-resolved ordinary sparse tools never enter the visible projection.
At packages/gateway/src/pipeline.ts:10632-10670, terminal reconciliation removes a resolved ordinary tool from unresolvedToolIndices, but never calls syncVisibleOutputIndex(). The later stability check at :10678 therefore uses stale projection state. Deferred delivery at :10706-10715 reaches enqueueProjectedPrincipal(), which throws when the source index is absent from visibleOutputIndices (:10277-10279).
Counterexample:
1: visible text, already emitted as public index 00: sparse function call with blank identity0 as an ordinary toolThis valid Codex sequence fails. Worse, projectionInvalid remains false, so the failure terminal uses buildOutputItems() at :11985-11987, exposing [tool-0, message-1] even though message 1 was already streamed at public index 0.
Add higher- and lower-index terminal-resolution regressions. Higher indices must succeed; lower indices must fail with empty public output before exposing the newly resolved item.
The semantic-event prefix checks allow indexed extension data to bypass redaction.
isSemanticResponsesEvent() uses broad prefixes at packages/gateway/src/pipeline.ts:8060-8074. An event such as response.output_text.private_extension passes that check. The lifecycle code also treats any response.output_text.* event as indexed text activity (:8618-8663) without rejecting an unknown suffix. The original payload is later queued at :11729-11749, and remapping preserves every arbitrary field via { ...parsed } at :10023-10025.
A provider can therefore place private data in an indexed prefix-collision event after recall interception and have it reach the client. ...