@page.su/ai-blog-cli 0.1.0-beta.1

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 (146) hide show
  1. package/README.md +145 -0
  2. package/dist/api-client.d.ts +39 -0
  3. package/dist/api-client.d.ts.map +1 -0
  4. package/dist/api-client.js +163 -0
  5. package/dist/api-client.js.map +1 -0
  6. package/dist/api-client.test.d.ts +2 -0
  7. package/dist/api-client.test.d.ts.map +1 -0
  8. package/dist/api-client.test.js +83 -0
  9. package/dist/api-client.test.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +74 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/commands/build.d.ts +4 -0
  15. package/dist/commands/build.d.ts.map +1 -0
  16. package/dist/commands/build.js +158 -0
  17. package/dist/commands/build.js.map +1 -0
  18. package/dist/commands/code-repo.d.ts +4 -0
  19. package/dist/commands/code-repo.d.ts.map +1 -0
  20. package/dist/commands/code-repo.js +102 -0
  21. package/dist/commands/code-repo.js.map +1 -0
  22. package/dist/commands/comments.d.ts +4 -0
  23. package/dist/commands/comments.d.ts.map +1 -0
  24. package/dist/commands/comments.js +53 -0
  25. package/dist/commands/comments.js.map +1 -0
  26. package/dist/commands/demo.d.ts +4 -0
  27. package/dist/commands/demo.d.ts.map +1 -0
  28. package/dist/commands/demo.js +72 -0
  29. package/dist/commands/demo.js.map +1 -0
  30. package/dist/commands/helpers.d.ts +21 -0
  31. package/dist/commands/helpers.d.ts.map +1 -0
  32. package/dist/commands/helpers.js +66 -0
  33. package/dist/commands/helpers.js.map +1 -0
  34. package/dist/commands/knowledge.d.ts +4 -0
  35. package/dist/commands/knowledge.d.ts.map +1 -0
  36. package/dist/commands/knowledge.js +146 -0
  37. package/dist/commands/knowledge.js.map +1 -0
  38. package/dist/commands/post.d.ts +4 -0
  39. package/dist/commands/post.d.ts.map +1 -0
  40. package/dist/commands/post.js +207 -0
  41. package/dist/commands/post.js.map +1 -0
  42. package/dist/commands/scout.d.ts +4 -0
  43. package/dist/commands/scout.d.ts.map +1 -0
  44. package/dist/commands/scout.js +48 -0
  45. package/dist/commands/scout.js.map +1 -0
  46. package/dist/commands/series.d.ts +4 -0
  47. package/dist/commands/series.d.ts.map +1 -0
  48. package/dist/commands/series.js +101 -0
  49. package/dist/commands/series.js.map +1 -0
  50. package/dist/commands/skills.d.ts +3 -0
  51. package/dist/commands/skills.d.ts.map +1 -0
  52. package/dist/commands/skills.js +79 -0
  53. package/dist/commands/skills.js.map +1 -0
  54. package/dist/commands/taxonomy.d.ts +4 -0
  55. package/dist/commands/taxonomy.d.ts.map +1 -0
  56. package/dist/commands/taxonomy.js +52 -0
  57. package/dist/commands/taxonomy.js.map +1 -0
  58. package/dist/commands/uploads.d.ts +4 -0
  59. package/dist/commands/uploads.d.ts.map +1 -0
  60. package/dist/commands/uploads.js +37 -0
  61. package/dist/commands/uploads.js.map +1 -0
  62. package/dist/config.d.ts +19 -0
  63. package/dist/config.d.ts.map +1 -0
  64. package/dist/config.js +84 -0
  65. package/dist/config.js.map +1 -0
  66. package/dist/config.test.d.ts +2 -0
  67. package/dist/config.test.d.ts.map +1 -0
  68. package/dist/config.test.js +53 -0
  69. package/dist/config.test.js.map +1 -0
  70. package/dist/index.d.ts +3 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +100 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/prompts/index.d.ts +9 -0
  75. package/dist/prompts/index.d.ts.map +1 -0
  76. package/dist/prompts/index.js +178 -0
  77. package/dist/prompts/index.js.map +1 -0
  78. package/dist/resources/syntax-spec.d.ts +23 -0
  79. package/dist/resources/syntax-spec.d.ts.map +1 -0
  80. package/dist/resources/syntax-spec.js +105 -0
  81. package/dist/resources/syntax-spec.js.map +1 -0
  82. package/dist/resources/syntax-spec.test.d.ts +2 -0
  83. package/dist/resources/syntax-spec.test.d.ts.map +1 -0
  84. package/dist/resources/syntax-spec.test.js +47 -0
  85. package/dist/resources/syntax-spec.test.js.map +1 -0
  86. package/dist/tools/build.d.ts +13 -0
  87. package/dist/tools/build.d.ts.map +1 -0
  88. package/dist/tools/build.js +181 -0
  89. package/dist/tools/build.js.map +1 -0
  90. package/dist/tools/code-repos.d.ts +5 -0
  91. package/dist/tools/code-repos.d.ts.map +1 -0
  92. package/dist/tools/code-repos.js +149 -0
  93. package/dist/tools/code-repos.js.map +1 -0
  94. package/dist/tools/comments.d.ts +12 -0
  95. package/dist/tools/comments.d.ts.map +1 -0
  96. package/dist/tools/comments.js +87 -0
  97. package/dist/tools/comments.js.map +1 -0
  98. package/dist/tools/demos.d.ts +5 -0
  99. package/dist/tools/demos.d.ts.map +1 -0
  100. package/dist/tools/demos.js +98 -0
  101. package/dist/tools/demos.js.map +1 -0
  102. package/dist/tools/glossary.d.ts +4 -0
  103. package/dist/tools/glossary.d.ts.map +1 -0
  104. package/dist/tools/glossary.js +139 -0
  105. package/dist/tools/glossary.js.map +1 -0
  106. package/dist/tools/helpers.d.ts +44 -0
  107. package/dist/tools/helpers.d.ts.map +1 -0
  108. package/dist/tools/helpers.js +65 -0
  109. package/dist/tools/helpers.js.map +1 -0
  110. package/dist/tools/knowledge.d.ts +4 -0
  111. package/dist/tools/knowledge.d.ts.map +1 -0
  112. package/dist/tools/knowledge.js +140 -0
  113. package/dist/tools/knowledge.js.map +1 -0
  114. package/dist/tools/math-concepts.d.ts +4 -0
  115. package/dist/tools/math-concepts.d.ts.map +1 -0
  116. package/dist/tools/math-concepts.js +158 -0
  117. package/dist/tools/math-concepts.js.map +1 -0
  118. package/dist/tools/posts.d.ts +35 -0
  119. package/dist/tools/posts.d.ts.map +1 -0
  120. package/dist/tools/posts.js +278 -0
  121. package/dist/tools/posts.js.map +1 -0
  122. package/dist/tools/scout.d.ts +10 -0
  123. package/dist/tools/scout.d.ts.map +1 -0
  124. package/dist/tools/scout.js +111 -0
  125. package/dist/tools/scout.js.map +1 -0
  126. package/dist/tools/series.d.ts +12 -0
  127. package/dist/tools/series.d.ts.map +1 -0
  128. package/dist/tools/series.js +120 -0
  129. package/dist/tools/series.js.map +1 -0
  130. package/dist/tools/syntax-capabilities.d.ts +15 -0
  131. package/dist/tools/syntax-capabilities.d.ts.map +1 -0
  132. package/dist/tools/syntax-capabilities.js +859 -0
  133. package/dist/tools/syntax-capabilities.js.map +1 -0
  134. package/dist/tools/taxonomy.d.ts +4 -0
  135. package/dist/tools/taxonomy.d.ts.map +1 -0
  136. package/dist/tools/taxonomy.js +73 -0
  137. package/dist/tools/taxonomy.js.map +1 -0
  138. package/dist/tools/uploads.d.ts +15 -0
  139. package/dist/tools/uploads.d.ts.map +1 -0
  140. package/dist/tools/uploads.js +56 -0
  141. package/dist/tools/uploads.js.map +1 -0
  142. package/dist/tools/workflows.d.ts +9 -0
  143. package/dist/tools/workflows.d.ts.map +1 -0
  144. package/dist/tools/workflows.js +249 -0
  145. package/dist/tools/workflows.js.map +1 -0
  146. package/package.json +41 -0
