@opentag/client 0.1.0 → 0.3.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 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: Required<RunProgressInput>): Promise<void>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG;IACvD,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,oBAAoB,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;IACvH,gBAAgB,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,sBAAsB,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,wBAAwB,CAAA;KAAE,CAAC,CAAC;IACrH,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;IAC/D,KAAK,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACtE,SAAS,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,WAAW,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,QAAQ,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,QAAQ,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7D,aAAa,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;CACzE,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC3C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE,CAAC;AA4BF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA8HhF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,sBAAsB,CAS3F;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,mBAAmB;mCAG3B,OAAO,CAAC,IAAI,CAAC;4BAI9B,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;8BAWrC,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;EAIrE"}
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
- return { run: OpenTagRunSchema.parse(body.run) };
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.1.0",
3
+ "version": "0.3.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": "Apache-2.0",
32
+ "license": "MIT",
30
33
  "dependencies": {
31
- "@opentag/core": "0.1.0"
34
+ "@opentag/core": "0.3.0"
32
35
  },
33
36
  "devDependencies": {
34
37
  "tsup": "^8.3.5",