faces-cli 1.5.5 → 1.5.7
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/commands/catalog/manyfaced.d.ts +18 -0
- package/dist/commands/catalog/manyfaced.js +225 -0
- package/dist/commands/compile/doc/pause.d.ts +13 -0
- package/dist/commands/compile/doc/pause.js +29 -0
- package/dist/commands/compile/doc/reset.d.ts +14 -0
- package/dist/commands/compile/doc/reset.js +30 -0
- package/dist/commands/compile/thread/pause.d.ts +13 -0
- package/dist/commands/compile/thread/pause.js +29 -0
- package/dist/commands/compile/thread/reset.d.ts +14 -0
- package/dist/commands/compile/thread/reset.js +30 -0
- package/oclif.manifest.json +428 -96
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base.js';
|
|
2
|
+
export default class CatalogManyfaced extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
skill: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
install: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
'skills-dir': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
refresh: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<unknown>;
|
|
14
|
+
private fetchIndex;
|
|
15
|
+
private listSkills;
|
|
16
|
+
private showSkill;
|
|
17
|
+
private installSkill;
|
|
18
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { BaseCommand } from '../../base.js';
|
|
6
|
+
const GITHUB_REPO = 'facessh/manyfaced';
|
|
7
|
+
const GITHUB_API = `https://api.github.com/repos/${GITHUB_REPO}`;
|
|
8
|
+
const CACHE_PATH = path.join(os.homedir(), '.faces', 'manyfaced-index.json');
|
|
9
|
+
const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
10
|
+
function parseFrontmatter(content) {
|
|
11
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
12
|
+
if (!match)
|
|
13
|
+
return {};
|
|
14
|
+
const fm = {};
|
|
15
|
+
for (const line of match[1].split('\n')) {
|
|
16
|
+
const ci = line.indexOf(':');
|
|
17
|
+
if (ci < 0)
|
|
18
|
+
continue;
|
|
19
|
+
const key = line.slice(0, ci).trim();
|
|
20
|
+
const val = line.slice(ci + 1).trim().replace(/^["']|["']$/g, '');
|
|
21
|
+
if (key && val)
|
|
22
|
+
fm[key] = val;
|
|
23
|
+
}
|
|
24
|
+
return fm;
|
|
25
|
+
}
|
|
26
|
+
async function githubGet(urlPath) {
|
|
27
|
+
const resp = await fetch(`${GITHUB_API}${urlPath}`, {
|
|
28
|
+
headers: { Accept: 'application/vnd.github.v3+json', 'User-Agent': 'faces-cli' },
|
|
29
|
+
});
|
|
30
|
+
if (!resp.ok) {
|
|
31
|
+
const body = await resp.text().catch(() => '');
|
|
32
|
+
throw new Error(`GitHub API ${resp.status}: ${body.slice(0, 200)}`);
|
|
33
|
+
}
|
|
34
|
+
return resp.json();
|
|
35
|
+
}
|
|
36
|
+
async function githubGetFile(filePath) {
|
|
37
|
+
const data = (await githubGet(`/contents/${filePath}`));
|
|
38
|
+
if (!data.content)
|
|
39
|
+
throw new Error(`No content for ${filePath}`);
|
|
40
|
+
return Buffer.from(data.content, 'base64').toString('utf8');
|
|
41
|
+
}
|
|
42
|
+
function loadCache() {
|
|
43
|
+
try {
|
|
44
|
+
if (!fs.existsSync(CACHE_PATH))
|
|
45
|
+
return null;
|
|
46
|
+
const raw = JSON.parse(fs.readFileSync(CACHE_PATH, 'utf8'));
|
|
47
|
+
if (Date.now() - raw.fetched_at > CACHE_TTL_MS)
|
|
48
|
+
return null;
|
|
49
|
+
return raw;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function saveCache(index) {
|
|
56
|
+
const dir = path.dirname(CACHE_PATH);
|
|
57
|
+
if (!fs.existsSync(dir))
|
|
58
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
59
|
+
fs.writeFileSync(CACHE_PATH, JSON.stringify(index, null, 2));
|
|
60
|
+
}
|
|
61
|
+
export default class CatalogManyfaced extends BaseCommand {
|
|
62
|
+
static description = 'Browse and install community manyfaced skills from github.com/facessh/manyfaced';
|
|
63
|
+
static flags = {
|
|
64
|
+
...BaseCommand.baseFlags,
|
|
65
|
+
skill: Flags.string({ description: 'Show details for a specific skill' }),
|
|
66
|
+
install: Flags.string({ description: 'Install a skill by name' }),
|
|
67
|
+
'skills-dir': Flags.string({
|
|
68
|
+
description: 'Directory to install skills into (required for --install)',
|
|
69
|
+
}),
|
|
70
|
+
refresh: Flags.boolean({
|
|
71
|
+
description: 'Force refresh the skill index (ignore cache)',
|
|
72
|
+
default: false,
|
|
73
|
+
}),
|
|
74
|
+
};
|
|
75
|
+
async run() {
|
|
76
|
+
const { flags } = await this.parse(CatalogManyfaced);
|
|
77
|
+
if (flags.install) {
|
|
78
|
+
return this.installSkill(flags.install, flags['skills-dir']);
|
|
79
|
+
}
|
|
80
|
+
if (flags.skill) {
|
|
81
|
+
return this.showSkill(flags.skill);
|
|
82
|
+
}
|
|
83
|
+
return this.listSkills(flags.refresh);
|
|
84
|
+
}
|
|
85
|
+
async fetchIndex(forceRefresh) {
|
|
86
|
+
if (!forceRefresh) {
|
|
87
|
+
const cached = loadCache();
|
|
88
|
+
if (cached)
|
|
89
|
+
return cached.skills;
|
|
90
|
+
}
|
|
91
|
+
const entries = (await githubGet('/contents/'));
|
|
92
|
+
const dirs = entries.filter((e) => e.type === 'dir' && !e.name.startsWith('.'));
|
|
93
|
+
const skills = [];
|
|
94
|
+
for (const dir of dirs) {
|
|
95
|
+
try {
|
|
96
|
+
const skillMd = await githubGetFile(`${dir.name}/SKILL.md`);
|
|
97
|
+
const fm = parseFrontmatter(skillMd);
|
|
98
|
+
skills.push({
|
|
99
|
+
name: dir.name,
|
|
100
|
+
description: fm.description || '(no description)',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
skills.push({ name: dir.name, description: '(could not read SKILL.md)' });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
saveCache({ fetched_at: Date.now(), skills });
|
|
108
|
+
return skills;
|
|
109
|
+
}
|
|
110
|
+
async listSkills(refresh) {
|
|
111
|
+
const skills = await this.fetchIndex(refresh);
|
|
112
|
+
if (skills.length === 0) {
|
|
113
|
+
this.log('No manyfaced skills found in the community catalog.');
|
|
114
|
+
return { skills: [] };
|
|
115
|
+
}
|
|
116
|
+
if (this.jsonEnabled())
|
|
117
|
+
return { skills };
|
|
118
|
+
const nameWidth = Math.max(30, ...skills.map((s) => s.name.length + 2));
|
|
119
|
+
this.log('');
|
|
120
|
+
this.log(`${'NAME'.padEnd(nameWidth)}DESCRIPTION`);
|
|
121
|
+
this.log(`${'-'.repeat(nameWidth)}${'-'.repeat(50)}`);
|
|
122
|
+
for (const s of skills) {
|
|
123
|
+
this.log(`${s.name.padEnd(nameWidth)}${s.description.slice(0, 70)}`);
|
|
124
|
+
}
|
|
125
|
+
this.log('');
|
|
126
|
+
this.log(`${skills.length} skills available. Use --skill NAME for details, --install NAME to install.`);
|
|
127
|
+
return { skills };
|
|
128
|
+
}
|
|
129
|
+
async showSkill(name) {
|
|
130
|
+
let readme;
|
|
131
|
+
try {
|
|
132
|
+
readme = await githubGetFile(`${name}/README.md`);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
this.error(`Skill '${name}' not found. Run 'faces catalog:manyfaced' to see available skills.`);
|
|
136
|
+
}
|
|
137
|
+
if (this.jsonEnabled()) {
|
|
138
|
+
let skillMd = '';
|
|
139
|
+
try {
|
|
140
|
+
skillMd = await githubGetFile(`${name}/SKILL.md`);
|
|
141
|
+
}
|
|
142
|
+
catch { /* ignore */ }
|
|
143
|
+
const fm = parseFrontmatter(skillMd);
|
|
144
|
+
return { name, description: fm.description, readme };
|
|
145
|
+
}
|
|
146
|
+
this.log('');
|
|
147
|
+
this.log(readme);
|
|
148
|
+
return { name, readme };
|
|
149
|
+
}
|
|
150
|
+
async installSkill(name, skillsDir) {
|
|
151
|
+
if (!skillsDir) {
|
|
152
|
+
this.error('--skills-dir is required for install. Specify where skills should be installed.\n' +
|
|
153
|
+
'Example: faces catalog:manyfaced --install ' + name + ' --skills-dir ~/.claude/skills');
|
|
154
|
+
}
|
|
155
|
+
// Verify skill exists
|
|
156
|
+
const skills = await this.fetchIndex(false);
|
|
157
|
+
const found = skills.find((s) => s.name === name);
|
|
158
|
+
if (!found) {
|
|
159
|
+
this.error(`Skill '${name}' not found. Available skills:\n` +
|
|
160
|
+
skills.map((s) => ` ${s.name}`).join('\n'));
|
|
161
|
+
}
|
|
162
|
+
// Create skills-dir if needed
|
|
163
|
+
if (!fs.existsSync(skillsDir)) {
|
|
164
|
+
fs.mkdirSync(skillsDir, { recursive: true });
|
|
165
|
+
}
|
|
166
|
+
const installDir = path.join(skillsDir, name);
|
|
167
|
+
// Fetch the full directory tree for this skill
|
|
168
|
+
process.stderr.write(`Fetching ${name}...\n`);
|
|
169
|
+
const tree = (await githubGet('/git/trees/main?recursive=1'));
|
|
170
|
+
const skillFiles = tree.tree.filter((f) => f.path.startsWith(`${name}/`) && f.type === 'blob');
|
|
171
|
+
if (skillFiles.length === 0) {
|
|
172
|
+
this.error(`No files found for skill '${name}'.`);
|
|
173
|
+
}
|
|
174
|
+
// Download and write each file
|
|
175
|
+
const faceMdFiles = [];
|
|
176
|
+
for (const file of skillFiles) {
|
|
177
|
+
const relativePath = file.path.slice(name.length + 1); // remove skill prefix
|
|
178
|
+
const destPath = path.join(installDir, relativePath);
|
|
179
|
+
const destDir = path.dirname(destPath);
|
|
180
|
+
if (!fs.existsSync(destDir))
|
|
181
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
182
|
+
process.stderr.write(` ${relativePath}\n`);
|
|
183
|
+
const content = await githubGetFile(file.path);
|
|
184
|
+
fs.writeFileSync(destPath, content);
|
|
185
|
+
// Track FACE.md files for catalog copy
|
|
186
|
+
if (relativePath.endsWith('FACE.md') && relativePath.includes('catalog/')) {
|
|
187
|
+
faceMdFiles.push(destPath);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Copy FACE.md files to local catalog
|
|
191
|
+
const catalogDir = path.join(os.homedir(), '.faces', 'catalog');
|
|
192
|
+
const installedFaces = [];
|
|
193
|
+
for (const faceMdPath of faceMdFiles) {
|
|
194
|
+
const content = fs.readFileSync(faceMdPath, 'utf8');
|
|
195
|
+
const fm = parseFrontmatter(content);
|
|
196
|
+
const alias = fm.alias || fm.facename || path.basename(path.dirname(faceMdPath));
|
|
197
|
+
const catalogFaceDir = path.join(catalogDir, alias);
|
|
198
|
+
if (!fs.existsSync(catalogFaceDir))
|
|
199
|
+
fs.mkdirSync(catalogFaceDir, { recursive: true });
|
|
200
|
+
fs.writeFileSync(path.join(catalogFaceDir, 'FACE.md'), content);
|
|
201
|
+
installedFaces.push(alias);
|
|
202
|
+
}
|
|
203
|
+
if (!this.jsonEnabled()) {
|
|
204
|
+
this.log('');
|
|
205
|
+
this.log(`Installed ${name} to ${installDir}/`);
|
|
206
|
+
this.log(` ${skillFiles.length} files written`);
|
|
207
|
+
if (installedFaces.length > 0) {
|
|
208
|
+
this.log('');
|
|
209
|
+
this.log(`Faces added to local catalog (need creation + compilation):`);
|
|
210
|
+
for (const alias of installedFaces) {
|
|
211
|
+
this.log(` faces face:create --alias ${alias} --name "${alias}"`);
|
|
212
|
+
}
|
|
213
|
+
this.log('');
|
|
214
|
+
this.log('After creating each face, compile source material:');
|
|
215
|
+
this.log(' faces compile:doc ALIAS --file source.txt');
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
skill: name,
|
|
220
|
+
install_dir: installDir,
|
|
221
|
+
files: skillFiles.length,
|
|
222
|
+
faces: installedFaces,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base.js';
|
|
2
|
+
export default class CompileDocPause extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
};
|
|
9
|
+
static args: {
|
|
10
|
+
doc_id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<unknown>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Args } from '@oclif/core';
|
|
2
|
+
import { BaseCommand } from '../../../base.js';
|
|
3
|
+
import { FacesAPIError } from '../../../client.js';
|
|
4
|
+
export default class CompileDocPause extends BaseCommand {
|
|
5
|
+
static description = 'Pause a running document compilation (preserves progress, resume with make)';
|
|
6
|
+
static flags = {
|
|
7
|
+
...BaseCommand.baseFlags,
|
|
8
|
+
};
|
|
9
|
+
static args = {
|
|
10
|
+
doc_id: Args.string({ description: 'Document ID', required: true }),
|
|
11
|
+
};
|
|
12
|
+
async run() {
|
|
13
|
+
const { args, flags } = await this.parse(CompileDocPause);
|
|
14
|
+
const client = this.makeClient(flags);
|
|
15
|
+
let data;
|
|
16
|
+
try {
|
|
17
|
+
data = await client.post(`/v1/compile/documents/${args.doc_id}/pause`);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
if (err instanceof FacesAPIError)
|
|
21
|
+
this.error(`Error (${err.statusCode}): ${err.message}`);
|
|
22
|
+
throw err;
|
|
23
|
+
}
|
|
24
|
+
if (!this.jsonEnabled()) {
|
|
25
|
+
this.log(`Paused. Resume with: faces compile:doc:make ${args.doc_id}`);
|
|
26
|
+
}
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base.js';
|
|
2
|
+
export default class CompileDocReset extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
6
|
+
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
doc_id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<unknown>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { BaseCommand } from '../../../base.js';
|
|
3
|
+
import { FacesAPIError } from '../../../client.js';
|
|
4
|
+
export default class CompileDocReset extends BaseCommand {
|
|
5
|
+
static description = 'Reset document compilation progress (wipe extraction, keep content)';
|
|
6
|
+
static flags = {
|
|
7
|
+
...BaseCommand.baseFlags,
|
|
8
|
+
yes: Flags.boolean({ description: 'Skip confirmation', default: false }),
|
|
9
|
+
};
|
|
10
|
+
static args = {
|
|
11
|
+
doc_id: Args.string({ description: 'Document ID', required: true }),
|
|
12
|
+
};
|
|
13
|
+
async run() {
|
|
14
|
+
const { args, flags } = await this.parse(CompileDocReset);
|
|
15
|
+
const client = this.makeClient(flags);
|
|
16
|
+
let data;
|
|
17
|
+
try {
|
|
18
|
+
data = await client.post(`/v1/compile/documents/${args.doc_id}/reset`);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
if (err instanceof FacesAPIError)
|
|
22
|
+
this.error(`Error (${err.statusCode}): ${err.message}`);
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
if (!this.jsonEnabled()) {
|
|
26
|
+
this.log(`Reset. Recompile with: faces compile:doc:make ${args.doc_id}`);
|
|
27
|
+
}
|
|
28
|
+
return data;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base.js';
|
|
2
|
+
export default class CompileThreadPause extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
};
|
|
9
|
+
static args: {
|
|
10
|
+
thread_id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<unknown>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Args } from '@oclif/core';
|
|
2
|
+
import { BaseCommand } from '../../../base.js';
|
|
3
|
+
import { FacesAPIError } from '../../../client.js';
|
|
4
|
+
export default class CompileThreadPause extends BaseCommand {
|
|
5
|
+
static description = 'Pause a running thread compilation (preserves progress, resume with make)';
|
|
6
|
+
static flags = {
|
|
7
|
+
...BaseCommand.baseFlags,
|
|
8
|
+
};
|
|
9
|
+
static args = {
|
|
10
|
+
thread_id: Args.string({ description: 'Thread ID', required: true }),
|
|
11
|
+
};
|
|
12
|
+
async run() {
|
|
13
|
+
const { args, flags } = await this.parse(CompileThreadPause);
|
|
14
|
+
const client = this.makeClient(flags);
|
|
15
|
+
let data;
|
|
16
|
+
try {
|
|
17
|
+
data = await client.post(`/v1/compile/threads/${args.thread_id}/pause`);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
if (err instanceof FacesAPIError)
|
|
21
|
+
this.error(`Error (${err.statusCode}): ${err.message}`);
|
|
22
|
+
throw err;
|
|
23
|
+
}
|
|
24
|
+
if (!this.jsonEnabled()) {
|
|
25
|
+
this.log(`Paused. Resume with: faces compile:thread:make ${args.thread_id}`);
|
|
26
|
+
}
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base.js';
|
|
2
|
+
export default class CompileThreadReset extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
6
|
+
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
thread_id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<unknown>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { BaseCommand } from '../../../base.js';
|
|
3
|
+
import { FacesAPIError } from '../../../client.js';
|
|
4
|
+
export default class CompileThreadReset extends BaseCommand {
|
|
5
|
+
static description = 'Reset thread compilation progress (wipe extraction, keep source messages)';
|
|
6
|
+
static flags = {
|
|
7
|
+
...BaseCommand.baseFlags,
|
|
8
|
+
yes: Flags.boolean({ description: 'Skip confirmation', default: false }),
|
|
9
|
+
};
|
|
10
|
+
static args = {
|
|
11
|
+
thread_id: Args.string({ description: 'Thread ID', required: true }),
|
|
12
|
+
};
|
|
13
|
+
async run() {
|
|
14
|
+
const { args, flags } = await this.parse(CompileThreadReset);
|
|
15
|
+
const client = this.makeClient(flags);
|
|
16
|
+
let data;
|
|
17
|
+
try {
|
|
18
|
+
data = await client.post(`/v1/compile/threads/${args.thread_id}/reset`);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
if (err instanceof FacesAPIError)
|
|
22
|
+
this.error(`Error (${err.statusCode}): ${err.message}`);
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
if (!this.jsonEnabled()) {
|
|
26
|
+
this.log(`Reset. Recompile with: faces compile:thread:make ${args.thread_id}`);
|
|
27
|
+
}
|
|
28
|
+
return data;
|
|
29
|
+
}
|
|
30
|
+
}
|
package/oclif.manifest.json
CHANGED
|
@@ -578,10 +578,10 @@
|
|
|
578
578
|
"whoami.js"
|
|
579
579
|
]
|
|
580
580
|
},
|
|
581
|
-
"
|
|
581
|
+
"catalog:doctor": {
|
|
582
582
|
"aliases": [],
|
|
583
583
|
"args": {},
|
|
584
|
-
"description": "
|
|
584
|
+
"description": "Diagnose and repair the local face catalog",
|
|
585
585
|
"flags": {
|
|
586
586
|
"json": {
|
|
587
587
|
"description": "Format output as json.",
|
|
@@ -613,11 +613,23 @@
|
|
|
613
613
|
"hasDynamicHelp": false,
|
|
614
614
|
"multiple": false,
|
|
615
615
|
"type": "option"
|
|
616
|
+
},
|
|
617
|
+
"fix": {
|
|
618
|
+
"description": "Rebuild missing or stale catalog entries from API",
|
|
619
|
+
"name": "fix",
|
|
620
|
+
"allowNo": false,
|
|
621
|
+
"type": "boolean"
|
|
622
|
+
},
|
|
623
|
+
"generate": {
|
|
624
|
+
"description": "Fix + generate missing descriptions via LLM",
|
|
625
|
+
"name": "generate",
|
|
626
|
+
"allowNo": false,
|
|
627
|
+
"type": "boolean"
|
|
616
628
|
}
|
|
617
629
|
},
|
|
618
630
|
"hasDynamicHelp": false,
|
|
619
631
|
"hiddenAliases": [],
|
|
620
|
-
"id": "
|
|
632
|
+
"id": "catalog:doctor",
|
|
621
633
|
"pluginAlias": "faces-cli",
|
|
622
634
|
"pluginName": "faces-cli",
|
|
623
635
|
"pluginType": "core",
|
|
@@ -627,14 +639,14 @@
|
|
|
627
639
|
"relativePath": [
|
|
628
640
|
"dist",
|
|
629
641
|
"commands",
|
|
630
|
-
"
|
|
631
|
-
"
|
|
642
|
+
"catalog",
|
|
643
|
+
"doctor.js"
|
|
632
644
|
]
|
|
633
645
|
},
|
|
634
|
-
"
|
|
646
|
+
"catalog:list": {
|
|
635
647
|
"aliases": [],
|
|
636
648
|
"args": {},
|
|
637
|
-
"description": "
|
|
649
|
+
"description": "List all faces in the local catalog",
|
|
638
650
|
"flags": {
|
|
639
651
|
"json": {
|
|
640
652
|
"description": "Format output as json.",
|
|
@@ -670,7 +682,7 @@
|
|
|
670
682
|
},
|
|
671
683
|
"hasDynamicHelp": false,
|
|
672
684
|
"hiddenAliases": [],
|
|
673
|
-
"id": "
|
|
685
|
+
"id": "catalog:list",
|
|
674
686
|
"pluginAlias": "faces-cli",
|
|
675
687
|
"pluginName": "faces-cli",
|
|
676
688
|
"pluginType": "core",
|
|
@@ -680,14 +692,14 @@
|
|
|
680
692
|
"relativePath": [
|
|
681
693
|
"dist",
|
|
682
694
|
"commands",
|
|
683
|
-
"
|
|
684
|
-
"
|
|
695
|
+
"catalog",
|
|
696
|
+
"list.js"
|
|
685
697
|
]
|
|
686
698
|
},
|
|
687
|
-
"
|
|
699
|
+
"catalog:manyfaced": {
|
|
688
700
|
"aliases": [],
|
|
689
701
|
"args": {},
|
|
690
|
-
"description": "
|
|
702
|
+
"description": "Browse and install community manyfaced skills from github.com/facessh/manyfaced",
|
|
691
703
|
"flags": {
|
|
692
704
|
"json": {
|
|
693
705
|
"description": "Format output as json.",
|
|
@@ -720,21 +732,37 @@
|
|
|
720
732
|
"multiple": false,
|
|
721
733
|
"type": "option"
|
|
722
734
|
},
|
|
723
|
-
"
|
|
724
|
-
"description": "
|
|
725
|
-
"name": "
|
|
726
|
-
"
|
|
735
|
+
"skill": {
|
|
736
|
+
"description": "Show details for a specific skill",
|
|
737
|
+
"name": "skill",
|
|
738
|
+
"hasDynamicHelp": false,
|
|
739
|
+
"multiple": false,
|
|
740
|
+
"type": "option"
|
|
741
|
+
},
|
|
742
|
+
"install": {
|
|
743
|
+
"description": "Install a skill by name",
|
|
744
|
+
"name": "install",
|
|
727
745
|
"hasDynamicHelp": false,
|
|
728
746
|
"multiple": false,
|
|
729
|
-
"options": [
|
|
730
|
-
"connect"
|
|
731
|
-
],
|
|
732
747
|
"type": "option"
|
|
748
|
+
},
|
|
749
|
+
"skills-dir": {
|
|
750
|
+
"description": "Directory to install skills into (required for --install)",
|
|
751
|
+
"name": "skills-dir",
|
|
752
|
+
"hasDynamicHelp": false,
|
|
753
|
+
"multiple": false,
|
|
754
|
+
"type": "option"
|
|
755
|
+
},
|
|
756
|
+
"refresh": {
|
|
757
|
+
"description": "Force refresh the skill index (ignore cache)",
|
|
758
|
+
"name": "refresh",
|
|
759
|
+
"allowNo": false,
|
|
760
|
+
"type": "boolean"
|
|
733
761
|
}
|
|
734
762
|
},
|
|
735
763
|
"hasDynamicHelp": false,
|
|
736
764
|
"hiddenAliases": [],
|
|
737
|
-
"id": "
|
|
765
|
+
"id": "catalog:manyfaced",
|
|
738
766
|
"pluginAlias": "faces-cli",
|
|
739
767
|
"pluginName": "faces-cli",
|
|
740
768
|
"pluginType": "core",
|
|
@@ -744,14 +772,14 @@
|
|
|
744
772
|
"relativePath": [
|
|
745
773
|
"dist",
|
|
746
774
|
"commands",
|
|
747
|
-
"
|
|
748
|
-
"
|
|
775
|
+
"catalog",
|
|
776
|
+
"manyfaced.js"
|
|
749
777
|
]
|
|
750
778
|
},
|
|
751
|
-
"billing:
|
|
779
|
+
"billing:balance": {
|
|
752
780
|
"aliases": [],
|
|
753
781
|
"args": {},
|
|
754
|
-
"description": "
|
|
782
|
+
"description": "Show credit balance and payment method status",
|
|
755
783
|
"flags": {
|
|
756
784
|
"json": {
|
|
757
785
|
"description": "Format output as json.",
|
|
@@ -783,18 +811,11 @@
|
|
|
783
811
|
"hasDynamicHelp": false,
|
|
784
812
|
"multiple": false,
|
|
785
813
|
"type": "option"
|
|
786
|
-
},
|
|
787
|
-
"provider": {
|
|
788
|
-
"description": "Filter by provider (e.g. openai, anthropic)",
|
|
789
|
-
"name": "provider",
|
|
790
|
-
"hasDynamicHelp": false,
|
|
791
|
-
"multiple": false,
|
|
792
|
-
"type": "option"
|
|
793
814
|
}
|
|
794
815
|
},
|
|
795
816
|
"hasDynamicHelp": false,
|
|
796
817
|
"hiddenAliases": [],
|
|
797
|
-
"id": "billing:
|
|
818
|
+
"id": "billing:balance",
|
|
798
819
|
"pluginAlias": "faces-cli",
|
|
799
820
|
"pluginName": "faces-cli",
|
|
800
821
|
"pluginType": "core",
|
|
@@ -805,13 +826,13 @@
|
|
|
805
826
|
"dist",
|
|
806
827
|
"commands",
|
|
807
828
|
"billing",
|
|
808
|
-
"
|
|
829
|
+
"balance.js"
|
|
809
830
|
]
|
|
810
831
|
},
|
|
811
|
-
"billing:
|
|
832
|
+
"billing:card-setup": {
|
|
812
833
|
"aliases": [],
|
|
813
834
|
"args": {},
|
|
814
|
-
"description": "
|
|
835
|
+
"description": "Get a Stripe card setup URL to save a payment method",
|
|
815
836
|
"flags": {
|
|
816
837
|
"json": {
|
|
817
838
|
"description": "Format output as json.",
|
|
@@ -847,7 +868,7 @@
|
|
|
847
868
|
},
|
|
848
869
|
"hasDynamicHelp": false,
|
|
849
870
|
"hiddenAliases": [],
|
|
850
|
-
"id": "billing:
|
|
871
|
+
"id": "billing:card-setup",
|
|
851
872
|
"pluginAlias": "faces-cli",
|
|
852
873
|
"pluginName": "faces-cli",
|
|
853
874
|
"pluginType": "core",
|
|
@@ -858,13 +879,13 @@
|
|
|
858
879
|
"dist",
|
|
859
880
|
"commands",
|
|
860
881
|
"billing",
|
|
861
|
-
"
|
|
882
|
+
"card-setup.js"
|
|
862
883
|
]
|
|
863
884
|
},
|
|
864
|
-
"billing:
|
|
885
|
+
"billing:checkout": {
|
|
865
886
|
"aliases": [],
|
|
866
887
|
"args": {},
|
|
867
|
-
"description": "
|
|
888
|
+
"description": "Get a Stripe checkout URL to upgrade your subscription plan",
|
|
868
889
|
"flags": {
|
|
869
890
|
"json": {
|
|
870
891
|
"description": "Format output as json.",
|
|
@@ -896,11 +917,22 @@
|
|
|
896
917
|
"hasDynamicHelp": false,
|
|
897
918
|
"multiple": false,
|
|
898
919
|
"type": "option"
|
|
920
|
+
},
|
|
921
|
+
"plan": {
|
|
922
|
+
"description": "Plan to subscribe to",
|
|
923
|
+
"name": "plan",
|
|
924
|
+
"default": "connect",
|
|
925
|
+
"hasDynamicHelp": false,
|
|
926
|
+
"multiple": false,
|
|
927
|
+
"options": [
|
|
928
|
+
"connect"
|
|
929
|
+
],
|
|
930
|
+
"type": "option"
|
|
899
931
|
}
|
|
900
932
|
},
|
|
901
933
|
"hasDynamicHelp": false,
|
|
902
934
|
"hiddenAliases": [],
|
|
903
|
-
"id": "billing:
|
|
935
|
+
"id": "billing:checkout",
|
|
904
936
|
"pluginAlias": "faces-cli",
|
|
905
937
|
"pluginName": "faces-cli",
|
|
906
938
|
"pluginType": "core",
|
|
@@ -911,13 +943,13 @@
|
|
|
911
943
|
"dist",
|
|
912
944
|
"commands",
|
|
913
945
|
"billing",
|
|
914
|
-
"
|
|
946
|
+
"checkout.js"
|
|
915
947
|
]
|
|
916
948
|
},
|
|
917
|
-
"billing:
|
|
949
|
+
"billing:llm-costs": {
|
|
918
950
|
"aliases": [],
|
|
919
951
|
"args": {},
|
|
920
|
-
"description": "
|
|
952
|
+
"description": "List available LLMs and their per-token costs",
|
|
921
953
|
"flags": {
|
|
922
954
|
"json": {
|
|
923
955
|
"description": "Format output as json.",
|
|
@@ -950,17 +982,9 @@
|
|
|
950
982
|
"multiple": false,
|
|
951
983
|
"type": "option"
|
|
952
984
|
},
|
|
953
|
-
"
|
|
954
|
-
"description": "
|
|
955
|
-
"name": "
|
|
956
|
-
"required": true,
|
|
957
|
-
"hasDynamicHelp": false,
|
|
958
|
-
"multiple": false,
|
|
959
|
-
"type": "option"
|
|
960
|
-
},
|
|
961
|
-
"payment-ref": {
|
|
962
|
-
"description": "Payment reference (admin/test path)",
|
|
963
|
-
"name": "payment-ref",
|
|
985
|
+
"provider": {
|
|
986
|
+
"description": "Filter by provider (e.g. openai, anthropic)",
|
|
987
|
+
"name": "provider",
|
|
964
988
|
"hasDynamicHelp": false,
|
|
965
989
|
"multiple": false,
|
|
966
990
|
"type": "option"
|
|
@@ -968,7 +992,7 @@
|
|
|
968
992
|
},
|
|
969
993
|
"hasDynamicHelp": false,
|
|
970
994
|
"hiddenAliases": [],
|
|
971
|
-
"id": "billing:
|
|
995
|
+
"id": "billing:llm-costs",
|
|
972
996
|
"pluginAlias": "faces-cli",
|
|
973
997
|
"pluginName": "faces-cli",
|
|
974
998
|
"pluginType": "core",
|
|
@@ -979,13 +1003,13 @@
|
|
|
979
1003
|
"dist",
|
|
980
1004
|
"commands",
|
|
981
1005
|
"billing",
|
|
982
|
-
"
|
|
1006
|
+
"llm-costs.js"
|
|
983
1007
|
]
|
|
984
1008
|
},
|
|
985
|
-
"billing:
|
|
1009
|
+
"billing:quota": {
|
|
986
1010
|
"aliases": [],
|
|
987
1011
|
"args": {},
|
|
988
|
-
"description": "
|
|
1012
|
+
"description": "Show compile token quota and per-face stats",
|
|
989
1013
|
"flags": {
|
|
990
1014
|
"json": {
|
|
991
1015
|
"description": "Format output as json.",
|
|
@@ -1017,30 +1041,56 @@
|
|
|
1017
1041
|
"hasDynamicHelp": false,
|
|
1018
1042
|
"multiple": false,
|
|
1019
1043
|
"type": "option"
|
|
1044
|
+
}
|
|
1045
|
+
},
|
|
1046
|
+
"hasDynamicHelp": false,
|
|
1047
|
+
"hiddenAliases": [],
|
|
1048
|
+
"id": "billing:quota",
|
|
1049
|
+
"pluginAlias": "faces-cli",
|
|
1050
|
+
"pluginName": "faces-cli",
|
|
1051
|
+
"pluginType": "core",
|
|
1052
|
+
"strict": true,
|
|
1053
|
+
"enableJsonFlag": true,
|
|
1054
|
+
"isESM": true,
|
|
1055
|
+
"relativePath": [
|
|
1056
|
+
"dist",
|
|
1057
|
+
"commands",
|
|
1058
|
+
"billing",
|
|
1059
|
+
"quota.js"
|
|
1060
|
+
]
|
|
1061
|
+
},
|
|
1062
|
+
"billing:subscription": {
|
|
1063
|
+
"aliases": [],
|
|
1064
|
+
"args": {},
|
|
1065
|
+
"description": "Show current plan, face count, and renewal date",
|
|
1066
|
+
"flags": {
|
|
1067
|
+
"json": {
|
|
1068
|
+
"description": "Format output as json.",
|
|
1069
|
+
"helpGroup": "GLOBAL",
|
|
1070
|
+
"name": "json",
|
|
1071
|
+
"allowNo": false,
|
|
1072
|
+
"type": "boolean"
|
|
1020
1073
|
},
|
|
1021
|
-
"
|
|
1022
|
-
"description": "
|
|
1023
|
-
"
|
|
1074
|
+
"base-url": {
|
|
1075
|
+
"description": "API base URL",
|
|
1076
|
+
"env": "FACES_BASE_URL",
|
|
1077
|
+
"name": "base-url",
|
|
1024
1078
|
"hasDynamicHelp": false,
|
|
1025
1079
|
"multiple": false,
|
|
1026
|
-
"options": [
|
|
1027
|
-
"api_key",
|
|
1028
|
-
"model",
|
|
1029
|
-
"llm",
|
|
1030
|
-
"date"
|
|
1031
|
-
],
|
|
1032
1080
|
"type": "option"
|
|
1033
1081
|
},
|
|
1034
|
-
"
|
|
1035
|
-
"description": "
|
|
1036
|
-
"
|
|
1082
|
+
"token": {
|
|
1083
|
+
"description": "JWT bearer token",
|
|
1084
|
+
"env": "FACES_TOKEN",
|
|
1085
|
+
"name": "token",
|
|
1037
1086
|
"hasDynamicHelp": false,
|
|
1038
1087
|
"multiple": false,
|
|
1039
1088
|
"type": "option"
|
|
1040
1089
|
},
|
|
1041
|
-
"
|
|
1042
|
-
"description": "
|
|
1043
|
-
"
|
|
1090
|
+
"api-key": {
|
|
1091
|
+
"description": "API key",
|
|
1092
|
+
"env": "FACES_API_KEY",
|
|
1093
|
+
"name": "api-key",
|
|
1044
1094
|
"hasDynamicHelp": false,
|
|
1045
1095
|
"multiple": false,
|
|
1046
1096
|
"type": "option"
|
|
@@ -1048,7 +1098,7 @@
|
|
|
1048
1098
|
},
|
|
1049
1099
|
"hasDynamicHelp": false,
|
|
1050
1100
|
"hiddenAliases": [],
|
|
1051
|
-
"id": "billing:
|
|
1101
|
+
"id": "billing:subscription",
|
|
1052
1102
|
"pluginAlias": "faces-cli",
|
|
1053
1103
|
"pluginName": "faces-cli",
|
|
1054
1104
|
"pluginType": "core",
|
|
@@ -1059,13 +1109,13 @@
|
|
|
1059
1109
|
"dist",
|
|
1060
1110
|
"commands",
|
|
1061
1111
|
"billing",
|
|
1062
|
-
"
|
|
1112
|
+
"subscription.js"
|
|
1063
1113
|
]
|
|
1064
1114
|
},
|
|
1065
|
-
"
|
|
1115
|
+
"billing:topup": {
|
|
1066
1116
|
"aliases": [],
|
|
1067
1117
|
"args": {},
|
|
1068
|
-
"description": "
|
|
1118
|
+
"description": "Top up credit balance using saved payment method",
|
|
1069
1119
|
"flags": {
|
|
1070
1120
|
"json": {
|
|
1071
1121
|
"description": "Format output as json.",
|
|
@@ -1098,22 +1148,25 @@
|
|
|
1098
1148
|
"multiple": false,
|
|
1099
1149
|
"type": "option"
|
|
1100
1150
|
},
|
|
1101
|
-
"
|
|
1102
|
-
"description": "
|
|
1103
|
-
"name": "
|
|
1104
|
-
"
|
|
1105
|
-
"
|
|
1151
|
+
"amount": {
|
|
1152
|
+
"description": "Top-up amount in USD (min $1)",
|
|
1153
|
+
"name": "amount",
|
|
1154
|
+
"required": true,
|
|
1155
|
+
"hasDynamicHelp": false,
|
|
1156
|
+
"multiple": false,
|
|
1157
|
+
"type": "option"
|
|
1106
1158
|
},
|
|
1107
|
-
"
|
|
1108
|
-
"description": "
|
|
1109
|
-
"name": "
|
|
1110
|
-
"
|
|
1111
|
-
"
|
|
1159
|
+
"payment-ref": {
|
|
1160
|
+
"description": "Payment reference (admin/test path)",
|
|
1161
|
+
"name": "payment-ref",
|
|
1162
|
+
"hasDynamicHelp": false,
|
|
1163
|
+
"multiple": false,
|
|
1164
|
+
"type": "option"
|
|
1112
1165
|
}
|
|
1113
1166
|
},
|
|
1114
1167
|
"hasDynamicHelp": false,
|
|
1115
1168
|
"hiddenAliases": [],
|
|
1116
|
-
"id": "
|
|
1169
|
+
"id": "billing:topup",
|
|
1117
1170
|
"pluginAlias": "faces-cli",
|
|
1118
1171
|
"pluginName": "faces-cli",
|
|
1119
1172
|
"pluginType": "core",
|
|
@@ -1123,14 +1176,14 @@
|
|
|
1123
1176
|
"relativePath": [
|
|
1124
1177
|
"dist",
|
|
1125
1178
|
"commands",
|
|
1126
|
-
"
|
|
1127
|
-
"
|
|
1179
|
+
"billing",
|
|
1180
|
+
"topup.js"
|
|
1128
1181
|
]
|
|
1129
1182
|
},
|
|
1130
|
-
"
|
|
1183
|
+
"billing:usage": {
|
|
1131
1184
|
"aliases": [],
|
|
1132
1185
|
"args": {},
|
|
1133
|
-
"description": "
|
|
1186
|
+
"description": "Aggregated usage analytics",
|
|
1134
1187
|
"flags": {
|
|
1135
1188
|
"json": {
|
|
1136
1189
|
"description": "Format output as json.",
|
|
@@ -1162,11 +1215,38 @@
|
|
|
1162
1215
|
"hasDynamicHelp": false,
|
|
1163
1216
|
"multiple": false,
|
|
1164
1217
|
"type": "option"
|
|
1218
|
+
},
|
|
1219
|
+
"group-by": {
|
|
1220
|
+
"description": "Group results",
|
|
1221
|
+
"name": "group-by",
|
|
1222
|
+
"hasDynamicHelp": false,
|
|
1223
|
+
"multiple": false,
|
|
1224
|
+
"options": [
|
|
1225
|
+
"api_key",
|
|
1226
|
+
"model",
|
|
1227
|
+
"llm",
|
|
1228
|
+
"date"
|
|
1229
|
+
],
|
|
1230
|
+
"type": "option"
|
|
1231
|
+
},
|
|
1232
|
+
"from": {
|
|
1233
|
+
"description": "Start date (YYYY-MM-DD)",
|
|
1234
|
+
"name": "from",
|
|
1235
|
+
"hasDynamicHelp": false,
|
|
1236
|
+
"multiple": false,
|
|
1237
|
+
"type": "option"
|
|
1238
|
+
},
|
|
1239
|
+
"to": {
|
|
1240
|
+
"description": "End date (YYYY-MM-DD)",
|
|
1241
|
+
"name": "to",
|
|
1242
|
+
"hasDynamicHelp": false,
|
|
1243
|
+
"multiple": false,
|
|
1244
|
+
"type": "option"
|
|
1165
1245
|
}
|
|
1166
1246
|
},
|
|
1167
1247
|
"hasDynamicHelp": false,
|
|
1168
1248
|
"hiddenAliases": [],
|
|
1169
|
-
"id": "
|
|
1249
|
+
"id": "billing:usage",
|
|
1170
1250
|
"pluginAlias": "faces-cli",
|
|
1171
1251
|
"pluginName": "faces-cli",
|
|
1172
1252
|
"pluginType": "core",
|
|
@@ -1176,8 +1256,8 @@
|
|
|
1176
1256
|
"relativePath": [
|
|
1177
1257
|
"dist",
|
|
1178
1258
|
"commands",
|
|
1179
|
-
"
|
|
1180
|
-
"
|
|
1259
|
+
"billing",
|
|
1260
|
+
"usage.js"
|
|
1181
1261
|
]
|
|
1182
1262
|
},
|
|
1183
1263
|
"chat:chat": {
|
|
@@ -3368,6 +3448,132 @@
|
|
|
3368
3448
|
"make.js"
|
|
3369
3449
|
]
|
|
3370
3450
|
},
|
|
3451
|
+
"compile:doc:pause": {
|
|
3452
|
+
"aliases": [],
|
|
3453
|
+
"args": {
|
|
3454
|
+
"doc_id": {
|
|
3455
|
+
"description": "Document ID",
|
|
3456
|
+
"name": "doc_id",
|
|
3457
|
+
"required": true
|
|
3458
|
+
}
|
|
3459
|
+
},
|
|
3460
|
+
"description": "Pause a running document compilation (preserves progress, resume with make)",
|
|
3461
|
+
"flags": {
|
|
3462
|
+
"json": {
|
|
3463
|
+
"description": "Format output as json.",
|
|
3464
|
+
"helpGroup": "GLOBAL",
|
|
3465
|
+
"name": "json",
|
|
3466
|
+
"allowNo": false,
|
|
3467
|
+
"type": "boolean"
|
|
3468
|
+
},
|
|
3469
|
+
"base-url": {
|
|
3470
|
+
"description": "API base URL",
|
|
3471
|
+
"env": "FACES_BASE_URL",
|
|
3472
|
+
"name": "base-url",
|
|
3473
|
+
"hasDynamicHelp": false,
|
|
3474
|
+
"multiple": false,
|
|
3475
|
+
"type": "option"
|
|
3476
|
+
},
|
|
3477
|
+
"token": {
|
|
3478
|
+
"description": "JWT bearer token",
|
|
3479
|
+
"env": "FACES_TOKEN",
|
|
3480
|
+
"name": "token",
|
|
3481
|
+
"hasDynamicHelp": false,
|
|
3482
|
+
"multiple": false,
|
|
3483
|
+
"type": "option"
|
|
3484
|
+
},
|
|
3485
|
+
"api-key": {
|
|
3486
|
+
"description": "API key",
|
|
3487
|
+
"env": "FACES_API_KEY",
|
|
3488
|
+
"name": "api-key",
|
|
3489
|
+
"hasDynamicHelp": false,
|
|
3490
|
+
"multiple": false,
|
|
3491
|
+
"type": "option"
|
|
3492
|
+
}
|
|
3493
|
+
},
|
|
3494
|
+
"hasDynamicHelp": false,
|
|
3495
|
+
"hiddenAliases": [],
|
|
3496
|
+
"id": "compile:doc:pause",
|
|
3497
|
+
"pluginAlias": "faces-cli",
|
|
3498
|
+
"pluginName": "faces-cli",
|
|
3499
|
+
"pluginType": "core",
|
|
3500
|
+
"strict": true,
|
|
3501
|
+
"enableJsonFlag": true,
|
|
3502
|
+
"isESM": true,
|
|
3503
|
+
"relativePath": [
|
|
3504
|
+
"dist",
|
|
3505
|
+
"commands",
|
|
3506
|
+
"compile",
|
|
3507
|
+
"doc",
|
|
3508
|
+
"pause.js"
|
|
3509
|
+
]
|
|
3510
|
+
},
|
|
3511
|
+
"compile:doc:reset": {
|
|
3512
|
+
"aliases": [],
|
|
3513
|
+
"args": {
|
|
3514
|
+
"doc_id": {
|
|
3515
|
+
"description": "Document ID",
|
|
3516
|
+
"name": "doc_id",
|
|
3517
|
+
"required": true
|
|
3518
|
+
}
|
|
3519
|
+
},
|
|
3520
|
+
"description": "Reset document compilation progress (wipe extraction, keep content)",
|
|
3521
|
+
"flags": {
|
|
3522
|
+
"json": {
|
|
3523
|
+
"description": "Format output as json.",
|
|
3524
|
+
"helpGroup": "GLOBAL",
|
|
3525
|
+
"name": "json",
|
|
3526
|
+
"allowNo": false,
|
|
3527
|
+
"type": "boolean"
|
|
3528
|
+
},
|
|
3529
|
+
"base-url": {
|
|
3530
|
+
"description": "API base URL",
|
|
3531
|
+
"env": "FACES_BASE_URL",
|
|
3532
|
+
"name": "base-url",
|
|
3533
|
+
"hasDynamicHelp": false,
|
|
3534
|
+
"multiple": false,
|
|
3535
|
+
"type": "option"
|
|
3536
|
+
},
|
|
3537
|
+
"token": {
|
|
3538
|
+
"description": "JWT bearer token",
|
|
3539
|
+
"env": "FACES_TOKEN",
|
|
3540
|
+
"name": "token",
|
|
3541
|
+
"hasDynamicHelp": false,
|
|
3542
|
+
"multiple": false,
|
|
3543
|
+
"type": "option"
|
|
3544
|
+
},
|
|
3545
|
+
"api-key": {
|
|
3546
|
+
"description": "API key",
|
|
3547
|
+
"env": "FACES_API_KEY",
|
|
3548
|
+
"name": "api-key",
|
|
3549
|
+
"hasDynamicHelp": false,
|
|
3550
|
+
"multiple": false,
|
|
3551
|
+
"type": "option"
|
|
3552
|
+
},
|
|
3553
|
+
"yes": {
|
|
3554
|
+
"description": "Skip confirmation",
|
|
3555
|
+
"name": "yes",
|
|
3556
|
+
"allowNo": false,
|
|
3557
|
+
"type": "boolean"
|
|
3558
|
+
}
|
|
3559
|
+
},
|
|
3560
|
+
"hasDynamicHelp": false,
|
|
3561
|
+
"hiddenAliases": [],
|
|
3562
|
+
"id": "compile:doc:reset",
|
|
3563
|
+
"pluginAlias": "faces-cli",
|
|
3564
|
+
"pluginName": "faces-cli",
|
|
3565
|
+
"pluginType": "core",
|
|
3566
|
+
"strict": true,
|
|
3567
|
+
"enableJsonFlag": true,
|
|
3568
|
+
"isESM": true,
|
|
3569
|
+
"relativePath": [
|
|
3570
|
+
"dist",
|
|
3571
|
+
"commands",
|
|
3572
|
+
"compile",
|
|
3573
|
+
"doc",
|
|
3574
|
+
"reset.js"
|
|
3575
|
+
]
|
|
3576
|
+
},
|
|
3371
3577
|
"compile:thread:create": {
|
|
3372
3578
|
"aliases": [],
|
|
3373
3579
|
"args": {
|
|
@@ -3838,6 +4044,132 @@
|
|
|
3838
4044
|
"message.js"
|
|
3839
4045
|
]
|
|
3840
4046
|
},
|
|
4047
|
+
"compile:thread:pause": {
|
|
4048
|
+
"aliases": [],
|
|
4049
|
+
"args": {
|
|
4050
|
+
"thread_id": {
|
|
4051
|
+
"description": "Thread ID",
|
|
4052
|
+
"name": "thread_id",
|
|
4053
|
+
"required": true
|
|
4054
|
+
}
|
|
4055
|
+
},
|
|
4056
|
+
"description": "Pause a running thread compilation (preserves progress, resume with make)",
|
|
4057
|
+
"flags": {
|
|
4058
|
+
"json": {
|
|
4059
|
+
"description": "Format output as json.",
|
|
4060
|
+
"helpGroup": "GLOBAL",
|
|
4061
|
+
"name": "json",
|
|
4062
|
+
"allowNo": false,
|
|
4063
|
+
"type": "boolean"
|
|
4064
|
+
},
|
|
4065
|
+
"base-url": {
|
|
4066
|
+
"description": "API base URL",
|
|
4067
|
+
"env": "FACES_BASE_URL",
|
|
4068
|
+
"name": "base-url",
|
|
4069
|
+
"hasDynamicHelp": false,
|
|
4070
|
+
"multiple": false,
|
|
4071
|
+
"type": "option"
|
|
4072
|
+
},
|
|
4073
|
+
"token": {
|
|
4074
|
+
"description": "JWT bearer token",
|
|
4075
|
+
"env": "FACES_TOKEN",
|
|
4076
|
+
"name": "token",
|
|
4077
|
+
"hasDynamicHelp": false,
|
|
4078
|
+
"multiple": false,
|
|
4079
|
+
"type": "option"
|
|
4080
|
+
},
|
|
4081
|
+
"api-key": {
|
|
4082
|
+
"description": "API key",
|
|
4083
|
+
"env": "FACES_API_KEY",
|
|
4084
|
+
"name": "api-key",
|
|
4085
|
+
"hasDynamicHelp": false,
|
|
4086
|
+
"multiple": false,
|
|
4087
|
+
"type": "option"
|
|
4088
|
+
}
|
|
4089
|
+
},
|
|
4090
|
+
"hasDynamicHelp": false,
|
|
4091
|
+
"hiddenAliases": [],
|
|
4092
|
+
"id": "compile:thread:pause",
|
|
4093
|
+
"pluginAlias": "faces-cli",
|
|
4094
|
+
"pluginName": "faces-cli",
|
|
4095
|
+
"pluginType": "core",
|
|
4096
|
+
"strict": true,
|
|
4097
|
+
"enableJsonFlag": true,
|
|
4098
|
+
"isESM": true,
|
|
4099
|
+
"relativePath": [
|
|
4100
|
+
"dist",
|
|
4101
|
+
"commands",
|
|
4102
|
+
"compile",
|
|
4103
|
+
"thread",
|
|
4104
|
+
"pause.js"
|
|
4105
|
+
]
|
|
4106
|
+
},
|
|
4107
|
+
"compile:thread:reset": {
|
|
4108
|
+
"aliases": [],
|
|
4109
|
+
"args": {
|
|
4110
|
+
"thread_id": {
|
|
4111
|
+
"description": "Thread ID",
|
|
4112
|
+
"name": "thread_id",
|
|
4113
|
+
"required": true
|
|
4114
|
+
}
|
|
4115
|
+
},
|
|
4116
|
+
"description": "Reset thread compilation progress (wipe extraction, keep source messages)",
|
|
4117
|
+
"flags": {
|
|
4118
|
+
"json": {
|
|
4119
|
+
"description": "Format output as json.",
|
|
4120
|
+
"helpGroup": "GLOBAL",
|
|
4121
|
+
"name": "json",
|
|
4122
|
+
"allowNo": false,
|
|
4123
|
+
"type": "boolean"
|
|
4124
|
+
},
|
|
4125
|
+
"base-url": {
|
|
4126
|
+
"description": "API base URL",
|
|
4127
|
+
"env": "FACES_BASE_URL",
|
|
4128
|
+
"name": "base-url",
|
|
4129
|
+
"hasDynamicHelp": false,
|
|
4130
|
+
"multiple": false,
|
|
4131
|
+
"type": "option"
|
|
4132
|
+
},
|
|
4133
|
+
"token": {
|
|
4134
|
+
"description": "JWT bearer token",
|
|
4135
|
+
"env": "FACES_TOKEN",
|
|
4136
|
+
"name": "token",
|
|
4137
|
+
"hasDynamicHelp": false,
|
|
4138
|
+
"multiple": false,
|
|
4139
|
+
"type": "option"
|
|
4140
|
+
},
|
|
4141
|
+
"api-key": {
|
|
4142
|
+
"description": "API key",
|
|
4143
|
+
"env": "FACES_API_KEY",
|
|
4144
|
+
"name": "api-key",
|
|
4145
|
+
"hasDynamicHelp": false,
|
|
4146
|
+
"multiple": false,
|
|
4147
|
+
"type": "option"
|
|
4148
|
+
},
|
|
4149
|
+
"yes": {
|
|
4150
|
+
"description": "Skip confirmation",
|
|
4151
|
+
"name": "yes",
|
|
4152
|
+
"allowNo": false,
|
|
4153
|
+
"type": "boolean"
|
|
4154
|
+
}
|
|
4155
|
+
},
|
|
4156
|
+
"hasDynamicHelp": false,
|
|
4157
|
+
"hiddenAliases": [],
|
|
4158
|
+
"id": "compile:thread:reset",
|
|
4159
|
+
"pluginAlias": "faces-cli",
|
|
4160
|
+
"pluginName": "faces-cli",
|
|
4161
|
+
"pluginType": "core",
|
|
4162
|
+
"strict": true,
|
|
4163
|
+
"enableJsonFlag": true,
|
|
4164
|
+
"isESM": true,
|
|
4165
|
+
"relativePath": [
|
|
4166
|
+
"dist",
|
|
4167
|
+
"commands",
|
|
4168
|
+
"compile",
|
|
4169
|
+
"thread",
|
|
4170
|
+
"reset.js"
|
|
4171
|
+
]
|
|
4172
|
+
},
|
|
3841
4173
|
"compile:thread:sync": {
|
|
3842
4174
|
"aliases": [],
|
|
3843
4175
|
"args": {
|
|
@@ -3899,5 +4231,5 @@
|
|
|
3899
4231
|
]
|
|
3900
4232
|
}
|
|
3901
4233
|
},
|
|
3902
|
-
"version": "1.5.
|
|
4234
|
+
"version": "1.5.7"
|
|
3903
4235
|
}
|