@remnic/core 1.1.6 → 1.1.8
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/dist/access-cli.js +20 -20
- package/dist/access-http.d.ts +7 -7
- package/dist/access-http.js +9 -9
- package/dist/access-mcp.d.ts +7 -7
- package/dist/access-mcp.js +8 -8
- package/dist/{access-service-CcKu1Yc0.d.ts → access-service-C0Rkioec.d.ts} +9 -9
- package/dist/access-service.d.ts +7 -7
- package/dist/access-service.js +7 -7
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +6 -6
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +3 -3
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/calibration.d.ts +1 -1
- package/dist/calibration.js +2 -2
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +2 -2
- package/dist/causal-consolidation.js +5 -5
- package/dist/{chunk-EONJ7GK3.js → chunk-4IT6WL23.js} +2 -2
- package/dist/{chunk-MYMOXFMR.js → chunk-65ZPH7QA.js} +4 -4
- package/dist/{chunk-D7WYTVUQ.js → chunk-AV2WSYZY.js} +2 -2
- package/dist/{chunk-3P6TPZM4.js → chunk-DWMXVUGO.js} +9 -4
- package/dist/chunk-DWMXVUGO.js.map +1 -0
- package/dist/{chunk-AIT53NLG.js → chunk-E27HOXMX.js} +2 -2
- package/dist/{chunk-LKJA5MR2.js → chunk-ETA2JXP5.js} +2 -2
- package/dist/{chunk-UE2OQNQQ.js → chunk-FCGWNWG4.js} +3 -3
- package/dist/{chunk-ZBZVNWQO.js → chunk-FIXIX6DE.js} +2 -2
- package/dist/{chunk-AOABCJVL.js → chunk-GRDDGNYQ.js} +20 -18
- package/dist/chunk-GRDDGNYQ.js.map +1 -0
- package/dist/{chunk-OZAFME7S.js → chunk-KHJRMWO4.js} +7 -7
- package/dist/{chunk-AKV3HOGZ.js → chunk-KNQ5YJTO.js} +2 -2
- package/dist/{chunk-AKV3HOGZ.js.map → chunk-KNQ5YJTO.js.map} +1 -1
- package/dist/{chunk-Y27UJK6V.js → chunk-L2EXJQJP.js} +15 -2
- package/dist/chunk-L2EXJQJP.js.map +1 -0
- package/dist/{chunk-PT2EZWOH.js → chunk-MYH2IBSP.js} +2 -2
- package/dist/{chunk-KUIEFH2S.js → chunk-OJMD2LIW.js} +3 -3
- package/dist/{chunk-M3QQ5DRA.js → chunk-Q5TJRAGE.js} +3 -3
- package/dist/{chunk-FSWYMUWI.js → chunk-QJZ77K7F.js} +13 -1
- package/dist/chunk-QJZ77K7F.js.map +1 -0
- package/dist/{chunk-7RAW2T4P.js → chunk-RJSVRPNU.js} +2 -2
- package/dist/{chunk-ZOMA7J3J.js → chunk-RLV2F337.js} +2 -2
- package/dist/{chunk-BFVBG5XY.js → chunk-S5SQDIF5.js} +2 -2
- package/dist/{chunk-TMSHGSIG.js → chunk-SRIDOT64.js} +2 -2
- package/dist/{chunk-RXGR3YLU.js → chunk-STB3GUYU.js} +2 -2
- package/dist/{chunk-YKGRACQP.js → chunk-SWRJFKYW.js} +5 -5
- package/dist/{chunk-XOG2FHYW.js → chunk-SYWJJTNL.js} +16 -16
- package/dist/{chunk-COAGZQT7.js → chunk-T65SHTJP.js} +1 -1
- package/dist/chunk-T65SHTJP.js.map +1 -0
- package/dist/{chunk-5NS6NN5A.js → chunk-WXPPM426.js} +2 -2
- package/dist/{chunk-DLYTYJ43.js → chunk-XGX4TUF6.js} +2 -2
- package/dist/{chunk-YELFQNQH.js → chunk-XVOIMCVW.js} +2 -2
- package/dist/{cli-WahR0rs-.d.ts → cli-CIATRu8o.d.ts} +4 -4
- package/dist/cli.d.ts +8 -8
- package/dist/cli.js +18 -18
- package/dist/{codex-materialize-D5d5vvyS.d.ts → codex-materialize-xVqbEmcm.d.ts} +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/{engine-5OTS6GY3.js → engine-MEAYUA7A.js} +4 -4
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +3 -3
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +6 -6
- package/dist/explicit-cue-recall.js +1 -1
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.js +3 -3
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/fallback-llm.js +2 -2
- package/dist/identity-continuity.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/index.d.ts +13 -13
- package/dist/index.js +27 -27
- package/dist/intent.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/{memory-governance-7MI7KE35.js → memory-governance-G3XODEXW.js} +4 -4
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/{memory-projection-store-BQt5VUQ8.d.ts → memory-projection-store-lCzmu4JX.d.ts} +1 -1
- package/dist/memory-projection-store.d.ts +2 -2
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/openai-chat-compat.d.ts +9 -1
- package/dist/openai-chat-compat.js +5 -1
- package/dist/operator-toolkit.d.ts +2 -2
- package/dist/operator-toolkit.js +6 -6
- package/dist/{orchestrator-D2lHhFWI.d.ts → orchestrator-CvUYwuaL.d.ts} +3 -3
- package/dist/orchestrator.d.ts +6 -6
- package/dist/orchestrator.js +15 -15
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/{port-5W-r5SKc.d.ts → port-BkWL7hqo.d.ts} +1 -1
- package/dist/qmd-recall-cache.d.ts +2 -2
- package/dist/qmd.d.ts +2 -2
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +2 -2
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/schemas.d.ts +22 -22
- package/dist/{semantic-consolidation-tDODR2je.d.ts → semantic-consolidation-CGiH52qa.d.ts} +2 -2
- package/dist/semantic-consolidation.d.ts +3 -3
- package/dist/semantic-consolidation.js +3 -3
- package/dist/semantic-rule-promotion.js +3 -3
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +3 -3
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +2 -2
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +3 -3
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +3 -3
- package/dist/tier-routing.d.ts +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/{types-C-USTTAx.d.ts → types-H85grL1f.d.ts} +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-3P6TPZM4.js.map +0 -1
- package/dist/chunk-AOABCJVL.js.map +0 -1
- package/dist/chunk-COAGZQT7.js.map +0 -1
- package/dist/chunk-FSWYMUWI.js.map +0 -1
- package/dist/chunk-Y27UJK6V.js.map +0 -1
- /package/dist/{chunk-EONJ7GK3.js.map → chunk-4IT6WL23.js.map} +0 -0
- /package/dist/{chunk-MYMOXFMR.js.map → chunk-65ZPH7QA.js.map} +0 -0
- /package/dist/{chunk-D7WYTVUQ.js.map → chunk-AV2WSYZY.js.map} +0 -0
- /package/dist/{chunk-AIT53NLG.js.map → chunk-E27HOXMX.js.map} +0 -0
- /package/dist/{chunk-LKJA5MR2.js.map → chunk-ETA2JXP5.js.map} +0 -0
- /package/dist/{chunk-UE2OQNQQ.js.map → chunk-FCGWNWG4.js.map} +0 -0
- /package/dist/{chunk-ZBZVNWQO.js.map → chunk-FIXIX6DE.js.map} +0 -0
- /package/dist/{chunk-OZAFME7S.js.map → chunk-KHJRMWO4.js.map} +0 -0
- /package/dist/{chunk-PT2EZWOH.js.map → chunk-MYH2IBSP.js.map} +0 -0
- /package/dist/{chunk-KUIEFH2S.js.map → chunk-OJMD2LIW.js.map} +0 -0
- /package/dist/{chunk-M3QQ5DRA.js.map → chunk-Q5TJRAGE.js.map} +0 -0
- /package/dist/{chunk-7RAW2T4P.js.map → chunk-RJSVRPNU.js.map} +0 -0
- /package/dist/{chunk-ZOMA7J3J.js.map → chunk-RLV2F337.js.map} +0 -0
- /package/dist/{chunk-BFVBG5XY.js.map → chunk-S5SQDIF5.js.map} +0 -0
- /package/dist/{chunk-TMSHGSIG.js.map → chunk-SRIDOT64.js.map} +0 -0
- /package/dist/{chunk-RXGR3YLU.js.map → chunk-STB3GUYU.js.map} +0 -0
- /package/dist/{chunk-YKGRACQP.js.map → chunk-SWRJFKYW.js.map} +0 -0
- /package/dist/{chunk-XOG2FHYW.js.map → chunk-SYWJJTNL.js.map} +0 -0
- /package/dist/{chunk-5NS6NN5A.js.map → chunk-WXPPM426.js.map} +0 -0
- /package/dist/{chunk-DLYTYJ43.js.map → chunk-XGX4TUF6.js.map} +0 -0
- /package/dist/{chunk-YELFQNQH.js.map → chunk-XVOIMCVW.js.map} +0 -0
- /package/dist/{engine-5OTS6GY3.js.map → engine-MEAYUA7A.js.map} +0 -0
- /package/dist/{memory-governance-7MI7KE35.js.map → memory-governance-G3XODEXW.js.map} +0 -0
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from "./chunk-H7XKCNR6.js";
|
|
12
12
|
import {
|
|
13
13
|
toRecallExplainJson
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-WXPPM426.js";
|
|
15
15
|
import {
|
|
16
16
|
buildProposedActions,
|
|
17
17
|
buildQualityScore,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
listMemoryGovernanceRuns,
|
|
20
20
|
readMemoryGovernanceRunArtifact,
|
|
21
21
|
runMemoryGovernance
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-E27HOXMX.js";
|
|
23
23
|
import {
|
|
24
24
|
clusterByKey,
|
|
25
25
|
resolveGitContext
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
} from "./chunk-EQINRHYR.js";
|
|
36
36
|
import {
|
|
37
37
|
estimateRecallTokens
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-AV2WSYZY.js";
|
|
39
39
|
import {
|
|
40
40
|
recordMemoryOutcome
|
|
41
41
|
} from "./chunk-EIR5VLIH.js";
|
|
@@ -79,14 +79,14 @@ import {
|
|
|
79
79
|
buildBriefing,
|
|
80
80
|
parseBriefingFocus,
|
|
81
81
|
parseBriefingWindow
|
|
82
|
-
} from "./chunk-
|
|
82
|
+
} from "./chunk-4IT6WL23.js";
|
|
83
83
|
import {
|
|
84
84
|
parseEntityFile
|
|
85
|
-
} from "./chunk-
|
|
85
|
+
} from "./chunk-XGX4TUF6.js";
|
|
86
86
|
import {
|
|
87
87
|
DEFAULT_RECALL_DISCLOSURE,
|
|
88
88
|
isRecallDisclosure
|
|
89
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-T65SHTJP.js";
|
|
90
90
|
import {
|
|
91
91
|
inferMemoryStatus,
|
|
92
92
|
toMemoryPathRel
|
|
@@ -4227,4 +4227,4 @@ export {
|
|
|
4227
4227
|
shapeMemorySummary,
|
|
4228
4228
|
EngramAccessService
|
|
4229
4229
|
};
|
|
4230
|
-
//# sourceMappingURL=chunk-
|
|
4230
|
+
//# sourceMappingURL=chunk-KHJRMWO4.js.map
|
|
@@ -712,7 +712,7 @@ function candidateTurnIndexesForReference(reference) {
|
|
|
712
712
|
}
|
|
713
713
|
}
|
|
714
714
|
const pairedBase = reference.number * 2;
|
|
715
|
-
for (let offset = -
|
|
715
|
+
for (let offset = -1; offset <= 1; offset += 1) {
|
|
716
716
|
candidates.add(pairedBase + offset);
|
|
717
717
|
}
|
|
718
718
|
return [...candidates].sort((left, right) => left - right);
|
|
@@ -754,4 +754,4 @@ export {
|
|
|
754
754
|
collectStructuredPlanCues,
|
|
755
755
|
collectTemporalLexicalCues
|
|
756
756
|
};
|
|
757
|
-
//# sourceMappingURL=chunk-
|
|
757
|
+
//# sourceMappingURL=chunk-KNQ5YJTO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/explicit-cue-recall.ts"],"sourcesContent":["import { buildEvidencePack } from \"./evidence-pack.js\";\n\nexport interface ExplicitCueRecallEngine {\n expandContext(\n sessionId: string,\n fromTurn: number,\n toTurn: number,\n maxTokens: number,\n ): Promise<Array<{ turn_index: number; role: string; content: string }>>;\n searchContextFull(\n query: string,\n limit: number,\n sessionId?: string,\n ): Promise<\n Array<{\n turn_index: number;\n role: string;\n content: string;\n session_id: string;\n score?: number;\n }>\n >;\n}\n\nexport interface ExplicitCueRecallOptions {\n engine: ExplicitCueRecallEngine | null | undefined;\n sessionId?: string;\n query: string;\n maxChars: number;\n maxItemChars?: number;\n maxReferences?: number;\n includeBenchmarkAnchorCues?: boolean;\n includeStructuredPlanCues?: boolean;\n}\n\nexport type ExplicitTurnReference = {\n number: number;\n includeDirectTurn: boolean;\n};\n\nconst DEFAULT_MAX_CHARS = 2_400;\nconst DEFAULT_MAX_ITEM_CHARS = 1_200;\nconst DEFAULT_MAX_REFERENCES = 24;\nconst REFERENCE_SCAN_TOKEN_FACTOR = 3;\nconst TURN_REFERENCE_WINDOW_RADIUS = 0;\nconst LEXICAL_CUE_WINDOW_RADIUS = 1;\nconst LEXICAL_CUE_SEARCH_LIMIT = 3;\nconst LEXICAL_CUE_MAX_TOKENS = 400;\nconst LATEST_STATE_CUES = new Set([\n \"as of\",\n \"currently\",\n \"latest\",\n \"most recent\",\n \"newest\",\n \"now\",\n \"updated\",\n \"changed\",\n \"change\",\n]);\nconst STRUCTURED_PLAN_FIELD_CUES = new Set([\n \"accommodation\",\n \"attraction\",\n \"breakfast\",\n \"current city\",\n \"dinner\",\n \"flight\",\n \"flights\",\n \"hotel\",\n \"lunch\",\n \"restaurant\",\n \"restaurants\",\n \"transportation\",\n \"traveler\",\n \"travelers\",\n]);\nconst STRUCTURED_PLAN_DEPENDENCY_CUES = new Set([\n \"comparison\",\n \"constraint\",\n \"constraints\",\n \"dependency\",\n \"dependencies\",\n \"join\",\n \"same\",\n \"shared\",\n]);\nconst BENCHMARK_ABILITY_CUES = new Map([\n [\"information extraction\", \"ability=information_extraction\"],\n [\"knowledge update\", \"ability=knowledge_update\"],\n [\"multi session reasoning\", \"ability=multi_session_reasoning\"],\n [\"multi-session reasoning\", \"ability=multi_session_reasoning\"],\n [\"instruction following\", \"ability=instruction_following\"],\n]);\nconst BENCHMARK_ANCHOR_VALUE_STOPWORDS = new Set([\n \"a\",\n \"about\",\n \"an\",\n \"for\",\n \"from\",\n \"in\",\n \"on\",\n \"the\",\n \"to\",\n \"use\",\n \"using\",\n \"with\",\n]);\nconst RELATIVE_TEMPORAL_CUES = [\n \"as of\",\n \"most recent\",\n \"last time\",\n \"last week\",\n \"last month\",\n \"last year\",\n \"last session\",\n \"last conversation\",\n \"next time\",\n \"next week\",\n \"next month\",\n \"next year\",\n \"next session\",\n \"next conversation\",\n \"previous time\",\n \"previous week\",\n \"previous month\",\n \"previous year\",\n \"previous session\",\n \"previous conversation\",\n \"prior time\",\n \"prior week\",\n \"prior month\",\n \"prior year\",\n \"prior session\",\n \"prior conversation\",\n \"today\",\n \"yesterday\",\n \"tomorrow\",\n \"tonight\",\n \"earlier\",\n \"later\",\n \"recently\",\n \"previously\",\n \"currently\",\n \"now\",\n \"latest\",\n \"newest\",\n \"oldest\",\n \"earliest\",\n \"before\",\n \"after\",\n \"since\",\n \"updated\",\n \"changed\",\n \"change\",\n];\nconst SPEAKER_NAME_STOPWORDS = new Set([\n \"A\",\n \"According\",\n \"An\",\n \"And\",\n \"Are\",\n \"As\",\n \"At\",\n \"Before\",\n \"Can\",\n \"Compare\",\n \"Could\",\n \"Did\",\n \"Do\",\n \"Does\",\n \"For\",\n \"From\",\n \"Had\",\n \"Has\",\n \"Have\",\n \"How\",\n \"In\",\n \"Is\",\n \"It\",\n \"Join\",\n \"Of\",\n \"On\",\n \"Or\",\n \"Please\",\n \"Review\",\n \"Step\",\n \"Tell\",\n \"The\",\n \"To\",\n \"Turn\",\n \"Use\",\n \"Was\",\n \"Were\",\n \"What\",\n \"When\",\n \"Where\",\n \"Which\",\n \"Who\",\n \"Why\",\n \"Will\",\n \"Would\",\n]);\nconst QUESTION_SLOT_STOPWORDS = new Set([\n \"answer\",\n \"choice\",\n \"did\",\n \"does\",\n \"do\",\n \"is\",\n \"should\",\n \"single\",\n \"the\",\n \"user\",\n \"was\",\n \"were\",\n]);\n\nexport async function buildExplicitCueRecallSection(\n options: ExplicitCueRecallOptions,\n): Promise<string> {\n const engine = options.engine;\n const query = options.query.trim();\n const maxChars = normalizePositiveInteger(options.maxChars, DEFAULT_MAX_CHARS);\n if (!engine || query.length === 0 || maxChars <= 0) {\n return \"\";\n }\n\n const maxReferences = normalizePositiveInteger(\n options.maxReferences,\n DEFAULT_MAX_REFERENCES,\n );\n if (maxReferences <= 0) {\n return \"\";\n }\n\n const evidenceItems: Array<{\n id: string;\n sessionId: string;\n turnIndex: number;\n role: string;\n content: string;\n score?: number;\n }> = [];\n const seenTurns = new Set<string>();\n\n await collectTurnReferenceEvidence({\n engine,\n sessionId: options.sessionId,\n query,\n maxReferences,\n evidenceItems,\n seenTurns,\n });\n\n await collectLexicalCueEvidence({\n engine,\n sessionId: options.sessionId,\n query,\n maxReferences,\n includeBenchmarkAnchorCues: options.includeBenchmarkAnchorCues,\n includeStructuredPlanCues: options.includeStructuredPlanCues,\n evidenceItems,\n seenTurns,\n });\n\n return buildEvidencePack(evidenceItems, {\n title: \"Explicit Cue Evidence\",\n maxChars,\n maxItemChars: normalizePositiveInteger(\n options.maxItemChars,\n DEFAULT_MAX_ITEM_CHARS,\n ),\n });\n}\n\nasync function collectTurnReferenceEvidence(options: {\n engine: ExplicitCueRecallEngine;\n sessionId?: string;\n query: string;\n maxReferences: number;\n evidenceItems: Array<{\n id: string;\n sessionId: string;\n turnIndex: number;\n role: string;\n content: string;\n }>;\n seenTurns: Set<string>;\n}): Promise<void> {\n if (!options.sessionId) {\n return;\n }\n\n const references = collectExplicitTurnReferences(options.query).slice(\n 0,\n options.maxReferences,\n );\n if (references.length === 0) {\n return;\n }\n\n const windows = new Map<string, { fromTurn: number; toTurn: number }>();\n for (const reference of references) {\n for (const center of candidateTurnIndexesForReference(reference)) {\n if (center < 0) {\n continue;\n }\n\n const fromTurn = Math.max(0, center - TURN_REFERENCE_WINDOW_RADIUS);\n const toTurn = center + TURN_REFERENCE_WINDOW_RADIUS;\n windows.set(`${fromTurn}:${toTurn}`, { fromTurn, toTurn });\n }\n }\n\n for (const window of [...windows.values()].sort(\n (left, right) => left.fromTurn - right.fromTurn || left.toTurn - right.toTurn,\n )) {\n const expanded = await options.engine.expandContext(\n options.sessionId,\n window.fromTurn,\n window.toTurn,\n 2_000,\n );\n appendExpandedEvidence(\n options.evidenceItems,\n options.seenTurns,\n options.sessionId,\n expanded,\n );\n }\n}\n\nasync function collectLexicalCueEvidence(options: {\n engine: ExplicitCueRecallEngine;\n sessionId?: string;\n query: string;\n maxReferences: number;\n includeBenchmarkAnchorCues?: boolean;\n includeStructuredPlanCues?: boolean;\n evidenceItems: Array<{\n id: string;\n sessionId: string;\n turnIndex: number;\n role: string;\n content: string;\n score?: number;\n }>;\n seenTurns: Set<string>;\n}): Promise<void> {\n const cues = collectLexicalCues(options.query, {\n includeBenchmarkAnchorCues: options.includeBenchmarkAnchorCues,\n includeStructuredPlanCues: options.includeStructuredPlanCues,\n }).slice(0, options.maxReferences);\n const preferLatest = hasLatestStateIntent(options.query);\n for (const cue of cues) {\n const results = sortLexicalCueResults(\n await options.engine.searchContextFull(\n cue,\n LEXICAL_CUE_SEARCH_LIMIT,\n options.sessionId,\n ),\n preferLatest,\n );\n for (const result of results) {\n const windowRadius = preferLatest ? 0 : LEXICAL_CUE_WINDOW_RADIUS;\n const fromTurn = Math.max(0, result.turn_index - windowRadius);\n const toTurn = result.turn_index + windowRadius;\n const expanded = await options.engine.expandContext(\n result.session_id,\n fromTurn,\n toTurn,\n LEXICAL_CUE_MAX_TOKENS,\n );\n if (expanded.length === 0) {\n appendEvidenceItem(options.evidenceItems, options.seenTurns, {\n id: `${result.session_id}:${result.turn_index}`,\n sessionId: result.session_id,\n turnIndex: result.turn_index,\n role: result.role,\n content: result.content,\n ...(typeof result.score === \"number\" ? { score: result.score } : {}),\n });\n continue;\n }\n appendExpandedEvidence(\n options.evidenceItems,\n options.seenTurns,\n result.session_id,\n expanded,\n );\n }\n }\n}\n\nfunction appendExpandedEvidence(\n evidenceItems: Array<{\n id: string;\n sessionId: string;\n turnIndex: number;\n role: string;\n content: string;\n }>,\n seenTurns: Set<string>,\n sessionId: string,\n expanded: Array<{ turn_index: number; role: string; content: string }>,\n): void {\n for (const message of expanded) {\n appendEvidenceItem(evidenceItems, seenTurns, {\n id: `${sessionId}:${message.turn_index}`,\n sessionId,\n turnIndex: message.turn_index,\n role: message.role,\n content: message.content,\n });\n }\n}\n\nfunction appendEvidenceItem<T extends { id: string }>(\n evidenceItems: T[],\n seenTurns: Set<string>,\n item: T,\n): void {\n if (seenTurns.has(item.id)) {\n return;\n }\n seenTurns.add(item.id);\n evidenceItems.push(item);\n}\n\nexport function collectExplicitTurnReferences(\n query: string,\n): ExplicitTurnReference[] {\n const references = new Map<string, ExplicitTurnReference>();\n const addReference = (value: number, label: string) => {\n const existing = references.get(String(value));\n references.set(String(value), {\n number: value,\n includeDirectTurn:\n (existing?.includeDirectTurn ?? false) || label === \"turn\",\n });\n };\n\n const tokens = tokenizeReferenceQuery(query);\n for (let index = 0; index < tokens.length; index += 1) {\n const label = normalizeReferenceLabel(tokens[index]);\n if (!label) {\n continue;\n }\n\n const parsed = parseReferenceNumbers(tokens, index + 1);\n for (const number of parsed.numbers) {\n addReference(number, label);\n }\n index = Math.max(index, parsed.nextIndex - 1);\n }\n\n return [...references.values()].sort((left, right) => left.number - right.number);\n}\n\nexport function collectLexicalCues(\n query: string,\n options: {\n includeBenchmarkAnchorCues?: boolean;\n includeStructuredPlanCues?: boolean;\n } = {},\n): string[] {\n const cues = new Set<string>();\n\n for (const match of query.matchAll(/\\b[A-Za-z][A-Za-z0-9]{0,12}\\d+:\\d+\\b/g)) {\n cues.add(match[0]);\n }\n for (const match of query.matchAll(/\\b\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}(?::\\d{2})?Z?)?\\b/g)) {\n cues.add(match[0]);\n }\n for (const cue of collectTemporalLexicalCues(query)) {\n cues.add(cue);\n }\n for (const cue of collectQuestionSlotCues(query)) {\n cues.add(cue);\n }\n if (options.includeBenchmarkAnchorCues) {\n for (const cue of collectBenchmarkAnchorCues(query)) {\n cues.add(cue);\n }\n }\n if (options.includeStructuredPlanCues) {\n for (const cue of collectStructuredPlanCues(query)) {\n cues.add(cue);\n }\n }\n for (const match of query.matchAll(/\\b(?:session|source|chat|plan|task|event|file|tool)[_-][A-Za-z0-9][A-Za-z0-9_.:-]{0,80}\\b/gi)) {\n cues.add(match[0]);\n }\n for (const match of query.matchAll(/\\b[A-Z][a-z]{1,30}(?:\\s+[A-Z][a-z]{1,30}){0,2}\\b/g)) {\n const value = normalizeSpeakerNameCue(match[0]);\n if (value) {\n cues.add(value);\n }\n }\n for (const match of query.matchAll(/\\[([A-Za-z0-9][A-Za-z0-9_.:/ -]{1,80})\\]/g)) {\n const value = match[1]?.trim();\n if (value) {\n cues.add(value);\n }\n }\n\n return [...cues].sort((left, right) => left.localeCompare(right));\n}\n\nexport function collectQuestionSlotCues(query: string): string[] {\n const cues = new Set<string>();\n for (const match of query.matchAll(\n /\\b(?:what|which)\\s+([a-z][a-z0-9_-]{2,30})\\s+(?:does|do|did|is|are|was|were|should|would|could|can|will)\\b/gi,\n )) {\n const value = match[1]?.toLowerCase();\n if (value && !QUESTION_SLOT_STOPWORDS.has(value)) {\n cues.add(value);\n }\n }\n return [...cues].sort((left, right) => left.localeCompare(right));\n}\n\nexport function collectBenchmarkAnchorCues(query: string): string[] {\n const cues = new Set<string>();\n const normalizedQuery = query.toLowerCase().replace(/\\s+/g, \" \");\n for (const [phrase, cue] of BENCHMARK_ABILITY_CUES) {\n if (containsBoundedPhrase(normalizedQuery, phrase)) {\n cues.add(cue);\n }\n }\n\n const tokens = tokenizeAnchorQuery(query);\n for (let index = 0; index < tokens.length; index += 1) {\n let prefix = normalizeBenchmarkAnchorPrefix(tokens[index]);\n if (!prefix) {\n continue;\n }\n\n let valueIndex = index + 1;\n if (\n prefix === \"source\" &&\n tokens[valueIndex]?.toLowerCase() === \"chat\"\n ) {\n prefix = \"source_chat\";\n valueIndex += 1;\n }\n const maybeIdLabel = tokens[valueIndex]?.toLowerCase();\n if (maybeIdLabel === \"id\" || maybeIdLabel === \"ids\") {\n valueIndex += 1;\n }\n\n let consumedValue = false;\n for (\n let currentValueIndex = valueIndex;\n currentValueIndex < tokens.length;\n currentValueIndex += 1\n ) {\n const rawValue = tokens[currentValueIndex];\n const normalizedValue = rawValue?.toLowerCase();\n if (!rawValue || normalizeBenchmarkAnchorPrefix(rawValue)) {\n break;\n }\n if (normalizedValue === \"and\" || normalizedValue === \"or\") {\n continue;\n }\n if (BENCHMARK_ANCHOR_VALUE_STOPWORDS.has(normalizedValue)) {\n break;\n }\n if (!isBenchmarkAnchorValue(rawValue)) {\n break;\n }\n addBenchmarkAnchorCues(cues, prefix, rawValue);\n consumedValue = true;\n index = currentValueIndex;\n }\n if (!consumedValue) {\n continue;\n }\n }\n\n return [...cues].sort((left, right) => left.localeCompare(right));\n}\n\nfunction addBenchmarkAnchorCues(\n cues: Set<string>,\n prefix: string,\n rawValue: string,\n): void {\n cues.add(`${prefix}_id=${rawValue}`);\n cues.add(`${prefix}-${rawValue}`);\n if (prefix === \"source_chat\") {\n cues.add(`chat_id=${rawValue}`);\n }\n}\n\nfunction isBenchmarkAnchorValue(token: string): boolean {\n for (const char of token) {\n if (isAsciiDigitChar(char)) {\n return true;\n }\n }\n return false;\n}\n\nfunction isAsciiDigitChar(char: string): boolean {\n const code = char.charCodeAt(0);\n return code >= 48 && code <= 57;\n}\n\nfunction normalizeBenchmarkAnchorPrefix(token: string | undefined): string | undefined {\n switch (token?.toLowerCase()) {\n case \"ability\":\n case \"chat\":\n case \"plan\":\n case \"rubric\":\n case \"source\":\n return token.toLowerCase();\n default:\n return undefined;\n }\n}\n\nfunction tokenizeAnchorQuery(query: string): string[] {\n const tokens: string[] = [];\n let current = \"\";\n const push = () => {\n const token = trimTrailingAnchorTokenPunctuation(current);\n if (token.length > 0) {\n tokens.push(token);\n }\n current = \"\";\n };\n\n for (const char of query) {\n if (\n isAsciiLetterOrDigit(char) ||\n char === \"_\" ||\n char === \"-\" ||\n char === \".\" ||\n char === \":\"\n ) {\n current += char;\n continue;\n }\n push();\n }\n push();\n return tokens;\n}\n\nfunction trimTrailingAnchorTokenPunctuation(token: string): string {\n let end = token.length;\n while (end > 0) {\n const char = token[end - 1];\n if (\n char !== \".\" &&\n char !== \":\" &&\n char !== \";\" &&\n char !== \"!\" &&\n char !== \"?\"\n ) {\n break;\n }\n end -= 1;\n }\n return token.slice(0, end);\n}\n\nexport function collectStructuredPlanCues(query: string): string[] {\n const cues = new Set<string>();\n const normalizedQuery = query.toLowerCase().replace(/\\s+/g, \" \");\n for (const cue of STRUCTURED_PLAN_FIELD_CUES) {\n if (containsBoundedPhrase(normalizedQuery, cue)) {\n cues.add(cue);\n }\n }\n if (cues.size === 0) {\n return [];\n }\n for (const cue of STRUCTURED_PLAN_DEPENDENCY_CUES) {\n if (containsBoundedPhrase(normalizedQuery, cue)) {\n cues.add(cue);\n }\n }\n return [...cues].sort((left, right) => left.localeCompare(right));\n}\n\nfunction containsBoundedPhrase(normalizedHaystack: string, phrase: string): boolean {\n let searchFrom = 0;\n while (searchFrom < normalizedHaystack.length) {\n const index = normalizedHaystack.indexOf(phrase, searchFrom);\n if (index < 0) {\n return false;\n }\n const afterIndex = index + phrase.length;\n if (\n isTemporalCueBoundary(normalizedHaystack[index - 1]) &&\n isTemporalCueBoundary(normalizedHaystack[afterIndex])\n ) {\n return true;\n }\n searchFrom = afterIndex;\n }\n return false;\n}\n\nexport function collectTemporalLexicalCues(query: string): string[] {\n const cues = new Set<string>();\n const normalizedQuery = query.toLowerCase().replace(/\\s+/g, \" \");\n for (const cue of RELATIVE_TEMPORAL_CUES) {\n if (containsBoundedPhrase(normalizedQuery, cue)) {\n cues.add(cue);\n }\n }\n return [...cues].sort((left, right) => left.localeCompare(right));\n}\n\nfunction hasLatestStateIntent(query: string): boolean {\n return collectTemporalLexicalCues(query).some((cue) =>\n LATEST_STATE_CUES.has(cue),\n );\n}\n\nfunction sortLexicalCueResults<\n T extends { session_id: string; turn_index: number; score?: number },\n>(results: T[], preferLatest: boolean): T[] {\n return [...results].sort((left, right) => {\n if (preferLatest) {\n const sessionOrder = left.session_id.localeCompare(right.session_id);\n if (sessionOrder !== 0) {\n return sessionOrder;\n }\n const turnOrder = right.turn_index - left.turn_index;\n if (turnOrder !== 0) {\n return turnOrder;\n }\n return (right.score ?? 0) - (left.score ?? 0);\n }\n const scoreDelta = (right.score ?? 0) - (left.score ?? 0);\n if (scoreDelta !== 0) {\n return scoreDelta;\n }\n const sessionOrder = left.session_id.localeCompare(right.session_id);\n if (sessionOrder !== 0) {\n return sessionOrder;\n }\n return left.turn_index - right.turn_index;\n });\n}\n\nfunction normalizeSpeakerNameCue(value: string): string | undefined {\n const words = value.trim().split(/\\s+/).filter(Boolean);\n while (words.length > 0 && SPEAKER_NAME_STOPWORDS.has(words[0]!)) {\n words.shift();\n }\n while (words.length > 0 && SPEAKER_NAME_STOPWORDS.has(words[words.length - 1]!)) {\n words.pop();\n }\n return words.length > 0 ? words.join(\" \") : undefined;\n}\n\nfunction isTemporalCueBoundary(char: string | undefined): boolean {\n if (!char) {\n return true;\n }\n return !isAsciiLetterOrDigit(char);\n}\n\nfunction tokenizeReferenceQuery(query: string): string[] {\n const tokens: string[] = [];\n let current = \"\";\n\n const flushCurrent = () => {\n if (current) {\n tokens.push(current);\n current = \"\";\n }\n };\n\n for (const char of query) {\n if (isAsciiLetterOrDigit(char)) {\n current += char;\n continue;\n }\n\n flushCurrent();\n if (char === \"#\" || char === \",\") {\n tokens.push(char);\n } else if (isReferenceDash(char)) {\n tokens.push(\"-\");\n }\n }\n flushCurrent();\n\n return tokens;\n}\n\nfunction parseReferenceNumbers(\n tokens: readonly string[],\n startIndex: number,\n): { numbers: number[]; nextIndex: number } {\n const numbers: number[] = [];\n let lastNumber: number | undefined;\n let pendingRangeStart: number | undefined;\n let index = startIndex;\n const scanEnd = Math.min(\n tokens.length,\n startIndex + DEFAULT_MAX_REFERENCES * REFERENCE_SCAN_TOKEN_FACTOR,\n );\n\n for (; index < scanEnd; index += 1) {\n const token = tokens[index]!;\n const normalized = token.toLowerCase();\n const value = parseNonNegativeIntegerToken(token);\n if (value !== undefined) {\n if (pendingRangeStart !== undefined) {\n numbers.push(...expandReferenceRange(pendingRangeStart, value));\n pendingRangeStart = undefined;\n } else {\n numbers.push(value);\n }\n lastNumber = value;\n continue;\n }\n\n if (normalized === \"#\" || normalized === \"number\" || normalized === \",\") {\n continue;\n }\n\n if (\n normalized === \"-\" ||\n normalized === \"to\" ||\n normalized === \"through\" ||\n normalized === \"thru\"\n ) {\n if (lastNumber !== undefined) {\n if (numbers[numbers.length - 1] === lastNumber) {\n numbers.pop();\n }\n pendingRangeStart = lastNumber;\n }\n continue;\n }\n\n if (normalized === \"and\" && numbers.length > 0) {\n continue;\n }\n\n if (normalizeReferenceLabel(token)) {\n break;\n }\n\n break;\n }\n\n if (pendingRangeStart !== undefined) {\n numbers.push(pendingRangeStart);\n }\n\n return {\n numbers: [...new Set(numbers)],\n nextIndex: index,\n };\n}\n\nfunction expandReferenceRange(start: number, end: number): number[] {\n const low = Math.min(start, end);\n const high = Math.max(start, end);\n if (high - low + 1 > DEFAULT_MAX_REFERENCES) {\n return [start, end];\n }\n\n const values: number[] = [];\n for (let value = low; value <= high; value += 1) {\n values.push(value);\n }\n return values;\n}\n\nfunction normalizeReferenceLabel(token: string | undefined): string | undefined {\n const normalized = token?.toLowerCase();\n switch (normalized) {\n case \"step\":\n case \"steps\":\n return \"step\";\n case \"turn\":\n case \"turns\":\n return \"turn\";\n case \"action\":\n case \"actions\":\n return \"action\";\n case \"observation\":\n case \"observations\":\n return \"observation\";\n default:\n return undefined;\n }\n}\n\nfunction candidateTurnIndexesForReference(\n reference: ExplicitTurnReference,\n): number[] {\n const candidates = new Set<number>();\n if (reference.includeDirectTurn) {\n for (let offset = -1; offset <= 1; offset += 1) {\n candidates.add(reference.number + offset);\n }\n }\n\n const pairedBase = reference.number * 2;\n for (let offset = -2; offset <= 3; offset += 1) {\n candidates.add(pairedBase + offset);\n }\n\n return [...candidates].sort((left, right) => left - right);\n}\n\nfunction parseNonNegativeIntegerToken(token: string): number | undefined {\n if (token.length === 0) {\n return undefined;\n }\n\n let value = 0;\n for (const char of token) {\n const code = char.charCodeAt(0);\n if (code < 48 || code > 57) {\n return undefined;\n }\n value = value * 10 + (code - 48);\n }\n return value;\n}\n\nfunction normalizePositiveInteger(value: number | undefined, fallback: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n return Math.max(0, Math.floor(value));\n}\n\nfunction isAsciiLetterOrDigit(char: string): boolean {\n const code = char.charCodeAt(0);\n return (code >= 48 && code <= 57)\n || (code >= 65 && code <= 90)\n || (code >= 97 && code <= 122);\n}\n\nfunction isReferenceDash(char: string): boolean {\n return char === \"-\"\n || char === \"\\u2010\"\n || char === \"\\u2011\"\n || char === \"\\u2012\"\n || char === \"\\u2013\"\n || char === \"\\u2014\"\n || char === \"\\u2015\";\n}\n"],"mappings":"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","names":["sessionOrder"]}
|
|
1
|
+
{"version":3,"sources":["../src/explicit-cue-recall.ts"],"sourcesContent":["import { buildEvidencePack } from \"./evidence-pack.js\";\n\nexport interface ExplicitCueRecallEngine {\n expandContext(\n sessionId: string,\n fromTurn: number,\n toTurn: number,\n maxTokens: number,\n ): Promise<Array<{ turn_index: number; role: string; content: string }>>;\n searchContextFull(\n query: string,\n limit: number,\n sessionId?: string,\n ): Promise<\n Array<{\n turn_index: number;\n role: string;\n content: string;\n session_id: string;\n score?: number;\n }>\n >;\n}\n\nexport interface ExplicitCueRecallOptions {\n engine: ExplicitCueRecallEngine | null | undefined;\n sessionId?: string;\n query: string;\n maxChars: number;\n maxItemChars?: number;\n maxReferences?: number;\n includeBenchmarkAnchorCues?: boolean;\n includeStructuredPlanCues?: boolean;\n}\n\nexport type ExplicitTurnReference = {\n number: number;\n includeDirectTurn: boolean;\n};\n\nconst DEFAULT_MAX_CHARS = 2_400;\nconst DEFAULT_MAX_ITEM_CHARS = 1_200;\nconst DEFAULT_MAX_REFERENCES = 24;\nconst REFERENCE_SCAN_TOKEN_FACTOR = 3;\nconst TURN_REFERENCE_WINDOW_RADIUS = 0;\nconst LEXICAL_CUE_WINDOW_RADIUS = 1;\nconst LEXICAL_CUE_SEARCH_LIMIT = 3;\nconst LEXICAL_CUE_MAX_TOKENS = 400;\nconst LATEST_STATE_CUES = new Set([\n \"as of\",\n \"currently\",\n \"latest\",\n \"most recent\",\n \"newest\",\n \"now\",\n \"updated\",\n \"changed\",\n \"change\",\n]);\nconst STRUCTURED_PLAN_FIELD_CUES = new Set([\n \"accommodation\",\n \"attraction\",\n \"breakfast\",\n \"current city\",\n \"dinner\",\n \"flight\",\n \"flights\",\n \"hotel\",\n \"lunch\",\n \"restaurant\",\n \"restaurants\",\n \"transportation\",\n \"traveler\",\n \"travelers\",\n]);\nconst STRUCTURED_PLAN_DEPENDENCY_CUES = new Set([\n \"comparison\",\n \"constraint\",\n \"constraints\",\n \"dependency\",\n \"dependencies\",\n \"join\",\n \"same\",\n \"shared\",\n]);\nconst BENCHMARK_ABILITY_CUES = new Map([\n [\"information extraction\", \"ability=information_extraction\"],\n [\"knowledge update\", \"ability=knowledge_update\"],\n [\"multi session reasoning\", \"ability=multi_session_reasoning\"],\n [\"multi-session reasoning\", \"ability=multi_session_reasoning\"],\n [\"instruction following\", \"ability=instruction_following\"],\n]);\nconst BENCHMARK_ANCHOR_VALUE_STOPWORDS = new Set([\n \"a\",\n \"about\",\n \"an\",\n \"for\",\n \"from\",\n \"in\",\n \"on\",\n \"the\",\n \"to\",\n \"use\",\n \"using\",\n \"with\",\n]);\nconst RELATIVE_TEMPORAL_CUES = [\n \"as of\",\n \"most recent\",\n \"last time\",\n \"last week\",\n \"last month\",\n \"last year\",\n \"last session\",\n \"last conversation\",\n \"next time\",\n \"next week\",\n \"next month\",\n \"next year\",\n \"next session\",\n \"next conversation\",\n \"previous time\",\n \"previous week\",\n \"previous month\",\n \"previous year\",\n \"previous session\",\n \"previous conversation\",\n \"prior time\",\n \"prior week\",\n \"prior month\",\n \"prior year\",\n \"prior session\",\n \"prior conversation\",\n \"today\",\n \"yesterday\",\n \"tomorrow\",\n \"tonight\",\n \"earlier\",\n \"later\",\n \"recently\",\n \"previously\",\n \"currently\",\n \"now\",\n \"latest\",\n \"newest\",\n \"oldest\",\n \"earliest\",\n \"before\",\n \"after\",\n \"since\",\n \"updated\",\n \"changed\",\n \"change\",\n];\nconst SPEAKER_NAME_STOPWORDS = new Set([\n \"A\",\n \"According\",\n \"An\",\n \"And\",\n \"Are\",\n \"As\",\n \"At\",\n \"Before\",\n \"Can\",\n \"Compare\",\n \"Could\",\n \"Did\",\n \"Do\",\n \"Does\",\n \"For\",\n \"From\",\n \"Had\",\n \"Has\",\n \"Have\",\n \"How\",\n \"In\",\n \"Is\",\n \"It\",\n \"Join\",\n \"Of\",\n \"On\",\n \"Or\",\n \"Please\",\n \"Review\",\n \"Step\",\n \"Tell\",\n \"The\",\n \"To\",\n \"Turn\",\n \"Use\",\n \"Was\",\n \"Were\",\n \"What\",\n \"When\",\n \"Where\",\n \"Which\",\n \"Who\",\n \"Why\",\n \"Will\",\n \"Would\",\n]);\nconst QUESTION_SLOT_STOPWORDS = new Set([\n \"answer\",\n \"choice\",\n \"did\",\n \"does\",\n \"do\",\n \"is\",\n \"should\",\n \"single\",\n \"the\",\n \"user\",\n \"was\",\n \"were\",\n]);\n\nexport async function buildExplicitCueRecallSection(\n options: ExplicitCueRecallOptions,\n): Promise<string> {\n const engine = options.engine;\n const query = options.query.trim();\n const maxChars = normalizePositiveInteger(options.maxChars, DEFAULT_MAX_CHARS);\n if (!engine || query.length === 0 || maxChars <= 0) {\n return \"\";\n }\n\n const maxReferences = normalizePositiveInteger(\n options.maxReferences,\n DEFAULT_MAX_REFERENCES,\n );\n if (maxReferences <= 0) {\n return \"\";\n }\n\n const evidenceItems: Array<{\n id: string;\n sessionId: string;\n turnIndex: number;\n role: string;\n content: string;\n score?: number;\n }> = [];\n const seenTurns = new Set<string>();\n\n await collectTurnReferenceEvidence({\n engine,\n sessionId: options.sessionId,\n query,\n maxReferences,\n evidenceItems,\n seenTurns,\n });\n\n await collectLexicalCueEvidence({\n engine,\n sessionId: options.sessionId,\n query,\n maxReferences,\n includeBenchmarkAnchorCues: options.includeBenchmarkAnchorCues,\n includeStructuredPlanCues: options.includeStructuredPlanCues,\n evidenceItems,\n seenTurns,\n });\n\n return buildEvidencePack(evidenceItems, {\n title: \"Explicit Cue Evidence\",\n maxChars,\n maxItemChars: normalizePositiveInteger(\n options.maxItemChars,\n DEFAULT_MAX_ITEM_CHARS,\n ),\n });\n}\n\nasync function collectTurnReferenceEvidence(options: {\n engine: ExplicitCueRecallEngine;\n sessionId?: string;\n query: string;\n maxReferences: number;\n evidenceItems: Array<{\n id: string;\n sessionId: string;\n turnIndex: number;\n role: string;\n content: string;\n }>;\n seenTurns: Set<string>;\n}): Promise<void> {\n if (!options.sessionId) {\n return;\n }\n\n const references = collectExplicitTurnReferences(options.query).slice(\n 0,\n options.maxReferences,\n );\n if (references.length === 0) {\n return;\n }\n\n const windows = new Map<string, { fromTurn: number; toTurn: number }>();\n for (const reference of references) {\n for (const center of candidateTurnIndexesForReference(reference)) {\n if (center < 0) {\n continue;\n }\n\n const fromTurn = Math.max(0, center - TURN_REFERENCE_WINDOW_RADIUS);\n const toTurn = center + TURN_REFERENCE_WINDOW_RADIUS;\n windows.set(`${fromTurn}:${toTurn}`, { fromTurn, toTurn });\n }\n }\n\n for (const window of [...windows.values()].sort(\n (left, right) => left.fromTurn - right.fromTurn || left.toTurn - right.toTurn,\n )) {\n const expanded = await options.engine.expandContext(\n options.sessionId,\n window.fromTurn,\n window.toTurn,\n 2_000,\n );\n appendExpandedEvidence(\n options.evidenceItems,\n options.seenTurns,\n options.sessionId,\n expanded,\n );\n }\n}\n\nasync function collectLexicalCueEvidence(options: {\n engine: ExplicitCueRecallEngine;\n sessionId?: string;\n query: string;\n maxReferences: number;\n includeBenchmarkAnchorCues?: boolean;\n includeStructuredPlanCues?: boolean;\n evidenceItems: Array<{\n id: string;\n sessionId: string;\n turnIndex: number;\n role: string;\n content: string;\n score?: number;\n }>;\n seenTurns: Set<string>;\n}): Promise<void> {\n const cues = collectLexicalCues(options.query, {\n includeBenchmarkAnchorCues: options.includeBenchmarkAnchorCues,\n includeStructuredPlanCues: options.includeStructuredPlanCues,\n }).slice(0, options.maxReferences);\n const preferLatest = hasLatestStateIntent(options.query);\n for (const cue of cues) {\n const results = sortLexicalCueResults(\n await options.engine.searchContextFull(\n cue,\n LEXICAL_CUE_SEARCH_LIMIT,\n options.sessionId,\n ),\n preferLatest,\n );\n for (const result of results) {\n const windowRadius = preferLatest ? 0 : LEXICAL_CUE_WINDOW_RADIUS;\n const fromTurn = Math.max(0, result.turn_index - windowRadius);\n const toTurn = result.turn_index + windowRadius;\n const expanded = await options.engine.expandContext(\n result.session_id,\n fromTurn,\n toTurn,\n LEXICAL_CUE_MAX_TOKENS,\n );\n if (expanded.length === 0) {\n appendEvidenceItem(options.evidenceItems, options.seenTurns, {\n id: `${result.session_id}:${result.turn_index}`,\n sessionId: result.session_id,\n turnIndex: result.turn_index,\n role: result.role,\n content: result.content,\n ...(typeof result.score === \"number\" ? { score: result.score } : {}),\n });\n continue;\n }\n appendExpandedEvidence(\n options.evidenceItems,\n options.seenTurns,\n result.session_id,\n expanded,\n );\n }\n }\n}\n\nfunction appendExpandedEvidence(\n evidenceItems: Array<{\n id: string;\n sessionId: string;\n turnIndex: number;\n role: string;\n content: string;\n }>,\n seenTurns: Set<string>,\n sessionId: string,\n expanded: Array<{ turn_index: number; role: string; content: string }>,\n): void {\n for (const message of expanded) {\n appendEvidenceItem(evidenceItems, seenTurns, {\n id: `${sessionId}:${message.turn_index}`,\n sessionId,\n turnIndex: message.turn_index,\n role: message.role,\n content: message.content,\n });\n }\n}\n\nfunction appendEvidenceItem<T extends { id: string }>(\n evidenceItems: T[],\n seenTurns: Set<string>,\n item: T,\n): void {\n if (seenTurns.has(item.id)) {\n return;\n }\n seenTurns.add(item.id);\n evidenceItems.push(item);\n}\n\nexport function collectExplicitTurnReferences(\n query: string,\n): ExplicitTurnReference[] {\n const references = new Map<string, ExplicitTurnReference>();\n const addReference = (value: number, label: string) => {\n const existing = references.get(String(value));\n references.set(String(value), {\n number: value,\n includeDirectTurn:\n (existing?.includeDirectTurn ?? false) || label === \"turn\",\n });\n };\n\n const tokens = tokenizeReferenceQuery(query);\n for (let index = 0; index < tokens.length; index += 1) {\n const label = normalizeReferenceLabel(tokens[index]);\n if (!label) {\n continue;\n }\n\n const parsed = parseReferenceNumbers(tokens, index + 1);\n for (const number of parsed.numbers) {\n addReference(number, label);\n }\n index = Math.max(index, parsed.nextIndex - 1);\n }\n\n return [...references.values()].sort((left, right) => left.number - right.number);\n}\n\nexport function collectLexicalCues(\n query: string,\n options: {\n includeBenchmarkAnchorCues?: boolean;\n includeStructuredPlanCues?: boolean;\n } = {},\n): string[] {\n const cues = new Set<string>();\n\n for (const match of query.matchAll(/\\b[A-Za-z][A-Za-z0-9]{0,12}\\d+:\\d+\\b/g)) {\n cues.add(match[0]);\n }\n for (const match of query.matchAll(/\\b\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}(?::\\d{2})?Z?)?\\b/g)) {\n cues.add(match[0]);\n }\n for (const cue of collectTemporalLexicalCues(query)) {\n cues.add(cue);\n }\n for (const cue of collectQuestionSlotCues(query)) {\n cues.add(cue);\n }\n if (options.includeBenchmarkAnchorCues) {\n for (const cue of collectBenchmarkAnchorCues(query)) {\n cues.add(cue);\n }\n }\n if (options.includeStructuredPlanCues) {\n for (const cue of collectStructuredPlanCues(query)) {\n cues.add(cue);\n }\n }\n for (const match of query.matchAll(/\\b(?:session|source|chat|plan|task|event|file|tool)[_-][A-Za-z0-9][A-Za-z0-9_.:-]{0,80}\\b/gi)) {\n cues.add(match[0]);\n }\n for (const match of query.matchAll(/\\b[A-Z][a-z]{1,30}(?:\\s+[A-Z][a-z]{1,30}){0,2}\\b/g)) {\n const value = normalizeSpeakerNameCue(match[0]);\n if (value) {\n cues.add(value);\n }\n }\n for (const match of query.matchAll(/\\[([A-Za-z0-9][A-Za-z0-9_.:/ -]{1,80})\\]/g)) {\n const value = match[1]?.trim();\n if (value) {\n cues.add(value);\n }\n }\n\n return [...cues].sort((left, right) => left.localeCompare(right));\n}\n\nexport function collectQuestionSlotCues(query: string): string[] {\n const cues = new Set<string>();\n for (const match of query.matchAll(\n /\\b(?:what|which)\\s+([a-z][a-z0-9_-]{2,30})\\s+(?:does|do|did|is|are|was|were|should|would|could|can|will)\\b/gi,\n )) {\n const value = match[1]?.toLowerCase();\n if (value && !QUESTION_SLOT_STOPWORDS.has(value)) {\n cues.add(value);\n }\n }\n return [...cues].sort((left, right) => left.localeCompare(right));\n}\n\nexport function collectBenchmarkAnchorCues(query: string): string[] {\n const cues = new Set<string>();\n const normalizedQuery = query.toLowerCase().replace(/\\s+/g, \" \");\n for (const [phrase, cue] of BENCHMARK_ABILITY_CUES) {\n if (containsBoundedPhrase(normalizedQuery, phrase)) {\n cues.add(cue);\n }\n }\n\n const tokens = tokenizeAnchorQuery(query);\n for (let index = 0; index < tokens.length; index += 1) {\n let prefix = normalizeBenchmarkAnchorPrefix(tokens[index]);\n if (!prefix) {\n continue;\n }\n\n let valueIndex = index + 1;\n if (\n prefix === \"source\" &&\n tokens[valueIndex]?.toLowerCase() === \"chat\"\n ) {\n prefix = \"source_chat\";\n valueIndex += 1;\n }\n const maybeIdLabel = tokens[valueIndex]?.toLowerCase();\n if (maybeIdLabel === \"id\" || maybeIdLabel === \"ids\") {\n valueIndex += 1;\n }\n\n let consumedValue = false;\n for (\n let currentValueIndex = valueIndex;\n currentValueIndex < tokens.length;\n currentValueIndex += 1\n ) {\n const rawValue = tokens[currentValueIndex];\n const normalizedValue = rawValue?.toLowerCase();\n if (!rawValue || normalizeBenchmarkAnchorPrefix(rawValue)) {\n break;\n }\n if (normalizedValue === \"and\" || normalizedValue === \"or\") {\n continue;\n }\n if (BENCHMARK_ANCHOR_VALUE_STOPWORDS.has(normalizedValue)) {\n break;\n }\n if (!isBenchmarkAnchorValue(rawValue)) {\n break;\n }\n addBenchmarkAnchorCues(cues, prefix, rawValue);\n consumedValue = true;\n index = currentValueIndex;\n }\n if (!consumedValue) {\n continue;\n }\n }\n\n return [...cues].sort((left, right) => left.localeCompare(right));\n}\n\nfunction addBenchmarkAnchorCues(\n cues: Set<string>,\n prefix: string,\n rawValue: string,\n): void {\n cues.add(`${prefix}_id=${rawValue}`);\n cues.add(`${prefix}-${rawValue}`);\n if (prefix === \"source_chat\") {\n cues.add(`chat_id=${rawValue}`);\n }\n}\n\nfunction isBenchmarkAnchorValue(token: string): boolean {\n for (const char of token) {\n if (isAsciiDigitChar(char)) {\n return true;\n }\n }\n return false;\n}\n\nfunction isAsciiDigitChar(char: string): boolean {\n const code = char.charCodeAt(0);\n return code >= 48 && code <= 57;\n}\n\nfunction normalizeBenchmarkAnchorPrefix(token: string | undefined): string | undefined {\n switch (token?.toLowerCase()) {\n case \"ability\":\n case \"chat\":\n case \"plan\":\n case \"rubric\":\n case \"source\":\n return token.toLowerCase();\n default:\n return undefined;\n }\n}\n\nfunction tokenizeAnchorQuery(query: string): string[] {\n const tokens: string[] = [];\n let current = \"\";\n const push = () => {\n const token = trimTrailingAnchorTokenPunctuation(current);\n if (token.length > 0) {\n tokens.push(token);\n }\n current = \"\";\n };\n\n for (const char of query) {\n if (\n isAsciiLetterOrDigit(char) ||\n char === \"_\" ||\n char === \"-\" ||\n char === \".\" ||\n char === \":\"\n ) {\n current += char;\n continue;\n }\n push();\n }\n push();\n return tokens;\n}\n\nfunction trimTrailingAnchorTokenPunctuation(token: string): string {\n let end = token.length;\n while (end > 0) {\n const char = token[end - 1];\n if (\n char !== \".\" &&\n char !== \":\" &&\n char !== \";\" &&\n char !== \"!\" &&\n char !== \"?\"\n ) {\n break;\n }\n end -= 1;\n }\n return token.slice(0, end);\n}\n\nexport function collectStructuredPlanCues(query: string): string[] {\n const cues = new Set<string>();\n const normalizedQuery = query.toLowerCase().replace(/\\s+/g, \" \");\n for (const cue of STRUCTURED_PLAN_FIELD_CUES) {\n if (containsBoundedPhrase(normalizedQuery, cue)) {\n cues.add(cue);\n }\n }\n if (cues.size === 0) {\n return [];\n }\n for (const cue of STRUCTURED_PLAN_DEPENDENCY_CUES) {\n if (containsBoundedPhrase(normalizedQuery, cue)) {\n cues.add(cue);\n }\n }\n return [...cues].sort((left, right) => left.localeCompare(right));\n}\n\nfunction containsBoundedPhrase(normalizedHaystack: string, phrase: string): boolean {\n let searchFrom = 0;\n while (searchFrom < normalizedHaystack.length) {\n const index = normalizedHaystack.indexOf(phrase, searchFrom);\n if (index < 0) {\n return false;\n }\n const afterIndex = index + phrase.length;\n if (\n isTemporalCueBoundary(normalizedHaystack[index - 1]) &&\n isTemporalCueBoundary(normalizedHaystack[afterIndex])\n ) {\n return true;\n }\n searchFrom = afterIndex;\n }\n return false;\n}\n\nexport function collectTemporalLexicalCues(query: string): string[] {\n const cues = new Set<string>();\n const normalizedQuery = query.toLowerCase().replace(/\\s+/g, \" \");\n for (const cue of RELATIVE_TEMPORAL_CUES) {\n if (containsBoundedPhrase(normalizedQuery, cue)) {\n cues.add(cue);\n }\n }\n return [...cues].sort((left, right) => left.localeCompare(right));\n}\n\nfunction hasLatestStateIntent(query: string): boolean {\n return collectTemporalLexicalCues(query).some((cue) =>\n LATEST_STATE_CUES.has(cue),\n );\n}\n\nfunction sortLexicalCueResults<\n T extends { session_id: string; turn_index: number; score?: number },\n>(results: T[], preferLatest: boolean): T[] {\n return [...results].sort((left, right) => {\n if (preferLatest) {\n const sessionOrder = left.session_id.localeCompare(right.session_id);\n if (sessionOrder !== 0) {\n return sessionOrder;\n }\n const turnOrder = right.turn_index - left.turn_index;\n if (turnOrder !== 0) {\n return turnOrder;\n }\n return (right.score ?? 0) - (left.score ?? 0);\n }\n const scoreDelta = (right.score ?? 0) - (left.score ?? 0);\n if (scoreDelta !== 0) {\n return scoreDelta;\n }\n const sessionOrder = left.session_id.localeCompare(right.session_id);\n if (sessionOrder !== 0) {\n return sessionOrder;\n }\n return left.turn_index - right.turn_index;\n });\n}\n\nfunction normalizeSpeakerNameCue(value: string): string | undefined {\n const words = value.trim().split(/\\s+/).filter(Boolean);\n while (words.length > 0 && SPEAKER_NAME_STOPWORDS.has(words[0]!)) {\n words.shift();\n }\n while (words.length > 0 && SPEAKER_NAME_STOPWORDS.has(words[words.length - 1]!)) {\n words.pop();\n }\n return words.length > 0 ? words.join(\" \") : undefined;\n}\n\nfunction isTemporalCueBoundary(char: string | undefined): boolean {\n if (!char) {\n return true;\n }\n return !isAsciiLetterOrDigit(char);\n}\n\nfunction tokenizeReferenceQuery(query: string): string[] {\n const tokens: string[] = [];\n let current = \"\";\n\n const flushCurrent = () => {\n if (current) {\n tokens.push(current);\n current = \"\";\n }\n };\n\n for (const char of query) {\n if (isAsciiLetterOrDigit(char)) {\n current += char;\n continue;\n }\n\n flushCurrent();\n if (char === \"#\" || char === \",\") {\n tokens.push(char);\n } else if (isReferenceDash(char)) {\n tokens.push(\"-\");\n }\n }\n flushCurrent();\n\n return tokens;\n}\n\nfunction parseReferenceNumbers(\n tokens: readonly string[],\n startIndex: number,\n): { numbers: number[]; nextIndex: number } {\n const numbers: number[] = [];\n let lastNumber: number | undefined;\n let pendingRangeStart: number | undefined;\n let index = startIndex;\n const scanEnd = Math.min(\n tokens.length,\n startIndex + DEFAULT_MAX_REFERENCES * REFERENCE_SCAN_TOKEN_FACTOR,\n );\n\n for (; index < scanEnd; index += 1) {\n const token = tokens[index]!;\n const normalized = token.toLowerCase();\n const value = parseNonNegativeIntegerToken(token);\n if (value !== undefined) {\n if (pendingRangeStart !== undefined) {\n numbers.push(...expandReferenceRange(pendingRangeStart, value));\n pendingRangeStart = undefined;\n } else {\n numbers.push(value);\n }\n lastNumber = value;\n continue;\n }\n\n if (normalized === \"#\" || normalized === \"number\" || normalized === \",\") {\n continue;\n }\n\n if (\n normalized === \"-\" ||\n normalized === \"to\" ||\n normalized === \"through\" ||\n normalized === \"thru\"\n ) {\n if (lastNumber !== undefined) {\n if (numbers[numbers.length - 1] === lastNumber) {\n numbers.pop();\n }\n pendingRangeStart = lastNumber;\n }\n continue;\n }\n\n if (normalized === \"and\" && numbers.length > 0) {\n continue;\n }\n\n if (normalizeReferenceLabel(token)) {\n break;\n }\n\n break;\n }\n\n if (pendingRangeStart !== undefined) {\n numbers.push(pendingRangeStart);\n }\n\n return {\n numbers: [...new Set(numbers)],\n nextIndex: index,\n };\n}\n\nfunction expandReferenceRange(start: number, end: number): number[] {\n const low = Math.min(start, end);\n const high = Math.max(start, end);\n if (high - low + 1 > DEFAULT_MAX_REFERENCES) {\n return [start, end];\n }\n\n const values: number[] = [];\n for (let value = low; value <= high; value += 1) {\n values.push(value);\n }\n return values;\n}\n\nfunction normalizeReferenceLabel(token: string | undefined): string | undefined {\n const normalized = token?.toLowerCase();\n switch (normalized) {\n case \"step\":\n case \"steps\":\n return \"step\";\n case \"turn\":\n case \"turns\":\n return \"turn\";\n case \"action\":\n case \"actions\":\n return \"action\";\n case \"observation\":\n case \"observations\":\n return \"observation\";\n default:\n return undefined;\n }\n}\n\nfunction candidateTurnIndexesForReference(\n reference: ExplicitTurnReference,\n): number[] {\n const candidates = new Set<number>();\n if (reference.includeDirectTurn) {\n for (let offset = -1; offset <= 1; offset += 1) {\n candidates.add(reference.number + offset);\n }\n }\n\n const pairedBase = reference.number * 2;\n // Action/observation traces are stored as paired turns:\n // turn 2N => [Action N]\n // turn 2N + 1 => [Observation N]\n // Include the preceding observation so transition questions can compare the\n // state before and after the action, but avoid pulling in Action N+1. Future\n // actions caused explicit step questions to drift to the next step.\n for (let offset = -1; offset <= 1; offset += 1) {\n candidates.add(pairedBase + offset);\n }\n\n return [...candidates].sort((left, right) => left - right);\n}\n\nfunction parseNonNegativeIntegerToken(token: string): number | undefined {\n if (token.length === 0) {\n return undefined;\n }\n\n let value = 0;\n for (const char of token) {\n const code = char.charCodeAt(0);\n if (code < 48 || code > 57) {\n return undefined;\n }\n value = value * 10 + (code - 48);\n }\n return value;\n}\n\nfunction normalizePositiveInteger(value: number | undefined, fallback: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n return Math.max(0, Math.floor(value));\n}\n\nfunction isAsciiLetterOrDigit(char: string): boolean {\n const code = char.charCodeAt(0);\n return (code >= 48 && code <= 57)\n || (code >= 65 && code <= 90)\n || (code >= 97 && code <= 122);\n}\n\nfunction isReferenceDash(char: string): boolean {\n return char === \"-\"\n || char === \"\\u2010\"\n || char === \"\\u2011\"\n || char === \"\\u2012\"\n || char === \"\\u2013\"\n || char === \"\\u2014\"\n || char === \"\\u2015\";\n}\n"],"mappings":"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","names":["sessionOrder"]}
|
|
@@ -30,10 +30,23 @@ function buildChatCompletionTokenLimit(model, maxTokens, options) {
|
|
|
30
30
|
}
|
|
31
31
|
return { max_tokens: safeMaxTokens };
|
|
32
32
|
}
|
|
33
|
+
function supportsTemperature(model, options) {
|
|
34
|
+
const normalized = normalizedModel(model);
|
|
35
|
+
if (options?.assumeOpenAI === true && matchesModelFamily(normalized, /^gpt-5(?:$|[-.])/)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
function buildChatCompletionTemperature(model, temperature, options) {
|
|
41
|
+
if (!supportsTemperature(model, options)) return {};
|
|
42
|
+
return { temperature };
|
|
43
|
+
}
|
|
33
44
|
|
|
34
45
|
export {
|
|
35
46
|
shouldAssumeOpenAiChatCompletions,
|
|
36
47
|
usesMaxCompletionTokens,
|
|
37
|
-
buildChatCompletionTokenLimit
|
|
48
|
+
buildChatCompletionTokenLimit,
|
|
49
|
+
supportsTemperature,
|
|
50
|
+
buildChatCompletionTemperature
|
|
38
51
|
};
|
|
39
|
-
//# sourceMappingURL=chunk-
|
|
52
|
+
//# sourceMappingURL=chunk-L2EXJQJP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/openai-chat-compat.ts"],"sourcesContent":["function normalizedModel(model: string): string {\n return model.trim().toLowerCase();\n}\n\nfunction matchesModelFamily(normalized: string, familyPattern: RegExp): boolean {\n return familyPattern.test(normalized);\n}\n\nexport function shouldAssumeOpenAiChatCompletions(baseUrl?: string): boolean {\n if (!baseUrl) return true;\n try {\n return new URL(baseUrl).hostname.toLowerCase() === \"api.openai.com\";\n } catch {\n return false;\n }\n}\n\nexport function usesMaxCompletionTokens(model: string, options?: { assumeOpenAI?: boolean }): boolean {\n const normalized = normalizedModel(model);\n if (options?.assumeOpenAI !== true) return false;\n if (matchesModelFamily(normalized, /^gpt-5(?:$|[-.])/)) return true;\n if (matchesModelFamily(normalized, /^gpt-4o(?:$|[-.])/)) return true;\n if (matchesModelFamily(normalized, /^gpt-4\\.1(?:$|[-.])/)) return true;\n if (matchesModelFamily(normalized, /^o1(?:$|[-.])/)) return true;\n if (matchesModelFamily(normalized, /^o3(?:$|[-.])/)) return true;\n return matchesModelFamily(normalized, /^o4-mini(?:$|[-.])/);\n}\n\nexport function buildChatCompletionTokenLimit(\n model: string,\n maxTokens: number,\n options?: { assumeOpenAI?: boolean },\n): { max_tokens: number } | { max_completion_tokens: number } {\n const safeMaxTokens = Math.max(0, Math.floor(maxTokens));\n if (usesMaxCompletionTokens(model, options)) {\n return { max_completion_tokens: safeMaxTokens };\n }\n return { max_tokens: safeMaxTokens };\n}\n\nexport function supportsTemperature(model: string, options?: { assumeOpenAI?: boolean }): boolean {\n const normalized = normalizedModel(model);\n if (options?.assumeOpenAI === true && matchesModelFamily(normalized, /^gpt-5(?:$|[-.])/)) {\n return false;\n }\n return true;\n}\n\nexport function buildChatCompletionTemperature(\n model: string,\n temperature: number,\n options?: { assumeOpenAI?: boolean },\n): { temperature: number } | Record<string, never> {\n if (!supportsTemperature(model, options)) return {};\n return { temperature };\n}\n"],"mappings":";AAAA,SAAS,gBAAgB,OAAuB;AAC9C,SAAO,MAAM,KAAK,EAAE,YAAY;AAClC;AAEA,SAAS,mBAAmB,YAAoB,eAAgC;AAC9E,SAAO,cAAc,KAAK,UAAU;AACtC;AAEO,SAAS,kCAAkC,SAA2B;AAC3E,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;AACF,WAAO,IAAI,IAAI,OAAO,EAAE,SAAS,YAAY,MAAM;AAAA,EACrD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,wBAAwB,OAAe,SAA+C;AACpG,QAAM,aAAa,gBAAgB,KAAK;AACxC,MAAI,SAAS,iBAAiB,KAAM,QAAO;AAC3C,MAAI,mBAAmB,YAAY,kBAAkB,EAAG,QAAO;AAC/D,MAAI,mBAAmB,YAAY,mBAAmB,EAAG,QAAO;AAChE,MAAI,mBAAmB,YAAY,qBAAqB,EAAG,QAAO;AAClE,MAAI,mBAAmB,YAAY,eAAe,EAAG,QAAO;AAC5D,MAAI,mBAAmB,YAAY,eAAe,EAAG,QAAO;AAC5D,SAAO,mBAAmB,YAAY,oBAAoB;AAC5D;AAEO,SAAS,8BACd,OACA,WACA,SAC4D;AAC5D,QAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,CAAC;AACvD,MAAI,wBAAwB,OAAO,OAAO,GAAG;AAC3C,WAAO,EAAE,uBAAuB,cAAc;AAAA,EAChD;AACA,SAAO,EAAE,YAAY,cAAc;AACrC;AAEO,SAAS,oBAAoB,OAAe,SAA+C;AAChG,QAAM,aAAa,gBAAgB,KAAK;AACxC,MAAI,SAAS,iBAAiB,QAAQ,mBAAmB,YAAY,kBAAkB,GAAG;AACxF,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,+BACd,OACA,aACA,SACiD;AACjD,MAAI,CAAC,oBAAoB,OAAO,OAAO,EAAG,QAAO,CAAC;AAClD,SAAO,EAAE,YAAY;AACvB;","names":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
compareEntityTimestamps,
|
|
6
6
|
normalizeEntityName
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-XGX4TUF6.js";
|
|
8
8
|
import {
|
|
9
9
|
sanitizeMemoryContent
|
|
10
10
|
} from "./chunk-M62O4P4T.js";
|
|
@@ -593,4 +593,4 @@ export {
|
|
|
593
593
|
entityIndexVersion,
|
|
594
594
|
entityRecentTranscriptLookbackHours
|
|
595
595
|
};
|
|
596
|
-
//# sourceMappingURL=chunk-
|
|
596
|
+
//# sourceMappingURL=chunk-MYH2IBSP.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
parseXrayFormat
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WXPPM426.js";
|
|
4
4
|
import {
|
|
5
5
|
RECALL_DISCLOSURE_LEVELS,
|
|
6
6
|
isRecallDisclosure
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-T65SHTJP.js";
|
|
8
8
|
|
|
9
9
|
// src/recall-xray-cli.ts
|
|
10
10
|
function parseXrayDisclosureFlag(value) {
|
|
@@ -50,4 +50,4 @@ export {
|
|
|
50
50
|
parseXrayBudgetFlag,
|
|
51
51
|
parseXrayCliOptions
|
|
52
52
|
};
|
|
53
|
-
//# sourceMappingURL=chunk-
|
|
53
|
+
//# sourceMappingURL=chunk-OJMD2LIW.js.map
|
|
@@ -3,13 +3,13 @@ import {
|
|
|
3
3
|
} from "./chunk-IQT3XTKW.js";
|
|
4
4
|
import {
|
|
5
5
|
EngramAccessInputError
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-KHJRMWO4.js";
|
|
7
7
|
import {
|
|
8
8
|
expandTildePath
|
|
9
9
|
} from "./chunk-IXEJRKCZ.js";
|
|
10
10
|
import {
|
|
11
11
|
validateBriefingFormat
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-4IT6WL23.js";
|
|
13
13
|
import {
|
|
14
14
|
readEnvVar
|
|
15
15
|
} from "./chunk-MARWOCVP.js";
|
|
@@ -2400,4 +2400,4 @@ ${body}`;
|
|
|
2400
2400
|
export {
|
|
2401
2401
|
EngramMcpServer
|
|
2402
2402
|
};
|
|
2403
|
-
//# sourceMappingURL=chunk-
|
|
2403
|
+
//# sourceMappingURL=chunk-Q5TJRAGE.js.map
|
|
@@ -54,6 +54,12 @@ var DEFAULT_WORKSPACE_DIR = path.join(
|
|
|
54
54
|
".openclaw",
|
|
55
55
|
"workspace"
|
|
56
56
|
);
|
|
57
|
+
var DEFAULT_INIT_GATE_TIMEOUT_MS = 3e4;
|
|
58
|
+
function parseBoundedIntegerMs(value, fallback, min, max) {
|
|
59
|
+
const coerced = coerceNumber(value);
|
|
60
|
+
if (coerced === void 0) return fallback;
|
|
61
|
+
return Math.min(max, Math.max(min, Math.floor(coerced)));
|
|
62
|
+
}
|
|
57
63
|
function coerceBooleanLike(value) {
|
|
58
64
|
if (typeof value === "boolean") return value;
|
|
59
65
|
if (typeof value === "number") {
|
|
@@ -899,6 +905,12 @@ function parseConfig(raw) {
|
|
|
899
905
|
// Compaction reset (opt-in, default: false)
|
|
900
906
|
compactionResetEnabled: cfg.compactionResetEnabled === true,
|
|
901
907
|
beforeResetTimeoutMs: typeof cfg.beforeResetTimeoutMs === "number" ? Math.min(3e4, Math.max(100, Math.floor(cfg.beforeResetTimeoutMs))) : 2e3,
|
|
908
|
+
initGateTimeoutMs: parseBoundedIntegerMs(
|
|
909
|
+
cfg.initGateTimeoutMs,
|
|
910
|
+
DEFAULT_INIT_GATE_TIMEOUT_MS,
|
|
911
|
+
1e3,
|
|
912
|
+
12e4
|
|
913
|
+
),
|
|
902
914
|
flushOnResetEnabled: cfg.flushOnResetEnabled !== false,
|
|
903
915
|
commandsListEnabled: cfg.commandsListEnabled !== false,
|
|
904
916
|
openclawToolsEnabled: cfg.openclawToolsEnabled !== false,
|
|
@@ -2100,4 +2112,4 @@ export {
|
|
|
2100
2112
|
VALID_MEMORY_CATEGORIES,
|
|
2101
2113
|
parseConfig
|
|
2102
2114
|
};
|
|
2103
|
-
//# sourceMappingURL=chunk-
|
|
2115
|
+
//# sourceMappingURL=chunk-QJZ77K7F.js.map
|