Use native runtimes for flow entrypoints

This commit is contained in:
elpresidank 2026-06-02 02:34:03 -05:00
parent 54fc21b38d
commit 74955d6041
38 changed files with 233 additions and 134 deletions

View file

@ -12,12 +12,12 @@ Verified source roots:
- Effect v4 subtree: `/home/elpresidank/YeeBois/projects/beep-effect2/.repos/effect-v4` - Effect v4 subtree: `/home/elpresidank/YeeBois/projects/beep-effect2/.repos/effect-v4`
- Installed Effect beta used by this workspace: `ts/node_modules/effect` - Installed Effect beta used by this workspace: `ts/node_modules/effect`
Current signal counts from `ts/packages` after the 2026-06-02 Client socket Current signal counts from `ts/packages` after the 2026-06-02 Service
tagged error slice: entrypoint runtime slice:
| Signal | Count | | Signal | Count |
| --- | ---: | | --- | ---: |
| `Effect.runPromise` | 203 | | `Effect.runPromise` | 185 |
| `Map<` | 88 | | `Map<` | 88 |
| `WebSocket` | 72 | | `WebSocket` | 72 |
| `new Map` | 62 | | `new Map` | 62 |
@ -58,6 +58,10 @@ Notes:
`trustgraph-socket.ts` normal `Error`, raw `JSON.parse`, and listener `trustgraph-socket.ts` normal `Error`, raw `JSON.parse`, and listener
`try`/`catch` matches. The remaining client socket modernization signal is `try`/`catch` matches. The remaining client socket modernization signal is
the shared `newableFactory` constructor assertion pattern. the shared `newableFactory` constructor assertion pattern.
- The service entrypoint runtime slice dropped the `Effect.runPromise` count by
replacing remaining flow service `run()` program facades with
`ManagedRuntime` and routing local `ts/scripts/run-*` launchers through
`runMain()`/`NodeRuntime.runMain`.
- `Record<string, any>` and `throwLibrarianServiceError` are now clean in - `Record<string, any>` and `throwLibrarianServiceError` are now clean in
`ts/packages`. `ts/packages`.
@ -457,6 +461,30 @@ Notes:
- Current client/root verification from the tagged error slice covers this - Current client/root verification from the tagged error slice covers this
no-op decision. no-op decision.
### 2026-06-02: Service Entrypoint Runtime Slice
- Status: migrated and root-verified.
- Completed:
- Remaining flow service `run(): Promise<void>` program facades now use
`ManagedRuntime.make(Layer.empty)` instead of direct
`Effect.runPromise(program)`.
- Remaining flow service modules now expose `runMain()` through
`NodeRuntime.runMain(program)`.
- Local `ts/scripts/run-*` launchers for gateway, prompt, chunker,
extractor, PDF decoder, embeddings, triples, graph/document embeddings,
text-completion providers, and MCP tool service now delegate directly to
`runMain()`.
- Direct `Effect.runPromise(program)` matches in `ts/packages/flow/src` are
clean. Remaining `Effect.runPromise` matches are callback/Promise
compatibility boundaries for later slices.
- Verification:
- `bun run --cwd ts/packages/flow build`
- `git diff --check`
- `cd ts && bun run check`
- `bun run --cwd ts/packages/flow test`
- `cd ts && bun run build`
- `cd ts && bun run test`
## Subagent Findings To Preserve ## Subagent Findings To Preserve
- MCP/workbench: - MCP/workbench:
@ -470,6 +498,9 @@ Notes:
ref-backed state slices are complete. Follow-up service work should focus ref-backed state slices are complete. Follow-up service work should focus
on scoped layers, schedules where polling semantics allow, and managed on scoped layers, schedules where polling semantics allow, and managed
persistence providers rather than direct mutable service fields. persistence providers rather than direct mutable service fields.
- Flow service startup facades now consistently use `ManagedRuntime`, and
local scripts should delegate to `runMain()` instead of adding local
`.catch(console.error/process.exit)` wrappers.
- Persistence IO should move toward `FileSystem` or `KeyValueStore` where - Persistence IO should move toward `FileSystem` or `KeyValueStore` where
the installed beta has the needed provider surface. the installed beta has the needed provider surface.
- Base messaging/processors: - Base messaging/processors:

