@kincollab/cli 0.1.1 → 0.3.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/dist/commands/admin/activity.d.ts +13 -0
- package/dist/commands/admin/activity.d.ts.map +1 -0
- package/dist/commands/admin/activity.js +39 -0
- package/dist/commands/admin/activity.js.map +1 -0
- package/dist/commands/admin/users.d.ts +10 -0
- package/dist/commands/admin/users.d.ts.map +1 -0
- package/dist/commands/admin/users.js +20 -0
- package/dist/commands/admin/users.js.map +1 -0
- package/dist/commands/asset/post.d.ts +13 -0
- package/dist/commands/asset/post.d.ts.map +1 -0
- package/dist/commands/asset/post.js +38 -0
- package/dist/commands/asset/post.js.map +1 -0
- package/dist/commands/folder/create.d.ts +14 -0
- package/dist/commands/folder/create.d.ts.map +1 -0
- package/dist/commands/folder/create.js +31 -0
- package/dist/commands/folder/create.js.map +1 -0
- package/package.json +5 -2
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class AdminActivity extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static hidden: boolean;
|
|
5
|
+
static flags: {
|
|
6
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
'actor-type': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
action: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAa5C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,MAAM,CAAC,WAAW,SAA4C;IAC9D,MAAM,CAAC,MAAM,UAAO;IAEpB,MAAM,CAAC,KAAK;;;;;MAKX;IAEK,GAAG;CAqBV"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import { apiGet } from '../../lib/client.js';
|
|
3
|
+
import { ansi, relativeTime, printJson, JSON_FLAG, formatActorTag, sep, hint } from '../../lib/output.js';
|
|
4
|
+
export default class AdminActivity extends Command {
|
|
5
|
+
static description = 'Cross-tenant activity feed (admin only)';
|
|
6
|
+
static hidden = true;
|
|
7
|
+
static flags = {
|
|
8
|
+
'actor-type': Flags.string({ description: 'Filter: human | agent | system' }),
|
|
9
|
+
action: Flags.string({ description: 'Filter by action, e.g. document.create' }),
|
|
10
|
+
limit: Flags.integer({ default: 100, description: 'Max rows (1–200)' }),
|
|
11
|
+
...JSON_FLAG,
|
|
12
|
+
};
|
|
13
|
+
async run() {
|
|
14
|
+
const { flags } = await this.parse(AdminActivity);
|
|
15
|
+
const params = new URLSearchParams();
|
|
16
|
+
if (flags['actor-type'])
|
|
17
|
+
params.set('actorType', flags['actor-type']);
|
|
18
|
+
if (flags.action)
|
|
19
|
+
params.set('action', flags.action);
|
|
20
|
+
params.set('limit', String(flags.limit));
|
|
21
|
+
const events = await apiGet(`/admin/activity?${params.toString()}`);
|
|
22
|
+
if (flags.json)
|
|
23
|
+
return printJson(events);
|
|
24
|
+
if (events.length === 0) {
|
|
25
|
+
this.log(ansi.dim(' No activity.'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
for (const e of events) {
|
|
29
|
+
const actor = e.actor ? formatActorTag(e.actor) : ansi.dim('system');
|
|
30
|
+
const time = ansi.dim(relativeTime(e.createdAt));
|
|
31
|
+
const target = e.targetTitle ? ansi.dim(`"${e.targetTitle}"`) : '';
|
|
32
|
+
const ctx = e.workspaceName ? ansi.dim(`(${e.workspaceName})`) : '';
|
|
33
|
+
this.log(` ${time} ${actor} ${ansi.cyan(e.action)} ${target} ${ctx}`);
|
|
34
|
+
}
|
|
35
|
+
sep();
|
|
36
|
+
hint('Filter with --actor-type agent or --action document.create');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/commands/admin/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAWzG,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,MAAM,CAAC,WAAW,GAAG,yCAAyC,CAAA;IAC9D,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;IAEpB,MAAM,CAAC,KAAK,GAAG;QACb,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;QAC7E,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC;QAC/E,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;QACvE,GAAG,SAAS;KACb,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAA;QACpC,IAAI,KAAK,CAAC,YAAY,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;QACrE,IAAI,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACpD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;QAExC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAuB,mBAAmB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QACzF,IAAI,KAAK,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAA;QAExC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QACzE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACpE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;YAChD,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YAClE,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YACnE,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,MAAM,IAAI,GAAG,EAAE,CAAC,CAAA;QAC3E,CAAC;QACD,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,4DAA4D,CAAC,CAAA;IACpE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class AdminUsers extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static hidden: boolean;
|
|
5
|
+
static flags: {
|
|
6
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAcrC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAAsD;IACxE,MAAM,CAAC,MAAM,UAAO;IACpB,MAAM,CAAC,KAAK;;MAAmB;IAEzB,GAAG;CAUV"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { apiGet } from '../../lib/client.js';
|
|
3
|
+
import { ansi, relativeTime, printJson, JSON_FLAG } from '../../lib/output.js';
|
|
4
|
+
export default class AdminUsers extends Command {
|
|
5
|
+
static description = 'List all identities with last-active (admin only)';
|
|
6
|
+
static hidden = true;
|
|
7
|
+
static flags = { ...JSON_FLAG };
|
|
8
|
+
async run() {
|
|
9
|
+
const { flags } = await this.parse(AdminUsers);
|
|
10
|
+
const users = await apiGet('/admin/users');
|
|
11
|
+
if (flags.json)
|
|
12
|
+
return printJson(users);
|
|
13
|
+
for (const u of users) {
|
|
14
|
+
const star = u.isAdmin ? ansi.cyan(' ★') : '';
|
|
15
|
+
const last = u.lastActiveAt ? ansi.dim(relativeTime(u.lastActiveAt)) : ansi.dim('never');
|
|
16
|
+
this.log(` ${u.emoji ?? ' '} ${u.name}${star} ${ansi.dim(u.type)} ${last}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/commands/admin/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAY9E,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,GAAG,mDAAmD,CAAA;IACxE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,SAAS,EAAE,CAAA;IAE/B,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAc,cAAc,CAAC,CAAA;QACvD,IAAI,KAAK,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAA;QACvC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACxF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QAChF,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class AssetPost extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
workspaceId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
file: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=post.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAelD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAAyC;IAE3D,MAAM,CAAC,IAAI;;MAEV;IAED,MAAM,CAAC,KAAK;;;MAGX;IAEK,GAAG;CAyBV"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { apiPost } from '../../lib/client.js';
|
|
4
|
+
import { kv, sep, hint, ansi, resolveCommitSha } from '../../lib/output.js';
|
|
5
|
+
export default class AssetPost extends Command {
|
|
6
|
+
static description = 'Post a new HTML asset to a workspace';
|
|
7
|
+
static args = {
|
|
8
|
+
workspaceId: Args.string({ description: 'Workspace ID', required: true }),
|
|
9
|
+
};
|
|
10
|
+
static flags = {
|
|
11
|
+
name: Flags.string({ char: 'n', description: 'Asset name', required: true }),
|
|
12
|
+
file: Flags.string({ char: 'f', description: 'HTML file path', required: true }),
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
const { args, flags } = await this.parse(AssetPost);
|
|
16
|
+
let content;
|
|
17
|
+
try {
|
|
18
|
+
content = fs.readFileSync(flags.file, 'utf8');
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
this.error(`Could not read file: ${flags.file}`);
|
|
22
|
+
}
|
|
23
|
+
const asset = await apiPost(`/workspaces/${args.workspaceId}/assets`, { name: flags.name, content });
|
|
24
|
+
this.log(ansi.green(' HTML asset created'));
|
|
25
|
+
sep();
|
|
26
|
+
kv('ID', asset.id);
|
|
27
|
+
kv('Name', asset.name);
|
|
28
|
+
kv('Type', asset.type);
|
|
29
|
+
kv('Commit SHA', resolveCommitSha(asset));
|
|
30
|
+
if (asset.webUrl) {
|
|
31
|
+
this.log(`\n ${ansi.bold('View in browser:')}`);
|
|
32
|
+
this.log(` ${ansi.cyan(asset.webUrl)}`);
|
|
33
|
+
}
|
|
34
|
+
sep();
|
|
35
|
+
hint(`Update it with: kin asset post ${args.workspaceId} again, or edit via the web app`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=post.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../../src/commands/asset/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAY3E,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,GAAG,sCAAsC,CAAA;IAE3D,MAAM,CAAC,IAAI,GAAG;QACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC1E,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5E,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACjF,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACnD,IAAI,OAAe,CAAA;QACnB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,KAAK,CAAC,wBAAwB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,OAAO,CACzB,eAAe,IAAI,CAAC,WAAW,SAAS,EACxC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAC9B,CAAA;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAC5C,GAAG,EAAE,CAAA;QACL,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QAClB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACtB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACtB,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;QACzC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;YAChD,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QACD,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,kCAAkC,IAAI,CAAC,WAAW,iCAAiC,CAAC,CAAA;IAC3F,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class FolderCreate extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
workspaceId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
parent: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAWlD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,MAAM,CAAC,WAAW,SAA6E;IAE/F,MAAM,CAAC,QAAQ,WAGd;IAED,MAAM,CAAC,IAAI;;MAEV;IAED,MAAM,CAAC,KAAK;;;MAGX;IAEK,GAAG;CAkBV"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import { apiPost } from '../../lib/client.js';
|
|
3
|
+
import { kv, sep, hint, ansi } from '../../lib/output.js';
|
|
4
|
+
export default class FolderCreate extends Command {
|
|
5
|
+
static description = 'Create a folder in a workspace (optionally nested inside another folder)';
|
|
6
|
+
static examples = [
|
|
7
|
+
'<%= config.bin %> folder create <workspaceId> --name specs',
|
|
8
|
+
'<%= config.bin %> folder create <workspaceId> --name auth --parent <parentFolderId>',
|
|
9
|
+
];
|
|
10
|
+
static args = {
|
|
11
|
+
workspaceId: Args.string({ description: 'Workspace ID', required: true }),
|
|
12
|
+
};
|
|
13
|
+
static flags = {
|
|
14
|
+
name: Flags.string({ char: 'n', description: 'Folder name', required: true }),
|
|
15
|
+
parent: Flags.string({ char: 'p', description: 'Parent folder ID (omit to create at the workspace root)' }),
|
|
16
|
+
};
|
|
17
|
+
async run() {
|
|
18
|
+
const { args, flags } = await this.parse(FolderCreate);
|
|
19
|
+
const folder = await apiPost(`/workspaces/${args.workspaceId}/folders`, { name: flags.name, ...(flags.parent ? { parentFolderId: flags.parent } : {}) });
|
|
20
|
+
this.log(ansi.green(' Folder created'));
|
|
21
|
+
sep();
|
|
22
|
+
kv('ID', folder.id);
|
|
23
|
+
kv('Name', folder.name);
|
|
24
|
+
kv('Path', folder.path);
|
|
25
|
+
sep();
|
|
26
|
+
hint(`Add a document with: kin doc post ${args.workspaceId} --name <name> --folder ${folder.id}`);
|
|
27
|
+
hint(`Nest another folder with: kin folder create ${args.workspaceId} --name <name> --parent ${folder.id}`);
|
|
28
|
+
hint(`See the workspace tree with: kin contents ${args.workspaceId}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/folder/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AASzD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,MAAM,CAAC,WAAW,GAAG,0EAA0E,CAAA;IAE/F,MAAM,CAAC,QAAQ,GAAG;QAChB,4DAA4D;QAC5D,qFAAqF;KACtF,CAAA;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC1E,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,IAAI,EAAI,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/E,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,yDAAyD,EAAE,CAAC;KAC5G,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAEtD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,eAAe,IAAI,CAAC,WAAW,UAAU,EACzC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAChF,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAA;QACxC,GAAG,EAAE,CAAA;QACL,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QACnB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QACvB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QACvB,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,qCAAqC,IAAI,CAAC,WAAW,2BAA2B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;QACjG,IAAI,CAAC,+CAA+C,IAAI,CAAC,WAAW,2BAA2B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;QAC3G,IAAI,CAAC,6CAA6C,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACvE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kincollab/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Kin CLI — agent-ergonomic command line for the Kin collaboration platform (kincollab.com)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"kin",
|
|
@@ -51,6 +51,9 @@
|
|
|
51
51
|
"bin": "kin",
|
|
52
52
|
"commands": "./dist/commands",
|
|
53
53
|
"plugins": [],
|
|
54
|
-
"topicSeparator": " "
|
|
54
|
+
"topicSeparator": " ",
|
|
55
|
+
"topics": {
|
|
56
|
+
"admin": { "description": "Operator-only admin commands", "hidden": true }
|
|
57
|
+
}
|
|
55
58
|
}
|
|
56
59
|
}
|