feat(agentic): expose completion pipeline as MCP tool
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
daf4611bfc
commit
dfd1640d37
3 changed files with 65 additions and 0 deletions
|
|
@ -11,6 +11,7 @@ import (
|
|||
"dappco.re/go/agent/pkg/lib"
|
||||
"dappco.re/go/agent/pkg/messages"
|
||||
core "dappco.re/go/core"
|
||||
"github.com/modelcontextprotocol/go-sdk/mcp"
|
||||
)
|
||||
|
||||
// result := c.Action("agentic.dispatch").Run(ctx, core.NewOptions(
|
||||
|
|
@ -154,6 +155,33 @@ func (s *PrepSubsystem) handleComplete(ctx context.Context, options core.Options
|
|||
return s.Core().Task("agent.completion").Run(ctx, s.Core(), options)
|
||||
}
|
||||
|
||||
// input := agentic.CompleteInput{Workspace: "/srv/.core/workspace/core/go-io/task-42"}
|
||||
type CompleteInput struct {
|
||||
Workspace string `json:"workspace"`
|
||||
}
|
||||
|
||||
// out := agentic.CompleteOutput{Success: true, Workspace: "core/go-io/task-42"}
|
||||
type CompleteOutput struct {
|
||||
Success bool `json:"success"`
|
||||
Workspace string `json:"workspace"`
|
||||
}
|
||||
|
||||
func (s *PrepSubsystem) completeTool(ctx context.Context, _ *mcp.CallToolRequest, input CompleteInput) (*mcp.CallToolResult, CompleteOutput, error) {
|
||||
if input.Workspace == "" {
|
||||
return nil, CompleteOutput{}, core.E("agentic.complete", "workspace is required", nil)
|
||||
}
|
||||
|
||||
result := s.handleComplete(ctx, core.NewOptions(core.Option{Key: "workspace", Value: input.Workspace}))
|
||||
if !result.OK {
|
||||
return nil, CompleteOutput{}, resultErrorValue("agentic.complete", result)
|
||||
}
|
||||
|
||||
return nil, CompleteOutput{
|
||||
Success: true,
|
||||
Workspace: input.Workspace,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// result := c.Action("agentic.qa").Run(ctx, core.NewOptions(
|
||||
//
|
||||
// core.Option{Key: "workspace", Value: "/path/to/workspace"},
|
||||
|
|
|
|||
|
|
@ -357,6 +357,10 @@ func (s *PrepSubsystem) RegisterTools(server *mcp.Server) {
|
|||
s.registerDispatchTool(server)
|
||||
s.registerStatusTool(server)
|
||||
s.registerResumeTool(server)
|
||||
mcp.AddTool(server, &mcp.Tool{
|
||||
Name: "agentic_complete",
|
||||
Description: "Run the completion pipeline (QA → PR → Verify → Ingest → Poke) in the background.",
|
||||
}, s.completeTool)
|
||||
s.registerCreatePRTool(server)
|
||||
s.registerListPRsTool(server)
|
||||
s.registerClosePRTool(server)
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import (
|
|||
|
||||
core "dappco.re/go/core"
|
||||
"dappco.re/go/core/forge"
|
||||
mcpsdk "github.com/modelcontextprotocol/go-sdk/mcp"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
|
@ -609,6 +610,38 @@ func TestPrep_OnStartup_Good_RegistersPlatformCommandAlias(t *testing.T) {
|
|||
assert.Contains(t, c.Commands(), "fleet/events")
|
||||
}
|
||||
|
||||
func TestPrep_RegisterTools_Good_RegistersCompletionTool(t *testing.T) {
|
||||
server := mcpsdk.NewServer(&mcpsdk.Implementation{Name: "test", Version: "0.1.0"}, &mcpsdk.ServerOptions{
|
||||
Capabilities: &mcpsdk.ServerCapabilities{
|
||||
Tools: &mcpsdk.ToolCapabilities{ListChanged: true},
|
||||
},
|
||||
})
|
||||
|
||||
subsystem := &PrepSubsystem{}
|
||||
subsystem.RegisterTools(server)
|
||||
|
||||
client := mcpsdk.NewClient(&mcpsdk.Implementation{Name: "test", Version: "0.1.0"}, nil)
|
||||
clientTransport, serverTransport := mcpsdk.NewInMemoryTransports()
|
||||
|
||||
serverSession, err := server.Connect(context.Background(), serverTransport, nil)
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() { _ = serverSession.Close() })
|
||||
|
||||
clientSession, err := client.Connect(context.Background(), clientTransport, nil)
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() { _ = clientSession.Close() })
|
||||
|
||||
result, err := clientSession.ListTools(context.Background(), nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
var toolNames []string
|
||||
for _, tool := range result.Tools {
|
||||
toolNames = append(toolNames, tool.Name)
|
||||
}
|
||||
|
||||
assert.Contains(t, toolNames, "agentic_complete")
|
||||
}
|
||||
|
||||
func TestPrep_OnStartup_Good_RegistersGenerateCommand(t *testing.T) {
|
||||
t.Setenv("CORE_WORKSPACE", t.TempDir())
|
||||
t.Setenv("CORE_AGENT_DISPATCH", "")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue