@lota-sdk/core 0.4.7 → 0.4.9
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 +94 -22
- package/src/ai-gateway/ai-gateway.ts +738 -223
- package/src/config/agent-defaults.ts +176 -75
- package/src/config/agent-types.ts +54 -4
- package/src/config/constants.ts +8 -2
- package/src/config/logger.ts +286 -19
- package/src/config/model-constants.ts +1 -0
- package/src/config/thread-defaults.ts +33 -21
- package/src/create-runtime.ts +725 -383
- package/src/db/base.service.ts +52 -28
- package/src/db/cursor-pagination.ts +71 -30
- package/src/db/memory-store.helpers.ts +4 -7
- package/src/db/memory-store.ts +856 -598
- package/src/db/memory.ts +398 -275
- package/src/db/record-id.ts +32 -10
- package/src/db/schema-fingerprint.ts +30 -12
- package/src/db/service-normalization.ts +255 -0
- package/src/db/service.ts +726 -761
- package/src/db/startup.ts +140 -66
- package/src/db/transaction-conflict.ts +15 -0
- package/src/effect/awaitable-effect.ts +87 -0
- package/src/effect/errors.ts +121 -0
- package/src/effect/helpers.ts +98 -0
- package/src/effect/index.ts +22 -0
- package/src/effect/layers.ts +228 -0
- package/src/effect/runtime-ref.ts +25 -0
- package/src/effect/runtime.ts +31 -0
- package/src/effect/services.ts +57 -0
- package/src/effect/zod.ts +43 -0
- package/src/embeddings/provider.ts +122 -71
- package/src/index.ts +46 -1
- package/src/openrouter/direct-provider.ts +29 -0
- package/src/queues/autonomous-job.queue.ts +130 -74
- package/src/queues/context-compaction.queue.ts +60 -15
- package/src/queues/delayed-node-promotion.queue.ts +52 -15
- 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 +13 -4
- package/src/queues/plan-agent-heartbeat.queue.ts +65 -21
- package/src/queues/plan-scheduler.queue.ts +107 -31
- package/src/queues/post-chat-memory.queue.ts +66 -24
- package/src/queues/queue-factory.ts +142 -52
- package/src/queues/standalone-worker.ts +39 -0
- package/src/queues/title-generation.queue.ts +54 -9
- package/src/redis/connection.ts +84 -32
- 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 +10 -0
- package/src/redis/stream-context.ts +84 -46
- package/src/runtime/agent-identity-overrides.ts +2 -2
- package/src/runtime/agent-runtime-policy.ts +4 -1
- package/src/runtime/agent-stream-helpers.ts +20 -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} +114 -91
- package/src/runtime/execution-plan-visibility.ts +2 -2
- package/src/runtime/execution-plan.ts +42 -15
- package/src/runtime/graph-designer.ts +11 -7
- package/src/runtime/helper-model.ts +135 -48
- package/src/runtime/index.ts +7 -7
- package/src/runtime/indexed-repositories-policy.ts +3 -3
- package/src/runtime/{memory-block.ts → memory/memory-block.ts} +40 -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} +1 -1
- package/src/runtime/{memory-prompts-fact.ts → memory/memory-prompts-fact.ts} +2 -2
- package/src/runtime/{memory-scope.ts → memory/memory-scope.ts} +12 -6
- package/src/runtime/plugin-resolution.ts +144 -24
- package/src/runtime/plugin-types.ts +9 -1
- package/src/runtime/post-turn-side-effects.ts +197 -130
- package/src/runtime/retrieval-adapters.ts +38 -4
- package/src/runtime/runtime-config.ts +165 -61
- package/src/runtime/runtime-extensions.ts +21 -34
- package/src/runtime/social-chat/social-chat-agent-runner.ts +157 -0
- package/src/runtime/{social-chat-history.ts → social-chat/social-chat-history.ts} +42 -20
- package/src/runtime/social-chat/social-chat.ts +594 -0
- package/src/runtime/specialist-runner.ts +36 -10
- package/src/runtime/team-consultation/team-consultation-orchestrator.ts +427 -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 +172 -94
- package/src/runtime/turn-lifecycle.ts +93 -27
- package/src/services/agent-activity.service.ts +287 -203
- package/src/services/agent-executor.service.ts +329 -217
- package/src/services/artifact.service.ts +225 -148
- package/src/services/attachment.service.ts +137 -115
- package/src/services/autonomous-job.service.ts +888 -491
- package/src/services/chat-run-registry.service.ts +11 -1
- package/src/services/context-compaction.service.ts +136 -86
- package/src/services/document-chunk.service.ts +162 -90
- 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 +256 -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 +80 -170
- package/src/services/graph-full-routing.ts +182 -0
- package/src/services/index.ts +18 -20
- package/src/services/institutional-memory.service.ts +220 -123
- package/src/services/learned-skill.service.ts +364 -259
- package/src/services/memory/memory-conversation.ts +95 -0
- package/src/services/memory/memory-org-memory.ts +39 -0
- package/src/services/memory/memory-preseeded.ts +80 -0
- package/src/services/memory/memory-rerank.ts +297 -0
- package/src/services/{memory-utils.ts → memory/memory-utils.ts} +5 -5
- package/src/services/memory/memory.service.ts +692 -0
- package/src/services/memory/rerank.service.ts +209 -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 +17 -16
- package/src/services/organization-member.service.ts +120 -66
- package/src/services/organization.service.ts +144 -51
- package/src/services/ownership-dispatcher.service.ts +415 -264
- 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/plan-approval.service.ts +102 -0
- 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 +175 -0
- package/src/services/plan/plan-coordination.service.ts +181 -0
- package/src/services/plan/plan-cycle.service.ts +398 -0
- package/src/services/plan/plan-deadline.service.ts +547 -0
- package/src/services/plan/plan-event-delivery.service.ts +261 -0
- package/src/services/plan/plan-executor-context.ts +35 -0
- package/src/services/plan/plan-executor-graph.ts +475 -0
- package/src/services/plan/plan-executor-helpers.ts +322 -0
- package/src/services/plan/plan-executor-persistence.ts +209 -0
- package/src/services/plan/plan-executor.service.ts +1654 -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 +644 -0
- package/src/services/plan/plan-scheduler.service.ts +385 -0
- package/src/services/plan/plan-template.service.ts +224 -0
- package/src/services/plan/plan-transaction-events.ts +33 -0
- package/src/services/plan/plan-validator.service.ts +907 -0
- package/src/services/plan/plan-workspace.service.ts +125 -0
- package/src/services/plugin-executor.service.ts +97 -68
- package/src/services/quality-metrics.service.ts +112 -94
- package/src/services/queue-job.service.ts +296 -230
- package/src/services/recent-activity-title.service.ts +65 -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 +176 -125
- package/src/services/system-executor.service.ts +91 -61
- package/src/services/thread/thread-active-run.ts +203 -0
- package/src/services/thread/thread-bootstrap.ts +369 -0
- package/src/services/thread/thread-listing.ts +198 -0
- package/src/services/thread/thread-memory-block.ts +117 -0
- package/src/services/thread/thread-message.service.ts +363 -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 +1146 -0
- package/src/services/thread/thread-turn-streaming.ts +402 -0
- package/src/services/thread/thread-turn-tracing.ts +35 -0
- package/src/services/thread/thread-turn.ts +343 -0
- package/src/services/thread/thread.service.ts +335 -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 +331 -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 +2 -2
- package/src/system-agents/delegated-agent-factory.ts +159 -90
- package/src/system-agents/memory-reranker.agent.ts +2 -2
- package/src/system-agents/memory.agent.ts +2 -2
- package/src/system-agents/recent-activity-title-refiner.agent.ts +2 -2
- package/src/system-agents/regular-chat-memory-digest.agent.ts +2 -2
- package/src/system-agents/skill-extractor.agent.ts +2 -2
- package/src/system-agents/skill-manager.agent.ts +2 -2
- package/src/system-agents/thread-router.agent.ts +157 -113
- package/src/system-agents/title-generator.agent.ts +2 -2
- package/src/tools/execution-plan.tool.ts +220 -161
- package/src/tools/fetch-webpage.tool.ts +21 -17
- package/src/tools/firecrawl-client.ts +16 -6
- package/src/tools/index.ts +1 -0
- package/src/tools/memory-block.tool.ts +14 -6
- package/src/tools/plan-approval.tool.ts +49 -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 +26 -22
- package/src/tools/search.tool.ts +41 -29
- package/src/tools/team-think.tool.ts +124 -83
- package/src/tools/user-questions.tool.ts +4 -3
- package/src/tools/web-tool-shared.ts +6 -0
- package/src/utils/async.ts +17 -23
- package/src/utils/crypto.ts +21 -0
- package/src/utils/date-time.ts +40 -1
- package/src/utils/errors.ts +95 -16
- 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 +186 -51
- 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 +175 -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 +56 -31
- package/src/config/debug-logger.ts +0 -47
- package/src/redis/connection-accessor.ts +0 -26
- package/src/runtime/context-compaction-runtime.ts +0 -87
- 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 -844
- package/src/services/plan-agent-heartbeat.service.ts +0 -136
- package/src/services/plan-agent-query.service.ts +0 -267
- package/src/services/plan-approval.service.ts +0 -83
- 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/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,73 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { ToolSet } from 'ai'
|
|
2
|
+
import { Effect } from 'effect'
|
|
3
|
+
|
|
4
|
+
import { ConfigurationError } from '../effect/errors'
|
|
5
|
+
import { getCurrentRuntime } from '../effect/runtime-ref'
|
|
6
|
+
import { AgentConfigServiceTag, AgentFactoryServiceTag } from '../effect/services'
|
|
7
|
+
import type {
|
|
8
|
+
AgentFactory,
|
|
9
|
+
AgentRuntimeConfigParams,
|
|
10
|
+
AgentRuntimeConfigProvider,
|
|
11
|
+
AgentToolBuilder,
|
|
12
|
+
} from './agent-types'
|
|
13
|
+
|
|
14
|
+
function defaultBuildAgentTools(): ToolSet {
|
|
4
15
|
return {}
|
|
5
16
|
}
|
|
6
17
|
|
|
7
|
-
function defaultGetAgentRuntimeConfig(
|
|
8
|
-
return {
|
|
18
|
+
function defaultGetAgentRuntimeConfig(params: AgentRuntimeConfigParams) {
|
|
19
|
+
return {
|
|
20
|
+
id: params.agentId,
|
|
21
|
+
displayName: params.agentId,
|
|
22
|
+
mode: params.mode ?? (params.threadType === 'default' ? 'fixedThreadMode' : 'threadMode'),
|
|
23
|
+
maxSteps: 15,
|
|
24
|
+
}
|
|
9
25
|
}
|
|
10
26
|
|
|
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[] = []
|
|
27
|
+
function defaultGetCoreThreadProfile(coreType: string): CoreThreadProfile {
|
|
28
|
+
return { config: { coreType, agentId: '', title: '' }, members: [], tools: [], skills: [], instructions: '' }
|
|
29
|
+
}
|
|
19
30
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
members: readonly string[]
|
|
23
|
-
tools: readonly string[]
|
|
24
|
-
skills: readonly string[]
|
|
25
|
-
instructions: string
|
|
31
|
+
function normalizeAgentLookupKey(value: string): string {
|
|
32
|
+
return value.trim().toLowerCase()
|
|
26
33
|
}
|
|
27
34
|
|
|
28
|
-
export
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
export interface ResolvedAgentConfig {
|
|
36
|
+
readonly roster: readonly string[]
|
|
37
|
+
readonly leadAgentId: string
|
|
38
|
+
readonly displayNames: Record<string, string>
|
|
39
|
+
readonly shortDisplayNames: Record<string, string>
|
|
40
|
+
readonly descriptions: Record<string, string>
|
|
41
|
+
readonly routerModelId: string | undefined
|
|
42
|
+
readonly teamConsultParticipants: readonly string[]
|
|
43
|
+
readonly getCoreThreadProfile: (coreType: string) => CoreThreadProfile
|
|
44
|
+
readonly rosterSet: ReadonlySet<string>
|
|
45
|
+
readonly aliasMap: ReadonlyMap<string, string>
|
|
46
|
+
}
|
|
35
47
|
|
|
36
|
-
|
|
48
|
+
function buildAgentAliasMap(config: {
|
|
49
|
+
roster: readonly string[]
|
|
50
|
+
displayNames: Record<string, string>
|
|
51
|
+
shortDisplayNames: Record<string, string>
|
|
52
|
+
}): Map<string, string> {
|
|
53
|
+
const map = new Map<string, string>()
|
|
54
|
+
|
|
55
|
+
for (const agent of config.roster) {
|
|
56
|
+
map.set(normalizeAgentLookupKey(agent), agent)
|
|
57
|
+
const displayName = config.displayNames[agent]
|
|
58
|
+
if (displayName) {
|
|
59
|
+
map.set(normalizeAgentLookupKey(displayName), agent)
|
|
60
|
+
}
|
|
61
|
+
const shortName = config.shortDisplayNames[agent]
|
|
62
|
+
if (shortName) {
|
|
63
|
+
map.set(normalizeAgentLookupKey(shortName), agent)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return map
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function resolveAgentConfig(config: {
|
|
37
71
|
roster: readonly string[]
|
|
38
72
|
leadAgentId: string
|
|
39
73
|
displayNames: Record<string, string>
|
|
@@ -42,75 +76,139 @@ export function configureAgents(config: {
|
|
|
42
76
|
routerModelId?: string
|
|
43
77
|
teamConsultParticipants: readonly string[]
|
|
44
78
|
getCoreThreadProfile?: (coreType: string) => CoreThreadProfile
|
|
45
|
-
}):
|
|
79
|
+
}): ResolvedAgentConfig {
|
|
46
80
|
if (!config.roster.includes(config.leadAgentId)) {
|
|
47
|
-
throw new
|
|
81
|
+
throw new ConfigurationError({
|
|
82
|
+
message: `Lead agent "${config.leadAgentId}" must be present in the configured roster.`,
|
|
83
|
+
key: 'agents.leadAgentId',
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const shortDisplayNames = config.shortDisplayNames ?? {}
|
|
88
|
+
const descriptions = config.descriptions ?? {}
|
|
89
|
+
const resolved: ResolvedAgentConfig = {
|
|
90
|
+
roster: [...config.roster],
|
|
91
|
+
leadAgentId: config.leadAgentId,
|
|
92
|
+
displayNames: { ...config.displayNames },
|
|
93
|
+
shortDisplayNames: { ...shortDisplayNames },
|
|
94
|
+
descriptions: { ...descriptions },
|
|
95
|
+
routerModelId: config.routerModelId,
|
|
96
|
+
teamConsultParticipants: [...config.teamConsultParticipants],
|
|
97
|
+
getCoreThreadProfile: config.getCoreThreadProfile ?? defaultGetCoreThreadProfile,
|
|
98
|
+
rosterSet: new Set(config.roster),
|
|
99
|
+
aliasMap: buildAgentAliasMap({ roster: config.roster, displayNames: config.displayNames, shortDisplayNames }),
|
|
48
100
|
}
|
|
49
101
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
102
|
+
return resolved
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface ResolvedAgentFactoryConfig {
|
|
106
|
+
readonly createAgent: AgentFactory
|
|
107
|
+
readonly buildAgentTools: AgentToolBuilder
|
|
108
|
+
readonly getAgentRuntimeConfig: AgentRuntimeConfigProvider
|
|
109
|
+
readonly pluginRuntime?: Record<string, unknown>
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function resolveAgentFactoryConfig(config: {
|
|
113
|
+
createAgent?: AgentFactory
|
|
114
|
+
buildAgentTools?: AgentToolBuilder
|
|
115
|
+
getAgentRuntimeConfig?: AgentRuntimeConfigProvider
|
|
116
|
+
pluginRuntime?: Record<string, unknown>
|
|
117
|
+
}): ResolvedAgentFactoryConfig {
|
|
118
|
+
return {
|
|
119
|
+
createAgent: config.createAgent ?? {},
|
|
120
|
+
buildAgentTools: config.buildAgentTools ?? defaultBuildAgentTools,
|
|
121
|
+
getAgentRuntimeConfig: config.getAgentRuntimeConfig ?? defaultGetAgentRuntimeConfig,
|
|
122
|
+
pluginRuntime: config.pluginRuntime,
|
|
59
123
|
}
|
|
60
|
-
_agentRosterSet = null
|
|
61
|
-
_aliasMap = null
|
|
62
124
|
}
|
|
63
125
|
|
|
64
|
-
|
|
126
|
+
export interface CoreThreadProfile {
|
|
127
|
+
config: { coreType: string; agentId: string; title: string }
|
|
128
|
+
members: readonly string[]
|
|
129
|
+
tools: readonly string[]
|
|
130
|
+
skills: readonly string[]
|
|
131
|
+
instructions: string
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function resolveAgentConfigFromRuntime(): ResolvedAgentConfig {
|
|
135
|
+
return getCurrentRuntime().runSync(Effect.service(AgentConfigServiceTag))
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function resolveAgentFactoryConfigFromRuntime(): ResolvedAgentFactoryConfig {
|
|
139
|
+
return getCurrentRuntime().runSync(Effect.service(AgentFactoryServiceTag))
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function getResolvedAgentConfig(): ResolvedAgentConfig {
|
|
143
|
+
return resolveAgentConfigFromRuntime()
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export function getResolvedAgentFactoryConfig(): ResolvedAgentFactoryConfig {
|
|
147
|
+
return resolveAgentFactoryConfigFromRuntime()
|
|
148
|
+
}
|
|
65
149
|
|
|
66
150
|
export function isAgentName(value: unknown): value is string {
|
|
67
|
-
|
|
68
|
-
|
|
151
|
+
return typeof value === 'string' && resolveAgentConfigFromRuntime().rosterSet.has(value)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export function getAgentRoster(): readonly string[] {
|
|
155
|
+
return resolveAgentConfigFromRuntime().roster
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export function getAgentDisplayNames(): Record<string, string> {
|
|
159
|
+
return resolveAgentConfigFromRuntime().displayNames
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export function getAgentShortDisplayNames(): Record<string, string> {
|
|
163
|
+
return resolveAgentConfigFromRuntime().shortDisplayNames
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export function getAgentDescriptions(): Record<string, string> {
|
|
167
|
+
return resolveAgentConfigFromRuntime().descriptions
|
|
69
168
|
}
|
|
70
169
|
|
|
71
170
|
export function getLeadAgentId(): string {
|
|
72
|
-
return leadAgentId
|
|
171
|
+
return resolveAgentConfigFromRuntime().leadAgentId
|
|
73
172
|
}
|
|
74
173
|
|
|
75
174
|
export function getLeadAgentDisplayName(): string {
|
|
76
|
-
|
|
175
|
+
const resolved = resolveAgentConfigFromRuntime()
|
|
176
|
+
return resolved.displayNames[resolved.leadAgentId] ?? resolved.leadAgentId
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export function getRouterModelId(): string | undefined {
|
|
180
|
+
return resolveAgentConfigFromRuntime().routerModelId
|
|
77
181
|
}
|
|
78
182
|
|
|
79
|
-
|
|
183
|
+
export function getTeamConsultParticipants(): readonly string[] {
|
|
184
|
+
return resolveAgentConfigFromRuntime().teamConsultParticipants
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export function getCoreThreadProfile(coreType: string): CoreThreadProfile {
|
|
188
|
+
return resolveAgentConfigFromRuntime().getCoreThreadProfile(coreType)
|
|
189
|
+
}
|
|
80
190
|
|
|
81
191
|
export function resolveAgentNameAlias(value: unknown): string | undefined {
|
|
82
192
|
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)
|
|
193
|
+
return resolveAgentConfigFromRuntime().aliasMap.get(normalizeAgentLookupKey(value))
|
|
96
194
|
}
|
|
97
195
|
|
|
98
|
-
export
|
|
196
|
+
export function getCreateAgentRegistry(): AgentFactory {
|
|
197
|
+
return resolveAgentFactoryConfigFromRuntime().createAgent
|
|
198
|
+
}
|
|
99
199
|
|
|
100
|
-
export
|
|
101
|
-
|
|
102
|
-
|
|
200
|
+
export function buildAgentTools(...args: Parameters<AgentToolBuilder>): ReturnType<AgentToolBuilder> {
|
|
201
|
+
return resolveAgentFactoryConfigFromRuntime().buildAgentTools(...args)
|
|
202
|
+
}
|
|
103
203
|
|
|
104
|
-
export function
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
getAgentRuntimeConfig
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
getAgentRuntimeConfig = config.getAgentRuntimeConfig ?? defaultGetAgentRuntimeConfig
|
|
113
|
-
pluginRuntime = config.pluginRuntime
|
|
204
|
+
export function getAgentRuntimeConfig(
|
|
205
|
+
...args: Parameters<AgentRuntimeConfigProvider>
|
|
206
|
+
): ReturnType<AgentRuntimeConfigProvider> {
|
|
207
|
+
return resolveAgentFactoryConfigFromRuntime().getAgentRuntimeConfig(...args)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export function getPluginRuntime(): Record<string, unknown> | undefined {
|
|
211
|
+
return resolveAgentFactoryConfigFromRuntime().pluginRuntime
|
|
114
212
|
}
|
|
115
213
|
|
|
116
214
|
const AGENT_MENTION_REGEX = /(^|[^\w])@([a-z][a-z0-9_-]*)\b/gi
|
|
@@ -122,7 +220,10 @@ export interface AgentMentionMatch {
|
|
|
122
220
|
length: number
|
|
123
221
|
}
|
|
124
222
|
|
|
125
|
-
export function extractAgentMentions(
|
|
223
|
+
export function extractAgentMentions(
|
|
224
|
+
message: string,
|
|
225
|
+
agentConfig: ResolvedAgentConfig = resolveAgentConfigFromRuntime(),
|
|
226
|
+
): AgentMentionMatch[] {
|
|
126
227
|
const matches: AgentMentionMatch[] = []
|
|
127
228
|
if (!message.trim()) return matches
|
|
128
229
|
|
|
@@ -130,7 +231,7 @@ export function extractAgentMentions(message: string): AgentMentionMatch[] {
|
|
|
130
231
|
for (const rawMatch of message.matchAll(regex)) {
|
|
131
232
|
const prefix = rawMatch[1]
|
|
132
233
|
const rawAgent = rawMatch[2].toLowerCase()
|
|
133
|
-
if (!
|
|
234
|
+
if (!agentConfig.rosterSet.has(rawAgent)) continue
|
|
134
235
|
|
|
135
236
|
const index = rawMatch.index + prefix.length
|
|
136
237
|
matches.push({ agent: rawAgent, mention: `@${rawAgent}`, index, length: rawAgent.length + 1 })
|
|
@@ -1,11 +1,61 @@
|
|
|
1
|
+
import type { ToolLoopAgent, ToolSet } from 'ai'
|
|
2
|
+
|
|
3
|
+
import type { RecordIdRef } from '../db/record-id'
|
|
4
|
+
import type { AgentRuntimeConfig, AgentRuntimeRuleOptions } from '../runtime/agent-runtime-policy'
|
|
5
|
+
import type { ChatMode, CreateRoutedAgentOptions } from '../runtime/agent-types'
|
|
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>
|
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
|
}
|