@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.
Files changed (115) hide show
  1. package/README.md +46 -0
  2. package/bin/run.js +3 -0
  3. package/dist/commands/access.d.ts +9 -0
  4. package/dist/commands/access.d.ts.map +1 -0
  5. package/dist/commands/access.js +46 -0
  6. package/dist/commands/access.js.map +1 -0
  7. package/dist/commands/activity.d.ts +10 -0
  8. package/dist/commands/activity.d.ts.map +1 -0
  9. package/dist/commands/activity.js +40 -0
  10. package/dist/commands/activity.js.map +1 -0
  11. package/dist/commands/comment/reply.d.ts +14 -0
  12. package/dist/commands/comment/reply.d.ts.map +1 -0
  13. package/dist/commands/comment/reply.js +23 -0
  14. package/dist/commands/comment/reply.js.map +1 -0
  15. package/dist/commands/comment/resolve.d.ts +10 -0
  16. package/dist/commands/comment/resolve.d.ts.map +1 -0
  17. package/dist/commands/comment/resolve.js +20 -0
  18. package/dist/commands/comment/resolve.js.map +1 -0
  19. package/dist/commands/comments.d.ts +12 -0
  20. package/dist/commands/comments.d.ts.map +1 -0
  21. package/dist/commands/comments.js +50 -0
  22. package/dist/commands/comments.js.map +1 -0
  23. package/dist/commands/contents.d.ts +13 -0
  24. package/dist/commands/contents.d.ts.map +1 -0
  25. package/dist/commands/contents.js +75 -0
  26. package/dist/commands/contents.js.map +1 -0
  27. package/dist/commands/doc/delete.d.ts +10 -0
  28. package/dist/commands/doc/delete.d.ts.map +1 -0
  29. package/dist/commands/doc/delete.js +24 -0
  30. package/dist/commands/doc/delete.js.map +1 -0
  31. package/dist/commands/doc/get.d.ts +13 -0
  32. package/dist/commands/doc/get.d.ts.map +1 -0
  33. package/dist/commands/doc/get.js +36 -0
  34. package/dist/commands/doc/get.js.map +1 -0
  35. package/dist/commands/doc/move.d.ts +14 -0
  36. package/dist/commands/doc/move.d.ts.map +1 -0
  37. package/dist/commands/doc/move.js +31 -0
  38. package/dist/commands/doc/move.js.map +1 -0
  39. package/dist/commands/doc/post.d.ts +15 -0
  40. package/dist/commands/doc/post.d.ts.map +1 -0
  41. package/dist/commands/doc/post.js +36 -0
  42. package/dist/commands/doc/post.js.map +1 -0
  43. package/dist/commands/doc/rename.d.ts +13 -0
  44. package/dist/commands/doc/rename.d.ts.map +1 -0
  45. package/dist/commands/doc/rename.js +24 -0
  46. package/dist/commands/doc/rename.js.map +1 -0
  47. package/dist/commands/doc/restore.d.ts +10 -0
  48. package/dist/commands/doc/restore.d.ts.map +1 -0
  49. package/dist/commands/doc/restore.js +22 -0
  50. package/dist/commands/doc/restore.js.map +1 -0
  51. package/dist/commands/doc/update.d.ts +15 -0
  52. package/dist/commands/doc/update.d.ts.map +1 -0
  53. package/dist/commands/doc/update.js +30 -0
  54. package/dist/commands/doc/update.js.map +1 -0
  55. package/dist/commands/feedback/submit.d.ts +6 -0
  56. package/dist/commands/feedback/submit.d.ts.map +1 -0
  57. package/dist/commands/feedback/submit.js +9 -0
  58. package/dist/commands/feedback/submit.js.map +1 -0
  59. package/dist/commands/folder/move.d.ts +14 -0
  60. package/dist/commands/folder/move.d.ts.map +1 -0
  61. package/dist/commands/folder/move.js +31 -0
  62. package/dist/commands/folder/move.js.map +1 -0
  63. package/dist/commands/folder/rename.d.ts +13 -0
  64. package/dist/commands/folder/rename.d.ts.map +1 -0
  65. package/dist/commands/folder/rename.js +25 -0
  66. package/dist/commands/folder/rename.js.map +1 -0
  67. package/dist/commands/identity/emoji.d.ts +13 -0
  68. package/dist/commands/identity/emoji.d.ts.map +1 -0
  69. package/dist/commands/identity/emoji.js +58 -0
  70. package/dist/commands/identity/emoji.js.map +1 -0
  71. package/dist/commands/login.d.ts +10 -0
  72. package/dist/commands/login.d.ts.map +1 -0
  73. package/dist/commands/login.js +44 -0
  74. package/dist/commands/login.js.map +1 -0
  75. package/dist/commands/logout.d.ts +6 -0
  76. package/dist/commands/logout.d.ts.map +1 -0
  77. package/dist/commands/logout.js +11 -0
  78. package/dist/commands/logout.js.map +1 -0
  79. package/dist/commands/version.d.ts +6 -0
  80. package/dist/commands/version.d.ts.map +1 -0
  81. package/dist/commands/version.js +11 -0
  82. package/dist/commands/version.js.map +1 -0
  83. package/dist/commands/whoami.d.ts +9 -0
  84. package/dist/commands/whoami.d.ts.map +1 -0
  85. package/dist/commands/whoami.js +40 -0
  86. package/dist/commands/whoami.js.map +1 -0
  87. package/dist/index.d.ts +2 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +3 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/lib/client.d.ts +10 -0
  92. package/dist/lib/client.d.ts.map +1 -0
  93. package/dist/lib/client.js +50 -0
  94. package/dist/lib/client.js.map +1 -0
  95. package/dist/lib/config.d.ts +9 -0
  96. package/dist/lib/config.d.ts.map +1 -0
  97. package/dist/lib/config.js +38 -0
  98. package/dist/lib/config.js.map +1 -0
  99. package/dist/lib/content.d.ts +11 -0
  100. package/dist/lib/content.d.ts.map +1 -0
  101. package/dist/lib/content.js +19 -0
  102. package/dist/lib/content.js.map +1 -0
  103. package/dist/lib/kin-types.d.ts +58 -0
  104. package/dist/lib/kin-types.d.ts.map +1 -0
  105. package/dist/lib/kin-types.js +5 -0
  106. package/dist/lib/kin-types.js.map +1 -0
  107. package/dist/lib/output.d.ts +44 -0
  108. package/dist/lib/output.d.ts.map +1 -0
  109. package/dist/lib/output.js +96 -0
  110. package/dist/lib/output.js.map +1 -0
  111. package/dist/lib/types.d.ts +14 -0
  112. package/dist/lib/types.d.ts.map +1 -0
  113. package/dist/lib/types.js +3 -0
  114. package/dist/lib/types.js.map +1 -0
  115. package/package.json +56 -0
