@doist/outline-cli 1.5.2 → 1.6.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 (67) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/commands/auth.js +32 -138
  3. package/dist/commands/auth.js.map +1 -1
  4. package/dist/commands/changelog.d.ts +1 -6
  5. package/dist/commands/changelog.js +8 -88
  6. package/dist/commands/changelog.js.map +1 -1
  7. package/dist/commands/document.js +3 -3
  8. package/dist/commands/document.js.map +1 -1
  9. package/dist/commands/search.js +16 -11
  10. package/dist/commands/search.js.map +1 -1
  11. package/dist/commands/update/index.d.ts +1 -1
  12. package/dist/commands/update/index.js +11 -14
  13. package/dist/commands/update/index.js.map +1 -1
  14. package/dist/index.js +12 -2
  15. package/dist/index.js.map +1 -1
  16. package/dist/lib/api.d.ts +5 -1
  17. package/dist/lib/api.js +9 -7
  18. package/dist/lib/api.js.map +1 -1
  19. package/dist/lib/auth-pages.d.ts +2 -0
  20. package/dist/lib/auth-pages.js +101 -0
  21. package/dist/lib/auth-pages.js.map +1 -0
  22. package/dist/lib/auth-provider.d.ts +10 -0
  23. package/dist/lib/auth-provider.js +198 -0
  24. package/dist/lib/auth-provider.js.map +1 -0
  25. package/dist/lib/auth.d.ts +15 -6
  26. package/dist/lib/auth.js +28 -42
  27. package/dist/lib/auth.js.map +1 -1
  28. package/dist/lib/config.d.ts +18 -0
  29. package/dist/lib/config.js +20 -0
  30. package/dist/lib/config.js.map +1 -0
  31. package/dist/lib/errors.d.ts +8 -0
  32. package/dist/lib/errors.js +9 -0
  33. package/dist/lib/errors.js.map +1 -0
  34. package/dist/lib/global-args.d.ts +5 -0
  35. package/dist/lib/global-args.js +17 -0
  36. package/dist/lib/global-args.js.map +1 -0
  37. package/dist/lib/markdown.d.ts +2 -1
  38. package/dist/lib/markdown.js +10 -5
  39. package/dist/lib/markdown.js.map +1 -1
  40. package/dist/lib/output.d.ts +9 -5
  41. package/dist/lib/output.js +29 -11
  42. package/dist/lib/output.js.map +1 -1
  43. package/dist/lib/skills/content.d.ts +1 -1
  44. package/dist/lib/skills/content.js +10 -3
  45. package/dist/lib/skills/content.js.map +1 -1
  46. package/dist/lib/spinner.d.ts +2 -13
  47. package/dist/lib/spinner.js +4 -55
  48. package/dist/lib/spinner.js.map +1 -1
  49. package/package.json +6 -6
  50. package/dist/commands/update/action.d.ts +0 -4
  51. package/dist/commands/update/action.js +0 -157
  52. package/dist/commands/update/action.js.map +0 -1
  53. package/dist/commands/update/switch.d.ts +0 -4
  54. package/dist/commands/update/switch.js +0 -29
  55. package/dist/commands/update/switch.js.map +0 -1
  56. package/dist/lib/oauth-server.d.ts +0 -14
  57. package/dist/lib/oauth-server.js +0 -203
  58. package/dist/lib/oauth-server.js.map +0 -1
  59. package/dist/lib/oauth.d.ts +0 -17
  60. package/dist/lib/oauth.js +0 -42
  61. package/dist/lib/oauth.js.map +0 -1
  62. package/dist/lib/pkce.d.ts +0 -3
  63. package/dist/lib/pkce.js +0 -16
  64. package/dist/lib/pkce.js.map +0 -1
  65. package/dist/lib/update-config.d.ts +0 -3
  66. package/dist/lib/update-config.js +0 -35
  67. package/dist/lib/update-config.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAA;AAE5B,MAAM,UAAU,cAAc,CAAC,IAAY;IACvC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAW,CAAA;AACvC,CAAC"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,IAAI,mBAAmB,EACtC,cAAc,IAAI,kBAAkB,GACvC,MAAM,0BAA0B,CAAA;AAEjC,IAAI,cAAc,GAAyB,IAAI,CAAA;AAE/C,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC,IAAI,CAAC,cAAc;QAAE,cAAc,GAAG,mBAAmB,EAAE,CAAA;IAC3D,OAAO,cAAc,CAAA;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC7C,MAAM,eAAe,EAAE,CAAA;IACvB,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC"}
