@lucern/sdk 1.0.11 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/README.md +24 -27
- package/dist/.generated +2 -0
- package/dist/accessControl.d.ts +19 -26
- package/dist/accessControl.js +195 -1423
- package/dist/adminClient.d.ts +52 -59
- package/dist/adminClient.js +364 -1142
- package/dist/answersClient.d.ts +5 -14
- package/dist/answersClient.js +19 -737
- package/dist/audience/index.d.ts +18 -18
- package/dist/audience/index.js +87 -90
- package/dist/audiencesClient.d.ts +19 -27
- package/dist/audiencesClient.js +107 -868
- package/dist/auditClient.d.ts +8 -15
- package/dist/auditClient.js +18 -791
- package/dist/authContext.d.ts +11 -16
- package/dist/authContext.js +122 -154
- package/dist/authDeviceClient.d.ts +8 -17
- package/dist/authDeviceClient.js +113 -102
- package/dist/beliefs/index.d.ts +16 -67
- package/dist/beliefs/index.js +20 -10181
- package/dist/beliefs/lifecycle.d.ts +10 -11
- package/dist/beliefs/lifecycle.js +78 -80
- package/dist/beliefsClient.d.ts +30 -35
- package/dist/beliefsClient.js +238 -994
- package/dist/boundaryClientSurface.d.ts +11 -16
- package/dist/boundaryClientSurface.js +49 -68
- package/dist/client.d.ts +82 -113
- package/dist/client.js +232 -10155
- package/dist/clientAssemblyTypes.d.ts +3 -3
- package/dist/clientAssemblyTypes.js +1 -2
- package/dist/clientConfig.d.ts +45 -59
- package/dist/clientConfig.js +1 -2
- package/dist/clientEvidenceCompat.d.ts +24 -14
- package/dist/clientEvidenceCompat.js +56 -64
- package/dist/clientGraphNamespaces.d.ts +3 -5
- package/dist/clientGraphNamespaces.js +170 -245
- package/dist/clientHelpers.d.ts +20 -25
- package/dist/clientHelpers.js +104 -127
- package/dist/clientKnowledgeNamespaces.d.ts +24 -54
- package/dist/clientKnowledgeNamespaces.js +506 -506
- package/dist/clientLocalHelpers.d.ts +11 -56
- package/dist/clientLocalHelpers.js +503 -732
- package/dist/clientPlatformNamespaces.d.ts +5 -53
- package/dist/clientPlatformNamespaces.js +229 -323
- package/dist/clientRuntime.d.ts +5 -53
- package/dist/clientRuntime.js +26 -30
- package/dist/clientWorkflowNamespaces.d.ts +6 -15
- package/dist/clientWorkflowNamespaces.js +529 -596
- package/dist/contextClient.d.ts +9 -17
- package/dist/contextClient.js +92 -805
- package/dist/contextFacade.d.ts +11 -2
- package/dist/contextFacade.js +10 -81
- package/dist/contextPackCompiler.d.ts +10 -11
- package/dist/contextPackCompiler.js +494 -1040
- package/dist/contextPackPolicy.d.ts +14 -15
- package/dist/contextPackPolicy.js +227 -305
- package/dist/contextPackSchema.d.ts +3 -3
- package/dist/contextPackSchema.js +169 -176
- package/dist/contextTypes.d.ts +14 -15
- package/dist/contextTypes.js +1 -2
- package/dist/contracts/api-enums.contract.d.ts +29 -30
- package/dist/contracts/api-enums.contract.js +162 -88
- package/dist/contracts/auth-session.contract.d.ts +13 -14
- package/dist/contracts/auth-session.contract.js +55 -52
- package/dist/contracts/context-pack.contract.d.ts +54 -55
- package/dist/contracts/context-pack.contract.js +160 -88
- package/dist/contracts/contextPack.d.ts +2 -1
- package/dist/contracts/contextPack.js +1 -97
- package/dist/contracts/index.d.ts +11 -12
- package/dist/contracts/index.js +10 -854
- package/dist/contracts/lens-filter.contract.d.ts +9 -10
- package/dist/contracts/lens-filter.contract.js +82 -58
- package/dist/contracts/lens-workflow.contract.d.ts +21 -23
- package/dist/contracts/lens-workflow.contract.js +48 -117
- package/dist/contracts/lensFilter.d.ts +2 -1
- package/dist/contracts/lensFilter.js +1 -71
- package/dist/contracts/lensWorkflow.d.ts +2 -2
- package/dist/contracts/lensWorkflow.js +1 -123
- package/dist/contracts/mcpTools.d.ts +16 -18
- package/dist/contracts/mcpTools.js +89 -123
- package/dist/contracts/prompt.contract.d.ts +4 -5
- package/dist/contracts/prompt.contract.js +23 -10
- package/dist/contracts/prompt.d.ts +2 -1
- package/dist/contracts/prompt.js +1 -11
- package/dist/contracts/sdk-tools.contract.d.ts +2 -1
- package/dist/contracts/sdk-tools.contract.js +1 -2
- package/dist/contracts/sdkTools.d.ts +2 -1
- package/dist/contracts/sdkTools.js +1 -26
- package/dist/contracts/tool-contracts.d.ts +2 -1
- package/dist/contracts/tool-contracts.js +1 -2
- package/dist/contracts/workflow-runtime.contract.d.ts +45 -46
- package/dist/contracts/workflow-runtime.contract.js +241 -228
- package/dist/contracts/workflowRuntime.d.ts +2 -1
- package/dist/contracts/workflowRuntime.js +1 -244
- package/dist/contradictions/index.d.ts +8 -60
- package/dist/contradictions/index.js +11 -10175
- package/dist/control-plane.d.ts +17 -24
- package/dist/control-plane.js +124 -840
- package/dist/controlObjectOwnership.d.ts +19 -20
- package/dist/controlObjectOwnership.js +207 -201
- package/dist/coreClient.d.ts +23 -28
- package/dist/coreClient.js +567 -692
- package/dist/customTools.d.ts +17 -21
- package/dist/customTools.js +221 -221
- package/dist/decisions/index.d.ts +7 -58
- package/dist/decisions/index.js +14 -10177
- package/dist/decisionsClient.d.ts +25 -32
- package/dist/decisionsClient.js +113 -913
- package/dist/domainContext.d.ts +2 -1
- package/dist/domainContext.js +1 -2
- package/dist/edges/index.d.ts +21 -73
- package/dist/edges/index.js +12 -10176
- package/dist/embeddingsClient.d.ts +22 -30
- package/dist/embeddingsClient.js +73 -922
- package/dist/eventingClient.d.ts +23 -31
- package/dist/eventingClient.js +89 -918
- package/dist/events.d.ts +48 -49
- package/dist/events.js +257 -241
- package/dist/eventsCore.d.ts +20 -29
- package/dist/eventsCore.js +86 -830
- package/dist/evidence/index.d.ts +42 -61
- package/dist/evidence/index.js +13 -10176
- package/dist/evidenceClient.d.ts +13 -22
- package/dist/evidenceClient.js +34 -751
- package/dist/facade/context.d.ts +7 -8
- package/dist/facade/context.js +73 -72
- package/dist/functionSurface.d.ts +2 -156
- package/dist/functionSurface.js +1 -1460
- package/dist/functionSurfaceClient.d.ts +2 -9
- package/dist/functionSurfaceClient.js +1 -1460
- package/dist/gatewayFacades.d.ts +93 -296
- package/dist/gatewayFacades.factories.d.ts +209 -14
- package/dist/gatewayFacades.factories.js +545 -2228
- package/dist/gatewayFacades.js +284 -2627
- package/dist/generated/functionSurface.d.ts +149 -0
- package/dist/generated/functionSurface.js +749 -0
- package/dist/graphAnalysisClient.d.ts +41 -49
- package/dist/graphAnalysisClient.js +185 -974
- package/dist/graphClient.d.ts +53 -60
- package/dist/graphClient.js +219 -1090
- package/dist/graphIntel.d.ts +2 -4
- package/dist/graphIntel.js +1 -2
- package/dist/graphIntelligence.d.ts +4 -2
- package/dist/graphIntelligence.js +2 -46
- package/dist/graphRecommendationsClient.d.ts +15 -23
- package/dist/graphRecommendationsClient.js +70 -849
- package/dist/graphStateClassifierClient.d.ts +17 -25
- package/dist/graphStateClassifierClient.js +67 -908
- package/dist/harnessClient.d.ts +40 -47
- package/dist/harnessClient.js +198 -993
- package/dist/identityClient.d.ts +25 -33
- package/dist/identityClient.js +245 -1186
- package/dist/index.d.ts +73 -69
- package/dist/index.js +72 -13313
- package/dist/infisicalRuntime.d.ts +12 -14
- package/dist/infisicalRuntime.js +290 -297
- package/dist/jobsClient.d.ts +24 -32
- package/dist/jobsClient.js +101 -916
- package/dist/learningClient.d.ts +8 -16
- package/dist/learningClient.js +45 -809
- package/dist/lenses/index.d.ts +13 -65
- package/dist/lenses/index.js +11 -10175
- package/dist/mcpClient.d.ts +14 -23
- package/dist/mcpClient.js +115 -856
- package/dist/modelRuntimeClient.d.ts +18 -26
- package/dist/modelRuntimeClient.js +74 -894
- package/dist/nodes/index.d.ts +7 -58
- package/dist/nodes/index.js +14 -10177
- package/dist/ontologies/index.d.ts +21 -73
- package/dist/ontologies/index.js +14 -10178
- package/dist/ontologyClient.d.ts +23 -31
- package/dist/ontologyClient.js +138 -924
- package/dist/ontologyLinksClient.d.ts +16 -24
- package/dist/ontologyLinksClient.js +76 -886
- package/dist/opinion.d.ts +5 -6
- package/dist/opinion.js +21 -25
- package/dist/orgGraphSearchClient.d.ts +19 -27
- package/dist/orgGraphSearchClient.js +89 -857
- package/dist/packRuntime.d.ts +2 -2
- package/dist/packRuntime.js +1 -2
- package/dist/packsClient.d.ts +30 -37
- package/dist/packsClient.js +131 -906
- package/dist/policyClient.d.ts +21 -29
- package/dist/policyClient.js +267 -1026
- package/dist/proof-attestation.json +1 -1
- package/dist/questions/index.d.ts +9 -60
- package/dist/questions/index.js +15 -10178
- package/dist/realtime/index.d.ts +20 -16
- package/dist/realtime/index.js +30 -19
- package/dist/realtime/refs.d.ts +4 -6
- package/dist/realtime/refs.js +12 -7
- package/dist/realtime-refs.d.ts +1 -0
- package/dist/realtime-refs.js +1 -0
- package/dist/realtime.d.ts +1 -0
- package/dist/realtime.js +1 -0
- package/dist/reportsClient.d.ts +10 -19
- package/dist/reportsClient.js +48 -836
- package/dist/schemaClient.d.ts +16 -23
- package/dist/schemaClient.js +62 -832
- package/dist/sdkSurface.d.ts +18 -25
- package/dist/sdkSurface.js +135 -106
- package/dist/secrets.d.ts +2 -1
- package/dist/secrets.js +1 -2
- package/dist/sourcesClient.d.ts +11 -18
- package/dist/sourcesClient.js +18 -741
- package/dist/telemetryClient.d.ts +22 -30
- package/dist/telemetryClient.js +107 -931
- package/dist/toolRegistryClient.d.ts +27 -35
- package/dist/toolRegistryClient.js +116 -954
- package/dist/topics/index.d.ts +13 -64
- package/dist/topics/index.js +15 -10178
- package/dist/topicsClient.d.ts +19 -27
- package/dist/topicsClient.js +106 -894
- package/dist/types.d.ts +84 -87
- package/dist/types.js +1 -2
- package/dist/version.d.ts +2 -3
- package/dist/version.js +2 -5
- package/dist/workflowClient.d.ts +60 -65
- package/dist/workflowClient.js +343 -1219
- package/dist/worktrees/index.d.ts +16 -68
- package/dist/worktrees/index.js +14 -10178
- package/package.json +6 -6
- package/dist/accessControl.js.map +0 -1
- package/dist/adminClient.js.map +0 -1
- package/dist/answersClient.js.map +0 -1
- package/dist/audience/index.js.map +0 -1
- package/dist/audiencesClient.js.map +0 -1
- package/dist/auditClient.js.map +0 -1
- package/dist/authContext.js.map +0 -1
- package/dist/authDeviceClient.js.map +0 -1
- package/dist/beliefs/index.js.map +0 -1
- package/dist/beliefs/lifecycle.js.map +0 -1
- package/dist/beliefsClient.js.map +0 -1
- package/dist/boundaryClientSurface.js.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/clientAssemblyTypes.js.map +0 -1
- package/dist/clientConfig.js.map +0 -1
- package/dist/clientEvidenceCompat.js.map +0 -1
- package/dist/clientGraphNamespaces.js.map +0 -1
- package/dist/clientHelpers.js.map +0 -1
- package/dist/clientKnowledgeNamespaces.js.map +0 -1
- package/dist/clientLocalHelpers.js.map +0 -1
- package/dist/clientPlatformNamespaces.js.map +0 -1
- package/dist/clientRuntime.js.map +0 -1
- package/dist/clientWorkflowNamespaces.js.map +0 -1
- package/dist/contextClient.js.map +0 -1
- package/dist/contextFacade.js.map +0 -1
- package/dist/contextPackCompiler.js.map +0 -1
- package/dist/contextPackPolicy.js.map +0 -1
- package/dist/contextPackSchema.js.map +0 -1
- package/dist/contextTypes.js.map +0 -1
- package/dist/contracts/api-enums.contract.js.map +0 -1
- package/dist/contracts/auth-session.contract.js.map +0 -1
- package/dist/contracts/context-pack.contract.js.map +0 -1
- package/dist/contracts/contextPack.js.map +0 -1
- package/dist/contracts/index.js.map +0 -1
- package/dist/contracts/lens-filter.contract.js.map +0 -1
- package/dist/contracts/lens-workflow.contract.js.map +0 -1
- package/dist/contracts/lensFilter.js.map +0 -1
- package/dist/contracts/lensWorkflow.js.map +0 -1
- package/dist/contracts/mcpTools.js.map +0 -1
- package/dist/contracts/prompt.contract.js.map +0 -1
- package/dist/contracts/prompt.js.map +0 -1
- package/dist/contracts/sdk-tools.contract.js.map +0 -1
- package/dist/contracts/sdkTools.js.map +0 -1
- package/dist/contracts/tool-contracts.js.map +0 -1
- package/dist/contracts/workflow-runtime.contract.js.map +0 -1
- package/dist/contracts/workflowRuntime.js.map +0 -1
- package/dist/contradictions/index.js.map +0 -1
- package/dist/control-plane.js.map +0 -1
- package/dist/controlObjectOwnership.js.map +0 -1
- package/dist/coreClient.js.map +0 -1
- package/dist/customTools.js.map +0 -1
- package/dist/decisions/index.js.map +0 -1
- package/dist/decisionsClient.js.map +0 -1
- package/dist/domainContext.js.map +0 -1
- package/dist/edges/index.js.map +0 -1
- package/dist/embeddingsClient.js.map +0 -1
- package/dist/eventingClient.js.map +0 -1
- package/dist/events.js.map +0 -1
- package/dist/eventsCore.js.map +0 -1
- package/dist/evidence/index.js.map +0 -1
- package/dist/evidenceClient.js.map +0 -1
- package/dist/facade/context.js.map +0 -1
- package/dist/functionSurface.js.map +0 -1
- package/dist/functionSurfaceClient.js.map +0 -1
- package/dist/gatewayFacades.factories.js.map +0 -1
- package/dist/gatewayFacades.js.map +0 -1
- package/dist/graphAnalysisClient.js.map +0 -1
- package/dist/graphClient.js.map +0 -1
- package/dist/graphIntel.js.map +0 -1
- package/dist/graphIntelligence.js.map +0 -1
- package/dist/graphRecommendationsClient.js.map +0 -1
- package/dist/graphStateClassifierClient.js.map +0 -1
- package/dist/harnessClient.js.map +0 -1
- package/dist/identityClient.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/infisicalRuntime.js.map +0 -1
- package/dist/jobsClient.js.map +0 -1
- package/dist/learningClient.js.map +0 -1
- package/dist/lenses/index.js.map +0 -1
- package/dist/mcpClient.js.map +0 -1
- package/dist/modelRuntimeClient.js.map +0 -1
- package/dist/nodes/index.js.map +0 -1
- package/dist/ontologies/index.js.map +0 -1
- package/dist/ontologyClient.js.map +0 -1
- package/dist/ontologyLinksClient.js.map +0 -1
- package/dist/opinion.js.map +0 -1
- package/dist/orgGraphSearchClient.js.map +0 -1
- package/dist/packRuntime.js.map +0 -1
- package/dist/packsClient.js.map +0 -1
- package/dist/policyClient.js.map +0 -1
- package/dist/questions/index.js.map +0 -1
- package/dist/realtime/index.js.map +0 -1
- package/dist/realtime/refs.js.map +0 -1
- package/dist/reportsClient.js.map +0 -1
- package/dist/schemaClient.js.map +0 -1
- package/dist/sdk-tools.contract-B4c1Zr1o.d.ts +0 -22
- package/dist/sdkSurface.js.map +0 -1
- package/dist/secrets.js.map +0 -1
- package/dist/sourcesClient.js.map +0 -1
- package/dist/telemetryClient.js.map +0 -1
- package/dist/tool-contracts-BUiL9P6z.d.ts +0 -22
- package/dist/toolRegistryClient.js.map +0 -1
- package/dist/topics/index.js.map +0 -1
- package/dist/topicsClient.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/version.js.map +0 -1
- package/dist/workflowClient.js.map +0 -1
- package/dist/worktrees/index.js.map +0 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { PackWeightOverride,
|
|
2
|
-
|
|
3
|
-
type
|
|
4
|
-
type RankCandidate = {
|
|
1
|
+
import { type PackWeightOverride, type RankingWeightVector, type ContextPackSectionKey, type ContextRankingProfile } from "./contracts/context-pack.contract";
|
|
2
|
+
export type SectionKey = ContextPackSectionKey;
|
|
3
|
+
export type RankCandidate = {
|
|
5
4
|
id: string;
|
|
6
5
|
text: string;
|
|
7
6
|
updatedAt?: number | null;
|
|
@@ -11,7 +10,7 @@ type RankCandidate = {
|
|
|
11
10
|
priority?: string | null;
|
|
12
11
|
severity?: string | null;
|
|
13
12
|
};
|
|
14
|
-
type RankedCandidate<T extends RankCandidate> = T & {
|
|
13
|
+
export type RankedCandidate<T extends RankCandidate> = T & {
|
|
15
14
|
score: number;
|
|
16
15
|
justification?: string;
|
|
17
16
|
};
|
|
@@ -21,7 +20,7 @@ type LexicalExclusion = {
|
|
|
21
20
|
reason: "budget_exceeded" | "anti_repetition" | "below_threshold";
|
|
22
21
|
score: number;
|
|
23
22
|
};
|
|
24
|
-
type InjectionPlan = {
|
|
23
|
+
export type InjectionPlan = {
|
|
25
24
|
tokenBudget: number;
|
|
26
25
|
estimatedTokens: number;
|
|
27
26
|
sectionBudgets: Record<SectionKey, number>;
|
|
@@ -34,10 +33,10 @@ type RankContextOptions = {
|
|
|
34
33
|
includeJustifications?: boolean;
|
|
35
34
|
referenceTimeMs?: number;
|
|
36
35
|
};
|
|
37
|
-
declare function resolveEffectiveWeights(overrides?: PackWeightOverride[]): Readonly<Record<ContextPackSectionKey, RankingWeightVector>>;
|
|
38
|
-
declare function rankContextSection<T extends RankCandidate>(section: SectionKey, rows: T[], queryTokens: string[], limit: number, profile: ContextRankingProfile, options?: RankContextOptions): RankedCandidate<T>[];
|
|
39
|
-
declare function parseTokenBudget(value: unknown, fallback?: number): number;
|
|
40
|
-
declare function buildInjectionPlan(args: {
|
|
36
|
+
export declare function resolveEffectiveWeights(overrides?: PackWeightOverride[]): Readonly<Record<ContextPackSectionKey, RankingWeightVector>>;
|
|
37
|
+
export declare function rankContextSection<T extends RankCandidate>(section: SectionKey, rows: T[], queryTokens: string[], limit: number, profile: ContextRankingProfile, options?: RankContextOptions): RankedCandidate<T>[];
|
|
38
|
+
export declare function parseTokenBudget(value: unknown, fallback?: number): number;
|
|
39
|
+
export declare function buildInjectionPlan(args: {
|
|
41
40
|
tokenBudget: number;
|
|
42
41
|
invariants: Array<{
|
|
43
42
|
nodeId: string;
|
|
@@ -66,7 +65,7 @@ declare function buildInjectionPlan(args: {
|
|
|
66
65
|
}>;
|
|
67
66
|
trackExclusions?: boolean;
|
|
68
67
|
}): InjectionPlan;
|
|
69
|
-
type EntityCandidate = {
|
|
68
|
+
export type EntityCandidate = {
|
|
70
69
|
nodeId: string;
|
|
71
70
|
entityType: string;
|
|
72
71
|
title: string;
|
|
@@ -76,9 +75,9 @@ type EntityCandidate = {
|
|
|
76
75
|
metadata: Record<string, unknown>;
|
|
77
76
|
updatedAt?: number | null;
|
|
78
77
|
};
|
|
79
|
-
type RankedEntity = EntityCandidate & {
|
|
78
|
+
export type RankedEntity = EntityCandidate & {
|
|
80
79
|
score: number;
|
|
81
80
|
};
|
|
82
|
-
declare function rankEntities(candidates: EntityCandidate[], queryTokens: string[], limit?: number): RankedEntity[];
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
export declare function rankEntities(candidates: EntityCandidate[], queryTokens: string[], limit?: number): RankedEntity[];
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=contextPackPolicy.d.ts.map
|
|
@@ -1,337 +1,259 @@
|
|
|
1
|
-
|
|
2
|
-
var SECTION_BUDGET_RATIOS = {
|
|
3
|
-
invariants: 0.28,
|
|
4
|
-
activeBeliefs: 0.3,
|
|
5
|
-
openQuestions: 0.17,
|
|
6
|
-
recentEvidence: 0.17,
|
|
7
|
-
contradictions: 0.08
|
|
8
|
-
};
|
|
9
|
-
var MIN_TOKEN_BUDGET = 400;
|
|
10
|
-
var MAX_TOKEN_BUDGET = 8e3;
|
|
11
|
-
var DEFAULT_TOKEN_BUDGET = 1800;
|
|
12
|
-
var MIN_CONTRADICTION_BUDGET = 40;
|
|
13
|
-
var RANKING_WEIGHTS = {
|
|
14
|
-
invariants: {
|
|
15
|
-
query: 0.35,
|
|
16
|
-
recency: 0.1,
|
|
17
|
-
confidence: 0.4,
|
|
18
|
-
beliefType: 0.15
|
|
19
|
-
},
|
|
20
|
-
activeBeliefs: {
|
|
21
|
-
query: 0.5,
|
|
22
|
-
recency: 0.2,
|
|
23
|
-
confidence: 0.2,
|
|
24
|
-
beliefType: 0.1
|
|
25
|
-
},
|
|
26
|
-
openQuestions: {
|
|
27
|
-
query: 0.55,
|
|
28
|
-
recency: 0.2,
|
|
29
|
-
priority: 0.25
|
|
30
|
-
},
|
|
31
|
-
recentEvidence: {
|
|
32
|
-
query: 0.6,
|
|
33
|
-
recency: 0.4
|
|
34
|
-
},
|
|
35
|
-
contradictions: {
|
|
36
|
-
query: 0.4,
|
|
37
|
-
recency: 0.2,
|
|
38
|
-
severity: 0.4
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
var RECENCY_HALF_LIFE_DAYS = 30;
|
|
42
|
-
var ENTITY_RANKING_WEIGHTS = {
|
|
43
|
-
query: 0.4,
|
|
44
|
-
connectivity: 0.6
|
|
45
|
-
};
|
|
46
|
-
var DEFAULT_ENTITY_LIMIT = 10;
|
|
47
|
-
var MAX_ENTITY_LIMIT = 50;
|
|
48
|
-
var BELIEF_TYPE_BONUS = {
|
|
49
|
-
invariant: 1,
|
|
50
|
-
tenet: 0.8,
|
|
51
|
-
principle: 0.6
|
|
52
|
-
};
|
|
53
|
-
var DEFAULT_BELIEF_TYPE_BONUS = 0.4;
|
|
54
|
-
var PRIORITY_SCORES = {
|
|
55
|
-
critical: 1,
|
|
56
|
-
high: 0.85,
|
|
57
|
-
medium: 0.55,
|
|
58
|
-
low: 0.35
|
|
59
|
-
};
|
|
60
|
-
var DEFAULT_PRIORITY_SCORE = 0.5;
|
|
61
|
-
var SEVERITY_SCORES = {
|
|
62
|
-
critical: 1,
|
|
63
|
-
high: 0.85,
|
|
64
|
-
medium: 0.6,
|
|
65
|
-
low: 0.35
|
|
66
|
-
};
|
|
67
|
-
var DEFAULT_SEVERITY_SCORE = 0.5;
|
|
68
|
-
var TOKENS_PER_WORD = 1.35;
|
|
69
|
-
var MIN_TOKEN_ESTIMATE = 8;
|
|
70
|
-
|
|
71
|
-
// src/contextPackPolicy.ts
|
|
1
|
+
import { BELIEF_TYPE_BONUS, DEFAULT_ENTITY_LIMIT, DEFAULT_BELIEF_TYPE_BONUS, DEFAULT_PRIORITY_SCORE, DEFAULT_SEVERITY_SCORE, DEFAULT_TOKEN_BUDGET, ENTITY_RANKING_WEIGHTS, MAX_TOKEN_BUDGET, MAX_ENTITY_LIMIT, MIN_CONTRADICTION_BUDGET, MIN_TOKEN_BUDGET, MIN_TOKEN_ESTIMATE, PRIORITY_SCORES, RANKING_WEIGHTS, RECENCY_HALF_LIFE_DAYS, SECTION_BUDGET_RATIOS, SEVERITY_SCORES, TOKENS_PER_WORD, } from "./contracts/context-pack.contract.js";
|
|
72
2
|
function tokenHits(text, tokens) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
const haystack = text.trim().toLowerCase();
|
|
77
|
-
let hits = 0;
|
|
78
|
-
for (const token of tokens) {
|
|
79
|
-
if (haystack.includes(token)) {
|
|
80
|
-
hits += 1;
|
|
3
|
+
if (tokens.length === 0) {
|
|
4
|
+
return 1;
|
|
81
5
|
}
|
|
82
|
-
|
|
83
|
-
|
|
6
|
+
const haystack = text.trim().toLowerCase();
|
|
7
|
+
let hits = 0;
|
|
8
|
+
for (const token of tokens) {
|
|
9
|
+
if (haystack.includes(token)) {
|
|
10
|
+
hits += 1;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return hits;
|
|
84
14
|
}
|
|
85
15
|
function clamp01(value) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
16
|
+
if (!Number.isFinite(value)) {
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
return Math.max(0, Math.min(1, value));
|
|
90
20
|
}
|
|
91
21
|
function recencyScore(updatedAt, referenceTimeMs = Date.now()) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
22
|
+
if (!updatedAt || !Number.isFinite(updatedAt)) {
|
|
23
|
+
return 0.25;
|
|
24
|
+
}
|
|
25
|
+
const ageMs = Math.max(0, referenceTimeMs - updatedAt);
|
|
26
|
+
const ageDays = ageMs / (1000 * 60 * 60 * 24);
|
|
27
|
+
const decay = 0.5 ** (ageDays / RECENCY_HALF_LIFE_DAYS);
|
|
28
|
+
return clamp01(decay);
|
|
99
29
|
}
|
|
100
30
|
function confidenceScore(confidence) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
31
|
+
if (typeof confidence !== "number" || !Number.isFinite(confidence)) {
|
|
32
|
+
return 0.5;
|
|
33
|
+
}
|
|
34
|
+
return clamp01(confidence);
|
|
105
35
|
}
|
|
106
36
|
function priorityScore(priority) {
|
|
107
|
-
|
|
108
|
-
|
|
37
|
+
const value = (priority || "").trim().toLowerCase();
|
|
38
|
+
return PRIORITY_SCORES[value] ?? DEFAULT_PRIORITY_SCORE;
|
|
109
39
|
}
|
|
110
40
|
function severityScore(severity) {
|
|
111
|
-
|
|
112
|
-
|
|
41
|
+
const value = (severity || "").trim().toLowerCase();
|
|
42
|
+
return SEVERITY_SCORES[value] ?? DEFAULT_SEVERITY_SCORE;
|
|
113
43
|
}
|
|
114
44
|
function beliefTypeBonus(beliefType) {
|
|
115
|
-
|
|
116
|
-
|
|
45
|
+
const value = (beliefType || "").trim().toLowerCase();
|
|
46
|
+
return BELIEF_TYPE_BONUS[value] ?? DEFAULT_BELIEF_TYPE_BONUS;
|
|
117
47
|
}
|
|
118
|
-
function resolveEffectiveWeights(overrides) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
48
|
+
export function resolveEffectiveWeights(overrides) {
|
|
49
|
+
if (!overrides || overrides.length === 0) {
|
|
50
|
+
return RANKING_WEIGHTS;
|
|
51
|
+
}
|
|
52
|
+
const result = { ...RANKING_WEIGHTS };
|
|
53
|
+
for (const override of overrides) {
|
|
54
|
+
const base = RANKING_WEIGHTS[override.section];
|
|
55
|
+
if (base) {
|
|
56
|
+
result[override.section] = { ...base, ...override.weights };
|
|
57
|
+
}
|
|
127
58
|
}
|
|
128
|
-
|
|
129
|
-
return result;
|
|
59
|
+
return result;
|
|
130
60
|
}
|
|
131
61
|
function generateJustification(_section, candidate, queryTokens, weights) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
62
|
+
const parts = [];
|
|
63
|
+
const hits = tokenHits(candidate.text, queryTokens);
|
|
64
|
+
if (queryTokens.length > 0 && hits > 0) {
|
|
65
|
+
parts.push(`${hits}/${queryTokens.length} query terms matched`);
|
|
66
|
+
}
|
|
67
|
+
else if (queryTokens.length === 0) {
|
|
68
|
+
parts.push("no query filter");
|
|
69
|
+
}
|
|
70
|
+
const ts = candidate.updatedAt || candidate.createdAt || null;
|
|
71
|
+
if (ts && Number.isFinite(ts)) {
|
|
72
|
+
const ageDays = Math.max(0, Date.now() - ts) / (1000 * 60 * 60 * 24);
|
|
73
|
+
if (ageDays < 1) {
|
|
74
|
+
parts.push("updated today");
|
|
75
|
+
}
|
|
76
|
+
else if (ageDays < 7) {
|
|
77
|
+
parts.push(`updated ${Math.floor(ageDays)}d ago`);
|
|
78
|
+
}
|
|
79
|
+
else if (ageDays < 30) {
|
|
80
|
+
parts.push(`updated ${Math.floor(ageDays / 7)}w ago`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
parts.push(`updated ${Math.floor(ageDays)}d ago (decayed)`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (weights.confidence !== undefined &&
|
|
87
|
+
candidate.confidence !== null &&
|
|
88
|
+
candidate.confidence !== undefined) {
|
|
89
|
+
parts.push(`confidence=${candidate.confidence.toFixed(2)}`);
|
|
90
|
+
}
|
|
91
|
+
if (weights.beliefType !== undefined && candidate.beliefType) {
|
|
92
|
+
parts.push(`type=${candidate.beliefType}`);
|
|
93
|
+
}
|
|
94
|
+
if (weights.priority !== undefined && candidate.priority) {
|
|
95
|
+
parts.push(`priority=${candidate.priority}`);
|
|
150
96
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (weights.beliefType !== void 0 && candidate.beliefType) {
|
|
156
|
-
parts.push(`type=${candidate.beliefType}`);
|
|
157
|
-
}
|
|
158
|
-
if (weights.priority !== void 0 && candidate.priority) {
|
|
159
|
-
parts.push(`priority=${candidate.priority}`);
|
|
160
|
-
}
|
|
161
|
-
if (weights.severity !== void 0 && candidate.severity) {
|
|
162
|
-
parts.push(`severity=${candidate.severity}`);
|
|
163
|
-
}
|
|
164
|
-
return parts.join(", ");
|
|
97
|
+
if (weights.severity !== undefined && candidate.severity) {
|
|
98
|
+
parts.push(`severity=${candidate.severity}`);
|
|
99
|
+
}
|
|
100
|
+
return parts.join(", ");
|
|
165
101
|
}
|
|
166
102
|
function computeWeightedScore(section, candidate, queryTokens, effectiveWeights, referenceTimeMs) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
referenceTimeMs
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
score += confidenceScore(candidate.confidence) * weights.confidence;
|
|
176
|
-
}
|
|
177
|
-
if (weights.beliefType !== void 0) {
|
|
178
|
-
score += beliefTypeBonus(candidate.beliefType) * weights.beliefType;
|
|
179
|
-
}
|
|
180
|
-
if (weights.priority !== void 0) {
|
|
181
|
-
score += priorityScore(candidate.priority) * weights.priority;
|
|
182
|
-
}
|
|
183
|
-
if (weights.severity !== void 0) {
|
|
184
|
-
score += severityScore(candidate.severity) * weights.severity;
|
|
185
|
-
}
|
|
186
|
-
return score;
|
|
187
|
-
}
|
|
188
|
-
function rankContextSection(section, rows, queryTokens, limit, profile, options) {
|
|
189
|
-
const effectiveWeights = options?.effectiveWeights;
|
|
190
|
-
const includeJustifications = options?.includeJustifications ?? false;
|
|
191
|
-
const referenceTimeMs = options?.referenceTimeMs;
|
|
192
|
-
const scored = rows.map((row) => {
|
|
193
|
-
const score = profile === "weighted_v1" ? computeWeightedScore(
|
|
194
|
-
section,
|
|
195
|
-
row,
|
|
196
|
-
queryTokens,
|
|
197
|
-
effectiveWeights,
|
|
198
|
-
referenceTimeMs
|
|
199
|
-
) : queryTokens.length === 0 ? 1 : tokenHits(row.text, queryTokens);
|
|
200
|
-
const result = { ...row, score };
|
|
201
|
-
if (includeJustifications && profile === "weighted_v1") {
|
|
202
|
-
const weights = (effectiveWeights ?? RANKING_WEIGHTS)[section];
|
|
203
|
-
result.justification = generateJustification(section, row, queryTokens, weights);
|
|
103
|
+
const weights = (effectiveWeights ?? RANKING_WEIGHTS)[section];
|
|
104
|
+
const queryComponent = queryTokens.length === 0
|
|
105
|
+
? 0.4
|
|
106
|
+
: clamp01(tokenHits(candidate.text, queryTokens) / queryTokens.length);
|
|
107
|
+
const recencyComponent = recencyScore(candidate.updatedAt || candidate.createdAt || null, referenceTimeMs);
|
|
108
|
+
let score = queryComponent * weights.query + recencyComponent * weights.recency;
|
|
109
|
+
if (weights.confidence !== undefined) {
|
|
110
|
+
score += confidenceScore(candidate.confidence) * weights.confidence;
|
|
204
111
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
112
|
+
if (weights.beliefType !== undefined) {
|
|
113
|
+
score += beliefTypeBonus(candidate.beliefType) * weights.beliefType;
|
|
114
|
+
}
|
|
115
|
+
if (weights.priority !== undefined) {
|
|
116
|
+
score += priorityScore(candidate.priority) * weights.priority;
|
|
117
|
+
}
|
|
118
|
+
if (weights.severity !== undefined) {
|
|
119
|
+
score += severityScore(candidate.severity) * weights.severity;
|
|
211
120
|
}
|
|
212
|
-
|
|
213
|
-
const leftTs = left.updatedAt || left.createdAt || 0;
|
|
214
|
-
return rightTs - leftTs;
|
|
215
|
-
});
|
|
216
|
-
return filtered.slice(0, limit);
|
|
121
|
+
return score;
|
|
217
122
|
}
|
|
218
|
-
function
|
|
219
|
-
|
|
220
|
-
|
|
123
|
+
export function rankContextSection(section, rows, queryTokens, limit, profile, options) {
|
|
124
|
+
const effectiveWeights = options?.effectiveWeights;
|
|
125
|
+
const includeJustifications = options?.includeJustifications ?? false;
|
|
126
|
+
const referenceTimeMs = options?.referenceTimeMs;
|
|
127
|
+
const scored = rows.map((row) => {
|
|
128
|
+
const score = profile === "weighted_v1"
|
|
129
|
+
? computeWeightedScore(section, row, queryTokens, effectiveWeights, referenceTimeMs)
|
|
130
|
+
: queryTokens.length === 0
|
|
131
|
+
? 1
|
|
132
|
+
: tokenHits(row.text, queryTokens);
|
|
133
|
+
const result = { ...row, score };
|
|
134
|
+
if (includeJustifications && profile === "weighted_v1") {
|
|
135
|
+
const weights = (effectiveWeights ?? RANKING_WEIGHTS)[section];
|
|
136
|
+
result.justification = generateJustification(section, row, queryTokens, weights);
|
|
137
|
+
}
|
|
138
|
+
return result;
|
|
139
|
+
});
|
|
140
|
+
const filtered = queryTokens.length === 0 ? scored : scored.filter((row) => row.score > 0);
|
|
141
|
+
filtered.sort((left, right) => {
|
|
142
|
+
if (right.score !== left.score) {
|
|
143
|
+
return right.score - left.score;
|
|
144
|
+
}
|
|
145
|
+
const rightTs = right.updatedAt || right.createdAt || 0;
|
|
146
|
+
const leftTs = left.updatedAt || left.createdAt || 0;
|
|
147
|
+
return rightTs - leftTs;
|
|
148
|
+
});
|
|
149
|
+
return filtered.slice(0, limit);
|
|
150
|
+
}
|
|
151
|
+
export function parseTokenBudget(value, fallback = DEFAULT_TOKEN_BUDGET) {
|
|
152
|
+
const parsed = typeof value === "number" && Number.isFinite(value)
|
|
153
|
+
? Math.floor(value)
|
|
154
|
+
: fallback;
|
|
155
|
+
return Math.max(MIN_TOKEN_BUDGET, Math.min(MAX_TOKEN_BUDGET, parsed));
|
|
221
156
|
}
|
|
222
157
|
function estimateTokens(text) {
|
|
223
|
-
|
|
224
|
-
|
|
158
|
+
const words = text.trim().split(/\s+/).filter(Boolean).length;
|
|
159
|
+
return Math.max(MIN_TOKEN_ESTIMATE, Math.ceil(words * TOKENS_PER_WORD));
|
|
225
160
|
}
|
|
226
|
-
function buildInjectionPlan(args) {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
161
|
+
export function buildInjectionPlan(args) {
|
|
162
|
+
const tokenBudget = parseTokenBudget(args.tokenBudget);
|
|
163
|
+
const trackExclusions = args.trackExclusions ?? false;
|
|
164
|
+
const sectionBudgets = {
|
|
165
|
+
invariants: Math.floor(tokenBudget * SECTION_BUDGET_RATIOS.invariants),
|
|
166
|
+
activeBeliefs: Math.floor(tokenBudget * SECTION_BUDGET_RATIOS.activeBeliefs),
|
|
167
|
+
openQuestions: Math.floor(tokenBudget * SECTION_BUDGET_RATIOS.openQuestions),
|
|
168
|
+
recentEvidence: Math.floor(tokenBudget * SECTION_BUDGET_RATIOS.recentEvidence),
|
|
169
|
+
contradictions: Math.max(MIN_CONTRADICTION_BUDGET, Math.floor(tokenBudget * SECTION_BUDGET_RATIOS.contradictions)),
|
|
170
|
+
};
|
|
171
|
+
const selected = {
|
|
172
|
+
invariants: [],
|
|
173
|
+
activeBeliefs: [],
|
|
174
|
+
openQuestions: [],
|
|
175
|
+
recentEvidence: [],
|
|
176
|
+
contradictions: [],
|
|
177
|
+
};
|
|
178
|
+
const sectionUsage = {
|
|
179
|
+
invariants: 0,
|
|
180
|
+
activeBeliefs: 0,
|
|
181
|
+
openQuestions: 0,
|
|
182
|
+
recentEvidence: 0,
|
|
183
|
+
contradictions: 0,
|
|
184
|
+
};
|
|
185
|
+
const excludedItems = [];
|
|
186
|
+
const pushItem = (section, id, text, score) => {
|
|
187
|
+
const itemTokens = estimateTokens(text);
|
|
188
|
+
const nextUsage = sectionUsage[section] + itemTokens;
|
|
189
|
+
if (nextUsage > sectionBudgets[section]) {
|
|
190
|
+
if (trackExclusions) {
|
|
191
|
+
excludedItems.push({
|
|
192
|
+
id,
|
|
193
|
+
section,
|
|
194
|
+
reason: "budget_exceeded",
|
|
195
|
+
score: score ?? 0,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
selected[section].push(id);
|
|
201
|
+
sectionUsage[section] = nextUsage;
|
|
202
|
+
};
|
|
203
|
+
for (const row of args.invariants) {
|
|
204
|
+
pushItem("invariants", row.nodeId, row.canonicalText, row.score);
|
|
205
|
+
}
|
|
206
|
+
for (const row of args.activeBeliefs) {
|
|
207
|
+
pushItem("activeBeliefs", row.nodeId, row.canonicalText, row.score);
|
|
208
|
+
}
|
|
209
|
+
for (const row of args.openQuestions) {
|
|
210
|
+
pushItem("openQuestions", row.questionId, row.text, row.score);
|
|
211
|
+
}
|
|
212
|
+
for (const row of args.recentEvidence) {
|
|
213
|
+
pushItem("recentEvidence", row.nodeId, row.canonicalText, row.score);
|
|
214
|
+
}
|
|
215
|
+
for (const row of args.contradictions) {
|
|
216
|
+
pushItem("contradictions", row.contradictionId, row.description, row.score);
|
|
273
217
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
pushItem("recentEvidence", row.nodeId, row.canonicalText, row.score);
|
|
288
|
-
}
|
|
289
|
-
for (const row of args.contradictions) {
|
|
290
|
-
pushItem("contradictions", row.contradictionId, row.description, row.score);
|
|
291
|
-
}
|
|
292
|
-
const estimatedTokens = sectionUsage.invariants + sectionUsage.activeBeliefs + sectionUsage.openQuestions + sectionUsage.recentEvidence + sectionUsage.contradictions;
|
|
293
|
-
return {
|
|
294
|
-
tokenBudget,
|
|
295
|
-
estimatedTokens,
|
|
296
|
-
sectionBudgets,
|
|
297
|
-
sectionUsage,
|
|
298
|
-
selected,
|
|
299
|
-
...trackExclusions ? { excludedItems } : {}
|
|
300
|
-
};
|
|
218
|
+
const estimatedTokens = sectionUsage.invariants +
|
|
219
|
+
sectionUsage.activeBeliefs +
|
|
220
|
+
sectionUsage.openQuestions +
|
|
221
|
+
sectionUsage.recentEvidence +
|
|
222
|
+
sectionUsage.contradictions;
|
|
223
|
+
return {
|
|
224
|
+
tokenBudget,
|
|
225
|
+
estimatedTokens,
|
|
226
|
+
sectionBudgets,
|
|
227
|
+
sectionUsage,
|
|
228
|
+
selected,
|
|
229
|
+
...(trackExclusions ? { excludedItems } : {}),
|
|
230
|
+
};
|
|
301
231
|
}
|
|
302
|
-
function rankEntities(candidates, queryTokens, limit) {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
}
|
|
306
|
-
const effectiveLimit = Math.max(
|
|
307
|
-
1,
|
|
308
|
-
Math.min(limit ?? DEFAULT_ENTITY_LIMIT, MAX_ENTITY_LIMIT)
|
|
309
|
-
);
|
|
310
|
-
const maxConnections = Math.max(
|
|
311
|
-
1,
|
|
312
|
-
...candidates.map(
|
|
313
|
-
(candidate) => candidate.connectedBeliefCount + candidate.connectedEvidenceCount
|
|
314
|
-
)
|
|
315
|
-
);
|
|
316
|
-
const scored = candidates.map((candidate) => {
|
|
317
|
-
const searchText = `${candidate.title} ${candidate.entityType} ${candidate.canonicalText}`;
|
|
318
|
-
const queryScore = queryTokens.length === 0 ? 0.4 : clamp01(tokenHits(searchText, queryTokens) / queryTokens.length);
|
|
319
|
-
const totalConnections = candidate.connectedBeliefCount + candidate.connectedEvidenceCount;
|
|
320
|
-
const connectivityScore = clamp01(totalConnections / maxConnections);
|
|
321
|
-
const score = queryScore * ENTITY_RANKING_WEIGHTS.query + connectivityScore * ENTITY_RANKING_WEIGHTS.connectivity;
|
|
322
|
-
return { ...candidate, score };
|
|
323
|
-
});
|
|
324
|
-
scored.sort((left, right) => {
|
|
325
|
-
if (right.score !== left.score) {
|
|
326
|
-
return right.score - left.score;
|
|
232
|
+
export function rankEntities(candidates, queryTokens, limit) {
|
|
233
|
+
if (candidates.length === 0) {
|
|
234
|
+
return [];
|
|
327
235
|
}
|
|
328
|
-
const
|
|
329
|
-
const
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
236
|
+
const effectiveLimit = Math.max(1, Math.min(limit ?? DEFAULT_ENTITY_LIMIT, MAX_ENTITY_LIMIT));
|
|
237
|
+
const maxConnections = Math.max(1, ...candidates.map((candidate) => candidate.connectedBeliefCount + candidate.connectedEvidenceCount));
|
|
238
|
+
const scored = candidates.map((candidate) => {
|
|
239
|
+
const searchText = `${candidate.title} ${candidate.entityType} ${candidate.canonicalText}`;
|
|
240
|
+
const queryScore = queryTokens.length === 0
|
|
241
|
+
? 0.4
|
|
242
|
+
: clamp01(tokenHits(searchText, queryTokens) / queryTokens.length);
|
|
243
|
+
const totalConnections = candidate.connectedBeliefCount + candidate.connectedEvidenceCount;
|
|
244
|
+
const connectivityScore = clamp01(totalConnections / maxConnections);
|
|
245
|
+
const score = queryScore * ENTITY_RANKING_WEIGHTS.query +
|
|
246
|
+
connectivityScore * ENTITY_RANKING_WEIGHTS.connectivity;
|
|
247
|
+
return { ...candidate, score };
|
|
248
|
+
});
|
|
249
|
+
scored.sort((left, right) => {
|
|
250
|
+
if (right.score !== left.score) {
|
|
251
|
+
return right.score - left.score;
|
|
252
|
+
}
|
|
253
|
+
const rightConn = right.connectedBeliefCount + right.connectedEvidenceCount;
|
|
254
|
+
const leftConn = left.connectedBeliefCount + left.connectedEvidenceCount;
|
|
255
|
+
return rightConn - leftConn;
|
|
256
|
+
});
|
|
257
|
+
return scored.slice(0, effectiveLimit);
|
|
333
258
|
}
|
|
334
|
-
|
|
335
|
-
export { buildInjectionPlan, parseTokenBudget, rankContextSection, rankEntities, resolveEffectiveWeights };
|
|
336
|
-
//# sourceMappingURL=contextPackPolicy.js.map
|
|
337
259
|
//# sourceMappingURL=contextPackPolicy.js.map
|
|
@@ -2,6 +2,6 @@ type ValidationResult = {
|
|
|
2
2
|
valid: boolean;
|
|
3
3
|
errors: string[];
|
|
4
4
|
};
|
|
5
|
-
declare function validateContextPackSchema(payload: unknown): ValidationResult;
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
export declare function validateContextPackSchema(payload: unknown): ValidationResult;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=contextPackSchema.d.ts.map
|