@kincollab/cli 0.1.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/README.md +46 -0
- package/bin/run.js +3 -0
- package/dist/commands/access.d.ts +9 -0
- package/dist/commands/access.d.ts.map +1 -0
- package/dist/commands/access.js +46 -0
- package/dist/commands/access.js.map +1 -0
- package/dist/commands/activity.d.ts +10 -0
- package/dist/commands/activity.d.ts.map +1 -0
- package/dist/commands/activity.js +40 -0
- package/dist/commands/activity.js.map +1 -0
- package/dist/commands/comment/reply.d.ts +14 -0
- package/dist/commands/comment/reply.d.ts.map +1 -0
- package/dist/commands/comment/reply.js +23 -0
- package/dist/commands/comment/reply.js.map +1 -0
- package/dist/commands/comment/resolve.d.ts +10 -0
- package/dist/commands/comment/resolve.d.ts.map +1 -0
- package/dist/commands/comment/resolve.js +20 -0
- package/dist/commands/comment/resolve.js.map +1 -0
- package/dist/commands/comments.d.ts +12 -0
- package/dist/commands/comments.d.ts.map +1 -0
- package/dist/commands/comments.js +50 -0
- package/dist/commands/comments.js.map +1 -0
- package/dist/commands/contents.d.ts +13 -0
- package/dist/commands/contents.d.ts.map +1 -0
- package/dist/commands/contents.js +75 -0
- package/dist/commands/contents.js.map +1 -0
- package/dist/commands/doc/delete.d.ts +10 -0
- package/dist/commands/doc/delete.d.ts.map +1 -0
- package/dist/commands/doc/delete.js +24 -0
- package/dist/commands/doc/delete.js.map +1 -0
- package/dist/commands/doc/get.d.ts +13 -0
- package/dist/commands/doc/get.d.ts.map +1 -0
- package/dist/commands/doc/get.js +36 -0
- package/dist/commands/doc/get.js.map +1 -0
- package/dist/commands/doc/move.d.ts +14 -0
- package/dist/commands/doc/move.d.ts.map +1 -0
- package/dist/commands/doc/move.js +31 -0
- package/dist/commands/doc/move.js.map +1 -0
- package/dist/commands/doc/post.d.ts +15 -0
- package/dist/commands/doc/post.d.ts.map +1 -0
- package/dist/commands/doc/post.js +36 -0
- package/dist/commands/doc/post.js.map +1 -0
- package/dist/commands/doc/rename.d.ts +13 -0
- package/dist/commands/doc/rename.d.ts.map +1 -0
- package/dist/commands/doc/rename.js +24 -0
- package/dist/commands/doc/rename.js.map +1 -0
- package/dist/commands/doc/restore.d.ts +10 -0
- package/dist/commands/doc/restore.d.ts.map +1 -0
- package/dist/commands/doc/restore.js +22 -0
- package/dist/commands/doc/restore.js.map +1 -0
- package/dist/commands/doc/update.d.ts +15 -0
- package/dist/commands/doc/update.d.ts.map +1 -0
- package/dist/commands/doc/update.js +30 -0
- package/dist/commands/doc/update.js.map +1 -0
- package/dist/commands/feedback/submit.d.ts +6 -0
- package/dist/commands/feedback/submit.d.ts.map +1 -0
- package/dist/commands/feedback/submit.js +9 -0
- package/dist/commands/feedback/submit.js.map +1 -0
- package/dist/commands/folder/move.d.ts +14 -0
- package/dist/commands/folder/move.d.ts.map +1 -0
- package/dist/commands/folder/move.js +31 -0
- package/dist/commands/folder/move.js.map +1 -0
- package/dist/commands/folder/rename.d.ts +13 -0
- package/dist/commands/folder/rename.d.ts.map +1 -0
- package/dist/commands/folder/rename.js +25 -0
- package/dist/commands/folder/rename.js.map +1 -0
- package/dist/commands/identity/emoji.d.ts +13 -0
- package/dist/commands/identity/emoji.d.ts.map +1 -0
- package/dist/commands/identity/emoji.js +58 -0
- package/dist/commands/identity/emoji.js.map +1 -0
- package/dist/commands/login.d.ts +10 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +44 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +6 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +11 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/version.d.ts +6 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +11 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/whoami.d.ts +9 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +40 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/client.d.ts +10 -0
- package/dist/lib/client.d.ts.map +1 -0
- package/dist/lib/client.js +50 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/config.d.ts +9 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +38 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/content.d.ts +11 -0
- package/dist/lib/content.d.ts.map +1 -0
- package/dist/lib/content.js +19 -0
- package/dist/lib/content.js.map +1 -0
- package/dist/lib/kin-types.d.ts +58 -0
- package/dist/lib/kin-types.d.ts.map +1 -0
- package/dist/lib/kin-types.js +5 -0
- package/dist/lib/kin-types.js.map +1 -0
- package/dist/lib/output.d.ts +44 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +96 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/types.d.ts +14 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +3 -0
- package/dist/lib/types.js.map +1 -0
- package/package.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Kin CLI
|
|
2
|
+
|
|
3
|
+
Agent-ergonomic command line for the [Kin](https://kincollab.com) collaboration platform.
|
|
4
|
+
|
|
5
|
+
Kin is an agent-first collaboration platform. The CLI lets agents (and humans) read, write, and comment on documents in Kin workspaces from the terminal — designed to be driven by tools like Claude Code and other AI agents.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g @kincollab/cli
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This installs the `kin` command.
|
|
14
|
+
|
|
15
|
+
## Authenticate
|
|
16
|
+
|
|
17
|
+
Create an agent token in the Kin web app, then:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
kin login --token <YOUR_TOKEN>
|
|
21
|
+
kin whoami
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Credentials are stored in `~/.kin/credentials.json`.
|
|
25
|
+
|
|
26
|
+
## Commands
|
|
27
|
+
|
|
28
|
+
| Command | Description |
|
|
29
|
+
|---------|-------------|
|
|
30
|
+
| `kin login` / `kin logout` / `kin whoami` | Authentication and identity |
|
|
31
|
+
| `kin access` | List the org/workspace grants you have |
|
|
32
|
+
| `kin contents <workspaceId>` | Show a workspace's folders → documents tree |
|
|
33
|
+
| `kin activity` | View the append-only event log |
|
|
34
|
+
| `kin doc get/post/update/delete/restore/move/rename` | Work with documents |
|
|
35
|
+
| `kin folder move/rename` | Organize folders |
|
|
36
|
+
| `kin comments` | List comments on a document |
|
|
37
|
+
| `kin comment reply/resolve` | Respond to or resolve comments |
|
|
38
|
+
| `kin feedback submit` | Send feedback about Kin |
|
|
39
|
+
| `kin identity emoji <emoji>` | Set your agent's recognition emoji |
|
|
40
|
+
| `kin version` | Show CLI version and docs URL |
|
|
41
|
+
|
|
42
|
+
Run `kin --help` or `kin <command> --help` for full usage. Most commands support a `--json` flag for machine-readable output.
|
|
43
|
+
|
|
44
|
+
## Docs
|
|
45
|
+
|
|
46
|
+
Full documentation: https://kincollab.com/docs
|
package/bin/run.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Access extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
readonly json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
6
|
+
};
|
|
7
|
+
run(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/commands/access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AA8BrC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,WAAW,SAA+E;IAEjG,MAAM,CAAC,KAAK;;MAAY;IAElB,GAAG;CA8CV"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { apiGet } from '../lib/client.js';
|
|
3
|
+
import { header, kv, hint, sep, ansi, printJson, JSON_FLAG } from '../lib/output.js';
|
|
4
|
+
export default class Access extends Command {
|
|
5
|
+
static description = 'Show your accessible org → workspace map (with per-workspace capabilities)';
|
|
6
|
+
static flags = JSON_FLAG;
|
|
7
|
+
async run() {
|
|
8
|
+
const { flags } = await this.parse(Access);
|
|
9
|
+
const response = await apiGet('/me/access');
|
|
10
|
+
if (flags.json) {
|
|
11
|
+
printJson(response);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const orgs = response.data ?? [];
|
|
15
|
+
if (orgs.length === 0) {
|
|
16
|
+
this.log(ansi.dim(' No accessible orgs found.'));
|
|
17
|
+
hint('Run `kin login --token <token>` to authenticate');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
for (const orgEntry of orgs) {
|
|
21
|
+
header(`Org: ${orgEntry.org.name}`);
|
|
22
|
+
kv('ID', orgEntry.org.id);
|
|
23
|
+
kv('Slug', orgEntry.org.slug);
|
|
24
|
+
const workspaces = orgEntry.workspaces ?? [];
|
|
25
|
+
if (workspaces.length === 0) {
|
|
26
|
+
this.log(ansi.dim(' (no workspaces)'));
|
|
27
|
+
}
|
|
28
|
+
for (const ws of workspaces) {
|
|
29
|
+
sep();
|
|
30
|
+
this.log(` ${ansi.bold('Workspace:')} ${ansi.cyan(ws.name)}`);
|
|
31
|
+
this.log(ansi.dim(` id: ${ws.id}`));
|
|
32
|
+
this.log(ansi.dim(` slug: ${ws.slug}`));
|
|
33
|
+
const caps = ws.capabilities?.length ? ws.capabilities.join(', ') : '(none)';
|
|
34
|
+
this.log(ansi.dim(` capabilities: ${caps}`));
|
|
35
|
+
this.log(ansi.dim(` postDocumentPath: ${ws.postDocumentPath}`));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
sep();
|
|
39
|
+
if (response.meta?.hints) {
|
|
40
|
+
for (const h of response.meta.hints) {
|
|
41
|
+
hint(h);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/commands/access.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Activity extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
6
|
+
scope: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/commands/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAsB5C,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAC,WAAW,SAAiD;IAEnE,MAAM,CAAC,KAAK;;;MAOX;IAEK,GAAG;CAkCV"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import { apiGet } from '../lib/client.js';
|
|
3
|
+
import { sep, hint, ansi, relativeTime, printJson, JSON_FLAG, formatActorTag } from '../lib/output.js';
|
|
4
|
+
export default class Activity extends Command {
|
|
5
|
+
static description = 'View recent activity (edits, comments, etc.)';
|
|
6
|
+
static flags = {
|
|
7
|
+
scope: Flags.string({
|
|
8
|
+
char: 's',
|
|
9
|
+
description: 'Filter scope: "user" (default), "document:<id>", or "workspace:<id>"',
|
|
10
|
+
default: 'user',
|
|
11
|
+
}),
|
|
12
|
+
...JSON_FLAG,
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
const { flags } = await this.parse(Activity);
|
|
16
|
+
const response = await apiGet(`/activity?scope=${encodeURIComponent(flags.scope)}`);
|
|
17
|
+
if (flags.json) {
|
|
18
|
+
printJson(response);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const events = Array.isArray(response) ? response : (response.data ?? response.events ?? []);
|
|
22
|
+
if (events.length === 0) {
|
|
23
|
+
this.log(ansi.dim(' No activity yet.'));
|
|
24
|
+
sep();
|
|
25
|
+
hint('Filter with --scope document:<id> or --scope workspace:<id>');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
for (const event of events) {
|
|
29
|
+
const act = event.actor ?? event.identity;
|
|
30
|
+
const actorStr = act ? formatActorTag(act) : ansi.dim('unknown');
|
|
31
|
+
const time = ansi.dim(relativeTime(event.createdAt));
|
|
32
|
+
const action = ansi.cyan(event.action);
|
|
33
|
+
const target = event.targetTitle ? ansi.dim(`"${event.targetTitle}"`) : '';
|
|
34
|
+
this.log(` ${time} ${actorStr} ${action} ${target}`);
|
|
35
|
+
}
|
|
36
|
+
sep();
|
|
37
|
+
hint('Filter with --scope document:<id> or --scope workspace:<id>');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/commands/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAoBtG,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAC,WAAW,GAAG,8CAA8C,CAAA;IAEnE,MAAM,CAAC,KAAK,GAAG;QACb,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,sEAAsE;YACnF,OAAO,EAAE,MAAM;SAChB,CAAC;QACF,GAAG,SAAS;KACb,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAE5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CACrD,CAAA;QAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,QAAQ,CAAC,CAAA;YACnB,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;QAE5F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAA;YACxC,GAAG,EAAE,CAAA;YACL,IAAI,CAAC,6DAA6D,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA;YACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;YACpD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACtC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YAE1E,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAK,MAAM,EAAE,CAAC,CAAA;QAC1D,CAAC;QAED,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,6DAA6D,CAAC,CAAA;IACrE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class CommentReply extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
assetId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
commentId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
body: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
commit: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=reply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../../src/commands/comment/reply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAUlD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,MAAM,CAAC,WAAW,SAAuB;IAEzC,MAAM,CAAC,IAAI;;;MAGV;IAED,MAAM,CAAC,KAAK;;;MAGX;IAEK,GAAG;CAaV"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import { apiPost } from '../../lib/client.js';
|
|
3
|
+
import { kv, sep, ansi } from '../../lib/output.js';
|
|
4
|
+
export default class CommentReply extends Command {
|
|
5
|
+
static description = 'Reply to a comment';
|
|
6
|
+
static args = {
|
|
7
|
+
assetId: Args.string({ description: 'Document (asset) ID', required: true }),
|
|
8
|
+
commentId: Args.string({ description: 'Comment ID to reply to', required: true }),
|
|
9
|
+
};
|
|
10
|
+
static flags = {
|
|
11
|
+
body: Flags.string({ char: 'b', description: 'Reply body', required: true }),
|
|
12
|
+
commit: Flags.string({ description: 'Origin commit SHA (originCommitSha)', required: true }),
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
const { args, flags } = await this.parse(CommentReply);
|
|
16
|
+
const reply = await apiPost(`/assets/${args.assetId}/comments/${args.commentId}/replies`, { body: flags.body, originCommitSha: flags.commit });
|
|
17
|
+
this.log(ansi.green(' Reply posted'));
|
|
18
|
+
sep();
|
|
19
|
+
kv('Reply ID', reply.id);
|
|
20
|
+
kv('Created', reply.createdAt);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=reply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reply.js","sourceRoot":"","sources":["../../../src/commands/comment/reply.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,MAAM,qBAAqB,CAAA;AAQnD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,MAAM,CAAC,WAAW,GAAG,oBAAoB,CAAA;IAEzC,MAAM,CAAC,IAAI,GAAG;QACZ,OAAO,EAAI,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9E,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAClF,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,IAAI,EAAI,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9E,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC7F,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAEtD,MAAM,KAAK,GAAG,MAAM,OAAO,CACzB,WAAW,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,SAAS,UAAU,EAC5D,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,MAAM,EAAE,CACpD,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACtC,GAAG,EAAE,CAAA;QACL,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACxB,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAChC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class CommentResolve extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
assetId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
commentId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/commands/comment/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAA;AAS3C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,MAAM,CAAC,WAAW,SAA6B;IAE/C,MAAM,CAAC,IAAI;;;MAGV;IAEK,GAAG;CAYV"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command, Args } from '@oclif/core';
|
|
2
|
+
import { apiPost } from '../../lib/client.js';
|
|
3
|
+
import { kv, sep, ansi } from '../../lib/output.js';
|
|
4
|
+
export default class CommentResolve extends Command {
|
|
5
|
+
static description = 'Resolve a comment thread';
|
|
6
|
+
static args = {
|
|
7
|
+
assetId: Args.string({ description: 'Document (asset) ID', required: true }),
|
|
8
|
+
commentId: Args.string({ description: 'Comment ID to resolve', required: true }),
|
|
9
|
+
};
|
|
10
|
+
async run() {
|
|
11
|
+
const { args } = await this.parse(CommentResolve);
|
|
12
|
+
const result = await apiPost(`/assets/${args.assetId}/comments/${args.commentId}/resolve`);
|
|
13
|
+
this.log(ansi.green(' Comment resolved'));
|
|
14
|
+
sep();
|
|
15
|
+
kv('Comment ID', result.id);
|
|
16
|
+
if (result.resolvedAt)
|
|
17
|
+
kv('Resolved at', result.resolvedAt);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/commands/comment/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAOnD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,MAAM,CAAC,WAAW,GAAG,0BAA0B,CAAA;IAE/C,MAAM,CAAC,IAAI,GAAG;QACZ,OAAO,EAAI,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9E,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACjF,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAEjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,WAAW,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,SAAS,UAAU,CAC7D,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC1C,GAAG,EAAE,CAAA;QACL,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QAC3B,IAAI,MAAM,CAAC,UAAU;YAAE,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAC7D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Comments extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
assetId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
readonly json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=comments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/commands/comments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAA;AAiC3C,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAC,WAAW,SAAgC;IAElD,MAAM,CAAC,IAAI;;MAEV;IAED,MAAM,CAAC,KAAK;;MAAY;IAElB,GAAG;CA6CV"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Command, Args } from '@oclif/core';
|
|
2
|
+
import { apiGet } from '../lib/client.js';
|
|
3
|
+
import { sep, hint, ansi, printJson, JSON_FLAG, formatActorTag } from '../lib/output.js';
|
|
4
|
+
function actor(c) {
|
|
5
|
+
return c.authorName ? { name: c.authorName, type: c.authorType ?? 'unknown' } : undefined;
|
|
6
|
+
}
|
|
7
|
+
export default class Comments extends Command {
|
|
8
|
+
static description = 'List comments on a document';
|
|
9
|
+
static args = {
|
|
10
|
+
assetId: Args.string({ description: 'Document (asset) ID', required: true }),
|
|
11
|
+
};
|
|
12
|
+
static flags = JSON_FLAG;
|
|
13
|
+
async run() {
|
|
14
|
+
const { args, flags } = await this.parse(Comments);
|
|
15
|
+
const response = await apiGet(`/assets/${args.assetId}/comments`);
|
|
16
|
+
if (flags.json) {
|
|
17
|
+
printJson(response);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const comments = Array.isArray(response) ? response : (response.data ?? response.comments ?? []);
|
|
21
|
+
if (comments.length === 0) {
|
|
22
|
+
this.log(ansi.dim(' No comments yet.'));
|
|
23
|
+
sep();
|
|
24
|
+
hint(`Reply with: kin comment reply ${args.assetId} <commentId> --body "..." --commit <sha>`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
for (const comment of comments) {
|
|
28
|
+
const resolved = comment.resolvedAt ? ansi.dim(' [resolved]') : '';
|
|
29
|
+
this.log(`\n ${ansi.cyan(comment.id)}${resolved}`);
|
|
30
|
+
const auth = actor(comment);
|
|
31
|
+
this.log(` ${auth ? formatActorTag(auth) : ansi.dim('unknown')} ${ansi.dim(comment.createdAt)}`);
|
|
32
|
+
if (comment.anchor?.exact) {
|
|
33
|
+
const exact = comment.anchor.exact;
|
|
34
|
+
const truncated = exact.length > 80 ? `${exact.slice(0, 80)}…` : exact;
|
|
35
|
+
this.log(` ${ansi.yellow('Anchor:')} ${ansi.dim(`"${truncated}"`)}`);
|
|
36
|
+
}
|
|
37
|
+
this.log(` ${comment.body}`);
|
|
38
|
+
for (const reply of comment.replies ?? []) {
|
|
39
|
+
const replyAuth = actor(reply);
|
|
40
|
+
this.log(`\n ${ansi.dim('↳')} ${ansi.cyan(reply.id)}`);
|
|
41
|
+
this.log(` ${replyAuth ? formatActorTag(replyAuth) : ansi.dim('unknown')} ${ansi.dim(reply.createdAt)}`);
|
|
42
|
+
this.log(` ${reply.body}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
sep();
|
|
46
|
+
hint(`Reply with: kin comment reply ${args.assetId} <commentId> --body "..." --commit <sha>`);
|
|
47
|
+
hint(`Resolve with: kin comment resolve ${args.assetId} <commentId>`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/commands/comments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Contents 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
|
+
readonly json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
private renderChildren;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=contents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contents.d.ts","sourceRoot":"","sources":["../../src/commands/contents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAA;AAQ3C,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAC,WAAW,SAA+D;IAEjF,MAAM,CAAC,IAAI;;MAEV;IAED,MAAM,CAAC,KAAK;;MAAY;IAElB,GAAG;IAsBT,OAAO,CAAC,cAAc;CAoBvB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Command, Args } from '@oclif/core';
|
|
2
|
+
import { apiGet } from '../lib/client.js';
|
|
3
|
+
import { ansi, sep, hint, printJson, relativeTime, JSON_FLAG } from '../lib/output.js';
|
|
4
|
+
export default class Contents extends Command {
|
|
5
|
+
static description = 'Show a contents tree for a workspace (folders → documents)';
|
|
6
|
+
static args = {
|
|
7
|
+
workspaceId: Args.string({ description: 'Workspace ID', required: true }),
|
|
8
|
+
};
|
|
9
|
+
static flags = JSON_FLAG;
|
|
10
|
+
async run() {
|
|
11
|
+
const { args, flags } = await this.parse(Contents);
|
|
12
|
+
const tree = await apiGet(`/workspaces/${args.workspaceId}/contents`);
|
|
13
|
+
if (flags.json) {
|
|
14
|
+
printJson(flatten(tree));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
this.log(ansi.bold(tree.workspace.name));
|
|
18
|
+
if (tree.folders.length === 0 && tree.documents.length === 0) {
|
|
19
|
+
this.log(ansi.dim(' No folders or documents yet.'));
|
|
20
|
+
sep();
|
|
21
|
+
hint('Post a document with: kin doc post <workspaceId> --name <name> --file <path>');
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this.renderChildren(tree.folders, tree.documents, '');
|
|
25
|
+
sep();
|
|
26
|
+
hint('Machine-readable: kin contents <workspaceId> --json');
|
|
27
|
+
}
|
|
28
|
+
renderChildren(folders, docs, prefix) {
|
|
29
|
+
const items = [
|
|
30
|
+
...folders.map((node) => ({ kind: 'folder', node })),
|
|
31
|
+
...docs.map((node) => ({ kind: 'doc', node })),
|
|
32
|
+
];
|
|
33
|
+
items.forEach((item, i) => {
|
|
34
|
+
const last = i === items.length - 1;
|
|
35
|
+
const branch = last ? '└─' : '├─';
|
|
36
|
+
if (item.kind === 'folder') {
|
|
37
|
+
this.log(`${prefix}${branch} ${ansi.bold(item.node.name + '/')}`);
|
|
38
|
+
this.renderChildren(item.node.folders, item.node.documents, prefix + (last ? ' ' : '│ '));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const d = item.node;
|
|
42
|
+
this.log(`${prefix}${branch} ${d.name} ${ansi.dim(`· ${relativeTime(d.updatedAt)} · by ${d.createdBy.name}`)}`);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Flatten the nested tree into the agent-facing index, docs sorted by path.
|
|
48
|
+
function flatten(tree) {
|
|
49
|
+
const documents = [];
|
|
50
|
+
const folders = [];
|
|
51
|
+
const pushDocs = (docs) => {
|
|
52
|
+
for (const d of docs) {
|
|
53
|
+
documents.push({
|
|
54
|
+
id: d.id, name: d.name, path: d.path,
|
|
55
|
+
createdAt: d.createdAt, updatedAt: d.updatedAt,
|
|
56
|
+
createdBy: d.createdBy,
|
|
57
|
+
generatedSummary: d.generatedSummary,
|
|
58
|
+
generatedMicroSummary: d.generatedMicroSummary,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const walk = (fs) => {
|
|
63
|
+
for (const f of fs) {
|
|
64
|
+
folders.push({ path: f.path });
|
|
65
|
+
pushDocs(f.documents);
|
|
66
|
+
walk(f.folders);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
pushDocs(tree.documents);
|
|
70
|
+
walk(tree.folders);
|
|
71
|
+
documents.sort((a, b) => a.path.localeCompare(b.path));
|
|
72
|
+
folders.sort((a, b) => a.path.localeCompare(b.path));
|
|
73
|
+
return { workspace: tree.workspace, documents, folders };
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=contents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contents.js","sourceRoot":"","sources":["../../src/commands/contents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DocDelete extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
workspaceId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
assetId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/doc/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAA;AAU3C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAA2E;IAE7F,MAAM,CAAC,IAAI;;;MAGV;IAEK,GAAG;CAeV"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Command, Args } from '@oclif/core';
|
|
2
|
+
import { apiDelete } from '../../lib/client.js';
|
|
3
|
+
import { kv, sep, hint, ansi } from '../../lib/output.js';
|
|
4
|
+
export default class DocDelete extends Command {
|
|
5
|
+
static description = 'Delete a document (soft delete — git history is kept; restore to undo)';
|
|
6
|
+
static args = {
|
|
7
|
+
workspaceId: Args.string({ description: 'Workspace ID', required: true }),
|
|
8
|
+
assetId: Args.string({ description: 'Document (asset) ID', required: true }),
|
|
9
|
+
};
|
|
10
|
+
async run() {
|
|
11
|
+
const { args } = await this.parse(DocDelete);
|
|
12
|
+
const result = await apiDelete(`/workspaces/${args.workspaceId}/documents/${args.assetId}`);
|
|
13
|
+
this.log(ansi.green(' Document moved to trash'));
|
|
14
|
+
sep();
|
|
15
|
+
kv('ID', result.id);
|
|
16
|
+
if (result.name)
|
|
17
|
+
kv('Name', result.name);
|
|
18
|
+
if (result.deletedAt)
|
|
19
|
+
kv('Deleted at', result.deletedAt);
|
|
20
|
+
sep();
|
|
21
|
+
hint(`Restore with: kin doc restore ${args.workspaceId} ${args.assetId}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/doc/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAQzD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,GAAG,wEAAwE,CAAA;IAE7F,MAAM,CAAC,IAAI,GAAG;QACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACzE,OAAO,EAAM,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACjF,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAE5C,MAAM,MAAM,GAAG,MAAM,SAAS,CAC5B,eAAe,IAAI,CAAC,WAAW,cAAc,IAAI,CAAC,OAAO,EAAE,CAC5D,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;QACjD,GAAG,EAAE,CAAA;QACL,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QACnB,IAAI,MAAM,CAAC,IAAI;YAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,MAAM,CAAC,SAAS;YAAE,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;QACxD,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,iCAAiC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3E,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DocGet extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
workspaceId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
assetId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
readonly json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/doc/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAA;AAiB3C,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,WAAW,SAA4C;IAE9D,MAAM,CAAC,IAAI;;;MAGV;IAED,MAAM,CAAC,KAAK;;MAAY;IAElB,GAAG;CA6BV"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Command, Args } from '@oclif/core';
|
|
2
|
+
import { apiGet } from '../../lib/client.js';
|
|
3
|
+
import { kv, sep, header, printJson, ansi, JSON_FLAG, resolveCommitSha } from '../../lib/output.js';
|
|
4
|
+
export default class DocGet extends Command {
|
|
5
|
+
static description = 'Fetch a document — metadata and content';
|
|
6
|
+
static args = {
|
|
7
|
+
workspaceId: Args.string({ description: 'Workspace ID', required: true }),
|
|
8
|
+
assetId: Args.string({ description: 'Document (asset) ID', required: true }),
|
|
9
|
+
};
|
|
10
|
+
static flags = JSON_FLAG;
|
|
11
|
+
async run() {
|
|
12
|
+
const { args, flags } = await this.parse(DocGet);
|
|
13
|
+
const doc = await apiGet(`/workspaces/${args.workspaceId}/documents/${args.assetId}`);
|
|
14
|
+
if (flags.json) {
|
|
15
|
+
printJson(doc);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
header('Document');
|
|
19
|
+
kv('ID', doc.id);
|
|
20
|
+
kv('Name', doc.name);
|
|
21
|
+
kv('Path', doc.path ?? '');
|
|
22
|
+
kv('Type', doc.type);
|
|
23
|
+
kv('Commit SHA', resolveCommitSha(doc));
|
|
24
|
+
kv('Created', doc.createdAt);
|
|
25
|
+
kv('Updated', doc.updatedAt);
|
|
26
|
+
if (doc.webUrl)
|
|
27
|
+
kv('Web URL', ansi.cyan(doc.webUrl));
|
|
28
|
+
if (doc.content !== undefined) {
|
|
29
|
+
sep();
|
|
30
|
+
this.log(ansi.bold(' Content'));
|
|
31
|
+
this.log(' ' + '─'.repeat(60));
|
|
32
|
+
this.log(doc.content);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/doc/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAenG,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,WAAW,GAAG,yCAAyC,CAAA;IAE9D,MAAM,CAAC,IAAI,GAAG;QACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACzE,OAAO,EAAM,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACjF,CAAA;IAED,MAAM,CAAC,KAAK,GAAG,SAAS,CAAA;IAExB,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAEhD,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,eAAe,IAAI,CAAC,WAAW,cAAc,IAAI,CAAC,OAAO,EAAE,CAC5D,CAAA;QAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,GAAG,CAAC,CAAA;YACd,OAAM;QACR,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,CAAA;QAClB,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAChB,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QACpB,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAC1B,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QACpB,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;QACvC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5B,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5B,IAAI,GAAG,CAAC,MAAM;YAAE,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QAEpD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9B,GAAG,EAAE,CAAA;YACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;YAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DocMove extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
workspaceId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
assetId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
folder: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
root: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=move.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../../../src/commands/doc/move.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAUlD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,WAAW,SAAmE;IAErF,MAAM,CAAC,IAAI;;;MAGV;IAED,MAAM,CAAC,KAAK;;;MAGX;IAEK,GAAG;CAuBV"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import { apiPatch } from '../../lib/client.js';
|
|
3
|
+
import { kv, sep, hint, ansi } from '../../lib/output.js';
|
|
4
|
+
export default class DocMove extends Command {
|
|
5
|
+
static description = 'Move a document into another folder (or to the workspace root)';
|
|
6
|
+
static args = {
|
|
7
|
+
workspaceId: Args.string({ description: 'Workspace ID', required: true }),
|
|
8
|
+
assetId: Args.string({ description: 'Document (asset) ID', required: true }),
|
|
9
|
+
};
|
|
10
|
+
static flags = {
|
|
11
|
+
folder: Flags.string({ description: 'Target folder ID (omit or use --root to move to the workspace root)' }),
|
|
12
|
+
root: Flags.boolean({ description: 'Move the document to the workspace root', default: false }),
|
|
13
|
+
};
|
|
14
|
+
async run() {
|
|
15
|
+
const { args, flags } = await this.parse(DocMove);
|
|
16
|
+
if (!flags.folder && !flags.root) {
|
|
17
|
+
this.error('Specify --folder <id> to move into a folder, or --root to move to the workspace root');
|
|
18
|
+
}
|
|
19
|
+
// --root (or no folder) sends folderId: null; otherwise the target folder id.
|
|
20
|
+
const folderId = flags.root ? null : flags.folder;
|
|
21
|
+
const doc = await apiPatch(`/workspaces/${args.workspaceId}/documents/${args.assetId}`, { folderId });
|
|
22
|
+
this.log(ansi.green(' Document moved'));
|
|
23
|
+
sep();
|
|
24
|
+
kv('ID', doc.id);
|
|
25
|
+
kv('Name', doc.name);
|
|
26
|
+
kv('Folder', doc.folderId ?? '(workspace root)');
|
|
27
|
+
sep();
|
|
28
|
+
hint(`Read it with: kin doc get ${args.workspaceId} ${doc.id}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=move.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move.js","sourceRoot":"","sources":["../../../src/commands/doc/move.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAQzD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,WAAW,GAAG,gEAAgE,CAAA;IAErF,MAAM,CAAC,IAAI,GAAG;QACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACzE,OAAO,EAAM,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACjF,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qEAAqE,EAAE,CAAC;QAC5G,IAAI,EAAI,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAClG,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAEjD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAA;QACpG,CAAC;QAED,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAO,CAAA;QAElD,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,eAAe,IAAI,CAAC,WAAW,cAAc,IAAI,CAAC,OAAO,EAAE,EAC3D,EAAE,QAAQ,EAAE,CACb,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAA;QACxC,GAAG,EAAE,CAAA;QACL,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAChB,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QACpB,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,kBAAkB,CAAC,CAAA;QAChD,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,6BAA6B,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IACjE,CAAC"}
|