vertex-notes 0.1.4 → 0.2.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 (39) hide show
  1. package/dist/{chunk-4QLCD6TZ.js → chunk-WM6QVD53.js} +371 -43
  2. package/dist/chunk-WM6QVD53.js.map +1 -0
  3. package/dist/{chunk-DDFOKGIX.js → chunk-XGZKUOFI.js} +2 -2
  4. package/dist/commands/capture.js +2 -2
  5. package/dist/commands/daily.js +2 -2
  6. package/dist/commands/delete.js +2 -2
  7. package/dist/commands/edit.js +3 -5
  8. package/dist/commands/edit.js.map +1 -1
  9. package/dist/commands/export.js +2 -2
  10. package/dist/commands/hello.js +1 -1
  11. package/dist/commands/help.js +23 -14
  12. package/dist/commands/help.js.map +1 -1
  13. package/dist/commands/howto.js +373 -0
  14. package/dist/commands/howto.js.map +1 -0
  15. package/dist/commands/import.js +39 -0
  16. package/dist/commands/import.js.map +1 -0
  17. package/dist/commands/interactive.js +187 -74
  18. package/dist/commands/interactive.js.map +1 -1
  19. package/dist/commands/login.js +1 -1
  20. package/dist/commands/new.js +2 -2
  21. package/dist/commands/notes.js +2 -2
  22. package/dist/commands/restore.js +2 -2
  23. package/dist/commands/search.js +2 -2
  24. package/dist/commands/status.js +2 -2
  25. package/dist/commands/syntax.js +270 -0
  26. package/dist/commands/syntax.js.map +1 -0
  27. package/dist/commands/tags.js +2 -2
  28. package/dist/commands/today.js +2 -2
  29. package/dist/commands/trash/empty.js +2 -2
  30. package/dist/commands/trash/index.js +2 -2
  31. package/dist/commands/view.js +2 -2
  32. package/dist/lib/client.js +2 -2
  33. package/dist/lib/md-to-tiptap.js +243 -3
  34. package/dist/lib/md-to-tiptap.js.map +1 -1
  35. package/package.json +2 -1
  36. package/dist/chunk-4QLCD6TZ.js.map +0 -1
  37. package/dist/chunk-FWK2J3FR.js +0 -163
  38. package/dist/chunk-FWK2J3FR.js.map +0 -1
  39. /package/dist/{chunk-DDFOKGIX.js.map → chunk-XGZKUOFI.js.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-PBF5EE4Y.js";
5
5
  import {
6
6
  createSupabaseClient
7
- } from "./chunk-4QLCD6TZ.js";
7
+ } from "./chunk-WM6QVD53.js";
8
8
 
9
9
  // src/lib/client.ts
10
10
  var cachedClient = null;
@@ -47,4 +47,4 @@ export {
47
47
  getClient,
48
48
  getUserId
49
49
  };
50
- //# sourceMappingURL=chunk-DDFOKGIX.js.map
50
+ //# sourceMappingURL=chunk-XGZKUOFI.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  getClient,
3
3
  getUserId
4
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-XGZKUOFI.js";
5
5
  import "../chunk-PBF5EE4Y.js";
6
6
  import {
7
7
  getBlocksForNote,
8
8
  listNotes,
9
9
  saveNoteContent
10
- } from "../chunk-4QLCD6TZ.js";
10
+ } from "../chunk-WM6QVD53.js";
11
11
 
12
12
  // src/commands/capture.ts
13
13
  import { Command, Args } from "@oclif/core";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  getClient,
3
3
  getUserId
4
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-XGZKUOFI.js";
5
5
  import "../chunk-PBF5EE4Y.js";
6
6
  import {
7
7
  exportNoteAsMarkdown,
8
8
  getOrCreateDailyNote,
9
9
  listNotes
10
- } from "../chunk-4QLCD6TZ.js";
10
+ } from "../chunk-WM6QVD53.js";
11
11
 
12
12
  // src/commands/daily.ts
13
13
  import { Command, Flags } from "@oclif/core";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getClient,
3
3
  getUserId
4
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-XGZKUOFI.js";
5
5
  import "../chunk-PBF5EE4Y.js";
6
6
  import {
7
7
  listNotes,
8
8
  softDeleteNote
9
- } from "../chunk-4QLCD6TZ.js";
9
+ } from "../chunk-WM6QVD53.js";
10
10
 
11
11
  // src/commands/delete.ts
12
12
  import { Command, Args } from "@oclif/core";
@@ -1,16 +1,14 @@
1
- import {
2
- markdownToTiptap
3
- } from "../chunk-FWK2J3FR.js";
4
1
  import {
5
2
  getClient,
6
3
  getUserId
7
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-XGZKUOFI.js";
8
5
  import "../chunk-PBF5EE4Y.js";
9
6
  import {
10
7
  exportNoteAsMarkdown,
11
8
  listNotes,
9
+ markdownToTiptap,
12
10
  saveNoteContent
13
- } from "../chunk-4QLCD6TZ.js";
11
+ } from "../chunk-WM6QVD53.js";
14
12
 
15
13
  // src/commands/edit.ts
