@fnmoa/cli 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/LICENSE +31 -0
- package/README.md +273 -70
- package/dist/assets/worker.js +216 -0
- package/dist/main.js +326 -0
- package/package.json +34 -27
- package/dist/args.js +0 -33
- package/dist/args.js.map +0 -1
- package/dist/client.js +0 -103
- package/dist/client.js.map +0 -1
- package/dist/command.js +0 -2
- package/dist/command.js.map +0 -1
- package/dist/commands/config.js +0 -129
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/github.js +0 -19
- package/dist/commands/github.js.map +0 -1
- package/dist/commands/login.js +0 -128
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/oracle.js +0 -86
- package/dist/commands/oracle.js.map +0 -1
- package/dist/commands/repos.js +0 -70
- package/dist/commands/repos.js.map +0 -1
- package/dist/commands/skills.js +0 -225
- package/dist/commands/skills.js.map +0 -1
- package/dist/commands/status.js +0 -78
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/tasks.js +0 -171
- package/dist/commands/tasks.js.map +0 -1
- package/dist/commands/track.js +0 -31
- package/dist/commands/track.js.map +0 -1
- package/dist/commands/whoami.js +0 -22
- package/dist/commands/whoami.js.map +0 -1
- package/dist/commands/workflows.js +0 -304
- package/dist/commands/workflows.js.map +0 -1
- package/dist/config.js +0 -65
- package/dist/config.js.map +0 -1
- package/dist/index.js +0 -105
- package/dist/index.js.map +0 -1
- package/dist/poll.js +0 -24
- package/dist/poll.js.map +0 -1
- package/dist/registry.js +0 -56
- package/dist/registry.js.map +0 -1
- package/dist/ui.js +0 -56
- package/dist/ui.js.map +0 -1
- package/src/skills/moa-oracle/SKILL.md +0 -35
- package/src/skills/moa-profiles/SKILL.md +0 -49
- package/src/skills/moa-review-pr/SKILL.md +0 -47
- package/src/skills/moa-run-task/SKILL.md +0 -44
- package/src/skills/moa-setup/SKILL.md +0 -60
- package/src/skills/moa-ship-issue/SKILL.md +0 -54
- package/src/skills/moa-triage-audit/SKILL.md +0 -47
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/commands/track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,OAAO,EAAa,MAAM,YAAY,CAAC;AAGhD,yEAAyE;AACzE,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,8DAA8D;IACvE,KAAK,EAAE,2BAA2B;IAClC,IAAI,EAAE;QACJ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE;QAC9C,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,oCAAoC,EAAE;KAC/D;IACD,QAAQ,EAAE,CAAC,WAAW,EAAE,4BAA4B,CAAC;IACrD,KAAK,CAAC,GAAG,CAAC,CAAO;QACf,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,IAAI;YAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACnE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrE,MAAM,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAC/J,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
|
package/dist/commands/whoami.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { api, API_URL, PROFILE } from '../client.js';
|
|
2
|
-
import { c } from '../ui.js';
|
|
3
|
-
/** Who am I right now — the active profile and the operator it acts as. */
|
|
4
|
-
export const whoamiCmd = {
|
|
5
|
-
name: 'whoami',
|
|
6
|
-
group: 'status',
|
|
7
|
-
summary: 'Show the active profile + the operator (GitHub login) it acts as.',
|
|
8
|
-
usage: 'moa whoami',
|
|
9
|
-
examples: ['moa whoami', 'MOA_PROFILE=fnlog0 moa whoami'],
|
|
10
|
-
async run() {
|
|
11
|
-
const s = (await api.setup());
|
|
12
|
-
console.log(`profile : ${c.green(PROFILE)}`);
|
|
13
|
-
console.log(`url : ${API_URL}`);
|
|
14
|
-
console.log(`operator : ${s.github?.login ? c.cyan('@' + s.github.login) : c.dim('(github not connected)')}`);
|
|
15
|
-
// The org a key maps to: comparing this across profiles surfaces a stale or
|
|
16
|
-
// cross-org key (the cause of work landing under the "wrong" operator).
|
|
17
|
-
if (s.operator?.orgId)
|
|
18
|
-
console.log(`org : ${c.dim(s.operator.orgId)}`);
|
|
19
|
-
console.log(`claude : ${s.claude?.connected ? c.green('connected') : c.dim('not connected')}`);
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=whoami.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC;AAG7B,2EAA2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAY;IAChC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,mEAAmE;IAC5E,KAAK,EAAE,YAAY;IACnB,QAAQ,EAAE,CAAC,YAAY,EAAE,+BAA+B,CAAC;IACzD,KAAK,CAAC,GAAG;QACP,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,CAI3B,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAC9G,4EAA4E;QAC5E,wEAAwE;QACxE,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;CACF,CAAC"}
|
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
import { api } from '../client.js';
|
|
2
|
-
import { c, statusColor, relTime, die } from '../ui.js';
|
|
3
|
-
import { flagStr, flagNum, hasFlag } from '../args.js';
|
|
4
|
-
import { pollRetry, sleep } from '../poll.js';
|
|
5
|
-
/** Trigger sub-actions: action → endpoint + which number field it takes. */
|
|
6
|
-
const TRIGGERS = {
|
|
7
|
-
solve: { path: 'issue-to-pr', numKey: 'issueNumber', noun: 'issue#', summary: 'Implement an issue → open a PR.' },
|
|
8
|
-
branch: { path: 'issue-to-branch', numKey: 'issueNumber', noun: 'issue#', summary: 'Solve an issue → push to a branch (no PR; re-runnable).' },
|
|
9
|
-
'open-pr': { path: 'open-pr', numKey: 'issueNumber', noun: 'issue#', summary: "Open (or reuse) a PR from an issue's branch (no agent)." },
|
|
10
|
-
triage: { path: 'triage', numKey: 'issueNumber', noun: 'issue#', summary: 'Categorize + label an issue.' },
|
|
11
|
-
review: { path: 'review-pr', numKey: 'prNumber', noun: 'pr#', summary: 'Review a PR (inline comments + verdict).' },
|
|
12
|
-
'review-fix': { path: 'review-fix', numKey: 'prNumber', noun: 'pr#', summary: 'Review a PR → fix the findings → re-verify → approve when clean.' },
|
|
13
|
-
address: { path: 'address-comments', numKey: 'prNumber', noun: 'pr#', summary: "Push fixes for a PR's review feedback." },
|
|
14
|
-
'fix-ci': { path: 'fix-ci', numKey: 'prNumber', noun: 'pr#', summary: 'Diagnose + fix failing CI on a PR.' },
|
|
15
|
-
merge: { path: 'auto-merge', numKey: 'prNumber', noun: 'pr#', summary: 'Merge a PR if approved + CI green. --wait parks until pending CI finishes, then merges.' },
|
|
16
|
-
};
|
|
17
|
-
const isTerminal = (s) => s === 'succeeded' || s === 'failed' || s === 'canceled';
|
|
18
|
-
const isParked = (s) => s === 'awaiting_approval';
|
|
19
|
-
/** Resolve a unique workflow run-id prefix against the run list. */
|
|
20
|
-
async function resolveWorkflowId(idOrPrefix) {
|
|
21
|
-
const { runs } = await api.workflows();
|
|
22
|
-
const matches = runs.filter((r) => r.id.startsWith(idOrPrefix));
|
|
23
|
-
if (matches.length === 1)
|
|
24
|
-
return matches[0].id;
|
|
25
|
-
if (matches.length > 1)
|
|
26
|
-
die(`ambiguous workflow id "${idOrPrefix}" — matches ${matches.map((r) => r.id.slice(0, 8)).join(', ')}`);
|
|
27
|
-
return idOrPrefix; // no match in the list — let the server answer (404 etc.)
|
|
28
|
-
}
|
|
29
|
-
function printRun(r) {
|
|
30
|
-
console.log(`${c.bold(r.type)} ${c.dim(r.repo + '#' + r.sourceNumber)} ${statusColor(r.status)}${r.verdict && r.verdict !== 'comment' ? ' ' + c.amber(r.verdict) : ''}${r.costUsd != null ? ' ' + c.dim('$' + r.costUsd.toFixed(4)) : ''}`);
|
|
31
|
-
if (r.prUrl)
|
|
32
|
-
console.log(` ${c.cyan(r.prUrl)}`);
|
|
33
|
-
else if (r.branch)
|
|
34
|
-
console.log(` ${c.dim('branch')} ${r.branch}`);
|
|
35
|
-
if (r.error)
|
|
36
|
-
console.log(` ${c.red(r.error)}`);
|
|
37
|
-
if (r.steps?.length)
|
|
38
|
-
console.log(' ' + c.dim(r.steps.join(' → ')));
|
|
39
|
-
if ((r.status === 'running' || r.status === 'queued') && r.updatedAt) {
|
|
40
|
-
const parts = [`active ${relTime(r.updatedAt)}`];
|
|
41
|
-
if (r.steps?.length)
|
|
42
|
-
parts.push(`${r.steps.length} step${r.steps.length === 1 ? '' : 's'}`);
|
|
43
|
-
console.log(` ${c.dim(parts.join(' · '))}`);
|
|
44
|
-
}
|
|
45
|
-
if (r.status === 'awaiting_approval') {
|
|
46
|
-
if (r.plan) {
|
|
47
|
-
console.log('');
|
|
48
|
-
console.log(r.plan);
|
|
49
|
-
console.log('');
|
|
50
|
-
}
|
|
51
|
-
const id = r.id.slice(0, 8);
|
|
52
|
-
console.log(c.amber(` → approve: moa wf approve ${id} [--instruction "…"]`));
|
|
53
|
-
console.log(c.dim(` → discard: moa wf cancel ${id}`));
|
|
54
|
-
}
|
|
55
|
-
if (r.type === 'review-pr' && r.status === 'succeeded' && r.verdict && r.verdict !== 'APPROVE') {
|
|
56
|
-
console.log(` ${c.dim(`→ run \`wf review-fix ${r.repo} ${r.sourceNumber}\` to fix findings and get approval`)}`);
|
|
57
|
-
}
|
|
58
|
-
if ((r.type === 'issue-to-pr' || r.type === 'issue-to-branch') && r.status === 'failed') {
|
|
59
|
-
console.log(` ${c.dim(`→ re-run with \`--instruction "…"\` to scope the agent (e.g. "focus on X, skip Y")`)}`);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async function watchRun(id) {
|
|
63
|
-
let last = '';
|
|
64
|
-
for (;;) {
|
|
65
|
-
const r = await pollRetry(() => api.workflow(id));
|
|
66
|
-
const step = r.steps?.[r.steps.length - 1] ?? r.status;
|
|
67
|
-
if (step !== last) {
|
|
68
|
-
console.log(`${c.dim('·')} ${step}`);
|
|
69
|
-
last = step;
|
|
70
|
-
}
|
|
71
|
-
if (isTerminal(r.status)) {
|
|
72
|
-
if (r.status !== 'succeeded')
|
|
73
|
-
process.exitCode = 1;
|
|
74
|
-
return printRun(r);
|
|
75
|
-
}
|
|
76
|
-
if (isParked(r.status)) {
|
|
77
|
-
return printRun(r);
|
|
78
|
-
}
|
|
79
|
-
await sleep(2500);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
async function waitBatch(ids) {
|
|
83
|
-
const resolved = await Promise.all(ids.map(resolveWorkflowId));
|
|
84
|
-
await Promise.all(resolved.map(async (id) => {
|
|
85
|
-
for (;;) {
|
|
86
|
-
const r = await pollRetry(() => api.workflow(id));
|
|
87
|
-
if (isTerminal(r.status)) {
|
|
88
|
-
if (r.status !== 'succeeded')
|
|
89
|
-
process.exitCode = 1;
|
|
90
|
-
printRun(r);
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
await sleep(2500);
|
|
94
|
-
}
|
|
95
|
-
}));
|
|
96
|
-
}
|
|
97
|
-
/** Which actions accept --base (branch off a non-default base) and --restart (fresh branch). */
|
|
98
|
-
const takesBase = (name) => name === 'solve' || name === 'branch' || name === 'open-pr';
|
|
99
|
-
const takesRestart = (name) => name === 'solve' || name === 'branch';
|
|
100
|
-
const takesInstruction = (name) => name === 'solve' || name === 'branch';
|
|
101
|
-
const takesGate = (name) => name === 'solve' || name === 'fix-ci';
|
|
102
|
-
const takesLabel = (name) => name === 'solve';
|
|
103
|
-
// Sub-action catalog entries (for help + the AI knowledge base).
|
|
104
|
-
const triggerMeta = Object.entries(TRIGGERS).map(([name, t]) => ({
|
|
105
|
-
name: `wf ${name}`,
|
|
106
|
-
group: 'workflows',
|
|
107
|
-
summary: t.summary,
|
|
108
|
-
usage: `moa wf ${name} <repo> <${t.noun}>${t.numKey === 'issueNumber' ? `[,${t.noun},…]` : ''}${takesLabel(name) ? ' [--label <label>]' : ''}${takesBase(name) ? ' [--base B]' : ''}${takesInstruction(name) ? ' [--instruction "…"]' : ''}${takesRestart(name) ? ' [--restart]' : ''}${takesGate(name) ? ' [--gate]' : ''} [--watch]`,
|
|
109
|
-
args: [
|
|
110
|
-
{ name: 'repo', required: true, desc: 'owner/repo' },
|
|
111
|
-
{ name: t.noun, required: t.numKey !== 'issueNumber' || !takesLabel(name), desc: t.numKey === 'issueNumber' ? 'issue number(s), comma-separated' : 'PR number' },
|
|
112
|
-
...(takesLabel(name) ? [{ name: '--label', desc: 'queue a run for every open issue in the repo carrying this label' }] : []),
|
|
113
|
-
...(takesBase(name) ? [{ name: '--base', desc: 'base branch (default: repo default)' }] : []),
|
|
114
|
-
...(takesInstruction(name) ? [{ name: '--instruction', desc: 'extra instruction for this run — use this to scope a big or ambiguous issue' }] : []),
|
|
115
|
-
...(takesRestart(name) ? [{ name: '--restart', desc: 'reset the branch off base instead of continuing it' }] : []),
|
|
116
|
-
...(takesGate(name) ? [{ name: '--gate', desc: 'plan first, park for approval, then execute (avoids committing to a costly run sight-unseen)' }] : []),
|
|
117
|
-
{ name: '--watch', desc: 'stream the step timeline until done' },
|
|
118
|
-
],
|
|
119
|
-
examples: [
|
|
120
|
-
`moa wf ${name} acme/app ${t.numKey === 'issueNumber' ? '42' : '7'} --watch`,
|
|
121
|
-
...(takesLabel(name) ? ['moa wf solve acme/app --label wave:1', 'moa wf solve acme/app 2,3,4,5'] : []),
|
|
122
|
-
...(takesGate(name) ? [`moa wf ${name} acme/app ${t.numKey === 'issueNumber' ? '42' : '7'} --gate --watch`] : []),
|
|
123
|
-
],
|
|
124
|
-
}));
|
|
125
|
-
export const wfCmd = {
|
|
126
|
-
name: 'wf',
|
|
127
|
-
group: 'workflows',
|
|
128
|
-
summary: 'Workflow runs: list, inspect, and trigger.',
|
|
129
|
-
usage: 'moa wf [list|pending|get <id>|cancel <id>|approve <id>|<action> <repo> <num>]',
|
|
130
|
-
subcommands: [
|
|
131
|
-
{
|
|
132
|
-
name: 'wf',
|
|
133
|
-
group: 'workflows',
|
|
134
|
-
summary: 'List workflow runs.',
|
|
135
|
-
usage: 'moa wf [list] [--limit N] [--json]',
|
|
136
|
-
args: [
|
|
137
|
-
{ name: '--limit', desc: 'max runs to show (default 30)' },
|
|
138
|
-
{ name: '--json', desc: 'print the raw API response as JSON' },
|
|
139
|
-
],
|
|
140
|
-
examples: ['moa wf', 'moa wf list --limit 10 --json'],
|
|
141
|
-
},
|
|
142
|
-
{ name: 'wf pending', group: 'workflows', summary: 'Open issues/PRs available to act on.', usage: 'moa wf pending', examples: ['moa wf pending'] },
|
|
143
|
-
{
|
|
144
|
-
name: 'wf get',
|
|
145
|
-
group: 'workflows',
|
|
146
|
-
summary: 'Show one run + step timeline.',
|
|
147
|
-
usage: 'moa wf get <id> [--watch] [--json]',
|
|
148
|
-
args: [
|
|
149
|
-
{ name: 'id', required: true, desc: 'run id' },
|
|
150
|
-
{ name: '--watch', desc: 'stream the step timeline until done' },
|
|
151
|
-
{ name: '--json', desc: 'print the raw API response as JSON' },
|
|
152
|
-
],
|
|
153
|
-
examples: ['moa wf get a1b2c3d4 --watch'],
|
|
154
|
-
},
|
|
155
|
-
{ name: 'wf cancel', group: 'workflows', summary: 'Cancel a run.', usage: 'moa wf cancel <id>', examples: ['moa wf cancel a1b2c3d4'] },
|
|
156
|
-
{
|
|
157
|
-
name: 'wf approve',
|
|
158
|
-
group: 'workflows',
|
|
159
|
-
summary: 'Approve a gated run (awaiting_approval) — resumes execute.',
|
|
160
|
-
usage: 'moa wf approve <id> [--instruction "…"]',
|
|
161
|
-
args: [
|
|
162
|
-
{ name: 'id', required: true, desc: 'run id' },
|
|
163
|
-
{ name: '--instruction', desc: 'optional steering for the execute phase' },
|
|
164
|
-
],
|
|
165
|
-
examples: ['moa wf approve a1b2c3d4', 'moa wf approve a1b2c3d4 --instruction "focus on the auth module only"'],
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
name: 'wf wait',
|
|
169
|
-
group: 'workflows',
|
|
170
|
-
summary: 'Block until a batch of runs finishes; exit non-zero if any failed.',
|
|
171
|
-
usage: 'moa wf wait <id>[,id,…]',
|
|
172
|
-
args: [{ name: 'id', required: true, desc: 'run id(s), space- or comma-separated' }],
|
|
173
|
-
examples: ['moa wf wait a1b2c3d4 e5f6a7b8', 'moa wf wait a1b2,e5f6'],
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
name: 'wf report-issue',
|
|
177
|
-
group: 'workflows',
|
|
178
|
-
summary: 'Audit a repo → file one or more issues (the agent decides).',
|
|
179
|
-
usage: 'moa wf report-issue <repo> [--instruction "…"] [--watch]',
|
|
180
|
-
args: [
|
|
181
|
-
{ name: 'repo', required: true, desc: 'owner/repo' },
|
|
182
|
-
{ name: '--instruction', desc: 'what to look for / report (e.g. "audit error handling")' },
|
|
183
|
-
{ name: '--watch', desc: 'stream the step timeline until done' },
|
|
184
|
-
],
|
|
185
|
-
examples: ['moa wf report-issue acme/app --instruction "find missing tests" --watch'],
|
|
186
|
-
},
|
|
187
|
-
...triggerMeta,
|
|
188
|
-
],
|
|
189
|
-
async run(a) {
|
|
190
|
-
const sub = a.pos[0];
|
|
191
|
-
if (!sub || sub === 'list') {
|
|
192
|
-
const limit = flagNum(a, 'limit') ?? 30;
|
|
193
|
-
const { runs: allRuns, queue } = await api.workflows(limit);
|
|
194
|
-
const runs = allRuns.slice(0, limit);
|
|
195
|
-
if (hasFlag(a, 'json'))
|
|
196
|
-
return console.log(JSON.stringify({ runs, queue }, null, 2));
|
|
197
|
-
if (queue.running > 0 || queue.queued > 0)
|
|
198
|
-
console.log(c.dim(`running ${queue.running}/${queue.limit} · queued ${queue.queued}`));
|
|
199
|
-
if (!runs.length)
|
|
200
|
-
return console.log(c.dim('no runs'));
|
|
201
|
-
runs.forEach((r) => console.log(`${c.dim(r.id.slice(0, 8))} ${statusColor(r.status.padEnd(9))} ${c.dim(relTime(r.createdAt).padEnd(7))} ${c.bold(r.type.padEnd(15))} ${r.repo}#${r.sourceNumber}`));
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
if (sub === 'pending') {
|
|
205
|
-
const p = await api.pending();
|
|
206
|
-
if (!p.connected)
|
|
207
|
-
return console.log(c.red('GitHub not connected'));
|
|
208
|
-
if (!p.items.length)
|
|
209
|
-
return console.log(c.dim('nothing pending ✓'));
|
|
210
|
-
p.items.forEach((it) => {
|
|
211
|
-
console.log(`${it.kind === 'issue' ? c.green('issue') : c.cyan('pull ')} ${it.repo}#${it.number} ${c.dim(it.title)}`);
|
|
212
|
-
it.conflictWarnings?.forEach((w) => console.log(` ${c.amber(w)}`));
|
|
213
|
-
});
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
if (sub === 'get') {
|
|
217
|
-
const raw = a.pos[1] ?? die('usage: moa wf get <id> [--watch] [--json]');
|
|
218
|
-
const id = await resolveWorkflowId(raw);
|
|
219
|
-
if (hasFlag(a, 'watch'))
|
|
220
|
-
return watchRun(id);
|
|
221
|
-
const r = await api.workflow(id);
|
|
222
|
-
return hasFlag(a, 'json') ? console.log(JSON.stringify(r, null, 2)) : printRun(r);
|
|
223
|
-
}
|
|
224
|
-
if (sub === 'cancel') {
|
|
225
|
-
const raw = a.pos[1] ?? die('usage: moa wf cancel <id>');
|
|
226
|
-
const id = await resolveWorkflowId(raw);
|
|
227
|
-
return printRun(await api.cancelWorkflow(id));
|
|
228
|
-
}
|
|
229
|
-
if (sub === 'approve') {
|
|
230
|
-
const raw = a.pos[1] ?? die('usage: moa wf approve <id> [--instruction "…"]');
|
|
231
|
-
const id = await resolveWorkflowId(raw);
|
|
232
|
-
const instruction = flagStr(a, 'instruction');
|
|
233
|
-
return printRun(await api.approveWorkflow(id, instruction ? { instruction } : undefined));
|
|
234
|
-
}
|
|
235
|
-
if (sub === 'wait') {
|
|
236
|
-
const rawIds = a.pos.slice(1);
|
|
237
|
-
if (!rawIds.length)
|
|
238
|
-
die('usage: moa wf wait <id>[,id,…]');
|
|
239
|
-
const ids = rawIds.flatMap((s) => s.split(',').map((x) => x.trim())).filter(Boolean);
|
|
240
|
-
return waitBatch(ids);
|
|
241
|
-
}
|
|
242
|
-
// report-issue is repo-only (no issue/PR number) — the agent decides what to file.
|
|
243
|
-
if (sub === 'report-issue') {
|
|
244
|
-
const repo = a.pos[1] ?? die('usage: moa wf report-issue <owner/repo> [--instruction "…"]');
|
|
245
|
-
if (!repo.includes('/'))
|
|
246
|
-
die('usage: moa wf report-issue <owner/repo> [--instruction "…"]');
|
|
247
|
-
const body = { repo };
|
|
248
|
-
const instruction = flagStr(a, 'instruction');
|
|
249
|
-
if (instruction)
|
|
250
|
-
body.instruction = instruction;
|
|
251
|
-
const run = await api.trigger('report-issue', body);
|
|
252
|
-
console.log(c.green(`started report-issue → ${run.id.slice(0, 8)}`));
|
|
253
|
-
if (hasFlag(a, 'watch'))
|
|
254
|
-
await watchRun(run.id);
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
const trig = TRIGGERS[sub];
|
|
258
|
-
if (!trig)
|
|
259
|
-
die(`unknown workflow command: ${sub}`);
|
|
260
|
-
const repo = a.pos[1] ?? die(`usage: moa wf ${sub} <owner/repo> <${trig.noun}>`);
|
|
261
|
-
if (!repo.includes('/'))
|
|
262
|
-
die(`usage: moa wf ${sub} <owner/repo> <${trig.noun}>`);
|
|
263
|
-
// Resolve the set of issue/PR numbers to act on.
|
|
264
|
-
let nums;
|
|
265
|
-
const label = takesLabel(sub) ? flagStr(a, 'label') : undefined;
|
|
266
|
-
if (label) {
|
|
267
|
-
const list = await api.ghIssuesByLabel(repo, label);
|
|
268
|
-
if (!list.connected)
|
|
269
|
-
die('GitHub not connected — run `moa config set token <token>`');
|
|
270
|
-
nums = list.items.map((it) => it.number);
|
|
271
|
-
if (!nums.length)
|
|
272
|
-
die(`no open issues with label "${label}" in ${repo}`);
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
const raw = a.pos[2] ?? die(`usage: moa wf ${sub} <owner/repo> <${trig.noun}>`);
|
|
276
|
-
nums = raw.split(',').map((s) => Number(s.trim())).filter((n) => Number.isFinite(n) && n > 0);
|
|
277
|
-
if (!nums.length)
|
|
278
|
-
die(`usage: moa wf ${sub} <owner/repo> <${trig.noun}>`);
|
|
279
|
-
}
|
|
280
|
-
const base = flagStr(a, 'base');
|
|
281
|
-
const instruction = flagStr(a, 'instruction');
|
|
282
|
-
const watch = hasFlag(a, 'watch');
|
|
283
|
-
const multi = nums.length > 1;
|
|
284
|
-
for (const num of nums) {
|
|
285
|
-
const body = { repo, [trig.numKey]: num };
|
|
286
|
-
if (takesBase(sub) && base)
|
|
287
|
-
body.baseBranch = base;
|
|
288
|
-
if (takesInstruction(sub) && instruction)
|
|
289
|
-
body.instruction = instruction;
|
|
290
|
-
if (takesRestart(sub) && hasFlag(a, 'restart'))
|
|
291
|
-
body.restart = true;
|
|
292
|
-
if (takesGate(sub) && hasFlag(a, 'gate'))
|
|
293
|
-
body.gate = true;
|
|
294
|
-
// merge --wait: park until pending CI finishes, then merge (vs failing on "not green").
|
|
295
|
-
if (sub === 'merge' && hasFlag(a, 'wait'))
|
|
296
|
-
body.waitForCi = true;
|
|
297
|
-
const run = await api.trigger(trig.path, body);
|
|
298
|
-
console.log(c.green(`started ${sub}${multi ? ` #${num}` : ''} → ${run.id.slice(0, 8)}`));
|
|
299
|
-
if (watch)
|
|
300
|
-
await watchRun(run.id);
|
|
301
|
-
}
|
|
302
|
-
},
|
|
303
|
-
};
|
|
304
|
-
//# sourceMappingURL=workflows.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/commands/workflows.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, mkdirSync, chmodSync } from 'node:fs';
|
|
2
|
-
import { homedir } from 'node:os';
|
|
3
|
-
import { join, dirname } from 'node:path';
|
|
4
|
-
import { parse } from './args.js';
|
|
5
|
-
/** Persisted CLI config (overridden by env vars). */
|
|
6
|
-
export const CONFIG_PATH = process.env.MOA_CONFIG || join(homedir(), '.moa', 'cli.json');
|
|
7
|
-
export const DEFAULT_URL = 'https://api.fnmoa.com';
|
|
8
|
-
export function readConfig() {
|
|
9
|
-
try {
|
|
10
|
-
return JSON.parse(readFileSync(CONFIG_PATH, 'utf8'));
|
|
11
|
-
}
|
|
12
|
-
catch {
|
|
13
|
-
return {};
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export function writeConfig(cfg) {
|
|
17
|
-
// The file holds the API key — owner-only perms on both dir and file.
|
|
18
|
-
mkdirSync(dirname(CONFIG_PATH), { recursive: true, mode: 0o700 });
|
|
19
|
-
writeFileSync(CONFIG_PATH, `${JSON.stringify(cfg, null, 2)}\n`, { mode: 0o600 });
|
|
20
|
-
try {
|
|
21
|
-
chmodSync(CONFIG_PATH, 0o600); // mode above only applies on create; fix pre-existing files
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
/* best effort */
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/** Mask a secret for display: first 8 chars + ellipsis. */
|
|
28
|
-
export const mask = (s) => (s.length > 8 ? `${s.slice(0, 8)}…` : s);
|
|
29
|
-
/** A global `--profile <name>` / `--profile=<name>` flag, read straight from argv
|
|
30
|
-
* (works even though profile resolution happens at import time). Highest precedence. */
|
|
31
|
-
function profileFlag() {
|
|
32
|
-
const v = parse(process.argv.slice(2)).flags.profile;
|
|
33
|
-
return typeof v === 'string' ? v.trim() || undefined : undefined;
|
|
34
|
-
}
|
|
35
|
-
/** The active profile name: `--profile` → `$MOA_PROFILE` → config.current → `default`. */
|
|
36
|
-
export function currentProfileName(cfg = readConfig()) {
|
|
37
|
-
return profileFlag() || process.env.MOA_PROFILE?.trim() || cfg.current || 'default';
|
|
38
|
-
}
|
|
39
|
-
/** Every named profile. */
|
|
40
|
-
export function listProfiles(cfg = readConfig()) {
|
|
41
|
-
return { ...(cfg.profiles ?? {}) };
|
|
42
|
-
}
|
|
43
|
-
/** Resolve the effective target for the active profile.
|
|
44
|
-
* Precedence per field: env var → the profile → default. */
|
|
45
|
-
export function resolveProfile(cfg = readConfig()) {
|
|
46
|
-
const name = currentProfileName(cfg);
|
|
47
|
-
const p = cfg.profiles?.[name] ?? {};
|
|
48
|
-
const apiUrl = (process.env.MOA_API_URL || p.apiUrl || DEFAULT_URL).replace(/\/$/, '');
|
|
49
|
-
const apiKey = process.env.MOA_API_KEY || p.apiKey || undefined;
|
|
50
|
-
return { name, apiUrl, apiKey };
|
|
51
|
-
}
|
|
52
|
-
/** Update one field on a named profile (creating it if absent) and persist. */
|
|
53
|
-
export function setProfileField(name, field, value) {
|
|
54
|
-
const cfg = readConfig();
|
|
55
|
-
cfg.profiles = cfg.profiles ?? {};
|
|
56
|
-
cfg.profiles[name] = { ...(cfg.profiles[name] ?? {}), [field]: value };
|
|
57
|
-
if (!cfg.current)
|
|
58
|
-
cfg.current = name;
|
|
59
|
-
writeConfig(cfg);
|
|
60
|
-
}
|
|
61
|
-
/** Persist a freshly-bootstrapped key onto the active profile. */
|
|
62
|
-
export function saveKeyToCurrent(apiKey) {
|
|
63
|
-
setProfileField(currentProfileName(), 'apiKey', apiKey);
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import { dirname, join } from 'node:path';
|
|
5
|
-
import { parse } from './args.js';
|
|
6
|
-
import { c, die } from './ui.js';
|
|
7
|
-
import { API_URL, PROFILE } from './client.js';
|
|
8
|
-
import { CONFIG_PATH } from './config.js';
|
|
9
|
-
import { catalog, findCommand } from './registry.js';
|
|
10
|
-
import { runLogin } from './commands/login.js';
|
|
11
|
-
/** This package's version, read from its own package.json (one dir up from dist/). */
|
|
12
|
-
function cliVersion() {
|
|
13
|
-
try {
|
|
14
|
-
const pkg = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
|
|
15
|
-
return JSON.parse(readFileSync(pkg, 'utf8')).version ?? 'unknown';
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
return 'unknown';
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
// Don't crash when output is piped to `head`/`grep` and the reader closes early.
|
|
22
|
-
// (Throwing inside an 'error' listener would crash with an unhandled exception.)
|
|
23
|
-
process.stdout.on('error', (e) => {
|
|
24
|
-
if (e.code === 'EPIPE')
|
|
25
|
-
process.exit(0);
|
|
26
|
-
console.error(`stdout error: ${e.message}`);
|
|
27
|
-
process.exit(1);
|
|
28
|
-
});
|
|
29
|
-
const GROUP_ORDER = ['status', 'tasks', 'workflows', 'oracle', 'github', 'config', 'skills'];
|
|
30
|
-
const GROUP_TITLE = {
|
|
31
|
-
status: 'Status',
|
|
32
|
-
tasks: 'Tasks',
|
|
33
|
-
workflows: 'Workflows',
|
|
34
|
-
oracle: 'Oracle',
|
|
35
|
-
github: 'GitHub',
|
|
36
|
-
config: 'Config',
|
|
37
|
-
skills: 'Skills',
|
|
38
|
-
};
|
|
39
|
-
function help(asJson) {
|
|
40
|
-
const cmds = catalog();
|
|
41
|
-
if (asJson) {
|
|
42
|
-
// The AI knowledge base: how to connect + every command with usage/args/examples.
|
|
43
|
-
console.log(JSON.stringify({
|
|
44
|
-
api: API_URL,
|
|
45
|
-
auth: 'Requests use the x-api-key header. If MOA_API_KEY is unset, the CLI auto-bootstraps the single default operator on first call and persists the key to the config file for reuse. On a control-plane-enrolled workspace bootstrap is gated — set MOA_API_KEY or `moa config set key <key>`.',
|
|
46
|
-
profile: PROFILE,
|
|
47
|
-
globalFlags: {
|
|
48
|
-
'--profile <name>': 'Use this config profile for one command (highest precedence: --profile → $MOA_PROFILE → config.current → "default"). e.g. `moa whoami --profile fnmoa`',
|
|
49
|
-
},
|
|
50
|
-
env: {
|
|
51
|
-
MOA_PROFILE: 'Active config profile (multi-user/org); else config.current, else "default". See `moa config`.',
|
|
52
|
-
MOA_API_URL: 'Server base URL (overrides the profile; default http://localhost:3000)',
|
|
53
|
-
MOA_API_KEY: 'API key (overrides the profile); if unset, auto-bootstrapped and saved to the active profile',
|
|
54
|
-
},
|
|
55
|
-
notes: [
|
|
56
|
-
'Add --watch to run/trigger/get commands to stream the live timeline until the run finishes; a watch exits 1 if the run ends failed/canceled.',
|
|
57
|
-
'Data commands (tasks, task get, wf list, wf get, oracle history, status) take --json for the raw API response.',
|
|
58
|
-
'Lists take --limit N (default 30). `moa task <id>` accepts a unique id prefix.',
|
|
59
|
-
'Repos are "owner/repo". Workflow actions take an issue or PR number (see each command\'s args).',
|
|
60
|
-
'Each command entry includes usage, documented args, and copy-pasteable examples.',
|
|
61
|
-
],
|
|
62
|
-
commands: cmds,
|
|
63
|
-
}, null, 2));
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
console.log(`${c.bold('moa')} — Moa operator CLI ${c.dim(`(${PROFILE} · ${API_URL})`)}\n`);
|
|
67
|
-
const width = Math.max(...cmds.map((m) => m.usage.length));
|
|
68
|
-
for (const group of GROUP_ORDER) {
|
|
69
|
-
const inGroup = cmds.filter((m) => m.group === group);
|
|
70
|
-
if (!inGroup.length)
|
|
71
|
-
continue;
|
|
72
|
-
console.log(c.bold(GROUP_TITLE[group] ?? group));
|
|
73
|
-
for (const m of inGroup)
|
|
74
|
-
console.log(` ${m.usage.padEnd(width)} ${c.dim(m.summary)}`);
|
|
75
|
-
console.log('');
|
|
76
|
-
}
|
|
77
|
-
console.log(c.dim('moa help --json → machine-readable command catalog (for agents)'));
|
|
78
|
-
console.log(c.dim('Data commands take --json; lists take --limit N. Watches exit 1 on failure.'));
|
|
79
|
-
console.log(c.dim('Profiles (multi-user/org): moa config use <name> · moa config add <name> --url <url> --key <key> · $MOA_PROFILE'));
|
|
80
|
-
console.log(c.dim('Env: MOA_API_URL, MOA_API_KEY override the active profile.'));
|
|
81
|
-
}
|
|
82
|
-
async function main() {
|
|
83
|
-
const { pos, flags } = parse(process.argv.slice(2));
|
|
84
|
-
const name = pos[0];
|
|
85
|
-
// `moa --version` / `-v` / `version`: print just the version (parser treats
|
|
86
|
-
// `--version` as a boolean flag and `-v` as a positional, so check both).
|
|
87
|
-
if (flags.version || name === 'version' || name === '-v') {
|
|
88
|
-
console.log(cliVersion());
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
// First run (no config yet, interactive terminal): onboard instead of dumping help.
|
|
92
|
-
if (!name && !flags.json && process.stdin.isTTY && !existsSync(CONFIG_PATH) && !process.env.MOA_API_KEY) {
|
|
93
|
-
return runLogin({ pos: [], flags });
|
|
94
|
-
}
|
|
95
|
-
if (!name || name === 'help' || name === '-h' || flags.help) {
|
|
96
|
-
return help(!!flags.json);
|
|
97
|
-
}
|
|
98
|
-
const cmd = findCommand(name);
|
|
99
|
-
if (!cmd)
|
|
100
|
-
die(`unknown command: ${name} (try: moa help)`);
|
|
101
|
-
// Strip the command name; the command sees its own positionals + flags.
|
|
102
|
-
await cmd.run({ pos: pos.slice(1), flags });
|
|
103
|
-
}
|
|
104
|
-
main().catch((e) => die(e instanceof Error ? e.message : String(e)));
|
|
105
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/poll.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
// Watch-loop helpers: a transient network blip must not kill an hours-long watch.
|
|
2
|
-
import { c } from './ui.js';
|
|
3
|
-
export const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
4
|
-
const MAX_RETRIES = 5;
|
|
5
|
-
const MAX_BACKOFF_MS = 15_000;
|
|
6
|
-
/** Run one poll, retrying failures with exponential backoff (1s → cap 15s).
|
|
7
|
-
* Backoff is local to each call, so it resets on every successful poll. */
|
|
8
|
-
export async function pollRetry(fn) {
|
|
9
|
-
let delay = 1000;
|
|
10
|
-
for (let attempt = 0;; attempt++) {
|
|
11
|
-
try {
|
|
12
|
-
return await fn();
|
|
13
|
-
}
|
|
14
|
-
catch (e) {
|
|
15
|
-
if (attempt >= MAX_RETRIES)
|
|
16
|
-
throw e;
|
|
17
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
18
|
-
console.error(c.dim(`· poll failed (${msg}) — retrying in ${Math.round(delay / 1000)}s`));
|
|
19
|
-
await sleep(delay);
|
|
20
|
-
delay = Math.min(delay * 2, MAX_BACKOFF_MS);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=poll.js.map
|
package/dist/poll.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC;AAE5B,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAE1F,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B;4EAC4E;AAC5E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,EAAoB;IACrD,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,OAAO,IAAI,WAAW;gBAAE,MAAM,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,GAAG,mBAAmB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1F,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC"}
|