@opentag/client 0.1.0 → 0.2.0
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/LICENSE +21 -0
- package/dist/index.d.ts +230 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +240 -9
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Amplift
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type OpenTagEvent, type OpenTagRun, type OpenTagRunResult } from "@opentag/core";
|
|
1
|
+
import { type ActorIdentity, type ActionHint, type AdapterMutationMapping, type ApprovalDecision, type ApplyPlan, type MutationIntentActionability, type OpenTagEvent, type OpenTagRun, type OpenTagRunResult, type PolicyRule, type ProposalLineage, type RunEventImportance, type RunEventVisibility, type SuggestedChangesSnapshot } from "@opentag/core";
|
|
2
2
|
export type ClaimedOpenTagRun = {
|
|
3
3
|
run: OpenTagRun;
|
|
4
4
|
event: OpenTagEvent;
|
|
@@ -20,13 +20,31 @@ export type RepositoryBindingConfig = {
|
|
|
20
20
|
defaultExecutor?: string;
|
|
21
21
|
baseBranch?: string;
|
|
22
22
|
pushRemote?: string;
|
|
23
|
+
worktreeRoot?: string;
|
|
24
|
+
keepWorktree?: "always" | "on_failure" | "never";
|
|
23
25
|
};
|
|
24
26
|
export type SlackChannelBindingInput = {
|
|
25
27
|
teamId: string;
|
|
26
28
|
channelId: string;
|
|
29
|
+
repoProvider?: string;
|
|
27
30
|
owner: string;
|
|
28
31
|
repo: string;
|
|
29
32
|
};
|
|
33
|
+
export type ChannelBindingInput = {
|
|
34
|
+
provider: string;
|
|
35
|
+
accountId: string;
|
|
36
|
+
conversationId: string;
|
|
37
|
+
repoProvider: string;
|
|
38
|
+
owner: string;
|
|
39
|
+
repo: string;
|
|
40
|
+
metadata?: Record<string, unknown>;
|
|
41
|
+
};
|
|
42
|
+
export type RunnerRegistration = {
|
|
43
|
+
runnerId: string;
|
|
44
|
+
name: string;
|
|
45
|
+
createdAt: string;
|
|
46
|
+
heartbeatAt?: string;
|
|
47
|
+
};
|
|
30
48
|
export type OpenTagClientOptions = {
|
|
31
49
|
dispatcherUrl: string;
|
|
32
50
|
pairingToken?: string;
|
|
@@ -39,16 +57,104 @@ export type RunProgressInput = {
|
|
|
39
57
|
type?: string;
|
|
40
58
|
message: string;
|
|
41
59
|
at?: string;
|
|
60
|
+
visibility?: RunEventVisibility;
|
|
61
|
+
importance?: RunEventImportance;
|
|
42
62
|
};
|
|
43
63
|
export type CreateRunInput = {
|
|
44
64
|
runId: string;
|
|
45
65
|
event: OpenTagEvent;
|
|
46
66
|
};
|
|
67
|
+
export type CreateRunResult = {
|
|
68
|
+
outcome: "run_created";
|
|
69
|
+
decision: import("@opentag/core").RunAdmissionDecision;
|
|
70
|
+
run: OpenTagRun;
|
|
71
|
+
idempotentReplay?: boolean;
|
|
72
|
+
} | {
|
|
73
|
+
outcome: "follow_up_queued";
|
|
74
|
+
decision: import("@opentag/core").RunAdmissionDecision;
|
|
75
|
+
followUpRequest: import("@opentag/core").FollowUpRequest;
|
|
76
|
+
} | {
|
|
77
|
+
outcome: "needs_human_decision";
|
|
78
|
+
decision: import("@opentag/core").RunAdmissionDecision;
|
|
79
|
+
};
|
|
80
|
+
export type ApprovalDecisionInput = {
|
|
81
|
+
id?: string;
|
|
82
|
+
approvedIntentIds: string[];
|
|
83
|
+
rejectedIntentIds?: string[];
|
|
84
|
+
approvedBy: ActorIdentity;
|
|
85
|
+
approvedAt?: string;
|
|
86
|
+
scope?: "manual" | "policy";
|
|
87
|
+
reason?: string;
|
|
88
|
+
metadata?: Record<string, unknown>;
|
|
89
|
+
};
|
|
90
|
+
export type ApplyPlanInput = {
|
|
91
|
+
id?: string;
|
|
92
|
+
approvalDecisionId: string;
|
|
93
|
+
selectedIntentIds?: string[];
|
|
94
|
+
adapter?: string;
|
|
95
|
+
execute?: boolean;
|
|
96
|
+
};
|
|
97
|
+
export type ChildRunInput = {
|
|
98
|
+
runId: string;
|
|
99
|
+
action: ActionHint;
|
|
100
|
+
commandText?: string;
|
|
101
|
+
sourceProposalId?: string;
|
|
102
|
+
sourceApplyPlanId?: string;
|
|
103
|
+
};
|
|
104
|
+
export type ThreadActionInput = {
|
|
105
|
+
id?: string;
|
|
106
|
+
rawText: string;
|
|
107
|
+
actor: ActorIdentity;
|
|
108
|
+
callback: {
|
|
109
|
+
provider: string;
|
|
110
|
+
uri: string;
|
|
111
|
+
threadKey?: string;
|
|
112
|
+
};
|
|
113
|
+
metadata?: Record<string, unknown>;
|
|
114
|
+
};
|
|
115
|
+
export type ThreadActionResult = {
|
|
116
|
+
outcome: string;
|
|
117
|
+
message?: string;
|
|
118
|
+
decision?: ApprovalDecision;
|
|
119
|
+
plan?: ApplyPlan;
|
|
120
|
+
run?: OpenTagRun;
|
|
121
|
+
};
|
|
122
|
+
export type RunMetrics = {
|
|
123
|
+
runId: string;
|
|
124
|
+
totalEventCount: number;
|
|
125
|
+
humanEventCount: number;
|
|
126
|
+
auditEventCount: number;
|
|
127
|
+
debugEventCount: number;
|
|
128
|
+
humanCallbackCount: number;
|
|
129
|
+
threadNoiseRatio: number;
|
|
130
|
+
suggestedChangesCount: number;
|
|
131
|
+
approvalDecisionCount: number;
|
|
132
|
+
applyPlanCount: number;
|
|
133
|
+
childRunCount: number;
|
|
134
|
+
applyOutcomeCounts: {
|
|
135
|
+
applied: number;
|
|
136
|
+
skipped: number;
|
|
137
|
+
failed: number;
|
|
138
|
+
stale: number;
|
|
139
|
+
unsupported: number;
|
|
140
|
+
};
|
|
141
|
+
staleIntentCount: number;
|
|
142
|
+
};
|
|
143
|
+
export type AggregateMetrics = Omit<RunMetrics, "runId"> & {
|
|
144
|
+
scope: "repo" | "work_thread";
|
|
145
|
+
scopeId: string;
|
|
146
|
+
runCount: number;
|
|
147
|
+
};
|
|
47
148
|
export type OpenTagClient = {
|
|
48
149
|
registerRunner(input: {
|
|
49
150
|
runnerId: string;
|
|
50
151
|
name?: string;
|
|
51
152
|
}): Promise<void>;
|
|
153
|
+
getRunner(input: {
|
|
154
|
+
runnerId: string;
|
|
155
|
+
}): Promise<{
|
|
156
|
+
runner: RunnerRegistration;
|
|
157
|
+
}>;
|
|
52
158
|
bindRepository(input: RepoBindingInput): Promise<void>;
|
|
53
159
|
getRepositoryBinding(input: {
|
|
54
160
|
provider: string;
|
|
@@ -57,6 +163,44 @@ export type OpenTagClient = {
|
|
|
57
163
|
}): Promise<{
|
|
58
164
|
binding: RepoBindingInput;
|
|
59
165
|
}>;
|
|
166
|
+
upsertRepoPolicyRule(input: {
|
|
167
|
+
provider: string;
|
|
168
|
+
owner: string;
|
|
169
|
+
repo: string;
|
|
170
|
+
rule: PolicyRule;
|
|
171
|
+
}): Promise<{
|
|
172
|
+
rule: PolicyRule;
|
|
173
|
+
}>;
|
|
174
|
+
listRepoPolicyRules(input: {
|
|
175
|
+
provider: string;
|
|
176
|
+
owner: string;
|
|
177
|
+
repo: string;
|
|
178
|
+
}): Promise<{
|
|
179
|
+
rules: PolicyRule[];
|
|
180
|
+
}>;
|
|
181
|
+
upsertRepoMutationMapping(input: {
|
|
182
|
+
provider: string;
|
|
183
|
+
owner: string;
|
|
184
|
+
repo: string;
|
|
185
|
+
mapping: AdapterMutationMapping;
|
|
186
|
+
}): Promise<{
|
|
187
|
+
mapping: AdapterMutationMapping;
|
|
188
|
+
}>;
|
|
189
|
+
listRepoMutationMappings(input: {
|
|
190
|
+
provider: string;
|
|
191
|
+
owner: string;
|
|
192
|
+
repo: string;
|
|
193
|
+
}): Promise<{
|
|
194
|
+
mappings: AdapterMutationMapping[];
|
|
195
|
+
}>;
|
|
196
|
+
bindChannel(input: ChannelBindingInput): Promise<void>;
|
|
197
|
+
getChannelBinding(input: {
|
|
198
|
+
provider: string;
|
|
199
|
+
accountId: string;
|
|
200
|
+
conversationId: string;
|
|
201
|
+
}): Promise<{
|
|
202
|
+
binding: ChannelBindingInput;
|
|
203
|
+
}>;
|
|
60
204
|
bindSlackChannel(input: SlackChannelBindingInput): Promise<void>;
|
|
61
205
|
getSlackChannelBinding(input: {
|
|
62
206
|
teamId: string;
|
|
@@ -64,7 +208,17 @@ export type OpenTagClient = {
|
|
|
64
208
|
}): Promise<{
|
|
65
209
|
binding: SlackChannelBindingInput;
|
|
66
210
|
}>;
|
|
67
|
-
createRun(input: CreateRunInput): Promise<
|
|
211
|
+
createRun(input: CreateRunInput): Promise<CreateRunResult>;
|
|
212
|
+
getFollowUpRequest(input: {
|
|
213
|
+
id: string;
|
|
214
|
+
}): Promise<{
|
|
215
|
+
followUpRequest: import("@opentag/core").FollowUpRequest;
|
|
216
|
+
}>;
|
|
217
|
+
createRunFromFollowUpRequest(input: {
|
|
218
|
+
id: string;
|
|
219
|
+
runId: string;
|
|
220
|
+
}): Promise<{
|
|
221
|
+
followUpRequest: import("@opentag/core").FollowUpRequest;
|
|
68
222
|
run: OpenTagRun;
|
|
69
223
|
}>;
|
|
70
224
|
claim(input: {
|
|
@@ -75,13 +229,16 @@ export type OpenTagClient = {
|
|
|
75
229
|
runId: string;
|
|
76
230
|
}): Promise<void>;
|
|
77
231
|
markRunning(input: {
|
|
232
|
+
runnerId: string;
|
|
78
233
|
runId: string;
|
|
79
234
|
executor: string;
|
|
80
235
|
}): Promise<void>;
|
|
81
236
|
progress(input: {
|
|
237
|
+
runnerId: string;
|
|
82
238
|
runId: string;
|
|
83
239
|
} & RunProgressInput): Promise<void>;
|
|
84
240
|
complete(input: {
|
|
241
|
+
runnerId: string;
|
|
85
242
|
runId: string;
|
|
86
243
|
result: OpenTagRunResult;
|
|
87
244
|
}): Promise<void>;
|
|
@@ -93,12 +250,74 @@ export type OpenTagClient = {
|
|
|
93
250
|
}): Promise<{
|
|
94
251
|
events: unknown[];
|
|
95
252
|
}>;
|
|
253
|
+
getRunMetrics(input: {
|
|
254
|
+
runId: string;
|
|
255
|
+
}): Promise<{
|
|
256
|
+
metrics: RunMetrics;
|
|
257
|
+
}>;
|
|
258
|
+
getRepoMetrics(input: {
|
|
259
|
+
provider: string;
|
|
260
|
+
owner: string;
|
|
261
|
+
repo: string;
|
|
262
|
+
}): Promise<{
|
|
263
|
+
metrics: AggregateMetrics;
|
|
264
|
+
}>;
|
|
265
|
+
getWorkThreadMetrics(input: {
|
|
266
|
+
threadId: string;
|
|
267
|
+
}): Promise<{
|
|
268
|
+
metrics: AggregateMetrics;
|
|
269
|
+
}>;
|
|
270
|
+
getProposal(input: {
|
|
271
|
+
proposalId: string;
|
|
272
|
+
}): Promise<{
|
|
273
|
+
runId: string;
|
|
274
|
+
snapshot: SuggestedChangesSnapshot;
|
|
275
|
+
}>;
|
|
276
|
+
getProposalLineage(input: {
|
|
277
|
+
proposalId: string;
|
|
278
|
+
}): Promise<{
|
|
279
|
+
lineage: ProposalLineage;
|
|
280
|
+
}>;
|
|
281
|
+
listCurrentMutationIntents(input: {
|
|
282
|
+
proposalId: string;
|
|
283
|
+
}): Promise<{
|
|
284
|
+
intents: MutationIntentActionability[];
|
|
285
|
+
}>;
|
|
286
|
+
approveProposal(input: {
|
|
287
|
+
proposalId: string;
|
|
288
|
+
} & ApprovalDecisionInput): Promise<{
|
|
289
|
+
decision: ApprovalDecision;
|
|
290
|
+
}>;
|
|
291
|
+
getApprovalDecision(input: {
|
|
292
|
+
approvalDecisionId: string;
|
|
293
|
+
}): Promise<{
|
|
294
|
+
decision: ApprovalDecision;
|
|
295
|
+
}>;
|
|
296
|
+
createApplyPlan(input: {
|
|
297
|
+
proposalId: string;
|
|
298
|
+
} & ApplyPlanInput): Promise<{
|
|
299
|
+
plan: ApplyPlan;
|
|
300
|
+
}>;
|
|
301
|
+
getApplyPlan(input: {
|
|
302
|
+
applyPlanId: string;
|
|
303
|
+
}): Promise<{
|
|
304
|
+
plan: ApplyPlan;
|
|
305
|
+
}>;
|
|
306
|
+
createChildRun(input: {
|
|
307
|
+
parentRunId: string;
|
|
308
|
+
} & ChildRunInput): Promise<{
|
|
309
|
+
run: OpenTagRun;
|
|
310
|
+
}>;
|
|
311
|
+
submitThreadAction(input: ThreadActionInput): Promise<ThreadActionResult>;
|
|
96
312
|
};
|
|
97
313
|
export type DispatcherRunnerClient = {
|
|
98
314
|
claim(): Promise<ClaimedOpenTagRun | null>;
|
|
99
315
|
markRunning(runId: string, executor: string): Promise<void>;
|
|
100
316
|
heartbeat(runId: string): Promise<void>;
|
|
101
|
-
progress(runId: string, input:
|
|
317
|
+
progress(runId: string, input: RunProgressInput & {
|
|
318
|
+
type: string;
|
|
319
|
+
at: string;
|
|
320
|
+
}): Promise<void>;
|
|
102
321
|
complete(runId: string, result: OpenTagRunResult): Promise<void>;
|
|
103
322
|
};
|
|
104
323
|
export declare function createOpenTagClient(options: OpenTagClientOptions): OpenTagClient;
|
|
@@ -107,5 +326,13 @@ export declare function createDispatcherAdminClient(options: RunnerClientOptions
|
|
|
107
326
|
registerRunner(name?: string): Promise<void>;
|
|
108
327
|
bindRepository(binding: RepositoryBindingConfig): Promise<void>;
|
|
109
328
|
bindSlackChannel(binding: SlackChannelBindingInput): Promise<void>;
|
|
329
|
+
bindChannel(binding: ChannelBindingInput): Promise<void>;
|
|
330
|
+
getChannelBinding(input: {
|
|
331
|
+
provider: string;
|
|
332
|
+
accountId: string;
|
|
333
|
+
conversationId: string;
|
|
334
|
+
}): Promise<{
|
|
335
|
+
binding: ChannelBindingInput;
|
|
336
|
+
}>;
|
|
110
337
|
};
|
|
111
338
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import {
|
|
3
|
+
FollowUpRequestSchema,
|
|
3
4
|
OpenTagEventSchema,
|
|
4
5
|
OpenTagRunResultSchema,
|
|
5
|
-
OpenTagRunSchema
|
|
6
|
+
OpenTagRunSchema,
|
|
7
|
+
RunAdmissionDecisionSchema
|
|
6
8
|
} from "@opentag/core";
|
|
7
9
|
function baseUrlFrom(dispatcherUrl) {
|
|
8
10
|
return dispatcherUrl.replace(/\/$/, "");
|
|
@@ -37,6 +39,13 @@ function createOpenTagClient(options) {
|
|
|
37
39
|
});
|
|
38
40
|
await assertOk(response, "registerRunner");
|
|
39
41
|
},
|
|
42
|
+
async getRunner(input) {
|
|
43
|
+
const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}`, {
|
|
44
|
+
headers: authHeaders(options.pairingToken)
|
|
45
|
+
});
|
|
46
|
+
await assertOk(response, "getRunner");
|
|
47
|
+
return await response.json();
|
|
48
|
+
},
|
|
40
49
|
async bindRepository(input) {
|
|
41
50
|
const response = await fetchImpl(`${baseUrl}/v1/repo-bindings`, {
|
|
42
51
|
method: "POST",
|
|
@@ -52,6 +61,56 @@ function createOpenTagClient(options) {
|
|
|
52
61
|
await assertOk(response, "getRepositoryBinding");
|
|
53
62
|
return await response.json();
|
|
54
63
|
},
|
|
64
|
+
async upsertRepoPolicyRule(input) {
|
|
65
|
+
const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}/policy-rules`, {
|
|
66
|
+
method: "POST",
|
|
67
|
+
headers: jsonHeaders(options.pairingToken),
|
|
68
|
+
body: JSON.stringify({ rule: input.rule })
|
|
69
|
+
});
|
|
70
|
+
await assertOk(response, "upsertRepoPolicyRule");
|
|
71
|
+
return await response.json();
|
|
72
|
+
},
|
|
73
|
+
async listRepoPolicyRules(input) {
|
|
74
|
+
const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}/policy-rules`, {
|
|
75
|
+
headers: authHeaders(options.pairingToken)
|
|
76
|
+
});
|
|
77
|
+
await assertOk(response, "listRepoPolicyRules");
|
|
78
|
+
return await response.json();
|
|
79
|
+
},
|
|
80
|
+
async upsertRepoMutationMapping(input) {
|
|
81
|
+
const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}/mutation-mappings`, {
|
|
82
|
+
method: "POST",
|
|
83
|
+
headers: jsonHeaders(options.pairingToken),
|
|
84
|
+
body: JSON.stringify({ mapping: input.mapping })
|
|
85
|
+
});
|
|
86
|
+
await assertOk(response, "upsertRepoMutationMapping");
|
|
87
|
+
return await response.json();
|
|
88
|
+
},
|
|
89
|
+
async listRepoMutationMappings(input) {
|
|
90
|
+
const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}/mutation-mappings`, {
|
|
91
|
+
headers: authHeaders(options.pairingToken)
|
|
92
|
+
});
|
|
93
|
+
await assertOk(response, "listRepoMutationMappings");
|
|
94
|
+
return await response.json();
|
|
95
|
+
},
|
|
96
|
+
async bindChannel(input) {
|
|
97
|
+
const response = await fetchImpl(`${baseUrl}/v1/channel-bindings`, {
|
|
98
|
+
method: "POST",
|
|
99
|
+
headers: jsonHeaders(options.pairingToken),
|
|
100
|
+
body: JSON.stringify(input)
|
|
101
|
+
});
|
|
102
|
+
await assertOk(response, "bindChannel");
|
|
103
|
+
},
|
|
104
|
+
async getChannelBinding(input) {
|
|
105
|
+
const response = await fetchImpl(
|
|
106
|
+
`${baseUrl}/v1/channel-bindings/${encodeURIComponent(input.provider)}/${encodeURIComponent(input.accountId)}/${encodeURIComponent(input.conversationId)}`,
|
|
107
|
+
{
|
|
108
|
+
headers: authHeaders(options.pairingToken)
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
await assertOk(response, "getChannelBinding");
|
|
112
|
+
return await response.json();
|
|
113
|
+
},
|
|
55
114
|
async bindSlackChannel(input) {
|
|
56
115
|
const response = await fetchImpl(`${baseUrl}/v1/slack-channel-bindings`, {
|
|
57
116
|
method: "POST",
|
|
@@ -76,7 +135,47 @@ function createOpenTagClient(options) {
|
|
|
76
135
|
});
|
|
77
136
|
await assertOk(response, "createRun");
|
|
78
137
|
const body = await response.json();
|
|
79
|
-
|
|
138
|
+
const decision = RunAdmissionDecisionSchema.parse(body.decision);
|
|
139
|
+
if (body.run) {
|
|
140
|
+
return {
|
|
141
|
+
outcome: "run_created",
|
|
142
|
+
decision,
|
|
143
|
+
run: OpenTagRunSchema.parse(body.run),
|
|
144
|
+
...body.idempotentReplay === true ? { idempotentReplay: true } : {}
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (body.followUpRequest) {
|
|
148
|
+
return {
|
|
149
|
+
outcome: "follow_up_queued",
|
|
150
|
+
decision,
|
|
151
|
+
followUpRequest: FollowUpRequestSchema.parse(body.followUpRequest)
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
outcome: "needs_human_decision",
|
|
156
|
+
decision
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
async getFollowUpRequest(input) {
|
|
160
|
+
const response = await fetchImpl(`${baseUrl}/v1/follow-up-requests/${input.id}`, {
|
|
161
|
+
headers: authHeaders(options.pairingToken)
|
|
162
|
+
});
|
|
163
|
+
await assertOk(response, "getFollowUpRequest");
|
|
164
|
+
const body = await response.json();
|
|
165
|
+
return { followUpRequest: FollowUpRequestSchema.parse(body.followUpRequest) };
|
|
166
|
+
},
|
|
167
|
+
async createRunFromFollowUpRequest(input) {
|
|
168
|
+
const response = await fetchImpl(`${baseUrl}/v1/follow-up-requests/${input.id}/create-run`, {
|
|
169
|
+
method: "POST",
|
|
170
|
+
headers: jsonHeaders(options.pairingToken),
|
|
171
|
+
body: JSON.stringify({ runId: input.runId })
|
|
172
|
+
});
|
|
173
|
+
await assertOk(response, "createRunFromFollowUpRequest");
|
|
174
|
+
const body = await response.json();
|
|
175
|
+
return {
|
|
176
|
+
followUpRequest: FollowUpRequestSchema.parse(body.followUpRequest),
|
|
177
|
+
run: OpenTagRunSchema.parse(body.run)
|
|
178
|
+
};
|
|
80
179
|
},
|
|
81
180
|
async claim(input) {
|
|
82
181
|
const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/claim`, {
|
|
@@ -95,7 +194,7 @@ function createOpenTagClient(options) {
|
|
|
95
194
|
await assertOk(response, "heartbeat");
|
|
96
195
|
},
|
|
97
196
|
async markRunning(input) {
|
|
98
|
-
const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}/running`, {
|
|
197
|
+
const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/runs/${input.runId}/running`, {
|
|
99
198
|
method: "POST",
|
|
100
199
|
headers: jsonHeaders(options.pairingToken),
|
|
101
200
|
body: JSON.stringify({ executor: input.executor })
|
|
@@ -103,20 +202,22 @@ function createOpenTagClient(options) {
|
|
|
103
202
|
await assertOk(response, "markRunning");
|
|
104
203
|
},
|
|
105
204
|
async progress(input) {
|
|
106
|
-
const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}/progress`, {
|
|
205
|
+
const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/runs/${input.runId}/progress`, {
|
|
107
206
|
method: "POST",
|
|
108
207
|
headers: jsonHeaders(options.pairingToken),
|
|
109
208
|
body: JSON.stringify({
|
|
110
209
|
...input.type ? { type: input.type } : {},
|
|
111
210
|
message: input.message,
|
|
112
|
-
...input.at ? { at: input.at } : {}
|
|
211
|
+
...input.at ? { at: input.at } : {},
|
|
212
|
+
...input.visibility ? { visibility: input.visibility } : {},
|
|
213
|
+
...input.importance ? { importance: input.importance } : {}
|
|
113
214
|
})
|
|
114
215
|
});
|
|
115
216
|
await assertOk(response, "progress");
|
|
116
217
|
},
|
|
117
218
|
async complete(input) {
|
|
118
219
|
const result = OpenTagRunResultSchema.parse(input.result);
|
|
119
|
-
const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}/complete`, {
|
|
220
|
+
const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/runs/${input.runId}/complete`, {
|
|
120
221
|
method: "POST",
|
|
121
222
|
headers: jsonHeaders(options.pairingToken),
|
|
122
223
|
body: JSON.stringify({ result })
|
|
@@ -136,6 +237,130 @@ function createOpenTagClient(options) {
|
|
|
136
237
|
});
|
|
137
238
|
await assertOk(response, "listRunEvents");
|
|
138
239
|
return await response.json();
|
|
240
|
+
},
|
|
241
|
+
async getRunMetrics(input) {
|
|
242
|
+
const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}/metrics`, {
|
|
243
|
+
headers: authHeaders(options.pairingToken)
|
|
244
|
+
});
|
|
245
|
+
await assertOk(response, "getRunMetrics");
|
|
246
|
+
return await response.json();
|
|
247
|
+
},
|
|
248
|
+
async getRepoMetrics(input) {
|
|
249
|
+
const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}/metrics`, {
|
|
250
|
+
headers: authHeaders(options.pairingToken)
|
|
251
|
+
});
|
|
252
|
+
await assertOk(response, "getRepoMetrics");
|
|
253
|
+
return await response.json();
|
|
254
|
+
},
|
|
255
|
+
async getWorkThreadMetrics(input) {
|
|
256
|
+
const response = await fetchImpl(`${baseUrl}/v1/work-thread-metrics?threadId=${encodeURIComponent(input.threadId)}`, {
|
|
257
|
+
headers: authHeaders(options.pairingToken)
|
|
258
|
+
});
|
|
259
|
+
await assertOk(response, "getWorkThreadMetrics");
|
|
260
|
+
return await response.json();
|
|
261
|
+
},
|
|
262
|
+
async getProposal(input) {
|
|
263
|
+
const response = await fetchImpl(`${baseUrl}/v1/proposals/${input.proposalId}`, {
|
|
264
|
+
headers: authHeaders(options.pairingToken)
|
|
265
|
+
});
|
|
266
|
+
await assertOk(response, "getProposal");
|
|
267
|
+
return await response.json();
|
|
268
|
+
},
|
|
269
|
+
async getProposalLineage(input) {
|
|
270
|
+
const response = await fetchImpl(`${baseUrl}/v1/proposals/${input.proposalId}/lineage`, {
|
|
271
|
+
headers: authHeaders(options.pairingToken)
|
|
272
|
+
});
|
|
273
|
+
await assertOk(response, "getProposalLineage");
|
|
274
|
+
return await response.json();
|
|
275
|
+
},
|
|
276
|
+
async listCurrentMutationIntents(input) {
|
|
277
|
+
const response = await fetchImpl(`${baseUrl}/v1/proposals/${input.proposalId}/current-intents`, {
|
|
278
|
+
headers: authHeaders(options.pairingToken)
|
|
279
|
+
});
|
|
280
|
+
await assertOk(response, "listCurrentMutationIntents");
|
|
281
|
+
return await response.json();
|
|
282
|
+
},
|
|
283
|
+
async approveProposal(input) {
|
|
284
|
+
const response = await fetchImpl(`${baseUrl}/v1/proposals/${input.proposalId}/approvals`, {
|
|
285
|
+
method: "POST",
|
|
286
|
+
headers: jsonHeaders(options.pairingToken),
|
|
287
|
+
body: JSON.stringify({
|
|
288
|
+
...input.id ? { id: input.id } : {},
|
|
289
|
+
approvedIntentIds: input.approvedIntentIds,
|
|
290
|
+
...input.rejectedIntentIds?.length ? { rejectedIntentIds: input.rejectedIntentIds } : {},
|
|
291
|
+
approvedBy: input.approvedBy,
|
|
292
|
+
...input.approvedAt ? { approvedAt: input.approvedAt } : {},
|
|
293
|
+
...input.scope ? { scope: input.scope } : {},
|
|
294
|
+
...input.reason ? { reason: input.reason } : {},
|
|
295
|
+
...input.metadata ? { metadata: input.metadata } : {}
|
|
296
|
+
})
|
|
297
|
+
});
|
|
298
|
+
await assertOk(response, "approveProposal");
|
|
299
|
+
return await response.json();
|
|
300
|
+
},
|
|
301
|
+
async getApprovalDecision(input) {
|
|
302
|
+
const response = await fetchImpl(`${baseUrl}/v1/approvals/${input.approvalDecisionId}`, {
|
|
303
|
+
headers: authHeaders(options.pairingToken)
|
|
304
|
+
});
|
|
305
|
+
await assertOk(response, "getApprovalDecision");
|
|
306
|
+
return await response.json();
|
|
307
|
+
},
|
|
308
|
+
async createApplyPlan(input) {
|
|
309
|
+
const response = await fetchImpl(`${baseUrl}/v1/proposals/${input.proposalId}/apply-plans`, {
|
|
310
|
+
method: "POST",
|
|
311
|
+
headers: jsonHeaders(options.pairingToken),
|
|
312
|
+
body: JSON.stringify({
|
|
313
|
+
...input.id ? { id: input.id } : {},
|
|
314
|
+
approvalDecisionId: input.approvalDecisionId,
|
|
315
|
+
...input.selectedIntentIds !== void 0 ? { selectedIntentIds: input.selectedIntentIds } : {},
|
|
316
|
+
...input.adapter ? { adapter: input.adapter } : {},
|
|
317
|
+
...input.execute !== void 0 ? { execute: input.execute } : {}
|
|
318
|
+
})
|
|
319
|
+
});
|
|
320
|
+
await assertOk(response, "createApplyPlan");
|
|
321
|
+
return await response.json();
|
|
322
|
+
},
|
|
323
|
+
async getApplyPlan(input) {
|
|
324
|
+
const response = await fetchImpl(`${baseUrl}/v1/apply-plans/${input.applyPlanId}`, {
|
|
325
|
+
headers: authHeaders(options.pairingToken)
|
|
326
|
+
});
|
|
327
|
+
await assertOk(response, "getApplyPlan");
|
|
328
|
+
return await response.json();
|
|
329
|
+
},
|
|
330
|
+
async createChildRun(input) {
|
|
331
|
+
const response = await fetchImpl(`${baseUrl}/v1/runs/${input.parentRunId}/child-runs`, {
|
|
332
|
+
method: "POST",
|
|
333
|
+
headers: jsonHeaders(options.pairingToken),
|
|
334
|
+
body: JSON.stringify({
|
|
335
|
+
runId: input.runId,
|
|
336
|
+
action: input.action,
|
|
337
|
+
...input.commandText ? { commandText: input.commandText } : {},
|
|
338
|
+
...input.sourceProposalId ? { sourceProposalId: input.sourceProposalId } : {},
|
|
339
|
+
...input.sourceApplyPlanId ? { sourceApplyPlanId: input.sourceApplyPlanId } : {}
|
|
340
|
+
})
|
|
341
|
+
});
|
|
342
|
+
await assertOk(response, "createChildRun");
|
|
343
|
+
const body = await response.json();
|
|
344
|
+
return { run: OpenTagRunSchema.parse(body.run) };
|
|
345
|
+
},
|
|
346
|
+
async submitThreadAction(input) {
|
|
347
|
+
const response = await fetchImpl(`${baseUrl}/v1/thread-actions`, {
|
|
348
|
+
method: "POST",
|
|
349
|
+
headers: jsonHeaders(options.pairingToken),
|
|
350
|
+
body: JSON.stringify({
|
|
351
|
+
...input.id ? { id: input.id } : {},
|
|
352
|
+
rawText: input.rawText,
|
|
353
|
+
actor: input.actor,
|
|
354
|
+
callback: {
|
|
355
|
+
provider: input.callback.provider,
|
|
356
|
+
uri: input.callback.uri,
|
|
357
|
+
...input.callback.threadKey ? { threadKey: input.callback.threadKey } : {}
|
|
358
|
+
},
|
|
359
|
+
...input.metadata ? { metadata: input.metadata } : {}
|
|
360
|
+
})
|
|
361
|
+
});
|
|
362
|
+
await assertOk(response, "submitThreadAction");
|
|
363
|
+
return await response.json();
|
|
139
364
|
}
|
|
140
365
|
};
|
|
141
366
|
}
|
|
@@ -143,10 +368,10 @@ function createDispatcherClient(options) {
|
|
|
143
368
|
const client = createOpenTagClient(options);
|
|
144
369
|
return {
|
|
145
370
|
claim: () => client.claim({ runnerId: options.runnerId }),
|
|
146
|
-
markRunning: (runId, executor) => client.markRunning({ runId, executor }),
|
|
371
|
+
markRunning: (runId, executor) => client.markRunning({ runnerId: options.runnerId, runId, executor }),
|
|
147
372
|
heartbeat: (runId) => client.heartbeat({ runnerId: options.runnerId, runId }),
|
|
148
|
-
progress: (runId, input) => client.progress({ runId, ...input }),
|
|
149
|
-
complete: (runId, result) => client.complete({ runId, result })
|
|
373
|
+
progress: (runId, input) => client.progress({ runnerId: options.runnerId, runId, ...input }),
|
|
374
|
+
complete: (runId, result) => client.complete({ runnerId: options.runnerId, runId, result })
|
|
150
375
|
};
|
|
151
376
|
}
|
|
152
377
|
function createDispatcherAdminClient(options) {
|
|
@@ -167,6 +392,12 @@ function createDispatcherAdminClient(options) {
|
|
|
167
392
|
},
|
|
168
393
|
bindSlackChannel(binding) {
|
|
169
394
|
return client.bindSlackChannel(binding);
|
|
395
|
+
},
|
|
396
|
+
bindChannel(binding) {
|
|
397
|
+
return client.bindChannel(binding);
|
|
398
|
+
},
|
|
399
|
+
getChannelBinding(input) {
|
|
400
|
+
return client.getChannelBinding(input);
|
|
170
401
|
}
|
|
171
402
|
};
|
|
172
403
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n OpenTagEventSchema,\n OpenTagRunResultSchema,\n OpenTagRunSchema,\n type OpenTagEvent,\n type OpenTagRun,\n type OpenTagRunResult\n} from \"@opentag/core\";\n\nexport type ClaimedOpenTagRun = {\n run: OpenTagRun;\n event: OpenTagEvent;\n};\n\nexport type RepoBindingInput = {\n provider: string;\n owner: string;\n repo: string;\n runnerId: string;\n workspacePath?: string;\n defaultExecutor?: string;\n allowedActors?: string[];\n};\n\nexport type RepositoryBindingConfig = {\n provider: string;\n owner: string;\n repo: string;\n checkoutPath: string;\n defaultExecutor?: string;\n baseBranch?: string;\n pushRemote?: string;\n};\n\nexport type SlackChannelBindingInput = {\n teamId: string;\n channelId: string;\n owner: string;\n repo: string;\n};\n\nexport type OpenTagClientOptions = {\n dispatcherUrl: string;\n pairingToken?: string;\n fetchImpl?: typeof fetch;\n};\n\nexport type RunnerClientOptions = OpenTagClientOptions & {\n runnerId: string;\n};\n\nexport type RunProgressInput = {\n type?: string;\n message: string;\n at?: string;\n};\n\nexport type CreateRunInput = {\n runId: string;\n event: OpenTagEvent;\n};\n\nexport type OpenTagClient = {\n registerRunner(input: { runnerId: string; name?: string }): Promise<void>;\n bindRepository(input: RepoBindingInput): Promise<void>;\n getRepositoryBinding(input: { provider: string; owner: string; repo: string }): Promise<{ binding: RepoBindingInput }>;\n bindSlackChannel(input: SlackChannelBindingInput): Promise<void>;\n getSlackChannelBinding(input: { teamId: string; channelId: string }): Promise<{ binding: SlackChannelBindingInput }>;\n createRun(input: CreateRunInput): Promise<{ run: OpenTagRun }>;\n claim(input: { runnerId: string }): Promise<ClaimedOpenTagRun | null>;\n heartbeat(input: { runnerId: string; runId: string }): Promise<void>;\n markRunning(input: { runId: string; executor: string }): Promise<void>;\n progress(input: { runId: string } & RunProgressInput): Promise<void>;\n complete(input: { runId: string; result: OpenTagRunResult }): Promise<void>;\n getRun(input: { runId: string }): Promise<ClaimedOpenTagRun>;\n listRunEvents(input: { runId: string }): Promise<{ events: unknown[] }>;\n};\n\nexport type DispatcherRunnerClient = {\n claim(): Promise<ClaimedOpenTagRun | null>;\n markRunning(runId: string, executor: string): Promise<void>;\n heartbeat(runId: string): Promise<void>;\n progress(runId: string, input: Required<RunProgressInput>): Promise<void>;\n complete(runId: string, result: OpenTagRunResult): Promise<void>;\n};\n\nfunction baseUrlFrom(dispatcherUrl: string): string {\n return dispatcherUrl.replace(/\\/$/, \"\");\n}\n\nfunction authHeaders(pairingToken: string | undefined): Record<string, string> {\n return pairingToken ? { authorization: `Bearer ${pairingToken}` } : {};\n}\n\nfunction jsonHeaders(pairingToken: string | undefined): Record<string, string> {\n return { \"content-type\": \"application/json\", ...authHeaders(pairingToken) };\n}\n\nasync function assertOk(response: Response, action: string): Promise<void> {\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`${action} failed: ${response.status}${text ? ` ${text}` : \"\"}`);\n }\n}\n\nfunction parseClaimedRun(body: { run: unknown; event: unknown }): ClaimedOpenTagRun {\n return {\n run: OpenTagRunSchema.parse(body.run),\n event: OpenTagEventSchema.parse(body.event)\n };\n}\n\nexport function createOpenTagClient(options: OpenTagClientOptions): OpenTagClient {\n const baseUrl = baseUrlFrom(options.dispatcherUrl);\n const fetchImpl = options.fetchImpl ?? fetch;\n\n return {\n async registerRunner(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runners`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ runnerId: input.runnerId, name: input.name ?? input.runnerId })\n });\n await assertOk(response, \"registerRunner\");\n },\n\n async bindRepository(input) {\n const response = await fetchImpl(`${baseUrl}/v1/repo-bindings`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify(input)\n });\n await assertOk(response, \"bindRepository\");\n },\n\n async getRepositoryBinding(input) {\n const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getRepositoryBinding\");\n return (await response.json()) as { binding: RepoBindingInput };\n },\n\n async bindSlackChannel(input) {\n const response = await fetchImpl(`${baseUrl}/v1/slack-channel-bindings`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify(input)\n });\n await assertOk(response, \"bindSlackChannel\");\n },\n\n async getSlackChannelBinding(input) {\n const response = await fetchImpl(`${baseUrl}/v1/slack-channel-bindings/${input.teamId}/${input.channelId}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getSlackChannelBinding\");\n return (await response.json()) as { binding: SlackChannelBindingInput };\n },\n\n async createRun(input) {\n const event = OpenTagEventSchema.parse(input.event);\n const response = await fetchImpl(`${baseUrl}/v1/runs`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ runId: input.runId, event })\n });\n await assertOk(response, \"createRun\");\n const body = (await response.json()) as { run: unknown };\n return { run: OpenTagRunSchema.parse(body.run) };\n },\n\n async claim(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/claim`, {\n method: \"POST\",\n headers: authHeaders(options.pairingToken)\n });\n if (response.status === 204) return null;\n await assertOk(response, \"claim\");\n return parseClaimedRun((await response.json()) as { run: unknown; event: unknown });\n },\n\n async heartbeat(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/runs/${input.runId}/heartbeat`, {\n method: \"POST\",\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"heartbeat\");\n },\n\n async markRunning(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}/running`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ executor: input.executor })\n });\n await assertOk(response, \"markRunning\");\n },\n\n async progress(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}/progress`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({\n ...(input.type ? { type: input.type } : {}),\n message: input.message,\n ...(input.at ? { at: input.at } : {})\n })\n });\n await assertOk(response, \"progress\");\n },\n\n async complete(input) {\n const result = OpenTagRunResultSchema.parse(input.result);\n const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}/complete`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ result })\n });\n await assertOk(response, \"complete\");\n },\n\n async getRun(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getRun\");\n return parseClaimedRun((await response.json()) as { run: unknown; event: unknown });\n },\n\n async listRunEvents(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}/events`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"listRunEvents\");\n return (await response.json()) as { events: unknown[] };\n }\n };\n}\n\nexport function createDispatcherClient(options: RunnerClientOptions): DispatcherRunnerClient {\n const client = createOpenTagClient(options);\n return {\n claim: () => client.claim({ runnerId: options.runnerId }),\n markRunning: (runId, executor) => client.markRunning({ runId, executor }),\n heartbeat: (runId) => client.heartbeat({ runnerId: options.runnerId, runId }),\n progress: (runId, input) => client.progress({ runId, ...input }),\n complete: (runId, result) => client.complete({ runId, result })\n };\n}\n\nexport function createDispatcherAdminClient(options: RunnerClientOptions) {\n const client = createOpenTagClient(options);\n return {\n registerRunner(name = options.runnerId): Promise<void> {\n return client.registerRunner({ runnerId: options.runnerId, name });\n },\n\n bindRepository(binding: RepositoryBindingConfig): Promise<void> {\n return client.bindRepository({\n provider: binding.provider,\n owner: binding.owner,\n repo: binding.repo,\n runnerId: options.runnerId,\n workspacePath: binding.checkoutPath,\n ...(binding.defaultExecutor ? { defaultExecutor: binding.defaultExecutor } : {})\n });\n },\n\n bindSlackChannel(binding: SlackChannelBindingInput): Promise<void> {\n return client.bindSlackChannel(binding);\n }\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n FollowUpRequestSchema,\n OpenTagEventSchema,\n OpenTagRunResultSchema,\n OpenTagRunSchema,\n RunAdmissionDecisionSchema,\n type ActorIdentity,\n type ActionHint,\n type AdapterMutationMapping,\n type ApprovalDecision,\n type ApplyPlan,\n type MutationIntentActionability,\n type OpenTagEvent,\n type OpenTagRun,\n type OpenTagRunResult,\n type PolicyRule,\n type ProposalLineage,\n type RunEventImportance,\n type RunEventVisibility,\n type SuggestedChangesSnapshot\n} from \"@opentag/core\";\n\nexport type ClaimedOpenTagRun = {\n run: OpenTagRun;\n event: OpenTagEvent;\n};\n\nexport type RepoBindingInput = {\n provider: string;\n owner: string;\n repo: string;\n runnerId: string;\n workspacePath?: string;\n defaultExecutor?: string;\n allowedActors?: string[];\n};\n\nexport type RepositoryBindingConfig = {\n provider: string;\n owner: string;\n repo: string;\n checkoutPath: string;\n defaultExecutor?: string;\n baseBranch?: string;\n pushRemote?: string;\n worktreeRoot?: string;\n keepWorktree?: \"always\" | \"on_failure\" | \"never\";\n};\n\nexport type SlackChannelBindingInput = {\n teamId: string;\n channelId: string;\n repoProvider?: string;\n owner: string;\n repo: string;\n};\n\nexport type ChannelBindingInput = {\n provider: string;\n accountId: string;\n conversationId: string;\n repoProvider: string;\n owner: string;\n repo: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type RunnerRegistration = {\n runnerId: string;\n name: string;\n createdAt: string;\n heartbeatAt?: string;\n};\n\nexport type OpenTagClientOptions = {\n dispatcherUrl: string;\n pairingToken?: string;\n fetchImpl?: typeof fetch;\n};\n\nexport type RunnerClientOptions = OpenTagClientOptions & {\n runnerId: string;\n};\n\nexport type RunProgressInput = {\n type?: string;\n message: string;\n at?: string;\n visibility?: RunEventVisibility;\n importance?: RunEventImportance;\n};\n\nexport type CreateRunInput = {\n runId: string;\n event: OpenTagEvent;\n};\n\nexport type CreateRunResult =\n | {\n outcome: \"run_created\";\n decision: import(\"@opentag/core\").RunAdmissionDecision;\n run: OpenTagRun;\n idempotentReplay?: boolean;\n }\n | {\n outcome: \"follow_up_queued\";\n decision: import(\"@opentag/core\").RunAdmissionDecision;\n followUpRequest: import(\"@opentag/core\").FollowUpRequest;\n }\n | {\n outcome: \"needs_human_decision\";\n decision: import(\"@opentag/core\").RunAdmissionDecision;\n };\n\nexport type ApprovalDecisionInput = {\n id?: string;\n approvedIntentIds: string[];\n rejectedIntentIds?: string[];\n approvedBy: ActorIdentity;\n approvedAt?: string;\n scope?: \"manual\" | \"policy\";\n reason?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type ApplyPlanInput = {\n id?: string;\n approvalDecisionId: string;\n selectedIntentIds?: string[];\n adapter?: string;\n execute?: boolean;\n};\n\nexport type ChildRunInput = {\n runId: string;\n action: ActionHint;\n commandText?: string;\n sourceProposalId?: string;\n sourceApplyPlanId?: string;\n};\n\nexport type ThreadActionInput = {\n id?: string;\n rawText: string;\n actor: ActorIdentity;\n callback: {\n provider: string;\n uri: string;\n threadKey?: string;\n };\n metadata?: Record<string, unknown>;\n};\n\nexport type ThreadActionResult = {\n outcome: string;\n message?: string;\n decision?: ApprovalDecision;\n plan?: ApplyPlan;\n run?: OpenTagRun;\n};\n\nexport type RunMetrics = {\n runId: string;\n totalEventCount: number;\n humanEventCount: number;\n auditEventCount: number;\n debugEventCount: number;\n humanCallbackCount: number;\n threadNoiseRatio: number;\n suggestedChangesCount: number;\n approvalDecisionCount: number;\n applyPlanCount: number;\n childRunCount: number;\n applyOutcomeCounts: {\n applied: number;\n skipped: number;\n failed: number;\n stale: number;\n unsupported: number;\n };\n staleIntentCount: number;\n};\n\nexport type AggregateMetrics = Omit<RunMetrics, \"runId\"> & {\n scope: \"repo\" | \"work_thread\";\n scopeId: string;\n runCount: number;\n};\n\nexport type OpenTagClient = {\n registerRunner(input: { runnerId: string; name?: string }): Promise<void>;\n getRunner(input: { runnerId: string }): Promise<{ runner: RunnerRegistration }>;\n bindRepository(input: RepoBindingInput): Promise<void>;\n getRepositoryBinding(input: { provider: string; owner: string; repo: string }): Promise<{ binding: RepoBindingInput }>;\n upsertRepoPolicyRule(input: { provider: string; owner: string; repo: string; rule: PolicyRule }): Promise<{ rule: PolicyRule }>;\n listRepoPolicyRules(input: { provider: string; owner: string; repo: string }): Promise<{ rules: PolicyRule[] }>;\n upsertRepoMutationMapping(input: {\n provider: string;\n owner: string;\n repo: string;\n mapping: AdapterMutationMapping;\n }): Promise<{ mapping: AdapterMutationMapping }>;\n listRepoMutationMappings(input: { provider: string; owner: string; repo: string }): Promise<{ mappings: AdapterMutationMapping[] }>;\n bindChannel(input: ChannelBindingInput): Promise<void>;\n getChannelBinding(input: { provider: string; accountId: string; conversationId: string }): Promise<{ binding: ChannelBindingInput }>;\n bindSlackChannel(input: SlackChannelBindingInput): Promise<void>;\n getSlackChannelBinding(input: { teamId: string; channelId: string }): Promise<{ binding: SlackChannelBindingInput }>;\n createRun(input: CreateRunInput): Promise<CreateRunResult>;\n getFollowUpRequest(input: { id: string }): Promise<{ followUpRequest: import(\"@opentag/core\").FollowUpRequest }>;\n createRunFromFollowUpRequest(input: { id: string; runId: string }): Promise<{ followUpRequest: import(\"@opentag/core\").FollowUpRequest; run: OpenTagRun }>;\n claim(input: { runnerId: string }): Promise<ClaimedOpenTagRun | null>;\n heartbeat(input: { runnerId: string; runId: string }): Promise<void>;\n markRunning(input: { runnerId: string; runId: string; executor: string }): Promise<void>;\n progress(input: { runnerId: string; runId: string } & RunProgressInput): Promise<void>;\n complete(input: { runnerId: string; runId: string; result: OpenTagRunResult }): Promise<void>;\n getRun(input: { runId: string }): Promise<ClaimedOpenTagRun>;\n listRunEvents(input: { runId: string }): Promise<{ events: unknown[] }>;\n getRunMetrics(input: { runId: string }): Promise<{ metrics: RunMetrics }>;\n getRepoMetrics(input: { provider: string; owner: string; repo: string }): Promise<{ metrics: AggregateMetrics }>;\n getWorkThreadMetrics(input: { threadId: string }): Promise<{ metrics: AggregateMetrics }>;\n getProposal(input: { proposalId: string }): Promise<{ runId: string; snapshot: SuggestedChangesSnapshot }>;\n getProposalLineage(input: { proposalId: string }): Promise<{ lineage: ProposalLineage }>;\n listCurrentMutationIntents(input: { proposalId: string }): Promise<{ intents: MutationIntentActionability[] }>;\n approveProposal(input: { proposalId: string } & ApprovalDecisionInput): Promise<{ decision: ApprovalDecision }>;\n getApprovalDecision(input: { approvalDecisionId: string }): Promise<{ decision: ApprovalDecision }>;\n createApplyPlan(input: { proposalId: string } & ApplyPlanInput): Promise<{ plan: ApplyPlan }>;\n getApplyPlan(input: { applyPlanId: string }): Promise<{ plan: ApplyPlan }>;\n createChildRun(input: { parentRunId: string } & ChildRunInput): Promise<{ run: OpenTagRun }>;\n submitThreadAction(input: ThreadActionInput): Promise<ThreadActionResult>;\n};\n\nexport type DispatcherRunnerClient = {\n claim(): Promise<ClaimedOpenTagRun | null>;\n markRunning(runId: string, executor: string): Promise<void>;\n heartbeat(runId: string): Promise<void>;\n progress(runId: string, input: RunProgressInput & { type: string; at: string }): Promise<void>;\n complete(runId: string, result: OpenTagRunResult): Promise<void>;\n};\n\nfunction baseUrlFrom(dispatcherUrl: string): string {\n return dispatcherUrl.replace(/\\/$/, \"\");\n}\n\nfunction authHeaders(pairingToken: string | undefined): Record<string, string> {\n return pairingToken ? { authorization: `Bearer ${pairingToken}` } : {};\n}\n\nfunction jsonHeaders(pairingToken: string | undefined): Record<string, string> {\n return { \"content-type\": \"application/json\", ...authHeaders(pairingToken) };\n}\n\nasync function assertOk(response: Response, action: string): Promise<void> {\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`${action} failed: ${response.status}${text ? ` ${text}` : \"\"}`);\n }\n}\n\nfunction parseClaimedRun(body: { run: unknown; event: unknown }): ClaimedOpenTagRun {\n return {\n run: OpenTagRunSchema.parse(body.run),\n event: OpenTagEventSchema.parse(body.event)\n };\n}\n\nexport function createOpenTagClient(options: OpenTagClientOptions): OpenTagClient {\n const baseUrl = baseUrlFrom(options.dispatcherUrl);\n const fetchImpl = options.fetchImpl ?? fetch;\n\n return {\n async registerRunner(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runners`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ runnerId: input.runnerId, name: input.name ?? input.runnerId })\n });\n await assertOk(response, \"registerRunner\");\n },\n\n async getRunner(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getRunner\");\n return (await response.json()) as { runner: RunnerRegistration };\n },\n\n async bindRepository(input) {\n const response = await fetchImpl(`${baseUrl}/v1/repo-bindings`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify(input)\n });\n await assertOk(response, \"bindRepository\");\n },\n\n async getRepositoryBinding(input) {\n const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getRepositoryBinding\");\n return (await response.json()) as { binding: RepoBindingInput };\n },\n\n async upsertRepoPolicyRule(input) {\n const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}/policy-rules`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ rule: input.rule })\n });\n await assertOk(response, \"upsertRepoPolicyRule\");\n return (await response.json()) as { rule: PolicyRule };\n },\n\n async listRepoPolicyRules(input) {\n const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}/policy-rules`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"listRepoPolicyRules\");\n return (await response.json()) as { rules: PolicyRule[] };\n },\n\n async upsertRepoMutationMapping(input) {\n const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}/mutation-mappings`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ mapping: input.mapping })\n });\n await assertOk(response, \"upsertRepoMutationMapping\");\n return (await response.json()) as { mapping: AdapterMutationMapping };\n },\n\n async listRepoMutationMappings(input) {\n const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}/mutation-mappings`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"listRepoMutationMappings\");\n return (await response.json()) as { mappings: AdapterMutationMapping[] };\n },\n\n async bindChannel(input) {\n const response = await fetchImpl(`${baseUrl}/v1/channel-bindings`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify(input)\n });\n await assertOk(response, \"bindChannel\");\n },\n\n async getChannelBinding(input) {\n const response = await fetchImpl(\n `${baseUrl}/v1/channel-bindings/${encodeURIComponent(input.provider)}/${encodeURIComponent(input.accountId)}/${encodeURIComponent(input.conversationId)}`,\n {\n headers: authHeaders(options.pairingToken)\n }\n );\n await assertOk(response, \"getChannelBinding\");\n return (await response.json()) as { binding: ChannelBindingInput };\n },\n\n async bindSlackChannel(input) {\n const response = await fetchImpl(`${baseUrl}/v1/slack-channel-bindings`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify(input)\n });\n await assertOk(response, \"bindSlackChannel\");\n },\n\n async getSlackChannelBinding(input) {\n const response = await fetchImpl(`${baseUrl}/v1/slack-channel-bindings/${input.teamId}/${input.channelId}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getSlackChannelBinding\");\n return (await response.json()) as { binding: SlackChannelBindingInput };\n },\n\n async createRun(input) {\n const event = OpenTagEventSchema.parse(input.event);\n const response = await fetchImpl(`${baseUrl}/v1/runs`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ runId: input.runId, event })\n });\n await assertOk(response, \"createRun\");\n const body = (await response.json()) as {\n decision: unknown;\n run?: unknown;\n followUpRequest?: unknown;\n idempotentReplay?: unknown;\n };\n const decision = RunAdmissionDecisionSchema.parse(body.decision);\n if (body.run) {\n return {\n outcome: \"run_created\",\n decision,\n run: OpenTagRunSchema.parse(body.run),\n ...(body.idempotentReplay === true ? { idempotentReplay: true } : {})\n };\n }\n if (body.followUpRequest) {\n return {\n outcome: \"follow_up_queued\",\n decision,\n followUpRequest: FollowUpRequestSchema.parse(body.followUpRequest)\n };\n }\n return {\n outcome: \"needs_human_decision\",\n decision\n };\n },\n\n async getFollowUpRequest(input) {\n const response = await fetchImpl(`${baseUrl}/v1/follow-up-requests/${input.id}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getFollowUpRequest\");\n const body = (await response.json()) as { followUpRequest: unknown };\n return { followUpRequest: FollowUpRequestSchema.parse(body.followUpRequest) };\n },\n\n async createRunFromFollowUpRequest(input) {\n const response = await fetchImpl(`${baseUrl}/v1/follow-up-requests/${input.id}/create-run`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ runId: input.runId })\n });\n await assertOk(response, \"createRunFromFollowUpRequest\");\n const body = (await response.json()) as { followUpRequest: unknown; run: unknown };\n return {\n followUpRequest: FollowUpRequestSchema.parse(body.followUpRequest),\n run: OpenTagRunSchema.parse(body.run)\n };\n },\n\n async claim(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/claim`, {\n method: \"POST\",\n headers: authHeaders(options.pairingToken)\n });\n if (response.status === 204) return null;\n await assertOk(response, \"claim\");\n return parseClaimedRun((await response.json()) as { run: unknown; event: unknown });\n },\n\n async heartbeat(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/runs/${input.runId}/heartbeat`, {\n method: \"POST\",\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"heartbeat\");\n },\n\n async markRunning(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/runs/${input.runId}/running`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ executor: input.executor })\n });\n await assertOk(response, \"markRunning\");\n },\n\n async progress(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/runs/${input.runId}/progress`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({\n ...(input.type ? { type: input.type } : {}),\n message: input.message,\n ...(input.at ? { at: input.at } : {}),\n ...(input.visibility ? { visibility: input.visibility } : {}),\n ...(input.importance ? { importance: input.importance } : {})\n })\n });\n await assertOk(response, \"progress\");\n },\n\n async complete(input) {\n const result = OpenTagRunResultSchema.parse(input.result);\n const response = await fetchImpl(`${baseUrl}/v1/runners/${input.runnerId}/runs/${input.runId}/complete`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({ result })\n });\n await assertOk(response, \"complete\");\n },\n\n async getRun(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getRun\");\n return parseClaimedRun((await response.json()) as { run: unknown; event: unknown });\n },\n\n async listRunEvents(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}/events`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"listRunEvents\");\n return (await response.json()) as { events: unknown[] };\n },\n\n async getRunMetrics(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runs/${input.runId}/metrics`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getRunMetrics\");\n return (await response.json()) as { metrics: RunMetrics };\n },\n\n async getRepoMetrics(input) {\n const response = await fetchImpl(`${baseUrl}/v1/repo-bindings/${input.provider}/${input.owner}/${input.repo}/metrics`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getRepoMetrics\");\n return (await response.json()) as { metrics: AggregateMetrics };\n },\n\n async getWorkThreadMetrics(input) {\n const response = await fetchImpl(`${baseUrl}/v1/work-thread-metrics?threadId=${encodeURIComponent(input.threadId)}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getWorkThreadMetrics\");\n return (await response.json()) as { metrics: AggregateMetrics };\n },\n\n async getProposal(input) {\n const response = await fetchImpl(`${baseUrl}/v1/proposals/${input.proposalId}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getProposal\");\n return (await response.json()) as { runId: string; snapshot: SuggestedChangesSnapshot };\n },\n\n async getProposalLineage(input) {\n const response = await fetchImpl(`${baseUrl}/v1/proposals/${input.proposalId}/lineage`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getProposalLineage\");\n return (await response.json()) as { lineage: ProposalLineage };\n },\n\n async listCurrentMutationIntents(input) {\n const response = await fetchImpl(`${baseUrl}/v1/proposals/${input.proposalId}/current-intents`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"listCurrentMutationIntents\");\n return (await response.json()) as { intents: MutationIntentActionability[] };\n },\n\n async approveProposal(input) {\n const response = await fetchImpl(`${baseUrl}/v1/proposals/${input.proposalId}/approvals`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({\n ...(input.id ? { id: input.id } : {}),\n approvedIntentIds: input.approvedIntentIds,\n ...(input.rejectedIntentIds?.length ? { rejectedIntentIds: input.rejectedIntentIds } : {}),\n approvedBy: input.approvedBy,\n ...(input.approvedAt ? { approvedAt: input.approvedAt } : {}),\n ...(input.scope ? { scope: input.scope } : {}),\n ...(input.reason ? { reason: input.reason } : {}),\n ...(input.metadata ? { metadata: input.metadata } : {})\n })\n });\n await assertOk(response, \"approveProposal\");\n return (await response.json()) as { decision: ApprovalDecision };\n },\n\n async getApprovalDecision(input) {\n const response = await fetchImpl(`${baseUrl}/v1/approvals/${input.approvalDecisionId}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getApprovalDecision\");\n return (await response.json()) as { decision: ApprovalDecision };\n },\n\n async createApplyPlan(input) {\n const response = await fetchImpl(`${baseUrl}/v1/proposals/${input.proposalId}/apply-plans`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({\n ...(input.id ? { id: input.id } : {}),\n approvalDecisionId: input.approvalDecisionId,\n ...(input.selectedIntentIds !== undefined ? { selectedIntentIds: input.selectedIntentIds } : {}),\n ...(input.adapter ? { adapter: input.adapter } : {}),\n ...(input.execute !== undefined ? { execute: input.execute } : {})\n })\n });\n await assertOk(response, \"createApplyPlan\");\n return (await response.json()) as { plan: ApplyPlan };\n },\n\n async getApplyPlan(input) {\n const response = await fetchImpl(`${baseUrl}/v1/apply-plans/${input.applyPlanId}`, {\n headers: authHeaders(options.pairingToken)\n });\n await assertOk(response, \"getApplyPlan\");\n return (await response.json()) as { plan: ApplyPlan };\n },\n\n async createChildRun(input) {\n const response = await fetchImpl(`${baseUrl}/v1/runs/${input.parentRunId}/child-runs`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({\n runId: input.runId,\n action: input.action,\n ...(input.commandText ? { commandText: input.commandText } : {}),\n ...(input.sourceProposalId ? { sourceProposalId: input.sourceProposalId } : {}),\n ...(input.sourceApplyPlanId ? { sourceApplyPlanId: input.sourceApplyPlanId } : {})\n })\n });\n await assertOk(response, \"createChildRun\");\n const body = (await response.json()) as { run: unknown };\n return { run: OpenTagRunSchema.parse(body.run) };\n },\n\n async submitThreadAction(input) {\n const response = await fetchImpl(`${baseUrl}/v1/thread-actions`, {\n method: \"POST\",\n headers: jsonHeaders(options.pairingToken),\n body: JSON.stringify({\n ...(input.id ? { id: input.id } : {}),\n rawText: input.rawText,\n actor: input.actor,\n callback: {\n provider: input.callback.provider,\n uri: input.callback.uri,\n ...(input.callback.threadKey ? { threadKey: input.callback.threadKey } : {})\n },\n ...(input.metadata ? { metadata: input.metadata } : {})\n })\n });\n await assertOk(response, \"submitThreadAction\");\n return (await response.json()) as ThreadActionResult;\n }\n };\n}\n\nexport function createDispatcherClient(options: RunnerClientOptions): DispatcherRunnerClient {\n const client = createOpenTagClient(options);\n return {\n claim: () => client.claim({ runnerId: options.runnerId }),\n markRunning: (runId, executor) => client.markRunning({ runnerId: options.runnerId, runId, executor }),\n heartbeat: (runId) => client.heartbeat({ runnerId: options.runnerId, runId }),\n progress: (runId, input) => client.progress({ runnerId: options.runnerId, runId, ...input }),\n complete: (runId, result) => client.complete({ runnerId: options.runnerId, runId, result })\n };\n}\n\nexport function createDispatcherAdminClient(options: RunnerClientOptions) {\n const client = createOpenTagClient(options);\n return {\n registerRunner(name = options.runnerId): Promise<void> {\n return client.registerRunner({ runnerId: options.runnerId, name });\n },\n\n bindRepository(binding: RepositoryBindingConfig): Promise<void> {\n return client.bindRepository({\n provider: binding.provider,\n owner: binding.owner,\n repo: binding.repo,\n runnerId: options.runnerId,\n workspacePath: binding.checkoutPath,\n ...(binding.defaultExecutor ? { defaultExecutor: binding.defaultExecutor } : {})\n });\n },\n\n bindSlackChannel(binding: SlackChannelBindingInput): Promise<void> {\n return client.bindSlackChannel(binding);\n },\n\n bindChannel(binding: ChannelBindingInput): Promise<void> {\n return client.bindChannel(binding);\n },\n\n getChannelBinding(input: {\n provider: string;\n accountId: string;\n conversationId: string;\n }): Promise<{ binding: ChannelBindingInput }> {\n return client.getChannelBinding(input);\n }\n };\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentag/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "HTTP client SDK for creating, claiming, and updating OpenTag dispatcher runs.",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=20"
|
|
8
|
+
},
|
|
6
9
|
"main": "./dist/index.js",
|
|
7
10
|
"types": "./dist/index.d.ts",
|
|
8
11
|
"exports": {
|
|
@@ -26,9 +29,9 @@
|
|
|
26
29
|
"dispatcher",
|
|
27
30
|
"agents"
|
|
28
31
|
],
|
|
29
|
-
"license": "
|
|
32
|
+
"license": "MIT",
|
|
30
33
|
"dependencies": {
|
|
31
|
-
"@opentag/core": "0.
|
|
34
|
+
"@opentag/core": "0.2.0"
|
|
32
35
|
},
|
|
33
36
|
"devDependencies": {
|
|
34
37
|
"tsup": "^8.3.5",
|