@lucern/events 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.
@@ -41,5 +41,5 @@
41
41
  "convex-validators",
42
42
  "proof-attestation"
43
43
  ],
44
- "signedAt": 1780078562061
44
+ "signedAt": 1780290788497
45
45
  }
package/dist/types.js CHANGED
@@ -546,7 +546,7 @@ var SEARCH_EVIDENCE = {
546
546
  };
547
547
  var CREATE_EVIDENCE = {
548
548
  name: "create_evidence",
549
- description: "Commit evidence to the reasoning graph. Like `git commit` \u2014 creates a traceable evidence record with canonical public IDs. Optionally links the evidence to a belief or question in the same operation.",
549
+ description: "Commit evidence to the reasoning graph. Like `git commit` \u2014 creates a traceable evidence record with canonical public IDs. Optionally links the evidence to a belief or question in the same operation. When evidence bears on beliefs, state whether it supports or contradicts; SL confidence is derived from these evidence relations.",
550
550
  parameters: {
551
551
  topicId: { type: "string", description: "Topic scope" },
552
552
  text: { type: "string", description: "Canonical evidence text" },
@@ -557,7 +557,20 @@ var CREATE_EVIDENCE = {
557
557
  },
558
558
  weight: {
559
559
  type: "number",
560
- description: "Support weight: -1.0 (contradicts) to +1.0 (supports)"
560
+ description: "Optional support weight: -1.0 (contradicts) to +1.0 (supports). If omitted, evidenceRelation + confidence determine the weight."
561
+ },
562
+ evidenceRelation: {
563
+ type: "string",
564
+ enum: ["supports", "contradicts"],
565
+ description: "Canonical relation to targetId/linkedBeliefNodeId. Prefer this over relying on signed weight inference."
566
+ },
567
+ confidence: {
568
+ type: "number",
569
+ description: "Confidence in the evidence relation, 0.0 to 1.0"
570
+ },
571
+ beliefRelations: {
572
+ type: "array",
573
+ description: "Optional additional belief relations: [{ beliefId|beliefNodeId|targetId, evidenceRelation|relation, confidence?, weight?, rationale? }]. Use one evidence node with multiple relations when the same fact supports or contradicts several beliefs."
561
574
  },
562
575
  metadata: {
563
576
  type: "object",
@@ -667,7 +680,7 @@ var LINK_EVIDENCE = {
667
680
  };
668
681
  var LINK_EVIDENCE_TO_BELIEF = {
669
682
  name: "link_evidence_to_belief",
670
- description: "Link evidence to a belief with a support weight. Like `git add` \u2014 stages evidence in support of (or against) a belief. The weight ranges from -1.0 (strongly contradicts) to +1.0 (strongly supports).",
683
+ description: "Link evidence to a belief with a support weight. Like `git add` \u2014 stages evidence in support of (or against) a belief. The weight ranges from -1.0 (strongly contradicts) to +1.0 (strongly supports). This relation appends to the SL confidence ledger; do not hand-write confidence separately.",
671
684
  parameters: {
672
685
  evidenceId: { type: "string", description: "The evidence node ID" },
673
686
  beliefId: { type: "string", description: "The belief node ID" },
@@ -675,9 +688,18 @@ var LINK_EVIDENCE_TO_BELIEF = {
675
688
  type: "number",
676
689
  description: "Support weight: -1.0 (contradicts) to +1.0 (supports)"
677
690
  },
691
+ evidenceRelation: {
692
+ type: "string",
693
+ enum: ["supports", "contradicts"],
694
+ description: "Canonical semantic relation. If omitted, the sign of weight is used."
695
+ },
696
+ confidence: {
697
+ type: "number",
698
+ description: "Confidence in this evidence-to-belief relation, 0.0 to 1.0"
699
+ },
678
700
  rationale: { type: "string", description: "Why this evidence is relevant" }
679
701
  },
680
- required: ["evidenceId", "beliefId", "weight"],
702
+ required: ["evidenceId", "beliefId"],
681
703
  response: {
682
704
  description: "The created edge linking evidence to belief",
683
705
  fields: {
@@ -695,7 +717,7 @@ var LINK_EVIDENCE_TO_BELIEF = {
695
717
  // ../contracts/src/tool-contracts.lifecycle.ts
696
718
  var CREATE_BELIEF = {
697
719
  name: "create_belief",
698
- description: "Commit a new belief (knowledge unit) to the reasoning graph. Like `git commit` \u2014 creates an atomic, traceable knowledge object with a prior. Creation stores the vacuous opinion `(0, 0, 1, a)`; use modulate_confidence to record the first evidential update.",
720
+ description: "Commit a new belief (knowledge unit) to the reasoning graph. Like `git commit` \u2014 creates an atomic, traceable knowledge object with a prior. Creation stores the vacuous opinion `(0, 0, 1, a)`; attach supporting or contradicting evidence with create_evidence or link_evidence_to_belief to record evidential updates.",
699
721
  parameters: {
700
722
  canonicalText: {
701
723
  type: "string",
@@ -781,7 +803,7 @@ var REFINE_BELIEF = {
781
803
  };
782
804
  var MODULATE_CONFIDENCE = {
783
805
  name: "modulate_confidence",
784
- description: "Record a confidence change for a belief. Like `git commit` to the credence log \u2014 an atomic, append-only write. Each modulation is a new entry in the history, not an overwrite. Scoring happens via merge; this tool records the individual data points. Pass the full subjective-logic tuple (`belief`, `disbelief`, `uncertainty`, `baseRate`) directly. If a caller only has a scalar probability, use `@lucern/sdk` helpers `opinionFromBaseRate`, `opinionFromDogmatic`, or `opinionFromProjected` to name the intended interpretation before calling this tool. Every modulation must cite a truth-bearing artifact: triggeringEvidenceId, triggeringQuestionId, triggeringAnswerId, triggeringContradictionId, or triggeringWorktreeId. Triggers: evidence_added, evidence_removed, contradiction_detected, contradiction_resolved, agent_assessment, worktree_outcome, worktree_completed, fusion, discount, deduction.",
806
+ description: "Internal-only subjective-logic ledger append. Like `git commit` to the credence log for the scoring engine \u2014 never an operator-facing way to assert confidence. Agents, SDK callers, CLI users, and MCP clients must instead create or link evidence with `evidenceRelation: supports|contradicts`; the kernel derives the next opinion from that evidence. This compatibility primitive is reserved for governed system scoring paths that already hold a full subjective-logic tuple and truth-bearing provenance.",
785
807
  parameters: {
786
808
  nodeId: { type: "string", description: "The belief to score" },
787
809
  belief: {
@@ -1430,6 +1452,60 @@ var REMOVE_LENS_FROM_TOPIC = {
1430
1452
  tier: "workhorse"
1431
1453
  };
1432
1454
 
1455
+ // ../contracts/src/tool-contracts.context-orientation.ts
1456
+ var LUCERN_ORIENT = {
1457
+ name: "lucern_orient",
1458
+ description: "Load the Lucern reasoning grammar before operating. Like `git help` plus a repository CONTRIBUTING guide for reasoning state - teaches the git-shaped model of topics, campaigns, lanes, worktrees, beliefs, questions, evidence, receipts, gates, and merges.",
1459
+ parameters: {
1460
+ audience: {
1461
+ type: "string",
1462
+ description: "Audience for the primer: agent, human, operator, or developer.",
1463
+ enum: ["agent", "human", "operator", "developer"]
1464
+ },
1465
+ depth: {
1466
+ type: "string",
1467
+ description: "Orientation depth: quick, standard, or deep.",
1468
+ enum: ["quick", "standard", "deep"]
1469
+ },
1470
+ situation: {
1471
+ type: "string",
1472
+ description: "Optional task or query context used to tailor suggested next calls."
1473
+ },
1474
+ includeExamples: {
1475
+ type: "boolean",
1476
+ description: "Whether to include concrete tool-call examples."
1477
+ },
1478
+ includeToolMap: {
1479
+ type: "boolean",
1480
+ description: "Whether to include situation-to-tool routing guidance."
1481
+ },
1482
+ includeFuture: {
1483
+ type: "boolean",
1484
+ description: "Whether to include future exemplar, gauntlet, and training-data capabilities."
1485
+ }
1486
+ },
1487
+ required: [],
1488
+ response: {
1489
+ description: "Canonical operator primer for Lucern's git-shaped reasoning substrate.",
1490
+ fields: {
1491
+ schemaVersion: "string - lucern_orientation.v1",
1492
+ canonicalMentalModel: "object - concise model of Lucern as git-shaped reasoning state",
1493
+ workflow: "array - recommended branch -> investigate -> prove gate -> merge workflow",
1494
+ grammarMap: "array - primitive-to-git-analogy map for topics, campaigns, worktrees, beliefs, questions, evidence, edges, contradictions, and gates",
1495
+ firstMoves: "array - recommended first tools for a cold-start agent",
1496
+ receiptRules: "array - how to interpret candidateCounts, broadening, coverageWarning, narrativeCoverage, synthesisLints, and noDefaultGlobalScan",
1497
+ safetyRules: "array - mutation and completion rules that preserve reasoning lineage",
1498
+ toolMap: "array | undefined - situation-to-tool routing map when requested",
1499
+ examples: "array | undefined - concrete tool-call examples when requested",
1500
+ futureCapabilities: "array | undefined - exemplar, gauntlet, trace-corpus, and native-model-training capabilities when requested",
1501
+ suggestedNextCalls: "array - safe next tool calls for the current situation"
1502
+ }
1503
+ },
1504
+ ownerModule: "reasoning-kernel",
1505
+ ontologyPrimitive: "graph",
1506
+ tier: "showcase"
1507
+ };
1508
+
1433
1509
  // ../contracts/src/tool-contracts.ontology.ts
1434
1510
  var MANAGE_WRITE_POLICY = {
1435
1511
  name: "manage_write_policy",
@@ -3939,10 +4015,34 @@ var COMPILE_CONTEXT = {
3939
4015
  type: "string",
3940
4016
  description: "Optional source kind used as a resolver signal, such as cli, worktree, commit, or docs."
3941
4017
  },
4018
+ campaign: {
4019
+ type: "number",
4020
+ description: "Optional campaign dimension seed. When supplied without topicId, the compiler fans out across all carrier topics for that campaign instead of resolving a single topic."
4021
+ },
4022
+ lane: {
4023
+ type: "string",
4024
+ description: "Optional lane dimension seed. When supplied without topicId, the compiler reads all matching worktrees and their carrier topics."
4025
+ },
4026
+ status: {
4027
+ type: "string",
4028
+ description: "Optional state/status dimension seed for worktrees and graph rows."
4029
+ },
4030
+ principalId: {
4031
+ type: "string",
4032
+ description: "Optional principal seed for work authored, touched, or owned by a human, agent, group, or service principal."
4033
+ },
4034
+ workspaceId: {
4035
+ type: "string",
4036
+ description: "Optional workspace seed used by hosted MCP and SDK clients when compiling tenant-scoped context."
4037
+ },
3942
4038
  budget: {
3943
4039
  type: "number",
3944
4040
  description: "Token budget for prompt injection planning"
3945
4041
  },
4042
+ tokenBudget: {
4043
+ type: "number",
4044
+ description: "Compatibility alias for budget. External MCP clients may send tokenBudget when requesting prompt injection planning."
4045
+ },
3946
4046
  ranking: {
3947
4047
  type: "string",
3948
4048
  description: "Ranking profile for context ordering",
@@ -3978,7 +4078,9 @@ var COMPILE_CONTEXT = {
3978
4078
  recentEvidence: "array \u2014 recent evidence ranked for this query",
3979
4079
  contradictions: "array \u2014 unresolved contradiction records",
3980
4080
  relatedEntities: "array | undefined \u2014 ranked ontological entities in scope",
3981
- contextNarrative: "array \u2014 guidance for prompt assembly",
4081
+ contextNarrative: "array \u2014 ordered synthesis blocks with kind/text, starting with executive_summary and canonical narrative blocks before raw objects",
4082
+ retrievalReceipt: "object \u2014 candidateCounts, coverageWarning, narrativeCoverage, synthesisLints, and suggestedNextActions",
4083
+ narrativeCoverage: "object \u2014 recordsSynthesized, recordsNamed, recordsOmitted, and blocksEmitted for the narrative",
3982
4084
  injectionPolicy: "object \u2014 token-budgeted section selections",
3983
4085
  diagnostics: "object \u2014 scoring and utilization telemetry"
3984
4086
  }
@@ -4633,6 +4735,7 @@ var MCP_TOOL_CONTRACTS = {
4633
4735
  update_worktree_metadata: UPDATE_WORKTREE_METADATA,
4634
4736
  identity_whoami: IDENTITY_WHOAMI,
4635
4737
  resolve_interactive_principal: RESOLVE_INTERACTIVE_PRINCIPAL,
4738
+ lucern_orient: LUCERN_ORIENT,
4636
4739
  compile_context: COMPILE_CONTEXT,
4637
4740
  record_scope_learning: RECORD_SCOPE_LEARNING,
4638
4741
  pipeline_snapshot: PIPELINE_SNAPSHOT,
@@ -10387,6 +10490,20 @@ var DOMAIN_EVENT_TYPES = [
10387
10490
  "webhook.test"
10388
10491
  ];
10389
10492
 
10493
+ // ../contracts/src/ids.contract.ts
10494
+ var PREFIXED_ID_PATTERN = /^([a-z][a-z0-9]*)_(.+)$/;
10495
+ function decodePrefixedId(id) {
10496
+ const normalized = id.trim();
10497
+ const match = PREFIXED_ID_PATTERN.exec(normalized);
10498
+ if (!match) {
10499
+ throw new Error(`Invalid prefixed ID: ${id}`);
10500
+ }
10501
+ return {
10502
+ prefix: match[1],
10503
+ value: match[2]
10504
+ };
10505
+ }
10506
+
10390
10507
  // ../contracts/src/schema-helpers/spine/tables/epistemicNodes.ts
10391
10508
  var NODE_TYPES = [
10392
10509
  "decision",
@@ -11502,6 +11619,23 @@ function defineProjection(def) {
11502
11619
 
11503
11620
  // ../contracts/src/projections/create-evidence.projection.ts
11504
11621
  var jsonRecordSchema = z.record(z.unknown());
11622
+ var evidenceRelationSchema = z.enum(["supports", "contradicts"]);
11623
+ var evidenceRelationAliasSchema = z.enum([
11624
+ "supports",
11625
+ "contradicts",
11626
+ "supporting",
11627
+ "contradicting"
11628
+ ]);
11629
+ var beliefRelationSchema = z.object({
11630
+ beliefId: z.string().optional(),
11631
+ beliefNodeId: z.string().optional(),
11632
+ targetId: z.string().optional(),
11633
+ relation: evidenceRelationAliasSchema.optional(),
11634
+ evidenceRelation: evidenceRelationSchema.optional(),
11635
+ confidence: z.number().optional(),
11636
+ weight: z.number().optional(),
11637
+ rationale: z.string().optional()
11638
+ });
11505
11639
  var createEvidenceInputSchemaBase = z.object({
11506
11640
  projectId: z.string().optional(),
11507
11641
  topicId: z.string().optional(),
@@ -11523,7 +11657,8 @@ var createEvidenceInputSchemaBase = z.object({
11523
11657
  targetId: z.string().optional(),
11524
11658
  targetNodeId: z.string().optional(),
11525
11659
  linkedBeliefNodeId: z.string().optional(),
11526
- evidenceRelation: z.enum(["supports", "contradicts"]).optional(),
11660
+ evidenceRelation: evidenceRelationSchema.optional(),
11661
+ beliefRelations: z.array(beliefRelationSchema).optional(),
11527
11662
  confidence: z.number().optional(),
11528
11663
  weight: z.number().optional(),
11529
11664
  reasoning: z.string().optional(),
@@ -11549,15 +11684,103 @@ function isRecord(value) {
11549
11684
  function recordValue(value) {
11550
11685
  return isRecord(value) ? value : {};
11551
11686
  }
11687
+ function normalizeTopicIdForKernel(topicId) {
11688
+ const normalized = topicId?.trim();
11689
+ if (!normalized) {
11690
+ return void 0;
11691
+ }
11692
+ try {
11693
+ const decoded = decodePrefixedId(normalized);
11694
+ return decoded.prefix === "top" ? decoded.value : normalized;
11695
+ } catch {
11696
+ return normalized;
11697
+ }
11698
+ }
11699
+ function normalizeWorktreeId(value) {
11700
+ const normalized = value?.trim();
11701
+ if (!normalized) {
11702
+ return void 0;
11703
+ }
11704
+ if (normalized.startsWith("wt_")) {
11705
+ return normalized.slice("wt_".length);
11706
+ }
11707
+ return normalized;
11708
+ }
11709
+ function targetKind(targetId) {
11710
+ const normalized = targetId?.trim();
11711
+ if (!normalized) {
11712
+ return "unknown";
11713
+ }
11714
+ if (normalized.startsWith("wt_") || /^tn[a-z0-9]+$/i.test(normalized)) {
11715
+ return "worktree";
11716
+ }
11717
+ if (normalized.startsWith("que_")) {
11718
+ return "question";
11719
+ }
11720
+ if (normalized.startsWith("bel_")) {
11721
+ return "belief";
11722
+ }
11723
+ return "unknown";
11724
+ }
11725
+ function normalizeRelation(value, weight) {
11726
+ if (value === "supports" || value === "supporting") {
11727
+ return "supports";
11728
+ }
11729
+ if (value === "contradicts" || value === "contradicting") {
11730
+ return "contradicts";
11731
+ }
11732
+ if (weight === void 0) {
11733
+ return void 0;
11734
+ }
11735
+ return weight < 0 ? "contradicts" : "supports";
11736
+ }
11737
+ function normalizeConfidence(confidence, weight) {
11738
+ if (confidence !== void 0) {
11739
+ return Math.min(1, Math.max(0, confidence));
11740
+ }
11741
+ if (weight === void 0) {
11742
+ return void 0;
11743
+ }
11744
+ return Math.min(1, Math.max(0, Math.abs(weight)));
11745
+ }
11746
+ function normalizeBeliefRelation(relation) {
11747
+ const beliefNodeId = relation.beliefNodeId ?? relation.beliefId ?? relation.targetId;
11748
+ if (!beliefNodeId) {
11749
+ return void 0;
11750
+ }
11751
+ const weight = typeof relation.weight === "number" ? relation.weight : void 0;
11752
+ const evidenceRelation = normalizeRelation(
11753
+ relation.evidenceRelation ?? relation.relation,
11754
+ weight
11755
+ );
11756
+ if (!evidenceRelation) {
11757
+ return void 0;
11758
+ }
11759
+ return compactRecord({
11760
+ beliefNodeId,
11761
+ relation: evidenceRelation,
11762
+ confidence: normalizeConfidence(relation.confidence, weight),
11763
+ rationale: relation.rationale
11764
+ });
11765
+ }
11552
11766
  var createEvidenceProjection = defineProjection({
11553
11767
  contractName: "create_evidence",
11554
11768
  inputSchema: createEvidenceInputSchema,
11555
11769
  project: (input) => {
11556
11770
  const text = input.text ?? input.canonicalText;
11557
11771
  const weight = typeof input.weight === "number" ? input.weight : void 0;
11772
+ const target = input.targetId ?? input.targetNodeId;
11773
+ const kind = targetKind(target);
11774
+ const linkedWorktreeId = kind === "worktree" ? normalizeWorktreeId(target) : void 0;
11775
+ const linkedBeliefNodeId = input.linkedBeliefNodeId ?? (kind === "belief" || kind === "unknown" ? input.targetNodeId ?? input.targetId : void 0);
11776
+ const evidenceRelation = linkedBeliefNodeId ? normalizeRelation(input.evidenceRelation, weight) : void 0;
11777
+ const confidence = evidenceRelation ? normalizeConfidence(input.confidence, weight) : void 0;
11778
+ const beliefRelations = input.beliefRelations?.map(normalizeBeliefRelation).filter(
11779
+ (relation) => relation !== void 0
11780
+ );
11558
11781
  return compactRecord({
11559
11782
  projectId: input.projectId,
11560
- topicId: input.topicId,
11783
+ topicId: normalizeTopicIdForKernel(input.topicId),
11561
11784
  text,
11562
11785
  title: input.title ?? text,
11563
11786
  content: input.content ?? text,
@@ -11576,13 +11799,16 @@ var createEvidenceProjection = defineProjection({
11576
11799
  source: input.source,
11577
11800
  targetId: input.targetId,
11578
11801
  targetNodeId: input.targetNodeId,
11802
+ targetKind: kind === "unknown" ? void 0 : kind,
11803
+ linkedWorktreeId,
11579
11804
  weight,
11580
11805
  reasoning: input.reasoning,
11581
11806
  rationale: input.rationale
11582
11807
  }),
11583
- linkedBeliefNodeId: input.linkedBeliefNodeId ?? input.targetNodeId ?? input.targetId,
11584
- evidenceRelation: input.evidenceRelation ?? (weight === void 0 ? void 0 : weight < 0 ? "contradicts" : "supports"),
11585
- confidence: input.confidence ?? (weight === void 0 ? void 0 : Math.min(1, Math.max(0, Math.abs(weight)))),
11808
+ linkedBeliefNodeId,
11809
+ evidenceRelation,
11810
+ confidence,
11811
+ beliefRelations: beliefRelations && beliefRelations.length > 0 ? beliefRelations : void 0,
11586
11812
  rationale: input.rationale,
11587
11813
  trustedBypassAccessCheck: input.trustedBypassAccessCheck ?? true
11588
11814
  });
@@ -11611,6 +11837,16 @@ var createEvidenceProjection = defineProjection({
11611
11837
  v.literal("contradicts")
11612
11838
  )
11613
11839
  ),
11840
+ beliefRelations: v.optional(
11841
+ v.array(
11842
+ v.object({
11843
+ beliefNodeId: v.string(),
11844
+ relation: v.union(v.literal("supports"), v.literal("contradicts")),
11845
+ confidence: v.optional(v.number()),
11846
+ rationale: v.optional(v.string())
11847
+ })
11848
+ )
11849
+ ),
11614
11850
  confidence: v.optional(v.number()),
11615
11851
  rationale: v.string(),
11616
11852
  trustedBypassAccessCheck: v.optional(v.boolean())
@@ -11844,6 +12080,12 @@ var internalSystem = {
11844
12080
  mcp: "internal",
11845
12081
  cli: "internal"
11846
12082
  };
12083
+ var internalSdkRestOnly = {
12084
+ sdk: "internal",
12085
+ rest: "internal",
12086
+ mcp: "none",
12087
+ cli: "none"
12088
+ };
11847
12089
  var publicWithInternalMcp = {
11848
12090
  sdk: "public",
11849
12091
  rest: "public",
@@ -11883,6 +12125,7 @@ function entries(names, surfaceClass, surfaceIntent, surfaces, rationale) {
11883
12125
  );
11884
12126
  }
11885
12127
  var MCP_CORE_OPERATION_NAMES = [
12128
+ "lucern_orient",
11886
12129
  "compile_context",
11887
12130
  "identity_whoami",
11888
12131
  "resolve_interactive_principal",
@@ -11892,7 +12135,6 @@ var MCP_CORE_OPERATION_NAMES = [
11892
12135
  "get_belief",
11893
12136
  "list_beliefs",
11894
12137
  "refine_belief",
11895
- "modulate_confidence",
11896
12138
  "fork_belief",
11897
12139
  "archive_belief",
11898
12140
  "search_beliefs",
@@ -12160,6 +12402,13 @@ var LUCERN_OPERATION_MANIFEST = {
12160
12402
  internalSystem,
12161
12403
  "Lucern system/background operation. Available to platform code paths, hidden from public MCP discovery."
12162
12404
  ),
12405
+ modulate_confidence: {
12406
+ name: "modulate_confidence",
12407
+ surfaceClass: "platform_internal",
12408
+ surfaceIntent: "system",
12409
+ surfaces: internalSdkRestOnly,
12410
+ rationale: "Internal SL ledger append primitive. Public callers attach evidence or contradiction relations; confidence is derived algorithmically."
12411
+ },
12163
12412
  ...entries(
12164
12413
  LEGACY_COMPAT_OPERATION_NAMES,
12165
12414
  "legacy_compat",
@@ -12511,6 +12760,14 @@ var observationContextArgs = z.object({
12511
12760
  limit: z.number().optional().describe("Maximum observations to return."),
12512
12761
  status: z.string().optional().describe("Observation status filter.")
12513
12762
  });
12763
+ var lucernOrientArgs = z.object({
12764
+ audience: z.enum(["agent", "human", "operator", "developer"]).optional().describe("Audience for the orientation primer."),
12765
+ depth: z.enum(["quick", "standard", "deep"]).optional().describe("How much orientation detail to include."),
12766
+ situation: z.string().optional().describe("Optional task or query context for suggested next calls."),
12767
+ includeExamples: z.boolean().optional().describe("Include concrete tool-call examples."),
12768
+ includeToolMap: z.boolean().optional().describe("Include situation-to-tool routing guidance."),
12769
+ includeFuture: z.boolean().optional().describe("Include future training and pedagogy capabilities.")
12770
+ });
12514
12771
  function isRecord2(value) {
12515
12772
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
12516
12773
  }
@@ -12538,6 +12795,20 @@ var observationInput = (input, context) => withUserId(
12538
12795
  context
12539
12796
  );
12540
12797
  var contextContracts = [
12798
+ surfaceContract({
12799
+ name: "lucern_orient",
12800
+ kind: "query",
12801
+ domain: "context",
12802
+ surfaceClass: "platform_public",
12803
+ path: "/context/orient",
12804
+ sdkNamespace: "context",
12805
+ sdkMethod: "lucernOrient",
12806
+ summary: "Return the canonical Lucern operator orientation primer.",
12807
+ gateway: {
12808
+ handler: "context.lucernOrient"
12809
+ },
12810
+ args: lucernOrientArgs
12811
+ }),
12541
12812
  surfaceContract({
12542
12813
  name: "compile_context",
12543
12814
  kind: "query",
@@ -12841,11 +13112,11 @@ var beliefsContracts = [
12841
13112
  name: "modulate_confidence",
12842
13113
  kind: "mutation",
12843
13114
  domain: "beliefs",
12844
- surfaceClass: "platform_public",
13115
+ surfaceClass: "platform_internal",
12845
13116
  path: "/beliefs/confidence",
12846
13117
  sdkNamespace: "beliefs",
12847
13118
  sdkMethod: "modulateConfidence",
12848
- summary: "Append a belief confidence modulation.",
13119
+ summary: "Internal SL ledger append. Public callers should attach evidence or contradiction relations instead.",
12849
13120
  convex: {
12850
13121
  module: "beliefs",
12851
13122
  functionName: "modulateConfidence",
@@ -12951,15 +13222,28 @@ var beliefsContracts = [
12951
13222
  })
12952
13223
  ];
12953
13224
  var jsonRecordSchema4 = z.record(z.unknown());
12954
- var evidenceRelationSchema = z.enum(["supports", "contradicts"]);
13225
+ var evidenceRelationSchema2 = z.enum(["supports", "contradicts"]);
13226
+ var beliefRelationSchema2 = z.object({
13227
+ beliefId: z.string().optional().describe("Belief ID this evidence bears on."),
13228
+ beliefNodeId: z.string().optional().describe("Belief node ID this evidence bears on."),
13229
+ targetId: z.string().optional().describe("Belief target ID alias for beliefId/beliefNodeId."),
13230
+ relation: z.enum(["supports", "contradicts", "supporting", "contradicting"]).optional().describe("Relation alias for how the evidence bears on the belief."),
13231
+ evidenceRelation: evidenceRelationSchema2.optional().describe("Canonical relation: supports or contradicts."),
13232
+ confidence: z.number().optional().describe("Confidence in this evidence-to-belief relation."),
13233
+ weight: z.number().optional().describe("Support weight from -1.0 to +1.0 for this belief."),
13234
+ rationale: z.string().optional().describe("Why this relation exists.")
13235
+ });
12955
13236
  var createEvidenceArgs = z.object({
12956
13237
  topicId: z.string().optional().describe("Topic scope for the evidence."),
12957
13238
  text: z.string().describe("Canonical evidence text."),
12958
13239
  source: z.string().optional().describe("Source URL or source label."),
12959
13240
  sourceUrl: z.string().optional().describe("Canonical source URL."),
12960
- targetId: z.string().optional().describe("Belief or question identifier to link immediately."),
13241
+ targetId: z.string().optional().describe("Belief, question, or worktree identifier to link or preserve on the evidence record."),
12961
13242
  linkedBeliefNodeId: z.string().optional().describe("Belief node this evidence bears on."),
12962
- evidenceRelation: evidenceRelationSchema.optional().describe("How the evidence relates to the linked belief."),
13243
+ evidenceRelation: evidenceRelationSchema2.optional().describe("How the evidence relates to the linked belief."),
13244
+ beliefRelations: z.array(beliefRelationSchema2).optional().describe(
13245
+ "Additional belief relations for one evidence record. Use when the same evidence supports or contradicts multiple beliefs."
13246
+ ),
12963
13247
  confidence: z.number().optional().describe("Confidence in the evidence relation."),
12964
13248
  weight: z.number().optional().describe("Support weight from -1.0 to +1.0."),
12965
13249
  metadata: jsonRecordSchema4.optional().describe("Metadata merged into the canonical evidence node."),
@@ -12990,11 +13274,6 @@ var addEvidenceArgs = z.object({
12990
13274
  contentType: z.string().optional().describe("Content format or MIME hint."),
12991
13275
  metadata: jsonRecordSchema4.optional().describe("Optional metadata merged into the evidence node.")
12992
13276
  });
12993
- var evidenceIdInput = (input) => compactRecord4({
12994
- evidenceId: input.evidenceId,
12995
- insightId: input.insightId,
12996
- nodeId: input.nodeId ?? input.id ?? input.evidenceId
12997
- });
12998
13277
  var createEvidenceInput = (input, context) => {
12999
13278
  const parsed = createEvidenceProjection.inputSchema.safeParse(input);
13000
13279
  if (!parsed.success) {
@@ -13007,6 +13286,30 @@ var createEvidenceInput = (input, context) => {
13007
13286
  context
13008
13287
  );
13009
13288
  };
13289
+ function relationWeight(input) {
13290
+ if (typeof input.weight === "number") {
13291
+ return input.weight;
13292
+ }
13293
+ const confidence = typeof input.confidence === "number" ? Math.max(0, Math.min(1, input.confidence)) : 0.7;
13294
+ const relation = String(
13295
+ input.evidenceRelation ?? input.relation ?? input.type ?? ""
13296
+ );
13297
+ return relation === "contradicts" || relation === "contradicting" ? -confidence : confidence;
13298
+ }
13299
+ var linkEvidenceToBeliefInput = (input, context) => {
13300
+ const weight = relationWeight(input);
13301
+ return withUserId(
13302
+ compactRecord4({
13303
+ beliefNodeId: input.beliefNodeId ?? input.beliefId ?? input.targetId,
13304
+ insightId: input.insightId ?? input.evidenceNodeId ?? input.evidenceId,
13305
+ type: weight < 0 ? "contradicting" : "supporting",
13306
+ confidence: Math.min(1, Math.abs(weight)),
13307
+ rationale: input.rationale ?? input.context,
13308
+ trustedBypassAccessCheck: input.trustedBypassAccessCheck ?? true
13309
+ }),
13310
+ context
13311
+ );
13312
+ };
13010
13313
  var linkEvidenceToBeliefEdgeInput = (input, context) => withCreatedBy(
13011
13314
  compactRecord4({
13012
13315
  fromNodeId: input.insightId ?? input.evidenceNodeId ?? input.evidenceId,
@@ -13108,11 +13411,8 @@ var evidenceContracts = [
13108
13411
  sdkNamespace: "evidence",
13109
13412
  sdkMethod: "getEvidence",
13110
13413
  summary: "Get evidence.",
13111
- convex: {
13112
- module: "evidence",
13113
- functionName: "getById",
13114
- kind: "query",
13115
- inputProjection: evidenceIdInput
13414
+ gateway: {
13415
+ handler: "evidence.get"
13116
13416
  }
13117
13417
  }),
13118
13418
  surfaceContract({
@@ -13138,17 +13438,8 @@ var evidenceContracts = [
13138
13438
  sdkNamespace: "evidence",
13139
13439
  sdkMethod: "searchEvidence",
13140
13440
  summary: "Search evidence.",
13141
- convex: {
13142
- module: "nodes",
13143
- functionName: "search",
13144
- kind: "query",
13145
- inputProjection: (input) => compactRecord4({
13146
- searchQuery: input.searchQuery ?? input.q ?? input.query,
13147
- projectId: input.projectId,
13148
- topicId: input.topicId,
13149
- nodeType: "evidence",
13150
- limit: input.limit
13151
- })
13441
+ gateway: {
13442
+ handler: "evidence.search"
13152
13443
  }
13153
13444
  }),
13154
13445
  surfaceContract({
@@ -13161,10 +13452,10 @@ var evidenceContracts = [
13161
13452
  sdkMethod: "linkEvidenceToBelief",
13162
13453
  summary: "Link evidence to a belief.",
13163
13454
  convex: {
13164
- module: "edges",
13165
- functionName: "create",
13455
+ module: "beliefs",
13456
+ functionName: "linkEvidence",
13166
13457
  kind: "mutation",
13167
- inputProjection: linkEvidenceToBeliefEdgeInput
13458
+ inputProjection: linkEvidenceToBeliefInput
13168
13459
  }
13169
13460
  }),
13170
13461
  surfaceContract({
@@ -13736,10 +14027,8 @@ var topicsContracts = [
13736
14027
  sdkNamespace: "topics",
13737
14028
  sdkMethod: "getTopicGraphSpine",
13738
14029
  summary: "Verify topic nodes and parent-child graph edges.",
13739
- convex: {
13740
- module: "topics",
13741
- functionName: "getTopicGraphSpine",
13742
- kind: "query"
14030
+ gateway: {
14031
+ handler: "topics.graphSpine"
13743
14032
  },
13744
14033
  args: getTopicGraphSpineArgs
13745
14034
  })
@@ -15446,10 +15735,8 @@ var graphContracts = [
15446
15735
  sdkNamespace: "graphAnalysis",
15447
15736
  sdkMethod: "listGraphIntelligenceQueries",
15448
15737
  summary: "List Graph Intelligence query catalog entries.",
15449
- convex: {
15450
- module: "contextCompiler",
15451
- functionName: "listGraphIntelligenceQueries",
15452
- kind: "query"
15738
+ gateway: {
15739
+ handler: "graph.listIntelligenceQueries"
15453
15740
  },
15454
15741
  args: graphIntelligenceCatalogArgs
15455
15742
  }),