@@ -1,11 +1,15 @@
1
+ import { type ViewOptions } from '@doist/cli-core';
1
2
  import type { Pagination } from './api.js';
2
- interface OutputOptions {
3
- json?: boolean;
4
- ndjson?: boolean;
3
+ import { BaseCliError } from './errors.js';
4
+ type AnyCliError = BaseCliError<string>;
5
+ export type OutputOptions = ViewOptions & {
5
6
  full?: boolean;
6
- }
7
+ };
7
8
  export declare function getOutputOptions(opts: Record<string, unknown>): OutputOptions;
8
9
  export declare function outputItem<T extends object>(item: T, humanFormatter: (item: T) => string, essentialKeys?: (keyof T)[], opts?: OutputOptions): void;
9
- export declare function outputList<T extends object>(items: T[], humanFormatter: (item: T) => string, essentialKeys?: (keyof T)[], opts?: OutputOptions, pagination?: Pagination): void;
10
+ export declare function outputList<T extends object>(items: T[], humanFormatter: (item: T) => string, essentialKeys?: (keyof T)[], opts?: OutputOptions, pagination?: Pagination, emptyMessage?: string): void;
11
+ export declare function formatError(error: AnyCliError): string;
10
12
  export declare function formatError(code: string, message: string, hints?: string[]): string;
13
+ export declare function formatErrorJson(error: AnyCliError): string;
14
+ export declare function formatErrorJson(code: string, message: string, hints?: string[]): string;
11
15
  export {};
@@ -1,4 +1,6 @@
1
+ import { formatJson, formatNdjson, printEmpty } from '@doist/cli-core';
1
2
  import chalk from 'chalk';