View file

@ -1 +1 @@
export { McpToolService, run } from "./service.js"; export { McpToolService, run, runMain } from "./service.js";

View file

@ -12,6 +12,7 @@
import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { NodeRuntime } from "@effect/platform-node";
import { import {
makeFlowProcessor, makeFlowProcessor,
@ -29,7 +30,7 @@ import {
type MessagingDeliveryError, type MessagingDeliveryError,
type Spec, type Spec,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { Context, Effect, Layer, Ref } from "effect"; import { Context, Effect, Layer, ManagedRuntime, Ref } from "effect";
import * as O from "effect/Option"; import * as O from "effect/Option";
import * as S from "effect/Schema"; import * as S from "effect/Schema";
@ -315,6 +316,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig, never, McpToolR
layer: () => McpToolRuntimeLive, layer: () => McpToolRuntimeLive,
}); });
const mcpToolRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return mcpToolRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -24,8 +24,9 @@ import {
type Triples, type Triples,
type Spec, type Spec,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { NodeRuntime } from "@effect/platform-node";
import { makeFlowProcessorProgram } from "@trustgraph/base"; import { makeFlowProcessorProgram } from "@trustgraph/base";
import { Effect } from "effect"; import { Effect, Layer, ManagedRuntime } from "effect";
import { recursiveSplit } from "./recursive-splitter.js"; import { recursiveSplit } from "./recursive-splitter.js";
const DEFAULT_CHUNK_SIZE = 2000; const DEFAULT_CHUNK_SIZE = 2000;
@ -102,6 +103,12 @@ export const program = makeFlowProcessorProgram({
specs: () => makeChunkingSpecs(), specs: () => makeChunkingSpecs(),
}); });
const chunkingRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return chunkingRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -36,8 +36,9 @@ import {
type Spec, type Spec,
errorMessage, errorMessage,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { NodeRuntime } from "@effect/platform-node";
import { makeFlowProcessorProgram } from "@trustgraph/base"; import { makeFlowProcessorProgram } from "@trustgraph/base";
import { Clock, Effect } from "effect"; import { Clock, Effect, Layer, ManagedRuntime } from "effect";
import * as S from "effect/Schema"; import * as S from "effect/Schema";
export class PdfDecoderError extends S.TaggedErrorClass<PdfDecoderError>()( export class PdfDecoderError extends S.TaggedErrorClass<PdfDecoderError>()(
@ -252,6 +253,12 @@ export const program = makeFlowProcessorProgram({
specs: () => makePdfDecoderSpecs(), specs: () => makePdfDecoderSpecs(),
}); });
const pdfDecoderRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return pdfDecoderRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -4,7 +4,8 @@
* Python reference: trustgraph-flow/trustgraph/embeddings/ollama/processor.py * Python reference: trustgraph-flow/trustgraph/embeddings/ollama/processor.py
*/ */
import { Config, Effect, Layer } from "effect"; import { NodeRuntime } from "@effect/platform-node";
import { Config, Effect, Layer, ManagedRuntime } from "effect";
import * as O from "effect/Option"; import * as O from "effect/Option";
import * as S from "effect/Schema"; import * as S from "effect/Schema";
import { import {
@ -154,6 +155,12 @@ export const program = makeFlowProcessorProgram<OllamaEmbeddingsConfig, never, E
layer: (config) => OllamaEmbeddingsLive(config), layer: (config) => OllamaEmbeddingsLive(config),
}); });
const ollamaEmbeddingsRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return ollamaEmbeddingsRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -34,7 +34,8 @@ import {
type EffectRequestResponse, type EffectRequestResponse,
type Spec, type Spec,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { Effect } from "effect"; import { NodeRuntime } from "@effect/platform-node";
import { Effect, Layer, ManagedRuntime } from "effect";
import * as O from "effect/Option"; import * as O from "effect/Option";
import * as S from "effect/Schema"; import * as S from "effect/Schema";
@ -386,6 +387,12 @@ export const program = makeFlowProcessorProgram({
specs: () => makeKnowledgeExtractSpecs(), specs: () => makeKnowledgeExtractSpecs(),
}); });
const knowledgeExtractRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return knowledgeExtractRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -9,7 +9,8 @@
import Fastify, { type FastifyReply } from "fastify"; import Fastify, { type FastifyReply } from "fastify";
import websocketPlugin from "@fastify/websocket"; import websocketPlugin from "@fastify/websocket";
import { Clock, Config, Effect, Exit, Random, Scope } from "effect"; import { NodeRuntime } from "@effect/platform-node";
import { Clock, Config, Effect, Exit, Layer, ManagedRuntime, Random, Scope } from "effect";
import * as O from "effect/Option"; import * as O from "effect/Option";
import * as RpcSerialization from "effect/unstable/rpc/RpcSerialization"; import * as RpcSerialization from "effect/unstable/rpc/RpcSerialization";
import * as EffectSocket from "effect/unstable/socket/Socket"; import * as EffectSocket from "effect/unstable/socket/Socket";
@ -258,7 +259,11 @@ function headersFrom(headers: Record<string, string | string[] | number | undefi
} }
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return gatewayRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }
export const loadGatewayConfig = Effect.fn("loadGatewayConfig")(function* () { export const loadGatewayConfig = Effect.fn("loadGatewayConfig")(function* () {
@ -291,3 +296,5 @@ export const program = Effect.scoped(
return yield* Effect.never; return yield* Effect.never;
}), }),
); );
const gatewayRuntime = ManagedRuntime.make(Layer.empty);

