@phamvuhoang/otto-core 0.3.0 → 0.4.1
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/dist/cli-help.d.ts +22 -3
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +9 -7
- package/dist/cli-help.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/linear-api.d.ts +161 -0
- package/dist/linear-api.d.ts.map +1 -0
- package/dist/linear-api.js +296 -0
- package/dist/linear-api.js.map +1 -0
- package/dist/linear-auth.d.ts +44 -0
- package/dist/linear-auth.d.ts.map +1 -0
- package/dist/linear-auth.js +145 -0
- package/dist/linear-auth.js.map +1 -0
- package/dist/linear-cli.d.ts +37 -0
- package/dist/linear-cli.d.ts.map +1 -0
- package/dist/linear-cli.js +180 -0
- package/dist/linear-cli.js.map +1 -0
- package/dist/linear-main.d.ts +5 -0
- package/dist/linear-main.d.ts.map +1 -0
- package/dist/linear-main.js +27 -0
- package/dist/linear-main.js.map +1 -0
- package/dist/preflight.d.ts +3 -0
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +13 -1
- package/dist/preflight.js.map +1 -1
- package/dist/run-bin.d.ts +21 -1
- package/dist/run-bin.d.ts.map +1 -1
- package/dist/run-bin.js +18 -6
- package/dist/run-bin.js.map +1 -1
- package/dist/stages.d.ts +10 -0
- package/dist/stages.d.ts.map +1 -1
- package/dist/stages.js +10 -0
- package/dist/stages.js.map +1 -1
- package/dist/watch.d.ts +37 -2
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +39 -4
- package/dist/watch.js.map +1 -1
- package/package.json +1 -1
- package/templates/linear-completion.md +17 -0
- package/templates/linearafk-issue.md +31 -0
- package/templates/linearafk.md +29 -0
- package/templates/linearprompt.md +39 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { createLinearClient, parseLinearRef, resolveDoneState, resolveLinearAuth, LinearApiError, } from "./linear-api.js";
|
|
4
|
+
/** Host-wired defaults for {@link runLinear}. */
|
|
5
|
+
export const defaultLinearCliDeps = {
|
|
6
|
+
env: process.env,
|
|
7
|
+
home: homedir(),
|
|
8
|
+
readFile: (p) => {
|
|
9
|
+
try {
|
|
10
|
+
return readFileSync(p, "utf8");
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
out: (m) => process.stdout.write(`${m}\n`),
|
|
17
|
+
err: (m) => process.stderr.write(`${m}\n`),
|
|
18
|
+
makeClient: (token) => createLinearClient({ token }),
|
|
19
|
+
};
|
|
20
|
+
const USAGE = "Usage: linear <list|dump|view <ref>|comment <ref> --body-file <path>|done <ref>> [--label <name>] [--team <key>] [--limit <n>]";
|
|
21
|
+
/** Pull `--name <value>` flags out of argv, returning the flags + positionals. */
|
|
22
|
+
function parseFlags(argv) {
|
|
23
|
+
const flags = {};
|
|
24
|
+
const positionals = [];
|
|
25
|
+
for (let i = 0; i < argv.length; i++) {
|
|
26
|
+
const arg = argv[i];
|
|
27
|
+
if (arg.startsWith("--")) {
|
|
28
|
+
flags[arg.slice(2)] = argv[++i] ?? "";
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
positionals.push(arg);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return { flags, positionals };
|
|
35
|
+
}
|
|
36
|
+
/** Resolve label/team/limit from flags, falling back to env then defaults. */
|
|
37
|
+
function listOptions(flags, env) {
|
|
38
|
+
const label = flags.label?.trim() || env.OTTO_LINEAR_LABEL?.trim() || "otto";
|
|
39
|
+
const team = flags.team?.trim() || env.OTTO_LINEAR_TEAM?.trim() || undefined;
|
|
40
|
+
const limit = flags.limit != null ? Number(flags.limit) : 50;
|
|
41
|
+
if (!Number.isInteger(limit) || limit <= 0) {
|
|
42
|
+
return { error: `--limit must be a positive integer, got: ${flags.limit}` };
|
|
43
|
+
}
|
|
44
|
+
return team ? { label, team, limit } : { label, limit };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Drive the bundled `linear` helper CLI — Otto's thin Linear counterpart to the
|
|
48
|
+
* system `gh`, used by the Linear templates and the agent. Resolves to the
|
|
49
|
+
* process exit code so the bin wrapper can `process.exit(code)`.
|
|
50
|
+
*
|
|
51
|
+
* - `list` — print labelled open issues (identifier/title/state/url).
|
|
52
|
+
* - `dump` — emit a JSON array of full issue detail (bodies + comments), for
|
|
53
|
+
* spilling into a prompt (parallel to `gh issue list --json …,body,comments`).
|
|
54
|
+
* - `view` — print one issue's full detail as JSON.
|
|
55
|
+
* - `comment` — add a comment to an issue from `--body-file`.
|
|
56
|
+
* - `done` — move an issue to a completed workflow state, resolved via
|
|
57
|
+
* `OTTO_LINEAR_DONE_STATE` (by name) else the team's first `completed`-type
|
|
58
|
+
* state; exits non-zero (no move) when the target state is ambiguous.
|
|
59
|
+
*/
|
|
60
|
+
export async function runLinear(argv, deps = defaultLinearCliDeps) {
|
|
61
|
+
const [sub, ...rest] = argv;
|
|
62
|
+
const { flags, positionals } = parseFlags(rest);
|
|
63
|
+
// Validate args before touching credentials so usage errors stay exit 2.
|
|
64
|
+
let ref;
|
|
65
|
+
let listOpts;
|
|
66
|
+
switch (sub) {
|
|
67
|
+
case "list":
|
|
68
|
+
case "dump": {
|
|
69
|
+
const opts = listOptions(flags, deps.env);
|
|
70
|
+
if ("error" in opts) {
|
|
71
|
+
deps.err(opts.error);
|
|
72
|
+
return 2;
|
|
73
|
+
}
|
|
74
|
+
listOpts = opts;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case "view":
|
|
78
|
+
case "comment":
|
|
79
|
+
case "done": {
|
|
80
|
+
if (positionals.length === 0) {
|
|
81
|
+
deps.err(USAGE);
|
|
82
|
+
return 2;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
ref = parseLinearRef(positionals[0]);
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
deps.err(e.message);
|
|
89
|
+
return 2;
|
|
90
|
+
}
|
|
91
|
+
if (sub === "comment" && !flags["body-file"]) {
|
|
92
|
+
deps.err("comment requires --body-file <path>.");
|
|
93
|
+
return 2;
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
default:
|
|
98
|
+
deps.err(USAGE);
|
|
99
|
+
return 2;
|
|
100
|
+
}
|
|
101
|
+
const auth = resolveLinearAuth({
|
|
102
|
+
env: deps.env,
|
|
103
|
+
readFile: deps.readFile,
|
|
104
|
+
home: deps.home,
|
|
105
|
+
});
|
|
106
|
+
if (!auth) {
|
|
107
|
+
deps.err("Linear auth: not found — run `otto-linear-auth login`.");
|
|
108
|
+
return 1;
|
|
109
|
+
}
|
|
110
|
+
const client = deps.makeClient(auth.token);
|
|
111
|
+
try {
|
|
112
|
+
switch (sub) {
|
|
113
|
+
case "list": {
|
|
114
|
+
const opts = listOpts;
|
|
115
|
+
const issues = await client.listIssues(opts);
|
|
116
|
+
if (issues.length === 0) {
|
|
117
|
+
deps.out(`No open Linear issues with label "${opts.label}".`);
|
|
118
|
+
return 0;
|
|
119
|
+
}
|
|
120
|
+
for (const i of issues) {
|
|
121
|
+
deps.out(`${i.identifier}\t${i.title}\t[${i.state}]\t${i.url}`);
|
|
122
|
+
}
|
|
123
|
+
return 0;
|
|
124
|
+
}
|
|
125
|
+
case "dump": {
|
|
126
|
+
const opts = listOpts;
|
|
127
|
+
const summaries = await client.listIssues(opts);
|
|
128
|
+
const details = [];
|
|
129
|
+
for (const s of summaries) {
|
|
130
|
+
details.push(await client.viewIssue({ kind: "identifier", identifier: s.identifier }));
|
|
131
|
+
}
|
|
132
|
+
deps.out(JSON.stringify(details, null, 2));
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
135
|
+
case "view": {
|
|
136
|
+
const detail = await client.viewIssue(ref);
|
|
137
|
+
deps.out(JSON.stringify(detail, null, 2));
|
|
138
|
+
return 0;
|
|
139
|
+
}
|
|
140
|
+
case "comment": {
|
|
141
|
+
const body = deps.readFile(flags["body-file"]);
|
|
142
|
+
if (body == null) {
|
|
143
|
+
deps.err(`Could not read --body-file: ${flags["body-file"]}`);
|
|
144
|
+
return 2;
|
|
145
|
+
}
|
|
146
|
+
if (body.trim() === "") {
|
|
147
|
+
deps.err(`--body-file is empty: ${flags["body-file"]}`);
|
|
148
|
+
return 2;
|
|
149
|
+
}
|
|
150
|
+
const issue = await client.viewIssue(ref);
|
|
151
|
+
await client.addComment(issue.id, body);
|
|
152
|
+
deps.out(`Commented on ${issue.identifier}.`);
|
|
153
|
+
return 0;
|
|
154
|
+
}
|
|
155
|
+
case "done": {
|
|
156
|
+
const issue = await client.viewIssue(ref);
|
|
157
|
+
const team = issue.identifier.split("-")[0];
|
|
158
|
+
const states = await client.listWorkflowStates(team);
|
|
159
|
+
const resolution = resolveDoneState(states, deps.env.OTTO_LINEAR_DONE_STATE);
|
|
160
|
+
if (resolution.kind === "ambiguous") {
|
|
161
|
+
deps.err(`Cannot move ${issue.identifier} to a done state: ${resolution.reason}. ` +
|
|
162
|
+
`Set OTTO_LINEAR_DONE_STATE or move it in Linear manually.`);
|
|
163
|
+
return 3;
|
|
164
|
+
}
|
|
165
|
+
const moved = await client.moveToDone(issue.id, resolution.state.id);
|
|
166
|
+
deps.out(`Moved ${issue.identifier} to ${moved.state}.`);
|
|
167
|
+
return 0;
|
|
168
|
+
}
|
|
169
|
+
default:
|
|
170
|
+
deps.err(USAGE);
|
|
171
|
+
return 2;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (e) {
|
|
175
|
+
const kind = e instanceof LinearApiError ? ` (${e.kind})` : "";
|
|
176
|
+
deps.err(`Linear error${kind}: ${e.message}`);
|
|
177
|
+
return 1;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=linear-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-cli.js","sourceRoot":"","sources":["../src/linear-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-main.d.ts","sourceRoot":"","sources":["../src/linear-main.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,mBAAmB,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { parseLinearIssueArg } from "./linear-api.js";
|
|
2
|
+
import { runBin } from "./run-bin.js";
|
|
3
|
+
import { STAGES } from "./stages.js";
|
|
4
|
+
import { pollLinearIssues } from "./watch.js";
|
|
5
|
+
export async function runLinearAfk(argv, opts = {}) {
|
|
6
|
+
await runBin(argv, {
|
|
7
|
+
bin: "otto-linear-afk",
|
|
8
|
+
usage: "<iterations>",
|
|
9
|
+
desc: "Linear-issue-driven Claude Code AFK loop",
|
|
10
|
+
stages: [STAGES.linearImplementer, STAGES.reviewer],
|
|
11
|
+
takesInputArg: false,
|
|
12
|
+
cliVersion: opts.cliVersion,
|
|
13
|
+
issueStage: STAGES.linearIssueImplementer,
|
|
14
|
+
parseIssue: parseLinearIssueArg,
|
|
15
|
+
mode: "linear",
|
|
16
|
+
supportsWatch: true,
|
|
17
|
+
// Poll the same labelled set the implementer selects (OTTO_LINEAR_LABEL),
|
|
18
|
+
// narrowed by OTTO_LINEAR_TEAM. The `label` arg is the resolved watch label.
|
|
19
|
+
watchPoll: (label) => pollLinearIssues({
|
|
20
|
+
label,
|
|
21
|
+
team: process.env.OTTO_LINEAR_TEAM?.trim() || undefined,
|
|
22
|
+
}),
|
|
23
|
+
watchProvider: { name: "Linear", authCmd: "otto-linear-auth login" },
|
|
24
|
+
resolveWatchLabel: () => process.env.OTTO_LINEAR_LABEL?.trim() || "otto",
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=linear-main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-main.js","sourceRoot":"","sources":["../src/linear-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAc,EACd,OAA4B,EAAE;IAE9B,MAAM,MAAM,CAAC,IAAI,EAAE;QACjB,GAAG,EAAE,iBAAiB;QACtB,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,0CAA0C;QAChD,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC;QACnD,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,MAAM,CAAC,sBAAsB;QACzC,UAAU,EAAE,mBAAmB;QAC/B,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE,IAAI;QACnB,0EAA0E;QAC1E,6EAA6E;QAC7E,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CACnB,gBAAgB,CAAC;YACf,KAAK;YACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,SAAS;SACxD,CAAC;QACJ,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,wBAAwB,EAAE;QACpE,iBAAiB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,MAAM;KACzE,CAAC,CAAC;AACL,CAAC"}
|
package/dist/preflight.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type LinearAuth } from "./linear-api.js";
|
|
1
2
|
/** One prerequisite check rendered by `--print-config`. */
|
|
2
3
|
export type PreflightResult = {
|
|
3
4
|
label: string;
|
|
@@ -15,6 +16,8 @@ export type PreflightProbes = {
|
|
|
15
16
|
pathExists: (p: string) => boolean;
|
|
16
17
|
/** Home directory holding credential files. */
|
|
17
18
|
home: string;
|
|
19
|
+
/** Resolve the stored/env Linear credential (for otto-linear-afk), or null. */
|
|
20
|
+
linearAuth: () => LinearAuth | null;
|
|
18
21
|
};
|
|
19
22
|
/**
|
|
20
23
|
* Minimal `which`: walk PATH (honouring PATHEXT on Windows, like render.ts's
|
package/dist/preflight.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAIA,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,0EAA0E;IAC1E,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC5C,oCAAoC;IACpC,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAErE,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,0EAA0E;IAC1E,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC5C,oCAAoC;IACpC,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,UAAU,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,IAAI,CAaf;AASD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAC3C,MAAM,GAAE,eAA+B,GACtC,eAAe,EAAE,CAqDnB"}
|
package/dist/preflight.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { delimiter, join } from "node:path";
|
|
4
|
+
import { resolveLinearAuth } from "./linear-api.js";
|
|
4
5
|
/**
|
|
5
6
|
* Minimal `which`: walk PATH (honouring PATHEXT on Windows, like render.ts's
|
|
6
7
|
* shell resolution) and return the first matching executable, or null.
|
|
@@ -24,6 +25,7 @@ const defaultProbes = {
|
|
|
24
25
|
resolveBin: (name) => whichBin(name),
|
|
25
26
|
pathExists: existsSync,
|
|
26
27
|
home: homedir(),
|
|
28
|
+
linearAuth: () => resolveLinearAuth(),
|
|
27
29
|
};
|
|
28
30
|
/**
|
|
29
31
|
* Diagnose the prerequisites a run needs before any paid `claude` invocation:
|
|
@@ -31,7 +33,7 @@ const defaultProbes = {
|
|
|
31
33
|
* otto-ghafk — the `gh` CLI and its credentials. Reports only; never throws.
|
|
32
34
|
*/
|
|
33
35
|
export function runPreflight(opts, probes = defaultProbes) {
|
|
34
|
-
const { resolveBin, pathExists, home } = probes;
|
|
36
|
+
const { resolveBin, pathExists, home, linearAuth } = probes;
|
|
35
37
|
const results = [];
|
|
36
38
|
const claude = resolveBin("claude");
|
|
37
39
|
results.push({
|
|
@@ -65,6 +67,16 @@ export function runPreflight(opts, probes = defaultProbes) {
|
|
|
65
67
|
detail: ghAuth ? "credentials found" : "run `gh auth login`",
|
|
66
68
|
});
|
|
67
69
|
}
|
|
70
|
+
if (opts.bin === "otto-linear-afk") {
|
|
71
|
+
const auth = linearAuth();
|
|
72
|
+
results.push({
|
|
73
|
+
label: "linear auth",
|
|
74
|
+
ok: auth != null,
|
|
75
|
+
detail: auth
|
|
76
|
+
? `credentials found (${auth.source})`
|
|
77
|
+
: "run `otto-linear-auth login`",
|
|
78
|
+
});
|
|
79
|
+
}
|
|
68
80
|
return results;
|
|
69
81
|
}
|
|
70
82
|
//# sourceMappingURL=preflight.js.map
|
package/dist/preflight.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
|
package/dist/run-bin.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Stage } from "./stages.js";
|
|
2
|
+
import type { PollResult, WatchProvider } from "./watch.js";
|
|
2
3
|
export type RunBinConfig = {
|
|
3
4
|
/** Bin name for usage/version/config output (e.g. "otto-afk"). */
|
|
4
5
|
bin: string;
|
|
@@ -15,8 +16,21 @@ export type RunBinConfig = {
|
|
|
15
16
|
*/
|
|
16
17
|
takesInputArg: boolean;
|
|
17
18
|
cliVersion?: string;
|
|
18
|
-
/** Whether this bin supports --watch.
|
|
19
|
+
/** Whether this bin supports --watch. otto-ghafk + otto-linear-afk set this. */
|
|
19
20
|
supportsWatch?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Provider-specific watch poller. Omitted → runWatch's default gh poller
|
|
23
|
+
* (otto-ghafk); otto-linear-afk passes a Linear poller. May be async.
|
|
24
|
+
*/
|
|
25
|
+
watchPoll?: (label: string, cwd: string) => PollResult | Promise<PollResult>;
|
|
26
|
+
/** Provider-specific watch poll/auth messaging; omitted → gh. */
|
|
27
|
+
watchProvider?: WatchProvider;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the label that gates a --watch run. Omitted → `OTTO_WATCH_LABEL`
|
|
30
|
+
* (otto-ghafk). otto-linear-afk resolves `OTTO_LINEAR_LABEL` so watch polls
|
|
31
|
+
* the same labelled set its implementer selects.
|
|
32
|
+
*/
|
|
33
|
+
resolveWatchLabel?: () => string;
|
|
20
34
|
/** Alternate gate stage used when --issue is set. Only otto-ghafk sets this. */
|
|
21
35
|
issueStage?: Stage;
|
|
22
36
|
/** Single read-only gate stage used when --verify is set. Only otto-afk sets this. */
|
|
@@ -25,6 +39,12 @@ export type RunBinConfig = {
|
|
|
25
39
|
applyReviewStage?: Stage;
|
|
26
40
|
/** Run mode identifier threaded into runLoop state (e.g. "afk" / "ghafk"). */
|
|
27
41
|
mode: string;
|
|
42
|
+
/**
|
|
43
|
+
* How to validate/normalize a `--issue` value. Defaults to the GitHub number
|
|
44
|
+
* ref; otto-linear-afk injects a Linear parser. The result must be shell-safe
|
|
45
|
+
* (it becomes OTTO_ISSUE, read by the issue template's static command).
|
|
46
|
+
*/
|
|
47
|
+
parseIssue?: (raw: string) => number | string;
|
|
28
48
|
};
|
|
29
49
|
/**
|
|
30
50
|
* Shared entry for the AFK bins: parse flags, handle --version/--help/--print-config,
|
package/dist/run-bin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-bin.d.ts","sourceRoot":"","sources":["../src/run-bin.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run-bin.d.ts","sourceRoot":"","sources":["../src/run-bin.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG;IACzB,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAC5B;;;;OAIG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7E,iEAAiE;IACjE,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;IACjC,gFAAgF;IAChF,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,sFAAsF;IACtF,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACzB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;CAC/C,CAAC;AAyBF;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuP7E"}
|
package/dist/run-bin.js
CHANGED
|
@@ -34,7 +34,7 @@ function ensureStateGitignored(workspaceDir) {
|
|
|
34
34
|
* optionally fork into the background (--detach), then drive runLoop.
|
|
35
35
|
*/
|
|
36
36
|
export async function runBin(argv, cfg) {
|
|
37
|
-
const flags = parseFlags(argv);
|
|
37
|
+
const flags = parseFlags(argv, { parseIssue: cfg.parseIssue });
|
|
38
38
|
if (flags.version) {
|
|
39
39
|
printVersion(cfg.bin, cfg.cliVersion);
|
|
40
40
|
return;
|
|
@@ -80,6 +80,13 @@ export async function runBin(argv, cfg) {
|
|
|
80
80
|
: flags.applyReview != null
|
|
81
81
|
? "review"
|
|
82
82
|
: cfg.mode;
|
|
83
|
+
// Single source of truth for the --watch label: the per-mode resolver
|
|
84
|
+
// (otto-linear-afk → OTTO_LINEAR_LABEL) falling back to OTTO_WATCH_LABEL.
|
|
85
|
+
// Both --print-config and the runWatch call below read this, so the reported
|
|
86
|
+
// label can't drift from what a watch run actually polls.
|
|
87
|
+
const watchLabel = cfg.resolveWatchLabel?.() ||
|
|
88
|
+
process.env.OTTO_WATCH_LABEL?.trim() ||
|
|
89
|
+
"otto";
|
|
83
90
|
if (flags.printConfig) {
|
|
84
91
|
printConfig(cfg.bin, workspaceDir, packageDir, {
|
|
85
92
|
cliVersion: cfg.cliVersion,
|
|
@@ -94,6 +101,7 @@ export async function runBin(argv, cfg) {
|
|
|
94
101
|
reviewLenses: reviewLenses ?? [],
|
|
95
102
|
watch: flags.watch,
|
|
96
103
|
watchIntervalSec: flags.watchIntervalSec,
|
|
104
|
+
watchLabel,
|
|
97
105
|
issue: flags.issue,
|
|
98
106
|
maxWaitMs,
|
|
99
107
|
branchStrategy: branchStrategyArg,
|
|
@@ -102,7 +110,7 @@ export async function runBin(argv, cfg) {
|
|
|
102
110
|
return;
|
|
103
111
|
}
|
|
104
112
|
if (flags.issue != null && !cfg.issueStage) {
|
|
105
|
-
console.error("--issue is only supported by otto-ghafk");
|
|
113
|
+
console.error("--issue is only supported by otto-ghafk and otto-linear-afk");
|
|
106
114
|
process.exit(1);
|
|
107
115
|
}
|
|
108
116
|
const modeCount = (flags.issue != null ? 1 : 0) +
|
|
@@ -158,8 +166,10 @@ export async function runBin(argv, cfg) {
|
|
|
158
166
|
console.error("--issue cannot be combined with --watch");
|
|
159
167
|
process.exit(1);
|
|
160
168
|
}
|
|
161
|
-
// Validated positive integer
|
|
162
|
-
//
|
|
169
|
+
// Validated by cfg.parseIssue (GitHub positive integer / Linear ref) — both
|
|
170
|
+
// admit only shell-safe chars, so it is safe for the static
|
|
171
|
+
// `gh issue view "$OTTO_ISSUE"` / `otto-linear view "$OTTO_ISSUE"` commands
|
|
172
|
+
// in the issue templates. See render.ts.
|
|
163
173
|
process.env.OTTO_ISSUE = String(flags.issue);
|
|
164
174
|
}
|
|
165
175
|
const stages = flags.verify
|
|
@@ -198,7 +208,7 @@ export async function runBin(argv, cfg) {
|
|
|
198
208
|
ensureStateGitignored(effectiveWorkspaceDir);
|
|
199
209
|
if (flags.watch) {
|
|
200
210
|
if (!cfg.supportsWatch) {
|
|
201
|
-
console.error("--watch is only supported by otto-ghafk");
|
|
211
|
+
console.error("--watch is only supported by otto-ghafk and otto-linear-afk");
|
|
202
212
|
process.exit(1);
|
|
203
213
|
}
|
|
204
214
|
const { runWatch } = await import("./watch.js");
|
|
@@ -208,7 +218,7 @@ export async function runBin(argv, cfg) {
|
|
|
208
218
|
workspaceDir: effectiveWorkspaceDir,
|
|
209
219
|
packageDir,
|
|
210
220
|
watchIntervalSec: flags.watchIntervalSec ?? 300,
|
|
211
|
-
watchLabel
|
|
221
|
+
watchLabel,
|
|
212
222
|
budgetUsd: flags.budget,
|
|
213
223
|
cooldownMs: flags.cooldownMs,
|
|
214
224
|
maxRetries: flags.maxRetries,
|
|
@@ -216,6 +226,8 @@ export async function runBin(argv, cfg) {
|
|
|
216
226
|
notify: flags.notify,
|
|
217
227
|
bin: cfg.bin,
|
|
218
228
|
cliVersion: cfg.cliVersion,
|
|
229
|
+
pollIssues: cfg.watchPoll,
|
|
230
|
+
provider: cfg.watchProvider,
|
|
219
231
|
});
|
|
220
232
|
return;
|
|
221
233
|
}
|
package/dist/run-bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-bin.js","sourceRoot":"","sources":["../src/run-bin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"run-bin.js","sourceRoot":"","sources":["../src/run-bin.ts"],"names":[],"mappings":"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"}
|
package/dist/stages.d.ts
CHANGED
|
@@ -19,6 +19,16 @@ export declare const STAGES: {
|
|
|
19
19
|
template: string;
|
|
20
20
|
permissionMode: string;
|
|
21
21
|
};
|
|
22
|
+
linearImplementer: {
|
|
23
|
+
name: string;
|
|
24
|
+
template: string;
|
|
25
|
+
permissionMode: string;
|
|
26
|
+
};
|
|
27
|
+
linearIssueImplementer: {
|
|
28
|
+
name: string;
|
|
29
|
+
template: string;
|
|
30
|
+
permissionMode: string;
|
|
31
|
+
};
|
|
22
32
|
verifier: {
|
|
23
33
|
name: string;
|
|
24
34
|
template: string;
|
package/dist/stages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stages.d.ts","sourceRoot":"","sources":["../src/stages.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAOF,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"stages.d.ts","sourceRoot":"","sources":["../src/stages.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAOF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyClB,CAAC"}
|
package/dist/stages.js
CHANGED
|
@@ -19,6 +19,16 @@ export const STAGES = {
|
|
|
19
19
|
template: "ghafk-issue.md",
|
|
20
20
|
permissionMode: "bypassPermissions",
|
|
21
21
|
},
|
|
22
|
+
linearImplementer: {
|
|
23
|
+
name: "linear-implementer",
|
|
24
|
+
template: "linearafk.md",
|
|
25
|
+
permissionMode: "bypassPermissions",
|
|
26
|
+
},
|
|
27
|
+
linearIssueImplementer: {
|
|
28
|
+
name: "linear-issue-implementer",
|
|
29
|
+
template: "linearafk-issue.md",
|
|
30
|
+
permissionMode: "bypassPermissions",
|
|
31
|
+
},
|
|
22
32
|
verifier: {
|
|
23
33
|
name: "verifier",
|
|
24
34
|
template: "verify.md",
|
package/dist/stages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stages.js","sourceRoot":"","sources":["../src/stages.ts"],"names":[],"mappings":"AAMA,gFAAgF;AAChF,8EAA8E;AAC9E,iFAAiF;AACjF,kFAAkF;AAClF,gFAAgF;AAChF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,QAAQ;QAClB,cAAc,EAAE,mBAAmB;KACpB;IACjB,gBAAgB,EAAE;QAChB,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,UAAU;QACpB,cAAc,EAAE,mBAAmB;KACpB;IACjB,qBAAqB,EAAE;QACrB,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,gBAAgB;QAC1B,cAAc,EAAE,mBAAmB;KACpB;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,WAAW;QACrB,cAAc,EAAE,mBAAmB;KACpB;IACjB,sBAAsB,EAAE;QACtB,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,iBAAiB;QAC3B,cAAc,EAAE,mBAAmB;KACpB;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,WAAW;QACrB,cAAc,EAAE,mBAAmB;KACpB;CAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"stages.js","sourceRoot":"","sources":["../src/stages.ts"],"names":[],"mappings":"AAMA,gFAAgF;AAChF,8EAA8E;AAC9E,iFAAiF;AACjF,kFAAkF;AAClF,gFAAgF;AAChF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,QAAQ;QAClB,cAAc,EAAE,mBAAmB;KACpB;IACjB,gBAAgB,EAAE;QAChB,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,UAAU;QACpB,cAAc,EAAE,mBAAmB;KACpB;IACjB,qBAAqB,EAAE;QACrB,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,gBAAgB;QAC1B,cAAc,EAAE,mBAAmB;KACpB;IACjB,iBAAiB,EAAE;QACjB,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,cAAc;QACxB,cAAc,EAAE,mBAAmB;KACpB;IACjB,sBAAsB,EAAE;QACtB,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,mBAAmB;KACpB;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,WAAW;QACrB,cAAc,EAAE,mBAAmB;KACpB;IACjB,sBAAsB,EAAE;QACtB,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,iBAAiB;QAC3B,cAAc,EAAE,mBAAmB;KACpB;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,WAAW;QACrB,cAAc,EAAE,mBAAmB;KACpB;CAClB,CAAC"}
|
package/dist/watch.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type LinearAuth, type LinearClient } from "./linear-api.js";
|
|
1
2
|
import type { Stage } from "./stages.js";
|
|
2
3
|
/**
|
|
3
4
|
* Outcome of one issue poll. Distinguishes a real idle queue (`ok` with
|
|
@@ -15,6 +16,35 @@ export type PollResult = {
|
|
|
15
16
|
};
|
|
16
17
|
/** Poll open issues carrying `label`, via gh. Never throws. */
|
|
17
18
|
export declare function pollOpenIssues(label: string, cwd: string): PollResult;
|
|
19
|
+
/**
|
|
20
|
+
* Injectable deps for {@link pollLinearIssues}, so poll classification is
|
|
21
|
+
* unit-testable without a real credential file or network. Auth is re-resolved
|
|
22
|
+
* each poll (default `resolveLinearAuth`) so a mid-watch re-login is picked up.
|
|
23
|
+
*/
|
|
24
|
+
export type LinearPollDeps = {
|
|
25
|
+
label: string;
|
|
26
|
+
team?: string;
|
|
27
|
+
limit?: number;
|
|
28
|
+
/** Resolve the Linear credential; defaults to env/file precedence. */
|
|
29
|
+
resolveAuth?: () => LinearAuth | null;
|
|
30
|
+
/** Build a client from a token; defaults to the real GraphQL client. */
|
|
31
|
+
makeClient?: (token: string) => Pick<LinearClient, "listIssues">;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Poll open Linear issues carrying `label` (count only, no comments). Never
|
|
35
|
+
* throws — mirrors {@link pollOpenIssues}. A missing credential or a Linear
|
|
36
|
+
* `auth`-kind error is reported as `auth: true` so the daemon can print a
|
|
37
|
+
* re-login hint distinctly from a transient request/network failure.
|
|
38
|
+
*/
|
|
39
|
+
export declare function pollLinearIssues(deps: LinearPollDeps): Promise<PollResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Provider-specific bits of the watch UX: the noun used in poll lines and the
|
|
42
|
+
* command that re-authenticates. Defaults to GitHub's `gh`.
|
|
43
|
+
*/
|
|
44
|
+
export type WatchProvider = {
|
|
45
|
+
name: string;
|
|
46
|
+
authCmd: string;
|
|
47
|
+
};
|
|
18
48
|
export type RunWatchOptions = {
|
|
19
49
|
stages: [Stage, ...Stage[]];
|
|
20
50
|
iterations: number;
|
|
@@ -29,8 +59,13 @@ export type RunWatchOptions = {
|
|
|
29
59
|
notify?: boolean;
|
|
30
60
|
bin?: string;
|
|
31
61
|
cliVersion?: string;
|
|
32
|
-
/**
|
|
33
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Poller for open labelled issues. Defaults to the gh poller; otto-linear-afk
|
|
64
|
+
* passes a Linear poller. May be async. Injectable for tests too.
|
|
65
|
+
*/
|
|
66
|
+
pollIssues?: (label: string, cwd: string) => PollResult | Promise<PollResult>;
|
|
67
|
+
/** Provider-specific poll/auth messaging; defaults to gh. */
|
|
68
|
+
provider?: WatchProvider;
|
|
34
69
|
};
|
|
35
70
|
export declare function runWatch(opts: RunWatchOptions): Promise<void>;
|
|
36
71
|
//# sourceMappingURL=watch.d.ts.map
|
package/dist/watch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAazB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAqCrE;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC;IACtC,wEAAwE;IACxE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;CAClE,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAwBhF;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAI9D,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9E,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,wBAAsB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GnE"}
|