@velum-labs/routekit-daemon 1.3.2 → 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 (172) hide show
  1. package/dist/account-enroll-service.d.ts +1 -3
  2. package/dist/account-enroll-service.js +262 -262
  3. package/dist/account-mutation-service.d.ts +1 -3
  4. package/dist/account-mutation-service.js +302 -283
  5. package/dist/account-query-service.d.ts +1 -3
  6. package/dist/account-query-service.js +88 -86
  7. package/dist/call-attribution-store.js +544 -1
  8. package/dist/control-dispatch.js +9 -15
  9. package/dist/daemon-bootstrap-preflight.js +1 -1
  10. package/dist/daemon-control-handlers.d.ts +1 -1
  11. package/dist/daemon-control-handlers.js +24 -27
  12. package/dist/daemon-generations.d.ts +14 -28
  13. package/dist/daemon-generations.js +114 -53
  14. package/dist/daemon-lifecycle-service.d.ts +1 -3
  15. package/dist/daemon-lifecycle-service.js +88 -94
  16. package/dist/daemon-maintenance.d.ts +27 -49
  17. package/dist/daemon-maintenance.js +5 -1
  18. package/dist/daemon-options.d.ts +3 -2
  19. package/dist/daemon-policy-context.d.ts +1 -0
  20. package/dist/daemon-policy-context.js +1 -0
  21. package/dist/daemon-runtime-state.d.ts +1 -1
  22. package/dist/daemon-runtime-state.js +2 -3
  23. package/dist/daemon-state-context.d.ts +1 -1
  24. package/dist/daemon-state-context.js +1 -38
  25. package/dist/doctor-service.d.ts +1 -3
  26. package/dist/doctor-service.js +87 -91
  27. package/dist/effect/daemon-live.d.ts +7 -6
  28. package/dist/effect/daemon-live.js +57 -135
  29. package/dist/eval-routing-service.d.ts +1 -3
  30. package/dist/eval-routing-service.js +45 -69
  31. package/dist/eval-session-execution-store.d.ts +24 -0
  32. package/dist/eval-session-execution-store.js +253 -0
  33. package/dist/host-protocol.d.ts +1 -0
  34. package/dist/host.js +3 -0
  35. package/dist/internal-providers/provider-anthropic/index.d.ts +23 -0
  36. package/dist/internal-providers/provider-anthropic/index.js +42 -0
  37. package/dist/internal-providers/provider-anthropic/test/provider.test.js +33 -0
  38. package/dist/internal-providers/provider-azure/index.d.ts +25 -0
  39. package/dist/internal-providers/provider-azure/index.js +101 -0
  40. package/dist/internal-providers/provider-azure/test/provider.test.js +83 -0
  41. package/dist/internal-providers/provider-bedrock/codec.d.ts +11 -0
  42. package/dist/internal-providers/provider-bedrock/codec.js +484 -0
  43. package/dist/internal-providers/provider-bedrock/connection-settings.d.ts +6 -0
  44. package/dist/internal-providers/provider-bedrock/connection-settings.js +41 -0
  45. package/dist/internal-providers/provider-bedrock/connection.d.ts +17 -0
  46. package/dist/internal-providers/provider-bedrock/connection.js +143 -0
  47. package/dist/internal-providers/provider-bedrock/index.d.ts +27 -0
  48. package/dist/internal-providers/provider-bedrock/index.js +47 -0
  49. package/dist/internal-providers/provider-bedrock/source.d.ts +39 -0
  50. package/dist/internal-providers/provider-bedrock/source.js +454 -0
  51. package/dist/internal-providers/provider-bedrock/test/bedrock-source.test.d.ts +1 -0
  52. package/dist/internal-providers/provider-bedrock/test/bedrock-source.test.js +786 -0
  53. package/dist/internal-providers/provider-bedrock/test/connection.test.d.ts +1 -0
  54. package/dist/internal-providers/provider-bedrock/test/connection.test.js +249 -0
  55. package/dist/internal-providers/provider-bedrock/test/workload-credentials.test.d.ts +1 -0
  56. package/dist/internal-providers/provider-bedrock/test/workload-credentials.test.js +29 -0
  57. package/dist/internal-providers/provider-bedrock/workload-credentials.d.ts +5 -0
  58. package/dist/internal-providers/provider-bedrock/workload-credentials.js +14 -0
  59. package/dist/internal-providers/provider-claude-code/index.d.ts +6 -0
  60. package/dist/internal-providers/provider-claude-code/index.js +4 -0
  61. package/dist/internal-providers/provider-claude-code/module-api.d.ts +25 -0
  62. package/dist/internal-providers/provider-claude-code/module-api.js +31 -0
  63. package/dist/internal-providers/provider-claude-code/relay.d.ts +20 -0
  64. package/dist/internal-providers/provider-claude-code/relay.js +115 -0
  65. package/dist/internal-providers/provider-claude-code/subscription.d.ts +2 -0
  66. package/dist/internal-providers/provider-claude-code/subscription.js +194 -0
  67. package/dist/internal-providers/provider-claude-code/test/http-submission.test.d.ts +1 -0
  68. package/dist/internal-providers/provider-claude-code/test/http-submission.test.js +140 -0
  69. package/dist/internal-providers/provider-claude-code/test/relay.test.d.ts +1 -0
  70. package/dist/internal-providers/provider-claude-code/test/relay.test.js +379 -0
  71. package/dist/internal-providers/provider-claude-code/test/subscription.test.d.ts +1 -0
  72. package/dist/internal-providers/provider-claude-code/test/subscription.test.js +256 -0
  73. package/dist/internal-providers/provider-cliproxy/index.d.ts +9 -0
  74. package/dist/internal-providers/provider-cliproxy/index.js +15 -0
  75. package/dist/internal-providers/provider-codex/index.d.ts +6 -0
  76. package/dist/internal-providers/provider-codex/index.js +7 -0
  77. package/dist/internal-providers/provider-codex/module-api.d.ts +25 -0
  78. package/dist/internal-providers/provider-codex/module-api.js +31 -0
  79. package/dist/internal-providers/provider-codex/relay.d.ts +123 -0
  80. package/dist/internal-providers/provider-codex/relay.js +261 -0
  81. package/dist/internal-providers/provider-codex/subscription.d.ts +2 -0
  82. package/dist/internal-providers/provider-codex/subscription.js +555 -0
  83. package/dist/internal-providers/provider-codex/test/http-submission.test.d.ts +1 -0
  84. package/dist/internal-providers/provider-codex/test/http-submission.test.js +142 -0
  85. package/dist/internal-providers/provider-codex/test/relay.test.d.ts +1 -0
  86. package/dist/internal-providers/provider-codex/test/relay.test.js +600 -0
  87. package/dist/internal-providers/provider-codex/test/subscription.test.d.ts +1 -0
  88. package/dist/internal-providers/provider-codex/test/subscription.test.js +70 -0
  89. package/dist/internal-providers/provider-codex/test/translated-content.test.d.ts +1 -0
  90. package/dist/internal-providers/provider-codex/test/translated-content.test.js +91 -0
  91. package/dist/internal-providers/provider-custom/index.d.ts +9 -0
  92. package/dist/internal-providers/provider-custom/index.js +15 -0
  93. package/dist/internal-providers/provider-google/index.d.ts +23 -0
  94. package/dist/internal-providers/provider-google/index.js +43 -0
  95. package/dist/internal-providers/provider-google/test/provider.test.d.ts +1 -0
  96. package/dist/internal-providers/provider-google/test/provider.test.js +34 -0
  97. package/dist/internal-providers/provider-google-vertex/index.d.ts +28 -0
  98. package/dist/internal-providers/provider-google-vertex/index.js +137 -0
  99. package/dist/internal-providers/provider-google-vertex/test/provider.test.d.ts +1 -0
  100. package/dist/internal-providers/provider-google-vertex/test/provider.test.js +85 -0
  101. package/dist/internal-providers/provider-openai/documented-reasoning.d.ts +9 -0
  102. package/dist/internal-providers/provider-openai/documented-reasoning.js +26 -0
  103. package/dist/internal-providers/provider-openai/index.d.ts +23 -0
  104. package/dist/internal-providers/provider-openai/index.js +74 -0
  105. package/dist/internal-providers/provider-openai/test/provider.test.d.ts +1 -0
  106. package/dist/internal-providers/provider-openai/test/provider.test.js +268 -0
  107. package/dist/internal-providers/provider-openai-compatible/index.d.ts +9 -0
  108. package/dist/internal-providers/provider-openai-compatible/index.js +15 -0
  109. package/dist/internal-providers/provider-openai-compatible/test/provider.test.d.ts +1 -0
  110. package/dist/internal-providers/provider-openai-compatible/test/provider.test.js +40 -0
  111. package/dist/internal-providers/provider-openrouter/connection.d.ts +5 -0
  112. package/dist/internal-providers/provider-openrouter/connection.js +143 -0
  113. package/dist/internal-providers/provider-openrouter/index.d.ts +28 -0
  114. package/dist/internal-providers/provider-openrouter/index.js +42 -0
  115. package/dist/internal-providers/provider-openrouter/pricing.d.ts +4 -0
  116. package/dist/internal-providers/provider-openrouter/pricing.js +108 -0
  117. package/dist/internal-providers/provider-openrouter/test/connection.test.d.ts +1 -0
  118. package/dist/internal-providers/provider-openrouter/test/connection.test.js +71 -0
  119. package/dist/internal-providers/provider-openrouter/test/pricing.test.d.ts +1 -0
  120. package/dist/internal-providers/provider-openrouter/test/pricing.test.js +45 -0
  121. package/dist/internal-providers/provider-openrouter/test/provider.test.d.ts +1 -0
  122. package/dist/internal-providers/provider-openrouter/test/provider.test.js +141 -0
  123. package/dist/internal-providers/provider-openrouter/test/validation.test.d.ts +1 -0
  124. package/dist/internal-providers/provider-openrouter/test/validation.test.js +225 -0
  125. package/dist/launcher-service.d.ts +3 -7
  126. package/dist/launcher-service.js +144 -133
  127. package/dist/provider-modules.d.ts +6 -0
  128. package/dist/provider-modules.js +55 -0
  129. package/dist/provider-query-service.d.ts +1 -3
  130. package/dist/provider-query-service.js +140 -143
  131. package/dist/router-generation-service.d.ts +1 -3
  132. package/dist/router-generation-service.js +83 -78
  133. package/dist/services/eval-session/service.d.ts +20 -8
  134. package/dist/services/eval-session/service.js +410 -40
  135. package/dist/services/gateway-generation/service.d.ts +7 -3
  136. package/dist/services/gateway-generation/service.js +126 -63
  137. package/dist/services/generations/service.d.ts +3 -3
  138. package/dist/services/generations/service.js +5 -1
  139. package/dist/telemetry-application-service.d.ts +1 -3
  140. package/dist/telemetry-application-service.js +41 -45
  141. package/dist/test/call-attribution-store.test.js +186 -0
  142. package/dist/test/daemon-accounts.test.js +2 -2
  143. package/dist/test/daemon-data-plane.test.js +24 -45
  144. package/dist/test/daemon-fixtures.js +1 -1
  145. package/dist/test/daemon-generation-transaction.test.js +66 -2
  146. package/dist/test/daemon-runtime-state.test.js +28 -1
  147. package/dist/test/effect-daemon.test.js +38 -0
  148. package/dist/test/eval-routing-application-service.test.js +6 -6
  149. package/dist/test/eval-session-execution.test.d.ts +1 -0
  150. package/dist/test/eval-session-execution.test.js +356 -0
  151. package/dist/test/eval-session-service.test.js +70 -1
  152. package/dist/test/host-worker-session.test.js +1 -0
  153. package/dist/test/launcher-session.test.d.ts +1 -0
  154. package/dist/test/launcher-session.test.js +87 -0
  155. package/dist/test/leaderboard.test.js +25 -1
  156. package/dist/test/provider-modules.test.d.ts +1 -0
  157. package/dist/test/provider-modules.test.js +65 -0
  158. package/dist/test/routekit-upstream-sources.test.d.ts +1 -0
  159. package/dist/test/routekit-upstream-sources.test.js +40 -0
  160. package/dist/test/runtime-composition-types.test.js +11 -0
  161. package/dist/token-application-service.d.ts +1 -3
  162. package/dist/token-application-service.js +38 -44
  163. package/dist/worker.js +5 -3
  164. package/package.json +35 -11
  165. package/dist/application-services.d.ts +0 -10
  166. package/dist/application-services.js +0 -22
  167. package/dist/daemon-lifecycle.d.ts +0 -54
  168. package/dist/daemon-lifecycle.js +0 -177
  169. package/dist/test/application-services.test.js +0 -135
  170. package/dist/test/daemon-lifecycle.test.js +0 -182
  171. /package/dist/{test/application-services.test.d.ts → internal-providers/provider-anthropic/test/provider.test.d.ts} +0 -0
  172. /package/dist/{test/daemon-lifecycle.test.d.ts → internal-providers/provider-azure/test/provider.test.d.ts} +0 -0
