outrank-cli 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "outrank-cli",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "Agent-first CLI for the Outrank agent API",
5
5
  "type": "module",
6
6
  "files": [
@@ -16,10 +16,10 @@ export const KEYWORDS_HELP = `Usage:
16
16
  outrank-cli keywords export --product <product-id>
17
17
  outrank-cli keywords generation-status --product <product-id>
18
18
  outrank-cli keywords add --product <product-id> --json <object>
19
+ outrank-cli keywords update <keyword-id> --json <object>
19
20
  outrank-cli keywords suggest --product <product-id> (--keyword <text> | --theme <text>) [--keyword-region <code>] [--limit <n>]
20
21
  outrank-cli keywords generate --product <product-id> --count <n> [--source competitors|audiences|both] [--competitor <competitor-id> ...] [--audience <text> ...]
21
22
  outrank-cli keywords bulk-process --product <product-id> --json <object> [--keyword-region <code>]
22
- outrank-cli keywords reschedule <keyword-id> --scheduled-for <date>
23
23
  outrank-cli keywords bulk-reschedule --json <object>
24
24
  outrank-cli keywords delete <keyword-id>
25
25
  outrank-cli keywords bulk-delete --json <object>
@@ -29,14 +29,16 @@ JSON Input:
29
29
 
30
30
  Examples:
31
31
  outrank-cli keywords list --product 00000000-0000-0000-0000-000000000000 --scope all
32
+ outrank-cli keywords list --product 00000000-0000-0000-0000-000000000000 --scope scheduled --q "best seo tools"
32
33
  outrank-cli keywords export --product 00000000-0000-0000-0000-000000000000
33
34
  outrank-cli keywords generation-status --product 00000000-0000-0000-0000-000000000000
34
35
  outrank-cli keywords add --product 00000000-0000-0000-0000-000000000000 --json-file keywords.json
36
+ outrank-cli keywords update 00000000-0000-0000-0000-000000000000 --json '{"instructions":"Write for beginners and include a step-by-step setup section"}'
37
+ outrank-cli keywords update 00000000-0000-0000-0000-000000000000 --json '{"scheduled_for":"2026-05-20"}'
35
38
  outrank-cli keywords suggest --product 00000000-0000-0000-0000-000000000000 --theme "email marketing" --limit 8
36
39
  outrank-cli keywords generate --product 00000000-0000-0000-0000-000000000000 --count 10 --source both
37
40
  outrank-cli keywords generate --product 00000000-0000-0000-0000-000000000000 --count 5 --source competitors --competitor 11111111-1111-1111-1111-111111111111
38
41
  outrank-cli keywords bulk-process --product 00000000-0000-0000-0000-000000000000 --json '{"keywords":["keyword one","keyword two"]}'
39
- outrank-cli keywords reschedule 00000000-0000-0000-0000-000000000000 --scheduled-for 2026-05-20
40
42
  outrank-cli keywords bulk-reschedule --json-file keyword-reschedule.json
41
43
  outrank-cli keywords delete 00000000-0000-0000-0000-000000000000
42
44
  `;
@@ -131,6 +133,17 @@ const handleKeywordsAdd = async (parsed) => {
131
133
  return response.payload;
132
134
  };
133
135
 
136
+ const handleKeywordsUpdate = async (parsed) => {
137
+ const keywordId = getRequiredPositional(parsed, 0, '<keyword-id>');
138
+ const body = await readJsonInput(parsed);
139
+ const response = await requestAgentApi(parsed, {
140
+ method: 'PATCH',
141
+ path: `/keywords/${keywordId}`,
142
+ body,
143
+ });
144
+ return response.payload;
145
+ };
146
+
134
147
  const handleKeywordsSuggest = async (parsed) => {
135
148
  const keyword = getOption(parsed, 'keyword');
136
149
  const theme = getOption(parsed, 'theme');
@@ -228,26 +241,6 @@ const handleKeywordsBulkProcess = async (parsed) => {
228
241
  return response.payload;
229
242
  };
230
243
 
231
- const handleKeywordsReschedule = async (parsed) => {
232
- const keywordId = getRequiredPositional(parsed, 0, '<keyword-id>');
233
- const scheduledFor = getOption(parsed, 'scheduled-for');
234
- if (!scheduledFor) {
235
- throw Object.assign(new Error('Missing required option: --scheduled-for <date>.'), {
236
- cliCode: 'CLI_INVALID_USAGE',
237
- guidance: 'Pass the target schedule date with `--scheduled-for YYYY-MM-DD` or an ISO timestamp.',
238
- });
239
- }
240
-
241
- const response = await requestAgentApi(parsed, {
242
- method: 'PATCH',
243
- path: `/keywords/${keywordId}`,
244
- body: {
245
- scheduled_for: scheduledFor,
246
- },
247
- });
248
- return response.payload;
249
- };
250
-
251
244
  const handleKeywordsBulkReschedule = async (parsed) => {
252
245
  const body = await readJsonInput(parsed);
253
246
  const response = await requestAgentApi(parsed, {
@@ -287,7 +280,7 @@ export const handleKeywordsCommand = async (argv) => {
287
280
  {
288
281
  usage: KEYWORDS_HELP.trim(),
289
282
  },
290
- 'Choose one of: list, get, export, generation-status, add, suggest, generate, bulk-process, reschedule, bulk-reschedule, delete, bulk-delete.',
283
+ 'Choose one of: list, get, export, generation-status, add, update, suggest, generate, bulk-process, bulk-reschedule, delete, bulk-delete.',
291
284
  );
292
285
  }
293
286
 
@@ -296,10 +289,10 @@ export const handleKeywordsCommand = async (argv) => {
296
289
  if (subcommand === 'export') return handleKeywordsExport(parsed);
297
290
  if (subcommand === 'generation-status') return handleKeywordsGenerationStatus(parsed);
298
291
  if (subcommand === 'add') return handleKeywordsAdd(parsed);
292
+ if (subcommand === 'update') return handleKeywordsUpdate(parsed);
299
293
  if (subcommand === 'suggest') return handleKeywordsSuggest(parsed);
300
294
  if (subcommand === 'generate') return handleKeywordsGenerate(parsed);
301
295
  if (subcommand === 'bulk-process') return handleKeywordsBulkProcess(parsed);
302
- if (subcommand === 'reschedule') return handleKeywordsReschedule(parsed);
303
296
  if (subcommand === 'bulk-reschedule') return handleKeywordsBulkReschedule(parsed);
304
297
  if (subcommand === 'delete') return handleKeywordsDelete(parsed);
305
298
  if (subcommand === 'bulk-delete') return handleKeywordsBulkDelete(parsed);