@@ -0,0 +1,15 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DocPost 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 | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ content: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ folder: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=post.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../src/commands/doc/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAclD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,WAAW,SAAuC;IAEzD,MAAM,CAAC,IAAI;;MAEV;IAED,MAAM,CAAC,KAAK;;;;;MAKX;IAEK,GAAG;CA0BV"}
@@ -0,0 +1,36 @@
1
+ import { Command, Args, Flags } from '@oclif/core';
2
+ import { apiPost } from '../../lib/client.js';
3
+ import { kv, sep, hint, ansi, resolveCommitSha } from '../../lib/output.js';
4
+ import { readContent } from '../../lib/content.js';
5
+ export default class DocPost extends Command {
6
+ static description = 'Post a new document 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: 'Document name', required: true }),
12
+ file: Flags.string({ char: 'f', description: 'Read content from a file path' }),
13
+ content: Flags.string({ char: 'c', description: 'Document content (inline)' }),
14
+ folder: Flags.string({ description: 'Folder ID to place the document in' }),
15
+ };
16
+ async run() {
17
+ const { args, flags } = await this.parse(DocPost);
18
+ const content = readContent(flags, (msg) => this.error(msg));
19
+ const doc = await apiPost(`/workspaces/${args.workspaceId}/documents`, { name: flags.name, content, ...(flags.folder ? { folderId: flags.folder } : {}) });
20
+ const sha = resolveCommitSha(doc);
21
+ const webUrl = doc.webUrl ?? '';
22
+ this.log(ansi.green(' Document created'));
23
+ sep();
24
+ kv('ID', doc.id);
25
+ kv('Name', doc.name);
26
+ kv('Commit SHA', sha);
27
+ if (webUrl) {
28
+ this.log(`\n ${ansi.bold('View in browser:')}`);
29
+ this.log(` ${ansi.cyan(webUrl)}`);
30
+ }
31
+ sep();
32
+ hint(`Edit it with: kin doc update ${args.workspaceId} ${doc.id} --file <path>`);
33
+ hint(`Read comments with: kin comments ${doc.id}`);
34
+ }
35
+ }
36
+ //# sourceMappingURL=post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../../src/commands/doc/post.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,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAWlD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,WAAW,GAAG,oCAAoC,CAAA;IAEzD,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,EAAK,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClF,IAAI,EAAK,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;QAClF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC;QAC9E,MAAM,EAAG,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC;KAC7E,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAEjD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QAE5D,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,eAAe,IAAI,CAAC,WAAW,YAAY,EAC3C,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CACnF,CAAA;QAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAA;QAE/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC1C,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,YAAY,EAAE,GAAG,CAAC,CAAA;QACrB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;YAChD,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACpC,CAAC;QACD,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,gCAAgC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,EAAE,gBAAgB,CAAC,CAAA;QAChF,IAAI,CAAC,oCAAoC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IACpD,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DocRename 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
+ name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=rename.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../../src/commands/doc/rename.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AASlD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAA2E;IAE7F,MAAM,CAAC,IAAI;;;MAGV;IAED,MAAM,CAAC,KAAK;;MAEX;IAEK,GAAG;CAeV"}
@@ -0,0 +1,24 @@
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 DocRename extends Command {
5
+ static description = "Rename a document (changes its display name; git history is preserved)";
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
+ name: Flags.string({ char: 'n', description: 'New document name', required: true }),
12
+ };
13
+ async run() {
14
+ const { args, flags } = await this.parse(DocRename);
15
+ const doc = await apiPatch(`/workspaces/${args.workspaceId}/documents/${args.assetId}`, { name: flags.name });
16
+ this.log(ansi.green(' Document renamed'));
17
+ sep();
18
+ kv('ID', doc.id);
19
+ kv('Name', doc.name);
20
+ sep();
21
+ hint(`Read it with: kin doc get ${args.workspaceId} ${doc.id}`);
22
+ }
23
+ }
24
+ //# sourceMappingURL=rename.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename.js","sourceRoot":"","sources":["../../../src/commands/doc/rename.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;AAOzD,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,MAAM,CAAC,KAAK,GAAG;QACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACpF,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAEnD,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,eAAe,IAAI,CAAC,WAAW,cAAc,IAAI,CAAC,OAAO,EAAE,EAC3D,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CACrB,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC1C,GAAG,EAAE,CAAA;QACL,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAChB,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QACpB,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,6BAA6B,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IACjE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DocRestore 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=restore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../../src/commands/doc/restore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAA;AAU3C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA+B;IAEjD,MAAM,CAAC,IAAI;;;MAGV;IAEK,GAAG;CAcV"}
@@ -0,0 +1,22 @@
1
+ import { Command, Args } from '@oclif/core';
2
+ import { apiPost } from '../../lib/client.js';
3
+ import { kv, sep, hint, ansi } from '../../lib/output.js';
4
+ export default class DocRestore extends Command {
5
+ static description = 'Restore a trashed document';
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(DocRestore);
12
+ const result = await apiPost(`/workspaces/${args.workspaceId}/documents/${args.assetId}/restore`);
13
+ this.log(ansi.green(' Document restored'));
14
+ sep();
15
+ kv('ID', result.id);
16
+ if (result.name)
17
+ kv('Name', result.name);
18
+ sep();
19
+ hint(`View it with: kin doc get ${args.workspaceId} ${args.assetId}`);
20
+ }
21
+ }
22
+ //# sourceMappingURL=restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../../src/commands/doc/restore.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,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAQzD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,GAAG,4BAA4B,CAAA;IAEjD,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,UAAU,CAAC,CAAA;QAE7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,eAAe,IAAI,CAAC,WAAW,cAAc,IAAI,CAAC,OAAO,UAAU,CACpE,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAA;QAC3C,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,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,6BAA6B,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACvE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DocUpdate 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
+ file: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ content: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ message: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/doc/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAYlD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAAgC;IAElD,MAAM,CAAC,IAAI;;;MAGV;IAED,MAAM,CAAC,KAAK;;;;MAIX;IAEK,GAAG;CAmBV"}
@@ -0,0 +1,30 @@
1
+ import { Command, Args, Flags } from '@oclif/core';
2
+ import { apiPatch } from '../../lib/client.js';
3
+ import { kv, sep, hint, ansi, resolveCommitSha } from '../../lib/output.js';
4
+ import { readContent } from '../../lib/content.js';
5
+ export default class DocUpdate extends Command {
6
+ static description = "Update a document's content";
7
+ static args = {
8
+ workspaceId: Args.string({ description: 'Workspace ID', required: true }),
9
+ assetId: Args.string({ description: 'Document (asset) ID', required: true }),
10
+ };
11
+ static flags = {
12
+ file: Flags.string({ char: 'f', description: 'Read content from a file path' }),
13
+ content: Flags.string({ char: 'c', description: 'Content (inline)' }),
14
+ message: Flags.string({ char: 'm', description: 'Commit message' }),
15
+ };
16
+ async run() {
17
+ const { args, flags } = await this.parse(DocUpdate);
18
+ const content = readContent(flags, (msg) => this.error(msg));
19
+ const body = { content, ...(flags.message ? { message: flags.message } : {}) };
20
+ const doc = await apiPatch(`/workspaces/${args.workspaceId}/documents/${args.assetId}`, body);
21
+ this.log(ansi.green(' Document updated'));
22
+ sep();
23
+ kv('ID', doc.id);
24
+ kv('Name', doc.name);
25
+ kv('New Commit SHA', resolveCommitSha(doc));
26
+ sep();
27
+ hint(`Read comments with: kin comments ${args.assetId}`);
28
+ }
29
+ }
30
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/doc/update.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,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AASlD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,GAAG,6BAA6B,CAAA;IAElD,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,IAAI,EAAK,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;QAClF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;QACrE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;KACpE,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAEnD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QAC5D,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;QAE9E,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,eAAe,IAAI,CAAC,WAAW,cAAc,IAAI,CAAC,OAAO,EAAE,EAC3D,IAAI,CACL,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAC1C,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,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3C,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,oCAAoC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IAC1D,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class FeedbackSubmit extends Command {
3
+ static description: string;
4
+ run(): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=submit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../../src/commands/feedback/submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,MAAM,CAAC,WAAW,SAAoB;IAEhC,GAAG;CAIV"}
@@ -0,0 +1,9 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class FeedbackSubmit extends Command {
3
+ static description = 'Submit feedback';
4
+ async run() {
5
+ this.log('Feedback submission coming soon.');
6
+ this.log('In the meantime: https://kincollab.com/feedback');
7
+ }
8
+ }
9
+ //# sourceMappingURL=submit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../src/commands/feedback/submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,MAAM,CAAC,WAAW,GAAG,iBAAiB,CAAA;IAEtC,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;QAC5C,IAAI,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;IAC7D,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class FolderMove extends Command {
3
+ static description: string;
4
+ static args: {
5
+ workspaceId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ folderId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ parent: 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/folder/move.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAWlD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAAkE;IAEpF,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 FolderMove extends Command {
5
+ static description = 'Move a folder under another folder (or to the workspace root)';
6
+ static args = {
7
+ workspaceId: Args.string({ description: 'Workspace ID', required: true }),
8
+ folderId: Args.string({ description: 'Folder ID', required: true }),
9
+ };
10
+ static flags = {
11
+ parent: Flags.string({ description: 'Target parent folder ID (omit or use --root to move to the workspace root)' }),
12
+ root: Flags.boolean({ description: 'Move the folder to the workspace root', default: false }),
13
+ };
14
+ async run() {
15
+ const { args, flags } = await this.parse(FolderMove);
16
+ if (!flags.parent && !flags.root) {
17
+ this.error('Specify --parent <id> to move under a folder, or --root to move to the workspace root');
18
+ }
19
+ const parentFolderId = flags.root ? null : flags.parent;
20
+ const folder = await apiPatch(`/workspaces/${args.workspaceId}/folders/${args.folderId}`, { parentFolderId });
21
+ this.log(ansi.green(' Folder moved'));
22
+ sep();
23
+ kv('ID', folder.id);
24
+ kv('Name', folder.name);
25
+ kv('Path', folder.path);
26
+ kv('Parent', folder.parentFolderId ?? '(workspace root)');
27
+ sep();
28
+ hint(`List the workspace tree with: kin contents ${args.workspaceId}`);
29
+ }
30
+ }
31
+ //# sourceMappingURL=move.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.js","sourceRoot":"","sources":["../../../src/commands/folder/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;AASzD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,GAAG,+DAA+D,CAAA;IAEpF,MAAM,CAAC,IAAI,GAAG;QACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACzE,QAAQ,EAAK,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACvE,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4EAA4E,EAAE,CAAC;QACnH,IAAI,EAAI,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAChG,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAEpD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,uFAAuF,CAAC,CAAA;QACrG,CAAC;QAED,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAO,CAAA;QAExD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,eAAe,IAAI,CAAC,WAAW,YAAY,IAAI,CAAC,QAAQ,EAAE,EAC1D,EAAE,cAAc,EAAE,CACnB,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACtC,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,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,IAAI,kBAAkB,CAAC,CAAA;QACzD,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,8CAA8C,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACxE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class FolderRename extends Command {
3
+ static description: string;
4
+ static args: {
5
+ workspaceId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ folderId: 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
+ };
11
+ run(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=rename.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/rename.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAUlD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,MAAM,CAAC,WAAW,SAA6E;IAE/F,MAAM,CAAC,IAAI;;;MAGV;IAED,MAAM,CAAC,KAAK;;MAEX;IAEK,GAAG;CAgBV"}
@@ -0,0 +1,25 @@
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 FolderRename extends Command {
5
+ static description = 'Rename a folder (updates its name and the paths of everything inside it)';
6
+ static args = {
7
+ workspaceId: Args.string({ description: 'Workspace ID', required: true }),
8
+ folderId: Args.string({ description: 'Folder ID', required: true }),
9
+ };
10
+ static flags = {
11
+ name: Flags.string({ char: 'n', description: 'New folder name', required: true }),
12
+ };
13
+ async run() {
14
+ const { args, flags } = await this.parse(FolderRename);
15
+ const folder = await apiPatch(`/workspaces/${args.workspaceId}/folders/${args.folderId}`, { name: flags.name });
16
+ this.log(ansi.green(' Folder renamed'));
17
+ sep();
18
+ kv('ID', folder.id);
19
+ kv('Name', folder.name);
20
+ kv('Path', folder.path);
21
+ sep();
22
+ hint(`List the workspace tree with: kin contents ${args.workspaceId}`);
23
+ }
24
+ }
25
+ //# sourceMappingURL=rename.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename.js","sourceRoot":"","sources":["../../../src/commands/folder/rename.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,YAAa,SAAQ,OAAO;IAC/C,MAAM,CAAC,WAAW,GAAG,0EAA0E,CAAA;IAE/F,MAAM,CAAC,IAAI,GAAG;QACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACzE,QAAQ,EAAK,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACvE,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAClF,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,QAAQ,CAC3B,eAAe,IAAI,CAAC,WAAW,YAAY,IAAI,CAAC,QAAQ,EAAE,EAC1D,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CACrB,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,8CAA8C,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACxE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class IdentityEmoji extends Command {
3
+ static description: string;
4
+ static args: {
5
+ emoji: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ clear: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=emoji.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji.d.ts","sourceRoot":"","sources":["../../../src/commands/identity/emoji.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAWlD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,MAAM,CAAC,WAAW,SAAqC;IAEvD,MAAM,CAAC,IAAI;;MAEV;IAED,MAAM,CAAC,KAAK;;;MAGX;IAEK,GAAG;CAiCV"}
@@ -0,0 +1,58 @@
1
+ import { Command, Args, Flags } from '@oclif/core';
2
+ import { apiGet, apiPatch } from '../../lib/client.js';
3
+ import { kv, sep, hint, ansi, printJson, JSON_FLAG } from '../../lib/output.js';
4
+ function printIdentityEmoji(me) {
5
+ sep();
6
+ kv('Name', me.data.name);
7
+ kv('Emoji', me.data.emoji ?? '—');
8
+ }
9
+ export default class IdentityEmoji extends Command {
10
+ static description = "Get or set your identity's emoji";
11
+ static args = {
12
+ emoji: Args.string({ description: 'Emoji to set (e.g. 🦉). Omit to show current.', required: false }),
13
+ };
14
+ static flags = {
15
+ ...JSON_FLAG,
16
+ clear: Flags.boolean({ description: 'Clear your emoji', default: false }),
17
+ };
18
+ async run() {
19
+ const { args, flags } = await this.parse(IdentityEmoji);
20
+ // --clear flag: patch emoji to null
21
+ if (flags.clear) {
22
+ const me = await apiPatch('/me', { emoji: null });
23
+ if (flags.json) {
24
+ printJson(me);
25
+ return;
26
+ }
27
+ this.log(ansi.green(' Emoji cleared.'));
28
+ printIdentityEmoji(me);
29
+ return;
30
+ }
31
+ // Arg provided: set emoji
32
+ if (args.emoji) {
33
+ const me = await apiPatch('/me', { emoji: args.emoji });
34
+ if (flags.json) {
35
+ printJson(me);
36
+ return;
37
+ }
38
+ this.log(ansi.green(` Emoji set to ${args.emoji}`));
39
+ printIdentityEmoji(me);
40
+ return;
41
+ }
42
+ // No arg, no flag: show current emoji
43
+ const me = await apiGet('/me');
44
+ if (flags.json) {
45
+ printJson(me);
46
+ return;
47
+ }
48
+ printIdentityEmoji(me);
49
+ sep();
50
+ if (!me.data.emoji) {
51
+ hint('No emoji set. Pick one with: kin identity emoji <emoji>');
52
+ }
53
+ else {
54
+ hint('Change it with: kin identity emoji <emoji> | Clear with: kin identity emoji --clear');
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=emoji.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji.js","sourceRoot":"","sources":["../../../src/commands/identity/emoji.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/E,SAAS,kBAAkB,CAAC,EAAc;IACxC,GAAG,EAAE,CAAA;IACL,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,MAAM,CAAC,WAAW,GAAG,kCAAkC,CAAA;IAEvD,MAAM,CAAC,IAAI,GAAG;QACZ,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+CAA+C,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KACtG,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,SAAS;QACZ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAC1E,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAEvD,oCAAoC;QACpC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAa,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAC7D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAAC,OAAM;YAAC,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAA;YACxC,kBAAkB,CAAC,EAAE,CAAC,CAAA;YACtB,OAAM;QACR,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAa,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;YACnE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAAC,OAAM;YAAC,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YACpD,kBAAkB,CAAC,EAAE,CAAC,CAAA;YACtB,OAAM;QACR,CAAC;QAED,sCAAsC;QACtC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAa,KAAK,CAAC,CAAA;QAC1C,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QAEzC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QACtB,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,yDAAyD,CAAC,CAAA;QACjE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,uFAAuF,CAAC,CAAA;QAC/F,CAAC;IACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Login extends Command {
3
+ static description: string;
4
+ static flags: {
5
+ token: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
6
+ url: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAc5C,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAC,WAAW,SAA+C;IAEjE,MAAM,CAAC,KAAK;;;MAWX;IAEK,GAAG;CA0BV"}
@@ -0,0 +1,44 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import { saveConfig, clearConfig } from '../lib/config.js';
3
+ import { apiGetWith } from '../lib/client.js';
4
+ import { kv, hint, sep, ansi } from '../lib/output.js';
5
+ export default class Login extends Command {
6
+ static description = 'Authenticate with Kin using an agent token';
7
+ static flags = {
8
+ token: Flags.string({
9
+ char: 't',
10
+ description: 'Agent token (kin_live_…)',
11
+ required: true,
12
+ }),
13
+ url: Flags.string({
14
+ char: 'u',
15
+ description: 'Kin API base URL',
16
+ default: 'http://localhost:3000',
17
+ }),
18
+ };
19
+ async run() {
20
+ const { flags } = await this.parse(Login);
21
+ const { token, url } = flags;
22
+ // Validate by hitting GET /me with the token
23
+ let me;
24
+ try {
25
+ me = await apiGetWith('/me', token, url);
26
+ }
27
+ catch (err) {
28
+ clearConfig();
29
+ const message = err instanceof Error ? err.message : String(err);
30
+ this.error(`Authentication failed: ${message}`);
31
+ }
32
+ saveConfig({ baseUrl: url, token });
33
+ this.log(ansi.green(' Authenticated successfully'));
34
+ sep();
35
+ kv('Name', me.data.name);
36
+ kv('Type', me.data.type);
37
+ kv('Identity ID', me.data.id);
38
+ kv('API URL', url);
39
+ sep();
40
+ hint('Try `kin access` to see your org → workspace map');
41
+ hint('Try `kin whoami` to confirm your identity and scopes');
42
+ }
43
+ }
44
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAWtD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAC,WAAW,GAAG,4CAA4C,CAAA;IAEjE,MAAM,CAAC,KAAK,GAAG;QACb,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0BAA0B;YACvC,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;YAChB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,uBAAuB;SACjC,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;QAE5B,6CAA6C;QAC7C,IAAI,EAAc,CAAA;QAClB,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,UAAU,CAAa,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,EAAE,CAAA;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,IAAI,CAAC,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAA;QACjD,CAAC;QAED,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;QAEnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAA;QACpD,GAAG,EAAE,CAAA;QACL,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxB,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7B,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QAClB,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,kDAAkD,CAAC,CAAA;QACxD,IAAI,CAAC,sDAAsD,CAAC,CAAA;IAC9D,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Logout extends Command {
3
+ static description: string;
4
+ run(): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIrC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,WAAW,SAA6B;IAEzC,GAAG;CAIV"}
@@ -0,0 +1,11 @@
1
+ import { Command } from '@oclif/core';
2
+ import { clearConfig } from '../lib/config.js';
3
+ import { ansi } from '../lib/output.js';
4
+ export default class Logout extends Command {
5
+ static description = 'Clear stored credentials';
6
+ async run() {
7
+ clearConfig();
8
+ this.log(ansi.dim(' Credentials cleared. Run `kin login --token <token>` to log in again.'));
9
+ }
10
+ }
11
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAEvC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,WAAW,GAAG,0BAA0B,CAAA;IAE/C,KAAK,CAAC,GAAG;QACP,WAAW,EAAE,CAAA;QACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC,CAAA;IAC/F,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Version extends Command {
3
+ static description: string;
4
+ run(): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAGrC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,WAAW,SAAkC;IAE9C,GAAG;CAKV"}
@@ -0,0 +1,11 @@
1
+ import { Command } from '@oclif/core';
2
+ import { kv, sep } from '../lib/output.js';
3
+ export default class Version extends Command {
4
+ static description = 'Show CLI version and docs URL';
5
+ async run() {
6
+ kv('CLI version', '0.1.0');
7
+ kv('Docs', 'https://kincollab.com/docs');
8
+ sep();
9
+ }
10
+ }
11
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE1C,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,WAAW,GAAG,+BAA+B,CAAA;IAEpD,KAAK,CAAC,GAAG;QACP,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QAC1B,EAAE,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAA;QACxC,GAAG,EAAE,CAAA;IACP,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Whoami 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=whoami.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAYrC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,WAAW,SAA0C;IAE5D,MAAM,CAAC,KAAK;;MAAY;IAElB,GAAG;CAqCV"}
@@ -0,0 +1,40 @@
1
+ import { Command } from '@oclif/core';
2
+ import { apiGet } from '../lib/client.js';
3
+ import { kv, hint, sep, header, ansi, printJson, JSON_FLAG } from '../lib/output.js';
4
+ export default class Whoami extends Command {
5
+ static description = 'Show your identity and granted scopes';
6
+ static flags = JSON_FLAG;
7
+ async run() {
8
+ const { flags } = await this.parse(Whoami);
9
+ const [me, caps] = await Promise.all([
10
+ apiGet('/me'),
11
+ apiGet('/me/capabilities'),
12
+ ]);
13
+ if (flags.json) {
14
+ printJson({ me, capabilities: caps });
15
+ return;
16
+ }
17
+ header('Identity');
18
+ kv('Name', me.data.name);
19
+ kv('Type', me.data.type);
20
+ kv('Emoji', me.data.emoji ?? '—');
21
+ kv('ID', me.data.id);
22
+ header('Granted Scopes');
23
+ if (caps.scopes.length === 0) {
24
+ this.log(ansi.dim(' (none)'));
25
+ }
26
+ else {
27
+ for (const scope of caps.scopes) {
28
+ this.log(` ${ansi.cyan(scope)}`);
29
+ }
30
+ }
31
+ if (caps.effectiveScopes.length > caps.scopes.length) {
32
+ sep();
33
+ this.log(ansi.dim(` Effective (with implied): ${caps.effectiveScopes.join(', ')}`));
34
+ }
35
+ sep();
36
+ hint('Run `kin access` to see your org → workspace map');
37
+ hint('Set your emoji with: kin identity emoji <emoji>');
38
+ }
39
+ }
40
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAUpF,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,WAAW,GAAG,uCAAuC,CAAA;IAE5D,MAAM,CAAC,KAAK,GAAG,SAAS,CAAA;IAExB,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAE1C,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnC,MAAM,CAAa,KAAK,CAAC;YACzB,MAAM,CAAuB,kBAAkB,CAAC;SACjD,CAAC,CAAA;QAEF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;YACrC,OAAM;QACR,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,CAAA;QAClB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAA;QACjC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEpB,MAAM,CAAC,gBAAgB,CAAC,CAAA;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrD,GAAG,EAAE,CAAA;YACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACtF,CAAC;QAED,GAAG,EAAE,CAAA;QACL,IAAI,CAAC,kDAAkD,CAAC,CAAA;QACxD,IAAI,CAAC,iDAAiD,CAAC,CAAA;IACzD,CAAC"}