3
+ import { BaseCliError } from './errors.js';
2
4
  export function getOutputOptions(opts) {
3
5
  return {
4
6
  json: Boolean(opts.json),
@@ -9,26 +11,31 @@ export function getOutputOptions(opts) {
9
11
  export function outputItem(item, humanFormatter, essentialKeys, opts = {}) {
10
12
  if (opts.ndjson) {
11
13
  const data = opts.full || !essentialKeys ? item : pick(item, essentialKeys);
12
- console.log(JSON.stringify(data));
14
+ console.log(formatNdjson([data]));
13
15
  return;
14
16
  }
15
17
  if (opts.json) {
16
18
  const data = opts.full || !essentialKeys ? item : pick(item, essentialKeys);
17
- console.log(JSON.stringify(data, null, 2));
19
+ console.log(formatJson(data));
18
20
  return;
19
21
  }
20
22
  console.log(humanFormatter(item));
21
23
  }
22
- export function outputList(items, humanFormatter, essentialKeys, opts = {}, pagination) {
24
+ export function outputList(items, humanFormatter, essentialKeys, opts = {}, pagination, emptyMessage) {
25
+ if (items.length === 0 && emptyMessage !== undefined) {
26
+ printEmpty({ options: opts, message: emptyMessage });
27
+ return;
28
+ }
29
+ const project = (item) => (opts.full || !essentialKeys ? item : pick(item, essentialKeys));
23
30
  if (opts.ndjson) {
31
+ // Stream item-by-item: avoids buffering the whole list and matches
32
+ // the canonical NDJSON contract (one record per write).
24
33
  for (const item of items) {
25
- const data = opts.full || !essentialKeys ? item : pick(item, essentialKeys);
26
- console.log(JSON.stringify(data));
34
+ console.log(formatNdjson([project(item)]));
27
35
  }
28
36
  }
29
37
  else if (opts.json) {
30
- const data = items.map((item) => opts.full || !essentialKeys ? item : pick(item, essentialKeys));
31
- console.log(JSON.stringify(data, null, 2));
38
+ console.log(formatJson(items.map(project)));
32
39
  }
33
40
  else {
34
41
  for (const item of items) {
@@ -47,14 +54,25 @@ function pick(obj, keys) {
47
54
  }
48
55
  return result;
49
56
  }
50
- export function formatError(code, message, hints) {
51
- const lines = [`Error: ${code}`, message];
52
- if (hints && hints.length > 0) {
57
+ function toCliError(codeOrError, message, hints) {
58
+ if (typeof codeOrError === 'string') {
59
+ return new BaseCliError(codeOrError, message ?? '', { hints });
60
+ }
61
+ return codeOrError;
62
+ }
63
+ export function formatError(codeOrError, message, hints) {
64
+ const err = toCliError(codeOrError, message, hints);
65
+ const lines = [`Error: ${err.code}`, err.message];
66
+ if (err.hints && err.hints.length > 0) {
53
67
  lines.push('');
54
- for (const hint of hints) {
68
+ for (const hint of err.hints) {
55
69
  lines.push(` - ${hint}`);
56
70
  }
57
71
  }
58
72
  return chalk.red(lines.join('\n'));
59
73
  }
74
+ export function formatErrorJson(codeOrError, message, hints) {
75
+ const err = toCliError(codeOrError, message, hints);
76
+ return JSON.stringify({ error: { code: err.code, message: err.message, hints: err.hints } });
77
+ }
60
78
  //# sourceMappingURL=output.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export declare const SKILL_NAME = "outline-cli";
2
2
  export declare const SKILL_DESCRIPTION = "Search and manage Outline wiki documents and collections via the ol CLI";
3
- export declare const SKILL_CONTENT = "# Outline CLI (ol)\n\nUse this skill when the user wants to interact with their Outline wiki/knowledge base.\n\n## Quick Reference\n\n- `ol search \"query\"` - Search documents\n- `ol doc list` - List documents\n- `ol doc get <id>` - Read a document\n- `ol doc open <id>` - Open document in browser\n- `ol doc create --title \"Title\" --collection <id>` - Create document\n- `ol col list` - List collections\n\n## Output Formats\n\nAll list commands support:\n- `--json` - JSON output (essential fields)\n- `--ndjson` - Newline-delimited JSON (streaming)\n- `--full` - Include all fields in JSON\n\n## Document References\n\nDocuments can be referenced by:\n- URL ID (the slug suffix after the last hyphen)\n- Full Outline URL (auto-extracted)\n- Document ID\n\n## Commands\n\n### Search\n```bash\nol search \"query\"\nol search \"query\" --limit 10\nol search \"query\" --collection <id>\nol search \"query\" --status published\nol search \"query\" --json\n```\n\n### Documents\n```bash\nol doc list --collection <id> --limit 25\nol doc list --sort title --direction ASC\nol doc get <id> # Rendered markdown\nol doc get <id> --raw # Raw markdown\nol doc get <id> --json\nol doc open <id> # Open in browser\nol doc create --title \"Title\" --collection <id> --text \"# Content\"\nol doc create --title \"Title\" --parent <ref> --text \"# Content\" # Nest under parent (collection inferred)\nol doc create --title \"Title\" --collection <id> --file ./doc.md\nol doc update <id> --title \"New Title\"\nol doc update <id> --file ./updated.md\nol doc move <id> --collection <target-id> # Move to collection root\nol doc move <id> --parent <ref> # Nest under parent (collection inferred)\nol doc archive <id>\nol doc unarchive <id>\nol doc delete <id> --confirm\n```\n\n### Collections\n```bash\nol col list\nol col get <id>\nol col create --name \"Name\" --description \"Desc\" --color \"#hex\"\nol col create --name \"Private\" --private\nol col update <id> --name \"New Name\"\nol col delete <id> --confirm\n```\n\n### Authentication\n```bash\nol auth login # Configure API token and base URL\nol auth status # Show current auth state\nol auth logout # Clear saved credentials\n```\n\n### Update & Changelog\n```bash\nol update # Update CLI to latest version\nol update --check # Check for updates without installing, show channel\nol update --channel # Show current update channel\nol update switch --stable # Switch to stable release channel\nol update switch --pre-release # Switch to pre-release (next) channel\nol changelog # Show recent changelog entries\nol changelog -n 3 # Show last 3 versions\n```\n\n## Examples\n\n### Find and read a document\n```bash\nol search \"onboarding\" --json | jq '.[0].document.urlId'\nol doc get <urlId>\n```\n\n### Create a document from a file\n```bash\nol doc create --title \"Meeting Notes\" --collection <id> --file ./notes.md --publish\n```\n\n### List all collections and their documents\n```bash\nol col list --json\nol doc list --collection <id> --sort title --direction ASC\n```\n\n### Bulk export with ndjson\n```bash\nol doc list --ndjson --full | jq -r '.title'\n```\n";
3
+ export declare const SKILL_CONTENT = "# Outline CLI (ol)\n\nUse this skill when the user wants to interact with their Outline wiki/knowledge base.\n\n## Quick Reference\n\n- `ol search \"query\"` - Search documents\n- `ol doc list` - List documents\n- `ol doc get <id>` - Read a document\n- `ol doc open <id>` - Open document in browser\n- `ol doc create --title \"Title\" --collection <id>` - Create document\n- `ol col list` - List collections\n\n## Output Formats\n\nAll list commands support:\n- `--json` - JSON output (essential fields)\n- `--ndjson` - Newline-delimited JSON (streaming)\n- `--full` - Include all fields in JSON\n\n## Document References\n\nDocuments can be referenced by:\n- URL ID (the slug suffix after the last hyphen)\n- Full Outline URL (auto-extracted)\n- Document ID\n\n## Commands\n\n### Search\n```bash\nol search \"query\"\nol search \"query\" --limit 10\nol search \"query\" --collection <id>\nol search \"query\" --status published\nol search \"query\" --json\n```\n\n### Documents\n```bash\nol doc list --collection <id> --limit 25\nol doc list --sort title --direction ASC\nol doc get <id> # Rendered markdown\nol doc get <id> --raw # Raw markdown\nol doc get <id> --json\nol doc open <id> # Open in browser\nol doc create --title \"Title\" --collection <id> --text \"# Content\"\nol doc create --title \"Title\" --parent <ref> --text \"# Content\" # Nest under parent (collection inferred)\nol doc create --title \"Title\" --collection <id> --file ./doc.md\nol doc update <id> --title \"New Title\"\nol doc update <id> --file ./updated.md\nol doc move <id> --collection <target-id> # Move to collection root\nol doc move <id> --parent <ref> # Nest under parent (collection inferred)\nol doc archive <id>\nol doc unarchive <id>\nol doc delete <id> --confirm\n```\n\n### Collections\n```bash\nol col list\nol col get <id>\nol col create --name \"Name\" --description \"Desc\" --color \"#hex\"\nol col create --name \"Private\" --private\nol col update <id> --name \"New Name\"\nol col delete <id> --confirm\n```\n\n### Authentication\n```bash\nol auth login # OAuth login (opens browser); prompts for base URL + client ID if needed\nol auth login --base-url <url> # Specify Outline base URL for this login (saved for future use)\nol auth login --client-id <id> # Specify OAuth client ID for this login (saved for future use)\nol auth login --callback-port <port> # Override local OAuth callback port\nol auth login --read-only # Request read-only scopes (where supported by the Outline instance)\nol auth login --json | --ndjson # Machine-readable success envelope\nol auth status # Show current auth state\nol auth logout # Clear saved credentials\n```\n\n### Update & Changelog\n```bash\nol update # Update CLI to latest version\nol update --check # Check for updates without installing, show channel\nol update --check --json # Check for updates as a JSON envelope\nol update --check --ndjson # Check for updates as NDJSON output\nol update --channel # Show current update channel\nol update switch --stable # Switch to stable release channel\nol update switch --pre-release # Switch to pre-release (next) channel\nol changelog # Show recent changelog entries\nol changelog -n 3 # Show last 3 versions\n```\n\n## Examples\n\n### Find and read a document\n```bash\nol search \"onboarding\" --json | jq '.[0].document.urlId'\nol doc get <urlId>\n```\n\n### Create a document from a file\n```bash\nol doc create --title \"Meeting Notes\" --collection <id> --file ./notes.md --publish\n```\n\n### List all collections and their documents\n```bash\nol col list --json\nol doc list --collection <id> --sort title --direction ASC\n```\n\n### Bulk export with ndjson\n```bash\nol doc list --ndjson --full | jq -r '.title'\n```\n";
@@ -70,15 +70,22 @@ ol col delete <id> --confirm
70
70
 
71
71
  ### Authentication
72
72
  \`\`\`bash
73
- ol auth login # Configure API token and base URL
74
- ol auth status # Show current auth state
75
- ol auth logout # Clear saved credentials
73
+ ol auth login # OAuth login (opens browser); prompts for base URL + client ID if needed
74
+ ol auth login --base-url <url> # Specify Outline base URL for this login (saved for future use)
75
+ ol auth login --client-id <id> # Specify OAuth client ID for this login (saved for future use)
76
+ ol auth login --callback-port <port> # Override local OAuth callback port
77
+ ol auth login --read-only # Request read-only scopes (where supported by the Outline instance)
78
+ ol auth login --json | --ndjson # Machine-readable success envelope
79
+ ol auth status # Show current auth state
80
+ ol auth logout # Clear saved credentials
76
81
  \`\`\`
77
82
 
78
83
  ### Update & Changelog
79
84
  \`\`\`bash
80
85
  ol update # Update CLI to latest version
81
86
  ol update --check # Check for updates without installing, show channel
87
+ ol update --check --json # Check for updates as a JSON envelope
88
+ ol update --check --ndjson # Check for updates as NDJSON output
82
89
  ol update --channel # Show current update channel
83
90
  ol update switch --stable # Switch to stable release channel
84
91
  ol update switch --pre-release # Switch to pre-release (next) channel
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAC1B,yEAAyE,CAAA;AAE7E,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6G5B,CAAA"}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAC1B,yEAAyE,CAAA;AAE7E,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoH5B,CAAA"}
@@ -1,13 +1,2 @@
1
- export interface SpinnerOptions {
2
- text: string;
3
- color?: 'green' | 'yellow' | 'blue' | 'red';
4
- noSpinner?: boolean;
5
- }
6
- export declare class LoadingSpinner {
7
- private spinnerInstance;
8
- start(options: SpinnerOptions): this;
9
- succeed(text?: string): void;
10
- fail(text?: string): void;
11
- stop(): void;
12
- }
13
- export declare function withSpinner<T>(options: SpinnerOptions, asyncOperation: () => Promise<T>): Promise<T>;
1
+ export type { SpinnerColor, SpinnerOptions } from '@doist/cli-core';
2
+ export declare const LoadingSpinner: new () => import("@doist/cli-core").LoadingSpinner, withSpinner: <T>(options: import("@doist/cli-core").SpinnerOptions, op: () => Promise<T>) => Promise<T>, startEarlySpinner: (text?: string) => void, stopEarlySpinner: () => void;
@@ -1,56 +1,5 @@
1
- import chalk from 'chalk';
2
- import yoctoSpinner from 'yocto-spinner';
3
- function shouldDisableSpinner() {
4
- if (process.env.OL_SPINNER === 'false')
5
- return true;
6
- if (process.env.CI)
7
- return true;
8
- const args = process.argv;
9
- if (args.includes('--json') || args.includes('--ndjson') || args.includes('--no-spinner')) {
10
- return true;
11
- }
12
- return false;
13
- }
14
- export class LoadingSpinner {
15
- spinnerInstance = null;
16
- start(options) {
17
- if (!process.stdout.isTTY || options.noSpinner || shouldDisableSpinner()) {
18
- return this;
19
- }
20
- const colorFn = chalk[options.color || 'blue'];
21
- this.spinnerInstance = yoctoSpinner({ text: colorFn(options.text) });
22
- this.spinnerInstance.start();
23
- return this;
24
- }
25
- succeed(text) {
26
- if (this.spinnerInstance) {
27
- this.spinnerInstance.success(text ? chalk.green(`✓ ${text}`) : undefined);
28
- this.spinnerInstance = null;
29
- }
30
- }
31
- fail(text) {
32
- if (this.spinnerInstance) {
33
- this.spinnerInstance.error(text ? chalk.red(`✗ ${text}`) : undefined);
34
- this.spinnerInstance = null;
35
- }
36
- }
37
- stop() {
38
- if (this.spinnerInstance) {
39
- this.spinnerInstance.stop();
40
- this.spinnerInstance = null;
41
- }
42
- }
43
- }
44
- export async function withSpinner(options, asyncOperation) {
45
- const spinner = new LoadingSpinner().start(options);
46
- try {
47
- const result = await asyncOperation();
48
- spinner.stop();
49
- return result;
50
- }
51
- catch (error) {
52
- spinner.fail();
53
- throw error;
54
- }
55
- }
1
+ import { createSpinner } from '@doist/cli-core';
2
+ import { shouldDisableSpinner } from './global-args.js';
3
+ const spinner = createSpinner({ isDisabled: shouldDisableSpinner });
4
+ export const { LoadingSpinner, withSpinner, startEarlySpinner, stopEarlySpinner } = spinner;
56
5
  //# sourceMappingURL=spinner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,YAAY,MAAM,eAAe,CAAA;AAQxC,SAAS,oBAAoB;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IACnD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACxF,OAAO,IAAI,CAAA;IACf,CAAC;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,MAAM,OAAO,cAAc;IACf,eAAe,GAA2C,IAAI,CAAA;IAEtE,KAAK,CAAC,OAAuB;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,IAAI,oBAAoB,EAAE,EAAE,CAAC;YACvE,OAAO,IAAI,CAAA;QACf,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,CAAA;QAC9C,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;QAC5B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,OAAO,CAAC,IAAa;QACjB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YACzE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC/B,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAa;QACd,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YACrE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC/B,CAAC;IACL,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;YAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC/B,CAAC;IACL,CAAC;CACJ;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,OAAuB,EACvB,cAAgC;IAEhC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAEnD,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;QACrC,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,OAAO,MAAM,CAAA;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,MAAM,KAAK,CAAA;IACf,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAIvD,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAA;AAEnE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doist/outline-cli",
3
- "version": "1.5.2",
3
+ "version": "1.6.0",
4
4
  "description": "CLI for the Outline wiki/knowledge base API",
5
5
  "type": "module",
6
6
  "bin": {
@@ -48,13 +48,13 @@
48
48
  "node": ">=20.18.1"
49
49
  },
50
50
  "dependencies": {
51
+ "@doist/cli-core": "0.12.0",
51
52
  "chalk": "5.6.2",
52
53
  "commander": "14.0.2",
53
- "marked": "15.0.12",
54
- "marked-terminal": "7.3.0",
54
+ "marked": "18.0.3",
55
+ "marked-terminal-renderer": "2.2.0",
55
56
  "open": "10.2.0",
56
- "undici": "7.22.0",
57
- "yocto-spinner": "1.0.0"
57
+ "undici": "7.22.0"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@semantic-release/changelog": "6.0.3",
@@ -66,6 +66,6 @@
66
66
  "oxlint": "1.57.0",
67
67
  "semantic-release": "25.0.3",
68
68
  "typescript": "5.9.3",
69
- "vitest": "4.0.18"
69
+ "vitest": "4.1.5"
70
70
  }
71
71
  }
@@ -1,4 +0,0 @@
1
- export declare function updateAction(options: {
2
- check?: boolean;
3
- channel?: boolean;
4
- }): Promise<void>;
@@ -1,157 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import chalk from 'chalk';
3
- import packageJson from '../../../package.json' with { type: 'json' };
4
- import { withSpinner } from '../../lib/spinner.js';
5
- import { getUpdateChannel } from '../../lib/update-config.js';
6
- import { fetchWithRetry } from '../../transport/fetch-with-retry.js';
7
- const PACKAGE_NAME = '@doist/outline-cli';
8
- function getInstallTag(channel) {
9
- return channel === 'pre-release' ? 'next' : 'latest';
10
- }
11
- function parseVersion(version) {
12
- const [core, ...rest] = version.split('-');
13
- const [major, minor, patch] = core.split('.').map(Number);
14
- return { major, minor, patch, prerelease: rest.length > 0 ? rest.join('-') : undefined };
15
- }
16
- /** Returns true when `candidate` is strictly newer than `current` per semver. */
17
- function isNewer(current, candidate) {
18
- const a = parseVersion(current);
19
- const b = parseVersion(candidate);
20
- // Compare major.minor.patch
21
- for (const key of ['major', 'minor', 'patch']) {
22
- if (b[key] !== a[key])
23
- return b[key] > a[key];
24
- }
25
- // Equal core: release > pre-release
26
- if (!a.prerelease && b.prerelease)
27
- return false;
28
- if (a.prerelease && !b.prerelease)
29
- return true;
30
- // Both pre-release: numeric-aware comparison (handles "next.10" > "next.2" etc.)
31
- if (a.prerelease && b.prerelease)
32
- return b.prerelease.localeCompare(a.prerelease, undefined, { numeric: true }) > 0;
33
- return false;
34
- }
35
- async function fetchVersion(channel) {
36
- const tag = getInstallTag(channel);
37
- const url = `https://registry.npmjs.org/${PACKAGE_NAME}/${tag}`;
38
- const response = await fetchWithRetry({ url });
39
- if (!response.ok) {
40
- throw new Error(`Registry request failed (HTTP ${response.status})`);
41
- }
42
- const data = (await response.json());
43
- return data.version;
44
- }
45
- function detectPackageManager() {
46
- const execPath = process.env.npm_execpath || process.argv[1] || '';
47
- if (execPath.includes('pnpm'))
48
- return 'pnpm';
49
- return 'npm';
50
- }
51
- function runInstall(pm, tag) {
52
- const command = pm === 'pnpm' ? 'add' : 'install';
53
- return new Promise((resolve, reject) => {
54
- const child = spawn(pm, [command, '-g', `${PACKAGE_NAME}@${tag}`], {
55
- stdio: ['ignore', 'ignore', 'pipe'],
56
- shell: process.platform === 'win32',
57
- });
58
- let stderr = '';
59
- child.stderr?.on('data', (data) => {
60
- stderr += data.toString();
61
- });
62
- child.on('error', reject);
63
- child.on('close', (code) => resolve({ exitCode: code ?? 1, stderr }));
64
- });
65
- }
66
- function channelLabel(channel) {
67
- return channel === 'pre-release' ? ` ${chalk.magenta('(pre-release)')}` : '';
68
- }
69
- export async function updateAction(options) {
70
- if (options.check && options.channel) {
71
- console.error(chalk.red('Error:'), 'Specify either --check or --channel, not both.');
72
- process.exitCode = 1;
73
- return;
74
- }
75
- if (options.channel) {
76
- const ch = getUpdateChannel();
77
- if (ch === 'pre-release') {
78
- console.log(`Update channel: ${chalk.magenta('pre-release')}`);
79
- }
80
- else {
81
- console.log(`Update channel: ${chalk.green('stable')}`);
82
- }
83
- return;
84
- }
85
- const channel = getUpdateChannel();
86
- const tag = getInstallTag(channel);
87
- const label = channelLabel(channel);
88
- const currentVersion = packageJson.version;
89
- let latestVersion;
90
- try {
91
- latestVersion = await withSpinner({ text: `Checking for updates${label}...`, color: 'blue' }, () => fetchVersion(channel));
92
- }
93
- catch (error) {
94
- const message = error instanceof Error ? error.message : String(error);
95
- console.error(chalk.red('Error:'), `Failed to check for updates: ${message}`);
96
- process.exitCode = 1;
97
- return;
98
- }
99
- const updateAvailable = isNewer(currentVersion, latestVersion);
100
- if (options.check) {
101
- const channelLine = channel === 'pre-release'
102
- ? ` Channel: ${chalk.magenta('pre-release')}`
103
- : ` Channel: ${chalk.green('stable')}`;
104
- if (currentVersion === latestVersion) {
105
- console.log(chalk.green('✓'), `Already up to date (v${currentVersion})`);
106
- }
107
- else if (updateAvailable) {
108
- console.log(`Update available: ${chalk.dim(`v${currentVersion}`)} → ${chalk.green(`v${latestVersion}`)}`);
109
- }
110
- else {
111
- console.log(`Downgrade available: ${chalk.dim(`v${currentVersion}`)} → ${chalk.yellow(`v${latestVersion}`)}`);
112
- }
113
- console.log(channelLine);
114
- return;
115
- }
116
- if (currentVersion === latestVersion) {
117
- console.log(chalk.green('✓'), `Already up to date${label} (v${currentVersion})`);
118
- return;
119
- }
120
- if (updateAvailable) {
121
- console.log(`Update available${label}: ${chalk.dim(`v${currentVersion}`)} → ${chalk.green(`v${latestVersion}`)}`);
122
- }
123
- else {
124
- console.log(`Downgrade available${label}: ${chalk.dim(`v${currentVersion}`)} → ${chalk.yellow(`v${latestVersion}`)}`);
125
- }
126
- const pm = detectPackageManager();
127
- let result;
128
- try {
129
- result = await withSpinner({ text: `Updating to v${latestVersion}${label}...`, color: 'blue' }, () => runInstall(pm, tag));
130
- }
131
- catch (error) {
132
- const message = error instanceof Error ? error.message : String(error);
133
- console.error(chalk.red('Error:'), `Install failed: ${message}`);
134
- process.exitCode = 1;
135
- return;
136
- }
137
- if (result.exitCode !== 0) {
138
- if (result.stderr &&
139
- (result.stderr.includes('EACCES') || result.stderr.includes('EPERM'))) {
140
- console.error(chalk.red('Error:'), 'Permission denied. Try running with sudo:');
141
- console.error(chalk.dim(` sudo ${pm} ${pm === 'pnpm' ? 'add' : 'install'} -g ${PACKAGE_NAME}@${tag}`));
142
- }
143
- else {
144
- console.error(chalk.red('Error:'), `${pm} exited with code ${result.exitCode}`);
145
- if (result.stderr) {
146
- console.error(chalk.dim(result.stderr.trim()));
147
- }
148
- }
149
- process.exitCode = 1;
150
- return;
151
- }
152
- console.log(chalk.green('✓'), `Updated to v${latestVersion}${label}`);
153
- if (channel === 'stable') {
154
- console.log(chalk.dim(' Run'), chalk.cyan('ol changelog'), chalk.dim('to see what changed'));
155
- }
156
- }
157
- //# sourceMappingURL=action.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/commands/update/action.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export declare function switchChannel(options: {
2
- stable?: boolean;
3
- preRelease?: boolean;
4
- }): void;
@@ -1,29 +0,0 @@
1
- import chalk from 'chalk';
2
- import { setUpdateChannel } from '../../lib/update-config.js';
3
- export function switchChannel(options) {
4
- if (options.stable && options.preRelease) {
5
- console.error(chalk.red('Error:'), 'Specify either --stable or --pre-release, not both.');
6
- process.exitCode = 1;
7
- return;
8
- }
9
- if (!options.stable && !options.preRelease) {
10
- console.error(chalk.red('Error:'), 'Specify --stable or --pre-release.');
11
- process.exitCode = 1;
12
- return;
13
- }
14
- const channel = options.preRelease ? 'pre-release' : 'stable';
15
- setUpdateChannel(channel);
16
- if (channel === 'pre-release') {
17
- console.log(chalk.green('✓'), `Update channel set to ${chalk.magenta('pre-release')}`);
18
- console.log();
19
- console.log(chalk.yellow('Note:'), 'Pre-release updates follow the', chalk.cyan('next'), 'branch.');
20
- console.log('When pre-release changes are merged into a stable release, no further');
21
- console.log('pre-release updates will be published until a new pre-release cycle begins.');
22
- console.log('Remember to switch back to stable when done:');
23
- console.log(chalk.dim(' ol update switch --stable'));
24
- }
25
- else {
26
- console.log(chalk.green('✓'), 'Update channel set to stable');
27
- }
28
- }
29
- //# sourceMappingURL=switch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../src/commands/update/switch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAsB,MAAM,4BAA4B,CAAA;AAEjF,MAAM,UAAU,aAAa,CAAC,OAAmD;IAC7E,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,qDAAqD,CAAC,CAAA;QACzF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACV,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,oCAAoC,CAAC,CAAA;QACxE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACV,CAAC;IAED,MAAM,OAAO,GAAkB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAA;IAE5E,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAEzB,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,yBAAyB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;QACtF,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EACrB,gCAAgC,EAChC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAClB,SAAS,CACZ,CAAA;QACD,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAA;QACpF,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAA;QAC1F,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAA;IACzD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,8BAA8B,CAAC,CAAA;IACjE,CAAC;AACL,CAAC"}
@@ -1,14 +0,0 @@
1
- interface OAuthServerOptions {
2
- state: string;
3
- timeoutMs?: number;
4
- port?: number;
5
- }
6
- export interface OAuthCallbackServer {
7
- port: number;
8
- redirectUri: string;
9
- waitForCode: Promise<string>;
10
- close: () => void;
11
- }
12
- export declare const DEFAULT_OAUTH_CALLBACK_PORT = 54969;
13
- export declare function startOAuthCallbackServer(options: OAuthServerOptions): Promise<OAuthCallbackServer>;
14
- export {};