View file

@ -9,6 +9,7 @@
*/ */
import { AzureOpenAI } from "openai"; import { AzureOpenAI } from "openai";
import { NodeRuntime } from "@effect/platform-node";
import { import {
Llm, Llm,
makeLlmService, makeLlmService,
@ -20,7 +21,7 @@ import {
type LlmResult, type LlmResult,
type LlmChunk, type LlmChunk,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { Effect, Layer, Stream } from "effect"; import { Effect, Layer, ManagedRuntime, Stream } from "effect";
import { import {
optionalStringConfig, optionalStringConfig,
providerStatusError, providerStatusError,
@ -229,6 +230,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig, never, Llm>({
), ),
}); });
const azureOpenAITextCompletionRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return azureOpenAITextCompletionRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -5,6 +5,7 @@
*/ */
import Anthropic from "@anthropic-ai/sdk"; import Anthropic from "@anthropic-ai/sdk";
import { NodeRuntime } from "@effect/platform-node";
import { import {
Llm, Llm,
makeLlmService, makeLlmService,
@ -16,7 +17,7 @@ import {
type LlmResult, type LlmResult,
type LlmChunk, type LlmChunk,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { Effect, Layer, Stream } from "effect"; import { Effect, Layer, ManagedRuntime, Stream } from "effect";
import { import {
optionalStringConfig, optionalStringConfig,
providerStatusError, providerStatusError,
@ -209,6 +210,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig, never, Llm>({
), ),
}); });
const claudeTextCompletionRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return claudeTextCompletionRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -7,6 +7,7 @@
*/ */
import { Mistral } from "@mistralai/mistralai"; import { Mistral } from "@mistralai/mistralai";
import { NodeRuntime } from "@effect/platform-node";
import { import {
Llm, Llm,
makeLlmService, makeLlmService,
@ -18,7 +19,7 @@ import {
type LlmResult, type LlmResult,
type LlmChunk, type LlmChunk,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { Effect, Layer, Stream } from "effect"; import { Effect, Layer, ManagedRuntime, Stream } from "effect";
import { import {
optionalStringConfig, optionalStringConfig,
providerStatusError, providerStatusError,
@ -208,6 +209,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig, never, Llm>({
), ),
}); });
const mistralTextCompletionRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return mistralTextCompletionRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -7,6 +7,7 @@
*/ */
import { Ollama } from "ollama"; import { Ollama } from "ollama";
import { NodeRuntime } from "@effect/platform-node";
import { import {
Llm, Llm,
makeLlmService, makeLlmService,
@ -18,7 +19,7 @@ import {
type LlmResult, type LlmResult,
type LlmChunk, type LlmChunk,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { Effect, Layer, Stream } from "effect"; import { Effect, Layer, ManagedRuntime, Stream } from "effect";
import { import {
optionalStringConfig, optionalStringConfig,
providerRuntimeError, providerRuntimeError,
@ -187,6 +188,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig, never, Llm>({
), ),
}); });
const ollamaTextCompletionRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return ollamaTextCompletionRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -10,6 +10,7 @@
*/ */
import OpenAI from "openai"; import OpenAI from "openai";
import { NodeRuntime } from "@effect/platform-node";
import { import {
Llm, Llm,
makeLlmService, makeLlmService,
@ -21,7 +22,7 @@ import {
type LlmResult, type LlmResult,
type LlmChunk, type LlmChunk,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { Effect, Layer, Stream } from "effect"; import { Effect, Layer, ManagedRuntime, Stream } from "effect";
import { import {
optionalStringConfig, optionalStringConfig,
providerStatusError, providerStatusError,
@ -220,6 +221,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig, never, Llm>({
), ),
}); });
const openAICompatibleTextCompletionRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return openAICompatibleTextCompletionRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -5,6 +5,7 @@
*/ */
import OpenAI from "openai"; import OpenAI from "openai";
import { NodeRuntime } from "@effect/platform-node";
import { import {
Llm, Llm,
makeLlmService, makeLlmService,
@ -16,7 +17,7 @@ import {
type LlmResult, type LlmResult,
type LlmChunk, type LlmChunk,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { Effect, Layer, Stream } from "effect"; import { Effect, Layer, ManagedRuntime, Stream } from "effect";
import { import {
optionalStringConfig, optionalStringConfig,
providerStatusError, providerStatusError,
@ -211,6 +212,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig, never, Llm>({
), ),
}); });
const openAITextCompletionRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return openAITextCompletionRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -38,8 +38,9 @@ import {
type PromptResponse, type PromptResponse,
type Spec, type Spec,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { NodeRuntime } from "@effect/platform-node";
import { makeFlowProcessorProgram } from "@trustgraph/base"; import { makeFlowProcessorProgram } from "@trustgraph/base";
import { Effect } from "effect"; import { Effect, Layer, ManagedRuntime } from "effect";
import * as S from "effect/Schema"; import * as S from "effect/Schema";
export interface PromptTemplate { export interface PromptTemplate {
@ -195,6 +196,12 @@ export const program = makeFlowProcessorProgram({
configHandlers: (config: PromptTemplateConfig) => promptTemplateRuntime(config).configHandlers, configHandlers: (config: PromptTemplateConfig) => promptTemplateRuntime(config).configHandlers,
}); });
const promptRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return promptRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -20,8 +20,9 @@ import {
type DocumentEmbeddingsResponse, type DocumentEmbeddingsResponse,
type Spec, type Spec,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { NodeRuntime } from "@effect/platform-node";
import { makeFlowProcessorProgram } from "@trustgraph/base"; import { makeFlowProcessorProgram } from "@trustgraph/base";
import { Effect } from "effect"; import { Effect, Layer, ManagedRuntime } from "effect";
import { import {
QdrantDocEmbeddingsQueryLive, QdrantDocEmbeddingsQueryLive,
QdrantDocEmbeddingsQueryService, QdrantDocEmbeddingsQueryService,
@ -113,6 +114,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig & QdrantDocQuery
layer: (config) => QdrantDocEmbeddingsQueryLive(config), layer: (config) => QdrantDocEmbeddingsQueryLive(config),
}); });
const docEmbeddingsQueryRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return docEmbeddingsQueryRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -20,8 +20,9 @@ import {
type GraphEmbeddingsResponse, type GraphEmbeddingsResponse,
type Spec, type Spec,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { NodeRuntime } from "@effect/platform-node";
import { makeFlowProcessorProgram } from "@trustgraph/base"; import { makeFlowProcessorProgram } from "@trustgraph/base";
import { Effect } from "effect"; import { Effect, Layer, ManagedRuntime } from "effect";
import { import {
QdrantGraphEmbeddingsQueryLive, QdrantGraphEmbeddingsQueryLive,
QdrantGraphEmbeddingsQueryService, QdrantGraphEmbeddingsQueryService,
@ -114,6 +115,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig & QdrantGraphQue
layer: (config) => QdrantGraphEmbeddingsQueryLive(config), layer: (config) => QdrantGraphEmbeddingsQueryLive(config),
}); });
const graphEmbeddingsQueryRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return graphEmbeddingsQueryRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -20,8 +20,9 @@ import {
type TriplesQueryResponse, type TriplesQueryResponse,
type Spec, type Spec,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { NodeRuntime } from "@effect/platform-node";
import { makeFlowProcessorProgram } from "@trustgraph/base"; import { makeFlowProcessorProgram } from "@trustgraph/base";
import { Effect } from "effect"; import { Effect, Layer, ManagedRuntime } from "effect";
import { import {
FalkorDBTriplesQueryLive, FalkorDBTriplesQueryLive,
FalkorDBTriplesQueryService, FalkorDBTriplesQueryService,
@ -100,6 +101,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig & FalkorDBQueryC
layer: (config) => FalkorDBTriplesQueryLive(config), layer: (config) => FalkorDBTriplesQueryLive(config),
}); });
const triplesQueryRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return triplesQueryRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -24,8 +24,9 @@ import {
type EmbeddingsResponse, type EmbeddingsResponse,
type Spec, type Spec,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { NodeRuntime } from "@effect/platform-node";
import { makeFlowProcessorProgram } from "@trustgraph/base"; import { makeFlowProcessorProgram } from "@trustgraph/base";
import { Effect } from "effect"; import { Effect, Layer, ManagedRuntime } from "effect";
import { import {
QdrantGraphEmbeddingsStoreLive, QdrantGraphEmbeddingsStoreLive,
QdrantGraphEmbeddingsStoreService, QdrantGraphEmbeddingsStoreService,
@ -119,6 +120,12 @@ export const program = makeFlowProcessorProgram<
layer: (config) => QdrantGraphEmbeddingsStoreLive(config), layer: (config) => QdrantGraphEmbeddingsStoreLive(config),
}); });
const graphEmbeddingsStoreRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return graphEmbeddingsStoreRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -17,8 +17,9 @@ import {
type Triples, type Triples,
type Spec, type Spec,
} from "@trustgraph/base"; } from "@trustgraph/base";
import { NodeRuntime } from "@effect/platform-node";
import { makeFlowProcessorProgram } from "@trustgraph/base"; import { makeFlowProcessorProgram } from "@trustgraph/base";
import { Effect } from "effect"; import { Effect, Layer, ManagedRuntime } from "effect";
import { import {
FalkorDBTriplesStoreLive, FalkorDBTriplesStoreLive,
FalkorDBTriplesStoreService, FalkorDBTriplesStoreService,
@ -78,6 +79,12 @@ export const program = makeFlowProcessorProgram<ProcessorConfig & FalkorDBConfig
layer: (config) => FalkorDBTriplesStoreLive(config), layer: (config) => FalkorDBTriplesStoreLive(config),
}); });
const triplesStoreRuntime = ManagedRuntime.make(Layer.empty);
export function run(): Promise<void> { export function run(): Promise<void> {
return Effect.runPromise(program); return triplesStoreRuntime.runPromise(program);
}
export function runMain(): void {
NodeRuntime.runMain(program);
} }

