@fnmoa/cli 0.2.5 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +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 -94
- 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 -156
- 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
package/dist/commands/repos.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { api, ApiError } from '../client.js';
|
|
2
|
-
import { c, die } from '../ui.js';
|
|
3
|
-
import { hasFlag } from '../args.js';
|
|
4
|
-
/** Colored badge for the operator's live GitHub capability on a repo. */
|
|
5
|
-
function permBadge(p) {
|
|
6
|
-
if (p === 'write')
|
|
7
|
-
return c.green('write');
|
|
8
|
-
if (p === 'read')
|
|
9
|
-
return c.yellow('read');
|
|
10
|
-
return c.dim('none');
|
|
11
|
-
}
|
|
12
|
-
/** Turn a write-path API error into a clean `die()` message: an actionable hint
|
|
13
|
-
* for the 403 write-gate, else the server's message (e.g. a 400 for a malformed
|
|
14
|
-
* `owner/name`). Non-API errors re-throw to the global handler. */
|
|
15
|
-
function explain(e) {
|
|
16
|
-
if (e instanceof ApiError) {
|
|
17
|
-
if (e.status === 403)
|
|
18
|
-
die('only an org owner/admin can change the repo allowlist — ' +
|
|
19
|
-
'ask an admin, or add it in the dashboard (Settings → Repositories).');
|
|
20
|
-
die(e.message);
|
|
21
|
-
}
|
|
22
|
-
throw e;
|
|
23
|
-
}
|
|
24
|
-
async function list(a) {
|
|
25
|
-
const { repos } = await api.repos();
|
|
26
|
-
if (hasFlag(a, 'json'))
|
|
27
|
-
return console.log(JSON.stringify(repos, null, 2));
|
|
28
|
-
if (!repos.length)
|
|
29
|
-
return console.log(c.dim(' (allowlist empty — no repo may run workflows; `moa repo add <owner/name>`)'));
|
|
30
|
-
for (const r of repos)
|
|
31
|
-
console.log(` ${r.repo} ${permBadge(r.permission)}`);
|
|
32
|
-
}
|
|
33
|
-
export const repoCmd = {
|
|
34
|
-
name: 'repo',
|
|
35
|
-
group: 'github',
|
|
36
|
-
summary: "View or manage the org's repo allowlist (the deny-all gate for all workflows).",
|
|
37
|
-
usage: 'moa repo [ls] | add <owner/name> | rm <owner/name>',
|
|
38
|
-
args: [
|
|
39
|
-
{ name: 'action', desc: 'ls (default) | add | rm' },
|
|
40
|
-
{ name: 'repo', desc: 'owner/name (for add/rm)' },
|
|
41
|
-
{ name: '--json', desc: 'print the allowlist as JSON (ls)' },
|
|
42
|
-
],
|
|
43
|
-
examples: ['moa repo', 'moa repo add fnLog0/moa-demo', 'moa repo rm fnLog0/moa-demo'],
|
|
44
|
-
subcommands: [
|
|
45
|
-
{ name: 'repo ls', group: 'github', summary: "List the org's repo allowlist (+ your write/read badge).", usage: 'moa repo [ls] [--json]' },
|
|
46
|
-
{ name: 'repo add', group: 'github', summary: 'Add a repo to the allowlist (owner/admin).', usage: 'moa repo add <owner/name>' },
|
|
47
|
-
{ name: 'repo rm', group: 'github', summary: 'Remove a repo from the allowlist (owner/admin).', usage: 'moa repo rm <owner/name>' },
|
|
48
|
-
],
|
|
49
|
-
async run(a) {
|
|
50
|
-
const action = a.pos[0] ?? 'ls';
|
|
51
|
-
if (action === 'ls')
|
|
52
|
-
return list(a);
|
|
53
|
-
if (action === 'add' || action === 'rm') {
|
|
54
|
-
const repo = a.pos[1];
|
|
55
|
-
if (!repo)
|
|
56
|
-
die(`usage: moa repo ${action} <owner/name>`);
|
|
57
|
-
try {
|
|
58
|
-
const { repos } = action === 'add' ? await api.addRepo(repo) : await api.removeRepo(repo);
|
|
59
|
-
const verb = action === 'add' ? 'added' : 'removed';
|
|
60
|
-
console.log(`${c.green('✓')} ${verb} ${c.bold(repo)} ${c.dim(`(${repos.length} repo${repos.length === 1 ? '' : 's'} allowed)`)}`);
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
explain(e);
|
|
64
|
-
}
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
die('usage: moa repo [ls] | add <owner/name> | rm <owner/name>');
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
|
-
//# sourceMappingURL=repos.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repos.js","sourceRoot":"","sources":["../../src/commands/repos.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/skills.js
DELETED
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import { readdirSync, readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync, statSync } from 'node:fs';
|
|
2
|
-
import { fileURLToPath } from 'node:url';
|
|
3
|
-
import { dirname, join } from 'node:path';
|
|
4
|
-
import { homedir } from 'node:os';
|
|
5
|
-
import { c, die } from '../ui.js';
|
|
6
|
-
import { flagStr, hasFlag } from '../args.js';
|
|
7
|
-
/** Walk up from this module to the package root (the dir with package.json). */
|
|
8
|
-
function pkgRoot() {
|
|
9
|
-
let dir = dirname(fileURLToPath(import.meta.url));
|
|
10
|
-
for (let i = 0; i < 8; i++) {
|
|
11
|
-
if (existsSync(join(dir, 'package.json')))
|
|
12
|
-
return dir;
|
|
13
|
-
const up = dirname(dir);
|
|
14
|
-
if (up === dir)
|
|
15
|
-
break;
|
|
16
|
-
dir = up;
|
|
17
|
-
}
|
|
18
|
-
return dir;
|
|
19
|
-
}
|
|
20
|
-
/** The bundled skills directory — shipped at <pkg>/src/skills (see package.json `files`). */
|
|
21
|
-
function skillsDir() {
|
|
22
|
-
return join(pkgRoot(), 'src', 'skills');
|
|
23
|
-
}
|
|
24
|
-
/** Pull `name` and `description` out of a SKILL.md YAML frontmatter block
|
|
25
|
-
* (handles both single-line and folded `>-` descriptions). */
|
|
26
|
-
function frontmatter(md) {
|
|
27
|
-
const fm = md.match(/^---\s*\n([\s\S]*?)\n---/)?.[1] ?? '';
|
|
28
|
-
let name = '';
|
|
29
|
-
const descParts = [];
|
|
30
|
-
let inDesc = false;
|
|
31
|
-
for (const line of fm.split('\n')) {
|
|
32
|
-
const kv = line.match(/^(\w+):\s?(.*)$/);
|
|
33
|
-
if (kv) {
|
|
34
|
-
inDesc = false;
|
|
35
|
-
if (kv[1] === 'name')
|
|
36
|
-
name = kv[2].trim();
|
|
37
|
-
else if (kv[1] === 'description') {
|
|
38
|
-
const v = kv[2].trim();
|
|
39
|
-
if (v && !['>', '>-', '|', '|-'].includes(v))
|
|
40
|
-
descParts.push(v);
|
|
41
|
-
inDesc = true;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
else if (inDesc && line.trim()) {
|
|
45
|
-
descParts.push(line.trim());
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return { name, description: descParts.join(' ').replace(/\s+/g, ' ').trim() };
|
|
49
|
-
}
|
|
50
|
-
/** Markdown body with the YAML frontmatter stripped. */
|
|
51
|
-
function skillBody(md) {
|
|
52
|
-
return md.replace(/^---\s*\n[\s\S]*?\n---\s*\n?/, '').trim() + '\n';
|
|
53
|
-
}
|
|
54
|
-
/** One-line summary for the list view: the description up to its first sentence,
|
|
55
|
-
* capped so the table stays readable. Full text is in `moa skills show`. */
|
|
56
|
-
function summarize(desc) {
|
|
57
|
-
const firstSentence = desc.split(/(?<=\.)\s/)[0] ?? desc;
|
|
58
|
-
const max = 96;
|
|
59
|
-
return firstSentence.length > max ? firstSentence.slice(0, max - 1).trimEnd() + '…' : firstSentence;
|
|
60
|
-
}
|
|
61
|
-
function listSkills() {
|
|
62
|
-
const root = skillsDir();
|
|
63
|
-
if (!existsSync(root))
|
|
64
|
-
return [];
|
|
65
|
-
const out = [];
|
|
66
|
-
for (const slug of readdirSync(root).sort()) {
|
|
67
|
-
const dir = join(root, slug);
|
|
68
|
-
const md = join(dir, 'SKILL.md');
|
|
69
|
-
if (!statSync(dir).isDirectory() || !existsSync(md))
|
|
70
|
-
continue;
|
|
71
|
-
const { name, description } = frontmatter(readFileSync(md, 'utf8'));
|
|
72
|
-
out.push({ slug, name: name || slug, description, dir });
|
|
73
|
-
}
|
|
74
|
-
return out;
|
|
75
|
-
}
|
|
76
|
-
/** Recursively copy a skill folder into <dest>. */
|
|
77
|
-
function copyDir(src, dest) {
|
|
78
|
-
mkdirSync(dest, { recursive: true });
|
|
79
|
-
for (const entry of readdirSync(src)) {
|
|
80
|
-
const s = join(src, entry);
|
|
81
|
-
const d = join(dest, entry);
|
|
82
|
-
if (statSync(s).isDirectory())
|
|
83
|
-
copyDir(s, d);
|
|
84
|
-
else
|
|
85
|
-
copyFileSync(s, d);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
function toolFor(name, dirOverride) {
|
|
89
|
-
switch (name) {
|
|
90
|
-
case 'claude': {
|
|
91
|
-
// Native Claude Code skills: a folder with SKILL.md (+ any sibling files).
|
|
92
|
-
const base = dirOverride || join(homedir(), '.claude', 'skills');
|
|
93
|
-
return {
|
|
94
|
-
base,
|
|
95
|
-
dest: (s) => join(base, s.slug),
|
|
96
|
-
write(s) {
|
|
97
|
-
const dest = join(base, s.slug);
|
|
98
|
-
copyDir(s.dir, dest);
|
|
99
|
-
return dest;
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
case 'cursor': {
|
|
104
|
-
// Cursor project rules: <project>/.cursor/rules/<slug>.mdc with rule frontmatter.
|
|
105
|
-
const base = dirOverride || join(process.cwd(), '.cursor', 'rules');
|
|
106
|
-
return {
|
|
107
|
-
base,
|
|
108
|
-
dest: (s) => join(base, `${s.slug}.mdc`),
|
|
109
|
-
write(s, md) {
|
|
110
|
-
mkdirSync(base, { recursive: true });
|
|
111
|
-
const dest = join(base, `${s.slug}.mdc`);
|
|
112
|
-
const content = `---\ndescription: ${s.description}\nglobs:\nalwaysApply: false\n---\n\n${skillBody(md)}`;
|
|
113
|
-
writeFileSync(dest, content);
|
|
114
|
-
return dest;
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
case 'codex': {
|
|
119
|
-
// Codex custom prompts: $CODEX_HOME/prompts/<slug>.md → invokable as /<slug>.
|
|
120
|
-
const codexHome = process.env.CODEX_HOME || join(homedir(), '.codex');
|
|
121
|
-
const base = dirOverride || join(codexHome, 'prompts');
|
|
122
|
-
return {
|
|
123
|
-
base,
|
|
124
|
-
dest: (s) => join(base, `${s.slug}.md`),
|
|
125
|
-
write(s, md) {
|
|
126
|
-
mkdirSync(base, { recursive: true });
|
|
127
|
-
const dest = join(base, `${s.slug}.md`);
|
|
128
|
-
const content = `# ${s.name}\n\n${s.description}\n\n${skillBody(md)}`;
|
|
129
|
-
writeFileSync(dest, content);
|
|
130
|
-
return dest;
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
default:
|
|
135
|
-
return die(`unknown --tool "${name}" (expected: claude, cursor, codex, or all)`);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
const ALL_TOOLS = ['claude', 'cursor', 'codex'];
|
|
139
|
-
const RELOAD_HINT = {
|
|
140
|
-
claude: 'Restart Claude Code (or reload skills) to pick them up.',
|
|
141
|
-
cursor: 'Cursor loads .cursor/rules automatically; reopen the project if needed.',
|
|
142
|
-
codex: 'In Codex, run the skill as a slash command, e.g. /moa-setup.',
|
|
143
|
-
};
|
|
144
|
-
export const skillsCmd = {
|
|
145
|
-
name: 'skills',
|
|
146
|
-
group: 'skills',
|
|
147
|
-
summary: 'List the bundled Moa skills, show one, or install them for Claude/Cursor/Codex.',
|
|
148
|
-
usage: 'moa skills | moa skills show <name> | moa skills install [name] [--tool claude|cursor|codex|all] [--dir <path>] [--force]',
|
|
149
|
-
args: [
|
|
150
|
-
{ name: '--tool', desc: 'target tool: claude (default), cursor, codex, or all (comma-separated ok)' },
|
|
151
|
-
{ name: '--dir', desc: 'override the install directory (single --tool only)' },
|
|
152
|
-
{ name: '--force', desc: 'overwrite an existing skill of the same name' },
|
|
153
|
-
],
|
|
154
|
-
subcommands: [
|
|
155
|
-
{ name: 'skills', group: 'skills', summary: 'List the bundled skills.', usage: 'moa skills' },
|
|
156
|
-
{ name: 'skills show', group: 'skills', summary: "Print a skill's SKILL.md.", usage: 'moa skills show <name>' },
|
|
157
|
-
{
|
|
158
|
-
name: 'skills install',
|
|
159
|
-
group: 'skills',
|
|
160
|
-
summary: 'Install skills for Claude/Cursor/Codex. No name = all skills.',
|
|
161
|
-
usage: 'moa skills install [name] [--tool claude|cursor|codex|all] [--dir <path>] [--force]',
|
|
162
|
-
},
|
|
163
|
-
],
|
|
164
|
-
async run(a) {
|
|
165
|
-
const sub = a.pos[0];
|
|
166
|
-
const skills = listSkills();
|
|
167
|
-
// List (default).
|
|
168
|
-
if (!sub || sub === 'list') {
|
|
169
|
-
if (!skills.length)
|
|
170
|
-
return console.log(c.dim('no bundled skills found'));
|
|
171
|
-
const width = Math.max(...skills.map((s) => s.slug.length));
|
|
172
|
-
console.log(c.bold('Bundled Moa skills') + c.dim(` (${skills.length})`));
|
|
173
|
-
for (const s of skills)
|
|
174
|
-
console.log(` ${c.cyan(s.slug.padEnd(width))} ${c.dim(summarize(s.description))}`);
|
|
175
|
-
console.log(c.dim('\nInstall: moa skills install [name] [--tool claude|cursor|codex|all] · Show: moa skills show <name>'));
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
if (sub === 'show') {
|
|
179
|
-
const name = a.pos[1];
|
|
180
|
-
if (!name)
|
|
181
|
-
die('usage: moa skills show <name>');
|
|
182
|
-
const skill = skills.find((s) => s.slug === name || s.name === name);
|
|
183
|
-
if (!skill)
|
|
184
|
-
die(`unknown skill: ${name} (try: moa skills)`);
|
|
185
|
-
console.log(readFileSync(join(skill.dir, 'SKILL.md'), 'utf8'));
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
if (sub === 'install') {
|
|
189
|
-
if (!skills.length)
|
|
190
|
-
die('no bundled skills found to install');
|
|
191
|
-
const toolArg = (flagStr(a, 'tool') || 'claude').toLowerCase();
|
|
192
|
-
const toolNames = toolArg === 'all' ? ALL_TOOLS : toolArg.split(',').map((t) => t.trim()).filter(Boolean);
|
|
193
|
-
const dirOverride = flagStr(a, 'dir');
|
|
194
|
-
if (dirOverride && toolNames.length > 1)
|
|
195
|
-
die('--dir works with a single --tool only');
|
|
196
|
-
const force = hasFlag(a, 'force');
|
|
197
|
-
const only = a.pos[1];
|
|
198
|
-
const chosen = only ? skills.filter((s) => s.slug === only || s.name === only) : skills;
|
|
199
|
-
if (only && !chosen.length)
|
|
200
|
-
die(`unknown skill: ${only} (try: moa skills)`);
|
|
201
|
-
for (const toolName of toolNames) {
|
|
202
|
-
const tool = toolFor(toolName, dirOverride);
|
|
203
|
-
console.log(c.bold(toolName) + c.dim(` → ${tool.base}`));
|
|
204
|
-
let installed = 0;
|
|
205
|
-
let skipped = 0;
|
|
206
|
-
for (const s of chosen) {
|
|
207
|
-
if (existsSync(tool.dest(s)) && !force) {
|
|
208
|
-
console.log(` ${c.yellow('skip')} ${s.slug} ${c.dim('(exists — use --force)')}`);
|
|
209
|
-
skipped++;
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
const dest = tool.write(s, readFileSync(join(s.dir, 'SKILL.md'), 'utf8'));
|
|
213
|
-
console.log(` ${c.green('✓')} ${s.slug} ${c.dim('→ ' + dest)}`);
|
|
214
|
-
installed++;
|
|
215
|
-
}
|
|
216
|
-
console.log(c.dim(` ${installed} installed, ${skipped} skipped`));
|
|
217
|
-
if (installed)
|
|
218
|
-
console.log(c.dim(` ${RELOAD_HINT[toolName]}`));
|
|
219
|
-
}
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
die(`unknown skills command: ${sub} (try: moa skills)`);
|
|
223
|
-
},
|
|
224
|
-
};
|
|
225
|
-
//# sourceMappingURL=skills.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/status.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { api, API_URL } from '../client.js';
|
|
2
|
-
import { c } from '../ui.js';
|
|
3
|
-
import { flagStr, hasFlag } from '../args.js';
|
|
4
|
-
export const statusCmd = {
|
|
5
|
-
name: 'status',
|
|
6
|
-
group: 'status',
|
|
7
|
-
summary: 'Server overview snapshot (oracles, counts). Add --spend for cumulative cost.',
|
|
8
|
-
usage: 'moa status [--spend [--since <ISO-date>]] [--json]',
|
|
9
|
-
args: [
|
|
10
|
-
{ name: '--json', desc: 'print the raw API response as JSON' },
|
|
11
|
-
{ name: '--spend', desc: 'show cumulative workflow cost for this operator' },
|
|
12
|
-
{ name: '--since', desc: 'ISO date to filter spend from, e.g. 2026-06-19 (implies --spend)' },
|
|
13
|
-
],
|
|
14
|
-
async run(a) {
|
|
15
|
-
if (hasFlag(a, 'spend') || flagStr(a, 'since') !== undefined) {
|
|
16
|
-
const since = flagStr(a, 'since');
|
|
17
|
-
const s = await api.statusSpend(since);
|
|
18
|
-
if (hasFlag(a, 'json'))
|
|
19
|
-
return console.log(JSON.stringify(s, null, 2));
|
|
20
|
-
const window = s.since ? `since ${s.since.slice(0, 10)}` : 'all time';
|
|
21
|
-
console.log(` spend ${c.bold('$' + s.costUsd.toFixed(4))} ${c.dim(`(${s.runs} runs, ${window})`)}`);
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
const s = await api.status();
|
|
25
|
-
if (hasFlag(a, 'json'))
|
|
26
|
-
return console.log(JSON.stringify(s, null, 2));
|
|
27
|
-
const counts = (s.counts ?? {});
|
|
28
|
-
console.log(c.bold('Moa') + c.dim(` ${API_URL}`));
|
|
29
|
-
console.log(` oracles : ${s.oracleDomains?.join(', ') ?? '-'}`);
|
|
30
|
-
console.log(` tasks : ${counts.tasks ?? 0} sessions: ${counts.sessions ?? 0} keys: ${counts.apiKeys ?? 0}`);
|
|
31
|
-
const q = s.workflowQueue;
|
|
32
|
-
if (q && (q.running > 0 || q.queued > 0))
|
|
33
|
-
console.log(` running ${q.running}/${q.limit} · queued ${q.queued}`);
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
/** `moa setup web [--domains a,b,c | --clear]` — view/set the org's WebFetch allowlist
|
|
37
|
-
* (the agent web policy's fetch stage). No flags = show current. */
|
|
38
|
-
async function runWebSetup(a) {
|
|
39
|
-
let res;
|
|
40
|
-
if (hasFlag(a, 'clear')) {
|
|
41
|
-
res = await api.setWebDomains([]);
|
|
42
|
-
}
|
|
43
|
-
else if (flagStr(a, 'domains') !== undefined) {
|
|
44
|
-
const domains = flagStr(a, 'domains').split(',').map((d) => d.trim()).filter(Boolean);
|
|
45
|
-
res = await api.setWebDomains(domains);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
res = await api.webDomains();
|
|
49
|
-
}
|
|
50
|
-
const src = res.source === 'org' ? c.dim('(org)') : c.dim('(env default)');
|
|
51
|
-
const list = res.domains.includes('*')
|
|
52
|
-
? 'all hosts (any domain)'
|
|
53
|
-
: res.domains.length
|
|
54
|
-
? res.domains.join(', ')
|
|
55
|
-
: c.dim('(none — fetch disabled)');
|
|
56
|
-
console.log(` webfetch allowlist ${src}: ${list}`);
|
|
57
|
-
}
|
|
58
|
-
export const setupCmd = {
|
|
59
|
-
name: 'setup',
|
|
60
|
-
group: 'status',
|
|
61
|
-
summary: 'Connector status, or manage the WebFetch allowlist (`setup web`).',
|
|
62
|
-
usage: 'moa setup [web [--domains a,b,c | --clear]]',
|
|
63
|
-
args: [
|
|
64
|
-
{ name: 'web', desc: 'show the WebFetch allowlist; --domains <csv> to restrict (or "none" to disable), --clear to reset to the default (all hosts)' },
|
|
65
|
-
],
|
|
66
|
-
subcommands: [
|
|
67
|
-
{ name: 'setup web', group: 'status', summary: "View/set the org's WebFetch allowlist (default: all hosts).", usage: 'moa setup web [--domains a,b,c|none | --clear]' },
|
|
68
|
-
],
|
|
69
|
-
async run(a) {
|
|
70
|
-
if (a.pos[0] === 'web')
|
|
71
|
-
return runWebSetup(a);
|
|
72
|
-
const s = (await api.setup());
|
|
73
|
-
const mark = (b) => (b ? c.green('connected') : c.red('not connected'));
|
|
74
|
-
console.log(` claude : ${mark(s.claude?.connected)} ${c.dim(s.claude?.email ?? '')}`);
|
|
75
|
-
console.log(` github : ${mark(s.github?.connected)} ${c.dim(s.github?.login ? '@' + s.github.login : '')}`);
|
|
76
|
-
},
|
|
77
|
-
};
|
|
78
|
-
//# sourceMappingURL=status.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/tasks.js
DELETED
|
@@ -1,156 +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
|
-
const short = (t) => `${c.dim(t.id.slice(0, 8))} ${statusColor(t.status.padEnd(9))} ${c.dim(relTime(t.createdAt).padEnd(7))} ${t.prompt.replace(/\n/g, ' ').slice(0, 70)}`;
|
|
6
|
-
const fmtActivity = (e) => e.kind === 'tool' ? `${e.tool ?? 'tool'}${e.text ? `: ${e.text}` : ''}` : (e.text ?? e.kind);
|
|
7
|
-
/** Resolve a unique task-id prefix against the task list. */
|
|
8
|
-
async function resolveTaskId(idOrPrefix) {
|
|
9
|
-
const matches = (await api.tasks()).filter((t) => t.id.startsWith(idOrPrefix));
|
|
10
|
-
if (matches.length === 1)
|
|
11
|
-
return matches[0].id;
|
|
12
|
-
if (matches.length > 1)
|
|
13
|
-
die(`ambiguous task id "${idOrPrefix}" — matches ${matches.map((t) => t.id.slice(0, 8)).join(', ')}`);
|
|
14
|
-
return idOrPrefix; // no match in the list — let the server answer (404 etc.)
|
|
15
|
-
}
|
|
16
|
-
/** How long a single long-poll request blocks server-side before we re-issue. */
|
|
17
|
-
const LONGPOLL_MS = 25_000;
|
|
18
|
-
/** Await a task to completion via the server-side long-poll (`GET /tasks/:id?waitMs`):
|
|
19
|
-
* one held request per window, no activity streaming — the clean "fire then await"
|
|
20
|
-
* path (what a LangGraph tool / Worker uses). Exit 1 on failed/canceled. */
|
|
21
|
-
async function waitTask(id) {
|
|
22
|
-
for (;;) {
|
|
23
|
-
const cur = await pollRetry(() => api.task(id, LONGPOLL_MS));
|
|
24
|
-
if (['succeeded', 'failed', 'canceled'].includes(cur.status)) {
|
|
25
|
-
const cost = cur.costUsd != null ? c.dim(` $${cur.costUsd.toFixed(4)}`) : '';
|
|
26
|
-
console.log(statusColor(cur.status) + cost);
|
|
27
|
-
if (cur.result)
|
|
28
|
-
console.log('\n' + cur.result);
|
|
29
|
-
if (cur.error)
|
|
30
|
-
console.log(c.red('\n' + cur.error));
|
|
31
|
-
if (cur.status !== 'succeeded')
|
|
32
|
-
process.exitCode = 1;
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
// Still running after the window — re-issue. Small floor sleep so this can't
|
|
36
|
-
// hot-loop against a server that ignores `waitMs` (returns immediately); it's
|
|
37
|
-
// negligible once the server honors the long-poll.
|
|
38
|
-
await sleep(1000);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/** Poll a task to completion, streaming new activity events as they arrive.
|
|
42
|
-
* Sets exit code 1 if the task ends failed/canceled. */
|
|
43
|
-
async function watchTask(id) {
|
|
44
|
-
let seen = 0;
|
|
45
|
-
for (;;) {
|
|
46
|
-
const cur = await pollRetry(() => api.task(id));
|
|
47
|
-
const acts = cur.activity ?? [];
|
|
48
|
-
if (seen > acts.length)
|
|
49
|
-
seen = acts.length; // server caps the feed; resync
|
|
50
|
-
for (const e of acts.slice(seen))
|
|
51
|
-
console.log(`${c.dim('·')} ${fmtActivity(e)}`);
|
|
52
|
-
seen = acts.length;
|
|
53
|
-
if (['succeeded', 'failed', 'canceled'].includes(cur.status)) {
|
|
54
|
-
console.log(statusColor(cur.status));
|
|
55
|
-
if (cur.result)
|
|
56
|
-
console.log('\n' + cur.result);
|
|
57
|
-
if (cur.error)
|
|
58
|
-
console.log(c.red('\n' + cur.error));
|
|
59
|
-
if (cur.status !== 'succeeded')
|
|
60
|
-
process.exitCode = 1;
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
await sleep(2500);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
export const tasksCmd = {
|
|
67
|
-
name: 'tasks',
|
|
68
|
-
group: 'tasks',
|
|
69
|
-
summary: 'List tasks (newest first).',
|
|
70
|
-
usage: 'moa tasks [--limit N] [--json]',
|
|
71
|
-
args: [
|
|
72
|
-
{ name: '--limit', desc: 'max tasks to show (default 30)' },
|
|
73
|
-
{ name: '--json', desc: 'print the raw API response as JSON' },
|
|
74
|
-
],
|
|
75
|
-
async run(a) {
|
|
76
|
-
const limit = flagNum(a, 'limit') ?? 30;
|
|
77
|
-
const ts = (await api.tasks(limit)).slice(0, limit);
|
|
78
|
-
if (hasFlag(a, 'json'))
|
|
79
|
-
return console.log(JSON.stringify(ts, null, 2));
|
|
80
|
-
if (!ts.length)
|
|
81
|
-
return console.log(c.dim('no tasks'));
|
|
82
|
-
ts.forEach((t) => console.log(short(t)));
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
export const taskCmd = {
|
|
86
|
-
name: 'task',
|
|
87
|
-
group: 'tasks',
|
|
88
|
-
summary: 'Show one task with its full result (id prefixes ok).',
|
|
89
|
-
usage: 'moa task <id> [--watch] [--wait] [--json]',
|
|
90
|
-
args: [
|
|
91
|
-
{ name: 'id', required: true, desc: 'task id (a unique prefix works)' },
|
|
92
|
-
{ name: '--watch', desc: 'stream activity until the task finishes' },
|
|
93
|
-
{ name: '--wait', desc: 'block (server-side long-poll) until the task settles, then print the result' },
|
|
94
|
-
{ name: '--json', desc: 'print the raw API response as JSON' },
|
|
95
|
-
],
|
|
96
|
-
async run(a) {
|
|
97
|
-
const arg = a.pos[0] ?? die('usage: moa task <id> [--watch] [--wait] [--json]');
|
|
98
|
-
const id = await resolveTaskId(arg);
|
|
99
|
-
if (hasFlag(a, 'watch'))
|
|
100
|
-
return watchTask(id);
|
|
101
|
-
if (hasFlag(a, 'wait'))
|
|
102
|
-
return waitTask(id);
|
|
103
|
-
const t = await api.task(id);
|
|
104
|
-
if (hasFlag(a, 'json'))
|
|
105
|
-
return console.log(JSON.stringify(t, null, 2));
|
|
106
|
-
console.log(`${c.bold('task')} ${c.dim(t.id)} ${statusColor(t.status)}${t.costUsd != null ? ' ' + c.dim('$' + t.costUsd.toFixed(4)) : ''}`);
|
|
107
|
-
console.log(c.dim('dir ') + t.dir);
|
|
108
|
-
console.log(c.bold('\nprompt:') + '\n' + t.prompt);
|
|
109
|
-
if (t.result)
|
|
110
|
-
console.log(c.bold('\nresult:') + '\n' + t.result);
|
|
111
|
-
if (t.error)
|
|
112
|
-
console.log(c.red('\nerror:') + '\n' + t.error);
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
export const runCmd = {
|
|
116
|
-
name: 'run',
|
|
117
|
-
group: 'tasks',
|
|
118
|
-
summary: 'Enqueue a coding task for the agent.',
|
|
119
|
-
usage: 'moa run "<prompt>" [--dir D] [--mode M] [--watch | --wait]',
|
|
120
|
-
args: [
|
|
121
|
-
{ name: 'prompt', required: true, desc: 'the instruction for the agent' },
|
|
122
|
-
{ name: '--dir', desc: 'working directory (defaults to the server workspace)' },
|
|
123
|
-
{ name: '--mode', desc: 'agent pipeline mode: scout (default) | oracle | architect | striker' },
|
|
124
|
-
{ name: '--watch', desc: 'stream activity until the task finishes' },
|
|
125
|
-
{ name: '--wait', desc: 'block (server-side long-poll) until the task settles, then print the result' },
|
|
126
|
-
],
|
|
127
|
-
examples: [
|
|
128
|
-
'moa run "add a hello() to src/index.ts" --watch',
|
|
129
|
-
'moa run "bump version to 1.2.0" --mode striker --wait',
|
|
130
|
-
],
|
|
131
|
-
async run(a) {
|
|
132
|
-
const prompt = a.pos.join(' ') || die('usage: moa run "<prompt>" [--dir D] [--mode M]');
|
|
133
|
-
const mode = flagStr(a, 'mode');
|
|
134
|
-
if (mode && !['scout', 'oracle', 'architect', 'striker'].includes(mode)) {
|
|
135
|
-
die('--mode must be one of: scout, oracle, architect, striker');
|
|
136
|
-
}
|
|
137
|
-
const t = await api.run({ task: prompt, dir: flagStr(a, 'dir'), mode });
|
|
138
|
-
console.log(c.green(`queued task ${t.id}`));
|
|
139
|
-
if (hasFlag(a, 'wait'))
|
|
140
|
-
await waitTask(t.id);
|
|
141
|
-
else if (hasFlag(a, 'watch'))
|
|
142
|
-
await watchTask(t.id);
|
|
143
|
-
},
|
|
144
|
-
};
|
|
145
|
-
export const cancelCmd = {
|
|
146
|
-
name: 'cancel',
|
|
147
|
-
group: 'tasks',
|
|
148
|
-
summary: 'Cancel a running task.',
|
|
149
|
-
usage: 'moa cancel <taskId>',
|
|
150
|
-
args: [{ name: 'taskId', required: true, desc: 'task id' }],
|
|
151
|
-
async run(a) {
|
|
152
|
-
const id = a.pos[0] ?? die('usage: moa cancel <taskId>');
|
|
153
|
-
console.log(statusColor((await api.cancelTask(id)).status));
|
|
154
|
-
},
|
|
155
|
-
};
|
|
156
|
-
//# sourceMappingURL=tasks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/track.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { api } from '../client.js';
|
|
2
|
-
import { c, relTime } from '../ui.js';
|
|
3
|
-
import { hasFlag } from '../args.js';
|
|
4
|
-
/** The issue pipeline: each tracked issue and the stage it's reached. */
|
|
5
|
-
export const trackCmd = {
|
|
6
|
-
name: 'track',
|
|
7
|
-
group: 'workflows',
|
|
8
|
-
summary: 'Issue pipeline — each tracked issue and its lifecycle stage.',
|
|
9
|
-
usage: 'moa track [repo] [--json]',
|
|
10
|
-
args: [
|
|
11
|
-
{ name: 'repo', desc: 'filter to owner/repo' },
|
|
12
|
-
{ name: '--json', desc: 'print the raw API response as JSON' },
|
|
13
|
-
],
|
|
14
|
-
examples: ['moa track', 'moa track fnLog0/moa-tests'],
|
|
15
|
-
async run(a) {
|
|
16
|
-
const repo = a.pos[0];
|
|
17
|
-
let tracks = await api.tracks();
|
|
18
|
-
if (repo)
|
|
19
|
-
tracks = tracks.filter((t) => t.repo === repo);
|
|
20
|
-
if (hasFlag(a, 'json'))
|
|
21
|
-
return console.log(JSON.stringify(tracks, null, 2));
|
|
22
|
-
if (!tracks.length)
|
|
23
|
-
return console.log(c.dim('no tracked issues'));
|
|
24
|
-
for (const t of tracks) {
|
|
25
|
-
const pr = t.prNumber ? c.cyan(`PR #${t.prNumber}`) : c.dim('no PR');
|
|
26
|
-
const rr = t.reviewRequested ? ' ' + c.amber('review requested') : '';
|
|
27
|
-
console.log(`${c.dim(relTime(t.updatedAt ?? '').padEnd(7))} ${`${t.repo}#${t.issueNumber}`.padEnd(24)} ${c.amber(t.stage.padEnd(18))} ${pr}${rr} ${c.dim(t.title ?? '')}`);
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=track.js.map
|
|
@@ -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
|