16
14
  import { Command, Args } from "@oclif/core";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/edit.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { writeFileSync, readFileSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { createInterface } from \"node:readline\";\nimport { listNotes, exportNoteAsMarkdown, saveNoteContent } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\nimport { markdownToTiptap } from \"../lib/md-to-tiptap.js\";\n\nconst SYNTAX_GUIDE = `\n Markdown Syntax Guide\n ─────────────────────\n\n Headings: # H1 ## H2 ### H3\n Formatting: **bold** *italic* \\`code\\` ~~strike~~\n Links: [[Wiki Link]] #tagname\n\n Lists: - bullet 1. numbered\n Tasks: - [x] done - [ ] open\n Other: > blockquote --- divider\n\n Code block: \\`\\`\\`python Math block: $$\n print(\"hi\") E = mc^2\n \\`\\`\\` $$\n\n Web app only: mermaid, callouts, query blocks, file uploads\n`;\n\nexport default class Edit extends Command {\n static override description = \"Edit a note in your $EDITOR\";\n\n static override args = {\n title: Args.string({ description: \"Note title (partial match)\", required: true }),\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(Edit);\n const client = await getClient();\n const userId = await getUserId();\n const notes = await listNotes(client, { user_id: userId });\n const query = args.title.toLowerCase();\n const match = notes.find((n) => !n.deleted_at && n.title.toLowerCase().includes(query));\n\n if (!match) {\n this.error(`No note matching \"${args.title}\"`);\n }\n\n const editor = process.env.EDITOR || process.env.VISUAL || \"vim\";\n\n this.log(`\\n Editing: ${match.title}`);\n this.log(` Editor: ${editor}`);\n this.log(SYNTAX_GUIDE);\n\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n await new Promise<void>((resolve) => {\n rl.question(\" Press Enter to open editor...\", () => { rl.close(); resolve(); });\n });\n\n const md = await exportNoteAsMarkdown(client, match.id);\n const tmpFile = join(tmpdir(), `vertex-${match.id}.md`);\n writeFileSync(tmpFile, md, \"utf-8\");\n\n try {\n execSync(`${editor} \"${tmpFile}\"`, { stdio: \"inherit\" });\n } catch {\n this.error(\"Editor exited with error\");\n }\n\n const edited = readFileSync(tmpFile, \"utf-8\");\n if (edited === md) {\n this.log(\"No changes.\");\n return;\n }\n\n const tiptapJson = markdownToTiptap(edited);\n await saveNoteContent(client, match.id, userId, tiptapJson);\n this.log(`Saved: ${match.title}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,SAAS,SAAS,YAAY;AAC9B,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,eAAe,oBAAoB;AAC5C,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAKhC,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBrB,IAAqB,OAArB,MAAqB,cAAa,QAAQ;AAAA,EACxC,OAAgB,cAAc;AAAA,EAE9B,OAAgB,OAAO;AAAA,IACrB,OAAO,KAAK,OAAO,EAAE,aAAa,8BAA8B,UAAU,KAAK,CAAC;AAAA,EAClF;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,KAAI;AACtC,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM,UAAU,QAAQ,EAAE,SAAS,OAAO,CAAC;AACzD,UAAM,QAAQ,KAAK,MAAM,YAAY;AACrC,UAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,YAAY,EAAE,SAAS,KAAK,CAAC;AAEtF,QAAI,CAAC,OAAO;AACV,WAAK,MAAM,qBAAqB,KAAK,KAAK,GAAG;AAAA,IAC/C;AAEA,UAAM,SAAS,QAAQ,IAAI,UAAU,QAAQ,IAAI,UAAU;AAE3D,SAAK,IAAI;AAAA,aAAgB,MAAM,KAAK,EAAE;AACtC,SAAK,IAAI,cAAc,MAAM,EAAE;AAC/B,SAAK,IAAI,YAAY;AAErB,UAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAC3E,UAAM,IAAI,QAAc,CAAC,YAAY;AACnC,SAAG,SAAS,mCAAmC,MAAM;AAAE,WAAG,MAAM;AAAG,gBAAQ;AAAA,MAAG,CAAC;AAAA,IACjF,CAAC;AAED,UAAM,KAAK,MAAM,qBAAqB,QAAQ,MAAM,EAAE;AACtD,UAAM,UAAU,KAAK,OAAO,GAAG,UAAU,MAAM,EAAE,KAAK;AACtD,kBAAc,SAAS,IAAI,OAAO;AAElC,QAAI;AACF,eAAS,GAAG,MAAM,KAAK,OAAO,KAAK,EAAE,OAAO,UAAU,CAAC;AAAA,IACzD,QAAQ;AACN,WAAK,MAAM,0BAA0B;AAAA,IACvC;AAEA,UAAM,SAAS,aAAa,SAAS,OAAO;AAC5C,QAAI,WAAW,IAAI;AACjB,WAAK,IAAI,aAAa;AACtB;AAAA,IACF;AAEA,UAAM,aAAa,iBAAiB,MAAM;AAC1C,UAAM,gBAAgB,QAAQ,MAAM,IAAI,QAAQ,UAAU;AAC1D,SAAK,IAAI,UAAU,MAAM,KAAK,EAAE;AAAA,EAClC;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/commands/edit.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { writeFileSync, readFileSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { createInterface } from \"node:readline\";\nimport { listNotes, exportNoteAsMarkdown, saveNoteContent } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\nimport { markdownToTiptap } from \"@vertex/core\";\n\nconst SYNTAX_GUIDE = `\n Markdown Syntax Guide\n ─────────────────────\n\n Headings: # H1 ## H2 ### H3\n Formatting: **bold** *italic* \\`code\\` ~~strike~~\n Links: [[Wiki Link]] #tagname\n\n Lists: - bullet 1. numbered\n Tasks: - [x] done - [ ] open\n Other: > blockquote --- divider\n\n Code block: \\`\\`\\`python Math block: $$\n print(\"hi\") E = mc^2\n \\`\\`\\` $$\n\n Web app only: mermaid, callouts, query blocks, file uploads\n`;\n\nexport default class Edit extends Command {\n static override description = \"Edit a note in your $EDITOR\";\n\n static override args = {\n title: Args.string({ description: \"Note title (partial match)\", required: true }),\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(Edit);\n const client = await getClient();\n const userId = await getUserId();\n const notes = await listNotes(client, { user_id: userId });\n const query = args.title.toLowerCase();\n const match = notes.find((n) => !n.deleted_at && n.title.toLowerCase().includes(query));\n\n if (!match) {\n this.error(`No note matching \"${args.title}\"`);\n }\n\n const editor = process.env.EDITOR || process.env.VISUAL || \"vim\";\n\n this.log(`\\n Editing: ${match.title}`);\n this.log(` Editor: ${editor}`);\n this.log(SYNTAX_GUIDE);\n\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n await new Promise<void>((resolve) => {\n rl.question(\" Press Enter to open editor...\", () => { rl.close(); resolve(); });\n });\n\n const md = await exportNoteAsMarkdown(client, match.id);\n const tmpFile = join(tmpdir(), `vertex-${match.id}.md`);\n writeFileSync(tmpFile, md, \"utf-8\");\n\n try {\n execSync(`${editor} \"${tmpFile}\"`, { stdio: \"inherit\" });\n } catch {\n this.error(\"Editor exited with error\");\n }\n\n const edited = readFileSync(tmpFile, \"utf-8\");\n if (edited === md) {\n this.log(\"No changes.\");\n return;\n }\n\n const tiptapJson = markdownToTiptap(edited);\n await saveNoteContent(client, match.id, userId, tiptapJson);\n this.log(`Saved: ${match.title}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,SAAS,YAAY;AAC9B,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,eAAe,oBAAoB;AAC5C,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAKhC,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBrB,IAAqB,OAArB,MAAqB,cAAa,QAAQ;AAAA,EACxC,OAAgB,cAAc;AAAA,EAE9B,OAAgB,OAAO;AAAA,IACrB,OAAO,KAAK,OAAO,EAAE,aAAa,8BAA8B,UAAU,KAAK,CAAC;AAAA,EAClF;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,KAAI;AACtC,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM,UAAU,QAAQ,EAAE,SAAS,OAAO,CAAC;AACzD,UAAM,QAAQ,KAAK,MAAM,YAAY;AACrC,UAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,YAAY,EAAE,SAAS,KAAK,CAAC;AAEtF,QAAI,CAAC,OAAO;AACV,WAAK,MAAM,qBAAqB,KAAK,KAAK,GAAG;AAAA,IAC/C;AAEA,UAAM,SAAS,QAAQ,IAAI,UAAU,QAAQ,IAAI,UAAU;AAE3D,SAAK,IAAI;AAAA,aAAgB,MAAM,KAAK,EAAE;AACtC,SAAK,IAAI,cAAc,MAAM,EAAE;AAC/B,SAAK,IAAI,YAAY;AAErB,UAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAC3E,UAAM,IAAI,QAAc,CAAC,YAAY;AACnC,SAAG,SAAS,mCAAmC,MAAM;AAAE,WAAG,MAAM;AAAG,gBAAQ;AAAA,MAAG,CAAC;AAAA,IACjF,CAAC;AAED,UAAM,KAAK,MAAM,qBAAqB,QAAQ,MAAM,EAAE;AACtD,UAAM,UAAU,KAAK,OAAO,GAAG,UAAU,MAAM,EAAE,KAAK;AACtD,kBAAc,SAAS,IAAI,OAAO;AAElC,QAAI;AACF,eAAS,GAAG,MAAM,KAAK,OAAO,KAAK,EAAE,OAAO,UAAU,CAAC;AAAA,IACzD,QAAQ;AACN,WAAK,MAAM,0BAA0B;AAAA,IACvC;AAEA,UAAM,SAAS,aAAa,SAAS,OAAO;AAC5C,QAAI,WAAW,IAAI;AACjB,WAAK,IAAI,aAAa;AACtB;AAAA,IACF;AAEA,UAAM,aAAa,iBAAiB,MAAM;AAC1C,UAAM,gBAAgB,QAAQ,MAAM,IAAI,QAAQ,UAAU;AAC1D,SAAK,IAAI,UAAU,MAAM,KAAK,EAAE;AAAA,EAClC;AACF;","names":[]}
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  getClient,
3
3
  getUserId
