@aicalas/loopy 0.1.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.
Files changed (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +101 -0
  3. package/dist/adapters.d.ts +111 -0
  4. package/dist/adapters.d.ts.map +1 -0
  5. package/dist/adapters.js +27 -0
  6. package/dist/adapters.js.map +1 -0
  7. package/dist/attention/github.d.ts +57 -0
  8. package/dist/attention/github.d.ts.map +1 -0
  9. package/dist/attention/github.js +162 -0
  10. package/dist/attention/github.js.map +1 -0
  11. package/dist/authoring/attention-config.d.ts +16 -0
  12. package/dist/authoring/attention-config.d.ts.map +1 -0
  13. package/dist/authoring/attention-config.js +19 -0
  14. package/dist/authoring/attention-config.js.map +1 -0
  15. package/dist/authoring/channel-config.d.ts +16 -0
  16. package/dist/authoring/channel-config.d.ts.map +1 -0
  17. package/dist/authoring/channel-config.js +16 -0
  18. package/dist/authoring/channel-config.js.map +1 -0
  19. package/dist/authoring/define.d.ts +13 -0
  20. package/dist/authoring/define.d.ts.map +1 -0
  21. package/dist/authoring/define.js +13 -0
  22. package/dist/authoring/define.js.map +1 -0
  23. package/dist/authoring/effect-config.d.ts +16 -0
  24. package/dist/authoring/effect-config.d.ts.map +1 -0
  25. package/dist/authoring/effect-config.js +17 -0
  26. package/dist/authoring/effect-config.js.map +1 -0
  27. package/dist/authoring/harness-config.d.ts +30 -0
  28. package/dist/authoring/harness-config.d.ts.map +1 -0
  29. package/dist/authoring/harness-config.js +36 -0
  30. package/dist/authoring/harness-config.js.map +1 -0
  31. package/dist/authoring/index.d.ts +10 -0
  32. package/dist/authoring/index.d.ts.map +1 -0
  33. package/dist/authoring/index.js +9 -0
  34. package/dist/authoring/index.js.map +1 -0
  35. package/dist/authoring/schema.d.ts +9 -0
  36. package/dist/authoring/schema.d.ts.map +1 -0
  37. package/dist/authoring/schema.js +28 -0
  38. package/dist/authoring/schema.js.map +1 -0
  39. package/dist/authoring/types.d.ts +115 -0
  40. package/dist/authoring/types.d.ts.map +1 -0
  41. package/dist/authoring/types.js +2 -0
  42. package/dist/authoring/types.js.map +1 -0
  43. package/dist/authoring/watcher-config.d.ts +33 -0
  44. package/dist/authoring/watcher-config.d.ts.map +1 -0
  45. package/dist/authoring/watcher-config.js +61 -0
  46. package/dist/authoring/watcher-config.js.map +1 -0
  47. package/dist/build/discover.d.ts +34 -0
  48. package/dist/build/discover.d.ts.map +1 -0
  49. package/dist/build/discover.js +165 -0
  50. package/dist/build/discover.js.map +1 -0
  51. package/dist/build/identity.d.ts +9 -0
  52. package/dist/build/identity.d.ts.map +1 -0
  53. package/dist/build/identity.js +0 -0
  54. package/dist/build/identity.js.map +1 -0
  55. package/dist/channels/github.d.ts +14 -0
  56. package/dist/channels/github.d.ts.map +1 -0
  57. package/dist/channels/github.js +118 -0
  58. package/dist/channels/github.js.map +1 -0
  59. package/dist/channels/index.d.ts +2 -0
  60. package/dist/channels/index.d.ts.map +1 -0
  61. package/dist/channels/index.js +2 -0
  62. package/dist/channels/index.js.map +1 -0
  63. package/dist/cli-help.d.ts +23 -0
  64. package/dist/cli-help.d.ts.map +1 -0
  65. package/dist/cli-help.js +186 -0
  66. package/dist/cli-help.js.map +1 -0
  67. package/dist/cli.d.ts +37 -0
  68. package/dist/cli.d.ts.map +1 -0
  69. package/dist/cli.js +385 -0
  70. package/dist/cli.js.map +1 -0
  71. package/dist/config.d.ts +71 -0
  72. package/dist/config.d.ts.map +1 -0
  73. package/dist/config.js +426 -0
  74. package/dist/config.js.map +1 -0
  75. package/dist/core/calls.d.ts +67 -0
  76. package/dist/core/calls.d.ts.map +1 -0
  77. package/dist/core/calls.js +109 -0
  78. package/dist/core/calls.js.map +1 -0
  79. package/dist/core/identifiers.d.ts +24 -0
  80. package/dist/core/identifiers.d.ts.map +1 -0
  81. package/dist/core/identifiers.js +129 -0
  82. package/dist/core/identifiers.js.map +1 -0
  83. package/dist/core/prompt.d.ts +5 -0
  84. package/dist/core/prompt.d.ts.map +1 -0
  85. package/dist/core/prompt.js +47 -0
  86. package/dist/core/prompt.js.map +1 -0
  87. package/dist/core/reconcile.d.ts +27 -0
  88. package/dist/core/reconcile.d.ts.map +1 -0
  89. package/dist/core/reconcile.js +36 -0
  90. package/dist/core/reconcile.js.map +1 -0
  91. package/dist/core/wire.d.ts +332 -0
  92. package/dist/core/wire.d.ts.map +1 -0
  93. package/dist/core/wire.js +543 -0
  94. package/dist/core/wire.js.map +1 -0
  95. package/dist/emitters/github.d.ts +15 -0
  96. package/dist/emitters/github.d.ts.map +1 -0
  97. package/dist/emitters/github.js +43 -0
  98. package/dist/emitters/github.js.map +1 -0
  99. package/dist/emitters/index.d.ts +2 -0
  100. package/dist/emitters/index.d.ts.map +1 -0
  101. package/dist/emitters/index.js +2 -0
  102. package/dist/emitters/index.js.map +1 -0
  103. package/dist/git.d.ts +17 -0
  104. package/dist/git.d.ts.map +1 -0
  105. package/dist/git.js +122 -0
  106. package/dist/git.js.map +1 -0
  107. package/dist/github/client.d.ts +53 -0
  108. package/dist/github/client.d.ts.map +1 -0
  109. package/dist/github/client.js +169 -0
  110. package/dist/github/client.js.map +1 -0
  111. package/dist/github/trigger.d.ts +12 -0
  112. package/dist/github/trigger.d.ts.map +1 -0
  113. package/dist/github/trigger.js +21 -0
  114. package/dist/github/trigger.js.map +1 -0
  115. package/dist/github/writes.d.ts +4 -0
  116. package/dist/github/writes.d.ts.map +1 -0
  117. package/dist/github/writes.js +21 -0
  118. package/dist/github/writes.js.map +1 -0
  119. package/dist/harnesses/base.d.ts +41 -0
  120. package/dist/harnesses/base.d.ts.map +1 -0
  121. package/dist/harnesses/base.js +182 -0
  122. package/dist/harnesses/base.js.map +1 -0
  123. package/dist/harnesses/claude-executable.d.ts +42 -0
  124. package/dist/harnesses/claude-executable.d.ts.map +1 -0
  125. package/dist/harnesses/claude-executable.js +138 -0
  126. package/dist/harnesses/claude-executable.js.map +1 -0
  127. package/dist/harnesses/claude.d.ts +35 -0
  128. package/dist/harnesses/claude.d.ts.map +1 -0
  129. package/dist/harnesses/claude.js +160 -0
  130. package/dist/harnesses/claude.js.map +1 -0
  131. package/dist/harnesses/codex.d.ts +40 -0
  132. package/dist/harnesses/codex.d.ts.map +1 -0
  133. package/dist/harnesses/codex.js +118 -0
  134. package/dist/harnesses/codex.js.map +1 -0
  135. package/dist/harnesses/index.d.ts +2 -0
  136. package/dist/harnesses/index.d.ts.map +1 -0
  137. package/dist/harnesses/index.js +2 -0
  138. package/dist/harnesses/index.js.map +1 -0
  139. package/dist/harnesses/opencode.d.ts +33 -0
  140. package/dist/harnesses/opencode.d.ts.map +1 -0
  141. package/dist/harnesses/opencode.js +203 -0
  142. package/dist/harnesses/opencode.js.map +1 -0
  143. package/dist/identifiers.d.ts +26 -0
  144. package/dist/identifiers.d.ts.map +1 -0
  145. package/dist/identifiers.js +62 -0
  146. package/dist/identifiers.js.map +1 -0
  147. package/dist/index.d.ts +10 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +10 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/log.d.ts +10 -0
  152. package/dist/log.d.ts.map +1 -0
  153. package/dist/log.js +44 -0
  154. package/dist/log.js.map +1 -0
  155. package/dist/settings.d.ts +43 -0
  156. package/dist/settings.d.ts.map +1 -0
  157. package/dist/settings.js +128 -0
  158. package/dist/settings.js.map +1 -0
  159. package/dist/temporal/activities.d.ts +57 -0
  160. package/dist/temporal/activities.d.ts.map +1 -0
  161. package/dist/temporal/activities.js +366 -0
  162. package/dist/temporal/activities.js.map +1 -0
  163. package/dist/temporal/answers.d.ts +48 -0
  164. package/dist/temporal/answers.d.ts.map +1 -0
  165. package/dist/temporal/answers.js +78 -0
  166. package/dist/temporal/answers.js.map +1 -0
  167. package/dist/temporal/client.d.ts +13 -0
  168. package/dist/temporal/client.d.ts.map +1 -0
  169. package/dist/temporal/client.js +20 -0
  170. package/dist/temporal/client.js.map +1 -0
  171. package/dist/temporal/contracts.d.ts +19 -0
  172. package/dist/temporal/contracts.d.ts.map +1 -0
  173. package/dist/temporal/contracts.js +22 -0
  174. package/dist/temporal/contracts.js.map +1 -0
  175. package/dist/temporal/drain.d.ts +19 -0
  176. package/dist/temporal/drain.d.ts.map +1 -0
  177. package/dist/temporal/drain.js +109 -0
  178. package/dist/temporal/drain.js.map +1 -0
  179. package/dist/temporal/executions.d.ts +18 -0
  180. package/dist/temporal/executions.d.ts.map +1 -0
  181. package/dist/temporal/executions.js +15 -0
  182. package/dist/temporal/executions.js.map +1 -0
  183. package/dist/temporal/handle.d.ts +39 -0
  184. package/dist/temporal/handle.d.ts.map +1 -0
  185. package/dist/temporal/handle.js +95 -0
  186. package/dist/temporal/handle.js.map +1 -0
  187. package/dist/temporal/history.d.ts +75 -0
  188. package/dist/temporal/history.d.ts.map +1 -0
  189. package/dist/temporal/history.js +310 -0
  190. package/dist/temporal/history.js.map +1 -0
  191. package/dist/temporal/observe.d.ts +85 -0
  192. package/dist/temporal/observe.d.ts.map +1 -0
  193. package/dist/temporal/observe.js +110 -0
  194. package/dist/temporal/observe.js.map +1 -0
  195. package/dist/temporal/schedules.d.ts +26 -0
  196. package/dist/temporal/schedules.d.ts.map +1 -0
  197. package/dist/temporal/schedules.js +200 -0
  198. package/dist/temporal/schedules.js.map +1 -0
  199. package/dist/temporal/status.d.ts +63 -0
  200. package/dist/temporal/status.d.ts.map +1 -0
  201. package/dist/temporal/status.js +153 -0
  202. package/dist/temporal/status.js.map +1 -0
  203. package/dist/temporal/stuck.d.ts +58 -0
  204. package/dist/temporal/stuck.d.ts.map +1 -0
  205. package/dist/temporal/stuck.js +53 -0
  206. package/dist/temporal/stuck.js.map +1 -0
  207. package/dist/temporal/supervisor.d.ts +11 -0
  208. package/dist/temporal/supervisor.d.ts.map +1 -0
  209. package/dist/temporal/supervisor.js +506 -0
  210. package/dist/temporal/supervisor.js.map +1 -0
  211. package/dist/temporal/worker.d.ts +21 -0
  212. package/dist/temporal/worker.d.ts.map +1 -0
  213. package/dist/temporal/worker.js +82 -0
  214. package/dist/temporal/worker.js.map +1 -0
  215. package/dist/temporal/workflow-bundle.js +12742 -0
  216. package/dist/temporal/workflows.d.ts +9 -0
  217. package/dist/temporal/workflows.d.ts.map +1 -0
  218. package/dist/temporal/workflows.js +144 -0
  219. package/dist/temporal/workflows.js.map +1 -0
  220. package/dist/version.d.ts +2 -0
  221. package/dist/version.d.ts.map +1 -0
  222. package/dist/version.js +2 -0
  223. package/dist/version.js.map +1 -0
  224. package/dist/watchers/base.d.ts +4 -0
  225. package/dist/watchers/base.d.ts.map +1 -0
  226. package/dist/watchers/base.js +7 -0
  227. package/dist/watchers/base.js.map +1 -0
  228. package/dist/watchers/github/client.d.ts +52 -0
  229. package/dist/watchers/github/client.d.ts.map +1 -0
  230. package/dist/watchers/github/client.js +165 -0
  231. package/dist/watchers/github/client.js.map +1 -0
  232. package/dist/watchers/github/index.d.ts +19 -0
  233. package/dist/watchers/github/index.d.ts.map +1 -0
  234. package/dist/watchers/github/index.js +83 -0
  235. package/dist/watchers/github/index.js.map +1 -0
  236. package/dist/watchers/index.d.ts +2 -0
  237. package/dist/watchers/index.d.ts.map +1 -0
  238. package/dist/watchers/index.js +2 -0
  239. package/dist/watchers/index.js.map +1 -0
  240. package/dist/worker-lock.d.ts +11 -0
  241. package/dist/worker-lock.d.ts.map +1 -0
  242. package/dist/worker-lock.js +53 -0
  243. package/dist/worker-lock.js.map +1 -0
  244. package/package.json +92 -0
@@ -0,0 +1,2 @@
1
+ export * from "./github.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitters/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
package/dist/git.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { type SimpleGit } from "simple-git";
2
+ export declare const REMOTE = "origin";
3
+ export declare function cloneUrl(repository: string): string;
4
+ export declare function ensureRepo(workingDirectory: string, url: string): Promise<RepoOps>;
5
+ export declare class RepoOps {
6
+ readonly root: string;
7
+ readonly remote: string;
8
+ private readonly git;
9
+ private provisionTail;
10
+ constructor(root: string, remote?: string, git?: SimpleGit);
11
+ fetchBranch(branch: string): Promise<boolean>;
12
+ provisionWorkspace(path: string, localBranch: string, targetBranch: string, baseBranch: string): Promise<void>;
13
+ cleanupWorkspaces(path: string): Promise<string[]>;
14
+ private provisionWorkspaceUnlocked;
15
+ private cleanupWorkspacesUnlocked;
16
+ }
17
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,YAAY,CAAC;AAIvD,eAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQxF;AAED,qBAAa,OAAO;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,aAAa,CAAoC;IAEzD,YAAY,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,EAAE,GAAG,CAAC,EAAE,SAAS,EAIzD;IAEK,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAclD;IAED,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf;IAED,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASjD;YAEa,0BAA0B;YAuB1B,yBAAyB;CAgBxC"}
package/dist/git.js ADDED
@@ -0,0 +1,122 @@
1
+ import { existsSync } from "node:fs";
2
+ import { mkdir, rm } from "node:fs/promises";
3
+ import { dirname, join, relative, resolve } from "node:path";
4
+ import { simpleGit } from "simple-git";
5
+ import { log } from "./log.js";
6
+ export const REMOTE = "origin";
7
+ export function cloneUrl(repository) {
8
+ return `https://github.com/${repository}.git`;
9
+ }
10
+ export async function ensureRepo(workingDirectory, url) {
11
+ const repoDirectory = join(workingDirectory, "repo");
12
+ if (!existsSync(join(repoDirectory, ".git"))) {
13
+ await mkdir(workingDirectory, { recursive: true });
14
+ log.info(`cloning ${url} into ${repoDirectory}`);
15
+ await simpleGit().clone(url, repoDirectory);
16
+ }
17
+ return new RepoOps(repoDirectory, REMOTE);
18
+ }
19
+ export class RepoOps {
20
+ root;
21
+ remote;
22
+ git;
23
+ provisionTail = Promise.resolve();
24
+ constructor(root, remote = REMOTE, git) {
25
+ this.root = root;
26
+ this.remote = remote;
27
+ this.git = git ?? simpleGit(root);
28
+ }
29
+ async fetchBranch(branch) {
30
+ try {
31
+ await this.git.raw([
32
+ "fetch",
33
+ "--force",
34
+ "--quiet",
35
+ this.remote,
36
+ `refs/heads/${branch}:refs/remotes/${this.remote}/${branch}`,
37
+ ]);
38
+ return true;
39
+ }
40
+ catch (error) {
41
+ if (errorText(error).toLowerCase().includes("couldn't find remote ref"))
42
+ return false;
43
+ throw error;
44
+ }
45
+ }
46
+ provisionWorkspace(path, localBranch, targetBranch, baseBranch) {
47
+ const operation = this.provisionTail
48
+ .catch(() => undefined)
49
+ .then(() => this.provisionWorkspaceUnlocked(path, localBranch, targetBranch, baseBranch));
50
+ this.provisionTail = operation.catch(() => undefined);
51
+ return operation;
52
+ }
53
+ cleanupWorkspaces(path) {
54
+ let removed = [];
55
+ const operation = this.provisionTail
56
+ .catch(() => undefined)
57
+ .then(async () => {
58
+ removed = await this.cleanupWorkspacesUnlocked(path);
59
+ });
60
+ this.provisionTail = operation.catch(() => undefined);
61
+ return operation.then(() => removed);
62
+ }
63
+ async provisionWorkspaceUnlocked(path, localBranch, targetBranch, baseBranch) {
64
+ if (existsSync(join(path, ".git")))
65
+ return;
66
+ const targetExists = await this.fetchBranch(targetBranch);
67
+ if (!targetExists && !(await this.fetchBranch(baseBranch))) {
68
+ throw new Error(`neither target branch ${JSON.stringify(targetBranch)} nor base branch ${JSON.stringify(baseBranch)} exists`);
69
+ }
70
+ const startBranch = targetExists ? targetBranch : baseBranch;
71
+ const start = `refs/remotes/${this.remote}/${startBranch}`;
72
+ await mkdir(dirname(path), { recursive: true });
73
+ const branches = await this.git.branchLocal();
74
+ if (branches.all.includes(localBranch)) {
75
+ await this.git.raw(["branch", "-D", localBranch]);
76
+ }
77
+ await this.git.raw(["worktree", "add", "--quiet", "-b", localBranch, path, start]);
78
+ }
79
+ async cleanupWorkspacesUnlocked(path) {
80
+ const root = resolve(path);
81
+ const records = parseWorktrees(await this.git.raw(["worktree", "list", "--porcelain"]));
82
+ const selected = records.filter(({ path: candidate }) => {
83
+ const offset = relative(root, resolve(candidate));
84
+ return offset === "" || (!offset.startsWith("..") && !offset.startsWith("/"));
85
+ });
86
+ for (const worktree of selected) {
87
+ await this.git.raw(["worktree", "remove", "--force", worktree.path]);
88
+ if (worktree.branch !== undefined) {
89
+ await this.git.raw(["branch", "-D", worktree.branch]);
90
+ }
91
+ }
92
+ await rm(root, { recursive: true, force: true });
93
+ return selected.map((worktree) => worktree.path).sort();
94
+ }
95
+ }
96
+ function parseWorktrees(value) {
97
+ return value
98
+ .trim()
99
+ .split("\n\n")
100
+ .filter(Boolean)
101
+ .map((block) => {
102
+ const fields = new Map(block.split("\n").map((line) => {
103
+ const separator = line.indexOf(" ");
104
+ return separator < 0 ? [line, ""] : [line.slice(0, separator), line.slice(separator + 1)];
105
+ }));
106
+ const path = fields.get("worktree");
107
+ if (path === undefined)
108
+ throw new Error("git worktree record lacks a path");
109
+ const rawBranch = fields.get("branch");
110
+ const record = { path };
111
+ if (rawBranch?.startsWith("refs/heads/"))
112
+ record.branch = rawBranch.slice("refs/heads/".length);
113
+ return record;
114
+ });
115
+ }
116
+ function errorText(error) {
117
+ if (!(error instanceof Error))
118
+ return String(error);
119
+ const details = error;
120
+ return `${error.message}\n${details.stderr ?? ""}\n${details.stdout ?? ""}`;
121
+ }
122
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { Octokit } from "octokit";
2
+ import type { JsonObject, JsonValue } from "../core/wire.js";
3
+ export interface PullInfo extends JsonObject {
4
+ number: number;
5
+ head_ref: string;
6
+ head_sha: string;
7
+ base_ref: string;
8
+ html_url: string;
9
+ labels: string[];
10
+ title: string;
11
+ body: string;
12
+ }
13
+ export interface IssueInfo extends JsonObject {
14
+ number: number;
15
+ title: string;
16
+ body: string;
17
+ html_url: string;
18
+ labels: string[];
19
+ }
20
+ /** `owner/name`: the shape every GitHub port validates a declared repository against. */
21
+ export declare const REPOSITORY_PATTERN: RegExp;
22
+ export declare class GitHubAuthenticationError extends Error {
23
+ }
24
+ /** Named so a wrapped provider failure identifies itself in logs and retry classification. */
25
+ export declare class GitHubUnavailableError extends Error {
26
+ constructor(message: string, options?: ErrorOptions);
27
+ }
28
+ export declare function authenticationDiagnostic(environment?: NodeJS.ProcessEnv): string | undefined;
29
+ export declare class GitHubClient {
30
+ private readonly octokit;
31
+ private readonly owner;
32
+ private readonly repo;
33
+ readonly repository: string;
34
+ constructor(token: string, repository: string, octokit?: Octokit);
35
+ static fromEnvironment(repository: string, environment?: NodeJS.ProcessEnv): GitHubClient;
36
+ openPullsWithLabel(label: string): Promise<PullInfo[]>;
37
+ openIssuesWithLabel(label: string): Promise<IssueInfo[]>;
38
+ getPull(number: number): Promise<PullInfo>;
39
+ labels(number: number): Promise<string[]>;
40
+ commentBodies(number: number): Promise<string[]>;
41
+ createComment(number: number, body: string): Promise<void>;
42
+ setLabels(number: number, labels: readonly string[]): Promise<void>;
43
+ /**
44
+ * Create the repository-level label if it is absent. Issue-label writes require the label to
45
+ * exist in the repository first; creation answers 422 `already_exists` for a label that does,
46
+ * which is this method's success case. The inputs are fixed application constants, so no other
47
+ * validation failure shares that status here.
48
+ */
49
+ ensureLabel(name: string, color: string, description: string): Promise<void>;
50
+ private request;
51
+ }
52
+ export declare function asJsonValue(value: unknown): JsonValue;
53
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/github/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,WAAW,QAAS,SAAQ,UAAU;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,QAAuB,CAAC;AAEvD,qBAAa,yBAA0B,SAAQ,KAAK;CAAG;AAEvD,8FAA8F;AAC9F,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAGlD;CACF;AAED,wBAAgB,wBAAwB,CAEtC,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC3C,MAAM,GAAG,SAAS,CAIpB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,YAAY,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAS/D;IAED,MAAM,CAAC,eAAe,CACpB,UAAU,EAAE,MAAM,EAElB,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC3C,YAAY,CAQd;IAEK,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAe3D;IAEK,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAmB7D;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAe/C;IAEK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAU9C;IAEK,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUrD;IAEK,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/D;IAEK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASxE;IAED;;;;;OAKG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAejF;YAEa,OAAO;CAOtB;AAeD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAErD"}
@@ -0,0 +1,169 @@
1
+ import { Octokit } from "octokit";
2
+ /** `owner/name`: the shape every GitHub port validates a declared repository against. */
3
+ export const REPOSITORY_PATTERN = /^[^/\s]+\/[^/\s]+$/;
4
+ export class GitHubAuthenticationError extends Error {
5
+ }
6
+ /** Named so a wrapped provider failure identifies itself in logs and retry classification. */
7
+ export class GitHubUnavailableError extends Error {
8
+ constructor(message, options) {
9
+ super(message, options);
10
+ this.name = new.target.name;
11
+ }
12
+ }
13
+ export function authenticationDiagnostic(
14
+ /* istanbul ignore next -- production environment boundary */
15
+ environment = process.env) {
16
+ return environment.GITHUB_TOKEN || environment.GH_TOKEN
17
+ ? undefined
18
+ : "set GITHUB_TOKEN or GH_TOKEN to authenticate with GitHub";
19
+ }
20
+ export class GitHubClient {
21
+ octokit;
22
+ owner;
23
+ repo;
24
+ repository;
25
+ constructor(token, repository, octokit) {
26
+ this.repository = repository;
27
+ this.octokit = octokit ?? new Octokit({ auth: token });
28
+ const separator = repository.indexOf("/");
29
+ if (separator <= 0 || separator === repository.length - 1) {
30
+ throw new Error(`invalid GitHub repository: ${repository}`);
31
+ }
32
+ this.owner = repository.slice(0, separator);
33
+ this.repo = repository.slice(separator + 1);
34
+ }
35
+ static fromEnvironment(repository,
36
+ /* istanbul ignore next -- production environment boundary */
37
+ environment = process.env) {
38
+ const token = environment.GITHUB_TOKEN || environment.GH_TOKEN;
39
+ if (!token) {
40
+ throw new GitHubAuthenticationError("set GITHUB_TOKEN or GH_TOKEN to authenticate with GitHub");
41
+ }
42
+ return new GitHubClient(token, repository);
43
+ }
44
+ async openPullsWithLabel(label) {
45
+ const issues = await this.request(`list pulls labelled ${JSON.stringify(label)}`, () => this.octokit.paginate(this.octokit.rest.issues.listForRepo, {
46
+ owner: this.owner,
47
+ repo: this.repo,
48
+ labels: label,
49
+ state: "open",
50
+ per_page: 100,
51
+ }));
52
+ const pulls = [];
53
+ for (const issue of issues) {
54
+ if (issue.pull_request !== undefined)
55
+ pulls.push(await this.getPull(issue.number));
56
+ }
57
+ return pulls;
58
+ }
59
+ async openIssuesWithLabel(label) {
60
+ const issues = await this.request(`list issues labelled ${JSON.stringify(label)}`, () => this.octokit.paginate(this.octokit.rest.issues.listForRepo, {
61
+ owner: this.owner,
62
+ repo: this.repo,
63
+ labels: label,
64
+ state: "open",
65
+ per_page: 100,
66
+ }));
67
+ return issues
68
+ .filter((issue) => issue.pull_request === undefined)
69
+ .map((issue) => ({
70
+ number: issue.number,
71
+ title: issue.title ?? "",
72
+ body: issue.body ?? "",
73
+ html_url: issue.html_url,
74
+ labels: issue.labels.map(labelName),
75
+ }));
76
+ }
77
+ async getPull(number) {
78
+ const response = await this.request(`get pull #${number}`, () => this.octokit.rest.pulls.get({ owner: this.owner, repo: this.repo, pull_number: number }));
79
+ const pull = response.data;
80
+ return {
81
+ number: pull.number,
82
+ head_ref: pull.head.ref,
83
+ head_sha: pull.head.sha,
84
+ base_ref: pull.base.ref,
85
+ html_url: pull.html_url,
86
+ labels: pull.labels.map(labelName),
87
+ title: pull.title ?? "",
88
+ body: pull.body ?? "",
89
+ };
90
+ }
91
+ async labels(number) {
92
+ const response = await this.request(`get labels for #${number}`, () => this.octokit.rest.issues.listLabelsOnIssue({
93
+ owner: this.owner,
94
+ repo: this.repo,
95
+ issue_number: number,
96
+ per_page: 100,
97
+ }));
98
+ return response.data.map(labelName);
99
+ }
100
+ async commentBodies(number) {
101
+ const comments = await this.request(`list comments for #${number}`, () => this.octokit.paginate(this.octokit.rest.issues.listComments, {
102
+ owner: this.owner,
103
+ repo: this.repo,
104
+ issue_number: number,
105
+ per_page: 100,
106
+ }));
107
+ return comments.map((comment) => comment.body ?? "");
108
+ }
109
+ async createComment(number, body) {
110
+ await this.request(`comment on #${number}`, () => this.octokit.rest.issues.createComment({
111
+ owner: this.owner,
112
+ repo: this.repo,
113
+ issue_number: number,
114
+ body,
115
+ }));
116
+ }
117
+ async setLabels(number, labels) {
118
+ await this.request(`set labels for #${number}`, () => this.octokit.rest.issues.setLabels({
119
+ owner: this.owner,
120
+ repo: this.repo,
121
+ issue_number: number,
122
+ labels: [...labels],
123
+ }));
124
+ }
125
+ /**
126
+ * Create the repository-level label if it is absent. Issue-label writes require the label to
127
+ * exist in the repository first; creation answers 422 `already_exists` for a label that does,
128
+ * which is this method's success case. The inputs are fixed application constants, so no other
129
+ * validation failure shares that status here.
130
+ */
131
+ async ensureLabel(name, color, description) {
132
+ try {
133
+ await this.request(`create label ${JSON.stringify(name)}`, () => this.octokit.rest.issues.createLabel({
134
+ owner: this.owner,
135
+ repo: this.repo,
136
+ name,
137
+ color,
138
+ description,
139
+ }));
140
+ }
141
+ catch (error) {
142
+ if (error instanceof GitHubUnavailableError && causeStatus(error) === 422)
143
+ return;
144
+ throw error;
145
+ }
146
+ }
147
+ async request(what, operation) {
148
+ try {
149
+ return await operation();
150
+ }
151
+ catch (error) {
152
+ throw new GitHubUnavailableError(`${what}: ${errorMessage(error)}`, { cause: error });
153
+ }
154
+ }
155
+ }
156
+ function causeStatus(error) {
157
+ const status = error.cause?.status;
158
+ return typeof status === "number" ? status : undefined;
159
+ }
160
+ function labelName(label) {
161
+ return typeof label === "string" ? label : (label.name ?? "");
162
+ }
163
+ function errorMessage(error) {
164
+ return error instanceof Error ? error.message : String(error);
165
+ }
166
+ export function asJsonValue(value) {
167
+ return JSON.parse(JSON.stringify(value));
168
+ }
169
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/github/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { TriggerCandidate } from "../core/wire.js";
2
+ /**
3
+ * The issue/PR number a GitHub trigger identifies. `data.number` is the authoritative form the
4
+ * GitHub watchers record; the string id is the fallback. Throws on a trigger that names no positive
5
+ * integer, so a misconfiguration fails loudly rather than shipping `NaN` into a port's `issue`
6
+ * input. Pure and isolate-safe: the GitHub authoring configs and the Node-side GitHub adapters
7
+ * share it, and the engine core never learns the convention.
8
+ */
9
+ export declare function gitHubTriggerNumber(trigger: TriggerCandidate): number;
10
+ /** Ensure a trigger is GitHub-shaped before extracting its issue or pull-request number. */
11
+ export declare function triggerNumber(trigger: TriggerCandidate): number;
12
+ //# sourceMappingURL=trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/github/trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAMrE;AAED,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAG/D"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The issue/PR number a GitHub trigger identifies. `data.number` is the authoritative form the
3
+ * GitHub watchers record; the string id is the fallback. Throws on a trigger that names no positive
4
+ * integer, so a misconfiguration fails loudly rather than shipping `NaN` into a port's `issue`
5
+ * input. Pure and isolate-safe: the GitHub authoring configs and the Node-side GitHub adapters
6
+ * share it, and the engine core never learns the convention.
7
+ */
8
+ export function gitHubTriggerNumber(trigger) {
9
+ const value = trigger.data.number ?? Number(trigger.id);
10
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value <= 0) {
11
+ throw new Error(`trigger names no issue number: ${JSON.stringify(trigger.id)}`);
12
+ }
13
+ return value;
14
+ }
15
+ /** Ensure a trigger is GitHub-shaped before extracting its issue or pull-request number. */
16
+ export function triggerNumber(trigger) {
17
+ if (trigger.source !== "github")
18
+ throw new Error("GitHub adapter requires a GitHub trigger");
19
+ return gitHubTriggerNumber(trigger);
20
+ }
21
+ //# sourceMappingURL=trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/github/trigger.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAyB;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,aAAa,CAAC,OAAyB;IACrD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC7F,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Classify GitHub adapter write failures into retryable and permanent outcomes. */
2
+ export declare function classifyGitHubWriteError(error: unknown): unknown;
3
+ export declare function sameLabels(current: readonly string[], desired: readonly string[]): boolean;
4
+ //# sourceMappingURL=writes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes.d.ts","sourceRoot":"","sources":["../../src/github/writes.ts"],"names":[],"mappings":"AAMA,oFAAoF;AACpF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAYhE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAK1F"}
@@ -0,0 +1,21 @@
1
+ import { EmitterPermanentError } from "../adapters.js";
2
+ import { GitHubAuthenticationError, GitHubUnavailableError } from "./client.js";
3
+ /** HTTP statuses that say the write can never succeed as issued: the target is gone or invalid. */
4
+ const PERMANENT_STATUSES = new Set([404, 410, 422]);
5
+ /** Classify GitHub adapter write failures into retryable and permanent outcomes. */
6
+ export function classifyGitHubWriteError(error) {
7
+ if (error instanceof GitHubAuthenticationError)
8
+ return error;
9
+ if (error instanceof GitHubUnavailableError) {
10
+ const status = error.cause?.status;
11
+ return typeof status === "number" && PERMANENT_STATUSES.has(status)
12
+ ? new EmitterPermanentError(error.message, { cause: error })
13
+ : error;
14
+ }
15
+ return new EmitterPermanentError(error instanceof Error ? error.message : String(error), error instanceof Error ? { cause: error } : {});
16
+ }
17
+ export function sameLabels(current, desired) {
18
+ return (current.length === desired.length &&
19
+ [...current].sort().every((label, index) => label === desired[index]));
20
+ }
21
+ //# sourceMappingURL=writes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes.js","sourceRoot":"","sources":["../../src/github/writes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAEhF,mGAAmG;AACnG,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAEzE,oFAAoF;AACpF,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,IAAI,KAAK,YAAY,yBAAyB;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAI,KAAK,CAAC,KAA0C,EAAE,MAAM,CAAC;QACzE,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC;YACjE,CAAC,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC5D,CAAC,CAAC,KAAK,CAAC;IACZ,CAAC;IACD,OAAO,IAAI,qBAAqB,CAC9B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACtD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAC/C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAA0B,EAAE,OAA0B;IAC/E,OAAO,CACL,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;QACjC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { Harness, HarnessContext, HarnessResult } from "../adapters.js";
2
+ import { type JsonObject, type JsonValue } from "../core/wire.js";
3
+ export declare const CLEANUP_TIMEOUT_MS = 10000;
4
+ export interface AdapterTurn {
5
+ text?: string;
6
+ payload?: unknown;
7
+ sessionId?: string;
8
+ usage?: JsonObject;
9
+ }
10
+ export interface Adapter {
11
+ /** The provider session this adapter is speaking to, once the provider has minted one. */
12
+ readonly sessionId: string | undefined;
13
+ start(prompt: string, schema: JsonObject, signal?: AbortSignal): Promise<AdapterTurn>;
14
+ continue(prompt: string, schema: JsonObject, signal?: AbortSignal): Promise<AdapterTurn>;
15
+ interrupt(): Promise<void>;
16
+ close(): Promise<void>;
17
+ }
18
+ export declare class HarnessError extends Error {
19
+ readonly diagnostic: string;
20
+ usage: JsonObject | undefined;
21
+ sessionId: string | undefined;
22
+ constructor(diagnostic: string, options?: {
23
+ usage?: JsonObject;
24
+ sessionId?: string;
25
+ cause?: unknown;
26
+ });
27
+ }
28
+ export declare class ProviderError extends HarnessError {
29
+ }
30
+ export declare class OutcomeError extends HarnessError {
31
+ }
32
+ export declare abstract class ValidatingHarness implements Harness {
33
+ protected abstract createAdapter(context: HarnessContext): Adapter;
34
+ run(context: HarnessContext, signal?: AbortSignal): Promise<HarnessResult>;
35
+ }
36
+ export declare function validateTurn(turn: AdapterTurn, schema: JsonObject): JsonValue;
37
+ export declare function mergeUsage(left: JsonObject | undefined, right: JsonObject | undefined): JsonObject | undefined;
38
+ export declare function jsonObject(value: unknown, label: string): JsonObject | undefined;
39
+ export declare function isAbortError(error: unknown): error is DOMException;
40
+ export declare function errorMessage(error: unknown): string;
41
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/harnesses/base.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAe,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG/E,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAEzC,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,0FAA0F;IAC1F,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACzF,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B,YACE,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,UAAU,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAO1E;CACF;AAED,qBAAa,aAAc,SAAQ,YAAY;CAAG;AAClD,qBAAa,YAAa,SAAQ,YAAY;CAAG;AAEjD,8BAAsB,iBAAkB,YAAW,OAAO;IACxD,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;IAE7D,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAsC/E;CACF;AAWD,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CA0B7E;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,KAAK,EAAE,UAAU,GAAG,SAAS,GAC5B,UAAU,GAAG,SAAS,CAexB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAYhF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAElE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD"}