@@ -9,16 +9,25 @@ import { Generations } from "./services/generations/service.js";
9
9
  const updateProviderDocument = (document, provider, enabled) => Effect.try({
10
10
  try: () => {
11
11
  const raw = parseYaml(document);
12
- const providers = typeof raw.providers === "object" &&
13
- raw.providers !== null &&
14
- !Array.isArray(raw.providers)
15
- ? { ...raw.providers }
16
- : {};
12
+ const sources = typeof raw.sources === "object" && raw.sources !== null && !Array.isArray(raw.sources)
13
+ ? { ...raw.sources }
14
+ : typeof raw.providers === "object" &&
15
+ raw.providers !== null &&
16
+ !Array.isArray(raw.providers)
17
+ ? Object.fromEntries(Object.entries(raw.providers).map(([id, policy]) => [
18
+ id,
19
+ {
20
+ use: id,
21
+ ...(typeof policy === "object" && policy !== null ? { pool: policy } : {})
22
+ }
23
+ ]))
24
+ : {};
17
25
  if (enabled)
18
- providers[provider] ??= {};
26
+ sources[provider] ??= { use: provider };
19
27
  else
20
- delete providers[provider];
21
- raw.providers = providers;
28
+ delete sources[provider];
29
+ raw.sources = sources;
30
+ delete raw.providers;
22
31
  return stringifyYaml(raw);
23
32
  },
24
33
  catch: toRouteKitFailure
@@ -28,74 +37,70 @@ const revisionConflict = (expected, actual) => new ControlError({
28
37
  message: `revision conflict: expected ${expected}, current ${actual}`,
29
38
  details: { expected, actual }
30
39
  });
31
- /** Owns config mutations and generation publication use cases. */
32
- export class RouterGenerationService {
33
- handlers() {
34
- const snapshot = (configPath, runtimeState) => ({
35
- path: configPath,
36
- document: runtimeState.document,
37
- revision: runtimeState.revisions.config
38
- });
39
- const update = (params) => Effect.gen(function* () {
40
- const env = yield* DaemonEnv;
41
- const runtimeState = yield* DaemonState;
42
- const generations = yield* Generations;
43
- return yield* runtimeState.serializeEffect(Effect.gen(function* () {
44
- if (params.expectedRevision !== runtimeState.revisions.config) {
45
- return yield* Effect.fail(revisionConflict(params.expectedRevision, runtimeState.revisions.config));
46
- }
47
- const config = yield* parseConfigDocumentEffect(params.document);
48
- yield* generations.replace(config, params.document, {
49
- write: true,
50
- configRevision: true
51
- });
52
- return snapshot(env.configPath, runtimeState);
53
- }));
40
+ const snapshot = (configPath, runtimeState) => ({
41
+ path: configPath,
42
+ document: runtimeState.document,
43
+ revision: runtimeState.revisions.config
44
+ });
45
+ const update = (params) => Effect.gen(function* () {
46
+ const env = yield* DaemonEnv;
47
+ const runtimeState = yield* DaemonState;
48
+ const generations = yield* Generations;
49
+ return yield* runtimeState.serializeEffect(Effect.gen(function* () {
50
+ if (params.expectedRevision !== runtimeState.revisions.config) {
51
+ return yield* Effect.fail(revisionConflict(params.expectedRevision, runtimeState.revisions.config));
52
+ }
53
+ const config = yield* parseConfigDocumentEffect(params.document);
54
+ yield* generations.replace(config, params.document, {
55
+ write: true,
56
+ configRevision: true
54
57
  });
55
- return {
56
- "daemon.reload": (params) => Effect.gen(function* () {
57
- const env = yield* DaemonEnv;
58
- const runtimeState = yield* DaemonState;
59
- const generations = yield* Generations;
60
- return yield* runtimeState.serializeEffect(Effect.gen(function* () {
61
- if (params.expectedRevision !== undefined &&
62
- params.expectedRevision !== runtimeState.revisions.config) {
63
- return yield* Effect.fail(revisionConflict(params.expectedRevision, runtimeState.revisions.config));
64
- }
65
- const document = yield* canonicalConfigDocumentEffect(env.configPath);
66
- const config = yield* parseConfigDocumentEffect(document);
67
- yield* generations.replace(config, document, {
68
- write: false,
69
- configRevision: true
70
- });
71
- return {
72
- reloaded: true,
73
- configRevision: runtimeState.revisions.config,
74
- accountRevision: runtimeState.revisions.accounts
75
- };
76
- }));
77
- }),
78
- "config.get": () => Effect.gen(function* () {
79
- const env = yield* DaemonEnv;
80
- const runtimeState = yield* DaemonState;
81
- return snapshot(env.configPath, runtimeState);
82
- }),
83
- "config.update": update,
84
- "config.import": update,
85
- "providers.set": (params) => Effect.gen(function* () {
86
- const env = yield* DaemonEnv;
87
- const runtimeState = yield* DaemonState;
88
- const generations = yield* Generations;
89
- return yield* runtimeState.serializeEffect(Effect.gen(function* () {
90
- const document = yield* updateProviderDocument(runtimeState.document, params.provider, params.enabled);
91
- const config = yield* parseConfigDocumentEffect(document);
92
- yield* generations.replace(config, document, {
93
- write: true,
94
- configRevision: true
95
- });
96
- return snapshot(env.configPath, runtimeState);
97
- }));
98
- })
99
- };
100
- }
101
- }
58
+ return snapshot(env.configPath, runtimeState);
59
+ }));
60
+ });
61
+ /** Owns config mutations and generation publication use cases. */
62
+ export const routerGenerationHandlers = {
63
+ "daemon.reload": (params) => Effect.gen(function* () {
64
+ const env = yield* DaemonEnv;
65
+ const runtimeState = yield* DaemonState;
66
+ const generations = yield* Generations;
67
+ return yield* runtimeState.serializeEffect(Effect.gen(function* () {
68
+ if (params.expectedRevision !== undefined &&
69
+ params.expectedRevision !== runtimeState.revisions.config) {
70
+ return yield* Effect.fail(revisionConflict(params.expectedRevision, runtimeState.revisions.config));
71
+ }
72
+ const document = yield* canonicalConfigDocumentEffect(env.configPath);
73
+ const config = yield* parseConfigDocumentEffect(document);
74
+ yield* generations.replace(config, document, {
75
+ write: false,
76
+ configRevision: true
77
+ });
78
+ return {
79
+ reloaded: true,
80
+ configRevision: runtimeState.revisions.config,
81
+ accountRevision: runtimeState.revisions.accounts
82
+ };
83
+ }));
84
+ }),
85
+ "config.get": () => Effect.gen(function* () {
86
+ const env = yield* DaemonEnv;
87
+ const runtimeState = yield* DaemonState;
88
+ return snapshot(env.configPath, runtimeState);
89
+ }),
90
+ "config.update": update,
91
+ "config.import": update,
92
+ "providers.set": (params) => Effect.gen(function* () {
93
+ const env = yield* DaemonEnv;
94
+ const runtimeState = yield* DaemonState;
95
+ const generations = yield* Generations;
96
+ return yield* runtimeState.serializeEffect(Effect.gen(function* () {
97
+ const document = yield* updateProviderDocument(runtimeState.document, params.provider, params.enabled);
98
+ const config = yield* parseConfigDocumentEffect(document);
99
+ yield* generations.replace(config, document, {
100
+ write: true,
101
+ configRevision: true
102
+ });
103
+ return snapshot(env.configPath, runtimeState);
104
+ }));
105
+ })
106
+ };
@@ -1,7 +1,9 @@
1
- import type { EvalSessionLimits, EvalSessionPurpose, RouteKitControlResults } from "@velum-labs/routekit-control";
1
+ import type { EvalSessionEvidenceRequired, EvalSessionExecutionEvidence, EvalSessionLimits, EvalSessionPurpose, HttpSubmissionBinding, RouteKitControlParams, RouteKitControlResults } from "@velum-labs/routekit-control";
2
2
  import type { EffectRouteKitControlHandlers } from "@velum-labs/routekit-control/effect";
3
3
  import type { GatewayPrincipal } from "@velum-labs/routekit-gateway";
4
- import { Context, Layer } from "effect";
4
+ import { type HttpSubmissionAuthorityService, HttpSubmissionError } from "@velum-labs/routekit-runtime/effect";
5
+ import { Context, Effect, Layer } from "effect";
6
+ import { type EvalSessionExecutionStore } from "../../eval-session-execution-store.js";
5
7
  export type OpenEvalSessionInput = {
6
8
  purpose: EvalSessionPurpose;
7
9
  operationId: string;
@@ -10,27 +12,37 @@ export type OpenEvalSessionInput = {
10
12
  expiresInSeconds: number;
11
13
  gatewayUrl: string;
12
14
  targetIdentity: string;
15
+ evidenceRequired?: EvalSessionEvidenceRequired;
13
16
  };
14
17
  export type EvalSessionManagerOptions = {
15
18
  now?: () => number;
16
19
  random?: (bytes: number) => Buffer;
20
+ store?: EvalSessionExecutionStore;
17
21
  };
18
- /** Daemon-owned, memory-only registry for short-lived eval credentials. */
22
+ /** Ephemeral bearer credentials with a separate durable, payload-free execution authority. */
19
23
  export declare class EvalSessionManager {
20
24
  #private;
21
25
  constructor(options?: EvalSessionManagerOptions);
22
26
  open(input: OpenEvalSessionInput): RouteKitControlResults["evalSession.open"];
27
+ initialize(): Effect.Effect<void, HttpSubmissionError>;
28
+ openEffect(input: OpenEvalSessionInput): Effect.Effect<RouteKitControlResults["evalSession.open"], HttpSubmissionError>;
23
29
  close(sessionId: string): boolean;
30
+ closeEffect(sessionId: string): Effect.Effect<boolean, HttpSubmissionError>;
31
+ bindIngress(sessionId: string, input: {
32
+ requestDigest: string;
33
+ model: string;
34
+ }): Effect.Effect<HttpSubmissionBinding, HttpSubmissionError>;
35
+ resolveSubmission(binding: HttpSubmissionBinding): Effect.Effect<HttpSubmissionAuthorityService, HttpSubmissionError>;
36
+ executionEvidence(identity: RouteKitControlParams["evalSession.executionEvidence"]): Effect.Effect<EvalSessionExecutionEvidence, HttpSubmissionError>;
37
+ shutdown(): Effect.Effect<void, HttpSubmissionError>;
24
38
  closeAll(): void;
25
39
  resolve(presented: string): GatewayPrincipal | undefined;
26
40
  }
27
41
  declare const EvalSessions_base: Context.ServiceClass<EvalSessions, "@velum-labs/routekit-daemon/EvalSessions", EvalSessionManager>;
28
42
  export declare class EvalSessions extends EvalSessions_base {
29
- static layer(options?: EvalSessionManagerOptions): Layer.Layer<EvalSessions, never, never>;
43
+ static layer(options?: EvalSessionManagerOptions): Layer.Layer<EvalSessions, HttpSubmissionError, never>;
30
44
  }
31
- type EvalSessionHandlers = Pick<EffectRouteKitControlHandlers, "evalSession.open" | "evalSession.close">;
45
+ type EvalSessionHandlers = Pick<EffectRouteKitControlHandlers, "evalSession.open" | "evalSession.close" | "evalSession.executionEvidence">;
32
46
  /** Owns short-lived, model-restricted eval data-plane sessions. */
33
- export declare class EvalSessionApplicationService {
34
- handlers(): EvalSessionHandlers;
35
- }
47
+ export declare const evalSessionHandlers: EvalSessionHandlers;
36
48
  export {};