@loopstack/github-oauth-example 0.2.6 → 0.2.7
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/README.md +27 -24
- package/dist/workflows/github-agent.workflow.d.ts +9 -7
- package/dist/workflows/github-agent.workflow.d.ts.map +1 -1
- package/dist/workflows/github-agent.workflow.js +76 -61
- package/dist/workflows/github-agent.workflow.js.map +1 -1
- package/dist/workflows/github-repos-overview.workflow.js +1 -1
- package/dist/workflows/github-repos-overview.workflow.js.map +1 -1
- package/package.json +7 -6
- package/src/workflows/github-agent.workflow.ts +73 -58
- package/src/workflows/github-repos-overview.workflow.ts +1 -1
package/README.md
CHANGED
|
@@ -122,49 +122,52 @@ An interactive chat agent that gives Claude access to all 25 GitHub tools. The a
|
|
|
122
122
|
1. Sets up a hidden system message describing available GitHub capabilities
|
|
123
123
|
2. Waits for user input via a `wait: true` transition
|
|
124
124
|
3. Sends the conversation to Claude with all 25 GitHub tools plus `authenticateGitHub`
|
|
125
|
-
4. If `
|
|
125
|
+
4. If `message.stopReason === 'tool_use'`, delegates tool calls via `LlmDelegateToolCallsTool` and collects results with `LlmUpdateToolResultTool`
|
|
126
126
|
5. If a tool returns an auth error, the LLM calls `authenticateGitHub` which launches OAuth
|
|
127
127
|
6. Loops back to wait for the next user message
|
|
128
128
|
|
|
129
129
|
**Agent loop pattern:**
|
|
130
130
|
|
|
131
131
|
```typescript
|
|
132
|
-
@
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
132
|
+
@InjectTool({
|
|
133
|
+
provider: 'claude',
|
|
134
|
+
model: 'claude-sonnet-4-6',
|
|
135
|
+
system: `You are a helpful GitHub assistant with access to repository, issue, PR, code, actions,
|
|
136
136
|
and search tools. When a tool returns an unauthorized error, use authenticateGitHub
|
|
137
137
|
to let the user sign in, then retry. Be concise and format results using markdown.`,
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
138
|
+
tools: [
|
|
139
|
+
'gitHubListRepos', 'gitHubGetRepo', 'gitHubCreateRepo', 'gitHubListBranches',
|
|
140
|
+
'gitHubListIssues', 'gitHubGetIssue', 'gitHubCreateIssue', 'gitHubCreateIssueComment',
|
|
141
|
+
'gitHubListPullRequests', 'gitHubGetPullRequest', 'gitHubCreatePullRequest',
|
|
142
|
+
'gitHubMergePullRequest', 'gitHubListPrReviews',
|
|
143
|
+
'gitHubGetFileContent', 'gitHubCreateOrUpdateFile', 'gitHubListDirectory', 'gitHubGetCommit',
|
|
144
|
+
'gitHubListWorkflowRuns', 'gitHubTriggerWorkflow', 'gitHubGetWorkflowRun',
|
|
145
|
+
'gitHubSearchCode', 'gitHubSearchRepos', 'gitHubSearchIssues',
|
|
146
|
+
'gitHubGetAuthenticatedUser', 'gitHubListUserOrgs',
|
|
147
|
+
'authenticateGitHub',
|
|
148
|
+
],
|
|
149
|
+
})
|
|
150
|
+
llmGenerateText: LlmGenerateTextTool;
|
|
151
|
+
@InjectTool({ provider: 'claude' }) llmDelegateToolCalls: LlmDelegateToolCallsTool;
|
|
152
|
+
|
|
153
|
+
@Transition({ from: 'ready', to: 'prompt_executed' })
|
|
154
|
+
async llmTurn() {
|
|
155
|
+
const result: ToolResult<LlmGenerateTextResult> = await this.llmGenerateText.call();
|
|
152
156
|
this.llmResult = result.data;
|
|
153
157
|
}
|
|
154
158
|
|
|
155
159
|
@Transition({ from: 'prompt_executed', to: 'awaiting_tools', priority: 10 })
|
|
156
160
|
@Guard('hasToolCalls')
|
|
157
161
|
async executeToolCalls() {
|
|
158
|
-
const result: ToolResult<
|
|
159
|
-
message: this.llmResult
|
|
160
|
-
document: ClaudeMessageDocument,
|
|
162
|
+
const result: ToolResult<LlmDelegateResult> = await this.llmDelegateToolCalls.call({
|
|
163
|
+
message: this.llmResult!.message,
|
|
161
164
|
callback: { transition: 'toolResultReceived' },
|
|
162
165
|
});
|
|
163
166
|
this.delegateResult = result.data;
|
|
164
167
|
}
|
|
165
168
|
|
|
166
169
|
hasToolCalls(): boolean {
|
|
167
|
-
return this.llmResult?.
|
|
170
|
+
return this.llmResult?.message.stopReason === 'tool_use';
|
|
168
171
|
}
|
|
169
172
|
```
|
|
170
173
|
|
|
@@ -192,7 +195,7 @@ ANTHROPIC_API_KEY=your-anthropic-api-key
|
|
|
192
195
|
|
|
193
196
|
- `@loopstack/common` - Core framework decorators (`BaseWorkflow`, `@Workflow`, `@Initial`, `@Transition`, `@Final`, `@Guard`, `@InjectTool`, `@InjectWorkflow`, `CallbackSchema`, `ToolResult`)
|
|
194
197
|
- `@loopstack/core` - Provides `LinkDocument`, `MarkdownDocument`, and `MessageDocument`
|
|
195
|
-
- `@loopstack/
|
|
198
|
+
- `@loopstack/llm-provider-module` - LLM adapter tools (`LlmGenerateTextTool`, `LlmMessageDocument`, `LlmDelegateToolCallsTool`, `LlmUpdateToolResultTool`)
|
|
196
199
|
- `@loopstack/oauth-module` - OAuth infrastructure (`OAuthWorkflow`)
|
|
197
200
|
- `@loopstack/github-module` - All 25 GitHub tools
|
|
198
201
|
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { ClaudeGenerateText, ClaudeGenerateTextResult, DelegateToolCalls, DelegateToolCallsResult, UpdateToolResult } from '@loopstack/claude-module';
|
|
2
1
|
import { BaseWorkflow } from '@loopstack/common';
|
|
3
2
|
import { GitHubCreateIssueCommentTool, GitHubCreateIssueTool, GitHubCreateOrUpdateFileTool, GitHubCreatePullRequestTool, GitHubCreateRepoTool, GitHubGetAuthenticatedUserTool, GitHubGetCommitTool, GitHubGetFileContentTool, GitHubGetIssueTool, GitHubGetPullRequestTool, GitHubGetRepoTool, GitHubGetWorkflowRunTool, GitHubListBranchesTool, GitHubListDirectoryTool, GitHubListIssuesTool, GitHubListPrReviewsTool, GitHubListPullRequestsTool, GitHubListReposTool, GitHubListUserOrgsTool, GitHubListWorkflowRunsTool, GitHubMergePullRequestTool, GitHubSearchCodeTool, GitHubSearchIssuesTool, GitHubSearchReposTool, GitHubTriggerWorkflowTool } from '@loopstack/github-module';
|
|
3
|
+
import type { LlmDelegateResult, LlmGenerateTextResult, LlmResultMeta } from '@loopstack/llm-provider-module';
|
|
4
|
+
import { LlmDelegateToolCallsTool, LlmGenerateTextTool, LlmUpdateToolResultTool } from '@loopstack/llm-provider-module';
|
|
4
5
|
import { OAuthWorkflow } from '@loopstack/oauth-module';
|
|
5
6
|
import { AuthenticateGitHubTask } from '../tools/authenticate-github-task.tool';
|
|
6
7
|
export declare class GitHubAgentWorkflow extends BaseWorkflow {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
llmGenerateText: LlmGenerateTextTool;
|
|
9
|
+
llmDelegateToolCalls: LlmDelegateToolCallsTool;
|
|
10
|
+
llmUpdateToolResult: LlmUpdateToolResultTool;
|
|
10
11
|
authenticateGitHub: AuthenticateGitHubTask;
|
|
11
12
|
gitHubListRepos: GitHubListReposTool;
|
|
12
13
|
gitHubGetRepo: GitHubGetRepoTool;
|
|
@@ -34,15 +35,16 @@ export declare class GitHubAgentWorkflow extends BaseWorkflow {
|
|
|
34
35
|
gitHubGetAuthenticatedUser: GitHubGetAuthenticatedUserTool;
|
|
35
36
|
gitHubListUserOrgs: GitHubListUserOrgsTool;
|
|
36
37
|
oAuth: OAuthWorkflow;
|
|
37
|
-
llmResult?:
|
|
38
|
-
|
|
38
|
+
llmResult?: LlmGenerateTextResult;
|
|
39
|
+
llmMeta?: LlmResultMeta;
|
|
40
|
+
delegateResult?: LlmDelegateResult;
|
|
39
41
|
setup(): Promise<void>;
|
|
40
42
|
userMessage(payload: string): Promise<void>;
|
|
41
43
|
llmTurn(): Promise<void>;
|
|
42
44
|
executeToolCalls(): Promise<void>;
|
|
43
45
|
hasToolCalls(): boolean;
|
|
44
46
|
toolResultReceived(payload: Record<string, unknown>): Promise<void>;
|
|
45
|
-
allToolsCompleteTransition(): void
|
|
47
|
+
allToolsCompleteTransition(): Promise<void>;
|
|
46
48
|
allToolsComplete(): boolean;
|
|
47
49
|
respond(): Promise<void>;
|
|
48
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-agent.workflow.d.ts","sourceRoot":"","sources":["../../src/workflows/github-agent.workflow.ts"],"names":[],"mappings":"AACA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"github-agent.workflow.d.ts","sourceRoot":"","sources":["../../src/workflows/github-agent.workflow.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EAQb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,EAC3B,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC9G,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EAEnB,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,qBAGa,mBAAoB,SAAQ,YAAY;IAoCnD,eAAe,EAAE,mBAAmB,CAAC;IACD,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,mBAAmB,EAAE,uBAAuB,CAAC;IACnE,kBAAkB,EAAE,sBAAsB,CAAC;IAG3C,eAAe,EAAE,mBAAmB,CAAC;IACrC,aAAa,EAAE,iBAAiB,CAAC;IACjC,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,kBAAkB,EAAE,sBAAsB,CAAC;IAG3C,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,cAAc,EAAE,kBAAkB,CAAC;IACnC,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,wBAAwB,EAAE,4BAA4B,CAAC;IAGvD,sBAAsB,EAAE,0BAA0B,CAAC;IACnD,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,uBAAuB,EAAE,2BAA2B,CAAC;IACrD,sBAAsB,EAAE,0BAA0B,CAAC;IACnD,mBAAmB,EAAE,uBAAuB,CAAC;IAG7C,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,wBAAwB,EAAE,4BAA4B,CAAC;IACvD,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,eAAe,EAAE,mBAAmB,CAAC;IAGrC,sBAAsB,EAAE,0BAA0B,CAAC;IACnD,qBAAqB,EAAE,yBAAyB,CAAC;IACjD,oBAAoB,EAAE,wBAAwB,CAAC;IAG/C,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,kBAAkB,EAAE,sBAAsB,CAAC;IAG3C,0BAA0B,EAAE,8BAA8B,CAAC;IAC3D,kBAAkB,EAAE,sBAAsB,CAAC;IAEvC,KAAK,EAAE,aAAa,CAAC;IAEvC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,cAAc,CAAC,EAAE,iBAAiB,CAAC;IAG7B,KAAK;IAYL,WAAW,CAAC,OAAO,EAAE,MAAM;IAQ3B,OAAO;IAQP,gBAAgB;IAWtB,YAAY,IAAI,OAAO;IAKjB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUnD,0BAA0B;IAYhC,gBAAgB,IAAI,OAAO;IAKrB,OAAO;CAKd"}
|
|
@@ -11,15 +11,15 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.GitHubAgentWorkflow = void 0;
|
|
13
13
|
const zod_1 = require("zod");
|
|
14
|
-
const claude_module_1 = require("@loopstack/claude-module");
|
|
15
14
|
const common_1 = require("@loopstack/common");
|
|
16
15
|
const github_module_1 = require("@loopstack/github-module");
|
|
16
|
+
const llm_provider_module_1 = require("@loopstack/llm-provider-module");
|
|
17
17
|
const oauth_module_1 = require("@loopstack/oauth-module");
|
|
18
18
|
const authenticate_github_task_tool_1 = require("../tools/authenticate-github-task.tool");
|
|
19
19
|
let GitHubAgentWorkflow = class GitHubAgentWorkflow extends common_1.BaseWorkflow {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
llmGenerateText;
|
|
21
|
+
llmDelegateToolCalls;
|
|
22
|
+
llmUpdateToolResult;
|
|
23
23
|
authenticateGitHub;
|
|
24
24
|
gitHubListRepos;
|
|
25
25
|
gitHubGetRepo;
|
|
@@ -48,97 +48,112 @@ let GitHubAgentWorkflow = class GitHubAgentWorkflow extends common_1.BaseWorkflo
|
|
|
48
48
|
gitHubListUserOrgs;
|
|
49
49
|
oAuth;
|
|
50
50
|
llmResult;
|
|
51
|
+
llmMeta;
|
|
51
52
|
delegateResult;
|
|
52
53
|
async setup() {
|
|
53
|
-
await this.repository.save(
|
|
54
|
+
await this.repository.save(llm_provider_module_1.LlmMessageDocument, {
|
|
54
55
|
role: 'user',
|
|
55
56
|
content: this.render(__dirname + '/templates/systemMessage.md'),
|
|
56
57
|
}, { meta: { hidden: true } });
|
|
57
58
|
}
|
|
58
59
|
async userMessage(payload) {
|
|
59
|
-
await this.repository.save(
|
|
60
|
+
await this.repository.save(llm_provider_module_1.LlmMessageDocument, {
|
|
60
61
|
role: 'user',
|
|
61
62
|
content: payload,
|
|
62
63
|
});
|
|
63
64
|
}
|
|
64
65
|
async llmTurn() {
|
|
65
|
-
const result = await this.
|
|
66
|
-
system: `You are a helpful GitHub assistant with access to repository, issue, PR, code, actions,
|
|
67
|
-
and search tools. When a tool returns an unauthorized error, use authenticateGitHub
|
|
68
|
-
to let the user sign in, then retry. Be concise and format results using markdown.`,
|
|
69
|
-
claude: { model: 'claude-sonnet-4-6' },
|
|
70
|
-
messagesSearchTag: 'message',
|
|
71
|
-
tools: [
|
|
72
|
-
'gitHubListRepos',
|
|
73
|
-
'gitHubGetRepo',
|
|
74
|
-
'gitHubCreateRepo',
|
|
75
|
-
'gitHubListBranches',
|
|
76
|
-
'gitHubListIssues',
|
|
77
|
-
'gitHubGetIssue',
|
|
78
|
-
'gitHubCreateIssue',
|
|
79
|
-
'gitHubCreateIssueComment',
|
|
80
|
-
'gitHubListPullRequests',
|
|
81
|
-
'gitHubGetPullRequest',
|
|
82
|
-
'gitHubCreatePullRequest',
|
|
83
|
-
'gitHubMergePullRequest',
|
|
84
|
-
'gitHubListPrReviews',
|
|
85
|
-
'gitHubGetFileContent',
|
|
86
|
-
'gitHubCreateOrUpdateFile',
|
|
87
|
-
'gitHubListDirectory',
|
|
88
|
-
'gitHubGetCommit',
|
|
89
|
-
'gitHubListWorkflowRuns',
|
|
90
|
-
'gitHubTriggerWorkflow',
|
|
91
|
-
'gitHubGetWorkflowRun',
|
|
92
|
-
'gitHubSearchCode',
|
|
93
|
-
'gitHubSearchRepos',
|
|
94
|
-
'gitHubSearchIssues',
|
|
95
|
-
'gitHubGetAuthenticatedUser',
|
|
96
|
-
'gitHubListUserOrgs',
|
|
97
|
-
'authenticateGitHub',
|
|
98
|
-
],
|
|
99
|
-
});
|
|
66
|
+
const result = await this.llmGenerateText.call();
|
|
100
67
|
this.llmResult = result.data;
|
|
68
|
+
this.llmMeta = result.metadata;
|
|
101
69
|
}
|
|
102
70
|
async executeToolCalls() {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
71
|
+
await this.repository.save(llm_provider_module_1.LlmMessageDocument, this.llmResult.message, {
|
|
72
|
+
meta: { response: this.llmResult.response, provider: this.llmMeta.provider },
|
|
73
|
+
});
|
|
74
|
+
const result = await this.llmDelegateToolCalls.call({
|
|
75
|
+
message: this.llmResult.message,
|
|
106
76
|
callback: { transition: 'toolResultReceived' },
|
|
107
77
|
});
|
|
108
78
|
this.delegateResult = result.data;
|
|
109
79
|
}
|
|
110
80
|
hasToolCalls() {
|
|
111
|
-
return this.llmResult?.
|
|
81
|
+
return this.llmResult?.message.stopReason === 'tool_use';
|
|
112
82
|
}
|
|
113
83
|
async toolResultReceived(payload) {
|
|
114
|
-
const result = await this.
|
|
84
|
+
const result = await this.llmUpdateToolResult.call({
|
|
115
85
|
delegateResult: this.delegateResult,
|
|
116
86
|
completedTool: payload,
|
|
117
|
-
document: claude_module_1.ClaudeMessageDocument,
|
|
118
87
|
});
|
|
119
88
|
this.delegateResult = result.data;
|
|
120
89
|
}
|
|
121
|
-
allToolsCompleteTransition() {
|
|
90
|
+
async allToolsCompleteTransition() {
|
|
91
|
+
await this.repository.save(llm_provider_module_1.LlmMessageDocument, {
|
|
92
|
+
role: 'user',
|
|
93
|
+
content: this.delegateResult.toolResults.map((tr) => ({
|
|
94
|
+
type: 'tool_result',
|
|
95
|
+
toolCallId: tr.toolCallId,
|
|
96
|
+
content: tr.content ?? '',
|
|
97
|
+
isError: tr.isError ?? false,
|
|
98
|
+
})),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
122
101
|
allToolsComplete() {
|
|
123
102
|
return this.delegateResult?.allCompleted ?? false;
|
|
124
103
|
}
|
|
125
104
|
async respond() {
|
|
126
|
-
await this.repository.save(
|
|
105
|
+
await this.repository.save(llm_provider_module_1.LlmMessageDocument, this.llmResult.message, {
|
|
106
|
+
meta: { response: this.llmResult.response, provider: this.llmMeta.provider },
|
|
107
|
+
});
|
|
127
108
|
}
|
|
128
109
|
};
|
|
129
110
|
exports.GitHubAgentWorkflow = GitHubAgentWorkflow;
|
|
130
111
|
__decorate([
|
|
131
|
-
(0, common_1.InjectTool)(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
112
|
+
(0, common_1.InjectTool)({
|
|
113
|
+
provider: 'claude',
|
|
114
|
+
model: 'claude-sonnet-4-6',
|
|
115
|
+
system: `You are a helpful GitHub assistant with access to repository, issue, PR, code, actions,
|
|
116
|
+
and search tools. When a tool returns an unauthorized error, use authenticateGitHub
|
|
117
|
+
to let the user sign in, then retry. Be concise and format results using markdown.`,
|
|
118
|
+
tools: [
|
|
119
|
+
'gitHubListRepos',
|
|
120
|
+
'gitHubGetRepo',
|
|
121
|
+
'gitHubCreateRepo',
|
|
122
|
+
'gitHubListBranches',
|
|
123
|
+
'gitHubListIssues',
|
|
124
|
+
'gitHubGetIssue',
|
|
125
|
+
'gitHubCreateIssue',
|
|
126
|
+
'gitHubCreateIssueComment',
|
|
127
|
+
'gitHubListPullRequests',
|
|
128
|
+
'gitHubGetPullRequest',
|
|
129
|
+
'gitHubCreatePullRequest',
|
|
130
|
+
'gitHubMergePullRequest',
|
|
131
|
+
'gitHubListPrReviews',
|
|
132
|
+
'gitHubGetFileContent',
|
|
133
|
+
'gitHubCreateOrUpdateFile',
|
|
134
|
+
'gitHubListDirectory',
|
|
135
|
+
'gitHubGetCommit',
|
|
136
|
+
'gitHubListWorkflowRuns',
|
|
137
|
+
'gitHubTriggerWorkflow',
|
|
138
|
+
'gitHubGetWorkflowRun',
|
|
139
|
+
'gitHubSearchCode',
|
|
140
|
+
'gitHubSearchRepos',
|
|
141
|
+
'gitHubSearchIssues',
|
|
142
|
+
'gitHubGetAuthenticatedUser',
|
|
143
|
+
'gitHubListUserOrgs',
|
|
144
|
+
'authenticateGitHub',
|
|
145
|
+
],
|
|
146
|
+
}),
|
|
147
|
+
__metadata("design:type", llm_provider_module_1.LlmGenerateTextTool)
|
|
148
|
+
], GitHubAgentWorkflow.prototype, "llmGenerateText", void 0);
|
|
149
|
+
__decorate([
|
|
150
|
+
(0, common_1.InjectTool)({ provider: 'claude' }),
|
|
151
|
+
__metadata("design:type", llm_provider_module_1.LlmDelegateToolCallsTool)
|
|
152
|
+
], GitHubAgentWorkflow.prototype, "llmDelegateToolCalls", void 0);
|
|
153
|
+
__decorate([
|
|
154
|
+
(0, common_1.InjectTool)({ provider: 'claude' }),
|
|
155
|
+
__metadata("design:type", llm_provider_module_1.LlmUpdateToolResultTool)
|
|
156
|
+
], GitHubAgentWorkflow.prototype, "llmUpdateToolResult", void 0);
|
|
142
157
|
__decorate([
|
|
143
158
|
(0, common_1.InjectTool)(),
|
|
144
159
|
__metadata("design:type", authenticate_github_task_tool_1.AuthenticateGitHubTask)
|
|
@@ -283,7 +298,7 @@ __decorate([
|
|
|
283
298
|
(0, common_1.Guard)('allToolsComplete'),
|
|
284
299
|
__metadata("design:type", Function),
|
|
285
300
|
__metadata("design:paramtypes", []),
|
|
286
|
-
__metadata("design:returntype",
|
|
301
|
+
__metadata("design:returntype", Promise)
|
|
287
302
|
], GitHubAgentWorkflow.prototype, "allToolsCompleteTransition", null);
|
|
288
303
|
__decorate([
|
|
289
304
|
(0, common_1.Transition)({ from: 'prompt_executed', to: 'waiting_for_user' }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-agent.workflow.js","sourceRoot":"","sources":["../../src/workflows/github-agent.workflow.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"github-agent.workflow.js","sourceRoot":"","sources":["../../src/workflows/github-agent.workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,7 +40,7 @@ let GitHubReposOverviewWorkflow = class GitHubReposOverviewWorkflow extends comm
|
|
|
40
40
|
async fetchUser(args) {
|
|
41
41
|
this.owner = args.owner;
|
|
42
42
|
this.repo = args.repo;
|
|
43
|
-
const result = await this.gitHubGetAuthenticatedUser.call(
|
|
43
|
+
const result = await this.gitHubGetAuthenticatedUser.call();
|
|
44
44
|
this.requiresAuthentication = result.data.error === 'unauthorized';
|
|
45
45
|
this.user = result.data.user;
|
|
46
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-repos-overview.workflow.js","sourceRoot":"","sources":["../../src/workflows/github-repos-overview.workflow.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAAwB;AACxB,8CAa2B;AAC3B,4DAUkC;AAClC,0DAAwD;AAwEjD,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,qBAA6C;IAEtE,0BAA0B,CAAiC;IAC3D,kBAAkB,CAAyB;IAC3C,aAAa,CAAoB;IACjC,kBAAkB,CAAyB;IAC3C,gBAAgB,CAAuB;IACvC,sBAAsB,CAA6B;IACnD,mBAAmB,CAA0B;IAC7C,sBAAsB,CAA6B;IACnD,gBAAgB,CAAuB;IAE3C,KAAK,CAAgB;IAEvC,KAAK,CAAU;IACf,IAAI,CAAU;IACd,sBAAsB,CAAW;IACjC,IAAI,CAAgF;IACpF,IAAI,CAAwD;IAC5D,WAAW,CAST;IACF,QAAQ,CAA+C;IACvD,MAAM,CAA0F;IAChG,YAAY,CAOT;IACH,gBAAgB,CAAuD;IACvE,YAAY,CAMT;IACH,aAAa,CAA6D;IAIpE,AAAN,KAAK,CAAC,SAAS,CAAC,IAAqC;QACnD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,MAAM,MAAM,GAAiC,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"github-repos-overview.workflow.js","sourceRoot":"","sources":["../../src/workflows/github-repos-overview.workflow.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"loopstack",
|
|
9
9
|
"oauth"
|
|
10
10
|
],
|
|
11
|
-
"version": "0.2.
|
|
11
|
+
"version": "0.2.7",
|
|
12
12
|
"license": "MIT",
|
|
13
13
|
"author": {
|
|
14
14
|
"name": "Jakob Klippel",
|
|
@@ -29,11 +29,12 @@
|
|
|
29
29
|
"watch": "nest build --watch"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@loopstack/claude-module": "^0.
|
|
33
|
-
"@loopstack/
|
|
34
|
-
"@loopstack/
|
|
35
|
-
"@loopstack/
|
|
36
|
-
"@loopstack/
|
|
32
|
+
"@loopstack/claude-module": "^0.23.0",
|
|
33
|
+
"@loopstack/llm-provider-module": "^0.2.0",
|
|
34
|
+
"@loopstack/common": "^0.29.0",
|
|
35
|
+
"@loopstack/core": "^0.29.0",
|
|
36
|
+
"@loopstack/github-module": "^0.2.5",
|
|
37
|
+
"@loopstack/oauth-module": "^0.2.7",
|
|
37
38
|
"@nestjs/common": "^11.1.19",
|
|
38
39
|
"zod": "^4.3.6"
|
|
39
40
|
},
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
3
|
-
ClaudeGenerateText,
|
|
4
|
-
ClaudeGenerateTextResult,
|
|
5
|
-
ClaudeMessageDocument,
|
|
6
|
-
DelegateToolCalls,
|
|
7
|
-
DelegateToolCallsResult,
|
|
8
|
-
UpdateToolResult,
|
|
9
|
-
} from '@loopstack/claude-module';
|
|
10
2
|
import {
|
|
11
3
|
BaseWorkflow,
|
|
12
4
|
Guard,
|
|
@@ -44,6 +36,13 @@ import {
|
|
|
44
36
|
GitHubSearchReposTool,
|
|
45
37
|
GitHubTriggerWorkflowTool,
|
|
46
38
|
} from '@loopstack/github-module';
|
|
39
|
+
import type { LlmDelegateResult, LlmGenerateTextResult, LlmResultMeta } from '@loopstack/llm-provider-module';
|
|
40
|
+
import {
|
|
41
|
+
LlmDelegateToolCallsTool,
|
|
42
|
+
LlmGenerateTextTool,
|
|
43
|
+
LlmMessageDocument,
|
|
44
|
+
LlmUpdateToolResultTool,
|
|
45
|
+
} from '@loopstack/llm-provider-module';
|
|
47
46
|
import { OAuthWorkflow } from '@loopstack/oauth-module';
|
|
48
47
|
import { AuthenticateGitHubTask } from '../tools/authenticate-github-task.tool';
|
|
49
48
|
|
|
@@ -51,9 +50,44 @@ import { AuthenticateGitHubTask } from '../tools/authenticate-github-task.tool';
|
|
|
51
50
|
uiConfig: __dirname + '/github-agent.ui.yaml',
|
|
52
51
|
})
|
|
53
52
|
export class GitHubAgentWorkflow extends BaseWorkflow {
|
|
54
|
-
@InjectTool(
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
@InjectTool({
|
|
54
|
+
provider: 'claude',
|
|
55
|
+
model: 'claude-sonnet-4-6',
|
|
56
|
+
system: `You are a helpful GitHub assistant with access to repository, issue, PR, code, actions,
|
|
57
|
+
and search tools. When a tool returns an unauthorized error, use authenticateGitHub
|
|
58
|
+
to let the user sign in, then retry. Be concise and format results using markdown.`,
|
|
59
|
+
tools: [
|
|
60
|
+
'gitHubListRepos',
|
|
61
|
+
'gitHubGetRepo',
|
|
62
|
+
'gitHubCreateRepo',
|
|
63
|
+
'gitHubListBranches',
|
|
64
|
+
'gitHubListIssues',
|
|
65
|
+
'gitHubGetIssue',
|
|
66
|
+
'gitHubCreateIssue',
|
|
67
|
+
'gitHubCreateIssueComment',
|
|
68
|
+
'gitHubListPullRequests',
|
|
69
|
+
'gitHubGetPullRequest',
|
|
70
|
+
'gitHubCreatePullRequest',
|
|
71
|
+
'gitHubMergePullRequest',
|
|
72
|
+
'gitHubListPrReviews',
|
|
73
|
+
'gitHubGetFileContent',
|
|
74
|
+
'gitHubCreateOrUpdateFile',
|
|
75
|
+
'gitHubListDirectory',
|
|
76
|
+
'gitHubGetCommit',
|
|
77
|
+
'gitHubListWorkflowRuns',
|
|
78
|
+
'gitHubTriggerWorkflow',
|
|
79
|
+
'gitHubGetWorkflowRun',
|
|
80
|
+
'gitHubSearchCode',
|
|
81
|
+
'gitHubSearchRepos',
|
|
82
|
+
'gitHubSearchIssues',
|
|
83
|
+
'gitHubGetAuthenticatedUser',
|
|
84
|
+
'gitHubListUserOrgs',
|
|
85
|
+
'authenticateGitHub',
|
|
86
|
+
],
|
|
87
|
+
})
|
|
88
|
+
llmGenerateText: LlmGenerateTextTool;
|
|
89
|
+
@InjectTool({ provider: 'claude' }) llmDelegateToolCalls: LlmDelegateToolCallsTool;
|
|
90
|
+
@InjectTool({ provider: 'claude' }) llmUpdateToolResult: LlmUpdateToolResultTool;
|
|
57
91
|
@InjectTool() authenticateGitHub: AuthenticateGitHubTask;
|
|
58
92
|
|
|
59
93
|
// GitHub Repos tools
|
|
@@ -97,13 +131,14 @@ export class GitHubAgentWorkflow extends BaseWorkflow {
|
|
|
97
131
|
|
|
98
132
|
@InjectWorkflow() oAuth: OAuthWorkflow;
|
|
99
133
|
|
|
100
|
-
llmResult?:
|
|
101
|
-
|
|
134
|
+
llmResult?: LlmGenerateTextResult;
|
|
135
|
+
llmMeta?: LlmResultMeta;
|
|
136
|
+
delegateResult?: LlmDelegateResult;
|
|
102
137
|
|
|
103
138
|
@Initial({ to: 'waiting_for_user' })
|
|
104
139
|
async setup() {
|
|
105
140
|
await this.repository.save(
|
|
106
|
-
|
|
141
|
+
LlmMessageDocument,
|
|
107
142
|
{
|
|
108
143
|
role: 'user',
|
|
109
144
|
content: this.render(__dirname + '/templates/systemMessage.md'),
|
|
@@ -114,7 +149,7 @@ export class GitHubAgentWorkflow extends BaseWorkflow {
|
|
|
114
149
|
|
|
115
150
|
@Transition({ from: 'waiting_for_user', to: 'ready', wait: true, schema: z.string() })
|
|
116
151
|
async userMessage(payload: string) {
|
|
117
|
-
await this.repository.save(
|
|
152
|
+
await this.repository.save(LlmMessageDocument, {
|
|
118
153
|
role: 'user',
|
|
119
154
|
content: payload,
|
|
120
155
|
});
|
|
@@ -122,72 +157,50 @@ export class GitHubAgentWorkflow extends BaseWorkflow {
|
|
|
122
157
|
|
|
123
158
|
@Transition({ from: 'ready', to: 'prompt_executed' })
|
|
124
159
|
async llmTurn() {
|
|
125
|
-
const result: ToolResult<
|
|
126
|
-
system: `You are a helpful GitHub assistant with access to repository, issue, PR, code, actions,
|
|
127
|
-
and search tools. When a tool returns an unauthorized error, use authenticateGitHub
|
|
128
|
-
to let the user sign in, then retry. Be concise and format results using markdown.`,
|
|
129
|
-
claude: { model: 'claude-sonnet-4-6' },
|
|
130
|
-
messagesSearchTag: 'message',
|
|
131
|
-
tools: [
|
|
132
|
-
'gitHubListRepos',
|
|
133
|
-
'gitHubGetRepo',
|
|
134
|
-
'gitHubCreateRepo',
|
|
135
|
-
'gitHubListBranches',
|
|
136
|
-
'gitHubListIssues',
|
|
137
|
-
'gitHubGetIssue',
|
|
138
|
-
'gitHubCreateIssue',
|
|
139
|
-
'gitHubCreateIssueComment',
|
|
140
|
-
'gitHubListPullRequests',
|
|
141
|
-
'gitHubGetPullRequest',
|
|
142
|
-
'gitHubCreatePullRequest',
|
|
143
|
-
'gitHubMergePullRequest',
|
|
144
|
-
'gitHubListPrReviews',
|
|
145
|
-
'gitHubGetFileContent',
|
|
146
|
-
'gitHubCreateOrUpdateFile',
|
|
147
|
-
'gitHubListDirectory',
|
|
148
|
-
'gitHubGetCommit',
|
|
149
|
-
'gitHubListWorkflowRuns',
|
|
150
|
-
'gitHubTriggerWorkflow',
|
|
151
|
-
'gitHubGetWorkflowRun',
|
|
152
|
-
'gitHubSearchCode',
|
|
153
|
-
'gitHubSearchRepos',
|
|
154
|
-
'gitHubSearchIssues',
|
|
155
|
-
'gitHubGetAuthenticatedUser',
|
|
156
|
-
'gitHubListUserOrgs',
|
|
157
|
-
'authenticateGitHub',
|
|
158
|
-
],
|
|
159
|
-
});
|
|
160
|
+
const result: ToolResult<LlmGenerateTextResult, LlmResultMeta> = await this.llmGenerateText.call();
|
|
160
161
|
this.llmResult = result.data;
|
|
162
|
+
this.llmMeta = result.metadata;
|
|
161
163
|
}
|
|
162
164
|
|
|
163
165
|
@Transition({ from: 'prompt_executed', to: 'awaiting_tools', priority: 10 })
|
|
164
166
|
@Guard('hasToolCalls')
|
|
165
167
|
async executeToolCalls() {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
168
|
+
await this.repository.save(LlmMessageDocument, this.llmResult!.message, {
|
|
169
|
+
meta: { response: this.llmResult!.response, provider: this.llmMeta!.provider },
|
|
170
|
+
});
|
|
171
|
+
const result: ToolResult<LlmDelegateResult> = await this.llmDelegateToolCalls.call({
|
|
172
|
+
message: this.llmResult!.message,
|
|
169
173
|
callback: { transition: 'toolResultReceived' },
|
|
170
174
|
});
|
|
171
175
|
this.delegateResult = result.data;
|
|
172
176
|
}
|
|
173
177
|
|
|
174
178
|
hasToolCalls(): boolean {
|
|
175
|
-
return this.llmResult?.
|
|
179
|
+
return this.llmResult?.message.stopReason === 'tool_use';
|
|
176
180
|
}
|
|
177
181
|
|
|
178
182
|
@Transition({ from: 'awaiting_tools', to: 'awaiting_tools', wait: true, schema: z.record(z.string(), z.unknown()) })
|
|
179
183
|
async toolResultReceived(payload: Record<string, unknown>) {
|
|
180
|
-
const result: ToolResult<
|
|
184
|
+
const result: ToolResult<LlmDelegateResult> = await this.llmUpdateToolResult.call({
|
|
181
185
|
delegateResult: this.delegateResult!,
|
|
182
186
|
completedTool: payload,
|
|
183
|
-
document: ClaudeMessageDocument,
|
|
184
187
|
});
|
|
185
188
|
this.delegateResult = result.data;
|
|
186
189
|
}
|
|
187
190
|
|
|
188
191
|
@Transition({ from: 'awaiting_tools', to: 'ready' })
|
|
189
192
|
@Guard('allToolsComplete')
|
|
190
|
-
allToolsCompleteTransition() {
|
|
193
|
+
async allToolsCompleteTransition() {
|
|
194
|
+
await this.repository.save(LlmMessageDocument, {
|
|
195
|
+
role: 'user',
|
|
196
|
+
content: this.delegateResult!.toolResults.map((tr) => ({
|
|
197
|
+
type: 'tool_result' as const,
|
|
198
|
+
toolCallId: tr.toolCallId,
|
|
199
|
+
content: tr.content ?? '',
|
|
200
|
+
isError: tr.isError ?? false,
|
|
201
|
+
})),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
191
204
|
|
|
192
205
|
allToolsComplete(): boolean {
|
|
193
206
|
return this.delegateResult?.allCompleted ?? false;
|
|
@@ -195,6 +208,8 @@ to let the user sign in, then retry. Be concise and format results using markdow
|
|
|
195
208
|
|
|
196
209
|
@Transition({ from: 'prompt_executed', to: 'waiting_for_user' })
|
|
197
210
|
async respond() {
|
|
198
|
-
await this.repository.save(
|
|
211
|
+
await this.repository.save(LlmMessageDocument, this.llmResult!.message, {
|
|
212
|
+
meta: { response: this.llmResult!.response, provider: this.llmMeta!.provider },
|
|
213
|
+
});
|
|
199
214
|
}
|
|
200
215
|
}
|
|
@@ -150,7 +150,7 @@ export class GitHubReposOverviewWorkflow extends BaseWorkflow<{ owner: string; r
|
|
|
150
150
|
async fetchUser(args: { owner: string; repo: string }) {
|
|
151
151
|
this.owner = args.owner;
|
|
152
152
|
this.repo = args.repo;
|
|
153
|
-
const result: ToolResult<GitHubUserResult> = await this.gitHubGetAuthenticatedUser.call(
|
|
153
|
+
const result: ToolResult<GitHubUserResult> = await this.gitHubGetAuthenticatedUser.call();
|
|
154
154
|
this.requiresAuthentication = result.data!.error === 'unauthorized';
|
|
155
155
|
this.user = result.data!.user;
|
|
156
156
|
}
|