@lota-sdk/core 0.4.8 → 0.4.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +11 -12
- package/src/ai/embedding-cache.ts +96 -22
- package/src/ai-gateway/ai-gateway.ts +766 -223
- package/src/config/agent-defaults.ts +189 -75
- package/src/config/agent-types.ts +54 -4
- package/src/config/background-processing.ts +1 -1
- package/src/config/constants.ts +8 -2
- package/src/config/index.ts +0 -1
- package/src/config/logger.ts +299 -19
- package/src/config/thread-defaults.ts +40 -20
- package/src/create-runtime.ts +200 -449
- package/src/db/base.service.ts +52 -28
- package/src/db/cursor-pagination.ts +71 -30
- package/src/db/memory-query-builder.ts +2 -1
- package/src/db/memory-store.helpers.ts +4 -7
- package/src/db/memory-store.ts +868 -601
- package/src/db/memory.ts +396 -280
- package/src/db/record-id.ts +32 -10
- package/src/db/schema-fingerprint.ts +30 -12
- package/src/db/service-normalization.ts +288 -0
- package/src/db/service.ts +912 -779
- package/src/db/startup.ts +153 -68
- package/src/db/transaction-conflict.ts +15 -0
- package/src/effect/awaitable-effect.ts +96 -0
- package/src/effect/errors.ts +121 -0
- package/src/effect/helpers.ts +123 -0
- package/src/effect/index.ts +24 -0
- package/src/effect/layers.ts +238 -0
- package/src/effect/runtime-ref.ts +25 -0
- package/src/effect/runtime.ts +46 -0
- package/src/effect/services.ts +61 -0
- package/src/effect/zod.ts +43 -0
- package/src/embeddings/provider.ts +128 -83
- package/src/index.ts +48 -1
- package/src/openrouter/direct-provider.ts +11 -35
- package/src/queues/autonomous-job.queue.ts +117 -73
- package/src/queues/context-compaction.queue.ts +50 -17
- package/src/queues/delayed-node-promotion.queue.ts +46 -17
- package/src/queues/document-processor.queue.ts +52 -77
- package/src/queues/memory-consolidation.queue.ts +47 -32
- package/src/queues/organization-learning.queue.ts +26 -4
- package/src/queues/plan-agent-heartbeat.queue.ts +71 -24
- package/src/queues/plan-scheduler.queue.ts +97 -33
- package/src/queues/post-chat-memory.queue.ts +56 -26
- package/src/queues/queue-factory.ts +227 -59
- package/src/queues/standalone-worker.ts +39 -0
- package/src/queues/title-generation.queue.ts +45 -11
- package/src/redis/connection.ts +182 -113
- package/src/redis/index.ts +6 -8
- package/src/redis/org-memory-lock.ts +60 -27
- package/src/redis/redis-lease-lock.ts +200 -121
- package/src/redis/runtime-connection.ts +20 -0
- package/src/redis/stream-context.ts +92 -46
- package/src/runtime/agent-identity-overrides.ts +2 -2
- package/src/runtime/agent-runtime-policy.ts +5 -2
- package/src/runtime/agent-stream-helpers.ts +24 -9
- package/src/runtime/chat-run-orchestration.ts +102 -19
- package/src/runtime/chat-run-registry.ts +36 -2
- package/src/runtime/context-compaction/context-compaction-runtime.ts +107 -0
- package/src/runtime/{context-compaction.ts → context-compaction/context-compaction.ts} +161 -94
- package/src/runtime/domain-layer.ts +192 -0
- package/src/runtime/execution-plan-visibility.ts +2 -2
- package/src/runtime/execution-plan.ts +42 -15
- package/src/runtime/graph-designer.ts +16 -4
- package/src/runtime/helper-model.ts +139 -48
- package/src/runtime/index.ts +7 -8
- package/src/runtime/indexed-repositories-policy.ts +3 -3
- package/src/runtime/{memory-block.ts → memory/memory-block.ts} +50 -36
- package/src/runtime/{memory-digest-policy.ts → memory/memory-digest-policy.ts} +1 -1
- package/src/runtime/{memory-pipeline.ts → memory/memory-pipeline.ts} +54 -67
- package/src/runtime/{memory-prompts-fact.ts → memory/memory-prompts-fact.ts} +2 -2
- package/src/runtime/memory/memory-scope.ts +53 -0
- package/src/runtime/plugin-resolution.ts +124 -25
- package/src/runtime/plugin-types.ts +9 -1
- package/src/runtime/post-turn-side-effects.ts +177 -130
- package/src/runtime/retrieval-adapters.ts +40 -6
- package/src/runtime/runtime-accessors.ts +92 -0
- package/src/runtime/runtime-config.ts +150 -61
- package/src/runtime/runtime-extensions.ts +23 -25
- package/src/runtime/runtime-lifecycle.ts +124 -0
- package/src/runtime/runtime-services.ts +386 -0
- package/src/runtime/runtime-token.ts +47 -0
- package/src/runtime/social-chat/social-chat-agent-runner.ts +159 -0
- package/src/runtime/{social-chat-history.ts → social-chat/social-chat-history.ts} +51 -20
- package/src/runtime/social-chat/social-chat.ts +630 -0
- package/src/runtime/specialist-runner.ts +36 -10
- package/src/runtime/team-consultation/team-consultation-orchestrator.ts +433 -0
- package/src/runtime/{team-consultation-prompts.ts → team-consultation/team-consultation-prompts.ts} +6 -2
- package/src/runtime/thread-chat-helpers.ts +2 -2
- package/src/runtime/thread-plan-turn.ts +2 -1
- package/src/runtime/thread-turn-context.ts +183 -111
- package/src/runtime/turn-lifecycle.ts +93 -27
- package/src/services/agent-activity.service.ts +287 -203
- package/src/services/agent-executor.service.ts +253 -149
- package/src/services/artifact.service.ts +231 -149
- package/src/services/attachment.service.ts +171 -115
- package/src/services/autonomous-job.service.ts +890 -491
- package/src/services/background-work.service.ts +54 -0
- package/src/services/chat-run-registry.service.ts +13 -1
- package/src/services/context-compaction.service.ts +136 -86
- package/src/services/document-chunk.service.ts +151 -88
- package/src/services/execution-plan/execution-plan-approval.ts +26 -0
- package/src/services/execution-plan/execution-plan-context.ts +29 -0
- package/src/services/execution-plan/execution-plan-graph.ts +278 -0
- package/src/services/execution-plan/execution-plan-schedule.ts +84 -0
- package/src/services/execution-plan/execution-plan-spec.ts +75 -0
- package/src/services/execution-plan/execution-plan.service.ts +1041 -0
- package/src/services/feedback-loop.service.ts +132 -76
- package/src/services/global-orchestrator.service.ts +101 -168
- package/src/services/graph-full-routing.ts +193 -0
- package/src/services/index.ts +19 -21
- package/src/services/institutional-memory.service.ts +213 -125
- package/src/services/learned-skill.service.ts +368 -260
- package/src/services/memory/memory-conversation.ts +95 -0
- package/src/services/memory/memory-errors.ts +27 -0
- package/src/services/memory/memory-org-memory.ts +50 -0
- package/src/services/memory/memory-preseeded.ts +86 -0
- package/src/services/memory/memory-rerank.ts +297 -0
- package/src/services/{memory-utils.ts → memory/memory-utils.ts} +6 -5
- package/src/services/memory/memory.service.ts +674 -0
- package/src/services/memory/rerank.service.ts +201 -0
- package/src/services/monitoring-window.service.ts +92 -70
- package/src/services/mutating-approval.service.ts +62 -53
- package/src/services/node-workspace.service.ts +141 -98
- package/src/services/notification.service.ts +29 -16
- package/src/services/organization-member.service.ts +120 -66
- package/src/services/organization.service.ts +153 -77
- package/src/services/ownership-dispatcher.service.ts +456 -263
- package/src/services/plan/plan-agent-heartbeat.service.ts +234 -0
- package/src/services/plan/plan-agent-query.service.ts +322 -0
- package/src/services/{plan-approval.service.ts → plan/plan-approval.service.ts} +45 -22
- package/src/services/plan/plan-artifact.service.ts +60 -0
- package/src/services/plan/plan-builder.service.ts +76 -0
- package/src/services/plan/plan-checkpoint.service.ts +103 -0
- package/src/services/{plan-compiler.service.ts → plan/plan-compiler.service.ts} +26 -9
- package/src/services/plan/plan-completion-side-effects.ts +169 -0
- package/src/services/plan/plan-coordination.service.ts +181 -0
- package/src/services/plan/plan-cycle.service.ts +405 -0
- package/src/services/plan/plan-deadline.service.ts +533 -0
- package/src/services/plan/plan-event-delivery.service.ts +266 -0
- package/src/services/plan/plan-executor-context.ts +35 -0
- package/src/services/plan/plan-executor-graph.ts +522 -0
- package/src/services/plan/plan-executor-helpers.ts +307 -0
- package/src/services/plan/plan-executor-persistence.ts +209 -0
- package/src/services/plan/plan-executor.service.ts +1737 -0
- package/src/services/{plan-helpers.ts → plan/plan-helpers.ts} +1 -1
- package/src/services/{plan-run-data.ts → plan/plan-run-data.ts} +4 -4
- package/src/services/plan/plan-run-serialization.ts +15 -0
- package/src/services/plan/plan-run.service.ts +637 -0
- package/src/services/plan/plan-scheduler.service.ts +379 -0
- package/src/services/plan/plan-template.service.ts +224 -0
- package/src/services/plan/plan-transaction-events.ts +36 -0
- package/src/services/plan/plan-validator.service.ts +907 -0
- package/src/services/plan/plan-workspace.service.ts +131 -0
- package/src/services/plugin-executor.service.ts +102 -68
- package/src/services/quality-metrics.service.ts +112 -94
- package/src/services/queue-job.service.ts +288 -231
- package/src/services/recent-activity-title.service.ts +73 -36
- package/src/services/recent-activity.service.ts +274 -259
- package/src/services/skill-resolver.service.ts +38 -12
- package/src/services/social-chat-history.service.ts +190 -122
- package/src/services/system-executor.service.ts +96 -61
- package/src/services/thread/thread-active-run.ts +203 -0
- package/src/services/thread/thread-bootstrap.ts +385 -0
- package/src/services/thread/thread-listing.ts +199 -0
- package/src/services/thread/thread-memory-block.ts +130 -0
- package/src/services/thread/thread-message.service.ts +379 -0
- package/src/services/thread/thread-record-store.ts +155 -0
- package/src/services/thread/thread-title.service.ts +74 -0
- package/src/services/thread/thread-turn-execution.ts +280 -0
- package/src/services/thread/thread-turn-message-context.ts +73 -0
- package/src/services/thread/thread-turn-preparation.service.ts +1148 -0
- package/src/services/thread/thread-turn-streaming.ts +403 -0
- package/src/services/thread/thread-turn-tracing.ts +35 -0
- package/src/services/thread/thread-turn.ts +376 -0
- package/src/services/thread/thread.service.ts +344 -0
- package/src/services/user.service.ts +82 -32
- package/src/services/write-intent-validator.service.ts +63 -51
- package/src/storage/attachment-parser.ts +69 -27
- package/src/storage/attachment-storage.service.ts +334 -275
- package/src/storage/generated-document-storage.service.ts +66 -34
- package/src/system-agents/agent-result.ts +3 -1
- package/src/system-agents/context-compaction.agent.ts +3 -3
- package/src/system-agents/delegated-agent-factory.ts +159 -90
- package/src/system-agents/helper-agent-options.ts +1 -1
- package/src/system-agents/memory-reranker.agent.ts +3 -3
- package/src/system-agents/memory.agent.ts +3 -3
- package/src/system-agents/recent-activity-title-refiner.agent.ts +3 -3
- package/src/system-agents/regular-chat-memory-digest.agent.ts +3 -3
- package/src/system-agents/skill-extractor.agent.ts +3 -3
- package/src/system-agents/skill-manager.agent.ts +3 -3
- package/src/system-agents/thread-router.agent.ts +157 -113
- package/src/system-agents/title-generator.agent.ts +3 -3
- package/src/tools/execution-plan.tool.ts +241 -171
- package/src/tools/fetch-webpage.tool.ts +29 -18
- package/src/tools/firecrawl-client.ts +26 -6
- package/src/tools/index.ts +1 -0
- package/src/tools/memory-block.tool.ts +14 -6
- package/src/tools/plan-approval.tool.ts +57 -47
- package/src/tools/read-file-parts.tool.ts +44 -33
- package/src/tools/remember-memory.tool.ts +65 -45
- package/src/tools/search-web.tool.ts +33 -22
- package/src/tools/search.tool.ts +41 -29
- package/src/tools/team-think.tool.ts +125 -84
- package/src/tools/user-questions.tool.ts +4 -3
- package/src/tools/web-tool-shared.ts +6 -0
- package/src/utils/async.ts +25 -22
- package/src/utils/crypto.ts +21 -0
- package/src/utils/date-time.ts +40 -1
- package/src/utils/errors.ts +111 -20
- package/src/utils/hono-error-handler.ts +24 -39
- package/src/utils/index.ts +2 -1
- package/src/utils/null-proto-record.ts +41 -0
- package/src/utils/sse-keepalive.ts +124 -21
- package/src/workers/bootstrap.ts +164 -52
- package/src/workers/memory-consolidation.worker.ts +325 -237
- package/src/workers/organization-learning.worker.ts +50 -16
- package/src/workers/regular-chat-memory-digest.helpers.ts +28 -27
- package/src/workers/regular-chat-memory-digest.runner.ts +185 -114
- package/src/workers/skill-extraction.runner.ts +176 -93
- package/src/workers/utils/file-section-chunker.ts +8 -10
- package/src/workers/utils/repo-structure-extractor.ts +349 -260
- package/src/workers/utils/repomix-file-sections.ts +2 -2
- package/src/workers/utils/thread-message-query.ts +97 -38
- package/src/workers/worker-utils.ts +74 -31
- package/src/config/debug-logger.ts +0 -47
- package/src/config/search.ts +0 -3
- package/src/redis/connection-accessor.ts +0 -26
- package/src/runtime/agent-types.ts +0 -1
- package/src/runtime/context-compaction-runtime.ts +0 -87
- package/src/runtime/memory-scope.ts +0 -43
- package/src/runtime/social-chat-agent-runner.ts +0 -118
- package/src/runtime/social-chat.ts +0 -516
- package/src/runtime/team-consultation-orchestrator.ts +0 -272
- package/src/services/adaptive-playbook.service.ts +0 -152
- package/src/services/artifact-provenance.service.ts +0 -172
- package/src/services/chat-attachments.service.ts +0 -17
- package/src/services/context-compaction-runtime.singleton.ts +0 -13
- package/src/services/execution-plan.service.ts +0 -1118
- package/src/services/memory.service.ts +0 -914
- package/src/services/plan-agent-heartbeat.service.ts +0 -136
- package/src/services/plan-agent-query.service.ts +0 -267
- package/src/services/plan-artifact.service.ts +0 -50
- package/src/services/plan-builder.service.ts +0 -67
- package/src/services/plan-checkpoint.service.ts +0 -81
- package/src/services/plan-completion-side-effects.ts +0 -80
- package/src/services/plan-coordination.service.ts +0 -157
- package/src/services/plan-cycle.service.ts +0 -284
- package/src/services/plan-deadline.service.ts +0 -430
- package/src/services/plan-event-delivery.service.ts +0 -166
- package/src/services/plan-executor.service.ts +0 -1950
- package/src/services/plan-run.service.ts +0 -515
- package/src/services/plan-scheduler.service.ts +0 -240
- package/src/services/plan-template.service.ts +0 -177
- package/src/services/plan-validator.service.ts +0 -818
- package/src/services/plan-workspace.service.ts +0 -83
- package/src/services/rerank.service.ts +0 -156
- package/src/services/thread-message.service.ts +0 -275
- package/src/services/thread-plan-registry.service.ts +0 -22
- package/src/services/thread-title.service.ts +0 -39
- package/src/services/thread-turn-preparation.service.ts +0 -1147
- package/src/services/thread-turn.ts +0 -172
- package/src/services/thread.service.ts +0 -869
- package/src/utils/env.ts +0 -8
- /package/src/runtime/{context-compaction-constants.ts → context-compaction/context-compaction-constants.ts} +0 -0
- /package/src/runtime/{memory-format.ts → memory/memory-format.ts} +0 -0
- /package/src/runtime/{memory-prompts-parse.ts → memory/memory-prompts-parse.ts} +0 -0
- /package/src/runtime/{memory-prompts-update.ts → memory/memory-prompts-update.ts} +0 -0
- /package/src/runtime/{social-chat-prompts.ts → social-chat/social-chat-prompts.ts} +0 -0
- /package/src/services/{plan-node-spec.ts → plan/plan-node-spec.ts} +0 -0
- /package/src/services/{thread-constants.ts → thread/thread-constants.ts} +0 -0
- /package/src/services/{thread.types.ts → thread/thread.types.ts} +0 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds the domain-service Layer tree for `createLotaRuntime`.
|
|
3
|
+
*
|
|
4
|
+
* The services form a 9-tier dependency graph on top of the infrastructure
|
|
5
|
+
* layer (config, logging, database, redis, agents, threads, extensions).
|
|
6
|
+
* Each tier is provided with the accumulated context of earlier tiers so
|
|
7
|
+
* every service resolves cleanly when the ManagedRuntime eagerly loads them.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { Layer as LayerType } from 'effect'
|
|
11
|
+
import { Layer } from 'effect'
|
|
12
|
+
|
|
13
|
+
import { AiGatewayLive } from '../ai-gateway/ai-gateway'
|
|
14
|
+
import { EmbeddingCacheLive } from '../ai/embedding-cache'
|
|
15
|
+
import type { buildInfrastructureLayer } from '../effect/layers'
|
|
16
|
+
import { SharedThreadStreamSubscriberLive } from '../redis/stream-context'
|
|
17
|
+
import { AgentActivityServiceLive } from '../services/agent-activity.service'
|
|
18
|
+
import { AgentExecutorServiceLive } from '../services/agent-executor.service'
|
|
19
|
+
import { ArtifactServiceLive } from '../services/artifact.service'
|
|
20
|
+
import { AttachmentServiceLive } from '../services/attachment.service'
|
|
21
|
+
import { AutonomousJobServiceLive } from '../services/autonomous-job.service'
|
|
22
|
+
import { BackgroundWorkServiceLive } from '../services/background-work.service'
|
|
23
|
+
import { ChatRunRegistryLive } from '../services/chat-run-registry.service'
|
|
24
|
+
import { ContextCompactionServiceLive } from '../services/context-compaction.service'
|
|
25
|
+
import { DocumentChunkServiceLive } from '../services/document-chunk.service'
|
|
26
|
+
import { ExecutionPlanServiceLive } from '../services/execution-plan/execution-plan.service'
|
|
27
|
+
import { FeedbackLoopServiceLive } from '../services/feedback-loop.service'
|
|
28
|
+
import { GlobalOrchestratorServiceLive } from '../services/global-orchestrator.service'
|
|
29
|
+
import { InstitutionalMemoryServiceLive } from '../services/institutional-memory.service'
|
|
30
|
+
import { LearnedSkillServiceLive } from '../services/learned-skill.service'
|
|
31
|
+
import { MemoryServiceLive } from '../services/memory/memory.service'
|
|
32
|
+
import { RerankServiceLive } from '../services/memory/rerank.service'
|
|
33
|
+
import { MonitoringWindowServiceLive } from '../services/monitoring-window.service'
|
|
34
|
+
import { MutatingApprovalServiceLive } from '../services/mutating-approval.service'
|
|
35
|
+
import { NodeWorkspaceServiceLive } from '../services/node-workspace.service'
|
|
36
|
+
import { NotificationServiceLive } from '../services/notification.service'
|
|
37
|
+
import { OrganizationMemberServiceLive } from '../services/organization-member.service'
|
|
38
|
+
import { OrganizationServiceLive } from '../services/organization.service'
|
|
39
|
+
import { OwnershipDispatcherServiceLive } from '../services/ownership-dispatcher.service'
|
|
40
|
+
import { PlanAgentHeartbeatServiceLive } from '../services/plan/plan-agent-heartbeat.service'
|
|
41
|
+
import { PlanAgentQueryServiceLive } from '../services/plan/plan-agent-query.service'
|
|
42
|
+
import { PlanApprovalServiceLive } from '../services/plan/plan-approval.service'
|
|
43
|
+
import { PlanArtifactServiceLive } from '../services/plan/plan-artifact.service'
|
|
44
|
+
import { PlanBuilderServiceLive } from '../services/plan/plan-builder.service'
|
|
45
|
+
import { PlanCheckpointServiceLive } from '../services/plan/plan-checkpoint.service'
|
|
46
|
+
import { PlanCompilerServiceLive } from '../services/plan/plan-compiler.service'
|
|
47
|
+
import { PlanCoordinationServiceLive } from '../services/plan/plan-coordination.service'
|
|
48
|
+
import { PlanCycleServiceLive } from '../services/plan/plan-cycle.service'
|
|
49
|
+
import { PlanDeadlineServiceLive } from '../services/plan/plan-deadline.service'
|
|
50
|
+
import { PlanEventDeliveryServiceLive } from '../services/plan/plan-event-delivery.service'
|
|
51
|
+
import { PlanExecutorServiceLive } from '../services/plan/plan-executor.service'
|
|
52
|
+
import { PlanRunServiceLive } from '../services/plan/plan-run.service'
|
|
53
|
+
import { PlanSchedulerServiceLive } from '../services/plan/plan-scheduler.service'
|
|
54
|
+
import { PlanTemplateServiceLive } from '../services/plan/plan-template.service'
|
|
55
|
+
import { PlanValidatorServiceLive } from '../services/plan/plan-validator.service'
|
|
56
|
+
import { PlanWorkspaceServiceLive } from '../services/plan/plan-workspace.service'
|
|
57
|
+
import { PluginExecutorServiceLive } from '../services/plugin-executor.service'
|
|
58
|
+
import { QualityMetricsServiceLive } from '../services/quality-metrics.service'
|
|
59
|
+
import { QueueJobServiceLive } from '../services/queue-job.service'
|
|
60
|
+
import { RecentActivityTitleServiceLive } from '../services/recent-activity-title.service'
|
|
61
|
+
import { RecentActivityServiceLive } from '../services/recent-activity.service'
|
|
62
|
+
import { SkillResolverServiceLive } from '../services/skill-resolver.service'
|
|
63
|
+
import { SocialChatHistoryServiceLive } from '../services/social-chat-history.service'
|
|
64
|
+
import { SystemExecutorServiceLive } from '../services/system-executor.service'
|
|
65
|
+
import { ThreadMessageServiceLive } from '../services/thread/thread-message.service'
|
|
66
|
+
import { ThreadTitleServiceLive } from '../services/thread/thread-title.service'
|
|
67
|
+
import { ThreadTurnServiceLive } from '../services/thread/thread-turn'
|
|
68
|
+
import { ThreadTurnPreparationServiceLive } from '../services/thread/thread-turn-preparation.service'
|
|
69
|
+
import { ThreadServiceLive } from '../services/thread/thread.service'
|
|
70
|
+
import { UserServiceLive } from '../services/user.service'
|
|
71
|
+
import { WriteIntentValidatorServiceLive } from '../services/write-intent-validator.service'
|
|
72
|
+
import { AttachmentStorageServiceLive } from '../storage/attachment-storage.service'
|
|
73
|
+
import { GeneratedDocumentStorageServiceLive } from '../storage/generated-document-storage.service'
|
|
74
|
+
import { FirecrawlLive } from '../tools/firecrawl-client'
|
|
75
|
+
import { CompactionCoordinationLive } from './chat-run-orchestration'
|
|
76
|
+
import { HelperModelLive } from './helper-model'
|
|
77
|
+
|
|
78
|
+
function provide<A, E, R extends RCtx, RCtx, E2>(
|
|
79
|
+
layer: LayerType.Layer<A, E, R>,
|
|
80
|
+
ctx: LayerType.Layer<RCtx, E2, never>,
|
|
81
|
+
): LayerType.Layer<A, E | E2, never> {
|
|
82
|
+
return Layer.provideMerge(ctx)(layer)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
type InfrastructureLayer = ReturnType<typeof buildInfrastructureLayer>
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Compose the domain service layer tree on top of the supplied infrastructure
|
|
89
|
+
* layer. The returned layer has no remaining requirements and can be fed
|
|
90
|
+
* straight into `ManagedRuntime.make`.
|
|
91
|
+
*/
|
|
92
|
+
export function buildDomainServiceLayer(infrastructureLayer: InfrastructureLayer) {
|
|
93
|
+
const tier0 = provide(
|
|
94
|
+
Layer.mergeAll(
|
|
95
|
+
BackgroundWorkServiceLive,
|
|
96
|
+
ChatRunRegistryLive,
|
|
97
|
+
CompactionCoordinationLive,
|
|
98
|
+
DocumentChunkServiceLive,
|
|
99
|
+
NodeWorkspaceServiceLive,
|
|
100
|
+
NotificationServiceLive,
|
|
101
|
+
PlanArtifactServiceLive,
|
|
102
|
+
PlanBuilderServiceLive,
|
|
103
|
+
WriteIntentValidatorServiceLive,
|
|
104
|
+
),
|
|
105
|
+
infrastructureLayer,
|
|
106
|
+
)
|
|
107
|
+
const ctx0 = Layer.mergeAll(
|
|
108
|
+
infrastructureLayer,
|
|
109
|
+
provide(Layer.mergeAll(AiGatewayLive, EmbeddingCacheLive, FirecrawlLive, HelperModelLive), infrastructureLayer),
|
|
110
|
+
tier0,
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
const tier1 = provide(
|
|
114
|
+
Layer.mergeAll(
|
|
115
|
+
SharedThreadStreamSubscriberLive,
|
|
116
|
+
AgentExecutorServiceLive,
|
|
117
|
+
AttachmentStorageServiceLive,
|
|
118
|
+
GeneratedDocumentStorageServiceLive,
|
|
119
|
+
LearnedSkillServiceLive,
|
|
120
|
+
OrganizationServiceLive,
|
|
121
|
+
OrganizationMemberServiceLive,
|
|
122
|
+
PlanApprovalServiceLive,
|
|
123
|
+
PlanRunServiceLive,
|
|
124
|
+
PlanSchedulerServiceLive,
|
|
125
|
+
PlanWorkspaceServiceLive,
|
|
126
|
+
PluginExecutorServiceLive,
|
|
127
|
+
QualityMetricsServiceLive,
|
|
128
|
+
QueueJobServiceLive,
|
|
129
|
+
RecentActivityServiceLive,
|
|
130
|
+
RerankServiceLive,
|
|
131
|
+
SocialChatHistoryServiceLive,
|
|
132
|
+
SystemExecutorServiceLive,
|
|
133
|
+
ThreadMessageServiceLive,
|
|
134
|
+
UserServiceLive,
|
|
135
|
+
),
|
|
136
|
+
ctx0,
|
|
137
|
+
)
|
|
138
|
+
const ctx1 = Layer.mergeAll(ctx0, tier1)
|
|
139
|
+
|
|
140
|
+
const tier2 = provide(
|
|
141
|
+
Layer.mergeAll(
|
|
142
|
+
ArtifactServiceLive,
|
|
143
|
+
AttachmentServiceLive,
|
|
144
|
+
ContextCompactionServiceLive,
|
|
145
|
+
FeedbackLoopServiceLive,
|
|
146
|
+
InstitutionalMemoryServiceLive,
|
|
147
|
+
MemoryServiceLive,
|
|
148
|
+
MonitoringWindowServiceLive,
|
|
149
|
+
MutatingApprovalServiceLive,
|
|
150
|
+
PlanAgentQueryServiceLive,
|
|
151
|
+
PlanCheckpointServiceLive,
|
|
152
|
+
PlanCoordinationServiceLive,
|
|
153
|
+
PlanEventDeliveryServiceLive,
|
|
154
|
+
SkillResolverServiceLive,
|
|
155
|
+
RecentActivityTitleServiceLive,
|
|
156
|
+
),
|
|
157
|
+
ctx1,
|
|
158
|
+
)
|
|
159
|
+
const ctx2 = Layer.mergeAll(ctx1, tier2)
|
|
160
|
+
|
|
161
|
+
const tier3 = provide(Layer.mergeAll(PlanValidatorServiceLive, ThreadServiceLive), ctx2)
|
|
162
|
+
const ctx3 = Layer.mergeAll(ctx2, tier3)
|
|
163
|
+
|
|
164
|
+
const tier4 = provide(Layer.mergeAll(PlanCompilerServiceLive, ThreadTitleServiceLive), ctx3)
|
|
165
|
+
const ctx4 = Layer.mergeAll(ctx3, tier4)
|
|
166
|
+
|
|
167
|
+
const tier5 = provide(PlanExecutorServiceLive, ctx4)
|
|
168
|
+
const ctx5 = Layer.mergeAll(ctx4, tier5)
|
|
169
|
+
|
|
170
|
+
const tier6 = provide(
|
|
171
|
+
Layer.mergeAll(OwnershipDispatcherServiceLive, PlanAgentHeartbeatServiceLive, PlanDeadlineServiceLive),
|
|
172
|
+
ctx5,
|
|
173
|
+
)
|
|
174
|
+
const ctx6 = Layer.mergeAll(ctx5, tier6)
|
|
175
|
+
|
|
176
|
+
const tier7 = provide(Layer.mergeAll(ExecutionPlanServiceLive, GlobalOrchestratorServiceLive), ctx6)
|
|
177
|
+
const ctx7 = Layer.mergeAll(ctx6, tier7)
|
|
178
|
+
|
|
179
|
+
const tier8 = provide(
|
|
180
|
+
Layer.mergeAll(
|
|
181
|
+
PlanTemplateServiceLive,
|
|
182
|
+
AutonomousJobServiceLive,
|
|
183
|
+
AgentActivityServiceLive,
|
|
184
|
+
ThreadTurnPreparationServiceLive,
|
|
185
|
+
),
|
|
186
|
+
ctx7,
|
|
187
|
+
)
|
|
188
|
+
const ctx8 = Layer.mergeAll(ctx7, tier8)
|
|
189
|
+
|
|
190
|
+
const tier9 = provide(Layer.mergeAll(PlanCycleServiceLive, ThreadTurnServiceLive), ctx8)
|
|
191
|
+
return Layer.mergeAll(ctx8, tier9)
|
|
192
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PlanExecutionVisibility, PlanNodeSpecRecord, PlanSpecRecord } from '@lota-sdk/shared'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { isAgentName } from '../config/agent-defaults'
|
|
4
4
|
|
|
5
5
|
export function resolvePlanNodeExecutionVisibility(
|
|
6
6
|
plan: Pick<PlanSpecRecord, 'defaultExecutionVisibility'>,
|
|
@@ -12,7 +12,7 @@ export function resolvePlanNodeExecutionVisibility(
|
|
|
12
12
|
return configuredVisibility
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
return node.owner.executorType === 'agent' &&
|
|
15
|
+
return node.owner.executorType === 'agent' && isAgentName(node.owner.ref) ? 'visible' : 'silent'
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export function shouldPlanNodeUseVisibleTurn(
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { SerializableExecutionPlan } from '@lota-sdk/shared'
|
|
2
|
+
import { Schema, Duration, Effect } from 'effect'
|
|
2
3
|
|
|
3
4
|
type ExecutionPlanPromptSummary = Pick<SerializableExecutionPlan, 'runId' | 'title'>
|
|
4
5
|
|
|
@@ -24,6 +25,15 @@ function formatExecutionPlansForPrompt(plans: SerializableExecutionPlan[]): stri
|
|
|
24
25
|
return ['<execution-plan-state>', JSON.stringify(payload, null, 2), '</execution-plan-state>'].join('\n')
|
|
25
26
|
}
|
|
26
27
|
|
|
28
|
+
export class ExecutionPlanCacheError extends Schema.TaggedErrorClass<ExecutionPlanCacheError>()(
|
|
29
|
+
'ExecutionPlanCacheError',
|
|
30
|
+
{ message: Schema.String, cause: Schema.Defect },
|
|
31
|
+
) {}
|
|
32
|
+
|
|
33
|
+
export function toExecutionPlanCacheError(cause: unknown): ExecutionPlanCacheError {
|
|
34
|
+
return new ExecutionPlanCacheError({ message: cause instanceof Error ? cause.message : String(cause), cause })
|
|
35
|
+
}
|
|
36
|
+
|
|
27
37
|
export function buildExecutionPlanInstructionSections(plans: SerializableExecutionPlan[] | null | undefined): string[] {
|
|
28
38
|
const normalized = plans ?? []
|
|
29
39
|
return [EXECUTION_PLAN_AGENT_PROTOCOL_PROMPT, formatExecutionPlansForPrompt(normalized)]
|
|
@@ -31,27 +41,44 @@ export function buildExecutionPlanInstructionSections(plans: SerializableExecuti
|
|
|
31
41
|
|
|
32
42
|
export function createExecutionPlanInstructionSectionCache(params: {
|
|
33
43
|
disabled?: boolean
|
|
34
|
-
|
|
44
|
+
loadPlansEffect: () => Effect.Effect<SerializableExecutionPlan[], ExecutionPlanCacheError>
|
|
35
45
|
}) {
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
const [getPlansCachedEffect, invalidatePlansEffect] = Effect.runSync(
|
|
47
|
+
Effect.cachedInvalidateWithTTL(
|
|
48
|
+
Effect.suspend(() => (params.disabled ? Effect.succeed([]) : params.loadPlansEffect())),
|
|
49
|
+
Duration.infinity,
|
|
50
|
+
),
|
|
51
|
+
)
|
|
52
|
+
const [getSectionsCachedEffect, invalidateSectionsEffect] = Effect.runSync(
|
|
53
|
+
Effect.cachedInvalidateWithTTL(
|
|
54
|
+
Effect.gen(function* () {
|
|
55
|
+
if (params.disabled) {
|
|
56
|
+
return undefined
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const plans = yield* getPlansCachedEffect
|
|
60
|
+
return buildExecutionPlanInstructionSections(plans)
|
|
61
|
+
}),
|
|
62
|
+
Duration.infinity,
|
|
63
|
+
),
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
const getPlansEffect = (): Effect.Effect<SerializableExecutionPlan[], ExecutionPlanCacheError> => getPlansCachedEffect
|
|
67
|
+
|
|
68
|
+
const getSectionsEffect = (): Effect.Effect<string[] | undefined, ExecutionPlanCacheError> => getSectionsCachedEffect
|
|
38
69
|
|
|
39
70
|
return {
|
|
40
71
|
invalidate() {
|
|
41
|
-
|
|
42
|
-
|
|
72
|
+
Effect.runSync(invalidatePlansEffect)
|
|
73
|
+
Effect.runSync(invalidateSectionsEffect)
|
|
43
74
|
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return plansPromise
|
|
75
|
+
getPlansEffect,
|
|
76
|
+
getSectionsEffect,
|
|
77
|
+
getPlans() {
|
|
78
|
+
return Effect.runPromise(getPlansEffect())
|
|
49
79
|
},
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
sectionsPromise ??= this.getPlans().then((plans) => buildExecutionPlanInstructionSections(plans))
|
|
54
|
-
return sectionsPromise
|
|
80
|
+
getSections() {
|
|
81
|
+
return Effect.runPromise(getSectionsEffect())
|
|
55
82
|
},
|
|
56
83
|
}
|
|
57
84
|
}
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
import type { GraphDesignRequest, GraphDesignResponse } from '@lota-sdk/shared'
|
|
2
2
|
|
|
3
|
+
import { resolveOptionalLotaService } from '../effect/runtime'
|
|
4
|
+
import { RuntimeConfigServiceTag } from '../effect/services'
|
|
5
|
+
|
|
3
6
|
export interface GraphDesigner {
|
|
4
7
|
designGraph(request: GraphDesignRequest): Promise<GraphDesignResponse>
|
|
5
8
|
}
|
|
6
9
|
|
|
7
|
-
let
|
|
10
|
+
let currentGraphDesigner: GraphDesigner | null = null
|
|
11
|
+
|
|
12
|
+
export function configureGraphDesigner(graphDesigner: GraphDesigner | null | undefined): void {
|
|
13
|
+
currentGraphDesigner = graphDesigner ?? null
|
|
14
|
+
}
|
|
8
15
|
|
|
9
|
-
export function
|
|
10
|
-
|
|
16
|
+
export function clearGraphDesigner(): void {
|
|
17
|
+
currentGraphDesigner = null
|
|
11
18
|
}
|
|
12
19
|
|
|
13
20
|
export function getGraphDesigner(): GraphDesigner | null {
|
|
14
|
-
|
|
21
|
+
if (currentGraphDesigner) {
|
|
22
|
+
return currentGraphDesigner
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const runtimeConfig = resolveOptionalLotaService(RuntimeConfigServiceTag)
|
|
26
|
+
return runtimeConfig?.graphDesigner ?? null
|
|
15
27
|
}
|
|
@@ -5,8 +5,13 @@ import type {
|
|
|
5
5
|
ToolLoopAgentOnStepFinishCallback,
|
|
6
6
|
ToolSet,
|
|
7
7
|
} from 'ai'
|
|
8
|
+
import { Context, Duration, Effect, Layer, Metric } from 'effect'
|
|
8
9
|
import type { ZodSchema } from 'zod'
|
|
9
10
|
|
|
11
|
+
import type { ValidationError } from '../effect/errors'
|
|
12
|
+
import { AiGenerationError, BadRequestError } from '../effect/errors'
|
|
13
|
+
import { summarizeZodIssues, toValidationError } from '../effect/zod'
|
|
14
|
+
import { nowEpochMillis } from '../utils/date-time'
|
|
10
15
|
import { isRecord, stringifyUnknown } from '../utils/string'
|
|
11
16
|
|
|
12
17
|
export interface HelperToolLoopAgentOptions {
|
|
@@ -70,7 +75,7 @@ function isRateLimitError(error: unknown): boolean {
|
|
|
70
75
|
return getErrorStatus(error) === 429
|
|
71
76
|
}
|
|
72
77
|
|
|
73
|
-
function
|
|
78
|
+
function formatGenerationError(tag: string, error: unknown): AiGenerationError {
|
|
74
79
|
const status = getErrorStatus(error)
|
|
75
80
|
const rateLimited = isRateLimitError(error)
|
|
76
81
|
const message = error instanceof Error ? error.message : String(error)
|
|
@@ -87,7 +92,73 @@ function formatError(tag: string, error: unknown): Error {
|
|
|
87
92
|
if (responseBody) parts.push(`response_body=${responseBody}`)
|
|
88
93
|
if (requestUrl) parts.push(`url=${requestUrl}`)
|
|
89
94
|
|
|
90
|
-
return new
|
|
95
|
+
return new AiGenerationError({
|
|
96
|
+
source: tag,
|
|
97
|
+
message: parts.join(' '),
|
|
98
|
+
...(status !== null ? { status } : {}),
|
|
99
|
+
...(rateLimited ? { rateLimited: true } : {}),
|
|
100
|
+
...(responseData ? { providerData: responseData } : {}),
|
|
101
|
+
...(responseBody ? { responseBody } : {}),
|
|
102
|
+
...(requestUrl ? { url: requestUrl } : {}),
|
|
103
|
+
})
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function emptyHelperMessagesError(tag: string): BadRequestError {
|
|
107
|
+
return new BadRequestError({ message: `[${tag}] Empty helper messages` })
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function parseStructuredRootCandidate<T>(params: {
|
|
111
|
+
tag: string
|
|
112
|
+
schema: ZodSchema<T>
|
|
113
|
+
candidate: unknown
|
|
114
|
+
}): { data: T } | { error: ValidationError } {
|
|
115
|
+
const directParsed = params.schema.safeParse(params.candidate)
|
|
116
|
+
if (directParsed.success) {
|
|
117
|
+
return { data: directParsed.data }
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return {
|
|
121
|
+
error: toValidationError(
|
|
122
|
+
directParsed.error,
|
|
123
|
+
`[${params.tag}] Structured output failed schema validation: ${summarizeZodIssues(directParsed.error.issues)}`,
|
|
124
|
+
),
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function createHelperAgent(params: {
|
|
129
|
+
tag: string
|
|
130
|
+
createAgent: CreateHelperAgentFn
|
|
131
|
+
systemPrompt?: string
|
|
132
|
+
temperature?: number
|
|
133
|
+
maxOutputTokens?: number
|
|
134
|
+
output?: Output.Output
|
|
135
|
+
}): Effect.Effect<HelperAgent, AiGenerationError> {
|
|
136
|
+
return Effect.try({
|
|
137
|
+
try: () =>
|
|
138
|
+
params.createAgent({
|
|
139
|
+
...(params.systemPrompt ? { instructions: params.systemPrompt } : {}),
|
|
140
|
+
...(params.output ? { output: params.output } : {}),
|
|
141
|
+
...(typeof params.temperature === 'number' ? { temperature: params.temperature } : {}),
|
|
142
|
+
...(typeof params.maxOutputTokens === 'number' ? { maxOutputTokens: params.maxOutputTokens } : {}),
|
|
143
|
+
maxRetries: 2,
|
|
144
|
+
}),
|
|
145
|
+
catch: (error) => formatGenerationError(params.tag, error),
|
|
146
|
+
})
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function generateWithHelperAgent(
|
|
150
|
+
tag: string,
|
|
151
|
+
agent: HelperAgent,
|
|
152
|
+
params: { messages: HelperMessage[]; timeoutMs?: number },
|
|
153
|
+
): Effect.Effect<{ text?: unknown; output?: unknown }, AiGenerationError> {
|
|
154
|
+
return Effect.tryPromise({
|
|
155
|
+
try: () =>
|
|
156
|
+
agent.generate({
|
|
157
|
+
messages: toModelMessages(params.messages),
|
|
158
|
+
...(typeof params.timeoutMs === 'number' ? { timeout: params.timeoutMs } : {}),
|
|
159
|
+
}),
|
|
160
|
+
catch: (error) => formatGenerationError(tag, error),
|
|
161
|
+
})
|
|
91
162
|
}
|
|
92
163
|
|
|
93
164
|
function toModelMessages(messages: HelperMessage[]): Array<{ role: 'user' | 'assistant'; content: string }> {
|
|
@@ -118,13 +189,6 @@ function resolveStructuredSystemPrompt(systemPrompt?: string): string {
|
|
|
118
189
|
return parts.join('\n\n')
|
|
119
190
|
}
|
|
120
191
|
|
|
121
|
-
function formatSchemaIssueSummary(issues: Array<{ path: PropertyKey[]; message: string }>): string {
|
|
122
|
-
return issues
|
|
123
|
-
.slice(0, 5)
|
|
124
|
-
.map((issue) => `${issue.path.map((segment) => String(segment)).join('.') || 'root'}: ${issue.message}`)
|
|
125
|
-
.join('; ')
|
|
126
|
-
}
|
|
127
|
-
|
|
128
192
|
function parseStructuredCandidate<T>(params: {
|
|
129
193
|
schema: ZodSchema<T>
|
|
130
194
|
candidate: unknown
|
|
@@ -147,40 +211,54 @@ function parseStructuredCandidate<T>(params: {
|
|
|
147
211
|
return null
|
|
148
212
|
}
|
|
149
213
|
|
|
214
|
+
const helperModelDuration = Metric.timer('helper_model_duration')
|
|
215
|
+
|
|
216
|
+
function recordHelperModelDuration(tag: string, startedAt: number): Effect.Effect<void, never, never> {
|
|
217
|
+
return Metric.update(
|
|
218
|
+
Metric.withAttributes(helperModelDuration, { tag }),
|
|
219
|
+
Duration.millis(Math.max(0, nowEpochMillis() - startedAt)),
|
|
220
|
+
)
|
|
221
|
+
}
|
|
222
|
+
|
|
150
223
|
export function createHelperModelRuntime() {
|
|
151
|
-
|
|
224
|
+
function generateHelperTextEffect(
|
|
225
|
+
params: GenerateHelperTextParams,
|
|
226
|
+
): Effect.Effect<string, AiGenerationError | BadRequestError | ValidationError> {
|
|
152
227
|
const systemPrompt = resolveSystemPrompt({
|
|
153
228
|
explicitSystemPrompt: params.systemPrompt,
|
|
154
229
|
defaultSystemPrompt: params.defaultSystemPrompt,
|
|
155
230
|
})
|
|
156
231
|
|
|
157
232
|
if (!systemPrompt && params.messages.length === 0) {
|
|
158
|
-
|
|
233
|
+
return Effect.fail(emptyHelperMessagesError(params.tag))
|
|
159
234
|
}
|
|
160
235
|
|
|
161
|
-
|
|
162
|
-
const agent = params.createAgent({
|
|
163
|
-
...(systemPrompt ? { instructions: systemPrompt } : {}),
|
|
164
|
-
...(typeof params.temperature === 'number' ? { temperature: params.temperature } : {}),
|
|
165
|
-
...(typeof params.maxOutputTokens === 'number' ? { maxOutputTokens: params.maxOutputTokens } : {}),
|
|
166
|
-
maxRetries: 2,
|
|
167
|
-
})
|
|
236
|
+
const startedAt = nowEpochMillis()
|
|
168
237
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
238
|
+
return Effect.gen(function* () {
|
|
239
|
+
const agent = yield* createHelperAgent({
|
|
240
|
+
tag: params.tag,
|
|
241
|
+
createAgent: params.createAgent,
|
|
242
|
+
systemPrompt,
|
|
243
|
+
temperature: params.temperature,
|
|
244
|
+
maxOutputTokens: params.maxOutputTokens,
|
|
172
245
|
})
|
|
246
|
+
const result = yield* generateWithHelperAgent(params.tag, agent, params)
|
|
173
247
|
const text = typeof result.text === 'string' ? result.text.trim() : ''
|
|
174
248
|
if (!text) {
|
|
175
|
-
|
|
249
|
+
return yield* formatGenerationError(params.tag, new Error('Empty helper model output'))
|
|
176
250
|
}
|
|
177
251
|
return text
|
|
178
|
-
}
|
|
179
|
-
throw formatError(params.tag, error)
|
|
180
|
-
}
|
|
252
|
+
}).pipe(Effect.ensuring(recordHelperModelDuration(params.tag, startedAt)))
|
|
181
253
|
}
|
|
182
254
|
|
|
183
|
-
|
|
255
|
+
function generateHelperText(params: GenerateHelperTextParams): Promise<string> {
|
|
256
|
+
return Effect.runPromise(generateHelperTextEffect(params).pipe(Effect.withSpan('HelperModel.generateHelperText')))
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
function generateHelperStructuredEffect<T>(
|
|
260
|
+
params: GenerateHelperStructuredParams<T>,
|
|
261
|
+
): Effect.Effect<T, AiGenerationError | BadRequestError | ValidationError> {
|
|
184
262
|
const baseSystemPrompt = resolveSystemPrompt({
|
|
185
263
|
explicitSystemPrompt: params.systemPrompt,
|
|
186
264
|
defaultSystemPrompt: params.defaultSystemPrompt,
|
|
@@ -188,39 +266,52 @@ export function createHelperModelRuntime() {
|
|
|
188
266
|
const systemPrompt = resolveStructuredSystemPrompt(baseSystemPrompt)
|
|
189
267
|
|
|
190
268
|
if (!baseSystemPrompt && params.messages.length === 0) {
|
|
191
|
-
|
|
269
|
+
return Effect.fail(emptyHelperMessagesError(params.tag))
|
|
192
270
|
}
|
|
193
271
|
|
|
194
|
-
|
|
195
|
-
const agent = params.createAgent({
|
|
196
|
-
output: Output.object({ schema: params.schema }),
|
|
197
|
-
...(systemPrompt ? { instructions: systemPrompt } : {}),
|
|
198
|
-
...(typeof params.temperature === 'number' ? { temperature: params.temperature } : {}),
|
|
199
|
-
...(typeof params.maxOutputTokens === 'number' ? { maxOutputTokens: params.maxOutputTokens } : {}),
|
|
200
|
-
maxRetries: 2,
|
|
201
|
-
})
|
|
272
|
+
const startedAt = nowEpochMillis()
|
|
202
273
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
274
|
+
return Effect.gen(function* () {
|
|
275
|
+
const agent = yield* createHelperAgent({
|
|
276
|
+
tag: params.tag,
|
|
277
|
+
createAgent: params.createAgent,
|
|
278
|
+
systemPrompt,
|
|
279
|
+
temperature: params.temperature,
|
|
280
|
+
maxOutputTokens: params.maxOutputTokens,
|
|
281
|
+
output: Output.object({ schema: params.schema }),
|
|
206
282
|
})
|
|
283
|
+
const result = yield* generateWithHelperAgent(params.tag, agent, params)
|
|
207
284
|
const parsed = parseStructuredCandidate({ schema: params.schema, candidate: result.output })
|
|
208
285
|
if (parsed) {
|
|
209
286
|
return parsed.data
|
|
210
287
|
}
|
|
211
288
|
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
289
|
+
const validated = parseStructuredRootCandidate({
|
|
290
|
+
tag: params.tag,
|
|
291
|
+
schema: params.schema,
|
|
292
|
+
candidate: result.output,
|
|
293
|
+
})
|
|
294
|
+
if ('error' in validated) {
|
|
295
|
+
return yield* validated.error
|
|
217
296
|
}
|
|
218
297
|
|
|
219
|
-
return
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
|
|
298
|
+
return validated.data
|
|
299
|
+
}).pipe(Effect.ensuring(recordHelperModelDuration(params.tag, startedAt)))
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function generateHelperStructured<T>(params: GenerateHelperStructuredParams<T>): Promise<T> {
|
|
303
|
+
return Effect.runPromise(
|
|
304
|
+
generateHelperStructuredEffect(params).pipe(Effect.withSpan('HelperModel.generateHelperStructured')),
|
|
305
|
+
)
|
|
223
306
|
}
|
|
224
307
|
|
|
225
|
-
return { generateHelperText, generateHelperStructured }
|
|
308
|
+
return { generateHelperTextEffect, generateHelperText, generateHelperStructuredEffect, generateHelperStructured }
|
|
226
309
|
}
|
|
310
|
+
|
|
311
|
+
export type HelperModelRuntime = ReturnType<typeof createHelperModelRuntime>
|
|
312
|
+
|
|
313
|
+
export class HelperModelTag extends Context.Service<HelperModelTag, HelperModelRuntime>()(
|
|
314
|
+
'@lota-sdk/core/HelperModel',
|
|
315
|
+
) {}
|
|
316
|
+
|
|
317
|
+
export const HelperModelLive = Layer.sync(HelperModelTag, () => createHelperModelRuntime())
|
package/src/runtime/index.ts
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
export * from './approval-continuation'
|
|
2
2
|
export * from './agent-runtime-policy'
|
|
3
3
|
export * from './agent-stream-helpers'
|
|
4
|
-
export * from './agent-types'
|
|
5
4
|
export * from './chat-request-routing'
|
|
6
5
|
export * from './chat-run-registry'
|
|
7
|
-
export * from './context-compaction'
|
|
6
|
+
export * from './context-compaction/context-compaction'
|
|
8
7
|
export * from './execution-plan'
|
|
9
8
|
export * from './graph-designer'
|
|
10
9
|
export * from './helper-model'
|
|
11
10
|
export * from './indexed-repositories-policy'
|
|
12
11
|
export * from './instruction-sections'
|
|
13
|
-
export * from './memory-block'
|
|
14
|
-
export * from './memory-digest-policy'
|
|
15
|
-
export * from './memory-scope'
|
|
12
|
+
export * from './memory/memory-block'
|
|
13
|
+
export * from './memory/memory-digest-policy'
|
|
14
|
+
export * from './memory/memory-scope'
|
|
16
15
|
export * from './llm-content'
|
|
17
16
|
export * from './plugin-resolution'
|
|
18
17
|
export * from './plugin-types'
|
|
@@ -20,8 +19,8 @@ export * from './runtime-config'
|
|
|
20
19
|
export * from './runtime-extensions'
|
|
21
20
|
export * from './runtime-worker-registry'
|
|
22
21
|
export * from './skill-extraction-policy'
|
|
23
|
-
export * from './social-chat'
|
|
24
|
-
export * from './team-consultation-orchestrator'
|
|
25
|
-
export * from './team-consultation-prompts'
|
|
22
|
+
export * from './social-chat/social-chat'
|
|
23
|
+
export * from './team-consultation/team-consultation-orchestrator'
|
|
24
|
+
export * from './team-consultation/team-consultation-prompts'
|
|
26
25
|
export * from './turn-lifecycle'
|
|
27
26
|
export * from './thread-chat-helpers'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getAgentRoster } from '../config/agent-defaults'
|
|
2
2
|
|
|
3
3
|
export type IndexedRepoAgentName = string
|
|
4
4
|
|
|
@@ -16,13 +16,13 @@ export type RepoSectionName = (typeof REPO_SECTION_NAMES)[number]
|
|
|
16
16
|
const ALL_REPO_SECTIONS: RepoSectionName[] = [...REPO_SECTION_NAMES]
|
|
17
17
|
|
|
18
18
|
export function buildDefaultRepoSectionsByAgent(
|
|
19
|
-
roster: readonly IndexedRepoAgentName[] =
|
|
19
|
+
roster: readonly IndexedRepoAgentName[] = getAgentRoster(),
|
|
20
20
|
): Record<IndexedRepoAgentName, RepoSectionName[]> {
|
|
21
21
|
return Object.fromEntries(roster.map((agentId) => [agentId, [...ALL_REPO_SECTIONS]]))
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export function emptyAgentContextMap(
|
|
25
|
-
roster: readonly IndexedRepoAgentName[] =
|
|
25
|
+
roster: readonly IndexedRepoAgentName[] = getAgentRoster(),
|
|
26
26
|
): Record<IndexedRepoAgentName, string> {
|
|
27
27
|
return Object.fromEntries(roster.map((agentId) => [agentId, '']))
|
|
28
28
|
}
|