View file

@ -1,6 +1,3 @@
import { run } from "../packages/flow/src/chunking/service.js"; import { runMain } from "../packages/flow/src/chunking/service.js";
run().catch((err) => { runMain();
console.error("Chunking service failed:", err);
process.exit(1);
});

View file

@ -1,6 +1,3 @@
import { run } from "../packages/flow/src/query/embeddings/qdrant-doc-service.js"; import { runMain } from "../packages/flow/src/query/embeddings/qdrant-doc-service.js";
run().catch((err) => { runMain();
console.error("Document embeddings query service failed:", err);
process.exit(1);
});

View file

@ -1,6 +1,3 @@
import { run } from "../packages/flow/src/embeddings/ollama.js"; import { runMain } from "../packages/flow/src/embeddings/ollama.js";
run().catch((err) => { runMain();
console.error("Embeddings service failed:", err);
process.exit(1);
});

View file

@ -1,6 +1,3 @@
import { run } from "../packages/flow/src/extract/knowledge-extract.js"; import { runMain } from "../packages/flow/src/extract/knowledge-extract.js";
run().catch((err) => { runMain();
console.error("Knowledge extract service failed:", err);
process.exit(1);
});

View file

@ -8,9 +8,6 @@
* GATEWAY_PORT (default: 8088) * GATEWAY_PORT (default: 8088)
* GATEWAY_SECRET (optional) * GATEWAY_SECRET (optional)
*/ */
import { run } from "../packages/flow/src/gateway/server.js"; import { runMain } from "../packages/flow/src/gateway/server.js";
run().catch((err) => { runMain();
console.error("Gateway failed to start:", err);
process.exit(1);
});