@@ -0,0 +1,146 @@
1
+ import { run, readContent, isJson } from "./helpers.js";
2
+ export function registerKnowledgeCommands(program, api) {
3
+ const knowledge = program.command("knowledge").description("Manage knowledge entries (terms & math concepts)");
4
+ // ── knowledge list ──
5
+ knowledge
6
+ .command("list")
7
+ .description("List knowledge entries (terms and math concepts)")
8
+ .option("--domain <domain>", "Filter: all, glossary, or math")
9
+ .option("--status <status>", "Filter by status: draft or published")
10
+ .option("--difficulty <n>", "Filter by difficulty 1-5 (math only)")
11
+ .option("--search <keyword>", "Search keyword")
12
+ .option("--page <n>", "Page number (default 1)")
13
+ .option("--page-size <n>", "Page size (default 20, max 100)")
14
+ .option("--json", "Output as JSON")
15
+ .action(async (opts) => {
16
+ const params = new URLSearchParams();
17
+ params.set("action", "list");
18
+ if (opts.domain)
19
+ params.set("domain", opts.domain);
20
+ if (opts.status)
21
+ params.set("status", opts.status);
22
+ if (opts.difficulty)
23
+ params.set("difficulty", opts.difficulty);
24
+ if (opts.search)
25
+ params.set("search", opts.search);
26
+ if (opts.page)
27
+ params.set("page", opts.page);
28
+ if (opts.pageSize)
29
+ params.set("pageSize", opts.pageSize);
30
+ await run(() => api.get(`/api/cli/knowledge?${params.toString()}`), isJson(opts));
31
+ });
32
+ // ── knowledge get ──
33
+ knowledge
34
+ .command("get <id>")
35
+ .description("Get a knowledge entry by id")
36
+ .option("--json", "Output as JSON")
37
+ .action(async (id, opts) => {
38
+ await run(() => api.get(`/api/cli/knowledge?action=get&id=${encodeURIComponent(id)}`), isJson(opts));
39
+ });
40
+ // ── knowledge create ──
41
+ knowledge
42
+ .command("create")
43
+ .description("Create a knowledge entry. Use --math to add math enhancement (difficulty, formulas, etc.)")
44
+ .requiredOption("--title <title>", "Entry title")
45
+ .requiredOption("--terms <terms>", "Match terms, pipe-separated (e.g. 'Promise|Thenable')")
46
+ .requiredOption("--brief <brief>", "Short description for hover tooltip (<=200 chars)")
47
+ .option("--slug <slug>", "Entry slug (auto-generated if empty)")
48
+ .option("--content-file <path>", "Markdown content from file")
49
+ .option("--status <status>", "Status: draft or published")
50
+ .option("--auto-link", "Enable auto-highlight matching")
51
+ .option("--math", "Mark as math concept (enables math enhancement fields)")
52
+ .option("--difficulty <n>", "Math difficulty 1-5 (1=beginner, 5=expert)")
53
+ .option("--formulas <latex>", "Core formulas (LaTeX)")
54
+ .option("--notation <notation>", "Symbol notation (JSON or plain text)")
55
+ .option("--prerequisites <slugs>", "Prerequisite slugs (comma-separated)")
56
+ .option("--json", "Output as JSON")
57
+ .action(async (opts) => {
58
+ const data = {
59
+ title: opts.title,
60
+ terms: opts.terms,
61
+ brief: opts.brief,
62
+ };
63
+ if (opts.slug)
64
+ data.slug = opts.slug;
65
+ if (opts.contentFile)
66
+ data.content = readContent(opts.contentFile);
67
+ if (opts.status)
68
+ data.status = opts.status;
69
+ if (opts.autoLink !== undefined)
70
+ data.autoLink = opts.autoLink;
71
+ if (opts.math) {
72
+ const mathEnhancement = {};
73
+ if (opts.difficulty)
74
+ mathEnhancement.difficulty = parseInt(opts.difficulty, 10);
75
+ if (opts.formulas)
76
+ mathEnhancement.formulas = opts.formulas;
77
+ if (opts.notation)
78
+ mathEnhancement.notation = opts.notation;
79
+ if (opts.prerequisites)
80
+ mathEnhancement.prerequisites = opts.prerequisites;
81
+ data.mathEnhancement = mathEnhancement;
82
+ }
83
+ await run(() => api.post("/api/cli/knowledge", { action: "create", data }), isJson(opts));
84
+ });
85
+ // ── knowledge update ──
86
+ knowledge
87
+ .command("update <id>")
88
+ .description("Update a knowledge entry. Pass --math to add/update math enhancement.")
89
+ .option("--title <title>", "Entry title")
90
+ .option("--terms <terms>", "Match terms")
91
+ .option("--brief <brief>", "Short description")
92
+ .option("--content-file <path>", "Markdown content from file")
93
+ .option("--status <status>", "Status: draft or published")
94
+ .option("--auto-link <bool>", "Enable auto-highlight (true/false)")
95
+ .option("--math", "Update math enhancement fields")
96
+ .option("--difficulty <n>", "Math difficulty 1-5")
97
+ .option("--formulas <latex>", "Core formulas (LaTeX)")
98
+ .option("--notation <notation>", "Symbol notation")
99
+ .option("--prerequisites <slugs>", "Prerequisite slugs")
100
+ .option("--json", "Output as JSON")
101
+ .action(async (id, opts) => {
102
+ const data = {};
103
+ if (opts.title)
104
+ data.title = opts.title;
105
+ if (opts.terms)
106
+ data.terms = opts.terms;
107
+ if (opts.brief)
108
+ data.brief = opts.brief;
109
+ if (opts.contentFile)
110
+ data.content = readContent(opts.contentFile);
111
+ if (opts.status)
112
+ data.status = opts.status;
113
+ if (opts.autoLink !== undefined)
114
+ data.autoLink = opts.autoLink === "true";
115
+ if (opts.math) {
116
+ const mathEnhancement = {};
117
+ if (opts.difficulty)
118
+ mathEnhancement.difficulty = parseInt(opts.difficulty, 10);
119
+ if (opts.formulas)
120
+ mathEnhancement.formulas = opts.formulas;
121
+ if (opts.notation)
122
+ mathEnhancement.notation = opts.notation;
123
+ if (opts.prerequisites)
124
+ mathEnhancement.prerequisites = opts.prerequisites;
125
+ data.mathEnhancement = mathEnhancement;
126
+ }
127
+ await run(() => api.post("/api/cli/knowledge", { action: "update", id, data }), isJson(opts));
128
+ });
129
+ // ── knowledge delete ──
130
+ knowledge
131
+ .command("delete <id>")
132
+ .description("Permanently delete a knowledge entry")
133
+ .option("--json", "Output as JSON")
134
+ .action(async (id, opts) => {
135
+ await run(() => api.post("/api/cli/knowledge", { action: "delete", id }), isJson(opts));
136
+ });
137
+ // ── knowledge find ──
138
+ knowledge
139
+ .command("find <keyword>")
140
+ .description("Find or suggest creating a knowledge entry by keyword")
141
+ .option("--json", "Output as JSON")
142
+ .action(async (keyword, opts) => {
143
+ await run(() => api.get(`/api/cli/knowledge?action=find_or_suggest&keyword=${encodeURIComponent(keyword)}`), isJson(opts));
144
+ });
145
+ }
146
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/commands/knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from "commander";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerPostCommands(program: Command, api: ApiClient): void;
4
+ //# sourceMappingURL=post.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../src/commands/post.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAyM3E"}
@@ -0,0 +1,207 @@
1
+ import { run, readContent, readStdin, isJson } from "./helpers.js";
2
+ export function registerPostCommands(program, api) {
3
+ const post = program.command("post").description("Manage blog posts");
4
+ // ── post list ──
5
+ post
6
+ .command("list")
7
+ .description("List all posts (admin view, includes drafts)")
8
+ .option("--status <status>", "Filter by status: draft or published")
9
+ .option("--q <keyword>", "Search by title or slug")
10
+ .option("--limit <n>", "Limit number of results (max 100)")
11
+ .option("--json", "Output as JSON")
12
+ .action(async (opts) => {
13
+ await run(() => api.get("/api/cli/posts", {
14
+ status: opts.status,
15
+ q: opts.q,
16
+ limit: opts.limit,
17
+ }), isJson(opts));
18
+ });
19
+ // ── post get ──
20
+ post
21
+ .command("get <id>")
22
+ .description("Get full post detail by id (uuid). For posts >5000 words, use 'outline' + 'section' instead")
23
+ .option("--json", "Output as JSON")
24
+ .action(async (id, opts) => {
25
+ await run(() => api.get(`/api/cli/posts/${encodeURIComponent(id)}`), isJson(opts));
26
+ });
27
+ // ── post refs ──
28
+ post
29
+ .command("refs")
30
+ .description("List posts for site reference (id/title/slug/status). Use before creating internal links")
31
+ .option("--q <keyword>", "Search keyword")
32
+ .option("--json", "Output as JSON")
33
+ .action(async (opts) => {
34
+ await run(() => api.get("/api/cli/posts", { mode: "reference", q: opts.q }), isJson(opts));
35
+ });
36
+ // ── post create ──
37
+ post
38
+ .command("create")
39
+ .description("Create a new post. Content is required (use --content-file or --stdin)")
40
+ .requiredOption("--title <title>", "Post title")
41
+ .option("--slug <slug>", "Post slug (auto-generated if empty)")
42
+ .option("--content-file <path>", "Read content from file")
43
+ .option("--stdin", "Read content from stdin")
44
+ .option("--status <status>", "Post status: draft or published (default: draft)")
45
+ .option("--excerpt <excerpt>", "Post excerpt")
46
+ .option("--cover-image <url>", "Cover image URL")
47
+ .option("--seo-title <title>", "SEO title")
48
+ .option("--seo-description <desc>", "SEO description")
49
+ .option("--canonical-url <url>", "Canonical URL")
50
+ .option("--comments-enabled", "Enable comments (default: true)")
51
+ .option("--json", "Output as JSON")
52
+ .action(async (opts) => {
53
+ const content = opts.stdin ? readStdin() : readContent(opts.contentFile);
54
+ const body = { title: opts.title, content };
55
+ if (opts.slug)
56
+ body.slug = opts.slug;
57
+ if (opts.status)
58
+ body.status = opts.status;
59
+ if (opts.excerpt)
60
+ body.excerpt = opts.excerpt;
61
+ if (opts.coverImage)
62
+ body.coverImage = opts.coverImage;
63
+ if (opts.seoTitle)
64
+ body.seoTitle = opts.seoTitle;
65
+ if (opts.seoDescription)
66
+ body.seoDescription = opts.seoDescription;
67
+ if (opts.canonicalUrl)
68
+ body.canonicalUrl = opts.canonicalUrl;
69
+ if (opts.commentsEnabled !== undefined)
70
+ body.commentsEnabled = opts.commentsEnabled;
71
+ await run(() => api.post("/api/cli/posts", body), isJson(opts));
72
+ });
73
+ // ── post update ──
74
+ post
75
+ .command("update <id>")
76
+ .description("Full update of a post. For large posts, use 'outline' + 'replace-section' instead")
77
+ .requiredOption("--title <title>", "Post title")
78
+ .option("--content-file <path>", "Read content from file")
79
+ .option("--stdin", "Read content from stdin")
80
+ .option("--slug <slug>", "Post slug")
81
+ .option("--status <status>", "Post status: draft or published")
82
+ .option("--excerpt <excerpt>", "Post excerpt")
83
+ .option("--cover-image <url>", "Cover image URL")
84
+ .option("--seo-title <title>", "SEO title")
85
+ .option("--seo-description <desc>", "SEO description")
86
+ .option("--canonical-url <url>", "Canonical URL")
87
+ .option("--json", "Output as JSON")
88
+ .action(async (id, opts) => {
89
+ const body = { title: opts.title };
90
+ if (opts.contentFile || opts.stdin) {
91
+ body.content = opts.stdin ? readStdin() : readContent(opts.contentFile);
92
+ }
93
+ if (opts.slug)
94
+ body.slug = opts.slug;
95
+ if (opts.status)
96
+ body.status = opts.status;
97
+ if (opts.excerpt)
98
+ body.excerpt = opts.excerpt;
99
+ if (opts.coverImage)
100
+ body.coverImage = opts.coverImage;
101
+ if (opts.seoTitle)
102
+ body.seoTitle = opts.seoTitle;
103
+ if (opts.seoDescription)
104
+ body.seoDescription = opts.seoDescription;
105
+ if (opts.canonicalUrl)
106
+ body.canonicalUrl = opts.canonicalUrl;
107
+ await run(() => api.patch(`/api/cli/posts/${encodeURIComponent(id)}`, body), isJson(opts));
108
+ });
109
+ // ── post publish ──
110
+ post
111
+ .command("publish <id>")
112
+ .description("Publish a post (set status to published)")
113
+ .option("--json", "Output as JSON")
114
+ .action(async (id, opts) => {
115
+ await run(() => api.patch(`/api/cli/posts/${encodeURIComponent(id)}/status`, { status: "published" }), isJson(opts));
116
+ });
117
+ // ── post unpublish ──
118
+ post
119
+ .command("unpublish <id>")
120
+ .description("Unpublish a post (set status to draft)")
121
+ .option("--json", "Output as JSON")
122
+ .action(async (id, opts) => {
123
+ await run(() => api.patch(`/api/cli/posts/${encodeURIComponent(id)}/status`, { status: "draft" }), isJson(opts));
124
+ });
125
+ // ── post delete ──
126
+ post
127
+ .command("delete <id>")
128
+ .description("Permanently delete a post. Use with caution.")
129
+ .option("--json", "Output as JSON")
130
+ .action(async (id, opts) => {
131
+ await run(() => api.delete(`/api/cli/posts/${encodeURIComponent(id)}`), isJson(opts));
132
+ });
133
+ // ── post append ──
134
+ post
135
+ .command("append <id>")
136
+ .description("Append content to the end of a post. For long posts, use 'create' skeleton + multiple 'append'.")
137
+ .requiredOption("--content-file <path>", "Read content from file")
138
+ .option("--json", "Output as JSON")
139
+ .action(async (id, opts) => {
140
+ const content = readContent(opts.contentFile);
141
+ await run(() => api.patch(`/api/cli/posts/${encodeURIComponent(id)}/append`, { content }), isJson(opts));
142
+ });
143
+ // ── post outline ──
144
+ post
145
+ .command("outline <id>")
146
+ .description("Get post section outline (saves tokens vs reading full content)")
147
+ .option("--json", "Output as JSON")
148
+ .action(async (id, opts) => {
149
+ await run(() => api.get(`/api/cli/posts/${encodeURIComponent(id)}/outline`), isJson(opts));
150
+ });
151
+ // ── post section ──
152
+ post
153
+ .command("section <id>")
154
+ .description("Read a single section by --index or --heading")
155
+ .option("--index <n>", "Section index (0-based, from 'outline')")
156
+ .option("--heading <text>", "Section heading text")
157
+ .option("--json", "Output as JSON")
158
+ .action(async (id, opts) => {
159
+ await run(() => api.get(`/api/cli/posts/${encodeURIComponent(id)}/sections`, {
160
+ index: opts.index,
161
+ heading: opts.heading,
162
+ }), isJson(opts));
163
+ });
164
+ // ── post replace-section ──
165
+ post
166
+ .command("replace-section <id>")
167
+ .description("Replace a section by --index or --heading with new content")
168
+ .requiredOption("--content-file <path>", "Read new content from file")
169
+ .option("--index <n>", "Section index (0-based, from 'outline')")
170
+ .option("--heading <text>", "Section heading text")
171
+ .option("--json", "Output as JSON")
172
+ .action(async (id, opts) => {
173
+ const newContent = readContent(opts.contentFile);
174
+ const body = { newContent };
175
+ if (opts.index !== undefined)
176
+ body.sectionIndex = parseInt(opts.index, 10);
177
+ if (opts.heading)
178
+ body.sectionHeading = opts.heading;
179
+ await run(() => api.patch(`/api/cli/posts/${encodeURIComponent(id)}/replace-section`, body), isJson(opts));
180
+ });
181
+ // ── post insert-section ──
182
+ post
183
+ .command("insert-section <id>")
184
+ .description("Insert a new section after the specified index (-1 = beginning)")
185
+ .requiredOption("--after-index <n>", "Insert after this section index (-1 for beginning)")
186
+ .requiredOption("--content-file <path>", "Read content from file")
187
+ .option("--json", "Output as JSON")
188
+ .action(async (id, opts) => {
189
+ const content = readContent(opts.contentFile);
190
+ await run(() => api.post(`/api/cli/posts/${encodeURIComponent(id)}/insert-section`, {
191
+ afterIndex: parseInt(opts.afterIndex, 10),
192
+ content,
193
+ }), isJson(opts));
194
+ });
195
+ // ── post validate ──
196
+ post
197
+ .command("validate")
198
+ .description("Validate markdown content (run before create/update)")
199
+ .option("--content-file <path>", "Read content from file")
200
+ .option("--stdin", "Read content from stdin")
201
+ .option("--json", "Output as JSON")
202
+ .action(async (opts) => {
203
+ const content = opts.stdin ? readStdin() : readContent(opts.contentFile);
204
+ await run(() => api.post("/api/cli/validate", { content }), isJson(opts));
205
+ });
206
+ }
207
+ //# sourceMappingURL=post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/commands/post.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from "commander";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerScoutCommands(program: Command, api: ApiClient): void;
4
+ //# sourceMappingURL=scout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scout.d.ts","sourceRoot":"","sources":["../../src/commands/scout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CA0C5E"}
@@ -0,0 +1,48 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { run, isJson } from "./helpers.js";
3
+ export function registerScoutCommands(program, api) {
4
+ const scout = program.command("scout").description("Search Scout knowledge engine items");
5
+ // ── scout search ──
6
+ scout
7
+ .command("search")
8
+ .description("Search Scout collected high-quality tech items")
9
+ .option("--keyword <keyword>", "Search keyword (matches title and summary)")
10
+ .option("--category <category>", "Category filter (e.g. AI, LLM, Web Development)")
11
+ .option("--min-score <n>", "Minimum overall score (0-10, default 6)")
12
+ .option("--limit <n>", "Max results (default 10, max 30)")
13
+ .option("--since <date>", "Earliest fetch date (ISO date string, e.g. 2026-01-01)")
14
+ .option("--json", "Output as JSON")
15
+ .action(async (opts) => {
16
+ const query = {};
17
+ if (opts.keyword)
18
+ query.keyword = opts.keyword;
19
+ if (opts.category)
20
+ query.category = opts.category;
21
+ if (opts.minScore !== undefined)
22
+ query.minScore = opts.minScore;
23
+ if (opts.limit !== undefined)
24
+ query.limit = opts.limit;
25
+ if (opts.since)
26
+ query.since = opts.since;
27
+ await run(() => api.get("/api/cli/scout/items", query), isJson(opts));
28
+ });
29
+ // ── scout add-refs ──
30
+ scout
31
+ .command("add-refs <postId>")
32
+ .description("Add reference sources to a post (from Scout or external)")
33
+ .requiredOption("--refs-file <path>", "JSON file: [{title, url, summary?, sourceName?, scoutItemId?}]")
34
+ .option("--json", "Output as JSON")
35
+ .action(async (postId, opts) => {
36
+ const references = JSON.parse(readFileSync(opts.refsFile, "utf-8"));
37
+ await run(() => api.post("/api/cli/scout/references", { postId, references }), isJson(opts));
38
+ });
39
+ // ── scout refs ──
40
+ scout
41
+ .command("refs <postId>")
42
+ .description("List all references of a post")
43
+ .option("--json", "Output as JSON")
44
+ .action(async (postId, opts) => {
45
+ await run(() => api.get("/api/cli/scout/references", { postId }), isJson(opts));
46
+ });
47
+ }
48
+ //# sourceMappingURL=scout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scout.js","sourceRoot":"","sources":["../../src/commands/scout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,UAAU,qBAAqB,CAAC,OAAgB,EAAE,GAAc;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC;IAE1F,qBAAqB;IACrB,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;SAC3E,MAAM,CAAC,uBAAuB,EAAE,iDAAiD,CAAC;SAClF,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;SACpE,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;SACzD,MAAM,CAAC,gBAAgB,EAAE,wDAAwD,CAAC;SAClF,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,KAAK,GAAgD,EAAE,CAAC;QAC9D,IAAI,IAAI,CAAC,OAAO;YAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/C,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACvD,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEL,uBAAuB;IACvB,KAAK;SACF,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,0DAA0D,CAAC;SACvE,cAAc,CAAC,oBAAoB,EAAE,gEAAgE,CAAC;SACtG,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACpE,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEL,mBAAmB;IACnB,KAAK;SACF,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from "commander";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerSeriesCommands(program: Command, api: ApiClient): void;
4
+ //# sourceMappingURL=series.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"series.d.ts","sourceRoot":"","sources":["../../src/commands/series.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAmG7E"}
@@ -0,0 +1,101 @@
1
+ import { run, isJson } from "./helpers.js";
2
+ export function registerSeriesCommands(program, api) {
3
+ const series = program.command("series").description("Manage article series");
4
+ // ── series list ──
5
+ series
6
+ .command("list")
7
+ .description("List all series")
8
+ .option("--published", "Only show published series")
9
+ .option("--json", "Output as JSON")
10
+ .action(async (opts) => {
11
+ await run(() => api.get("/api/cli/series", opts.published ? { published: "true" } : {}), isJson(opts));
12
+ });
13
+ // ── series get ──
14
+ series
15
+ .command("get <id>")
16
+ .description("Get series detail (with posts and order)")
17
+ .option("--json", "Output as JSON")
18
+ .action(async (id, opts) => {
19
+ await run(() => api.get(`/api/cli/series/${encodeURIComponent(id)}`), isJson(opts));
20
+ });
21
+ // ── series create ──
22
+ series
23
+ .command("create")
24
+ .description("Create a new series")
25
+ .requiredOption("--slug <slug>", "URL slug (lowercase, numbers, hyphens)")
26
+ .requiredOption("--title <title>", "Series title")
27
+ .option("--description <desc>", "Series description")
28
+ .option("--cover-image <url>", "Cover image URL")
29
+ .option("--published", "Publish immediately")
30
+ .option("--json", "Output as JSON")
31
+ .action(async (opts) => {
32
+ const body = { slug: opts.slug, title: opts.title };
33
+ if (opts.description)
34
+ body.description = opts.description;
35
+ if (opts.coverImage)
36
+ body.coverImage = opts.coverImage;
37
+ body.isPublished = opts.published ?? false;
38
+ await run(() => api.post("/api/cli/series", body), isJson(opts));
39
+ });
40
+ // ── series update ──
41
+ series
42
+ .command("update <id>")
43
+ .description("Update series metadata")
44
+ .option("--title <title>", "Series title")
45
+ .option("--description <desc>", "Series description")
46
+ .option("--cover-image <url>", "Cover image URL")
47
+ .option("--published <bool>", "Publish status (true/false)")
48
+ .option("--json", "Output as JSON")
49
+ .action(async (id, opts) => {
50
+ const body = {};
51
+ if (opts.title)
52
+ body.title = opts.title;
53
+ if (opts.description)
54
+ body.description = opts.description;
55
+ if (opts.coverImage)
56
+ body.coverImage = opts.coverImage;
57
+ if (opts.published !== undefined)
58
+ body.isPublished = opts.published === "true";
59
+ await run(() => api.patch(`/api/cli/series/${encodeURIComponent(id)}`, body), isJson(opts));
60
+ });
61
+ // ── series delete ──
62
+ series
63
+ .command("delete <id>")
64
+ .description("Delete a series (posts are not deleted, only associations)")
65
+ .option("--json", "Output as JSON")
66
+ .action(async (id, opts) => {
67
+ await run(() => api.delete(`/api/cli/series/${encodeURIComponent(id)}`), isJson(opts));
68
+ });
69
+ // ── series add-post ──
70
+ series
71
+ .command("add-post <seriesId> <postId>")
72
+ .description("Add a post to a series (optionally at a specific position)")
73
+ .option("--order <n>", "Position in series (0-based)")
74
+ .option("--json", "Output as JSON")
75
+ .action(async (seriesId, postId, opts) => {
76
+ const body = { postId };
77
+ if (opts.order !== undefined)
78
+ body.orderIndex = parseInt(opts.order, 10);
79
+ await run(() => api.post(`/api/cli/series/${encodeURIComponent(seriesId)}/posts`, body), isJson(opts));
80
+ });
81
+ // ── series remove-post ──
82
+ series
83
+ .command("remove-post <seriesId> <postId>")
84
+ .description("Remove a post from a series")
85
+ .option("--json", "Output as JSON")
86
+ .action(async (seriesId, postId, opts) => {
87
+ await run(() => api.post(`/api/cli/series/${encodeURIComponent(seriesId)}/posts/remove`, { postId }), isJson(opts));
88
+ });
89
+ // ── series reorder ──
90
+ series
91
+ .command("reorder <seriesId>")
92
+ .description("Reorder posts in a series")
93
+ .requiredOption("--post-ids <ids...>", "Post IDs in new order")
94
+ .option("--json", "Output as JSON")
95
+ .action(async (seriesId, opts) => {
96
+ await run(() => api.post(`/api/cli/series/${encodeURIComponent(seriesId)}/reorder`, {
97
+ postIds: opts.postIds,
98
+ }), isJson(opts));
99
+ });
100
+ }
101
+ //# sourceMappingURL=series.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"series.js","sourceRoot":"","sources":["../../src/commands/series.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerSkillsCommand(program: Command): void;
3
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyEzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAO5D"}