@full-self-browsing/lattice 1.3.0 → 1.5.0

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.
Files changed (108) hide show
  1. package/dist/agent-run-C6miAzwI.d.ts +45 -0
  2. package/dist/agent-run-C6miAzwI.d.ts.map +1 -0
  3. package/dist/agent-run-CgPVFl0Z.js +47 -0
  4. package/dist/agent-run-CgPVFl0Z.js.map +1 -0
  5. package/dist/agents.d.ts +5 -0
  6. package/dist/agents.js +6 -0
  7. package/dist/artifact-Bg6mJGnm.d.ts +125 -0
  8. package/dist/artifact-Bg6mJGnm.d.ts.map +1 -0
  9. package/dist/artifact-DOfpeXLb.js +140 -0
  10. package/dist/artifact-DOfpeXLb.js.map +1 -0
  11. package/dist/artifacts.d.ts +2 -0
  12. package/dist/artifacts.js +2 -0
  13. package/dist/audit.d.ts +3 -0
  14. package/dist/audit.js +4 -0
  15. package/dist/catalog-CAfYwB_-.js +91 -0
  16. package/dist/catalog-CAfYwB_-.js.map +1 -0
  17. package/dist/context-pack-Bz3GXmjv.js +99 -0
  18. package/dist/context-pack-Bz3GXmjv.js.map +1 -0
  19. package/dist/context.d.ts +2 -0
  20. package/dist/context.js +2 -0
  21. package/dist/contract-S3oJGlc9.d.ts +74 -0
  22. package/dist/contract-S3oJGlc9.d.ts.map +1 -0
  23. package/dist/core.d.ts +48 -0
  24. package/dist/core.d.ts.map +1 -0
  25. package/dist/core.js +95 -0
  26. package/dist/core.js.map +1 -0
  27. package/dist/errors-eEuEIx6X.js +407 -0
  28. package/dist/errors-eEuEIx6X.js.map +1 -0
  29. package/dist/eval.d.ts +2 -0
  30. package/dist/eval.js +2 -0
  31. package/dist/fingerprint-DodDbQKN.js +34 -0
  32. package/dist/fingerprint-DodDbQKN.js.map +1 -0
  33. package/dist/index-DpnHGHVL.d.ts +53 -0
  34. package/dist/index-DpnHGHVL.d.ts.map +1 -0
  35. package/dist/index.d.ts +78 -3234
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +365 -8434
  38. package/dist/index.js.map +1 -1
  39. package/dist/infer-DLqp5QIM.d.ts +96 -0
  40. package/dist/infer-DLqp5QIM.d.ts.map +1 -0
  41. package/dist/lineage-DBgoPWAZ.js +137 -0
  42. package/dist/lineage-DBgoPWAZ.js.map +1 -0
  43. package/dist/local-CXOGPJ1f.js +139 -0
  44. package/dist/local-CXOGPJ1f.js.map +1 -0
  45. package/dist/local-Dy--7peL.d.ts +10 -0
  46. package/dist/local-Dy--7peL.d.ts.map +1 -0
  47. package/dist/memory-CkQEW6m5.js +62 -0
  48. package/dist/memory-CkQEW6m5.js.map +1 -0
  49. package/dist/memory-DRig5EHV.d.ts +10 -0
  50. package/dist/memory-DRig5EHV.d.ts.map +1 -0
  51. package/dist/negotiate-ClD88hkc.js +10967 -0
  52. package/dist/negotiate-ClD88hkc.js.map +1 -0
  53. package/dist/otel-BgM4e55_.d.ts +421 -0
  54. package/dist/otel-BgM4e55_.d.ts.map +1 -0
  55. package/dist/permission-context-CUKMo79F.js +134 -0
  56. package/dist/permission-context-CUKMo79F.js.map +1 -0
  57. package/dist/plan-DFm8Llep.js +125 -0
  58. package/dist/plan-DFm8Llep.js.map +1 -0
  59. package/dist/preflight-DNHWuJ46.d.ts +64 -0
  60. package/dist/preflight-DNHWuJ46.d.ts.map +1 -0
  61. package/dist/provider-C2IfKsvz.d.ts +1178 -0
  62. package/dist/provider-C2IfKsvz.d.ts.map +1 -0
  63. package/dist/providers.d.ts +4 -0
  64. package/dist/providers.js +4 -0
  65. package/dist/rate-limit-group-nDsBJqSu.d.ts +235 -0
  66. package/dist/rate-limit-group-nDsBJqSu.d.ts.map +1 -0
  67. package/dist/receipt-FYouoPHv.js +205 -0
  68. package/dist/receipt-FYouoPHv.js.map +1 -0
  69. package/dist/replay-CtIhpLek.js +964 -0
  70. package/dist/replay-CtIhpLek.js.map +1 -0
  71. package/dist/result-DLEx2WvU.d.ts +38 -0
  72. package/dist/result-DLEx2WvU.d.ts.map +1 -0
  73. package/dist/router-DU4Z3pTd.js +314 -0
  74. package/dist/router-DU4Z3pTd.js.map +1 -0
  75. package/dist/router-Yo1-aDOv.d.ts +42 -0
  76. package/dist/router-Yo1-aDOv.d.ts.map +1 -0
  77. package/dist/routing.d.ts +6 -0
  78. package/dist/routing.js +4 -0
  79. package/dist/{run-crew-DDznbc3G.js → run-crew-B2fQLmgB.js} +16 -23
  80. package/dist/run-crew-B2fQLmgB.js.map +1 -0
  81. package/dist/run-crew-Bnve5dyI.d.ts +721 -0
  82. package/dist/run-crew-Bnve5dyI.d.ts.map +1 -0
  83. package/dist/{runtime-BTi8lr_O.js → runtime-Dxiet5YS.js} +100 -640
  84. package/dist/runtime-Dxiet5YS.js.map +1 -0
  85. package/dist/scaffolds-DKQrCRqh.d.ts +535 -0
  86. package/dist/scaffolds-DKQrCRqh.d.ts.map +1 -0
  87. package/dist/scaffolds-ekPIlBeU.js +3139 -0
  88. package/dist/scaffolds-ekPIlBeU.js.map +1 -0
  89. package/dist/schema-CNfa_VEy.d.ts +15 -0
  90. package/dist/schema-CNfa_VEy.d.ts.map +1 -0
  91. package/dist/storage-DJKmsaEI.d.ts +26 -0
  92. package/dist/storage-DJKmsaEI.d.ts.map +1 -0
  93. package/dist/storage.d.ts +10 -0
  94. package/dist/storage.d.ts.map +1 -0
  95. package/dist/storage.js +4 -0
  96. package/dist/tool-call-validation-BFoXkwbf.js +107 -0
  97. package/dist/tool-call-validation-BFoXkwbf.js.map +1 -0
  98. package/dist/tools-C4wHgGKQ.js +49 -0
  99. package/dist/tools-C4wHgGKQ.js.map +1 -0
  100. package/dist/tools.d.ts +46 -0
  101. package/dist/tools.d.ts.map +1 -0
  102. package/dist/tools.js +106 -0
  103. package/dist/tools.js.map +1 -0
  104. package/dist/validate-c7EL5uuH.js +224 -0
  105. package/dist/validate-c7EL5uuH.js.map +1 -0
  106. package/package.json +105 -6
  107. package/dist/run-crew-DDznbc3G.js.map +0 -1
  108. package/dist/runtime-BTi8lr_O.js.map +0 -1
