@autonomee/gohub 0.8.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 (179) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +57 -0
  3. package/bin/clawdhub.js +2 -0
  4. package/bin/gohub.js +2 -0
  5. package/dist/browserAuth.d.ts +20 -0
  6. package/dist/browserAuth.js +156 -0
  7. package/dist/browserAuth.js.map +1 -0
  8. package/dist/browserAuth.test.d.ts +1 -0
  9. package/dist/browserAuth.test.js +83 -0
  10. package/dist/browserAuth.test.js.map +1 -0
  11. package/dist/cli/authToken.d.ts +2 -0
  12. package/dist/cli/authToken.js +13 -0
  13. package/dist/cli/authToken.js.map +1 -0
  14. package/dist/cli/autonomeeConfig.d.ts +1 -0
  15. package/dist/cli/autonomeeConfig.js +2 -0
  16. package/dist/cli/autonomeeConfig.js.map +1 -0
  17. package/dist/cli/buildInfo.d.ts +3 -0
  18. package/dist/cli/buildInfo.js +104 -0
  19. package/dist/cli/buildInfo.js.map +1 -0
  20. package/dist/cli/clawdbotConfig.d.ts +6 -0
  21. package/dist/cli/clawdbotConfig.js +155 -0
  22. package/dist/cli/clawdbotConfig.js.map +1 -0
  23. package/dist/cli/clawdbotConfig.test.d.ts +1 -0
  24. package/dist/cli/clawdbotConfig.test.js +199 -0
  25. package/dist/cli/clawdbotConfig.test.js.map +1 -0
  26. package/dist/cli/commands/auth.d.ts +9 -0
  27. package/dist/cli/commands/auth.js +74 -0
  28. package/dist/cli/commands/auth.js.map +1 -0
  29. package/dist/cli/commands/auth.test.d.ts +1 -0
  30. package/dist/cli/commands/auth.test.js +50 -0
  31. package/dist/cli/commands/auth.test.js.map +1 -0
  32. package/dist/cli/commands/delete.d.ts +28 -0
  33. package/dist/cli/commands/delete.js +94 -0
  34. package/dist/cli/commands/delete.js.map +1 -0
  35. package/dist/cli/commands/delete.test.d.ts +1 -0
  36. package/dist/cli/commands/delete.test.js +61 -0
  37. package/dist/cli/commands/delete.test.js.map +1 -0
  38. package/dist/cli/commands/inspect.d.ts +12 -0
  39. package/dist/cli/commands/inspect.js +281 -0
  40. package/dist/cli/commands/inspect.js.map +1 -0
  41. package/dist/cli/commands/inspect.test.d.ts +1 -0
  42. package/dist/cli/commands/inspect.test.js +151 -0
  43. package/dist/cli/commands/inspect.test.js.map +1 -0
  44. package/dist/cli/commands/moderation.d.ts +19 -0
  45. package/dist/cli/commands/moderation.js +161 -0
  46. package/dist/cli/commands/moderation.js.map +1 -0
  47. package/dist/cli/commands/moderation.test.d.ts +1 -0
  48. package/dist/cli/commands/moderation.test.js +147 -0
  49. package/dist/cli/commands/moderation.test.js.map +1 -0
  50. package/dist/cli/commands/ownership.d.ts +15 -0
  51. package/dist/cli/commands/ownership.js +76 -0
  52. package/dist/cli/commands/ownership.js.map +1 -0
  53. package/dist/cli/commands/ownership.test.d.ts +1 -0
  54. package/dist/cli/commands/ownership.test.js +68 -0
  55. package/dist/cli/commands/ownership.test.js.map +1 -0
  56. package/dist/cli/commands/publish.d.ts +9 -0
  57. package/dist/cli/commands/publish.js +85 -0
  58. package/dist/cli/commands/publish.js.map +1 -0
  59. package/dist/cli/commands/publish.test.d.ts +1 -0
  60. package/dist/cli/commands/publish.test.js +105 -0
  61. package/dist/cli/commands/publish.test.js.map +1 -0
  62. package/dist/cli/commands/skills.d.ts +26 -0
  63. package/dist/cli/commands/skills.js +394 -0
  64. package/dist/cli/commands/skills.js.map +1 -0
  65. package/dist/cli/commands/skills.test.d.ts +1 -0
  66. package/dist/cli/commands/skills.test.js +402 -0
  67. package/dist/cli/commands/skills.test.js.map +1 -0
  68. package/dist/cli/commands/star.d.ts +8 -0
  69. package/dist/cli/commands/star.js +31 -0
  70. package/dist/cli/commands/star.js.map +1 -0
  71. package/dist/cli/commands/sync.d.ts +3 -0
  72. package/dist/cli/commands/sync.js +157 -0
  73. package/dist/cli/commands/sync.js.map +1 -0
  74. package/dist/cli/commands/sync.test.d.ts +1 -0
  75. package/dist/cli/commands/sync.test.js +277 -0
  76. package/dist/cli/commands/sync.test.js.map +1 -0
  77. package/dist/cli/commands/syncHelpers.d.ts +76 -0
  78. package/dist/cli/commands/syncHelpers.js +350 -0
  79. package/dist/cli/commands/syncHelpers.js.map +1 -0
  80. package/dist/cli/commands/syncHelpers.test.d.ts +1 -0
  81. package/dist/cli/commands/syncHelpers.test.js +22 -0
  82. package/dist/cli/commands/syncHelpers.test.js.map +1 -0
  83. package/dist/cli/commands/syncTypes.d.ts +24 -0
  84. package/dist/cli/commands/syncTypes.js +2 -0
  85. package/dist/cli/commands/syncTypes.js.map +1 -0
  86. package/dist/cli/commands/transfer.d.ts +50 -0
  87. package/dist/cli/commands/transfer.js +131 -0
  88. package/dist/cli/commands/transfer.js.map +1 -0
  89. package/dist/cli/commands/transfer.test.d.ts +1 -0
  90. package/dist/cli/commands/transfer.test.js +90 -0
  91. package/dist/cli/commands/transfer.test.js.map +1 -0
  92. package/dist/cli/commands/unstar.d.ts +8 -0
  93. package/dist/cli/commands/unstar.js +31 -0
  94. package/dist/cli/commands/unstar.js.map +1 -0
  95. package/dist/cli/helpStyle.d.ts +13 -0
  96. package/dist/cli/helpStyle.js +38 -0
  97. package/dist/cli/helpStyle.js.map +1 -0
  98. package/dist/cli/registry.d.ts +7 -0
  99. package/dist/cli/registry.js +42 -0
  100. package/dist/cli/registry.js.map +1 -0
  101. package/dist/cli/registry.test.d.ts +1 -0
  102. package/dist/cli/registry.test.js +48 -0
  103. package/dist/cli/registry.test.js.map +1 -0
  104. package/dist/cli/scanSkills.d.ts +7 -0
  105. package/dist/cli/scanSkills.js +91 -0
  106. package/dist/cli/scanSkills.js.map +1 -0
  107. package/dist/cli/scanSkills.test.d.ts +1 -0
  108. package/dist/cli/scanSkills.test.js +62 -0
  109. package/dist/cli/scanSkills.test.js.map +1 -0
  110. package/dist/cli/slug.d.ts +2 -0
  111. package/dist/cli/slug.js +16 -0
  112. package/dist/cli/slug.js.map +1 -0
  113. package/dist/cli/types.d.ts +15 -0
  114. package/dist/cli/types.js +2 -0
  115. package/dist/cli/types.js.map +1 -0
  116. package/dist/cli/ui.d.ts +7 -0
  117. package/dist/cli/ui.js +82 -0
  118. package/dist/cli/ui.js.map +1 -0
  119. package/dist/cli/ui.test.d.ts +1 -0
  120. package/dist/cli/ui.test.js +45 -0
  121. package/dist/cli/ui.test.js.map +1 -0
  122. package/dist/cli.d.ts +2 -0
  123. package/dist/cli.js +419 -0
  124. package/dist/cli.js.map +1 -0
  125. package/dist/config.d.ts +4 -0
  126. package/dist/config.js +77 -0
  127. package/dist/config.js.map +1 -0
  128. package/dist/config.test.d.ts +1 -0
  129. package/dist/config.test.js +56 -0
  130. package/dist/config.test.js.map +1 -0
  131. package/dist/discovery.d.ts +5 -0
  132. package/dist/discovery.js +25 -0
  133. package/dist/discovery.js.map +1 -0
  134. package/dist/discovery.test.d.ts +1 -0
  135. package/dist/discovery.test.js +46 -0
  136. package/dist/discovery.test.js.map +1 -0
  137. package/dist/homedir.d.ts +7 -0
  138. package/dist/homedir.js +29 -0
  139. package/dist/homedir.js.map +1 -0
  140. package/dist/http.bun.test.d.ts +1 -0
  141. package/dist/http.bun.test.js +231 -0
  142. package/dist/http.bun.test.js.map +1 -0
  143. package/dist/http.d.ts +43 -0
  144. package/dist/http.js +498 -0
  145. package/dist/http.js.map +1 -0
  146. package/dist/http.test.d.ts +1 -0
  147. package/dist/http.test.js +322 -0
  148. package/dist/http.test.js.map +1 -0
  149. package/dist/schema/ark.d.ts +4 -0
  150. package/dist/schema/ark.js +26 -0
  151. package/dist/schema/ark.js.map +1 -0
  152. package/dist/schema/index.d.ts +6 -0
  153. package/dist/schema/index.js +6 -0
  154. package/dist/schema/index.js.map +1 -0
  155. package/dist/schema/license.d.ts +4 -0
  156. package/dist/schema/license.js +5 -0
  157. package/dist/schema/license.js.map +1 -0
  158. package/dist/schema/routes.d.ts +22 -0
  159. package/dist/schema/routes.js +23 -0
  160. package/dist/schema/routes.js.map +1 -0
  161. package/dist/schema/schemas.d.ts +353 -0
  162. package/dist/schema/schemas.js +318 -0
  163. package/dist/schema/schemas.js.map +1 -0
  164. package/dist/schema/textFiles.d.ts +5 -0
  165. package/dist/schema/textFiles.js +66 -0
  166. package/dist/schema/textFiles.js.map +1 -0
  167. package/dist/schema/textFiles.test.d.ts +1 -0
  168. package/dist/schema/textFiles.test.js +20 -0
  169. package/dist/schema/textFiles.test.js.map +1 -0
  170. package/dist/skills.d.ts +43 -0
  171. package/dist/skills.js +178 -0
  172. package/dist/skills.js.map +1 -0
  173. package/dist/skills.test.d.ts +1 -0
  174. package/dist/skills.test.js +147 -0
  175. package/dist/skills.test.js.map +1 -0
  176. package/dist/types.d.ts +7 -0
  177. package/dist/types.js +2 -0
  178. package/dist/types.js.map +1 -0
  179. package/package.json +41 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.test.js","sourceRoot":"","sources":["../../../src/cli/commands/inspect.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { GlobalOpts } from '../types.js';