4
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-XGZKUOFI.js";
5
5
  import "../chunk-PBF5EE4Y.js";
6
6
  import {
7
7
  exportNoteAsJson,
8
8
  exportNoteAsMarkdown,
9
9
  listNotes
10
- } from "../chunk-4QLCD6TZ.js";
10
+ } from "../chunk-WM6QVD53.js";
11
11
 
12
12
  // src/commands/export.ts
13
13
  import { Command, Args, Flags } from "@oclif/core";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERTEX_VERSION
3
- } from "../chunk-4QLCD6TZ.js";
3
+ } from "../chunk-WM6QVD53.js";
4
4
 
5
5
  // src/commands/hello.ts
6
6
  import { Command } from "@oclif/core";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERTEX_VERSION
3
- } from "../chunk-4QLCD6TZ.js";
3
+ } from "../chunk-WM6QVD53.js";
4
4
 
5
5
  // src/commands/help.ts
6
6
  import { Command } from "@oclif/core";
@@ -48,6 +48,7 @@ ${row("vertex interactive <title>", "Open any note \u2192 interactive")}
48
48
  ${DIM}\u2502${R} ${YELLOW}t${R} ${DIM}\u2502${R} Add new todo ${DIM}\u2502${R}
49
49
  ${DIM}\u2502${R} ${YELLOW}n${R} ${DIM}\u2502${R} Add new text line ${DIM}\u2502${R}
50
50
  ${DIM}\u2502${R} ${YELLOW}d${R} ${DIM}\u2502${R} Delete item at cursor ${DIM}\u2502${R}
51
+ ${DIM}\u2502${R} ${YELLOW}e${R} ${DIM}\u2502${R} Open in $EDITOR for full editing ${DIM}\u2502${R}
51
52
  ${DIM}\u2502${R} ${YELLOW}s${R} ${DIM}\u2502${R} Save changes ${DIM}\u2502${R}
52
53
  ${DIM}\u2502${R} ${YELLOW}q${R} ${DIM}\u2502${R} Quit ${DIM}(auto-saves if changed)${R} ${DIM}\u2502${R}
53
54
  ${DIM}\u2502${R} ${YELLOW}Esc${R} ${DIM}\u2502${R} Cancel input ${DIM}\u2502${R}
@@ -59,7 +60,9 @@ ${row("vertex search <query>", "Search notes")}
59
60
  ${row("vertex tags", "List all tags")}
60
61
 
61
62
  ${DIM}Query syntax: ${PURPLE}keyword${R}${DIM} \xB7 ${PURPLE}#tag${R}${DIM} \xB7 ${PURPLE}type:todo${R}${DIM} \xB7 ${PURPLE}status:open${R}${DIM} \xB7 ${PURPLE}status:done${R}
62
- ${heading("EXPORT")}
63
+ ${heading("IMPORT & EXPORT")}
64
+ ${row("vertex import <file.md>", "Import markdown file as new note")}
65
+ ${row('vertex import <file> -t "Title"', "Import with custom title")}
63
66
  ${row("vertex export <title>", "Export as markdown to stdout")}
64
67
  ${row("vertex export <title> --json", "Export as JSON")}
65
68
  ${row("vertex export <title> -o file", "Export to file")}
@@ -72,21 +75,27 @@ ${heading("INFO")}
72
75
  ${row("vertex status", "Storage usage, note count, version")}
73
76
  ${row("vertex hello", "Verify CLI is working")}
74
77
  ${row("vertex help", "Show this help")}
78
+ ${row("vertex syntax", "Markdown syntax reference")}
79
+ ${row("vertex howto", "Complete AI guide \u2014 everything to know")}
75
80
  ${heading("EDITOR SYNTAX")}
76
81
  ${sub("for use with: vertex edit <title>")}
77
82
 