@@ -0,0 +1,125 @@
1
+ //#region src/plan/plan.ts
2
+ function createExecutionPlan(input) {
3
+ const selected = input.route.selected;
4
+ const status = selected === void 0 ? "no-route" : "planned";
5
+ const contextWarnings = input.context?.warnings ?? [];
6
+ const packagingWarnings = input.providerPackaging?.warnings ?? [];
7
+ const warnings = [
8
+ ...input.warnings ?? [],
9
+ ...contextWarnings,
10
+ ...packagingWarnings,
11
+ ...input.route.noRouteReasons.map((reason) => reason.message)
12
+ ];
13
+ return {
14
+ id: createPlanId(),
15
+ kind: "execution-plan",
16
+ version: 1,
17
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
18
+ status,
19
+ task: input.task,
20
+ outputNames: Object.keys(input.outputs),
21
+ artifactRefs: input.artifacts,
22
+ route: input.route,
23
+ stages: createDefaultStages(status, input.artifacts, warnings),
24
+ ...input.context !== void 0 ? { context: input.context } : {},
25
+ ...input.providerPackaging !== void 0 ? { providerPackaging: input.providerPackaging } : {},
26
+ attempts: selected === void 0 ? [] : [{
27
+ providerId: selected.providerId,
28
+ modelId: selected.modelId,
29
+ status: "pending"
30
+ }],
31
+ warnings,
32
+ ...input.metadata !== void 0 ? { metadata: input.metadata } : {}
33
+ };
34
+ }
35
+ function withPlanStatus(plan, status, updates = {}) {
36
+ return {
37
+ ...plan,
38
+ status,
39
+ ...updates.stages !== void 0 ? { stages: updates.stages } : {},
40
+ ...updates.attempts !== void 0 ? { attempts: updates.attempts } : {},
41
+ ...updates.warnings !== void 0 ? { warnings: updates.warnings } : {}
42
+ };
43
+ }
44
+ function markStage(stages, kind, status, metadata) {
45
+ return stages.map((stage) => stage.kind === kind ? {
46
+ ...stage,
47
+ status,
48
+ ...metadata !== void 0 ? { metadata: {
49
+ ...stage.metadata,
50
+ ...metadata
51
+ } } : {}
52
+ } : stage);
53
+ }
54
+ function createDefaultStages(status, artifacts, warnings) {
55
+ const skipped = status === "no-route";
56
+ const artifactIds = artifacts.map((artifact) => artifact.id);
57
+ return [
58
+ {
59
+ id: "stage:analysis",
60
+ kind: "analysis",
61
+ status: "completed",
62
+ inputArtifacts: artifactIds,
63
+ warnings: []
64
+ },
65
+ {
66
+ id: "stage:transforms",
67
+ kind: "transforms",
68
+ status: "pending",
69
+ inputArtifacts: artifactIds,
70
+ warnings: []
71
+ },
72
+ {
73
+ id: "stage:context-packing",
74
+ kind: "context-packing",
75
+ status: "completed",
76
+ inputArtifacts: artifactIds,
77
+ warnings: []
78
+ },
79
+ {
80
+ id: "stage:provider-packaging",
81
+ kind: "provider-packaging",
82
+ status: skipped ? "skipped" : "completed",
83
+ inputArtifacts: artifactIds,
84
+ warnings
85
+ },
86
+ {
87
+ id: "stage:tool-execution",
88
+ kind: "tool-execution",
89
+ status: "pending",
90
+ warnings: []
91
+ },
92
+ {
93
+ id: "stage:execution",
94
+ kind: "execution",
95
+ status: skipped ? "skipped" : "pending",
96
+ warnings: skipped ? warnings : []
97
+ },
98
+ {
99
+ id: "stage:validation",
100
+ kind: "validation",
101
+ status: skipped ? "skipped" : "pending",
102
+ warnings: []
103
+ },
104
+ {
105
+ id: "stage:tripwire",
106
+ kind: "tripwire",
107
+ status: skipped ? "skipped" : "pending",
108
+ warnings: []
109
+ },
110
+ {
111
+ id: "stage:persistence",
112
+ kind: "persistence",
113
+ status: "pending",
114
+ warnings: []
115
+ }
116
+ ];
117
+ }
118
+ function createPlanId() {
119
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") return `plan:${crypto.randomUUID()}`;
120
+ return `plan:${Date.now()}:${Math.random().toString(16).slice(2)}`;
121
+ }
122
+ //#endregion
123
+ export { markStage as n, withPlanStatus as r, createExecutionPlan as t };
124
+
125
+ //# sourceMappingURL=plan-DFm8Llep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-DFm8Llep.js","names":[],"sources":["../src/plan/plan.ts"],"sourcesContent":["import type { ArtifactRef } from \"../artifacts/artifact.js\";\nimport type { OutputContractMap } from \"../outputs/contracts.js\";\nimport type {\n CapabilityModality,\n ModelCapability,\n ProviderTransportMode,\n} from \"../providers/provider.js\";\n\nexport type ExecutionPlanStatus =\n | \"stub\"\n | \"planned\"\n | \"no-route\"\n | \"running\"\n | \"completed\"\n | \"failed\";\n\nexport type ExecutionStageKind =\n | \"analysis\"\n | \"transforms\"\n | \"context-packing\"\n | \"provider-packaging\"\n | \"tool-execution\"\n | \"execution\"\n | \"validation\"\n | \"tripwire\"\n | \"persistence\"\n | \"replay\";\n\nexport type ExecutionStageStatus =\n | \"pending\"\n | \"running\"\n | \"completed\"\n | \"skipped\"\n | \"failed\";\n\nexport interface ExecutionPlanStage {\n readonly id: string;\n readonly kind: ExecutionStageKind;\n readonly status: ExecutionStageStatus;\n readonly inputArtifacts?: readonly string[];\n readonly outputArtifacts?: readonly string[];\n readonly warnings: readonly string[];\n readonly metadata?: Record<string, unknown>;\n}\n\nexport interface RouteRejectReason {\n readonly code: string;\n readonly message: string;\n}\n\nexport interface RouteCandidate {\n readonly providerId: string;\n readonly modelId: string;\n readonly capability: ModelCapability;\n readonly score: number;\n readonly accepted: boolean;\n readonly reasons: readonly RouteRejectReason[];\n readonly estimates: RouteEstimates;\n}\n\nexport interface RouteEstimates {\n readonly inputTokens: number;\n readonly outputTokens: number;\n readonly costUsd?: number;\n readonly latencyMs?: number;\n}\n\nexport interface SelectedRoute {\n readonly providerId: string;\n readonly modelId: string;\n readonly score: number;\n readonly estimates: RouteEstimates;\n readonly inputModalities: readonly CapabilityModality[];\n readonly outputModalities: readonly CapabilityModality[];\n readonly fileTransport: readonly ProviderTransportMode[];\n}\n\nexport interface FallbackRoute {\n readonly providerId: string;\n readonly modelId: string;\n readonly score: number;\n readonly reason: \"policy-preserving-fallback\";\n}\n\nexport interface RouteDecision {\n readonly catalogVersion: string;\n readonly selected?: SelectedRoute;\n readonly candidates: readonly RouteCandidate[];\n readonly rejected: readonly RouteCandidate[];\n readonly fallbackChain: readonly FallbackRoute[];\n readonly noRouteReasons: readonly RouteRejectReason[];\n}\n\nexport interface ContextPackPlan {\n readonly id: string;\n readonly tokenBudget: number;\n readonly estimatedTokens: number;\n readonly included: readonly ContextPackItemPlan[];\n readonly summarized: readonly ContextPackItemPlan[];\n readonly archived: readonly ContextPackItemPlan[];\n readonly omitted: readonly ContextPackItemPlan[];\n readonly warnings: readonly string[];\n}\n\nexport interface ContextPackItemPlan {\n readonly artifactId?: string;\n readonly sessionTurnId?: string;\n readonly reason: string;\n readonly estimatedTokens: number;\n readonly trust: \"developer\" | \"user\" | \"tool\" | \"model-summary\";\n}\n\nexport interface ProviderPackagingPlan {\n readonly providerId: string;\n readonly modelId: string;\n readonly artifacts: readonly ProviderPackagedArtifactPlan[];\n readonly warnings: readonly string[];\n}\n\nexport interface ProviderPackagedArtifactPlan {\n readonly artifactId: string;\n readonly transport: ProviderTransportMode;\n readonly mediaType?: string;\n readonly lineageTransform: \"provider-packaging\";\n readonly providerRequest?: ProviderPackagedArtifactRequestPlan;\n readonly warnings: readonly string[];\n}\n\nexport type ProviderPackagedArtifactSourceType =\n | ProviderTransportMode\n | \"file-reference\";\n\nexport interface ProviderPackagedArtifactRequestPlan {\n readonly shape: string;\n readonly sourceType: ProviderPackagedArtifactSourceType;\n readonly reason: string;\n readonly mediaType?: string;\n readonly sizeBytes?: number;\n readonly reference?: ProviderPackagedArtifactReferencePlan;\n}\n\nexport interface ProviderPackagedArtifactReferencePlan {\n readonly kind: \"url\" | \"file-id\" | \"file-uri\" | \"storage\";\n readonly metadataKey?: string;\n}\n\nexport interface ProviderAttemptRecord {\n readonly providerId: string;\n readonly modelId: string;\n readonly status: \"pending\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\";\n readonly startedAt?: string;\n readonly completedAt?: string;\n readonly error?: string;\n readonly usage?: UsageRecord;\n readonly metadata?: Record<string, unknown>;\n}\n\nexport interface UsageRecord {\n readonly inputTokens?: number;\n readonly outputTokens?: number;\n readonly totalTokens?: number;\n readonly costUsd?: number;\n readonly latencyMs?: number;\n}\n\nexport interface ExecutionPlan {\n readonly id: string;\n readonly kind: \"execution-plan\";\n readonly version: 1;\n readonly createdAt: string;\n readonly status: ExecutionPlanStatus;\n readonly task: string;\n readonly outputNames: readonly string[];\n readonly artifactRefs: readonly ArtifactRef[];\n readonly route: RouteDecision;\n readonly stages: readonly ExecutionPlanStage[];\n readonly context?: ContextPackPlan;\n readonly providerPackaging?: ProviderPackagingPlan;\n readonly attempts: readonly ProviderAttemptRecord[];\n readonly warnings: readonly string[];\n readonly metadata?: Record<string, unknown>;\n}\n\nexport interface ExecutionPlanStub {\n readonly id: string;\n readonly kind: \"plan-stub\";\n readonly createdAt: string;\n readonly status: \"stub\";\n readonly stages: readonly [];\n readonly warnings: readonly string[];\n}\n\nexport type ResultPlan = ExecutionPlan | ExecutionPlanStub;\n\nexport interface CreateExecutionPlanInput {\n readonly task: string;\n readonly artifacts: readonly ArtifactRef[];\n readonly outputs: OutputContractMap;\n readonly route: RouteDecision;\n readonly context?: ContextPackPlan;\n readonly providerPackaging?: ProviderPackagingPlan;\n readonly warnings?: readonly string[];\n readonly metadata?: Record<string, unknown>;\n}\n\nexport function createExecutionPlan(input: CreateExecutionPlanInput): ExecutionPlan {\n const selected = input.route.selected;\n const status: ExecutionPlanStatus = selected === undefined ? \"no-route\" : \"planned\";\n const contextWarnings = input.context?.warnings ?? [];\n const packagingWarnings = input.providerPackaging?.warnings ?? [];\n const warnings = [\n ...(input.warnings ?? []),\n ...contextWarnings,\n ...packagingWarnings,\n ...input.route.noRouteReasons.map((reason) => reason.message),\n ];\n\n return {\n id: createPlanId(),\n kind: \"execution-plan\",\n version: 1,\n createdAt: new Date().toISOString(),\n status,\n task: input.task,\n outputNames: Object.keys(input.outputs),\n artifactRefs: input.artifacts,\n route: input.route,\n stages: createDefaultStages(status, input.artifacts, warnings),\n ...(input.context !== undefined ? { context: input.context } : {}),\n ...(input.providerPackaging !== undefined\n ? { providerPackaging: input.providerPackaging }\n : {}),\n attempts:\n selected === undefined\n ? []\n : [\n {\n providerId: selected.providerId,\n modelId: selected.modelId,\n status: \"pending\",\n },\n ],\n warnings,\n ...(input.metadata !== undefined ? { metadata: input.metadata } : {}),\n };\n}\n\nexport function createExecutionPlanStub(\n warnings: readonly string[] = [],\n): ExecutionPlanStub {\n return {\n id: createPlanId(),\n kind: \"plan-stub\",\n createdAt: new Date().toISOString(),\n status: \"stub\",\n stages: [],\n warnings: [...warnings],\n };\n}\n\nexport function withPlanStatus(\n plan: ExecutionPlan,\n status: ExecutionPlanStatus,\n updates: {\n readonly stages?: readonly ExecutionPlanStage[];\n readonly attempts?: readonly ProviderAttemptRecord[];\n readonly warnings?: readonly string[];\n } = {},\n): ExecutionPlan {\n return {\n ...plan,\n status,\n ...(updates.stages !== undefined ? { stages: updates.stages } : {}),\n ...(updates.attempts !== undefined ? { attempts: updates.attempts } : {}),\n ...(updates.warnings !== undefined ? { warnings: updates.warnings } : {}),\n };\n}\n\nexport function markStage(\n stages: readonly ExecutionPlanStage[],\n kind: ExecutionStageKind,\n status: ExecutionStageStatus,\n metadata?: Record<string, unknown>,\n): readonly ExecutionPlanStage[] {\n return stages.map((stage) =>\n stage.kind === kind\n ? {\n ...stage,\n status,\n ...(metadata !== undefined\n ? { metadata: { ...stage.metadata, ...metadata } }\n : {}),\n }\n : stage,\n );\n}\n\nfunction createDefaultStages(\n status: ExecutionPlanStatus,\n artifacts: readonly ArtifactRef[],\n warnings: readonly string[],\n): readonly ExecutionPlanStage[] {\n const skipped = status === \"no-route\";\n const artifactIds = artifacts.map((artifact) => artifact.id);\n\n return [\n {\n id: \"stage:analysis\",\n kind: \"analysis\",\n status: \"completed\",\n inputArtifacts: artifactIds,\n warnings: [],\n },\n {\n id: \"stage:transforms\",\n kind: \"transforms\",\n status: \"pending\",\n inputArtifacts: artifactIds,\n warnings: [],\n },\n {\n id: \"stage:context-packing\",\n kind: \"context-packing\",\n status: \"completed\",\n inputArtifacts: artifactIds,\n warnings: [],\n },\n {\n id: \"stage:provider-packaging\",\n kind: \"provider-packaging\",\n status: skipped ? \"skipped\" : \"completed\",\n inputArtifacts: artifactIds,\n warnings,\n },\n {\n id: \"stage:tool-execution\",\n kind: \"tool-execution\",\n status: \"pending\",\n warnings: [],\n },\n {\n id: \"stage:execution\",\n kind: \"execution\",\n status: skipped ? \"skipped\" : \"pending\",\n warnings: skipped ? warnings : [],\n },\n {\n id: \"stage:validation\",\n kind: \"validation\",\n status: skipped ? \"skipped\" : \"pending\",\n warnings: [],\n },\n {\n id: \"stage:tripwire\",\n kind: \"tripwire\",\n status: skipped ? \"skipped\" : \"pending\",\n warnings: [],\n },\n {\n id: \"stage:persistence\",\n kind: \"persistence\",\n status: \"pending\",\n warnings: [],\n },\n ];\n}\n\nfunction createPlanId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return `plan:${crypto.randomUUID()}`;\n }\n\n return `plan:${Date.now()}:${Math.random().toString(16).slice(2)}`;\n}\n"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { n as ModelCapability, sn as RouteRejectReason } from "./provider-C2IfKsvz.js";
2
+ import { n as CapabilityContract } from "./contract-S3oJGlc9.js";
3
+
4
+ //#region src/contract/preflight.d.ts
5
+ /**
6
+ * Result of a single pre-flight contract evaluation against a candidate
7
+ * capability. `reasons` is empty when `ok` is true and contains one or more
8
+ * `RouteRejectReason` entries when `ok` is false.
9
+ *
10
+ * The evaluator surfaces ALL failing reasons in a single pass — not the
11
+ * first-failing only — so the deterministic router can aggregate per-candidate
12
+ * rejection detail (CONTEXT.md "Pre-flight surfaces ALL failed candidates
13
+ * with per-candidate rejection reasons").
14
+ */
15
+ interface ContractPreflightResult {
16
+ readonly ok: boolean;
17
+ readonly reasons: readonly RouteRejectReason[];
18
+ }
19
+ /**
20
+ * Input for the pure cost estimator. Token counts come from the router's
21
+ * existing `estimateRoute()` helper so preflight and router agree on the
22
+ * projected output size (one source of truth — see `evaluateContractAgainstRoute`).
23
+ */
24
+ interface EstimateRouteCostInput {
25
+ readonly capability: ModelCapability;
26
+ readonly estimatedInputTokens: number;
27
+ readonly estimatedOutputTokens: number;
28
+ }
29
+ /**
30
+ * Pure cost estimator. Returns `null` when pricing is unknown (so downstream
31
+ * gates can distinguish "free / zero" from "unmeasured" per the Phase 7
32
+ * cost-normalization decision). Uses static catalog metadata only — no probes,
33
+ * no external pricing APIs.
34
+ */
35
+ declare function estimateRouteCost(input: EstimateRouteCostInput): number | null;
36
+ /** Input for the pre-flight evaluator. */
37
+ interface EvaluateContractInput {
38
+ readonly capability: ModelCapability;
39
+ readonly estimatedInputTokens: number;
40
+ readonly estimatedOutputTokens: number;
41
+ }
42
+ /**
43
+ * Pure pre-flight evaluator. Phase 9 receipts will reuse this for deterministic
44
+ * verdict reconstruction.
45
+ *
46
+ * Token estimation: Phase 7 does NOT define a separate token estimator. Output-
47
+ * token projection is the canonical responsibility of the router's existing
48
+ * `estimateRoute()` helper (in `routing/router.ts`), which already produces an
49
+ * `estimatedOutputTokens` value. The router passes that same value into this
50
+ * evaluator via `EvaluateContractInput.estimatedOutputTokens`, so preflight
51
+ * and the router always agree on the projected output size. Phase 9 receipts
52
+ * will pin the router's estimate as the deterministic input — intentionally
53
+ * one source of truth.
54
+ *
55
+ * Reject taxonomy (Phase 7 emits three of four codes):
56
+ * - `contract-budget-exceeded` (CONTRACT-04 + COST-03)
57
+ * - `contract-modality-missing` (CONTRACT-06)
58
+ * - `contract-privacy-mismatch` (CONTRACT-06)
59
+ * - `contract-quality-floor` (reserved for Phase 12 `lattice eval`; NEVER emitted here)
60
+ */
61
+ declare function evaluateContractAgainstRoute(contract: CapabilityContract | undefined, input: EvaluateContractInput): ContractPreflightResult;
62
+ //#endregion
63
+ export { evaluateContractAgainstRoute as a, estimateRouteCost as i, EstimateRouteCostInput as n, EvaluateContractInput as r, ContractPreflightResult as t };
64
+ //# sourceMappingURL=preflight-DNHWuJ46.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight-DNHWuJ46.d.ts","names":[],"sources":["../src/contract/preflight.ts"],"mappings":";;;;;AAeA;;;;;;;;;UAAiB,uBAAA;EAAA,SACN,EAAA;EAAA,SACA,OAAA,WAAkB,iBAAA;AAAA;;;;;;UAQZ,sBAAA;EAAA,SACN,UAAA,EAAY,eAAA;EAAA,SACZ,oBAAA;EAAA,SACA,qBAAA;AAAA;;AAsBX;;;;;iBAbgB,iBAAA,CAAkB,KAAA,EAAO,sBAAA;;UAaxB,qBAAA;EAAA,SACN,UAAA,EAAY,eAAA;EAAA,SACZ,oBAAA;EAAA,SACA,qBAAA;AAAA;;;;;;;;;;;;;;;;;;;;iBAsBK,4BAAA,CACd,QAAA,EAAU,kBAAA,cACV,KAAA,EAAO,qBAAA,GACN,uBAAA"}