faces-cli 1.4.3 → 1.4.4
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/catalog.d.ts +1 -1
- package/dist/catalog.js +1 -1
- package/dist/client.js +5 -4
- package/dist/commands/catalog/doctor.js +25 -25
- package/dist/commands/chat/chat.js +1 -1
- package/dist/commands/compile/doc/create.js +2 -2
- package/dist/commands/compile/doc/index.js +2 -2
- package/dist/commands/compile/doc/list.js +2 -2
- package/dist/commands/compile/import.js +1 -1
- package/dist/commands/compile/thread/create.js +2 -2
- package/dist/commands/compile/thread/list.js +2 -2
- package/dist/commands/face/create.d.ts +1 -1
- package/dist/commands/face/create.js +3 -3
- package/dist/commands/face/delete.js +1 -1
- package/dist/commands/face/diff.js +1 -1
- package/dist/commands/face/get.js +3 -3
- package/dist/commands/face/list.js +2 -2
- package/dist/commands/face/neighbors.js +1 -1
- package/dist/commands/face/update.js +1 -1
- package/dist/commands/face/upload.js +1 -1
- package/dist/commands/keys/create.js +1 -1
- package/oclif.manifest.json +20 -20
- package/package.json +1 -1
package/dist/catalog.d.ts
CHANGED
package/dist/catalog.js
CHANGED
|
@@ -82,7 +82,7 @@ export class CatalogService {
|
|
|
82
82
|
if (!this.isEnabled())
|
|
83
83
|
return;
|
|
84
84
|
try {
|
|
85
|
-
const username = faceData.
|
|
85
|
+
const username = faceData.alias;
|
|
86
86
|
const dir = path.join(CATALOG_DIR, username);
|
|
87
87
|
fs.mkdirSync(dir, { recursive: true });
|
|
88
88
|
const filePath = path.join(dir, 'FACE.md');
|
package/dist/client.js
CHANGED
|
@@ -21,16 +21,17 @@ export class FacesClient {
|
|
|
21
21
|
authHeader(requireJwt = false) {
|
|
22
22
|
if (requireJwt) {
|
|
23
23
|
if (!this.token) {
|
|
24
|
-
process.stderr.write('Error: JWT login required. Run: faces auth
|
|
24
|
+
process.stderr.write('Error: JWT login required. Run: faces auth:login\n');
|
|
25
25
|
process.exit(1);
|
|
26
26
|
}
|
|
27
27
|
return { Authorization: `Bearer ${this.token}` };
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
return { Authorization: `Bearer ${this.token}` };
|
|
29
|
+
// API key takes priority over saved JWT (explicit key = deliberate choice)
|
|
31
30
|
if (this.apiKey)
|
|
32
31
|
return { Authorization: `Bearer ${this.apiKey}` };
|
|
33
|
-
|
|
32
|
+
if (this.token)
|
|
33
|
+
return { Authorization: `Bearer ${this.token}` };
|
|
34
|
+
process.stderr.write('Error: Authentication required. Run: faces auth:login or set FACES_API_KEY\n');
|
|
34
35
|
process.exit(1);
|
|
35
36
|
}
|
|
36
37
|
wrapNetworkError(err, path) {
|
|
@@ -24,10 +24,10 @@ export default class CatalogDoctor extends BaseCommand {
|
|
|
24
24
|
// List endpoint returns minimal fields; fetch full details for each
|
|
25
25
|
remoteFaces = await Promise.all(arr.map(async (f) => {
|
|
26
26
|
try {
|
|
27
|
-
return await client.get(`/v1/faces/${f.
|
|
27
|
+
return await client.get(`/v1/faces/${f.alias}`);
|
|
28
28
|
}
|
|
29
29
|
catch {
|
|
30
|
-
return { ...f, uid: f.
|
|
30
|
+
return { ...f, uid: f.alias };
|
|
31
31
|
}
|
|
32
32
|
}));
|
|
33
33
|
}
|
|
@@ -36,20 +36,20 @@ export default class CatalogDoctor extends BaseCommand {
|
|
|
36
36
|
this.error(`Error (${err.statusCode}): ${err.message}`);
|
|
37
37
|
throw err;
|
|
38
38
|
}
|
|
39
|
-
// Build map of remote faces by
|
|
40
|
-
const
|
|
39
|
+
// Build map of remote faces by alias
|
|
40
|
+
const remoteByAlias = new Map();
|
|
41
41
|
for (const f of remoteFaces) {
|
|
42
|
-
|
|
42
|
+
remoteByAlias.set(f.alias, f);
|
|
43
43
|
}
|
|
44
44
|
// Read local catalog
|
|
45
|
-
const
|
|
45
|
+
const localAliases = new Set();
|
|
46
46
|
const localFrontmatters = new Map();
|
|
47
47
|
try {
|
|
48
48
|
if (fs.existsSync(CATALOG_DIR)) {
|
|
49
49
|
for (const dirent of fs.readdirSync(CATALOG_DIR, { withFileTypes: true })) {
|
|
50
50
|
if (!dirent.isDirectory())
|
|
51
51
|
continue;
|
|
52
|
-
|
|
52
|
+
localAliases.add(dirent.name);
|
|
53
53
|
const faceMdPath = path.join(CATALOG_DIR, dirent.name, 'FACE.md');
|
|
54
54
|
if (fs.existsSync(faceMdPath)) {
|
|
55
55
|
const content = fs.readFileSync(faceMdPath, 'utf8');
|
|
@@ -83,23 +83,23 @@ export default class CatalogDoctor extends BaseCommand {
|
|
|
83
83
|
const stale = [];
|
|
84
84
|
const noDescription = [];
|
|
85
85
|
const orphaned = [];
|
|
86
|
-
for (const [
|
|
87
|
-
if (!
|
|
86
|
+
for (const [alias, remote] of remoteByAlias) {
|
|
87
|
+
if (!localAliases.has(alias)) {
|
|
88
88
|
missing.push(remote);
|
|
89
89
|
}
|
|
90
90
|
else {
|
|
91
|
-
const local = localFrontmatters.get(
|
|
91
|
+
const local = localFrontmatters.get(alias);
|
|
92
92
|
if (local && local.name !== remote.name) {
|
|
93
93
|
stale.push(remote);
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
|
-
const local = localFrontmatters.get(
|
|
96
|
+
const local = localFrontmatters.get(alias);
|
|
97
97
|
if (!local?.description)
|
|
98
|
-
noDescription.push(
|
|
98
|
+
noDescription.push(alias);
|
|
99
99
|
}
|
|
100
|
-
for (const
|
|
101
|
-
if (!
|
|
102
|
-
orphaned.push(
|
|
100
|
+
for (const alias of localAliases) {
|
|
101
|
+
if (!remoteByAlias.has(alias))
|
|
102
|
+
orphaned.push(alias);
|
|
103
103
|
}
|
|
104
104
|
const doFix = flags.fix || flags.generate;
|
|
105
105
|
if (!doFix) {
|
|
@@ -134,16 +134,16 @@ export default class CatalogDoctor extends BaseCommand {
|
|
|
134
134
|
fixed++;
|
|
135
135
|
}
|
|
136
136
|
// Also refresh faces that exist but might have stale attributes
|
|
137
|
-
for (const [
|
|
138
|
-
if (!missing.some((f) => f.
|
|
137
|
+
for (const [alias, remote] of remoteByAlias) {
|
|
138
|
+
if (!missing.some((f) => f.alias === alias) && !stale.some((f) => f.alias === alias)) {
|
|
139
139
|
// Face exists locally and name matches — still refresh attributes
|
|
140
140
|
catalog.writeFace(remote);
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
// Remove orphans
|
|
144
144
|
let removed = 0;
|
|
145
|
-
for (const
|
|
146
|
-
catalog.deleteFace(
|
|
145
|
+
for (const alias of orphaned) {
|
|
146
|
+
catalog.deleteFace(alias);
|
|
147
147
|
removed++;
|
|
148
148
|
}
|
|
149
149
|
this.log(`Fixed ${fixed} catalog entries, removed ${removed} orphans.`);
|
|
@@ -153,13 +153,13 @@ export default class CatalogDoctor extends BaseCommand {
|
|
|
153
153
|
const catalogModel = cfg.catalog_model ?? 'gpt-5-nano';
|
|
154
154
|
this.log(`Generating descriptions for ${noDescription.length} face(s) via ${catalogModel}...`);
|
|
155
155
|
let generated = 0;
|
|
156
|
-
for (const
|
|
157
|
-
const remote =
|
|
156
|
+
for (const alias of noDescription) {
|
|
157
|
+
const remote = remoteByAlias.get(alias);
|
|
158
158
|
if (!remote)
|
|
159
159
|
continue;
|
|
160
160
|
try {
|
|
161
161
|
const prompt = 'Describe yourself in one paragraph. Who are you, what do you care about, and what kind of questions are you best suited to answer?';
|
|
162
|
-
const faceModel = `${
|
|
162
|
+
const faceModel = `${alias}@${catalogModel}`;
|
|
163
163
|
const isAnthropic = catalogModel.startsWith('claude');
|
|
164
164
|
let text;
|
|
165
165
|
if (isAnthropic) {
|
|
@@ -177,15 +177,15 @@ export default class CatalogDoctor extends BaseCommand {
|
|
|
177
177
|
if (text) {
|
|
178
178
|
catalog.writeFace(remote, text.trim());
|
|
179
179
|
generated++;
|
|
180
|
-
this.log(` ${
|
|
180
|
+
this.log(` ${alias}: done`);
|
|
181
181
|
}
|
|
182
182
|
else {
|
|
183
|
-
this.log(` ${
|
|
183
|
+
this.log(` ${alias}: no response`);
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
186
|
catch (err) {
|
|
187
187
|
const msg = err instanceof FacesAPIError ? `Error (${err.statusCode}): ${err.message}` : String(err);
|
|
188
|
-
this.log(` ${
|
|
188
|
+
this.log(` ${alias}: failed — ${msg}`);
|
|
189
189
|
}
|
|
190
190
|
}
|
|
191
191
|
this.log(`Generated ${generated} description(s).`);
|
|
@@ -22,7 +22,7 @@ export default class ChatChat extends BaseCommand {
|
|
|
22
22
|
responses: Flags.boolean({ description: 'Use OpenAI Responses API instead of Chat Completions', default: false }),
|
|
23
23
|
};
|
|
24
24
|
static args = {
|
|
25
|
-
face_username: Args.string({ description: 'Face
|
|
25
|
+
face_username: Args.string({ description: 'Face alias (or alias@model)', required: true }),
|
|
26
26
|
};
|
|
27
27
|
async run() {
|
|
28
28
|
const { args, flags } = await this.parse(ChatChat);
|
|
@@ -12,7 +12,7 @@ export default class CompileDocCreate extends BaseCommand {
|
|
|
12
12
|
perspective: Flags.string({ description: 'Perspective (first-person or third-person)', options: ['first-person', 'third-person'], default: 'first-person' }),
|
|
13
13
|
};
|
|
14
14
|
static args = {
|
|
15
|
-
face_id: Args.string({ description: 'Face
|
|
15
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
16
16
|
};
|
|
17
17
|
async run() {
|
|
18
18
|
const { args, flags } = await this.parse(CompileDocCreate);
|
|
@@ -25,7 +25,7 @@ export default class CompileDocCreate extends BaseCommand {
|
|
|
25
25
|
}
|
|
26
26
|
if (!content)
|
|
27
27
|
this.error('Provide --content or --file.');
|
|
28
|
-
const payload = {
|
|
28
|
+
const payload = { alias: args.face_id, content };
|
|
29
29
|
if (flags.label)
|
|
30
30
|
payload.label = flags.label;
|
|
31
31
|
if (flags.perspective)
|
|
@@ -18,7 +18,7 @@ export default class CompileDoc extends BaseCommand {
|
|
|
18
18
|
timeout: Flags.integer({ description: 'Compile timeout in seconds (default: 600)', default: 600 }),
|
|
19
19
|
};
|
|
20
20
|
static args = {
|
|
21
|
-
face_id: Args.string({ description: 'Face
|
|
21
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
22
22
|
};
|
|
23
23
|
async run() {
|
|
24
24
|
const { args, flags } = await this.parse(CompileDoc);
|
|
@@ -38,7 +38,7 @@ export default class CompileDoc extends BaseCommand {
|
|
|
38
38
|
process.stderr.write('Creating document... ');
|
|
39
39
|
let doc;
|
|
40
40
|
try {
|
|
41
|
-
const payload = {
|
|
41
|
+
const payload = { alias: args.face_id, content };
|
|
42
42
|
if (flags.label)
|
|
43
43
|
payload.label = flags.label;
|
|
44
44
|
if (flags.perspective)
|
|
@@ -7,14 +7,14 @@ export default class CompileDocList extends BaseCommand {
|
|
|
7
7
|
...BaseCommand.baseFlags,
|
|
8
8
|
};
|
|
9
9
|
static args = {
|
|
10
|
-
face_id: Args.string({ description: 'Face
|
|
10
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
11
11
|
};
|
|
12
12
|
async run() {
|
|
13
13
|
const { args, flags } = await this.parse(CompileDocList);
|
|
14
14
|
const client = this.makeClient(flags);
|
|
15
15
|
let data;
|
|
16
16
|
try {
|
|
17
|
-
data = await client.get('/v1/compile/documents', { params: {
|
|
17
|
+
data = await client.get('/v1/compile/documents', { params: { alias: args.face_id } });
|
|
18
18
|
}
|
|
19
19
|
catch (err) {
|
|
20
20
|
if (err instanceof FacesAPIError)
|
|
@@ -24,7 +24,7 @@ export default class CompileImport extends BaseCommand {
|
|
|
24
24
|
}),
|
|
25
25
|
};
|
|
26
26
|
static args = {
|
|
27
|
-
face_id: Args.string({ description: 'Face
|
|
27
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
28
28
|
};
|
|
29
29
|
async run() {
|
|
30
30
|
const { args, flags } = await this.parse(CompileImport);
|
|
@@ -8,12 +8,12 @@ export default class CompileThreadCreate extends BaseCommand {
|
|
|
8
8
|
label: Flags.string({ description: 'Thread label' }),
|
|
9
9
|
};
|
|
10
10
|
static args = {
|
|
11
|
-
face_id: Args.string({ description: 'Face
|
|
11
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
12
12
|
};
|
|
13
13
|
async run() {
|
|
14
14
|
const { args, flags } = await this.parse(CompileThreadCreate);
|
|
15
15
|
const client = this.makeClient(flags);
|
|
16
|
-
const payload = {
|
|
16
|
+
const payload = { alias: args.face_id };
|
|
17
17
|
if (flags.label)
|
|
18
18
|
payload.label = flags.label;
|
|
19
19
|
let data;
|
|
@@ -7,14 +7,14 @@ export default class CompileThreadList extends BaseCommand {
|
|
|
7
7
|
...BaseCommand.baseFlags,
|
|
8
8
|
};
|
|
9
9
|
static args = {
|
|
10
|
-
face_id: Args.string({ description: 'Face
|
|
10
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
11
11
|
};
|
|
12
12
|
async run() {
|
|
13
13
|
const { args, flags } = await this.parse(CompileThreadList);
|
|
14
14
|
const client = this.makeClient(flags);
|
|
15
15
|
let data;
|
|
16
16
|
try {
|
|
17
|
-
data = await client.get('/v1/compile/threads', { params: {
|
|
17
|
+
data = await client.get('/v1/compile/threads', { params: { alias: args.face_id } });
|
|
18
18
|
}
|
|
19
19
|
catch (err) {
|
|
20
20
|
if (err instanceof FacesAPIError)
|
|
@@ -3,7 +3,7 @@ export default class FaceCreate extends BaseCommand {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static flags: {
|
|
5
5
|
name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
-
|
|
6
|
+
alias: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
7
|
description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
'default-model': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
formula: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
@@ -8,10 +8,10 @@ export default class FaceCreate extends BaseCommand {
|
|
|
8
8
|
static flags = {
|
|
9
9
|
...BaseCommand.baseFlags,
|
|
10
10
|
name: Flags.string({ description: 'Display name', required: true }),
|
|
11
|
-
|
|
11
|
+
alias: Flags.string({ description: 'Unique alias slug', required: true }),
|
|
12
12
|
description: Flags.string({ description: 'Description for local catalog' }),
|
|
13
13
|
'default-model': Flags.string({ description: 'Default LLM for chat (e.g. gpt-4o-mini, claude-sonnet-4-6)' }),
|
|
14
|
-
formula: Flags.string({ description: 'Boolean formula over owned concrete face
|
|
14
|
+
formula: Flags.string({ description: 'Boolean formula over owned concrete face aliases (e.g. "a | b", "(a | b) - c"). Creates a composite face.' }),
|
|
15
15
|
attr: Flags.string({ description: 'Attribute KEY=VALUE (repeatable)', multiple: true }),
|
|
16
16
|
tool: Flags.string({ description: 'Tool name to enable (repeatable)', multiple: true }),
|
|
17
17
|
};
|
|
@@ -22,7 +22,7 @@ export default class FaceCreate extends BaseCommand {
|
|
|
22
22
|
if (flags.formula && (flags.attr?.length || flags.tool?.length)) {
|
|
23
23
|
this.error('--formula cannot be combined with --attr or --tool. Composite faces do not have compiled knowledge.');
|
|
24
24
|
}
|
|
25
|
-
const payload = { name: flags.name,
|
|
25
|
+
const payload = { name: flags.name, alias: flags.alias };
|
|
26
26
|
if (flags.formula) {
|
|
27
27
|
payload.formula = flags.formula;
|
|
28
28
|
}
|
|
@@ -10,7 +10,7 @@ export default class FaceDelete extends BaseCommand {
|
|
|
10
10
|
yes: Flags.boolean({ description: 'Skip confirmation', default: false }),
|
|
11
11
|
};
|
|
12
12
|
static args = {
|
|
13
|
-
face_id: Args.string({ description: 'Face
|
|
13
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
14
14
|
};
|
|
15
15
|
async run() {
|
|
16
16
|
const { args, flags } = await this.parse(FaceDelete);
|
|
@@ -6,7 +6,7 @@ export default class FaceDiff extends BaseCommand {
|
|
|
6
6
|
static flags = {
|
|
7
7
|
...BaseCommand.baseFlags,
|
|
8
8
|
face: Flags.string({
|
|
9
|
-
description: 'Face
|
|
9
|
+
description: 'Face alias to include (repeatable, min 2)',
|
|
10
10
|
multiple: true,
|
|
11
11
|
required: true,
|
|
12
12
|
}),
|
|
@@ -3,12 +3,12 @@ import { BaseCommand } from '../../base.js';
|
|
|
3
3
|
import { FacesAPIError } from '../../client.js';
|
|
4
4
|
import { flattenBasicFacts } from '../../utils.js';
|
|
5
5
|
export default class FaceGet extends BaseCommand {
|
|
6
|
-
static description = 'Get details for a face by
|
|
6
|
+
static description = 'Get details for a face by alias';
|
|
7
7
|
static flags = {
|
|
8
8
|
...BaseCommand.baseFlags,
|
|
9
9
|
};
|
|
10
10
|
static args = {
|
|
11
|
-
face_id: Args.string({ description: 'Face
|
|
11
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
12
12
|
};
|
|
13
13
|
async run() {
|
|
14
14
|
const { args, flags } = await this.parse(FaceGet);
|
|
@@ -26,7 +26,7 @@ export default class FaceGet extends BaseCommand {
|
|
|
26
26
|
if (f.basic_facts)
|
|
27
27
|
f.basic_facts = flattenBasicFacts(f.basic_facts);
|
|
28
28
|
if (!this.jsonEnabled()) {
|
|
29
|
-
this.log(`
|
|
29
|
+
this.log(`alias: ${f.alias}`);
|
|
30
30
|
this.log(`uid: ${f.uid}`);
|
|
31
31
|
this.log(`name: ${f.name}`);
|
|
32
32
|
this.log(`owned_by: ${f.owned_by}`);
|
|
@@ -31,7 +31,7 @@ export default class FaceList extends BaseCommand {
|
|
|
31
31
|
this.log('(no faces)');
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
|
-
const
|
|
34
|
+
const aliasWidth = Math.max(...faces.map(f => f.alias.length));
|
|
35
35
|
const nameWidth = Math.max(...faces.map(f => f.name.length));
|
|
36
36
|
for (const f of faces) {
|
|
37
37
|
let suffix = '';
|
|
@@ -44,7 +44,7 @@ export default class FaceList extends BaseCommand {
|
|
|
44
44
|
const profile = f.profile_token_count ?? 0;
|
|
45
45
|
suffix = ` [profile: ${profile} tok, components: ${total}]`;
|
|
46
46
|
}
|
|
47
|
-
this.log(`${f.
|
|
47
|
+
this.log(`${f.alias.padEnd(aliasWidth)} ${f.name.padEnd(nameWidth)}${suffix}`);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -23,7 +23,7 @@ export default class FaceNeighbors extends BaseCommand {
|
|
|
23
23
|
}),
|
|
24
24
|
};
|
|
25
25
|
static args = {
|
|
26
|
-
face_id: Args.string({ description: 'Face
|
|
26
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
27
27
|
};
|
|
28
28
|
async run() {
|
|
29
29
|
const { args, flags } = await this.parse(FaceNeighbors);
|
|
@@ -15,7 +15,7 @@ export default class FaceUpdate extends BaseCommand {
|
|
|
15
15
|
tool: Flags.string({ description: 'Tool names to set (replaces list, repeatable)', multiple: true }),
|
|
16
16
|
};
|
|
17
17
|
static args = {
|
|
18
|
-
face_id: Args.string({ description: 'Face
|
|
18
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
19
19
|
};
|
|
20
20
|
async run() {
|
|
21
21
|
const { args, flags } = await this.parse(FaceUpdate);
|
|
@@ -23,7 +23,7 @@ export default class FaceUpload extends BaseCommand {
|
|
|
23
23
|
}),
|
|
24
24
|
};
|
|
25
25
|
static args = {
|
|
26
|
-
face_id: Args.string({ description: 'Face
|
|
26
|
+
face_id: Args.string({ description: 'Face alias', required: true }),
|
|
27
27
|
};
|
|
28
28
|
async run() {
|
|
29
29
|
const { args, flags } = await this.parse(FaceUpload);
|
|
@@ -8,7 +8,7 @@ export default class KeysCreate extends BaseCommand {
|
|
|
8
8
|
name: Flags.string({ description: 'Key name/label', required: true }),
|
|
9
9
|
'expires-days': Flags.integer({ description: 'Expiry in days (omit for no expiry)' }),
|
|
10
10
|
budget: Flags.string({ description: 'Spend budget in USD' }),
|
|
11
|
-
face: Flags.string({ description: 'Allowed face
|
|
11
|
+
face: Flags.string({ description: 'Allowed face alias (repeatable)', multiple: true }),
|
|
12
12
|
model: Flags.string({ description: 'Allowed model name (repeatable)', multiple: true }),
|
|
13
13
|
};
|
|
14
14
|
async run() {
|
package/oclif.manifest.json
CHANGED
|
@@ -1172,7 +1172,7 @@
|
|
|
1172
1172
|
"aliases": [],
|
|
1173
1173
|
"args": {
|
|
1174
1174
|
"face_username": {
|
|
1175
|
-
"description": "Face
|
|
1175
|
+
"description": "Face alias (or alias@model)",
|
|
1176
1176
|
"name": "face_username",
|
|
1177
1177
|
"required": true
|
|
1178
1178
|
}
|
|
@@ -1457,7 +1457,7 @@
|
|
|
1457
1457
|
"aliases": [],
|
|
1458
1458
|
"args": {
|
|
1459
1459
|
"face_id": {
|
|
1460
|
-
"description": "Face
|
|
1460
|
+
"description": "Face alias",
|
|
1461
1461
|
"name": "face_id",
|
|
1462
1462
|
"required": true
|
|
1463
1463
|
}
|
|
@@ -1771,9 +1771,9 @@
|
|
|
1771
1771
|
"multiple": false,
|
|
1772
1772
|
"type": "option"
|
|
1773
1773
|
},
|
|
1774
|
-
"
|
|
1775
|
-
"description": "Unique
|
|
1776
|
-
"name": "
|
|
1774
|
+
"alias": {
|
|
1775
|
+
"description": "Unique alias slug",
|
|
1776
|
+
"name": "alias",
|
|
1777
1777
|
"required": true,
|
|
1778
1778
|
"hasDynamicHelp": false,
|
|
1779
1779
|
"multiple": false,
|
|
@@ -1794,7 +1794,7 @@
|
|
|
1794
1794
|
"type": "option"
|
|
1795
1795
|
},
|
|
1796
1796
|
"formula": {
|
|
1797
|
-
"description": "Boolean formula over owned concrete face
|
|
1797
|
+
"description": "Boolean formula over owned concrete face aliases (e.g. \"a | b\", \"(a | b) - c\"). Creates a composite face.",
|
|
1798
1798
|
"name": "formula",
|
|
1799
1799
|
"hasDynamicHelp": false,
|
|
1800
1800
|
"multiple": false,
|
|
@@ -1835,7 +1835,7 @@
|
|
|
1835
1835
|
"aliases": [],
|
|
1836
1836
|
"args": {
|
|
1837
1837
|
"face_id": {
|
|
1838
|
-
"description": "Face
|
|
1838
|
+
"description": "Face alias",
|
|
1839
1839
|
"name": "face_id",
|
|
1840
1840
|
"required": true
|
|
1841
1841
|
}
|
|
@@ -1933,7 +1933,7 @@
|
|
|
1933
1933
|
"type": "option"
|
|
1934
1934
|
},
|
|
1935
1935
|
"face": {
|
|
1936
|
-
"description": "Face
|
|
1936
|
+
"description": "Face alias to include (repeatable, min 2)",
|
|
1937
1937
|
"name": "face",
|
|
1938
1938
|
"required": true,
|
|
1939
1939
|
"hasDynamicHelp": false,
|
|
@@ -1961,12 +1961,12 @@
|
|
|
1961
1961
|
"aliases": [],
|
|
1962
1962
|
"args": {
|
|
1963
1963
|
"face_id": {
|
|
1964
|
-
"description": "Face
|
|
1964
|
+
"description": "Face alias",
|
|
1965
1965
|
"name": "face_id",
|
|
1966
1966
|
"required": true
|
|
1967
1967
|
}
|
|
1968
1968
|
},
|
|
1969
|
-
"description": "Get details for a face by
|
|
1969
|
+
"description": "Get details for a face by alias",
|
|
1970
1970
|
"flags": {
|
|
1971
1971
|
"json": {
|
|
1972
1972
|
"description": "Format output as json.",
|
|
@@ -2073,7 +2073,7 @@
|
|
|
2073
2073
|
"aliases": [],
|
|
2074
2074
|
"args": {
|
|
2075
2075
|
"face_id": {
|
|
2076
|
-
"description": "Face
|
|
2076
|
+
"description": "Face alias",
|
|
2077
2077
|
"name": "face_id",
|
|
2078
2078
|
"required": true
|
|
2079
2079
|
}
|
|
@@ -2219,7 +2219,7 @@
|
|
|
2219
2219
|
"aliases": [],
|
|
2220
2220
|
"args": {
|
|
2221
2221
|
"face_id": {
|
|
2222
|
-
"description": "Face
|
|
2222
|
+
"description": "Face alias",
|
|
2223
2223
|
"name": "face_id",
|
|
2224
2224
|
"required": true
|
|
2225
2225
|
}
|
|
@@ -2320,7 +2320,7 @@
|
|
|
2320
2320
|
"aliases": [],
|
|
2321
2321
|
"args": {
|
|
2322
2322
|
"face_id": {
|
|
2323
|
-
"description": "Face
|
|
2323
|
+
"description": "Face alias",
|
|
2324
2324
|
"name": "face_id",
|
|
2325
2325
|
"required": true
|
|
2326
2326
|
}
|
|
@@ -2473,7 +2473,7 @@
|
|
|
2473
2473
|
"type": "option"
|
|
2474
2474
|
},
|
|
2475
2475
|
"face": {
|
|
2476
|
-
"description": "Allowed face
|
|
2476
|
+
"description": "Allowed face alias (repeatable)",
|
|
2477
2477
|
"name": "face",
|
|
2478
2478
|
"hasDynamicHelp": false,
|
|
2479
2479
|
"multiple": true,
|
|
@@ -2704,7 +2704,7 @@
|
|
|
2704
2704
|
"aliases": [],
|
|
2705
2705
|
"args": {
|
|
2706
2706
|
"face_id": {
|
|
2707
|
-
"description": "Face
|
|
2707
|
+
"description": "Face alias",
|
|
2708
2708
|
"name": "face_id",
|
|
2709
2709
|
"required": true
|
|
2710
2710
|
}
|
|
@@ -3009,7 +3009,7 @@
|
|
|
3009
3009
|
"aliases": [],
|
|
3010
3010
|
"args": {
|
|
3011
3011
|
"face_id": {
|
|
3012
|
-
"description": "Face
|
|
3012
|
+
"description": "Face alias",
|
|
3013
3013
|
"name": "face_id",
|
|
3014
3014
|
"required": true
|
|
3015
3015
|
}
|
|
@@ -3110,7 +3110,7 @@
|
|
|
3110
3110
|
"aliases": [],
|
|
3111
3111
|
"args": {
|
|
3112
3112
|
"face_id": {
|
|
3113
|
-
"description": "Face
|
|
3113
|
+
"description": "Face alias",
|
|
3114
3114
|
"name": "face_id",
|
|
3115
3115
|
"required": true
|
|
3116
3116
|
}
|
|
@@ -3238,7 +3238,7 @@
|
|
|
3238
3238
|
"aliases": [],
|
|
3239
3239
|
"args": {
|
|
3240
3240
|
"face_id": {
|
|
3241
|
-
"description": "Face
|
|
3241
|
+
"description": "Face alias",
|
|
3242
3242
|
"name": "face_id",
|
|
3243
3243
|
"required": true
|
|
3244
3244
|
}
|
|
@@ -3499,7 +3499,7 @@
|
|
|
3499
3499
|
"aliases": [],
|
|
3500
3500
|
"args": {
|
|
3501
3501
|
"face_id": {
|
|
3502
|
-
"description": "Face
|
|
3502
|
+
"description": "Face alias",
|
|
3503
3503
|
"name": "face_id",
|
|
3504
3504
|
"required": true
|
|
3505
3505
|
}
|
|
@@ -3753,5 +3753,5 @@
|
|
|
3753
3753
|
]
|
|
3754
3754
|
}
|
|
3755
3755
|
},
|
|
3756
|
-
"version": "1.4.
|
|
3756
|
+
"version": "1.4.4"
|
|
3757
3757
|
}
|