feat: wire up all Phase 2-6 features into daemon and config
Integrate all new features into the shared infrastructure: - Config schema: add memory, discord, slack, process, web_search schemas - Daemon wiring: memory store init, tool registration, channel adapters - Orchestrator: memory injection into system prompt, extraction on compaction - Agent: add setSystemPrompt() for dynamic prompt updates - Channel/tool index: export new adapters and tool factories - Add @slack/bolt, discord.js, turndown, linkedom, @mozilla/readability deps - Update state.json with Phase 3b completion (494 tests passing)
This commit is contained in:
@@ -107,6 +107,13 @@ const agentsSchema = z.object({
|
||||
max_delegation_depth: z.number().min(1).max(10).default(3),
|
||||
}).default({});
|
||||
|
||||
const memorySchema = z.object({
|
||||
enabled: z.boolean().default(true),
|
||||
dir: z.string().optional(), // Default: ~/.local/share/flynn/memory
|
||||
auto_extract: z.boolean().default(true),
|
||||
max_context_tokens: z.number().min(100).max(10000).default(2000),
|
||||
}).default({});
|
||||
|
||||
const compactionSchema = z.object({
|
||||
enabled: z.boolean().default(true),
|
||||
threshold_pct: z.number().min(10).max(100).default(80),
|
||||
@@ -114,8 +121,37 @@ const compactionSchema = z.object({
|
||||
summary_max_tokens: z.number().min(128).max(4096).default(1024),
|
||||
}).default({});
|
||||
|
||||
const discordSchema = z.object({
|
||||
bot_token: z.string().min(1, 'Bot token is required'),
|
||||
allowed_guild_ids: z.array(z.string()).default([]),
|
||||
allowed_channel_ids: z.array(z.string()).default([]),
|
||||
require_mention: z.boolean().default(true),
|
||||
}).optional();
|
||||
|
||||
const slackSchema = z.object({
|
||||
bot_token: z.string().min(1, 'Bot token is required'),
|
||||
app_token: z.string().min(1, 'App token is required'),
|
||||
signing_secret: z.string().min(1, 'Signing secret is required'),
|
||||
allowed_channel_ids: z.array(z.string()).default([]),
|
||||
}).optional();
|
||||
|
||||
const processSchema = z.object({
|
||||
max_concurrent: z.number().min(1).max(50).default(10),
|
||||
max_runtime_minutes: z.number().min(1).max(1440).default(60),
|
||||
buffer_size: z.number().min(1024).max(1048576).default(65536),
|
||||
}).default({});
|
||||
|
||||
const webSearchSchema = z.object({
|
||||
provider: z.enum(['brave', 'searxng']).default('brave'),
|
||||
api_key: z.string().optional(),
|
||||
endpoint: z.string().optional(),
|
||||
max_results: z.number().min(1).max(20).default(5),
|
||||
}).default({});
|
||||
|
||||
export const configSchema = z.object({
|
||||
telegram: telegramSchema,
|
||||
discord: discordSchema,
|
||||
slack: slackSchema,
|
||||
server: serverSchema.default({}),
|
||||
models: modelsSchema,
|
||||
backends: backendsSchema.default({}),
|
||||
@@ -125,6 +161,9 @@ export const configSchema = z.object({
|
||||
automation: automationSchema,
|
||||
agents: agentsSchema,
|
||||
compaction: compactionSchema,
|
||||
memory: memorySchema,
|
||||
process: processSchema,
|
||||
web_search: webSearchSchema,
|
||||
});
|
||||
|
||||
export type Config = z.infer<typeof configSchema>;
|
||||
@@ -133,3 +172,8 @@ export type ModelConfig = z.infer<typeof modelConfigSchema>;
|
||||
export type CronJobConfig = z.infer<typeof cronJobSchema>;
|
||||
export type AgentsConfig = z.infer<typeof agentsSchema>;
|
||||
export type CompactionConfig = z.infer<typeof compactionSchema>;
|
||||
export type MemoryConfig = z.infer<typeof memorySchema>;
|
||||
export type WebSearchConfig = z.infer<typeof webSearchSchema>;
|
||||
export type ProcessConfig = z.infer<typeof processSchema>;
|
||||
export type DiscordConfig = z.infer<typeof discordSchema>;
|
||||
export type SlackConfig = z.infer<typeof slackSchema>;
|
||||
|
||||
Reference in New Issue
Block a user