feat(tools): add tools for session manager and skill refresh
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
+66
-18
@@ -37,6 +37,48 @@ import type { Managers } from "../create-managers"
|
|||||||
import type { SkillContext } from "./skill-context"
|
import type { SkillContext } from "./skill-context"
|
||||||
import { normalizeToolArgSchemas } from "./normalize-tool-arg-schemas"
|
import { normalizeToolArgSchemas } from "./normalize-tool-arg-schemas"
|
||||||
|
|
||||||
|
type ToolRegistryFactories = {
|
||||||
|
builtinTools: typeof builtinTools
|
||||||
|
createBackgroundTools: typeof createBackgroundTools
|
||||||
|
createCallOmoAgent: typeof createCallOmoAgent
|
||||||
|
createLookAt: typeof createLookAt
|
||||||
|
createSkillMcpTool: typeof createSkillMcpTool
|
||||||
|
createSkillTool: typeof createSkillTool
|
||||||
|
createGrepTools: typeof createGrepTools
|
||||||
|
createGlobTools: typeof createGlobTools
|
||||||
|
createAstGrepTools: typeof createAstGrepTools
|
||||||
|
createSessionManagerTools: typeof createSessionManagerTools
|
||||||
|
createDelegateTask: typeof createDelegateTask
|
||||||
|
discoverCommandsSync: typeof discoverCommandsSync
|
||||||
|
interactive_bash: typeof interactive_bash
|
||||||
|
createTaskCreateTool: typeof createTaskCreateTool
|
||||||
|
createTaskGetTool: typeof createTaskGetTool
|
||||||
|
createTaskList: typeof createTaskList
|
||||||
|
createTaskUpdateTool: typeof createTaskUpdateTool
|
||||||
|
createHashlineEditTool: typeof createHashlineEditTool
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultToolRegistryFactories: ToolRegistryFactories = {
|
||||||
|
builtinTools,
|
||||||
|
createBackgroundTools,
|
||||||
|
createCallOmoAgent,
|
||||||
|
createLookAt,
|
||||||
|
createSkillMcpTool,
|
||||||
|
createSkillTool,
|
||||||
|
createGrepTools,
|
||||||
|
createGlobTools,
|
||||||
|
createAstGrepTools,
|
||||||
|
createSessionManagerTools,
|
||||||
|
createDelegateTask,
|
||||||
|
discoverCommandsSync,
|
||||||
|
interactive_bash,
|
||||||
|
createTaskCreateTool,
|
||||||
|
createTaskGetTool,
|
||||||
|
createTaskList,
|
||||||
|
createTaskUpdateTool,
|
||||||
|
createHashlineEditTool,
|
||||||
|
}
|
||||||
|
|
||||||
export type ToolRegistryResult = {
|
export type ToolRegistryResult = {
|
||||||
filteredTools: ToolsRecord
|
filteredTools: ToolsRecord
|
||||||
taskSystemEnabled: boolean
|
taskSystemEnabled: boolean
|
||||||
@@ -106,6 +148,7 @@ export function createToolRegistry(args: {
|
|||||||
skillContext: SkillContext
|
skillContext: SkillContext
|
||||||
availableCategories: AvailableCategory[]
|
availableCategories: AvailableCategory[]
|
||||||
interactiveBashEnabled?: boolean
|
interactiveBashEnabled?: boolean
|
||||||
|
toolFactories?: Partial<ToolRegistryFactories>
|
||||||
}): ToolRegistryResult {
|
}): ToolRegistryResult {
|
||||||
const {
|
const {
|
||||||
ctx,
|
ctx,
|
||||||
@@ -114,9 +157,14 @@ export function createToolRegistry(args: {
|
|||||||
skillContext,
|
skillContext,
|
||||||
availableCategories,
|
availableCategories,
|
||||||
interactiveBashEnabled = isInteractiveBashEnabled(),
|
interactiveBashEnabled = isInteractiveBashEnabled(),
|
||||||
|
toolFactories,
|
||||||
} = args
|
} = args
|
||||||
const backgroundTools = createBackgroundTools(managers.backgroundManager, ctx.client)
|
const factories: ToolRegistryFactories = {
|
||||||
const callOmoAgent = createCallOmoAgent(
|
...defaultToolRegistryFactories,
|
||||||
|
...toolFactories,
|
||||||
|
}
|
||||||
|
const backgroundTools = factories.createBackgroundTools(managers.backgroundManager, ctx.client)
|
||||||
|
const callOmoAgent = factories.createCallOmoAgent(
|
||||||
ctx,
|
ctx,
|
||||||
managers.backgroundManager,
|
managers.backgroundManager,
|
||||||
pluginConfig.disabled_agents ?? [],
|
pluginConfig.disabled_agents ?? [],
|
||||||
@@ -127,9 +175,9 @@ export function createToolRegistry(args: {
|
|||||||
const isMultimodalLookerEnabled = !(pluginConfig.disabled_agents ?? []).some(
|
const isMultimodalLookerEnabled = !(pluginConfig.disabled_agents ?? []).some(
|
||||||
(agent) => agent.toLowerCase() === "multimodal-looker",
|
(agent) => agent.toLowerCase() === "multimodal-looker",
|
||||||
)
|
)
|
||||||
const lookAt = isMultimodalLookerEnabled ? createLookAt(ctx) : null
|
const lookAt = isMultimodalLookerEnabled ? factories.createLookAt(ctx) : null
|
||||||
|
|
||||||
const delegateTask = createDelegateTask({
|
const delegateTask = factories.createDelegateTask({
|
||||||
manager: managers.backgroundManager,
|
manager: managers.backgroundManager,
|
||||||
client: ctx.client,
|
client: ctx.client,
|
||||||
directory: ctx.directory,
|
directory: ctx.directory,
|
||||||
@@ -176,17 +224,17 @@ export function createToolRegistry(args: {
|
|||||||
|
|
||||||
const getSessionIDForMcp = (): string | undefined => getMainSessionID()
|
const getSessionIDForMcp = (): string | undefined => getMainSessionID()
|
||||||
|
|
||||||
const skillMcpTool = createSkillMcpTool({
|
const skillMcpTool = factories.createSkillMcpTool({
|
||||||
manager: managers.skillMcpManager,
|
manager: managers.skillMcpManager,
|
||||||
getLoadedSkills: () => skillContext.mergedSkills,
|
getLoadedSkills: () => skillContext.mergedSkills,
|
||||||
getSessionID: getSessionIDForMcp,
|
getSessionID: getSessionIDForMcp,
|
||||||
})
|
})
|
||||||
|
|
||||||
const commands = discoverCommandsSync(ctx.directory, {
|
const commands = factories.discoverCommandsSync(ctx.directory, {
|
||||||
pluginsEnabled: pluginConfig.claude_code?.plugins ?? true,
|
pluginsEnabled: pluginConfig.claude_code?.plugins ?? true,
|
||||||
enabledPluginsOverride: pluginConfig.claude_code?.plugins_override,
|
enabledPluginsOverride: pluginConfig.claude_code?.plugins_override,
|
||||||
})
|
})
|
||||||
const skillTool = createSkillTool({
|
const skillTool = factories.createSkillTool({
|
||||||
commands,
|
commands,
|
||||||
skills: skillContext.mergedSkills,
|
skills: skillContext.mergedSkills,
|
||||||
mcpManager: managers.skillMcpManager,
|
mcpManager: managers.skillMcpManager,
|
||||||
@@ -199,31 +247,31 @@ export function createToolRegistry(args: {
|
|||||||
const taskSystemEnabled = isTaskSystemEnabled(pluginConfig)
|
const taskSystemEnabled = isTaskSystemEnabled(pluginConfig)
|
||||||
const taskToolsRecord: Record<string, ToolDefinition> = taskSystemEnabled
|
const taskToolsRecord: Record<string, ToolDefinition> = taskSystemEnabled
|
||||||
? {
|
? {
|
||||||
task_create: createTaskCreateTool(pluginConfig, ctx),
|
task_create: factories.createTaskCreateTool(pluginConfig, ctx),
|
||||||
task_get: createTaskGetTool(pluginConfig),
|
task_get: factories.createTaskGetTool(pluginConfig),
|
||||||
task_list: createTaskList(pluginConfig),
|
task_list: factories.createTaskList(pluginConfig),
|
||||||
task_update: createTaskUpdateTool(pluginConfig, ctx),
|
task_update: factories.createTaskUpdateTool(pluginConfig, ctx),
|
||||||
}
|
}
|
||||||
: {}
|
: {}
|
||||||
|
|
||||||
const hashlineEnabled = pluginConfig.hashline_edit ?? false
|
const hashlineEnabled = pluginConfig.hashline_edit ?? false
|
||||||
const hashlineToolsRecord: Record<string, ToolDefinition> = hashlineEnabled
|
const hashlineToolsRecord: Record<string, ToolDefinition> = hashlineEnabled
|
||||||
? { edit: createHashlineEditTool(ctx) }
|
? { edit: factories.createHashlineEditTool(ctx) }
|
||||||
: {}
|
: {}
|
||||||
|
|
||||||
const allTools: Record<string, ToolDefinition> = {
|
const allTools: Record<string, ToolDefinition> = {
|
||||||
...builtinTools,
|
...factories.builtinTools,
|
||||||
...createGrepTools(ctx),
|
...factories.createGrepTools(ctx),
|
||||||
...createGlobTools(ctx),
|
...factories.createGlobTools(ctx),
|
||||||
...createAstGrepTools(ctx),
|
...factories.createAstGrepTools(ctx),
|
||||||
...createSessionManagerTools(ctx),
|
...factories.createSessionManagerTools(ctx),
|
||||||
...backgroundTools,
|
...backgroundTools,
|
||||||
call_omo_agent: callOmoAgent,
|
call_omo_agent: callOmoAgent,
|
||||||
...(lookAt ? { look_at: lookAt } : {}),
|
...(lookAt ? { look_at: lookAt } : {}),
|
||||||
task: delegateTask,
|
task: delegateTask,
|
||||||
skill_mcp: skillMcpTool,
|
skill_mcp: skillMcpTool,
|
||||||
skill: skillTool,
|
skill: skillTool,
|
||||||
...(interactiveBashEnabled ? { interactive_bash } : {}),
|
...(interactiveBashEnabled ? { interactive_bash: factories.interactive_bash } : {}),
|
||||||
...taskToolsRecord,
|
...taskToolsRecord,
|
||||||
...hashlineToolsRecord,
|
...hashlineToolsRecord,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user