mirror of
https://github.com/microsoft/autogen.git
synced 2025-08-07 08:11:58 +00:00
streams WIP
This commit is contained in:
parent
688e21b5fa
commit
5cb2e3d51b
@ -37,7 +37,8 @@ public sealed class GithubWebHookProcessor : WebhookEventProcessor
|
|||||||
.Select(l => l.Name.Split('.'))
|
.Select(l => l.Name.Split('.'))
|
||||||
.Where(parts => parts.Length == 2)
|
.Where(parts => parts.Length == 2)
|
||||||
.ToDictionary(parts => parts[0], parts => parts[1]);
|
.ToDictionary(parts => parts[0], parts => parts[1]);
|
||||||
//if(labels.ContainsKey("Parent"))
|
var skillName = labels.Keys.Where(k=>k != "Parent").FirstOrDefault();
|
||||||
|
long? parentNumber = labels.ContainsKey("Parent") ? long.Parse(labels["Parent"]) : null;
|
||||||
// TODO: confert the non-parent label to skill and function
|
// TODO: confert the non-parent label to skill and function
|
||||||
// Issue 1
|
// Issue 1
|
||||||
// Sub issue 2
|
// Sub issue 2
|
||||||
@ -74,12 +75,12 @@ public sealed class GithubWebHookProcessor : WebhookEventProcessor
|
|||||||
if (issuesEvent.Action == IssuesAction.Opened)
|
if (issuesEvent.Action == IssuesAction.Opened)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Processing HandleNewAsk");
|
_logger.LogInformation("Processing HandleNewAsk");
|
||||||
await HandleNewAsk(issueNumber, skillName, functionName, suffix, input, org, repo);
|
await HandleNewAsk(issueNumber,parentNumber, skillName, labels[skillName], suffix, input, org, repo);
|
||||||
}
|
}
|
||||||
else if (issuesEvent.Action == IssuesAction.Closed && issuesEvent.Issue.User.Type.Value == UserType.Bot)
|
else if (issuesEvent.Action == IssuesAction.Closed && issuesEvent.Issue.User.Type.Value == UserType.Bot)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Processing HandleClosingIssue");
|
_logger.LogInformation("Processing HandleClosingIssue");
|
||||||
await HandleClosingIssue(issueNumber, skillName, functionName, suffix, org, repo);
|
await HandleClosingIssue(issueNumber, parentNumber, suffix, org, repo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (System.Exception)
|
catch (System.Exception)
|
||||||
@ -101,15 +102,17 @@ public sealed class GithubWebHookProcessor : WebhookEventProcessor
|
|||||||
var issueNumber = issueCommentEvent.Issue.Number;
|
var issueNumber = issueCommentEvent.Issue.Number;
|
||||||
var input = issueCommentEvent.Issue.Body;
|
var input = issueCommentEvent.Issue.Body;
|
||||||
// Assumes the label follows the following convention: Skill.Function example: PM.Readme
|
// Assumes the label follows the following convention: Skill.Function example: PM.Readme
|
||||||
var labels = issueCommentEvent.Issue.Labels.First().Name.Split(".");
|
var labels = issueCommentEvent.Issue.Labels
|
||||||
|
.Select(l => l.Name.Split('.'))
|
||||||
var skillName = labels[0];
|
.Where(parts => parts.Length == 2)
|
||||||
var functionName = labels[1];
|
.ToDictionary(parts => parts[0], parts => parts[1]);
|
||||||
|
var skillName = labels.Keys.Where(k=>k != "Parent").FirstOrDefault();
|
||||||
|
long? parentNumber = labels.ContainsKey("Parent") ? long.Parse(labels["Parent"]) : null;
|
||||||
var suffix = $"{org}-{repo}";
|
var suffix = $"{org}-{repo}";
|
||||||
// we only resond to non-bot comments
|
// we only resond to non-bot comments
|
||||||
if (issueCommentEvent.Sender.Type.Value != UserType.Bot)
|
if (issueCommentEvent.Sender.Type.Value != UserType.Bot)
|
||||||
{
|
{
|
||||||
await HandleNewAsk(issueNumber, skillName, functionName, suffix, input, org, repo);
|
await HandleNewAsk(issueNumber, parentNumber, skillName, labels[skillName], suffix, input, org, repo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (System.Exception ex)
|
catch (System.Exception ex)
|
||||||
@ -119,22 +122,27 @@ public sealed class GithubWebHookProcessor : WebhookEventProcessor
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task HandleClosingIssue(long issueNumber, string skillName, string functionName, string suffix, string org, string repo)
|
private async Task HandleClosingIssue(long issueNumber, long? parentNumber, string suffix, string org, string repo)
|
||||||
{
|
{
|
||||||
var streamProvider = _client.GetStreamProvider("StreamProvider");
|
var streamProvider = _client.GetStreamProvider("StreamProvider");
|
||||||
var streamId = StreamId.Create(suffix, issueNumber.ToString());
|
var streamId = StreamId.Create(suffix, issueNumber.ToString());
|
||||||
var stream = streamProvider.GetStream<Event>(streamId);
|
var stream = streamProvider.GetStream<Event>(streamId);
|
||||||
|
var data = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
{ "org", org },
|
||||||
|
{ "repo", repo },
|
||||||
|
{ "issueNumber", issueNumber.ToString() },
|
||||||
|
{ "parentNumber", parentNumber?.ToString()}
|
||||||
|
};
|
||||||
|
|
||||||
await stream.OnNextAsync(new Event
|
await stream.OnNextAsync(new Event
|
||||||
{
|
{
|
||||||
Type = EventType.ChainClosed,
|
Type = EventType.ChainClosed,
|
||||||
Org = org,
|
Data = data
|
||||||
Repo = repo,
|
|
||||||
IssueNumber = issueNumber
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task HandleNewAsk(long issueNumber, string skillName, string functionName, string suffix, string input, string org, string repo)
|
private async Task HandleNewAsk(long issueNumber, long? parentNumber, string skillName, string functionName, string suffix, string input, string org, string repo)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -150,21 +158,20 @@ public sealed class GithubWebHookProcessor : WebhookEventProcessor
|
|||||||
(nameof(DevLead), nameof(DevLead.Plan)) => EventType.NewAskPlan,
|
(nameof(DevLead), nameof(DevLead.Plan)) => EventType.NewAskPlan,
|
||||||
(nameof(Developer), nameof(Developer.Implement)) => EventType.NewAskImplement,
|
(nameof(Developer), nameof(Developer.Implement)) => EventType.NewAskImplement,
|
||||||
_ => EventType.NewAsk
|
_ => EventType.NewAsk
|
||||||
|
};
|
||||||
|
var data = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
{ "org", org },
|
||||||
|
{ "repo", repo },
|
||||||
|
{ "issueNumber", issueNumber.ToString() },
|
||||||
|
{ "parentNumber", parentNumber?.ToString()}
|
||||||
};
|
};
|
||||||
await stream.OnNextAsync(new Event
|
await stream.OnNextAsync(new Event
|
||||||
{
|
{
|
||||||
Type = eventType,
|
Type = eventType,
|
||||||
Message = input,
|
Message = input,
|
||||||
Org = org,
|
Data = data
|
||||||
Repo = repo,
|
|
||||||
IssueNumber = issueNumber
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// else if (skillName == "Repo" && functionName == "Ingest")
|
|
||||||
// {
|
|
||||||
// var ingestor = _grains.GetGrain<IIngestRepo>(suffix);
|
|
||||||
// await ingestor.IngestionFlow(org, repo, "main");
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
catch (System.Exception)
|
catch (System.Exception)
|
||||||
{
|
{
|
||||||
|
@ -115,7 +115,7 @@ public class DeveloperLead : SemanticPersona
|
|||||||
switch (item.Type)
|
switch (item.Type)
|
||||||
{
|
{
|
||||||
case EventType.NewAsk:
|
case EventType.NewAsk:
|
||||||
await CreateIssue(item.Org, item.Repo, item.IssueNumber, item.Message);
|
await CreateIssue(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]) , item.Message);
|
||||||
break;
|
break;
|
||||||
case EventType.NewAskPlan:
|
case EventType.NewAskPlan:
|
||||||
await CreatePlan(item.Message);
|
await CreatePlan(item.Message);
|
||||||
|
@ -80,7 +80,7 @@ public class Dev : SemanticPersona
|
|||||||
switch (item.Type)
|
switch (item.Type)
|
||||||
{
|
{
|
||||||
case EventType.NewAsk:
|
case EventType.NewAsk:
|
||||||
await CreateIssue(item.Org, item.Repo, item.IssueNumber, item.Message);
|
await CreateIssue(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]) , item.Message);
|
||||||
break;
|
break;
|
||||||
case EventType.NewAskImplement:
|
case EventType.NewAskImplement:
|
||||||
await GenerateCode(item.Message);
|
await GenerateCode(item.Message);
|
||||||
|
@ -42,7 +42,7 @@ public class ProductManager : SemanticPersona
|
|||||||
switch (item.Type)
|
switch (item.Type)
|
||||||
{
|
{
|
||||||
case EventType.NewAsk:
|
case EventType.NewAsk:
|
||||||
await CreateIssue(item.Org, item.Repo, item.IssueNumber, item.Message);
|
await CreateIssue(item.Data["org"], item.Data["repo"], long.Parse(item.Data["issueNumber"]) , item.Message);
|
||||||
break;
|
break;
|
||||||
case EventType.NewAskReadme:
|
case EventType.NewAskReadme:
|
||||||
await CreateReadme(item.Message);
|
await CreateReadme(item.Message);
|
||||||
|
@ -7,11 +7,7 @@ public class Event
|
|||||||
[Id(1)]
|
[Id(1)]
|
||||||
public string Message { get; set; }
|
public string Message { get; set; }
|
||||||
[Id(2)]
|
[Id(2)]
|
||||||
public string Org { get; set; }
|
public Dictionary<string,string> Data { get; set; }
|
||||||
[Id(3)]
|
|
||||||
public string Repo { get; set; }
|
|
||||||
[Id(4)]
|
|
||||||
public long IssueNumber { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum EventType
|
public enum EventType
|
||||||
|
@ -110,9 +110,9 @@ public class GithubService : IManageGithub
|
|||||||
var newIssue = new NewIssue($"{request.Label} chain for #{request.ParentNumber}")
|
var newIssue = new NewIssue($"{request.Label} chain for #{request.ParentNumber}")
|
||||||
{
|
{
|
||||||
Body = request.Input,
|
Body = request.Input,
|
||||||
|
|
||||||
};
|
};
|
||||||
newIssue.Labels.Add(request.Label);
|
newIssue.Labels.Add(request.Label);
|
||||||
|
newIssue.Labels.Add($"Parent.{request.ParentNumber}");
|
||||||
var issue = await _ghClient.Issue.Create(request.Org, request.Repo, newIssue);
|
var issue = await _ghClient.Issue.Create(request.Org, request.Repo, newIssue);
|
||||||
var commentBody = $" - [ ] #{issue.Number} - tracks {request.Label}";
|
var commentBody = $" - [ ] #{issue.Number} - tracks {request.Label}";
|
||||||
var comment = await _ghClient.Issue.Comment.Create(request.Org, request.Repo, (int)request.ParentNumber, commentBody);
|
var comment = await _ghClient.Issue.Comment.Create(request.Org, request.Repo, (int)request.ParentNumber, commentBody);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user