View file

@ -1,6 +1,3 @@
import { run } from "../packages/flow/src/query/embeddings/qdrant-graph-service.js"; import { runMain } from "../packages/flow/src/query/embeddings/qdrant-graph-service.js";
run().catch((err) => { runMain();
console.error("Graph embeddings query service failed:", err);
process.exit(1);
});

View file

@ -1,6 +1,3 @@
import { run } from "../packages/flow/src/storage/embeddings/graph-embeddings-service.js"; import { runMain } from "../packages/flow/src/storage/embeddings/graph-embeddings-service.js";
run().catch((err) => { runMain();
console.error("Graph embeddings store service failed:", err);
process.exit(1);
});

View file

@ -10,9 +10,6 @@
* AZURE_MODEL (default: gpt-4o) * AZURE_MODEL (default: gpt-4o)
* AZURE_API_VERSION (default: 2024-12-01-preview) * AZURE_API_VERSION (default: 2024-12-01-preview)
*/ */
import { run } from "../packages/flow/src/model/text-completion/azure-openai.js"; import { runMain } from "../packages/flow/src/model/text-completion/azure-openai.js";
run().catch((err) => { runMain();
console.error("Azure OpenAI LLM service failed:", err);
process.exit(1);
});

View file

@ -7,9 +7,6 @@
* NATS_URL (default: nats://localhost:4222) * NATS_URL (default: nats://localhost:4222)
* CLAUDE_KEY (required) * CLAUDE_KEY (required)
*/ */
import { run } from "../packages/flow/src/model/text-completion/claude.js"; import { runMain } from "../packages/flow/src/model/text-completion/claude.js";
run().catch((err) => { runMain();
console.error("Claude LLM service failed:", err);
process.exit(1);
});

View file

@ -8,9 +8,6 @@
* MISTRAL_TOKEN (required) * MISTRAL_TOKEN (required)
* MISTRAL_MODEL (default: ministral-8b-latest) * MISTRAL_MODEL (default: ministral-8b-latest)
*/ */
import { run } from "../packages/flow/src/model/text-completion/mistral.js"; import { runMain } from "../packages/flow/src/model/text-completion/mistral.js";
run().catch((err) => { runMain();
console.error("Mistral LLM service failed:", err);
process.exit(1);
});

View file

@ -9,9 +9,6 @@
* OPENAI_COMPAT_KEY (default: sk-no-key-required) * OPENAI_COMPAT_KEY (default: sk-no-key-required)
* OPENAI_COMPAT_MODEL (default: default) * OPENAI_COMPAT_MODEL (default: default)
*/ */
import { run } from "../packages/flow/src/model/text-completion/openai-compatible.js"; import { runMain } from "../packages/flow/src/model/text-completion/openai-compatible.js";
run().catch((err) => { runMain();
console.error("OpenAI-compatible LLM service failed:", err);
process.exit(1);
});

View file

@ -8,9 +8,6 @@
* OPENAI_TOKEN (required) * OPENAI_TOKEN (required)
* OPENAI_BASE_URL (optional) * OPENAI_BASE_URL (optional)
*/ */
import { run } from "../packages/flow/src/model/text-completion/openai.js"; import { runMain } from "../packages/flow/src/model/text-completion/openai.js";
run().catch((err) => { runMain();
console.error("OpenAI LLM service failed:", err);
process.exit(1);
});

View file

@ -6,13 +6,6 @@
* Env: * Env:
* NATS_URL (default: nats://localhost:4222) * NATS_URL (default: nats://localhost:4222)
*/ */
import { run as runMcpToolService } from "../packages/flow/src/agent/mcp-tool/index.js"; import { runMain } from "../packages/flow/src/agent/mcp-tool/index.js";
async function run(): Promise<void> { runMain();
await runMcpToolService();
}
run().catch((err) => {
console.error("MCP tool service failed:", err);
process.exit(1);
});

View file

@ -8,9 +8,6 @@
* OLLAMA_URL (default: http://localhost:11434) * OLLAMA_URL (default: http://localhost:11434)
* OLLAMA_MODEL (default: qwen2.5:0.5b) * OLLAMA_MODEL (default: qwen2.5:0.5b)
*/ */
import { run } from "../packages/flow/src/model/text-completion/ollama.js"; import { runMain } from "../packages/flow/src/model/text-completion/ollama.js";
run().catch((err) => { runMain();
console.error("Ollama LLM service failed:", err);
process.exit(1);
});

View file

@ -6,9 +6,6 @@
* Env: * Env:
* NATS_URL (default: nats://localhost:4222) * NATS_URL (default: nats://localhost:4222)
*/ */
import { run } from "../packages/flow/src/decoding/pdf-decoder.js"; import { runMain } from "../packages/flow/src/decoding/pdf-decoder.js";
run().catch((err) => { runMain();
console.error("PDF decoder service failed:", err);
process.exit(1);
});

View file

@ -6,9 +6,6 @@
* Env: * Env:
* NATS_URL (default: nats://localhost:4222) * NATS_URL (default: nats://localhost:4222)
*/ */
import { run } from "../packages/flow/src/prompt/template.js"; import { runMain } from "../packages/flow/src/prompt/template.js";
run().catch((err) => { runMain();
console.error("Prompt service failed:", err);
process.exit(1);
});

View file

@ -1,6 +1,3 @@
import { run } from "../packages/flow/src/query/triples/falkordb-service.js"; import { runMain } from "../packages/flow/src/query/triples/falkordb-service.js";
run().catch((err) => { runMain();
console.error("Triples query service failed:", err);
process.exit(1);
});

View file

@ -1,6 +1,3 @@
import { run } from "../packages/flow/src/storage/triples/falkordb-service.js"; import { runMain } from "../packages/flow/src/storage/triples/falkordb-service.js";
run().catch((err) => { runMain();
console.error("Triples store service failed:", err);
process.exit(1);
});