Dashboard › opencode-lore › Session 12DNgcEqNJ9A
12DNgcEqNJ9A6u329Strict READ-ONLY adversarial correctness review in /home/byk/Code/opencode-lore-responses-accumulation. Do not edit or mutate VCS. Candidate stable change tklkqxytmpkzzryqlolnpvxouropxznp, commit ce88c614c0ae55d229cb605aa7c7369d918d3650; base literal 2cbf40060c67df229731cf1b9e34d5bf22ec2145; expected plain diff SHA-256 485238edc024cfedc7d604018d39af7bfb6ab5b9616962d0e41c2ef460b205f8; exactly 3 paths pipeline.ts, stream/openai-responses.ts, recall-aware stream test. Verify identity/status/conflicts/scope/hash start/end. Read AGENTS.md, quality/REVIEW.md, scripts, every changed line and relevant callers. Review accumulation-before-limits, semantic lifecycle materialization, sparse coordinate ceilings/principal+shifted continuation, sparse hole finalization, terminal/done bidirectional reasoning lifecycle reconciliation, terminal-only/gap/contradiction rejection before recall side effects, sparse message materialization when done and terminal output omitted/empty, usage exact-once, rollback-before-callback, callback/public privacy projections, array/index bounds, high-cardinality complexity, retries/cancellation/backpressure. Assess fail-first and guard-removal proof. Focused tests allowed; exhaustive delegated. Report PASS/CONCERN/MUST-FIX with exact current file:line evidence and residual risk. 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`. ...
/home/byk/Code/opencode-lore-responses-accumulation The working copy has no changes. Working copy (@) : lrqlyykx d890b184 (empty) (no description set) Parent commit (@-): tklkqxyt ce88c614 fix/responses-accumulation-order | fix(responses): complete lifecycle reconciliation 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. tklkqxytmpkzzryqlolnpvxouropxznp ce88c614c0ae55d229cb605aa7c7369d918d3650 parents=683dff02101f15198b18e3088a0b57dade290056 conflict=false empty=false kvpmnlwnznqxomuzywlvmotqtplywzvm 683dff02101f15198b18e3088a0b57dade290056 parents=df49b0cec904a3f432a0f7f29ea398840d62fe9e conflict=false empty=false pxrvwsvvkmpoxnsqmrkwrnlqvvkoltwz 2cbf40060c67df229731cf1b9e34d5bf22ec2145 parents=e977b4b1da8f8197c3238466d41de0bccd8eb054 conflict=false ...
plain=02d06b2f84d7d2d8cfa5f22443384d12a2a9bc922ade879449de9b0b9d971d1c - git=485238edc024cfedc7d604018d39af7bfb6ab5b9616962d0e41c2ef460b205f8 - stat=d10f9b65ea2aa159734ec40302763475b59a9597674e3f4d8b12319c39a8af5c - summary=35a546d3107ab30b0f20637f30205d6399d3673c645a3ca0a8eb2d80874fc777 -
<path>/home/byk/Code/opencode-lore-responses-accumulation/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-accumulation/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-accumulation/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-accumulation/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: ...
...output truncated... Full output saved to: /home/byk/.local/share/opencode/tool-output/tool_0aaedefe0001kDKZ08YGFz1BvP + const materializedItem = finalizeSpy.mock.calls + .map(([acc]) => acc.rawItems.get(0)) + .find((item) => item?.id === scenario.itemId); + const materializedParts = materializedItem?.[ + scenario.expectedField + ] as unknown[]; + expect(materializedParts).toHaveLength(scenario.partIndex + 1); + expect(Object.keys(materializedParts)).toEqual([ + String(scenario.partIndex), + ]); + expect(materializedParts[scenario.partIndex]).toEqual( + scenario.expectedPart, + ); + expect( + Object.keys(materializedParts[scenario.partIndex] as object), + ).toEqual(["type", "text"]); + expect(completedResponse?.content).toEqual([]); + expect(completedResponse?.rawOutputItems).toEqual([]); + expect(out.match(/^event: response\.failed$/gm)).toHaveLength(1); + ...
<path>/home/byk/.local/share/opencode/tool-output/tool_0aaedefe0001kDKZ08YGFz1BvP</path> <type>file</type> <content> 1: packages/gateway/src/pipeline.ts | 519 ++++-- 2: packages/gateway/src/stream/openai-responses.ts | 1 + 3: ...st/openai-responses-recall-aware-stream.test.ts | 1684 +++++++++++++++++++++- 4: 3 files changed, 2068 insertions(+), 136 deletions(-) 5: diff --git a/packages/gateway/src/pipeline.ts b/packages/gateway/src/pipeline.ts 6: index 004e03b3e2..635477d648 100644 7: --- a/packages/gateway/src/pipeline.ts 8: +++ b/packages/gateway/src/pipeline.ts 9: @@ -7971,14 +7971,75 @@ 10: const finalizedMessageContent = ( 11: lifecycle: OutputLifecycle, 12: ): Array<Record<string, unknown>> => 13: - Array.from(lifecycle.content) 14: - .sort(([left], [right]) => left - right) 15: - .filter(([, part]) => part.valueDone || part.partDone) 16: - .map(([, part]) => 17: - part.kind === "refusal" 18: - ? ...
<path>/home/byk/.local/share/opencode/tool-output/tool_0aaedefe0001kDKZ08YGFz1BvP</path>
<type>file</type>
<content>
1335: - call_id: "call_terminal_name",
1336: - name: "read",
1337: - }),
1338: - );
1339: + expect(completedResponse?.content).toEqual([]);
1340: + expect(completedResponse?.rawOutputItems).toEqual([]);
1341: expect(recallCalls).toBe(0);
1342: });
1343:
1344: @@ -1972,7 +2490,8 @@
1345: );
1346:
1347: expect(await drain(client)).toContain("response.failed");
1348: - expect(completedResponse?.rawOutputItems).toEqual([item]);
1349: + expect(completedResponse?.content).toEqual([]);
1350: + expect(completedResponse?.rawOutputItems).toEqual([]);
1351: });
1352:
1353: test("never forwards response-side item_reference lifecycle events", async () => {
1354: @@ -2088,6 +2607,72 @@
1355: );
1356: });
1357:
1358: + test("preserves an accepted sparse message content coordinate", async () => {
1359: + ...
Found 41 matches
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts:
Line 7971: const finalizedMessageContent = (
Line 7985: const materializeCompletedCodexMessages = (acc: ResponsesAccState): void => {
Line 7991: const content = finalizedMessageContent(lifecycle);
Line 7998: const assertReasoningPartsMatchLifecycle = (
Line 8386: const assertSparseCoordinates = (
Line 8629: const content = finalizedMessageContent(lifecycle);
Line 9094: assertReasoningPartsMatchLifecycle(
Line 9157: assertReasoningPartsMatchLifecycle(
Line 9403: assertReasoningPartsMatchLifecycle(
Line 9410: assertReasoningPartsMatchLifecycle(
Line 9461: materializeCompletedCodexMessages(acc);
Line 10050: const stripPrivateAccumulatedOutput = (
Line 10089: const isLifecycleOnlyAccumulationEvent = (event: string): boolean =>
Line 10097: const preserveLifecycleFailureState = (
Line ...
Found 100 matches (more matches available)
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts:
Line 205: applyResponsesEvent,
Line 206: finalizeResponsesAcc,
Line 208: makeResponsesAccState,
Line 214: responsesTerminalItemMatches,
Line 217: type ResponsesAccState,
Line 7150: recallBudget.recordUsage(currentResp.usage);
Line 7606: const continuationStopReason = recallBudget.recordUsage(
Line 7794: export function streamResponsesRecallAware(
Line 7877: let state = makeResponsesAccState();
Line 7882: ResponsesAccState,
Line 7886: acc: ResponsesAccState,
Line 7915: ResponsesAccState,
Line 7919: acc: ResponsesAccState,
Line 7929: ResponsesAccState,
Line 7930: ResponsesAccState
Line 7933: acc: ResponsesAccState,
Line 7936: ): ResponsesAccState | undefined => {
Line 7940: normalizationState = makeResponsesAccState();
Line 7985: ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts</path> <type>file</type> <content> 7760: }, 7761: streamSignal, 7762: recallPersistence.rollback, 7763: ); 7764: } 7765: 7766: /** 7767: * True-streaming, recall-aware variant of `streamResponsesPassthrough` for the 7768: * OpenAI Responses API (codex/ChatGPT) — used when the request carries the 7769: * gateway-injected `recall` tool but the client speaks the Responses API. 7770: * 7771: * Unlike the buffered `accumulateResponsesSSEStream` path (which withholds ALL 7772: * client bytes until the entire slow reasoning-heavy upstream completes — the 7773: * cause of opencode's 10s `ProviderHeaderTimeoutError`), this function forwards 7774: * every upstream SSE event to the client AS IT ARRIVES, while transparently 7775: * intercepting a `recall` `function_call` output item: 7776: * 7777: * - **No recall**: forwards everything unchanged (identical to 7778: * ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
8610: }
8611: lifecycles.set(outputIndex, newLifecycle);
8612: } else if (!state.rawItems.has(outputIndex)) {
8613: throw new Error(
8614: `Responses ${event} arrived before output_item.added for index ${outputIndex}`,
8615: );
8616: } else {
8617: const declared = state.rawItems.get(outputIndex);
8618: if (!lifecycle) {
8619: throw new Error(`missing Responses lifecycle for index ${outputIndex}`);
8620: }
8621: const item = parsed.item as Record<string, unknown> | undefined;
8622: if (
8623: opts.validation === "codex" &&
8624: event === "response.output_item.done" &&
8625: item?.type === "message" &&
8626: item.content === undefined &&
8627: lifecycle
8628: ) {
8629: const content = finalizedMessageContent(lifecycle);
8630: ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
9460: }
9461: materializeCompletedCodexMessages(acc);
9462: if (response.output === undefined) {
9463: if (opts.validation === "public" && response.status === "completed") {
9464: throw new Error("Responses terminal output must be an array");
9465: }
9466: return;
9467: }
9468: if (!Array.isArray(response.output)) {
9469: throw new Error("Responses terminal output must be an array");
9470: }
9471: // ChatGPT/Codex can omit some or all streamed items from the terminal
9472: // snapshot. Treat the output_item lifecycle as authoritative while still
9473: // requiring every repeated terminal item to match in stream order.
9474: const actualOutput = response.output.map((item) => {
9475: if (!item || typeof item !== "object" || Array.isArray(item)) {
9476: throw new Error("Responses ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
10310: deferredEvents.splice(index, 1);
10311: }
10312: }
10313: };
10314: const promoteDeferredCandidate = (outputIndex: number): void => {
10315: hiddenRecallBytes += unresolvedToolBytes.get(outputIndex) ?? 0;
10316: unresolvedToolBytes.delete(outputIndex);
10317: if (hiddenRecallBytes > maxHiddenRecallBytes) {
10318: throw new SSEStreamLimitError(
10319: "recall stream exceeded deferred event limit",
10320: );
10321: }
10322: };
10323:
10324: resetKeepalive();
10325: for await (const { event, data } of parseSSEStream(reader, {
10326: maxFrames: maxSSEFrames,
10327: inactivityMs: sseInactivityMs,
10328: signal,
10329: ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
11160: holdContinuation(hiddenChunk, ci);
11161: }
11162: if (ce === "response.output_item.done") {
11163: if (isContRecall) {
11164: collectCompletedRecall(
11165: contState,
11166: ci,
11167: contRecallInputs,
11168: contPending,
11169: );
11170: }
11171: }
11172: continue;
11173: }
11174: if (
11175: ce === "response.completed" ||
11176: ce === ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
12000: recallDiagnostics.finish("aborted");
12001: resumeDemand?.();
12002: resumeDemand = undefined;
12003: cancelled = true;
12004: cleanupAbort();
12005: if (deferredTransaction) deferredTransaction.rollback();
12006: else rollbackTransaction();
12007: abortController.abort(
12008: new DOMException("Responses client disconnected", "AbortError"),
12009: );
12010: if (keepaliveTimer) clearTimeout(keepaliveTimer);
12011: if (activeReader) cancelAndReleaseReader(activeReader, signal.reason);
12012: else
12013: void currentPrincipalResponse.body
12014: ?.cancel(signal.reason)
12015: .catch(() => {});
12016: },
12017: });
12018:
12019: return new Response(stream, {
12020: status: 200,
12021: headers: {
12022: "content-type": ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/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. ...
Found 45 matches /home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/stream/openai-responses.ts: Line 912: maxSparseIndex: number, Line 918: (outputIndex as number) < maxSparseIndex; Line 986: parsed.content_index !== undefined && Line 987: (!Number.isSafeInteger(parsed.content_index) || Line 988: (parsed.content_index as number) < 0 || Line 989: (parsed.content_index as number) >= maxSparseIndex) Line 1093: !Number.isSafeInteger(parsed.content_index) || Line 1094: (parsed.content_index as number) < 0 || Line 1095: (parsed.content_index as number) >= maxSparseIndex || Line 1227: maxSparseIndex: number, Line 1230: while (index < maxSparseIndex && state.rawItems.has(index)) index += 1; Line 1231: if (index >= maxSparseIndex) malformedResponsesEvent(); Line 1484: maxSparseIndex: number, Line 1508: outputIndex = nextResponsesOutputIndex(state, ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/stream/openai-responses.ts</path>
<type>file</type>
<content>
908: function validatePublicResponsesEvent(
909: state: ResponsesAccState,
910: event: string,
911: parsed: Record<string, unknown>,
912: maxSparseIndex: number,
913: ): void {
914: const outputIndex = parsed.output_index;
915: const validOutputIndex =
916: Number.isSafeInteger(outputIndex) &&
917: (outputIndex as number) >= 0 &&
918: (outputIndex as number) < maxSparseIndex;
919: const item = validOutputIndex
920: ? state.items.get(outputIndex as number)
921: : undefined;
922: const malformed = (): never => {
923: throw new Error("malformed Responses stream event");
924: };
925:
926: if (parsed.type !== undefined && parsed.type !== event) malformed();
927: if (
928: parsed.sequence_number !== undefined &&
929: (!Number.isSafeInteger(parsed.sequence_number) ||
930: ...
tklkqxytmpkz ce88c614c0ae fix(responses): complete lifecycle reconciliation kvpmnlwnznqx 683dff02101f fix(responses): bound sparse lifecycle coordinates lplymwvllmzn df49b0cec904 fix(responses): preserve limit-crossing state kvpmnlwnznqxomuzywlvmotqtplywzvm 683dff02101f15198b18e3088a0b57dade290056 fix(responses): bound sparse lifecycle coordinates
--- tklkqxytmpkzzryqlolnpvxouropxznp ce88c614c0ae55d229cb605aa7c7369d918d3650 fix(responses): complete lifecycle reconciliation --- kvpmnlwnznqxomuzywlvmotqtplywzvm 683dff02101f15198b18e3088a0b57dade290056 fix(responses): bound sparse lifecycle coordinates --- lplymwvllmznozzrzoroxvnnuymnusxs df49b0cec904a3f432a0f7f29ea398840d62fe9e fix(responses): preserve limit-crossing state
Found 34 matches /home/byk/Code/opencode-lore-responses-accumulation/package.json: Line 66: "premutation": "pnpm --filter @loreai/gateway run bundle", Line 67: "mutation": "stryker run", /home/byk/Code/opencode-lore-responses-accumulation/quality/results/code-review-findings.md: Line 154: - **Recommendation:** Use `UPDATE` and `INSERT OR IGNORE` consistently across all mutations to `session_state`. /home/byk/Code/opencode-lore-responses-accumulation/CHANGELOG.md: Line 823: - Trigger durable knowledge-delta on DB mutation, not ranking churn by @BYK in [#954](https://github.com/BYK/loreai/pull/954) Line 913: - Close genuine sync-data gaps found by mutation testing (#832) by @BYK in [#851](https://github.com/BYK/loreai/pull/851) Line 924: - (test) Stryker mutation testing on the sync modules (#832) by @BYK in [#840](https://github.com/BYK/loreai/pull/840) /home/byk/Code/opencode-lore-responses-accumulation/.lore.md: Line 50: * **Entity mutation and ...
Found 18 matches /home/byk/Code/opencode-lore-responses-accumulation/.lore.md: Line 38: * **embedding worker stdio drain**: Chose silently calling \`resume()\` on owned embedding-worker stdout/stderr over logging sanitized or rate-limited lines because native dependencies can emit model paths, provider diagnostics, IDs, and process state, while every core log reaches persistent storage and \`LogSink\`. Streams must still drain continuously with no payload-observing \`data\` listeners so full pipes cannot block workers; retain only fixed categorical lifecycle messages. Line 41: * **embedding-units 64-chunk cap**: Chose structural \`"\n\x1f"\` boundaries and a 64-chunk temporal cap over splitting on tool-looking text, dropping overflow, or allowing unlimited vec0 rows because tool output may mimic headers and unbounded fan-out expands storage and KNN widening. Keep units dependency-free; preserve prose/reasoning verbatim and reduced tool envelopes. Units \`0..62\` stay separate, ...
RUN v4.1.8 /home/byk/Code/opencode-lore-responses-accumulation
Test Files 1 passed (1)
Tests 255 passed (255)
Start at 16:02:24
Duration 44.68s (transform 12.43s, setup 2.33s, import 19.24s, tests 22.33s, environment 0ms)
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/core/test/setup.ts</path>
<type>file</type>
<content>
1: import { mkdtempSync, rmSync } from "node:fs";
2: import { join } from "node:path";
3: import { tmpdir } from "node:os";
4: import { afterAll, afterEach } from "vitest";
5: import { close, invalidateProjectIdCache } from "../src/db";
6: import { silenceStderr } from "../src/log";
7:
8: // Create an isolated temporary database for the entire test run.
9: // This prevents test fixtures from leaking into the live lore DB
10: // at ~/.local/share/lore/lore.db.
11: const tmp = mkdtempSync(join(tmpdir(), "lore-test-"));
12: process.env.LORE_DB_PATH = join(tmp, "test.db");
13:
14: // ---------------------------------------------------------------------------
15: // Block live network to models.dev during tests.
16: //
17: // `fetchModelData()` (gateway/src/worker-model.ts) hits
18: // https://models.dev/api.json to pull pricing/limits, and the gateway
19: // pre-warms ...
drwxr-xr-x 14 byk byk 4096 Sep 16 15:24 /tmp/opencode
Found 16 matches
/home/byk/Code/opencode-lore-responses-accumulation/packages/core/src/db.ts:
Line 2928: * `LORE_DB_PATH` first; falls back to `${dataDir}/lore.db`
Line 2932: * `LORE_DB_PATH` to a temp directory so tests never touch the
Line 2936: * and FTS5 indices persist across restarts. Env: `LORE_DB_PATH`.
Line 2939: const envPath = process.env.LORE_DB_PATH;
Line 2954: const envPath = process.env.LORE_DB_PATH;
Line 2961: // The test preload (setup.ts) sets LORE_DB_PATH to a temp directory.
Line 2967: "LORE_DB_PATH is not set but NODE_ENV=test. " +
Line 2969: "LORE_DB_PATH to a temp path to avoid polluting the production DB.",
Line 5083: // a temp DB (LORE_DB_PATH set by test preload). If we see such a path
Line 5084: // without LORE_DB_PATH being set, a test is likely hitting the production DB.
Line 5085: // Note: LORE_DB_PATH unset is used as a proxy for "production DB". ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/core/src/db.ts</path>
<type>file</type>
<content>
2920: /** v60 migration step: create the rollup objects then backfill from source. */
2921: function applySessionRollup(database: Database): void {
2922: ensureSessionRollup(database);
2923: rebuildAllSessionRollups(database);
2924: }
2925:
2926: /**
2927: * Resolved path of the SQLite database file. Reads
2928: * `LORE_DB_PATH` first; falls back to `${dataDir}/lore.db`
2929: * (typically `~/.local/share/lore/lore.db`).
2930: *
2931: * The test preload (`packages/core/test/setup.ts`) sets
2932: * `LORE_DB_PATH` to a temp directory so tests never touch the
2933: * production DB. Setting it to a non-existent path will create
2934: * the file on first use. The gateway itself does not set this —
2935: * it expects a stable location for the DB so the SQLite WAL
2936: * and FTS5 indices persist across restarts. Env: `LORE_DB_PATH`. ...
Found 100 matches (more matches available) /home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts: Line 55: prewarmDistillationSnapshot, Line 307: fetchModelData, Line 337: } from "./cache-warmer"; Line 564: * This is the user-visible signal that distillation/curation/cache-warming Line 1897: * reused verbatim so the system[2] cache prefix stays warm. Re-pinning happens Line 2022: * gap past this TTL re-warms the SAME frozen bytes rather than rebuilding from Line 2392: * cached position and busts the very warm cache skipCompact was protecting. Line 2395: * rate drop" busts on large sessions whose returning turn was warm-preserved Line 2416: * 🔴 A resume reshuffles ONLY when it was NOT cache-warm. When `cacheWarm` is Line 2420: * cached position and bust the very warm cache skipCompact was protecting. ...
node:internal/process/promises:394
triggerUncaughtException(err, true /* fromPromise */);
^
Error: Transform failed with 1 error:
/eval.ts:1:1379: ERROR: Top-level await is currently not supported with the "cjs" output format
at failureErrorWithLog (/home/byk/Code/opencode-lore-responses-accumulation/node_modules/.pnpm/esbuild@0.28.1/node_modules/esbuild/lib/main.js:1748:15)
at /home/byk/Code/opencode-lore-responses-accumulation/node_modules/.pnpm/esbuild@0.28.1/node_modules/esbuild/lib/main.js:1017:50
at responseCallbacks.<computed> (/home/byk/Code/opencode-lore-responses-accumulation/node_modules/.pnpm/esbuild@0.28.1/node_modules/esbuild/lib/main.js:884:9)
at handleIncomingPacket (/home/byk/Code/opencode-lore-responses-accumulation/node_modules/.pnpm/esbuild@0.28.1/node_modules/esbuild/lib/main.js:939:12)
at Socket.readFromStdout ...
/home/byk/Code/opencode-lore-responses-accumulation/node_modules/.pnpm/tsx@4.22.4/node_modules/tsx/dist/register-BOkp8V6j.cjs:9
`)},"createLog"),G=ut(W.bgLightYellow(W.black(" CJS "))),Tn=ut(W.bgBlue(" ESM ")),R=new Map,Sn=u(async e=>{if(R.has(e))return R.get(e);if(!await D.promises.access(e).then(()=>!0,()=>!1)){R.set(e,void 0);return}const r=await D.promises.readFile(e,"utf8");try{const n=JSON.parse(r);return R.set(e,n),n}catch{throw new Error(`Error parsing: ${e}`)}},"readPackageJson"),On=u(e=>{if(R.has(e))return R.get(e);if(!D.existsSync(e)){R.set(e,void 0);return}const t=D.readFileSync(e,"utf8");try{const r=JSON.parse(t);return R.set(e,r),r}catch{throw new Error(`Error parsing: ${e}`)}},"readPackageJsonSync"),Pn=u(async e=>{let t=new URL("package.json",e);for(;!t.pathname.endsWith("/node_modules/package.json");){const r=Q.fileURLToPath(t),n=await Sn(r);if(n)return n;const s=t;if(t=new URL("../package.json",t),t.pathname===s.pathname)break}},"findPackageJson"),ft=u(e=>{let t=new ...
No files found
Found 21 matches
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts:
Line 969: test("accumulates the principal event that crosses the retained-state limit", async () => {
Line 3299: "preserves shifted sparse continuation Codex content when item done is omitted and terminal output is %s",
Line 4927: "rejects principal reasoning %s introduced only by %s before recall execution",
Line 5022: "rejects terminal reasoning %s before nested recall execution",
Line 7250: test("accumulates the continuation event that crosses the retained-state limit", async () => {
Line 7423: "bounds continuation $kind coordinate $coordinate before shifted sparse state mutation",
Line 7550: let rollbacksAtComplete: number | undefined;
Line 7561: rollbacksAtComplete = rollbacks;
Line 7595: expect([commits, rollbacks, rollbacksAtComplete]).toEqual([0, 1, 1]);
Line 7624: let ...
Found 91 matches
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/claude-usage-headers.test.ts:
Line 15: "anthropic-ratelimit-unified-5h-reset": "1999999999",
Line 49: response.headers.set("content-length", "99999999");
Line 68: expect(response.headers.get("content-length")).not.toBe("99999999");
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/compaction.test.ts:
Line 937: cache_creation_input_tokens: 100_000,
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/cch.test.ts:
Line 695: text: `x-anthropic-billing-header: cc_version=${WORKER_VERSION}.${suffix}; cc_entrypoint=cli; cch=99999;`,
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/llm-adapter.test.ts:
Line 143: new Response(null, { headers: { "retry-after": "1000000" } }),
Line 1638: const wire = ": heartbeat\n\n" + "\n\n".repeat(100_000);
Line 1660: "SSE ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts</path> <type>file</type> <content> 7380: String(scenario.partIndex), 7381: ]); 7382: expect(materializedParts[scenario.partIndex]).toEqual( 7383: scenario.expectedPart, 7384: ); 7385: expect( 7386: Object.keys(materializedParts[scenario.partIndex] as object), 7387: ).toEqual(["type", "text"]); 7388: expect(completedResponse?.content).toEqual([]); 7389: expect(completedResponse?.rawOutputItems).toEqual([]); 7390: expect(out.match(/^event: response\.failed$/gm)).toHaveLength(1); 7391: expect(out).toContain(PUBLIC_RECALL_ERROR); 7392: expect(out).not.toContain(PUBLIC_GATEWAY_ERROR); 7393: expect(out).not.toContain(scenario.privateMarker); 7394: expect(JSON.stringify(completedResponse)).not.toContain( 7395: scenario.privateMarker, 7396: ); 7397: ...
Found 12 matches
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/llm-adapter.test.ts:
Line 3840: // the beta on subscription auth accounts without purchased usage credits, where
Line 3933: // subscription auth accounts without usage credits and the session's
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/lint-action-report.test.ts:
Line 420: expect(result.stdout).toContain("exit 1: CLI usage or argument failure");
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts:
Line 5738: test("rejects usage overflow while merging a continuation", async () => {
Line 7794: test("accounts for terminal Codex continuation usage once when candidate flush exceeds the transaction limit", async () => {
Line 7842: usage: continuationUsage,
Line 9675: test("merges continuation cache usage into onComplete", async () => ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/pipeline-streaming.test.ts</path>
<type>file</type>
<content>
1420: }
1421: });
1422:
1423: it("ends an unsuccessful Responses stream span exactly once", async () => {
1424: const end = vi.fn();
1425: const span = {
1426: end,
1427: setAttribute: vi.fn(),
1428: setAttributes: vi.fn(),
1429: setStatus: vi.fn(),
1430: updateName: vi.fn(),
1431: } as unknown as Sentry.Span;
1432: const actualSentry =
1433: await vi.importActual<typeof import("@sentry/bun")>("@sentry/bun");
1434: vi.mocked(Sentry.startInactiveSpan).mockImplementation((options) =>
1435: options.op === "gen_ai.chat"
1436: ? span
1437: : actualSentry.startInactiveSpan(options),
1438: );
1439: setUpstreamInterceptor(
1440: async () =>
1441: new Response(incompleteResponsesSSE("resp_incomplete_span"), {
1442: headers: { ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/pipeline-streaming.test.ts</path>
<type>file</type>
<content>
1597: return new Response(
1598: responsesEvent("response.created", {
1599: response: {
1600: id: "resp_recall_accounting_failed",
1601: model: "gpt-5.6-sol",
1602: status: "in_progress",
1603: },
1604: }) +
1605: responsesEvent("response.failed", {
1606: response: {
1607: id: "resp_recall_accounting_failed",
1608: model: "gpt-5.6-sol",
1609: status: "failed",
1610: output: [],
1611: usage: { input_tokens: 1_000, output_tokens: 100 },
1612: error: { type: "server_error", message: "provider failed" },
1613: },
1614: }),
1615: { headers: { "content-type": "text/event-stream" } },
1616: );
1617: });
1618: const store = ...
Found 100 matches (more matches available)
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/semantic-lint-orchestration.test.ts:
Line 12: describe("runSemanticLint cancellation", () => {
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/claude-usage-provisional.test.ts:
Line 35: headers: { "retry-after": "30" },
Line 82: expect(response.headers.get("retry-after")).toBe("30");
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/claude-usage-headers.test.ts:
Line 103: "retry-after": "30",
Line 125: expect(response.headers.get("retry-after")).toBe("30");
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/cache-stability.e2e.test.ts:
Line 1635: // and would otherwise retry-loop (protocol-mismatch) during replay.
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/llm-adapter.test.ts:
Line 4: // Mock the ...
Found 17 matches
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts:
Line 460: test("finalizes when the client cancels immediately after a no-recall terminal", async () => {
Line 602: test.each(["failed", "cancelled"])(
Line 945: test("does not retry a pre-output principal resource limit", async () => {
Line 1537: test("does not retry a pre-output principal inactivity failure", async () => {
Line 1568: test("does not retry when the client cancels a stalled principal read", async () => {
Line 1598: test("cancels a retry response returned after foreground abort", async () => {
Line 6870: test("does not double-charge transactional output when retrying a continuation", async () => {
Line 6923: test("restores every continuation retry budget and identity baseline", async () => {
Line 7125: test("stops reading upstream while the client applies backpressure", async () => {
Line ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts</path>
<type>file</type>
<content>
7070: }),
7071: runFollowUp: async () => ({ reader: followUp.body!.getReader() }),
7072: },
7073: );
7074:
7075: expect(await drain(client)).toContain(PUBLIC_RECALL_ERROR);
7076: expect(failures).toEqual(["resource_limit"]);
7077: });
7078:
7079: test("delivers a resolved sparse continuation candidate exactly once", async () => {
7080: const sparseArguments = `{"path":"${"x".repeat(10 * 1024)}"}`;
7081: const anchorText = "a".repeat(4 * 1024);
7082: const followUp = streamFrom([
7083: created("resp_sparse_transactional_once", "gpt-5.6-terra"),
7084: sparseVisibleFunctionCall(0, sparseArguments),
7085: completed("resp_sparse_transactional_once"),
7086: ]);
7087: const client = streamResponsesRecallAware(
7088: streamFrom([
7089: ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
18840: ) {
18841: dropStreamingFinalizer();
18842: return;
18843: }
18844: accountUnsuccessfulResponse(
18845: resp,
18846: sessionState.sessionID,
18847: sessionState.resolvedConversationTTL,
18848: genAiSpan,
18849: endGenAiSpan,
18850: () => {
18851: sessionState._dirty = true;
18852: },
18853: );
18854: },
18855: dropStreamingFinalizer,
18856: true,
18857: requestCredentialFingerprint(req.rawHeaders, config) ?? ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/src/pipeline.ts</path>
<type>file</type>
<content>
18770: return;
18771: }
18772: if (sessionSignal.aborted) {
18773: dropStreamingFinalizer();
18774: return;
18775: }
18776: if (downstreamWasCancelled()) {
18777: rollbackRecallPersistence();
18778: accountUnsuccessfulResponse(
18779: resp,
18780: sessionState.sessionID,
18781: sessionState.resolvedConversationTTL,
18782: genAiSpan,
18783: endGenAiSpan,
18784: () => {
18785: sessionState._dirty = true;
18786: },
18787: );
18788: return;
18789: }
18790: try {
18791: const postResponseFailed = new Error(
18792: "Responses recall post-response persistence failed",
18793: );
18794: try {
18795: ...
Found 29 matches
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts:
Line 199: "response.reasoning_text.delta",
Line 200: "response.reasoning_text.done",
Line 326: case "response.reasoning_text.delta":
Line 335: case "response.reasoning_text.done":
Line 336: beforeTrigger = sseEvent("response.reasoning_text.delta", {
Line 397: : event.startsWith("response.reasoning_text")
Line 398: ? { type: "reasoning_text", text: "reasoning value" }
Line 4230: created("resp_summary_field_omitted", "gpt-5.6-terra"),
Line 4235: id: "rs_summary_field_omitted",
Line 4241: item_id: "rs_summary_field_omitted",
Line 4247: item: { type: "reasoning", id: "rs_summary_field_omitted" },
Line 4249: completed("resp_summary_field_omitted"),
Line 4870: created("resp_reasoning_text", "gpt-5.6-terra"),
Line 4879: ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts</path>
<type>file</type>
<content>
4180: recalls++;
4181: return { anchorText: "", resultText: "" };
4182: },
4183: runFollowUp: async () => {
4184: followUps++;
4185: throw new Error("should not run");
4186: },
4187: },
4188: );
4189:
4190: expect(await drain(client)).toContain(PUBLIC_RECALL_ERROR);
4191: expect(recalls).toBe(0);
4192: expect(followUps).toBe(0);
4193: });
4194:
4195: test("rejects unfinished reasoning omitted from output_item.done", async () => {
4196: const client = streamResponsesRecallAware(
4197: streamFrom([
4198: created("resp_summary_unfinished", "gpt-5.6-terra"),
4199: sseEvent("response.output_item.added", {
4200: output_index: 0,
4201: item: { type: "reasoning", id: "rs_summary_unfinished", summary: ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts</path>
<type>file</type>
<content>
4840: output_index: 0,
4841: item_id: "rs_summary_prefix",
4842: summary_index: 0,
4843: part: { type: "summary_text", text: "prefix" },
4844: }),
4845: sseEvent("response.output_item.done", {
4846: output_index: 0,
4847: item: {
4848: type: "reasoning",
4849: id: "rs_summary_prefix",
4850: summary: [{ type: "summary_text", text: "prefix" }],
4851: },
4852: }),
4853: completed("resp_summary_prefix"),
4854: ]),
4855: {
4856: onComplete: () => {},
4857: onRecall: async () => ({ anchorText: "", resultText: "" }),
4858: runFollowUp: async () => {
4859: throw new Error("should not run");
4860: },
4861: },
4862: );
4863:
4864: ...
Found 9 matches
/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts:
Line 2563: test("accepts reasoning summaries with summary_index", async () => {
Line 3098: test("preserves principal finalized text when the Codex terminal item omits content", async () => {
Line 3153: test("preserves sparse Codex content when done and terminal snapshots omit content", async () => {
Line 3704: test("redacts a sparse call omitted from the terminal output", async () => {
Line 4195: test("rejects unfinished reasoning omitted from output_item.done", async () => {
Line 4227: test("rejects unfinished reasoning when output_item.done omits summary", async () => {
Line 4537: test("rejects finalized reasoning that contradicts summary deltas", async () => {
Line 4809: test("accepts reasoning summary prefixes extended by deltas", async () => {
Line 5647: test("rejects reasoning-part declarations after ...
The working copy has no changes. Working copy (@) : lrqlyykx d890b184 (empty) (no description set) Parent commit (@-): tklkqxyt ce88c614 fix/responses-accumulation-order | fix(responses): complete lifecycle reconciliation 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. tklkqxytmpkzzryqlolnpvxouropxznp ce88c614c0ae55d229cb605aa7c7369d918d3650 parents=683dff02101f15198b18e3088a0b57dade290056 conflict=false empty=false kvpmnlwnznqxomuzywlvmotqtplywzvm 683dff02101f15198b18e3088a0b57dade290056 parents=df49b0cec904a3f432a0f7f29ea398840d62fe9e conflict=false empty=false pxrvwsvvkmpoxnsqmrkwrnlqvvkoltwz 2cbf40060c67df229731cf1b9e34d5bf22ec2145 parents=e977b4b1da8f8197c3238466d41de0bccd8eb054 conflict=false ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts</path>
<type>file</type>
<content>
3260: }),
3261: sseEvent("response.output_text.done", {
3262: output_index: 0,
3263: item_id: "msg_sparse_principal_without_done",
3264: content_index: 2,
3265: text: "sparse principal text",
3266: }),
3267: sseEvent("response.completed", { response }),
3268: ]),
3269: {
3270: validation: "codex",
3271: onComplete: (completed) => {
3272: completedResponse = completed;
3273: },
3274: onRecall: async () => {
3275: throw new Error("should not run");
3276: },
3277: runFollowUp: async () => {
3278: throw new Error("should not run");
3279: },
3280: },
3281: );
3282:
3283: const output = await ...
<path>/home/byk/Code/opencode-lore-responses-accumulation/packages/gateway/test/openai-responses-recall-aware-stream.test.ts</path>
<type>file</type>
<content>
420: item_id: itemId,
421: content_index: 0,
422: text,
423: }) +
424: sseEvent("response.output_item.done", {
425: output_index: outputIndex,
426: item: {
427: type: "message",
428: id: itemId,
429: role: "assistant",
430: status: "completed",
431: content: [{ type: "output_text", text }],
432: },
433: });
434:
435: describe("streamResponsesRecallAware", () => {
436: test("forwards events live with NO recall — no header hold-back", async () => {
437: const client = streamResponsesRecallAware(
438: streamFrom([
439: created("resp_plain", "gpt-5.6-terra"),
440: textItem(0, "hello world"),
441: completed("resp_plain", { input_tokens: 10, output_tokens: 3 }),
442: ]),
443: {
444: onComplete: () => {},
445: ...
assertSparseCoordinates() runs before Codex normalization at packages/gateway/src/pipeline.ts:11001-11006. Normalization can then add a missing output_index at packages/gateway/src/stream/openai-responses.ts:1501-1528 and :1561-1623. The normalized coordinate is never checked against contIndex.
Counterexample: a principal recall at index 99_999 makes contIndex equal 100_000. A continuation item without output_index normalizes to local index 0, then shifts to 100_000 at pipeline.ts:11124-11127 and :11432-11441, breaching the exclusive ceiling. shiftedOutputIndex() checks only safe-integer overflow at pipeline.ts:9849-9855.
The boundary tests at openai-responses-recall-aware-stream.test.ts:7406-7499 cover only explicit coordinates. Add omitted-index principal-offset regressions and enforce the remaining shifted capacity during normalization.
null content partsSparse message materialization correctly retains holes at pipeline.ts:7971-7995, and finalizeResponsesAcc() skips them at stream/openai-responses.ts:825-845. But buildOutputItems() reuses the sparse raw array unchanged at pipeline.ts:10003-10014. buildTerminal() then serializes it at :9943-9983; JSON converts holes into null.
The existing shifted-continuation test at openai-responses-recall-aware-stream.test.ts:3298-3361 checks callback state but never inspects the rebuilt terminal body. Its successful response can contain:
"content": [null, null, {"type":"output_text","text":"..."}]
That is not a valid message-content array; the project’s item validator requires every part to be an object at stream/openai-responses.ts:1356-1367. Preserve sparse private state, but omit or safely project sparse content in the public rebuilt terminal. Add a terminal-frame assertion. ...