2
+ export declare function cmdBanUser(opts: GlobalOpts, identifierArg: string, options: {
3
+ yes?: boolean;
4
+ id?: boolean;
5
+ fuzzy?: boolean;
6
+ reason?: string;
7
+ }, inputAllowed: boolean): Promise<{
8
+ ok: true;
9
+ alreadyBanned: boolean;
10
+ deletedSkills: number;
11
+ } | undefined>;
12
+ export declare function cmdSetRole(opts: GlobalOpts, identifierArg: string, roleArg: string, options: {
13
+ yes?: boolean;
14
+ id?: boolean;
15
+ fuzzy?: boolean;
16
+ }, inputAllowed: boolean): Promise<{
17
+ ok: true;
18
+ role: "user" | "admin" | "moderator";
19
+ } | undefined>;
@@ -0,0 +1,161 @@
1
+ import { isCancel, select } from '@clack/prompts';
2
+ import { apiRequest, registryUrl } from '../../http.js';
3
+ import { ApiRoutes, ApiV1BanUserResponseSchema, ApiV1SetRoleResponseSchema, ApiV1UserSearchResponseSchema, parseArk, } from '../../schema/index.js';
4
+ import { requireAuthToken } from '../authToken.js';
5
+ import { getRegistry } from '../registry.js';
6
+ import { createSpinner, fail, formatError, isInteractive, promptConfirm } from '../ui.js';
7
+ export async function cmdBanUser(opts, identifierArg, options, inputAllowed) {
8
+ const raw = identifierArg.trim();
9
+ if (!raw)
10
+ fail('Handle or user id required');
11
+ const reason = options.reason?.trim() || undefined;
12
+ const token = await requireAuthToken();
13
+ const registry = await getRegistry(opts, { cache: true });
14
+ const allowPrompt = isInteractive() && inputAllowed !== false;
15
+ const resolved = await resolveUserIdentifier(registry, token, raw, { id: options.id, fuzzy: options.fuzzy }, allowPrompt);
16
+ if (!resolved)
17
+ return;
18
+ if (!options.yes) {
19
+ if (!allowPrompt)
20
+ fail('Pass --yes (no input)');
21
+ const ok = await promptConfirm(`Ban ${resolved.label}? (requires moderator/admin; deletes owned skills)`);
22
+ if (!ok)
23
+ return;
24
+ }
25
+ const spinner = createSpinner(`Banning ${resolved.label}`);
26
+ try {
27
+ const result = await apiRequest(registry, {
28
+ method: 'POST',
29
+ path: `${ApiRoutes.users}/ban`,
30
+ token,
31
+ body: resolved.userId
32
+ ? { userId: resolved.userId, reason }
33
+ : { handle: resolved.handle, reason },
34
+ }, ApiV1BanUserResponseSchema);
35
+ const parsed = parseArk(ApiV1BanUserResponseSchema, result, 'Ban user response');
36
+ if (parsed.alreadyBanned) {
37
+ spinner.succeed(`OK. ${resolved.label} already banned`);
38
+ return parsed;
39
+ }
40
+ spinner.succeed(`OK. Banned ${resolved.label} (${formatDeletedSkills(parsed.deletedSkills)})`);
41
+ return parsed;
42
+ }
43
+ catch (error) {
44
+ spinner.fail(formatError(error));
45
+ throw error;
46
+ }
47
+ }
48
+ export async function cmdSetRole(opts, identifierArg, roleArg, options, inputAllowed) {
49
+ const raw = identifierArg.trim();
50
+ if (!raw)
51
+ fail('Handle or user id required');
52
+ const role = normalizeRole(roleArg);
53
+ const token = await requireAuthToken();
54
+ const registry = await getRegistry(opts, { cache: true });
55
+ const allowPrompt = isInteractive() && inputAllowed !== false;
56
+ const resolved = await resolveUserIdentifier(registry, token, raw, { id: options.id, fuzzy: options.fuzzy }, allowPrompt);
57
+ if (!resolved)
58
+ return;
59
+ if (!options.yes) {
60
+ if (!allowPrompt)
61
+ fail('Pass --yes (no input)');
62
+ const ok = await promptConfirm(`Set role for ${resolved.label} to ${role}? (admin only)`);
63
+ if (!ok)
64
+ return;
65
+ }
66
+ const spinner = createSpinner(`Setting role for ${resolved.label}`);
67
+ try {
68
+ const result = await apiRequest(registry, {
69
+ method: 'POST',
70
+ path: `${ApiRoutes.users}/role`,
71
+ token,
72
+ body: resolved.userId
73
+ ? { userId: resolved.userId, role }
74
+ : { handle: resolved.handle, role },
75
+ }, ApiV1SetRoleResponseSchema);
76
+ const parsed = parseArk(ApiV1SetRoleResponseSchema, result, 'Set role response');
77
+ spinner.succeed(`OK. ${resolved.label} is now ${parsed.role}`);
78
+ return parsed;
79
+ }
80
+ catch (error) {
81
+ spinner.fail(formatError(error));
82
+ throw error;
83
+ }
84
+ }
85
+ function normalizeHandle(value) {
86
+ const trimmed = value.trim();
87
+ return trimmed.startsWith('@') ? trimmed.slice(1).toLowerCase() : trimmed.toLowerCase();
88
+ }
89
+ async function resolveUserIdentifier(registry, token, raw, options, allowPrompt) {
90
+ const usesId = Boolean(options.id);
91
+ if (usesId) {
92
+ return { handle: null, userId: raw, label: raw };
93
+ }
94
+ const handle = normalizeHandle(raw);
95
+ if (!options.fuzzy) {
96
+ return { handle, userId: null, label: `@${handle}` };
97
+ }
98
+ const matches = await searchUsers(registry, token, raw);
99
+ if (matches.items.length === 0) {
100
+ fail(`No users matched "${raw}".`);
101
+ }
102
+ if (matches.items.length === 1) {
103
+ const match = matches.items[0];
104
+ return {
105
+ handle: match.handle ?? null,
106
+ userId: match.userId,
107
+ label: formatUserLabel(match),
108
+ };
109
+ }
110
+ if (!allowPrompt) {
111
+ fail(`Multiple users matched "${raw}". Use --id.\n${formatUserList(matches.items)}`);
112
+ }
113
+ const choice = await select({
114
+ message: `Select a user for "${raw}"`,
115
+ options: matches.items.map((item) => ({
116
+ value: item.userId,
117
+ label: formatUserLabel(item),
118
+ })),
119
+ });
120
+ if (isCancel(choice))
121
+ return null;
122
+ const selected = matches.items.find((item) => item.userId === choice);
123
+ if (!selected)
124
+ return null;
125
+ return {
126
+ handle: selected.handle ?? null,
127
+ userId: selected.userId,
128
+ label: formatUserLabel(selected),
129
+ };
130
+ }
131
+ async function searchUsers(registry, token, query) {
132
+ const url = registryUrl(ApiRoutes.users, registry);
133
+ url.searchParams.set('q', query.trim());
134
+ url.searchParams.set('limit', '10');
135
+ const result = await apiRequest(registry, { method: 'GET', url: url.toString(), token }, ApiV1UserSearchResponseSchema);
136
+ return parseArk(ApiV1UserSearchResponseSchema, result, 'User search response');
137
+ }
138
+ function formatUserLabel(user) {
139
+ const handle = user.handle ? `@${user.handle}` : 'unknown';
140
+ const name = user.displayName ?? user.name;
141
+ const role = user.role ? ` (${user.role})` : '';
142
+ const label = name ? `${handle} — ${name}` : handle;
143
+ return `${label}${role} · ${user.userId}`;
144
+ }
145
+ function formatUserList(users) {
146
+ return users.map((user) => `- ${formatUserLabel(user)}`).join('\n');
147
+ }
148
+ function normalizeRole(value) {
149
+ const role = value.trim().toLowerCase();
150
+ if (role === 'user' || role === 'moderator' || role === 'admin')
151
+ return role;
152
+ fail('Role must be user|moderator|admin');
153
+ }
154
+ function formatDeletedSkills(count) {
155
+ if (!Number.isFinite(count))
156
+ return 'deleted skills unknown';
157
+ if (count === 1)
158
+ return 'deleted 1 skill';
159
+ return `deleted ${count} skills`;
160
+ }
161
+ //# sourceMappingURL=moderation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moderation.js","sourceRoot":"","sources":["../../../src/cli/commands/moderation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,147 @@
1
+ /* @vitest-environment node */
2
+ import { afterEach, describe, expect, it, vi } from 'vitest';
3
+ vi.mock('../authToken.js', () => ({
4
+ requireAuthToken: vi.fn(async () => 'tkn'),
5
+ }));
6
+ vi.mock('../registry.js', () => ({
7
+ getRegistry: vi.fn(async () => 'https://gohub.ai'),
8
+ }));
9
+ const mockApiRequest = vi.fn();
10
+ const mockRegistryUrl = vi.fn((path, registry) => {
11
+ const base = registry.endsWith('/') ? registry : `${registry}/`;
12
+ const relative = path.startsWith('/') ? path.slice(1) : path;
13
+ return new URL(relative, base);
14
+ });
15
+ vi.mock('../../http.js', () => ({
16
+ apiRequest: (registry, args, schema) => mockApiRequest(registry, args, schema),
17
+ registryUrl: (...args) => mockRegistryUrl(...args),
18
+ }));
19
+ vi.mock('../ui.js', () => ({
20
+ createSpinner: vi.fn(() => ({ succeed: vi.fn(), fail: vi.fn() })),
21
+ fail: (message) => {
22
+ throw new Error(message);
23
+ },
24
+ formatError: (error) => (error instanceof Error ? error.message : String(error)),
25
+ isInteractive: () => false,
26
+ promptConfirm: vi.fn(async () => true),
27
+ }));
28
+ const { cmdBanUser, cmdSetRole } = await import('./moderation');
29
+ function makeOpts() {
30
+ return {
31
+ workdir: '/work',
32
+ dir: '/work/skills',
33
+ site: 'https://gohub.ai',
34
+ registry: 'https://gohub.ai',
35
+ registrySource: 'default',
36
+ };
37
+ }
38
+ afterEach(() => {
39
+ vi.clearAllMocks();
40
+ });
41
+ describe('cmdBanUser', () => {
42
+ it('requires --yes when input is disabled', async () => {
43
+ await expect(cmdBanUser(makeOpts(), 'demo', {}, false)).rejects.toThrow(/--yes/i);
44
+ });
45
+ it('posts handle payload', async () => {
46
+ mockApiRequest.mockResolvedValueOnce({ ok: true, alreadyBanned: false, deletedSkills: 1 });
47
+ await cmdBanUser(makeOpts(), 'hightower6eu', { yes: true }, false);
48
+ expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
49
+ method: 'POST',
50
+ path: '/api/v1/users/ban',
51
+ body: { handle: 'hightower6eu' },
52
+ }), expect.anything());
53
+ });
54
+ it('includes reason when provided', async () => {
55
+ mockApiRequest.mockResolvedValueOnce({ ok: true, alreadyBanned: false, deletedSkills: 0 });
56
+ await cmdBanUser(makeOpts(), 'hightower6eu', { yes: true, reason: 'malware distribution' }, false);
57
+ expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
58
+ method: 'POST',
59
+ path: '/api/v1/users/ban',
60
+ body: { handle: 'hightower6eu', reason: 'malware distribution' },
61
+ }), expect.anything());
62
+ });
63
+ it('posts user id payload when --id is set', async () => {
64
+ mockApiRequest.mockResolvedValueOnce({ ok: true, alreadyBanned: false, deletedSkills: 0 });
65
+ await cmdBanUser(makeOpts(), 'user_123', { yes: true, id: true }, false);
66
+ expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
67
+ method: 'POST',
68
+ path: '/api/v1/users/ban',
69
+ body: { userId: 'user_123' },
70
+ }), expect.anything());
71
+ });
72
+ it('resolves user via fuzzy search', async () => {
73
+ mockApiRequest
74
+ .mockResolvedValueOnce({
75
+ items: [
76
+ {
77
+ userId: 'users_123',
78
+ handle: 'moonshine-100rze',
79
+ displayName: null,
80
+ name: null,
81
+ role: 'user',
82
+ },
83
+ ],
84
+ total: 1,
85
+ })
86
+ .mockResolvedValueOnce({ ok: true, alreadyBanned: false, deletedSkills: 0 });
87
+ await cmdBanUser(makeOpts(), 'moonshine-100rze', { yes: true, fuzzy: true }, false);
88
+ expect(mockApiRequest).toHaveBeenNthCalledWith(1, expect.anything(), expect.objectContaining({
89
+ method: 'GET',
90
+ url: expect.stringContaining('/api/v1/users?'),
91
+ }), expect.anything());
92
+ expect(mockApiRequest).toHaveBeenNthCalledWith(2, expect.anything(), expect.objectContaining({
93
+ method: 'POST',
94
+ path: '/api/v1/users/ban',
95
+ body: { userId: 'users_123' },
96
+ }), expect.anything());
97
+ });
98
+ it('fails fuzzy search with multiple matches when not interactive', async () => {
99
+ mockApiRequest.mockResolvedValueOnce({
100
+ items: [
101
+ {
102
+ userId: 'users_1',
103
+ handle: 'moonshine-100rze',
104
+ displayName: null,
105
+ name: null,
106
+ role: null,
107
+ },
108
+ {
109
+ userId: 'users_2',
110
+ handle: 'moonshine-100rze2',
111
+ displayName: null,
112
+ name: null,
113
+ role: null,
114
+ },
115
+ ],
116
+ total: 2,
117
+ });
118
+ await expect(cmdBanUser(makeOpts(), 'moonshine', { yes: true, fuzzy: true }, false)).rejects.toThrow(/multiple users matched/i);
119
+ });
120
+ });
121
+ describe('cmdSetRole', () => {
122
+ it('requires --yes when input is disabled', async () => {
123
+ await expect(cmdSetRole(makeOpts(), 'demo', 'moderator', {}, false)).rejects.toThrow(/--yes/i);
124
+ });
125
+ it('rejects invalid roles', async () => {
126
+ await expect(cmdSetRole(makeOpts(), 'demo', 'owner', { yes: true }, false)).rejects.toThrow(/role/i);
127
+ });
128
+ it('posts handle payload', async () => {
129
+ mockApiRequest.mockResolvedValueOnce({ ok: true, role: 'moderator' });
130
+ await cmdSetRole(makeOpts(), 'hightower6eu', 'moderator', { yes: true }, false);
131
+ expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
132
+ method: 'POST',
133
+ path: '/api/v1/users/role',
134
+ body: { handle: 'hightower6eu', role: 'moderator' },
135
+ }), expect.anything());
136
+ });
137
+ it('posts user id payload when --id is set', async () => {
138
+ mockApiRequest.mockResolvedValueOnce({ ok: true, role: 'admin' });
139
+ await cmdSetRole(makeOpts(), 'user_123', 'admin', { yes: true, id: true }, false);
140
+ expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
141
+ method: 'POST',
142
+ path: '/api/v1/users/role',
143
+ body: { userId: 'user_123', role: 'admin' },
144
+ }), expect.anything());
145
+ });
146
+ });
147
+ //# sourceMappingURL=moderation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moderation.test.js","sourceRoot":"","sources":["../../../src/cli/commands/moderation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { GlobalOpts } from '../types.js';
2
+ type ConfirmOptions = {
3
+ yes?: boolean;
4
+ };
5
+ export declare function cmdRenameSkill(opts: GlobalOpts, slugArg: string, newSlugArg: string, options: ConfirmOptions, inputAllowed: boolean): Promise<{
6
+ ok: true;
7
+ slug: string;
8
+ previousSlug: string;
9
+ } | undefined>;
10
+ export declare function cmdMergeSkill(opts: GlobalOpts, sourceSlugArg: string, targetSlugArg: string, options: ConfirmOptions, inputAllowed: boolean): Promise<{
11
+ ok: true;
12
+ sourceSlug: string;
13
+ targetSlug: string;
14
+ } | undefined>;
15
+ export {};
@@ -0,0 +1,76 @@
1
+ import { apiRequest } from '../../http.js';
2
+ import { ApiRoutes, ApiV1SkillMergeResponseSchema, ApiV1SkillRenameResponseSchema, parseArk, } from '../../schema/index.js';
3
+ import { requireAuthToken } from '../authToken.js';
4
+ import { getRegistry } from '../registry.js';
5
+ import { createSpinner, fail, formatError, isInteractive, promptConfirm } from '../ui.js';
6
+ function normalizeSlug(slugArg, label = 'Skill slug') {
7
+ const slug = slugArg.trim().toLowerCase();
8
+ if (!slug)
9
+ fail(`${label} required`);
10
+ return slug;
11
+ }
12
+ function canPrompt(inputAllowed) {
13
+ return isInteractive() && inputAllowed !== false;
14
+ }
15
+ async function requireYesOrConfirm(options, inputAllowed, prompt) {
16
+ if (options.yes)
17
+ return true;
18
+ if (!canPrompt(inputAllowed))
19
+ fail('Pass --yes (no input)');
20
+ return promptConfirm(prompt);
21
+ }
22
+ export async function cmdRenameSkill(opts, slugArg, newSlugArg, options, inputAllowed) {
23
+ const slug = normalizeSlug(slugArg);
24
+ const newSlug = normalizeSlug(newSlugArg, 'New slug');
25
+ if (slug === newSlug)
26
+ fail('New slug must be different');
27
+ const confirmed = await requireYesOrConfirm(options, inputAllowed, `Rename ${slug} to ${newSlug}? Old slug will redirect.`);
28
+ if (!confirmed)
29
+ return;
30
+ const token = await requireAuthToken();
31
+ const registry = await getRegistry(opts, { cache: true });
32
+ const spinner = createSpinner(`Renaming ${slug} to ${newSlug}`);
33
+ try {
34
+ const result = await apiRequest(registry, {
35
+ method: 'POST',
36
+ path: `${ApiRoutes.skills}/${encodeURIComponent(slug)}/rename`,
37
+ token,
38
+ body: JSON.stringify({ newSlug }),
39
+ }, ApiV1SkillRenameResponseSchema);
40
+ const parsed = parseArk(ApiV1SkillRenameResponseSchema, result, 'Rename skill response');
41
+ spinner.succeed(`Renamed ${parsed.previousSlug} to ${parsed.slug}`);
42
+ return parsed;
43
+ }
44
+ catch (error) {
45
+ spinner.fail(formatError(error));
46
+ throw error;
47
+ }
48
+ }
49
+ export async function cmdMergeSkill(opts, sourceSlugArg, targetSlugArg, options, inputAllowed) {
50
+ const sourceSlug = normalizeSlug(sourceSlugArg, 'Source slug');
51
+ const targetSlug = normalizeSlug(targetSlugArg, 'Target slug');
52
+ if (sourceSlug === targetSlug)
53
+ fail('Target slug must be different');
54
+ const confirmed = await requireYesOrConfirm(options, inputAllowed, `Merge ${sourceSlug} into ${targetSlug}? Source slug will redirect and stop listing publicly.`);
55
+ if (!confirmed)
56
+ return;
57
+ const token = await requireAuthToken();
58
+ const registry = await getRegistry(opts, { cache: true });
59
+ const spinner = createSpinner(`Merging ${sourceSlug} into ${targetSlug}`);
60
+ try {
61
+ const result = await apiRequest(registry, {
62
+ method: 'POST',
63
+ path: `${ApiRoutes.skills}/${encodeURIComponent(sourceSlug)}/merge`,
64
+ token,
65
+ body: JSON.stringify({ targetSlug }),
66
+ }, ApiV1SkillMergeResponseSchema);
67
+ const parsed = parseArk(ApiV1SkillMergeResponseSchema, result, 'Merge skill response');
68
+ spinner.succeed(`Merged ${parsed.sourceSlug} into ${parsed.targetSlug}`);
69
+ return parsed;
70
+ }
71
+ catch (error) {
72
+ spinner.fail(formatError(error));
73
+ throw error;
74
+ }
75
+ }
76
+ //# sourceMappingURL=ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ownership.js","sourceRoot":"","sources":["../../../src/cli/commands/ownership.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,68 @@
1
+ /* @vitest-environment node */
2
+ import { afterEach, describe, expect, it, vi } from 'vitest';
3
+ vi.mock('../authToken.js', () => ({
4
+ requireAuthToken: vi.fn(async () => 'tkn'),
5
+ }));
6
+ vi.mock('../registry.js', () => ({
7
+ getRegistry: vi.fn(async () => 'https://gohub.ai'),
8
+ }));
9
+ const mockApiRequest = vi.fn();
10
+ vi.mock('../../http.js', () => ({
11
+ apiRequest: (registry, args, schema) => mockApiRequest(registry, args, schema),
12
+ }));
13
+ vi.mock('../ui.js', () => ({
14
+ createSpinner: vi.fn(() => ({ succeed: vi.fn(), fail: vi.fn() })),
15
+ fail: (message) => {
16
+ throw new Error(message);
17
+ },
18
+ formatError: (error) => (error instanceof Error ? error.message : String(error)),
19
+ isInteractive: () => false,
20
+ promptConfirm: vi.fn(async () => true),
21
+ }));
22
+ const { cmdMergeSkill, cmdRenameSkill } = await import('./ownership');
23
+ function makeOpts() {
24
+ return {
25
+ workdir: '/work',
26
+ dir: '/work/skills',
27
+ site: 'https://gohub.ai',
28
+ registry: 'https://gohub.ai',
29
+ registrySource: 'default',
30
+ };
31
+ }
32
+ afterEach(() => {
33
+ vi.clearAllMocks();
34
+ });
35
+ describe('ownership commands', () => {
36
+ it('rename requires --yes when input is disabled', async () => {
37
+ await expect(cmdRenameSkill(makeOpts(), 'demo', 'demo-new', {}, false)).rejects.toThrow(/--yes/i);
38
+ });
39
+ it('rename calls rename endpoint', async () => {
40
+ mockApiRequest.mockResolvedValueOnce({
41
+ ok: true,
42
+ slug: 'demo-new',
43
+ previousSlug: 'demo',
44
+ });
45
+ await cmdRenameSkill(makeOpts(), 'Demo', 'Demo-New', { yes: true }, false);
46
+ expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
47
+ method: 'POST',
48
+ path: '/api/v1/skills/demo/rename',
49
+ }), expect.anything());
50
+ const requestArgs = mockApiRequest.mock.calls[0]?.[1];
51
+ expect(requestArgs.body).toContain('"newSlug":"demo-new"');
52
+ });
53
+ it('merge calls merge endpoint', async () => {
54
+ mockApiRequest.mockResolvedValueOnce({
55
+ ok: true,
56
+ sourceSlug: 'demo-old',
57
+ targetSlug: 'demo',
58
+ });
59
+ await cmdMergeSkill(makeOpts(), 'Demo-Old', 'Demo', { yes: true }, false);
60
+ expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
61
+ method: 'POST',
62
+ path: '/api/v1/skills/demo-old/merge',
63
+ }), expect.anything());
64
+ const requestArgs = mockApiRequest.mock.calls[0]?.[1];
65
+ expect(requestArgs.body).toContain('"targetSlug":"demo"');
66
+ });
67
+ });
68
+ //# sourceMappingURL=ownership.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ownership.test.js","sourceRoot":"","sources":["../../../src/cli/commands/ownership.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { GlobalOpts } from '../types.js';
2
+ export declare function cmdPublish(opts: GlobalOpts, folderArg: string, options: {
3
+ slug?: string;
4
+ name?: string;
5
+ version?: string;
6
+ changelog?: string;
7
+ tags?: string;
8
+ forkOf?: string;
9
+ }): Promise<void>;