78
- ${DIM}\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510${R}
79
- ${DIM}\u2502${R} ${YELLOW}# ## ###${R} ${DIM}\u2502${R} Headings ${DIM}\u2502${R}
80
- ${DIM}\u2502${R} ${YELLOW}**bold** *italic*${R} ${DIM}\u2502${R} Formatting ${DIM}\u2502${R}
81
- ${DIM}\u2502${R} ${YELLOW}\`code\` ~~strike~~${R} ${DIM}\u2502${R} Inline code & strikethrough ${DIM}\u2502${R}
82
- ${DIM}\u2502${R} ${YELLOW}[[Link]] #tag${R} ${DIM}\u2502${R} Wiki links & tags ${DIM}\u2502${R}
83
- ${DIM}\u2502${R} ${YELLOW}- item${R} ${YELLOW}1. item${R} ${DIM}\u2502${R} Bullet & numbered lists ${DIM}\u2502${R}
84
- ${DIM}\u2502${R} ${YELLOW}- [x]${R} ${YELLOW}- [ ]${R} ${DIM}\u2502${R} Done & open tasks ${DIM}\u2502${R}
85
- ${DIM}\u2502${R} ${YELLOW}> quote${R} ${YELLOW}---${R} ${DIM}\u2502${R} Blockquote & divider ${DIM}\u2502${R}
86
- ${DIM}\u2502${R} ${YELLOW}\`\`\`lang ... \`\`\`${R} ${DIM}\u2502${R} Code block ${DIM}\u2502${R}
87
- ${DIM}\u2502${R} ${YELLOW}$$ ... $$${R} ${DIM}\u2502${R} Math block (LaTeX) ${DIM}\u2502${R}
88
- ${DIM}\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518${R}
89
- ${DIM}Web app only: mermaid, callouts, query blocks, file uploads${R}
83
+ ${DIM}\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510${R}
84
+ ${DIM}\u2502${R} ${YELLOW}# ## ###${R} ${DIM}\u2502${R} Headings ${DIM}\u2502${R}
85
+ ${DIM}\u2502${R} ${YELLOW}**bold** *italic*${R} ${DIM}\u2502${R} Formatting ${DIM}\u2502${R}
86
+ ${DIM}\u2502${R} ${YELLOW}\`code\` ~~strike~~${R} ${DIM}\u2502${R} Inline code & strikethrough ${DIM}\u2502${R}
87
+ ${DIM}\u2502${R} ${YELLOW}[[Link]] #tag${R} ${DIM}\u2502${R} Wiki links & tags ${DIM}\u2502${R}
88
+ ${DIM}\u2502${R} ${YELLOW}- item${R} ${YELLOW}1. item${R} ${DIM}\u2502${R} Bullet & numbered lists ${DIM}\u2502${R}
89
+ ${DIM}\u2502${R} ${YELLOW}- [x]${R} ${YELLOW}- [ ]${R} ${DIM}\u2502${R} Done & open tasks ${DIM}\u2502${R}
90
+ ${DIM}\u2502${R} ${YELLOW}> quote${R} ${YELLOW}---${R} ${DIM}\u2502${R} Blockquote & divider ${DIM}\u2502${R}
91
+ ${DIM}\u2502${R} ${YELLOW}\`\`\`lang ... \`\`\`${R} ${DIM}\u2502${R} Code block ${DIM}\u2502${R}
92
+ ${DIM}\u2502${R} ${YELLOW}\`\`\`mermaid ... \`\`\`${R} ${DIM}\u2502${R} Mermaid diagram ${DIM}\u2502${R}
93
+ ${DIM}\u2502${R} ${YELLOW}$$ ... $$${R} ${DIM}\u2502${R} Math block (LaTeX) ${DIM}\u2502${R}
94
+ ${DIM}\u2502${R} ${YELLOW}> [!info] > text${R} ${DIM}\u2502${R} Callout (info/warning/error/tip)${DIM}\u2502${R}
95
+ ${DIM}\u2502${R} ${YELLOW}> [!query] > query${R} ${DIM}\u2502${R} Live query block ${DIM}\u2502${R}
96
+ ${DIM}\u2502${R} ${YELLOW}![alt](url)${R} ${DIM}\u2502${R} Image ${DIM}\u2502${R}
97
+ ${DIM}\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518${R}
98
+ ${DIM}All block types work in CLI edit, export, and import${R}
90
99
  ${heading("TIPS")}
91
100
  ${DIM}\u2022${R} Title args use partial matching ${DIM}("proj" \u2192 "Project Plan")${R}
92
101
  ${DIM}\u2022${R} Set ${YELLOW}EDITOR=nano${R} or ${YELLOW}EDITOR="code --wait"${R} for preferred editor
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/help.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { VERTEX_VERSION } from \"@vertex/core\";\n\nconst DIM = \"\\x1b[90m\";\nconst BOLD = \"\\x1b[1m\";\nconst CYAN = \"\\x1b[36m\";\nconst YELLOW = \"\\x1b[33m\";\nconst GREEN = \"\\x1b[32m\";\nconst PURPLE = \"\\x1b[35m\";\nconst R = \"\\x1b[0m\";\n\nfunction heading(text: string): string {\n return `\\n ${BOLD}${CYAN}${text}${R}`;\n}\n\nfunction row(cmd: string, desc: string): string {\n return ` ${GREEN}${cmd.padEnd(32)}${R}${DIM}${desc}${R}`;\n}\n\nfunction sub(text: string): string {\n return ` ${DIM}${text}${R}`;\n}\n\nexport default class Help extends Command {\n static override description = \"Show all Vertex CLI commands\";\n\n async run(): Promise<void> {\n this.log(`\n ${BOLD}${PURPLE}▲ Vertex CLI${R} ${DIM}v${VERTEX_VERSION}${R}\n ${DIM}Your knowledge, structured — from the terminal.${R}\n${heading(\"AUTH\")}\n${row(\"vertex login\", \"Log in (GitHub, Google, or Email)\")}\n${row(\"vertex logout\", \"Log out and clear saved session\")}\n${row(\"vertex whoami\", \"Show logged-in user email\")}\n${heading(\"NOTES\")}\n${row(\"vertex notes\", \"List all notes\")}\n${row(\"vertex new [title]\", \"Create a new note\")}\n${row(\"vertex view <title>\", \"View note as markdown\")}\n${row(\"vertex edit <title>\", \"Edit note in $EDITOR\")}\n${row(\"vertex daily\", \"View or create today's daily note\")}\n${row(\"vertex daily --last\", \"View most recent daily note\")}\n${heading(\"INTERACTIVE MODE\")}\n${row(\"vertex today\", \"Latest daily note → interactive\")}\n${row(\"vertex interactive <title>\", \"Open any note → interactive\")}\n\n ${DIM}┌──────────┬────────────────────────────────────────────┐${R}\n ${DIM}│${R} ${YELLOW}↑ ↓${R} ${DIM}│${R} Move cursor between items ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}Enter${R} ${DIM}│${R} Toggle todo ${DIM}[ ] → [✓] → [ ]${R} ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}t${R} ${DIM}│${R} Add new todo ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}n${R} ${DIM}│${R} Add new text line ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}d${R} ${DIM}│${R} Delete item at cursor ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}s${R} ${DIM}│${R} Save changes ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}q${R} ${DIM}│${R} Quit ${DIM}(auto-saves if changed)${R} ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}Esc${R} ${DIM}│${R} Cancel input ${DIM}│${R}\n ${DIM}└──────────┴────────────────────────────────────────────┘${R}\n${heading(\"CAPTURE\")}\n${row(\"vertex capture \\\"text\\\"\", \"Quick capture to Inbox note\")}\n${heading(\"SEARCH & ORGANIZE\")}\n${row(\"vertex search <query>\", \"Search notes\")}\n${row(\"vertex tags\", \"List all tags\")}\n\n ${DIM}Query syntax: ${PURPLE}keyword${R}${DIM} · ${PURPLE}#tag${R}${DIM} · ${PURPLE}type:todo${R}${DIM} · ${PURPLE}status:open${R}${DIM} · ${PURPLE}status:done${R}\n${heading(\"EXPORT\")}\n${row(\"vertex export <title>\", \"Export as markdown to stdout\")}\n${row(\"vertex export <title> --json\", \"Export as JSON\")}\n${row(\"vertex export <title> -o file\", \"Export to file\")}\n${heading(\"TRASH\")}\n${row(\"vertex delete <title>\", \"Soft delete → trash\")}\n${row(\"vertex restore <title>\", \"Restore from trash\")}\n${row(\"vertex trash\", \"List trashed notes\")}\n${row(\"vertex trash:empty\", \"Permanently delete all trash\")}\n${heading(\"INFO\")}\n${row(\"vertex status\", \"Storage usage, note count, version\")}\n${row(\"vertex hello\", \"Verify CLI is working\")}\n${row(\"vertex help\", \"Show this help\")}\n${heading(\"EDITOR SYNTAX\")}\n${sub(\"for use with: vertex edit <title>\")}\n\n ${DIM}┌──────────────────────┬──────────────────────────────────┐${R}\n ${DIM}│${R} ${YELLOW}# ## ###${R} ${DIM}│${R} Headings ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}**bold** *italic*${R} ${DIM}│${R} Formatting ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}\\`code\\` ~~strike~~${R} ${DIM}│${R} Inline code & strikethrough ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}[[Link]] #tag${R} ${DIM}│${R} Wiki links & tags ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}- item${R} ${YELLOW}1. item${R} ${DIM}│${R} Bullet & numbered lists ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}- [x]${R} ${YELLOW}- [ ]${R} ${DIM}│${R} Done & open tasks ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}> quote${R} ${YELLOW}---${R} ${DIM}│${R} Blockquote & divider ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}\\`\\`\\`lang ... \\`\\`\\`${R} ${DIM}│${R} Code block ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}$$ ... $$${R} ${DIM}│${R} Math block (LaTeX) ${DIM}│${R}\n ${DIM}└──────────────────────┴──────────────────────────────────┘${R}\n ${DIM}Web app only: mermaid, callouts, query blocks, file uploads${R}\n${heading(\"TIPS\")}\n ${DIM}•${R} Title args use partial matching ${DIM}(\"proj\" → \"Project Plan\")${R}\n ${DIM}•${R} Set ${YELLOW}EDITOR=nano${R} or ${YELLOW}EDITOR=\"code --wait\"${R} for preferred editor\n ${DIM}•${R} Session stored in ${DIM}~/.vertex/config.json${R}\n ${DIM}•${R} New users get 50 MB storage, upgradeable per account\n ${DIM}•${R} ${GREEN}vertex today${R} is the fastest way to manage daily todos\n${heading(\"EXAMPLES\")}\n ${DIM}$${R} vertex today\n ${DIM}$${R} vertex capture \"buy groceries\"\n ${DIM}$${R} vertex search \"#work type:todo status:open\"\n ${DIM}$${R} vertex export \"Meeting Notes\" -o meeting.md\n ${DIM}$${R} EDITOR=nano vertex edit \"Ideas\"\n`);\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/commands/help.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { VERTEX_VERSION } from \"@vertex/core\";\n\nconst DIM = \"\\x1b[90m\";\nconst BOLD = \"\\x1b[1m\";\nconst CYAN = \"\\x1b[36m\";\nconst YELLOW = \"\\x1b[33m\";\nconst GREEN = \"\\x1b[32m\";\nconst PURPLE = \"\\x1b[35m\";\nconst R = \"\\x1b[0m\";\n\nfunction heading(text: string): string {\n return `\\n ${BOLD}${CYAN}${text}${R}`;\n}\n\nfunction row(cmd: string, desc: string): string {\n return ` ${GREEN}${cmd.padEnd(32)}${R}${DIM}${desc}${R}`;\n}\n\nfunction sub(text: string): string {\n return ` ${DIM}${text}${R}`;\n}\n\nexport default class Help extends Command {\n static override description = \"Show all Vertex CLI commands\";\n\n async run(): Promise<void> {\n this.log(`\n ${BOLD}${PURPLE}▲ Vertex CLI${R} ${DIM}v${VERTEX_VERSION}${R}\n ${DIM}Your knowledge, structured — from the terminal.${R}\n${heading(\"AUTH\")}\n${row(\"vertex login\", \"Log in (GitHub, Google, or Email)\")}\n${row(\"vertex logout\", \"Log out and clear saved session\")}\n${row(\"vertex whoami\", \"Show logged-in user email\")}\n${heading(\"NOTES\")}\n${row(\"vertex notes\", \"List all notes\")}\n${row(\"vertex new [title]\", \"Create a new note\")}\n${row(\"vertex view <title>\", \"View note as markdown\")}\n${row(\"vertex edit <title>\", \"Edit note in $EDITOR\")}\n${row(\"vertex daily\", \"View or create today's daily note\")}\n${row(\"vertex daily --last\", \"View most recent daily note\")}\n${heading(\"INTERACTIVE MODE\")}\n${row(\"vertex today\", \"Latest daily note → interactive\")}\n${row(\"vertex interactive <title>\", \"Open any note → interactive\")}\n\n ${DIM}┌──────────┬────────────────────────────────────────────┐${R}\n ${DIM}│${R} ${YELLOW}↑ ↓${R} ${DIM}│${R} Move cursor between items ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}Enter${R} ${DIM}│${R} Toggle todo ${DIM}[ ] → [✓] → [ ]${R} ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}t${R} ${DIM}│${R} Add new todo ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}n${R} ${DIM}│${R} Add new text line ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}d${R} ${DIM}│${R} Delete item at cursor ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}e${R} ${DIM}│${R} Open in $EDITOR for full editing ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}s${R} ${DIM}│${R} Save changes ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}q${R} ${DIM}│${R} Quit ${DIM}(auto-saves if changed)${R} ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}Esc${R} ${DIM}│${R} Cancel input ${DIM}│${R}\n ${DIM}└──────────┴────────────────────────────────────────────┘${R}\n${heading(\"CAPTURE\")}\n${row(\"vertex capture \\\"text\\\"\", \"Quick capture to Inbox note\")}\n${heading(\"SEARCH & ORGANIZE\")}\n${row(\"vertex search <query>\", \"Search notes\")}\n${row(\"vertex tags\", \"List all tags\")}\n\n ${DIM}Query syntax: ${PURPLE}keyword${R}${DIM} · ${PURPLE}#tag${R}${DIM} · ${PURPLE}type:todo${R}${DIM} · ${PURPLE}status:open${R}${DIM} · ${PURPLE}status:done${R}\n${heading(\"IMPORT & EXPORT\")}\n${row(\"vertex import <file.md>\", \"Import markdown file as new note\")}\n${row(\"vertex import <file> -t \\\"Title\\\"\", \"Import with custom title\")}\n${row(\"vertex export <title>\", \"Export as markdown to stdout\")}\n${row(\"vertex export <title> --json\", \"Export as JSON\")}\n${row(\"vertex export <title> -o file\", \"Export to file\")}\n${heading(\"TRASH\")}\n${row(\"vertex delete <title>\", \"Soft delete → trash\")}\n${row(\"vertex restore <title>\", \"Restore from trash\")}\n${row(\"vertex trash\", \"List trashed notes\")}\n${row(\"vertex trash:empty\", \"Permanently delete all trash\")}\n${heading(\"INFO\")}\n${row(\"vertex status\", \"Storage usage, note count, version\")}\n${row(\"vertex hello\", \"Verify CLI is working\")}\n${row(\"vertex help\", \"Show this help\")}\n${row(\"vertex syntax\", \"Markdown syntax reference\")}\n${row(\"vertex howto\", \"Complete AI guide — everything to know\")}\n${heading(\"EDITOR SYNTAX\")}\n${sub(\"for use with: vertex edit <title>\")}\n\n ${DIM}┌────────────────────────┬────────────────────────────────┐${R}\n ${DIM}│${R} ${YELLOW}# ## ###${R} ${DIM}│${R} Headings ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}**bold** *italic*${R} ${DIM}│${R} Formatting ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}\\`code\\` ~~strike~~${R} ${DIM}│${R} Inline code & strikethrough ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}[[Link]] #tag${R} ${DIM}│${R} Wiki links & tags ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}- item${R} ${YELLOW}1. item${R} ${DIM}│${R} Bullet & numbered lists ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}- [x]${R} ${YELLOW}- [ ]${R} ${DIM}│${R} Done & open tasks ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}> quote${R} ${YELLOW}---${R} ${DIM}│${R} Blockquote & divider ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}\\`\\`\\`lang ... \\`\\`\\`${R} ${DIM}│${R} Code block ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}\\`\\`\\`mermaid ... \\`\\`\\`${R} ${DIM}│${R} Mermaid diagram ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}$$ ... $$${R} ${DIM}│${R} Math block (LaTeX) ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}> [!info] > text${R} ${DIM}│${R} Callout (info/warning/error/tip)${DIM}│${R}\n ${DIM}│${R} ${YELLOW}> [!query] > query${R} ${DIM}│${R} Live query block ${DIM}│${R}\n ${DIM}│${R} ${YELLOW}![alt](url)${R} ${DIM}│${R} Image ${DIM}│${R}\n ${DIM}└────────────────────────┴────────────────────────────────┘${R}\n ${DIM}All block types work in CLI edit, export, and import${R}\n${heading(\"TIPS\")}\n ${DIM}•${R} Title args use partial matching ${DIM}(\"proj\" → \"Project Plan\")${R}\n ${DIM}•${R} Set ${YELLOW}EDITOR=nano${R} or ${YELLOW}EDITOR=\"code --wait\"${R} for preferred editor\n ${DIM}•${R} Session stored in ${DIM}~/.vertex/config.json${R}\n ${DIM}•${R} New users get 50 MB storage, upgradeable per account\n ${DIM}•${R} ${GREEN}vertex today${R} is the fastest way to manage daily todos\n${heading(\"EXAMPLES\")}\n ${DIM}$${R} vertex today\n ${DIM}$${R} vertex capture \"buy groceries\"\n ${DIM}$${R} vertex search \"#work type:todo status:open\"\n ${DIM}$${R} vertex export \"Meeting Notes\" -o meeting.md\n ${DIM}$${R} EDITOR=nano vertex edit \"Ideas\"\n`);\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,373 @@
1
+ // src/commands/howto.ts
2
+ import { Command } from "@oclif/core";
3
+ var D = "\x1B[90m";
4
+ var B = "\x1B[1m";
5
+ var C = "\x1B[36m";
6
+ var Y = "\x1B[33m";
7
+ var G = "\x1B[32m";
8
+ var P = "\x1B[35m";
9
+ var R = "\x1B[0m";
10
+ var Howto = class extends Command {
11
+ static description = "Complete guide for AI agents to create and manage Vertex notes";
12
+ async run() {
13
+ this.log(`
14
+ ${B}${P} Vertex \u2014 Complete AI Guide${R}
15
+ ${D} Everything an AI agent needs to create, edit, and manage notes.${R}
16
+ ${D} Read this once, then you can do anything in Vertex.${R}
17
+ ${D} \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550${R}
18
+
19
+ ${C}${B} 1. WHAT IS VERTEX?${R}
20
+ ${D} A knowledge workspace. Notes are stored in the cloud (Supabase).${R}
21
+ ${D} You write markdown in the terminal \u2192 it renders as rich content${R}
22
+ ${D} (diagrams, math, code, callouts) in the web app.${R}
23
+ ${D} Notes can link to each other via [[wiki links]] and #tags.${R}
24
+
25
+ ${C}${B} 2. HOW TO CREATE A NOTE${R}
26
+
27
+ ${D} Option A: Create and edit in one step${R}
28
+ ${G}vertex new "My Note Title"${R}
29
+ ${G}vertex edit "My Note"${R} ${D}\u2190 opens in $EDITOR (vim/nano/code)${R}
30
+
31
+ ${D} Option B: Write a .md file, then import${R}
32
+ ${G}cat > note.md << 'EOF'${R}
33
+ ${Y}# My Note Title${R}
34
+ ${Y}Content here...${R}
35
+ ${G}EOF${R}
36
+ ${G}vertex import note.md -t "My Note Title"${R}
37
+
38
+ ${D} Option C: Quick one-liner to inbox${R}
39
+ ${G}vertex capture "Remember to review PR #42"${R}
40
+
41
+ ${C}${B} 3. HOW TO EDIT AN EXISTING NOTE${R}
42
+
43
+ ${G}vertex edit "Note Title"${R} ${D}\u2190 partial match works: "Note" matches "Note Title"${R}
44
+ ${D} This exports the note as markdown, opens your $EDITOR,${R}
45
+ ${D} and when you save & quit, it parses the markdown back${R}
46
+ ${D} and updates the note in the database.${R}
47
+
48
+ ${D} To use a specific editor:${R}
49
+ ${G}EDITOR=nano vertex edit "My Note"${R}
50
+ ${G}EDITOR="code --wait" vertex edit "My Note"${R}
51
+ ${G}EDITOR=vim vertex edit "My Note"${R}
52
+
53
+ ${C}${B} 4. HOW TO VIEW A NOTE (read-only)${R}
54
+
55
+ ${G}vertex view "Note Title"${R} ${D}\u2190 prints markdown to stdout${R}
56
+ ${G}vertex view "Note" | less${R} ${D}\u2190 paginated view${R}
57
+ ${G}vertex export "Note" -o note.md${R} ${D}\u2190 save to file${R}
58
+
59
+ ${C}${B} 5. HOW TO LIST AND FIND NOTES${R}
60
+
61
+ ${G}vertex notes${R} ${D}\u2190 list all notes${R}
62
+ ${G}vertex search "keyword"${R} ${D}\u2190 full-text search${R}
63
+ ${G}vertex search "#tagname"${R} ${D}\u2190 search by tag${R}
64
+ ${G}vertex search "type:todo status:open"${R} ${D}\u2190 find open todos${R}
65
+ ${G}vertex tags${R} ${D}\u2190 list all tags${R}
66
+ ${G}vertex daily --last${R} ${D}\u2190 view latest daily note${R}
67
+
68
+ ${D} \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550${R}
69
+
70
+ ${C}${B} 6. MARKDOWN SYNTAX \u2014 ALL BLOCK TYPES${R}
71
+
72
+ ${D} \u250C\u2500 IMPORTANT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${R}
73
+ ${D} \u2502 Every block must be separated by a BLANK LINE.${R}
74
+ ${D} \u2502 The first # H1 heading becomes the note title.${R}
75
+ ${D} \u2502 Tags must start with a letter (a-z): #valid not #123${R}
76
+ ${D} \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${R}
77
+
78
+ ${C} HEADINGS${R}
79
+ ${Y} # Heading 1${R}
80
+ ${Y} ## Heading 2${R}
81
+ ${Y} ### Heading 3${R}
82
+
83
+ ${C} TEXT FORMATTING${R}
84
+ ${Y} **bold text**${R}
85
+ ${Y} *italic text*${R}
86
+ ${Y} \`inline code\`${R}
87
+ ${Y} ~~strikethrough~~${R}
88
+
89
+ ${C} BULLET LIST${R}
90
+ ${Y} - Item one${R}
91
+ ${Y} - Item two${R}
92
+ ${Y} - Item three${R}
93
+
94
+ ${C} NUMBERED LIST${R}
95
+ ${Y} 1. First${R}
96
+ ${Y} 2. Second${R}
97
+ ${Y} 3. Third${R}
98
+
99
+ ${C} TODO TASKS${R}
100
+ ${Y} - [ ] Open task${R}
101
+ ${Y} - [x] Completed task${R}
102
+
103
+ ${C} BLOCKQUOTE${R}
104
+ ${Y} > Quoted text here${R}
105
+
106
+ ${C} DIVIDER${R}
107
+ ${Y} ---${R}
108
+
109
+ ${C} CODE BLOCK${R}
110
+ ${Y} \`\`\`python${R}
111
+ ${Y} def hello():${R}
112
+ ${Y} print("Hello!")${R}
113
+ ${Y} \`\`\`${R}
114
+ ${D} Languages: python, javascript, typescript, rust, go, java,${R}
115
+ ${D} c, cpp, sql, html, css, json, yaml, bash, ruby, swift, etc.${R}
116
+
117
+ ${C} MERMAID DIAGRAM${R}
118
+ ${Y} \`\`\`mermaid${R}
119
+ ${Y} graph TD;${R}
120
+ ${Y} A --> B --> C;${R}
121
+ ${Y} \`\`\`${R}
122
+ ${D} Types: graph/flowchart, sequenceDiagram, classDiagram,${R}
123
+ ${D} erDiagram, stateDiagram, gantt, pie, gitGraph, mindmap${R}
124
+
125
+ ${C} MATH (LaTeX via KaTeX)${R}
126
+ ${Y} $$${R}
127
+ ${Y} E = mc^2${R}
128
+ ${Y} $$${R}
129
+ ${D} LaTeX: \\frac{a}{b} \\sqrt{x} \\sum_{i=1}^{n} \\int_0^1${R}
130
+ ${D} \\alpha \\beta \\pi \\infty \\text{label} x^{2} x_{i}${R}
131
+
132
+ ${C} CALLOUT${R}
133
+ ${Y} > [!info]${R}
134
+ ${Y} > Informational note${R}
135
+ ${D} Variants: info, warning, error, tip${R}
136
+ ${D} Multi-line: each line starts with > ${R}
137
+
138
+ ${C} QUERY BLOCK${R}
139
+ ${Y} > [!query]${R}
140
+ ${Y} > type:todo status:open #work${R}
141
+
142
+ ${C} INLINE LINK${R}
143
+ ${Y} [Link Text](https://example.com)${R}
144
+ ${D} Opens in new tab. Standard markdown link syntax.${R}
145
+
146
+ ${C} EMBED (link preview)${R}
147
+ ${Y} > [!embed]${R}
148
+ ${Y} > https://youtube.com/watch?v=ID${R}
149
+ ${D} YouTube \u2192 video player. Other URLs \u2192 preview card.${R}
150
+
151
+ ${C} IMAGE${R}
152
+ ${Y} ![description](https://url.com/image.png)${R}
153
+
154
+ ${C} FILE ATTACHMENT${R}
155
+ ${Y} > [!file]${R}
156
+ ${Y} > [filename.pdf](https://url.com/file.pdf)${R}
157
+ ${Y} > application/pdf 149780${R}
158
+
159
+ ${D} \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550${R}
160
+
161
+ ${C}${B} 7. WIKI LINKS \u2014 HOW TO CONNECT NOTES${R}
162
+
163
+ ${D} Wiki links create connections between notes.${R}
164
+ ${D} They render as clickable purple links in the web app.${R}
165
+ ${D} The linked note shows a "backlink" at the bottom.${R}
166
+
167
+ ${Y} Check out [[Project Roadmap]] for details.${R}
168
+ ${Y} This connects to [[AI Research Notes]] and [[Meeting Notes]].${R}
169
+
170
+ ${D} Rules:${R}
171
+ ${D} \u2022 Use the exact note title inside [[ ]]${R}
172
+ ${D} \u2022 Case-insensitive: [[my note]] matches "My Note"${R}
173
+ ${D} \u2022 If the note doesn't exist yet, the link is still created${R}
174
+ ${D} \u2022 Multiple links in one paragraph is fine${R}
175
+ ${D} \u2022 Wiki links work in any text: paragraphs, todos, callouts${R}
176
+
177
+ ${D} Example: Create a network of linked notes${R}
178
+ ${G}vertex new "Hub Note"${R}
179
+ ${G}vertex edit "Hub Note"${R}
180
+ ${D} Then write:${R}
181
+ ${Y} # Hub Note${R}
182
+ ${Y} ${R}
183
+ ${Y} This connects to:${R}
184
+ ${Y} - [[Topic A]] \u2014 first topic${R}
185
+ ${Y} - [[Topic B]] \u2014 second topic${R}
186
+ ${Y} - [[Topic C]] \u2014 third topic${R}
187
+
188
+ ${C}${B} 8. TAGS \u2014 HOW THEY WORK${R}
189
+
190
+ ${D} Tags categorize content. They appear as purple pills in the web app.${R}
191
+ ${D} Tags are auto-created when you use them \u2014 no need to create first.${R}
192
+
193
+ ${C} Basic tags:${R}
194
+ ${Y} This paragraph has #work and #important tags.${R}
195
+ ${Y} - [x] Finish report #work #deadline${R}
196
+
197
+ ${C} Rules:${R}
198
+ ${D} \u2022 Must start with a letter: #valid, #tag123${R}
199
+ ${D} \u2022 Can contain letters, numbers, hyphens, underscores: #my-tag, #my_tag${R}
200
+ ${D} \u2022 NO spaces: #my tag is wrong \u2192 use #my-tag${R}
201
+ ${D} \u2022 Tags are case-insensitive: #Work = #work${R}
202
+ ${D} \u2022 Tags work everywhere: paragraphs, todos, headings, callouts${R}
203
+
204
+ ${C}${B} 9. TAG HIERARCHY \u2014 PARENT/CHILD RELATIONSHIPS${R}
205
+
206
+ ${D} Tags can have parent-child relationships using / separator.${R}
207
+ ${D} This creates a DAG (directed acyclic graph) of tags.${R}
208
+
209
+ ${Y} This is about #work/frontend${R} ${D}\u2190 creates: work \u2192 frontend${R}
210
+ ${Y} Also covers #work/backend${R} ${D}\u2190 creates: work \u2192 backend${R}
211
+ ${Y} Deep nesting: #cs/algo/sorting${R} ${D}\u2190 creates: cs \u2192 algo \u2192 sorting${R}
212
+
213
+ ${D} What happens:${R}
214
+ ${D} \u2022 Only the LEAF tag is applied to the block: "frontend" not "work"${R}
215
+ ${D} \u2022 Parent tags are auto-created if they don't exist${R}
216
+ ${D} \u2022 Parent\u2192child edges are created in the tag hierarchy${R}
217
+ ${D} \u2022 Searching #work finds blocks tagged with #work AND all children${R}
218
+ ${D} (frontend, backend, etc.)${R}
219
+
220
+ ${D} You can also set relationships via command palette (Cmd+K in web):${R}
221
+ ${D} "Tag Extend" \u2192 pick parent and child tags${R}
222
+
223
+ ${C}${B} 10. SEARCH QUERY SYNTAX${R}
224
+
225
+ ${G}vertex search "keyword"${R} ${D}\u2190 full-text search${R}
226
+ ${G}vertex search "#work"${R} ${D}\u2190 all blocks tagged #work (+ children)${R}
227
+ ${G}vertex search "#work/frontend"${R} ${D}\u2190 searches the leaf tag "frontend"${R}
228
+ ${G}vertex search "type:todo"${R} ${D}\u2190 all todo blocks${R}
229
+ ${G}vertex search "type:code"${R} ${D}\u2190 all code blocks${R}
230
+ ${G}vertex search "type:heading"${R} ${D}\u2190 all headings${R}
231
+ ${G}vertex search "status:open"${R} ${D}\u2190 unchecked todos${R}
232
+ ${G}vertex search "status:done"${R} ${D}\u2190 checked todos${R}
233
+ ${G}vertex search "type:todo status:open #work"${R} ${D}\u2190 combine filters${R}
234
+ ${G}vertex search "type:todo #work keyword"${R} ${D}\u2190 all three${R}
235
+
236
+ ${C}${B} 11. DAILY NOTES${R}
237
+
238
+ ${G}vertex daily${R} ${D}\u2190 view/create today's daily note${R}
239
+ ${G}vertex daily --last${R} ${D}\u2190 view most recent daily (no create)${R}
240
+ ${G}vertex today${R} ${D}\u2190 open latest daily in interactive TUI${R}
241
+
242
+ ${D} Daily notes are auto-titled with the date: "April 14, 2026"${R}
243
+ ${D} One daily note per day \u2014 calling vertex daily twice won't duplicate.${R}
244
+
245
+ ${C}${B} 12. INTERACTIVE MODE${R}
246
+
247
+ ${G}vertex interactive "Note Title"${R} ${D}\u2190 open any note${R}
248
+ ${G}vertex today${R} ${D}\u2190 shortcut for latest daily${R}
249
+
250
+ ${D} Controls:${R}
251
+ ${D} \u2191 \u2193 Move cursor between items${R}
252
+ ${D} Enter Toggle todo done/undone${R}
253
+ ${D} t Add new todo${R}
254
+ ${D} n Add new text line${R}
255
+ ${D} d Delete item at cursor${R}
256
+ ${D} e Open in $EDITOR for full editing${R}
257
+ ${D} s Save changes${R}
258
+ ${D} q Save and quit${R}
259
+
260
+ ${C}${B} 13. TRASH & DELETE${R}
261
+
262
+ ${G}vertex delete "Note"${R} ${D}\u2190 soft delete (recoverable)${R}
263
+ ${G}vertex trash${R} ${D}\u2190 list trashed notes${R}
264
+ ${G}vertex restore "Note"${R} ${D}\u2190 restore from trash${R}
265
+ ${G}vertex trash:empty${R} ${D}\u2190 permanent delete all (irreversible)${R}
266
+
267
+ ${D} Soft delete: note goes to trash, can be restored${R}
268
+ ${D} Hard delete (trash:empty): note + files + tags permanently removed${R}
269
+
270
+ ${C}${B} 14. ALL COMMANDS REFERENCE${R}
271
+
272
+ ${G}vertex login${R} ${D}\u2190 authenticate (GitHub/Google/Email)${R}
273
+ ${G}vertex logout${R} ${D}\u2190 clear session${R}
274
+ ${G}vertex whoami${R} ${D}\u2190 show logged-in user${R}
275
+ ${G}vertex notes${R} ${D}\u2190 list all notes${R}
276
+ ${G}vertex new [title]${R} ${D}\u2190 create note${R}
277
+ ${G}vertex view <title>${R} ${D}\u2190 view as markdown${R}
278
+ ${G}vertex edit <title>${R} ${D}\u2190 edit in $EDITOR${R}
279
+ ${G}vertex daily${R} ${D}\u2190 today's daily note${R}
280
+ ${G}vertex daily --last${R} ${D}\u2190 latest daily note${R}
281
+ ${G}vertex today${R} ${D}\u2190 latest daily \u2192 interactive${R}
282
+ ${G}vertex interactive <title>${R} ${D}\u2190 interactive TUI mode${R}
283
+ ${G}vertex capture "text"${R} ${D}\u2190 quick capture to inbox${R}
284
+ ${G}vertex search <query>${R} ${D}\u2190 search notes${R}
285
+ ${G}vertex tags${R} ${D}\u2190 list tags${R}
286
+ ${G}vertex import <file.md>${R} ${D}\u2190 import markdown as note${R}
287
+ ${G}vertex import <file> -t "T"${R} ${D}\u2190 import with title${R}
288
+ ${G}vertex export <title>${R} ${D}\u2190 export as markdown${R}
289
+ ${G}vertex export <title> -o file${R} ${D}\u2190 export to file${R}
290
+ ${G}vertex export <title> --json${R} ${D}\u2190 export as JSON${R}
291
+ ${G}vertex delete <title>${R} ${D}\u2190 soft delete${R}
292
+ ${G}vertex restore <title>${R} ${D}\u2190 restore from trash${R}
293
+ ${G}vertex trash${R} ${D}\u2190 list trash${R}
294
+ ${G}vertex trash:empty${R} ${D}\u2190 empty trash permanently${R}
295
+ ${G}vertex status${R} ${D}\u2190 storage, note count, version${R}
296
+ ${G}vertex syntax${R} ${D}\u2190 markdown syntax reference${R}
297
+ ${G}vertex howto${R} ${D}\u2190 this guide${R}
298
+ ${G}vertex help${R} ${D}\u2190 command overview${R}
299
+
300
+ ${C}${B} 15. FULL EXAMPLE \u2014 AI CREATING A COMPLETE NOTE${R}
301
+ ${D} \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${R}
302
+
303
+ ${G}cat > /tmp/my-note.md << 'VERTEX'${R}
304
+ ${Y}# Distributed Systems Study Guide${R}
305
+ ${Y}${R}
306
+ ${Y}Notes from studying distributed systems. #learning #cs${R}
307
+ ${Y}${R}
308
+ ${Y}## CAP Theorem${R}
309
+ ${Y}${R}
310
+ ${Y}A distributed system can only guarantee 2 of 3:${R}
311
+ ${Y}${R}
312
+ ${Y}- **Consistency** \u2014 every read gets the latest write${R}
313
+ ${Y}- **Availability** \u2014 every request gets a response${R}
314
+ ${Y}- **Partition tolerance** \u2014 system works despite network failures${R}
315
+ ${Y}${R}
316
+ ${Y}> [!warning]${R}
317
+ ${Y}> In practice, P is non-negotiable. You choose between CP and AP.${R}
318
+ ${Y}${R}
319
+ ${Y}## Consensus Algorithm${R}
320
+ ${Y}${R}
321
+ ${Y}\`\`\`mermaid${R}
322
+ ${Y}sequenceDiagram${R}
323
+ ${Y} Leader->>Follower1: AppendEntries${R}
324
+ ${Y} Leader->>Follower2: AppendEntries${R}
325
+ ${Y} Follower1-->>Leader: ACK${R}
326
+ ${Y} Follower2-->>Leader: ACK${R}
327
+ ${Y} Leader->>Leader: Commit (majority ACK)${R}
328
+ ${Y}\`\`\`${R}
329
+ ${Y}${R}
330
+ ${Y}## Consistency Models${R}
331
+ ${Y}${R}
332
+ ${Y}$$${R}
333
+ ${Y}\\text{Linearizability} \\subset \\text{Sequential} \\subset \\text{Causal} \\subset \\text{Eventual}${R}
334
+ ${Y}$$${R}
335
+ ${Y}${R}
336
+ ${Y}## Implementation${R}
337
+ ${Y}${R}
338
+ ${Y}\`\`\`go${R}
339
+ ${Y}type RaftNode struct {${R}
340
+ ${Y} state State${R}
341
+ ${Y} term int${R}
342
+ ${Y} votedFor string${R}
343
+ ${Y} log []Entry${R}
344
+ ${Y}}${R}
345
+ ${Y}\`\`\`${R}
346
+ ${Y}${R}
347
+ ${Y}## Reading List${R}
348
+ ${Y}${R}
349
+ ${Y}- [x] Designing Data-Intensive Applications #learning/books${R}
350
+ ${Y}- [ ] Raft paper #learning/papers${R}
351
+ ${Y}- [ ] Paxos Made Simple #learning/papers${R}
352
+ ${Y}${R}
353
+ ${Y}> [!tip]${R}
354
+ ${Y}> Start with Raft \u2014 it's simpler than Paxos and used in etcd.${R}
355
+ ${Y}${R}
356
+ ${Y}---${R}
357
+ ${Y}${R}
358
+ ${Y}Related: [[Project Roadmap]] \xB7 [[AI Research Notes]]${R}
359
+ ${G}VERTEX${R}
360
+
361
+ ${G}vertex import /tmp/my-note.md -t "Distributed Systems Study Guide"${R}
362
+
363
+ ${D} \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${R}
364
+ ${D} This creates a note with: heading, bullets, callouts, mermaid,${R}
365
+ ${D} math, code, todos with scoped tags, wiki links, and a divider.${R}
366
+ ${D} Open the web app to see it rendered with rich blocks.${R}
367
+ `);
368
+ }
369
+ };
370
+ export {
371
+ Howto as default
372
+ };
373
+ //# sourceMappingURL=howto.js.map