@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
|
@@ -1,39 +1,72 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { ToolSet } from 'ai'
|
|
2
|
+
|
|
3
|
+
import { ConfigurationError } from '../effect/errors'
|
|
4
|
+
import { resolveLotaService } from '../effect/runtime'
|
|
5
|
+
import { AgentConfigServiceTag, AgentFactoryServiceTag } from '../effect/services'
|
|
6
|
+
import type {
|
|
7
|
+
AgentFactory,
|
|
8
|
+
AgentRuntimeConfigParams,
|
|
9
|
+
AgentRuntimeConfigProvider,
|
|
10
|
+
AgentToolBuilder,
|
|
11
|
+
} from './agent-types'
|
|
12
|
+
|
|
13
|
+
function defaultBuildAgentTools(): ToolSet {
|
|
4
14
|
return {}
|
|
5
15
|
}
|
|
6
16
|
|
|
7
|
-
function defaultGetAgentRuntimeConfig(
|
|
8
|
-
return {
|
|
17
|
+
function defaultGetAgentRuntimeConfig(params: AgentRuntimeConfigParams) {
|
|
18
|
+
return {
|
|
19
|
+
id: params.agentId,
|
|
20
|
+
displayName: params.agentId,
|
|
21
|
+
mode: params.mode ?? (params.threadType === 'default' ? 'fixedThreadMode' : 'threadMode'),
|
|
22
|
+
maxSteps: 15,
|
|
23
|
+
}
|
|
9
24
|
}
|
|
10
25
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
export let agentDescriptions: Record<string, string> = {}
|
|
15
|
-
export let routerModelId: string | undefined = undefined
|
|
16
|
-
export let agentRoster: readonly string[] = []
|
|
17
|
-
export let leadAgentId = ''
|
|
18
|
-
export let teamConsultParticipants: readonly string[] = []
|
|
26
|
+
function defaultGetCoreThreadProfile(coreType: string): CoreThreadProfile {
|
|
27
|
+
return { config: { coreType, agentId: '', title: '' }, members: [], tools: [], skills: [], instructions: '' }
|
|
28
|
+
}
|
|
19
29
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
members: readonly string[]
|
|
23
|
-
tools: readonly string[]
|
|
24
|
-
skills: readonly string[]
|
|
25
|
-
instructions: string
|
|
30
|
+
function normalizeAgentLookupKey(value: string): string {
|
|
31
|
+
return value.trim().toLowerCase()
|
|
26
32
|
}
|
|
27
33
|
|
|
28
|
-
export
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
export interface ResolvedAgentConfig {
|
|
35
|
+
readonly roster: readonly string[]
|
|
36
|
+
readonly leadAgentId: string
|
|
37
|
+
readonly displayNames: Record<string, string>
|
|
38
|
+
readonly shortDisplayNames: Record<string, string>
|
|
39
|
+
readonly descriptions: Record<string, string>
|
|
40
|
+
readonly routerModelId: string | undefined
|
|
41
|
+
readonly teamConsultParticipants: readonly string[]
|
|
42
|
+
readonly getCoreThreadProfile: (coreType: string) => CoreThreadProfile
|
|
43
|
+
readonly rosterSet: ReadonlySet<string>
|
|
44
|
+
readonly aliasMap: ReadonlyMap<string, string>
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function buildAgentAliasMap(config: {
|
|
48
|
+
roster: readonly string[]
|
|
49
|
+
displayNames: Record<string, string>
|
|
50
|
+
shortDisplayNames: Record<string, string>
|
|
51
|
+
}): Map<string, string> {
|
|
52
|
+
const map = new Map<string, string>()
|
|
53
|
+
|
|
54
|
+
for (const agent of config.roster) {
|
|
55
|
+
map.set(normalizeAgentLookupKey(agent), agent)
|
|
56
|
+
const displayName = config.displayNames[agent]
|
|
57
|
+
if (displayName) {
|
|
58
|
+
map.set(normalizeAgentLookupKey(displayName), agent)
|
|
59
|
+
}
|
|
60
|
+
const shortName = config.shortDisplayNames[agent]
|
|
61
|
+
if (shortName) {
|
|
62
|
+
map.set(normalizeAgentLookupKey(shortName), agent)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return map
|
|
67
|
+
}
|
|
35
68
|
|
|
36
|
-
export function
|
|
69
|
+
export function resolveAgentConfig(config: {
|
|
37
70
|
roster: readonly string[]
|
|
38
71
|
leadAgentId: string
|
|
39
72
|
displayNames: Record<string, string>
|
|
@@ -42,75 +75,155 @@ export function configureAgents(config: {
|
|
|
42
75
|
routerModelId?: string
|
|
43
76
|
teamConsultParticipants: readonly string[]
|
|
44
77
|
getCoreThreadProfile?: (coreType: string) => CoreThreadProfile
|
|
45
|
-
}):
|
|
78
|
+
}): ResolvedAgentConfig {
|
|
46
79
|
if (!config.roster.includes(config.leadAgentId)) {
|
|
47
|
-
throw new
|
|
80
|
+
throw new ConfigurationError({
|
|
81
|
+
message: `Lead agent "${config.leadAgentId}" must be present in the configured roster.`,
|
|
82
|
+
key: 'agents.leadAgentId',
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const shortDisplayNames = config.shortDisplayNames ?? {}
|
|
87
|
+
const descriptions = config.descriptions ?? {}
|
|
88
|
+
const resolved: ResolvedAgentConfig = {
|
|
89
|
+
roster: [...config.roster],
|
|
90
|
+
leadAgentId: config.leadAgentId,
|
|
91
|
+
displayNames: { ...config.displayNames },
|
|
92
|
+
shortDisplayNames: { ...shortDisplayNames },
|
|
93
|
+
descriptions: { ...descriptions },
|
|
94
|
+
routerModelId: config.routerModelId,
|
|
95
|
+
teamConsultParticipants: [...config.teamConsultParticipants],
|
|
96
|
+
getCoreThreadProfile: config.getCoreThreadProfile ?? defaultGetCoreThreadProfile,
|
|
97
|
+
rosterSet: new Set(config.roster),
|
|
98
|
+
aliasMap: buildAgentAliasMap({ roster: config.roster, displayNames: config.displayNames, shortDisplayNames }),
|
|
48
99
|
}
|
|
49
100
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
101
|
+
return resolved
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface ResolvedAgentFactoryConfig {
|
|
105
|
+
readonly createAgent: AgentFactory
|
|
106
|
+
readonly buildAgentTools: AgentToolBuilder
|
|
107
|
+
readonly getAgentRuntimeConfig: AgentRuntimeConfigProvider
|
|
108
|
+
readonly pluginRuntime?: Record<string, unknown>
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function resolveAgentFactoryConfig(config: {
|
|
112
|
+
createAgent?: AgentFactory
|
|
113
|
+
buildAgentTools?: AgentToolBuilder
|
|
114
|
+
getAgentRuntimeConfig?: AgentRuntimeConfigProvider
|
|
115
|
+
pluginRuntime?: Record<string, unknown>
|
|
116
|
+
}): ResolvedAgentFactoryConfig {
|
|
117
|
+
return {
|
|
118
|
+
createAgent: config.createAgent ?? {},
|
|
119
|
+
buildAgentTools: config.buildAgentTools ?? defaultBuildAgentTools,
|
|
120
|
+
getAgentRuntimeConfig: config.getAgentRuntimeConfig ?? defaultGetAgentRuntimeConfig,
|
|
121
|
+
pluginRuntime: config.pluginRuntime,
|
|
59
122
|
}
|
|
60
|
-
_agentRosterSet = null
|
|
61
|
-
_aliasMap = null
|
|
62
123
|
}
|
|
63
124
|
|
|
64
|
-
|
|
125
|
+
export interface CoreThreadProfile {
|
|
126
|
+
config: { coreType: string; agentId: string; title: string }
|
|
127
|
+
members: readonly string[]
|
|
128
|
+
tools: readonly string[]
|
|
129
|
+
skills: readonly string[]
|
|
130
|
+
instructions: string
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
let currentResolvedAgentConfig: ResolvedAgentConfig | null = null
|
|
134
|
+
let currentResolvedAgentFactoryConfig: ResolvedAgentFactoryConfig | null = null
|
|
135
|
+
|
|
136
|
+
export function configureAgentRuntimeDefaults(params: {
|
|
137
|
+
agentConfig: ResolvedAgentConfig
|
|
138
|
+
agentFactoryConfig: ResolvedAgentFactoryConfig
|
|
139
|
+
}): void {
|
|
140
|
+
currentResolvedAgentConfig = params.agentConfig
|
|
141
|
+
currentResolvedAgentFactoryConfig = params.agentFactoryConfig
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export function clearAgentRuntimeDefaults(): void {
|
|
145
|
+
currentResolvedAgentConfig = null
|
|
146
|
+
currentResolvedAgentFactoryConfig = null
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function resolveAgentConfigFromRuntime(): ResolvedAgentConfig {
|
|
150
|
+
return currentResolvedAgentConfig ?? resolveLotaService(AgentConfigServiceTag)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function resolveAgentFactoryConfigFromRuntime(): ResolvedAgentFactoryConfig {
|
|
154
|
+
return currentResolvedAgentFactoryConfig ?? resolveLotaService(AgentFactoryServiceTag)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function getResolvedAgentConfig(): ResolvedAgentConfig {
|
|
158
|
+
return resolveAgentConfigFromRuntime()
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function getResolvedAgentFactoryConfig(): ResolvedAgentFactoryConfig {
|
|
162
|
+
return resolveAgentFactoryConfigFromRuntime()
|
|
163
|
+
}
|
|
65
164
|
|
|
66
165
|
export function isAgentName(value: unknown): value is string {
|
|
67
|
-
|
|
68
|
-
|
|
166
|
+
return typeof value === 'string' && resolveAgentConfigFromRuntime().rosterSet.has(value)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export function getAgentRoster(): readonly string[] {
|
|
170
|
+
return resolveAgentConfigFromRuntime().roster
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export function getAgentDisplayNames(): Record<string, string> {
|
|
174
|
+
return resolveAgentConfigFromRuntime().displayNames
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export function getAgentShortDisplayNames(): Record<string, string> {
|
|
178
|
+
return resolveAgentConfigFromRuntime().shortDisplayNames
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export function getAgentDescriptions(): Record<string, string> {
|
|
182
|
+
return resolveAgentConfigFromRuntime().descriptions
|
|
69
183
|
}
|
|
70
184
|
|
|
71
185
|
export function getLeadAgentId(): string {
|
|
72
|
-
return leadAgentId
|
|
186
|
+
return resolveAgentConfigFromRuntime().leadAgentId
|
|
73
187
|
}
|
|
74
188
|
|
|
75
189
|
export function getLeadAgentDisplayName(): string {
|
|
76
|
-
|
|
190
|
+
const resolved = resolveAgentConfigFromRuntime()
|
|
191
|
+
return resolved.displayNames[resolved.leadAgentId] ?? resolved.leadAgentId
|
|
77
192
|
}
|
|
78
193
|
|
|
79
|
-
|
|
194
|
+
export function getRouterModelId(): string | undefined {
|
|
195
|
+
return resolveAgentConfigFromRuntime().routerModelId
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export function getTeamConsultParticipants(): readonly string[] {
|
|
199
|
+
return resolveAgentConfigFromRuntime().teamConsultParticipants
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export function getCoreThreadProfile(coreType: string): CoreThreadProfile {
|
|
203
|
+
return resolveAgentConfigFromRuntime().getCoreThreadProfile(coreType)
|
|
204
|
+
}
|
|
80
205
|
|
|
81
206
|
export function resolveAgentNameAlias(value: unknown): string | undefined {
|
|
82
207
|
if (typeof value !== 'string') return undefined
|
|
83
|
-
|
|
84
|
-
_aliasMap ??= (() => {
|
|
85
|
-
const map = new Map<string, string>()
|
|
86
|
-
for (const agent of agentRoster) {
|
|
87
|
-
map.set(agent.toLowerCase(), agent)
|
|
88
|
-
const displayName = agentDisplayNames[agent]
|
|
89
|
-
if (displayName) map.set(displayName.toLowerCase(), agent)
|
|
90
|
-
const shortName = agentShortDisplayNames[agent]
|
|
91
|
-
if (shortName) map.set(shortName.toLowerCase(), agent)
|
|
92
|
-
}
|
|
93
|
-
return map
|
|
94
|
-
})()
|
|
95
|
-
return _aliasMap.get(lowered)
|
|
208
|
+
return resolveAgentConfigFromRuntime().aliasMap.get(normalizeAgentLookupKey(value))
|
|
96
209
|
}
|
|
97
210
|
|
|
98
|
-
export
|
|
211
|
+
export function getCreateAgentRegistry(): AgentFactory {
|
|
212
|
+
return resolveAgentFactoryConfigFromRuntime().createAgent
|
|
213
|
+
}
|
|
99
214
|
|
|
100
|
-
export
|
|
101
|
-
|
|
102
|
-
|
|
215
|
+
export function buildAgentTools(...args: Parameters<AgentToolBuilder>): ReturnType<AgentToolBuilder> {
|
|
216
|
+
return resolveAgentFactoryConfigFromRuntime().buildAgentTools(...args)
|
|
217
|
+
}
|
|
103
218
|
|
|
104
|
-
export function
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
getAgentRuntimeConfig
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
getAgentRuntimeConfig = config.getAgentRuntimeConfig ?? defaultGetAgentRuntimeConfig
|
|
113
|
-
pluginRuntime = config.pluginRuntime
|
|
219
|
+
export function getAgentRuntimeConfig(
|
|
220
|
+
...args: Parameters<AgentRuntimeConfigProvider>
|
|
221
|
+
): ReturnType<AgentRuntimeConfigProvider> {
|
|
222
|
+
return resolveAgentFactoryConfigFromRuntime().getAgentRuntimeConfig(...args)
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export function getPluginRuntime(): Record<string, unknown> | undefined {
|
|
226
|
+
return resolveAgentFactoryConfigFromRuntime().pluginRuntime
|
|
114
227
|
}
|
|
115
228
|
|
|
116
229
|
const AGENT_MENTION_REGEX = /(^|[^\w])@([a-z][a-z0-9_-]*)\b/gi
|
|
@@ -122,15 +235,16 @@ export interface AgentMentionMatch {
|
|
|
122
235
|
length: number
|
|
123
236
|
}
|
|
124
237
|
|
|
125
|
-
export function extractAgentMentions(message: string): AgentMentionMatch[] {
|
|
238
|
+
export function extractAgentMentions(message: string, agentConfig?: ResolvedAgentConfig): AgentMentionMatch[] {
|
|
126
239
|
const matches: AgentMentionMatch[] = []
|
|
127
240
|
if (!message.trim()) return matches
|
|
128
241
|
|
|
242
|
+
const resolvedConfig = agentConfig ?? resolveAgentConfigFromRuntime()
|
|
129
243
|
const regex = new RegExp(AGENT_MENTION_REGEX)
|
|
130
244
|
for (const rawMatch of message.matchAll(regex)) {
|
|
131
245
|
const prefix = rawMatch[1]
|
|
132
246
|
const rawAgent = rawMatch[2].toLowerCase()
|
|
133
|
-
if (!
|
|
247
|
+
if (!resolvedConfig.rosterSet.has(rawAgent)) continue
|
|
134
248
|
|
|
135
249
|
const index = rawMatch.index + prefix.length
|
|
136
250
|
matches.push({ agent: rawAgent, mention: `@${rawAgent}`, index, length: rawAgent.length + 1 })
|
|
@@ -1,11 +1,61 @@
|
|
|
1
|
+
import type { ChatMode, CreateRoutedAgentOptions } from '@lota-sdk/shared'
|
|
2
|
+
import type { ToolLoopAgent, ToolSet } from 'ai'
|
|
3
|
+
|
|
4
|
+
import type { RecordIdRef } from '../db/record-id'
|
|
5
|
+
import type { AgentRuntimeConfig, AgentRuntimeRuleOptions } from '../runtime/agent-runtime-policy'
|
|
6
|
+
|
|
7
|
+
export interface AgentToolBuilderParams {
|
|
8
|
+
agentId: string
|
|
9
|
+
orgId: RecordIdRef
|
|
10
|
+
userId: RecordIdRef
|
|
11
|
+
userName?: string
|
|
12
|
+
orgIdString: string
|
|
13
|
+
threadId: RecordIdRef
|
|
14
|
+
threadType?: string
|
|
15
|
+
mode?: ChatMode
|
|
16
|
+
linearInstalled?: boolean
|
|
17
|
+
onboardingActive?: boolean
|
|
18
|
+
githubInstalled?: boolean
|
|
19
|
+
provideRepoTool?: boolean
|
|
20
|
+
defaultRepoSections?: unknown
|
|
21
|
+
memoryBlock: string
|
|
22
|
+
onAppendMemoryBlock: (value: string) => void
|
|
23
|
+
availableUploads?: unknown[]
|
|
24
|
+
includeExecutionPlanTools?: boolean
|
|
25
|
+
extraMessages?: unknown[]
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface AgentRuntimeConfigParams {
|
|
29
|
+
agentId: string
|
|
30
|
+
threadType: string
|
|
31
|
+
mode?: ChatMode
|
|
32
|
+
skills?: string[]
|
|
33
|
+
onboardingActive: boolean
|
|
34
|
+
linearInstalled: boolean
|
|
35
|
+
systemWorkspaceDetails?: string
|
|
36
|
+
preSeededMemoriesSection?: string
|
|
37
|
+
retrievedKnowledgeSection?: string
|
|
38
|
+
threadMemoryBlock?: string
|
|
39
|
+
responseGuardSection?: string
|
|
40
|
+
learnedSkillsSection?: string
|
|
41
|
+
userMessageText?: string
|
|
42
|
+
additionalInstructionSections?: string[]
|
|
43
|
+
ruleOptions?: AgentRuntimeRuleOptions
|
|
44
|
+
context?: unknown
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export type AgentCreator = <TTools extends ToolSet>(
|
|
48
|
+
options: CreateRoutedAgentOptions<TTools>,
|
|
49
|
+
) => ToolLoopAgent<never, TTools>
|
|
50
|
+
|
|
1
51
|
/**
|
|
2
52
|
* Registry of agent factory functions keyed by agent name.
|
|
3
|
-
* Each factory receives
|
|
53
|
+
* Each factory receives routed agent options and returns a typed tool-loop agent.
|
|
4
54
|
*/
|
|
5
|
-
export type AgentFactory = Record<string,
|
|
55
|
+
export type AgentFactory = Partial<Record<string, AgentCreator>>
|
|
6
56
|
|
|
7
57
|
/** Builds the tool set for a given agent. */
|
|
8
|
-
export type AgentToolBuilder = (
|
|
58
|
+
export type AgentToolBuilder = (params: AgentToolBuilderParams) => ToolSet | Promise<ToolSet>
|
|
9
59
|
|
|
10
60
|
/** Returns runtime configuration for a given agent. */
|
|
11
|
-
export type AgentRuntimeConfigProvider = (
|
|
61
|
+
export type AgentRuntimeConfigProvider = (params: AgentRuntimeConfigParams) => AgentRuntimeConfig<string>
|
|
@@ -12,7 +12,7 @@ const DEFAULT_CONFIG: BackgroundProcessingConfig = {
|
|
|
12
12
|
memoryConsolidationFrequency: 10,
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
const resolvedConfig: BackgroundProcessingConfig = { ...DEFAULT_CONFIG }
|
|
16
16
|
|
|
17
17
|
export function getBackgroundProcessingConfig(): BackgroundProcessingConfig {
|
|
18
18
|
return resolvedConfig
|
package/src/config/constants.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ValidationError } from '../effect/errors'
|
|
2
2
|
|
|
3
3
|
export const MEMORY = {
|
|
4
4
|
DEFAULT_CANDIDATE_LIMIT: 12,
|
|
@@ -6,7 +6,13 @@ export const MEMORY = {
|
|
|
6
6
|
MAX_KNN_LIMIT: 100,
|
|
7
7
|
} as const
|
|
8
8
|
|
|
9
|
+
export const DEFAULT_AI_GATEWAY_URL = 'https://ai-gateway.gobrainy.ai' as const
|
|
10
|
+
|
|
9
11
|
/** Validates that a value is a safe integer for KNN queries. Throws if validation fails. */
|
|
10
12
|
export function validateKnnLimit(limit: unknown): number {
|
|
11
|
-
|
|
13
|
+
if (typeof limit !== 'number' || !Number.isInteger(limit) || limit <= 0 || limit > MEMORY.MAX_KNN_LIMIT) {
|
|
14
|
+
throw new ValidationError({ message: `Memory KNN limit must be a positive integer <= ${MEMORY.MAX_KNN_LIMIT}.` })
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return limit
|
|
12
18
|
}
|