cngkit 1.1.14 → 1.1.16

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 (53) hide show
  1. package/README.md +30 -12
  2. package/dist/{chunk-Q3F7DVFP.js → chunk-7KQBSEQV.js} +84 -8
  3. package/dist/chunk-7KQBSEQV.js.map +1 -0
  4. package/dist/{chunk-AOJSBSHF.js → chunk-F7ZOO3P5.js} +3 -3
  5. package/dist/{chunk-VQTRHKNP.js → chunk-GZ2DPIU6.js} +40 -30
  6. package/dist/chunk-GZ2DPIU6.js.map +1 -0
  7. package/dist/{chunk-ERSRJLYP.js → chunk-MJVMVXV5.js} +15 -15
  8. package/dist/chunk-MJVMVXV5.js.map +1 -0
  9. package/dist/{chunk-BXKVJRTD.js → chunk-NRWEU6YQ.js} +21 -13
  10. package/dist/chunk-NRWEU6YQ.js.map +1 -0
  11. package/dist/{chunk-JX33GP2L.js → chunk-W7X6HWP5.js} +2 -2
  12. package/dist/{chunk-QZEB4VMX.js → chunk-XQGLUQFM.js} +5 -1
  13. package/dist/chunk-XQGLUQFM.js.map +1 -0
  14. package/dist/cli.js +100 -23
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/coderoom/index.js +3 -3
  17. package/dist/commands/coderoom/join.js +4 -5
  18. package/dist/commands/coderoom/join.js.map +1 -1
  19. package/dist/commands/coderoom/share.js +4 -5
  20. package/dist/commands/coderoom/share.js.map +1 -1
  21. package/dist/commands/index.js +3 -3
  22. package/dist/commands/knowledges/audiences.js +6 -7
  23. package/dist/commands/knowledges/audiences.js.map +1 -1
  24. package/dist/commands/knowledges/files.js +6 -7
  25. package/dist/commands/knowledges/files.js.map +1 -1
  26. package/dist/commands/knowledges/glob.js +6 -7
  27. package/dist/commands/knowledges/glob.js.map +1 -1
  28. package/dist/commands/knowledges/grep.js +6 -7
  29. package/dist/commands/knowledges/grep.js.map +1 -1
  30. package/dist/commands/knowledges/index.js +3 -3
  31. package/dist/commands/knowledges/list.js +6 -7
  32. package/dist/commands/knowledges/list.js.map +1 -1
  33. package/dist/commands/knowledges/read.js +6 -7
  34. package/dist/commands/knowledges/read.js.map +1 -1
  35. package/dist/commands/knowledges/search.js +7 -8
  36. package/dist/commands/knowledges/search.js.map +1 -1
  37. package/dist/commands/knowledges/status.js +6 -7
  38. package/dist/commands/knowledges/status.js.map +1 -1
  39. package/dist/commands/login.js +4 -5
  40. package/dist/commands/login.js.map +1 -1
  41. package/dist/commands/scrub.js +2 -2
  42. package/dist/commands/transcripts.js +8 -7
  43. package/dist/commands/transcripts.js.map +1 -1
  44. package/package.json +1 -1
  45. package/dist/chunk-BXKVJRTD.js.map +0 -1
  46. package/dist/chunk-ERSRJLYP.js.map +0 -1
  47. package/dist/chunk-Q3F7DVFP.js.map +0 -1
  48. package/dist/chunk-QZEB4VMX.js.map +0 -1
  49. package/dist/chunk-UZMVTVL2.js +0 -22
  50. package/dist/chunk-UZMVTVL2.js.map +0 -1
  51. package/dist/chunk-VQTRHKNP.js.map +0 -1
  52. /package/dist/{chunk-AOJSBSHF.js.map → chunk-F7ZOO3P5.js.map} +0 -0
  53. /package/dist/{chunk-JX33GP2L.js.map → chunk-W7X6HWP5.js.map} +0 -0
package/README.md CHANGED
@@ -41,7 +41,7 @@ cngkit coderoom share
41
41
  cngkit coderoom join <room-code>
42
42
  cngkit scrub [path]
43
43
  cngkit transcripts list --limit 12
44
- cngkit knowledges search "cloudflare backend" --limit 3
44
+ cngkit knowledges search Cloudflare --limit 3
45
45
  cngkit knowledges read /libraries/lib-cloudflare/SUBSKILL.md --limit 80
46
46
  ```
47
47
 
@@ -94,7 +94,7 @@ cngkit knowledges status
94
94
  Find relevant knowledge:
95
95
 
96
96
  ```bash
97
- cngkit knowledges search "cloudflare backend" --limit 3
97
+ cngkit knowledges search Cloudflare --limit 3
98
98
  ```
99
99
 
100
100
  Read a catalog file:
@@ -119,7 +119,7 @@ Return JSON for another tool:
119
119
 
120
120
  ```bash
121
121
  cngkit knowledges status --json
122
- cngkit knowledges search "vector search" --limit 5 --json
122
+ cngkit --format json knowledges search "vector search" --limit 5
123
123
  ```
124
124
 
125
125
  Catalog path shortcuts are supported. For example:
@@ -219,9 +219,26 @@ Or with an environment variable:
219
219
  CNGKIT_API_BASE_URL=https://curly.ng cngkit knowledges status
220
220
  ```
221
221
 
222
+ ## Output Format
223
+
224
+ Human-facing output renders as structured terminal text by default, including help
225
+ screens and Markdown catalog reads. Use explicit formats when a script needs data or
226
+ source text:
227
+
228
+ ```bash
229
+ cngkit --format text --help
230
+ cngkit --format json knowledges status
231
+ cngkit --format markdown knowledges read /libraries/lib-cloudflare/SUBSKILL.md
232
+ cngkit --no-color knowledges status
233
+ ```
234
+
235
+ `--json` remains available on read-only data commands as a short alias for JSON output.
236
+ `--format markdown` is intentionally source-oriented; default terminal output should not
237
+ show raw Markdown syntax.
238
+
222
239
  ## Help
223
240
 
224
- Help is baked into the CLI as Markdown:
241
+ Help is baked into the CLI and rendered for terminal reading:
225
242
 
226
243
  ```bash
227
244
  cngkit --help
@@ -232,10 +249,11 @@ cngkit knowledges read --help
232
249
  cngkit transcripts --help
233
250
  ```
234
251
 
235
- Help uses terminal Markdown rendering in interactive terminals. Status, warnings, and errors
236
- use Ink color when the terminal supports it, but `--json`, file reads, glob results, grep
237
- results, and piped output stay clean. Set `CNGKIT_COLOR=never` to disable CLI color, or
238
- `CNGKIT_COLOR=always` to force it in a wrapper that does not report itself as a TTY.
252
+ Help uses terminal Markdown rendering in interactive terminals and pipes. Status, warnings,
253
+ and errors use Ink color when the terminal supports it, while `--format json`, glob results,
254
+ grep results, and other parse-oriented output stay clean. Use `--no-color` or
255
+ `CNGKIT_COLOR=never` to disable CLI color, or `CNGKIT_COLOR=always` to force it in a wrapper
256
+ that does not report itself as a TTY.
239
257
 
240
258
  ## Terminal UI Stack
241
259
 
@@ -263,8 +281,8 @@ src/commands/
263
281
 
264
282
  The CLI does not hand-roll ANSI escape codes. Status styles go through Ink's built-in
265
283
  `<Text color="..." bold dimColor>` support, and help screens render through
266
- `marked-terminal` with a shared Chalk-backed theme. Commands that return content for agents
267
- or shell pipelines write raw lines instead.
284
+ `marked-terminal` with a shared Chalk-backed theme. Commands that return parse-oriented
285
+ content for agents or shell pipelines write clean lines instead.
268
286
 
269
287
  ## For Contributors
270
288
 
@@ -283,8 +301,8 @@ The route files under `src/commands/` should stay thin. Put behavior in
283
301
  For output, use the shared `CommandOutput` methods:
284
302
 
285
303
  - `success`, `warning`, `info`, `muted`, and `error` for human-facing terminal status.
286
- - `markdown` for help screens and terminal-only Markdown display.
287
- - `raw` for JSON, file content, file paths, grep results, and anything another tool may parse.
304
+ - `markdown` for help screens and Markdown content that should render by default.
305
+ - `raw` for JSON, explicit source output, file paths, grep results, and anything another tool may parse.
288
306
 
289
307
  Useful local checks:
290
308
 
@@ -1,5 +1,34 @@
1
- // src/shared/output.ts
1
+ // src/shared/config.ts
2
+ import { randomBytes, randomUUID } from "crypto";
2
3
  import process from "process";
4
+ var packageVersion = "1.1.16";
5
+ var defaultApiBaseUrl = "https://curly.ng";
6
+ function resolveApiBaseUrl(options) {
7
+ return options.apiBaseUrl ?? process.env.CNGKIT_API_BASE_URL ?? defaultApiBaseUrl;
8
+ }
9
+ function resolveOutputFormat() {
10
+ const value = process.env.CNGKIT_FORMAT?.toLowerCase();
11
+ if (value === "json" || value === "markdown") {
12
+ return value;
13
+ }
14
+ return "text";
15
+ }
16
+ function parseOutputFormat(value) {
17
+ const normalizedValue = value.toLowerCase();
18
+ if (normalizedValue === "text" || normalizedValue === "json" || normalizedValue === "markdown") {
19
+ return normalizedValue;
20
+ }
21
+ throw new Error("Unknown --format value. Use one of: text, json, markdown.");
22
+ }
23
+ function createRoomCode() {
24
+ return randomBytes(4).toString("hex").toUpperCase();
25
+ }
26
+ function createPeerId() {
27
+ return randomUUID();
28
+ }
29
+
30
+ // src/shared/output.ts
31
+ import process2 from "process";
3
32
  import { Marked } from "marked";
4
33
  import { markedTerminal } from "marked-terminal";
5
34
  import { createElement } from "react";
@@ -74,9 +103,18 @@ function decorateMarkdownOutput(output) {
74
103
  return `${prefix}${chalk.magentaBright("-")} `;
75
104
  });
76
105
  }
106
+ function normalizeRenderedMarkdownOutput(output) {
107
+ return output.split("\n").map((line) => {
108
+ const headingMatch = line.match(/^(\s*)#{1,6}\s+(.+)$/);
109
+ if (headingMatch) {
110
+ return `${headingMatch[1]}${headingMatch[2]}`;
111
+ }
112
+ return line.replace(/^(\s*)\*\s+/, "$1- ");
113
+ }).join("\n").replace(/`([^`\n]+)`/g, "$1");
114
+ }
77
115
 
78
116
  // src/shared/output.ts
79
- var consoleOutput = createCommandOutput(process.stdout, process.stderr);
117
+ var consoleOutput = createCommandOutput(process2.stdout, process2.stderr);
80
118
  function createCommandOutput(stdout, stderr) {
81
119
  return {
82
120
  info(message) {
@@ -130,7 +168,7 @@ function formatStyledMessage(stream, style, message) {
130
168
  );
131
169
  }
132
170
  function formatMarkdownMessage(stream, markdown) {
133
- if (stream.isTTY !== true) {
171
+ if (resolveOutputFormat() === "markdown") {
134
172
  return markdown;
135
173
  }
136
174
  const useColor = shouldRenderColor(stream);
@@ -138,22 +176,54 @@ function formatMarkdownMessage(stream, markdown) {
138
176
  const parser = new Marked();
139
177
  parser.use(
140
178
  markedTerminal({
141
- ...createMarkdownTheme(useColor),
179
+ ...createMarkdownTheme(false),
142
180
  width: markdownWidth
143
181
  })
144
182
  );
145
- const renderedMarkdown = String(parser.parse(markdown)).trimEnd();
183
+ const preparedMarkdown = prepareMarkdownForTerminal(markdown);
184
+ const renderedMarkdown = normalizeRenderedMarkdownOutput(
185
+ `${preparedMarkdown.prefix}${String(parser.parse(preparedMarkdown.body)).trimEnd()}`
186
+ );
146
187
  return useColor ? decorateMarkdownOutput(renderedMarkdown) : stripAnsi2(renderedMarkdown);
147
188
  }
189
+ function prepareMarkdownForTerminal(markdown) {
190
+ if (!markdown.startsWith("---\n")) {
191
+ return { prefix: "", body: markdown };
192
+ }
193
+ const frontmatterEndIndex = markdown.indexOf("\n---", 4);
194
+ if (frontmatterEndIndex < 0) {
195
+ return {
196
+ prefix: formatFrontmatterForTerminal(markdown.slice(4).trimEnd()),
197
+ body: ""
198
+ };
199
+ }
200
+ const frontmatter = markdown.slice(4, frontmatterEndIndex).trimEnd();
201
+ const body = markdown.slice(frontmatterEndIndex + "\n---".length).replace(/^\n+/, "");
202
+ return {
203
+ prefix: formatFrontmatterForTerminal(frontmatter),
204
+ body
205
+ };
206
+ }
207
+ function formatFrontmatterForTerminal(frontmatter) {
208
+ const formattedFrontmatter = frontmatter.split("\n").map((line) => ` ${line}`).join("\n");
209
+ return `Metadata
210
+
211
+ ${formattedFrontmatter}
212
+
213
+ `;
214
+ }
148
215
  function shouldRenderColor(stream) {
149
- const colorMode = process.env.CNGKIT_COLOR?.toLowerCase();
216
+ if (process2.env.NO_COLOR !== void 0 || process2.env.CNGKIT_NO_COLOR === "1") {
217
+ return false;
218
+ }
219
+ const colorMode = process2.env.CNGKIT_COLOR?.toLowerCase();
150
220
  if (colorMode === "never" || colorMode === "0" || colorMode === "false") {
151
221
  return false;
152
222
  }
153
223
  if (colorMode === "always" || colorMode === "1" || colorMode === "true") {
154
224
  return true;
155
225
  }
156
- if (process.env.FORCE_COLOR !== void 0 && process.env.FORCE_COLOR !== "0") {
226
+ if (process2.env.FORCE_COLOR !== void 0 && process2.env.FORCE_COLOR !== "0") {
157
227
  return true;
158
228
  }
159
229
  return stream.isTTY === true;
@@ -166,8 +236,14 @@ function clampMarkdownWidth(columns) {
166
236
  }
167
237
 
168
238
  export {
239
+ packageVersion,
240
+ resolveApiBaseUrl,
241
+ resolveOutputFormat,
242
+ parseOutputFormat,
243
+ createRoomCode,
244
+ createPeerId,
169
245
  consoleOutput,
170
246
  createCommandOutput,
171
247
  formatError
172
248
  };
173
- //# sourceMappingURL=chunk-Q3F7DVFP.js.map
249
+ //# sourceMappingURL=chunk-7KQBSEQV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/config.ts","../src/shared/output.ts","../src/shared/theme.ts"],"sourcesContent":["import { randomBytes, randomUUID } from \"node:crypto\";\nimport process from \"node:process\";\n\nexport const packageVersion = \"1.1.16\";\nexport const defaultApiBaseUrl = \"https://curly.ng\";\nexport const outputFormats = [\"text\", \"json\", \"markdown\"] as const;\n\nexport type OutputFormat = (typeof outputFormats)[number];\n\nexport type GlobalCommandOptions = {\n apiBaseUrl?: string;\n};\n\nexport function resolveApiBaseUrl(options: GlobalCommandOptions): string {\n return options.apiBaseUrl ?? process.env.CNGKIT_API_BASE_URL ?? defaultApiBaseUrl;\n}\n\nexport function resolveOutputFormat(): OutputFormat {\n const value = process.env.CNGKIT_FORMAT?.toLowerCase();\n if (value === \"json\" || value === \"markdown\") {\n return value;\n }\n\n return \"text\";\n}\n\nexport function parseOutputFormat(value: string): OutputFormat {\n const normalizedValue = value.toLowerCase();\n if (normalizedValue === \"text\" || normalizedValue === \"json\" || normalizedValue === \"markdown\") {\n return normalizedValue;\n }\n\n throw new Error(\"Unknown --format value. Use one of: text, json, markdown.\");\n}\n\nexport function createRoomCode(): string {\n return randomBytes(4).toString(\"hex\").toUpperCase();\n}\n\nexport function createPeerId(): string {\n return randomUUID();\n}\n","import process from \"node:process\";\nimport { Marked, type MarkedExtension } from \"marked\";\nimport { markedTerminal } from \"marked-terminal\";\nimport { createElement } from \"react\";\nimport { renderToString, Text } from \"ink\";\nimport stripAnsi from \"strip-ansi\";\nimport {\n createMarkdownTheme,\n decorateMarkdownOutput,\n normalizeRenderedMarkdownOutput,\n statusStylePropsByOutputStyle,\n type OutputStyle,\n} from \"./theme.js\";\nimport { resolveOutputFormat } from \"./config.js\";\n\ntype OutputStream = NodeJS.WriteStream & {\n isTTY?: boolean;\n columns?: number;\n};\n\nexport type CommandOutput = {\n info(message: string): void;\n success(message: string): void;\n warning(message: string): void;\n muted(message: string): void;\n markdown(message: string): void;\n raw(message: string): void;\n error(message: string): void;\n};\n\nexport const consoleOutput = createCommandOutput(process.stdout, process.stderr);\n\nexport function createCommandOutput(stdout: OutputStream, stderr: OutputStream): CommandOutput {\n return {\n info(message) {\n writeStyledMessage(stdout, \"info\", message);\n },\n success(message) {\n writeStyledMessage(stdout, \"success\", message);\n },\n warning(message) {\n writeStyledMessage(stdout, \"warning\", message);\n },\n muted(message) {\n writeStyledMessage(stdout, \"muted\", message);\n },\n markdown(message) {\n stdout.write(`${formatMarkdownMessage(stdout, message)}\\n`);\n },\n raw(message) {\n stdout.write(`${message}\\n`);\n },\n error(message) {\n writeStyledMessage(stderr, \"error\", message);\n },\n };\n}\n\nexport function formatError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction writeStyledMessage(stream: OutputStream, style: OutputStyle, message: string): void {\n stream.write(`${formatStyledMessage(stream, style, message)}\\n`);\n}\n\nfunction formatStyledMessage(stream: OutputStream, style: OutputStyle, message: string): string {\n if (!shouldRenderColor(stream)) {\n return message;\n }\n\n return renderToString(\n createElement(\n Text,\n {\n ...statusStylePropsByOutputStyle[style],\n wrap: \"wrap\",\n },\n message\n ),\n {\n columns: 10_000,\n }\n );\n}\n\nfunction formatMarkdownMessage(stream: OutputStream, markdown: string): string {\n if (resolveOutputFormat() === \"markdown\") {\n return markdown;\n }\n\n const useColor = shouldRenderColor(stream);\n const markdownWidth = clampMarkdownWidth(stream.columns);\n const parser = new Marked();\n parser.use(\n markedTerminal({\n ...createMarkdownTheme(false),\n width: markdownWidth,\n }) as unknown as MarkedExtension\n );\n\n const preparedMarkdown = prepareMarkdownForTerminal(markdown);\n const renderedMarkdown = normalizeRenderedMarkdownOutput(\n `${preparedMarkdown.prefix}${String(parser.parse(preparedMarkdown.body)).trimEnd()}`\n );\n\n return useColor ? decorateMarkdownOutput(renderedMarkdown) : stripAnsi(renderedMarkdown);\n}\n\nfunction prepareMarkdownForTerminal(markdown: string): { prefix: string; body: string } {\n if (!markdown.startsWith(\"---\\n\")) {\n return { prefix: \"\", body: markdown };\n }\n\n const frontmatterEndIndex = markdown.indexOf(\"\\n---\", 4);\n if (frontmatterEndIndex < 0) {\n return {\n prefix: formatFrontmatterForTerminal(markdown.slice(4).trimEnd()),\n body: \"\",\n };\n }\n\n const frontmatter = markdown.slice(4, frontmatterEndIndex).trimEnd();\n const body = markdown.slice(frontmatterEndIndex + \"\\n---\".length).replace(/^\\n+/, \"\");\n\n return {\n prefix: formatFrontmatterForTerminal(frontmatter),\n body,\n };\n}\n\nfunction formatFrontmatterForTerminal(frontmatter: string): string {\n const formattedFrontmatter = frontmatter\n .split(\"\\n\")\n .map((line) => ` ${line}`)\n .join(\"\\n\");\n\n return `Metadata\\n\\n${formattedFrontmatter}\\n\\n`;\n}\n\nfunction shouldRenderColor(stream: OutputStream): boolean {\n if (process.env.NO_COLOR !== undefined || process.env.CNGKIT_NO_COLOR === \"1\") {\n return false;\n }\n\n const colorMode = process.env.CNGKIT_COLOR?.toLowerCase();\n\n if (colorMode === \"never\" || colorMode === \"0\" || colorMode === \"false\") {\n return false;\n }\n\n if (colorMode === \"always\" || colorMode === \"1\" || colorMode === \"true\") {\n return true;\n }\n\n if (process.env.FORCE_COLOR !== undefined && process.env.FORCE_COLOR !== \"0\") {\n return true;\n }\n\n return stream.isTTY === true;\n}\n\nfunction clampMarkdownWidth(columns: number | undefined): number {\n if (columns === undefined) {\n return 100;\n }\n\n return Math.max(72, Math.min(columns, 120));\n}\n","import { Chalk } from \"chalk\";\nimport type { TextProps } from \"ink\";\nimport stripAnsi from \"strip-ansi\";\n\nexport type OutputStyle = \"info\" | \"success\" | \"warning\" | \"muted\" | \"error\";\n\nexport const statusStylePropsByOutputStyle = {\n info: {\n color: \"cyan\",\n },\n success: {\n color: \"green\",\n bold: true,\n },\n warning: {\n color: \"yellow\",\n bold: true,\n },\n muted: {\n dimColor: true,\n },\n error: {\n color: \"red\",\n bold: true,\n },\n} satisfies Record<OutputStyle, TextProps>;\n\nexport function createMarkdownTheme(useColor: boolean) {\n const chalk = new Chalk({ level: useColor ? 1 : 0 });\n const identity = (value: string) => value;\n\n return {\n code: chalk.green,\n blockquote: chalk.dim.italic,\n html: chalk.gray,\n heading: chalk.blueBright.bold,\n firstHeading: chalk.magentaBright.bold,\n hr: chalk.gray,\n listitem: identity,\n table: identity,\n paragraph: identity,\n strong: chalk.bold,\n em: chalk.italic,\n codespan: chalk.cyanBright,\n del: chalk.dim.strikethrough,\n link: chalk.blueBright,\n href: chalk.blue.underline,\n text: identity,\n showSectionPrefix: true,\n reflowText: true,\n unescape: true,\n emoji: false,\n tab: 2,\n };\n}\n\nexport function decorateMarkdownOutput(output: string): string {\n const chalk = new Chalk({ level: 1 });\n\n const decoratedLines = output\n .split(\"\\n\")\n .map((line) => {\n const plainLine = stripAnsi(line);\n\n if (plainLine.startsWith(\"# \")) {\n return chalk.magentaBright.bold(plainLine);\n }\n\n if (plainLine.startsWith(\"## \")) {\n return chalk.blueBright.bold(plainLine);\n }\n\n return line;\n })\n .join(\"\\n\");\n\n return decoratedLines\n .replace(/`([^`\\n]+)`/g, (_match, value: string) => chalk.cyanBright(value))\n .replace(/(^|\\s)(--[a-z][a-z0-9-]*)/g, (_match, prefix: string, flag: string) => {\n return `${prefix}${chalk.yellow(flag)}`;\n })\n .replace(/(https?:\\/\\/[^\\s)]+)/g, (url: string) => chalk.blueBright.underline(url))\n .replace(/^(\\s*)\\*\\s+/gm, (_match, prefix: string) => {\n return `${prefix}${chalk.magentaBright(\"-\")} `;\n });\n}\n\nexport function normalizeRenderedMarkdownOutput(output: string): string {\n return output\n .split(\"\\n\")\n .map((line) => {\n const headingMatch = line.match(/^(\\s*)#{1,6}\\s+(.+)$/);\n if (headingMatch) {\n return `${headingMatch[1]}${headingMatch[2]}`;\n }\n\n return line.replace(/^(\\s*)\\*\\s+/, \"$1- \");\n })\n .join(\"\\n\")\n .replace(/`([^`\\n]+)`/g, \"$1\");\n}\n"],"mappings":"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","names":["process","stripAnsi","process","stripAnsi"]}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  readBackendHealth
3
- } from "./chunk-ERSRJLYP.js";
3
+ } from "./chunk-MJVMVXV5.js";
4
4
  import {
5
5
  createPeerId,
6
6
  createRoomCode,
7
7
  resolveApiBaseUrl
8
- } from "./chunk-UZMVTVL2.js";
8
+ } from "./chunk-7KQBSEQV.js";
9
9
 
10
10
  // src/features/coderoom/run-coderoom-command.ts
11
11
  import process2 from "process";
@@ -412,4 +412,4 @@ export {
412
412
  runShareCommand,
413
413
  runJoinCommand
414
414
  };
415
- //# sourceMappingURL=chunk-AOJSBSHF.js.map
415
+ //# sourceMappingURL=chunk-F7ZOO3P5.js.map
@@ -13,7 +13,7 @@ var coderoomCommandList = [
13
13
  var knowledgesCommandList = [
14
14
  "- `status` - print remote catalog state.",
15
15
  "- `audiences` - list valid audience filters.",
16
- "- `search <query>` - semantic search over Cloudflare Vectorize-backed records.",
16
+ "- `search <query>` - search over Postgres-backed knowledges records.",
17
17
  "- `list [query]` - list known subskills.",
18
18
  "- `files [query]` - list uploaded catalog files.",
19
19
  "- `read <file-path>` - Claude-style file read.",
@@ -32,7 +32,7 @@ Curly.ng operator CLI for shared code rooms, safe local cleanup, local agent tra
32
32
 
33
33
  \`\`\`bash
34
34
  npx --yes cngkit@latest --help
35
- npx --yes cngkit@latest knowledges search "cloudflare backend" --limit 3
35
+ npx --yes cngkit@latest knowledges search Cloudflare --limit 3
36
36
  \`\`\`
37
37
 
38
38
  ## Installed Usage
@@ -41,6 +41,14 @@ npx --yes cngkit@latest knowledges search "cloudflare backend" --limit 3
41
41
  cngkit <command> [options]
42
42
  \`\`\`
43
43
 
44
+ ## Global Options
45
+
46
+ \`\`\`bash
47
+ cngkit --format text|json|markdown ...
48
+ cngkit --no-color ...
49
+ cngkit --api-base-url <url> ...
50
+ \`\`\`
51
+
44
52
  ## Commands
45
53
 
46
54
  ${commandList}
@@ -59,10 +67,11 @@ cngkit knowledges <subcommand> --help
59
67
 
60
68
  ## AI And Scripts
61
69
 
62
- - Help is Markdown in pipes and colorized Markdown in interactive terminals.
63
- - Text output is line-oriented; commands do not rely on color-only state.
64
- - Use \`--json\` on read-only knowledges commands for typed backend payloads.
65
- - Use \`CNGKIT_COLOR=never\` for logs, screenshots, and strict plain text.
70
+ - Help renders as structured terminal text by default, even in pipes.
71
+ - Use \`--format json\` or \`--json\` on read-only data commands for typed payloads.
72
+ - Use \`--format markdown\` only when raw Markdown source is intentional.
73
+ - Use \`--no-color\` or \`CNGKIT_COLOR=never\` for logs, screenshots, and strict plain text.
74
+ - Use \`npm_config_progress=false npx --yes cngkit@latest ...\` for clean one-shot npx captures.
66
75
 
67
76
  ## Backend
68
77
 
@@ -109,9 +118,9 @@ This is local-only operator tooling. It does not call Curly.ng and it does not u
109
118
  ## Usage
110
119
 
111
120
  \`\`\`bash
112
- cngkit transcripts list [--source all|codex|claude] [--limit <n>] [--json]
113
- cngkit transcripts read <path-or-session-id> [--source all|codex|claude] [--limit <n>] [--include-internal] [--json]
114
- cngkit transcripts grep <query> [--source all|codex|claude] [--limit <n>] [--file-limit <n>] [--include-internal] [--json]
121
+ cngkit transcripts list [--source all|codex|claude] [--limit <n>] [--json|--format json]
122
+ cngkit transcripts read <path-or-session-id> [--source all|codex|claude] [--limit <n>] [--include-internal] [--json|--format json]
123
+ cngkit transcripts grep <query> [--source all|codex|claude] [--limit <n>] [--file-limit <n>] [--include-internal] [--json|--format json]
115
124
  \`\`\`
116
125
 
117
126
  ## Sources
@@ -284,7 +293,7 @@ cngkit knowledges glob --help
284
293
  ## Common Examples
285
294
 
286
295
  \`\`\`bash
287
- npx --yes cngkit@latest knowledges search "cloudflare backend" --limit 3
296
+ npx --yes cngkit@latest knowledges search Cloudflare --limit 3
288
297
  npx --yes cngkit@latest knowledges read /libraries/lib-cloudflare/SUBSKILL.md --limit 80
289
298
  npx --yes cngkit@latest knowledges grep Cloudflare --path /libraries/lib-cloudflare --output-mode files_with_matches
290
299
  npx --yes cngkit@latest knowledges glob "**/*.md" --path /libraries/lib-cloudflare
@@ -292,11 +301,11 @@ npx --yes cngkit@latest knowledges glob "**/*.md" --path /libraries/lib-cloudfla
292
301
 
293
302
  ## AI-Friendly Output
294
303
 
295
- - Default output is line-oriented and intended to be directly usable by agents.
296
- - \`read\` prints file content with no wrapper before any truncation note.
304
+ - Default output is structured text intended to be directly usable by people and agents.
305
+ - \`read\` renders Markdown files by default and prints exact source with \`--format markdown\`.
297
306
  - \`grep --output-mode content\` prints \`path:line\` blocks.
298
307
  - \`grep --output-mode files_with_matches\` and \`glob\` print one path per line.
299
- - \`--json\` prints the typed backend data payload for machine consumption.
308
+ - \`--format json\` and \`--json\` print typed backend payloads for machine consumption.
300
309
  `
301
310
  },
302
311
  {
@@ -309,13 +318,13 @@ Print remote Harness catalog state.
309
318
  ## Usage
310
319
 
311
320
  \`\`\`bash
312
- cngkit knowledges status [--json]
321
+ cngkit knowledges status [--json|--format json]
313
322
  \`\`\`
314
323
 
315
324
  ## Output
316
325
 
317
- - Text mode prints catalog name, file count, blob count, Vectorize binding, and latest run when present.
318
- - \`--json\` prints the backend data payload.
326
+ - Text mode prints catalog name, file count, blob count, database binding, and latest run when present.
327
+ - \`--format json\` and \`--json\` print the backend data payload.
319
328
  `
320
329
  },
321
330
  {
@@ -328,7 +337,7 @@ List valid audience filters for catalog browsing.
328
337
  ## Usage
329
338
 
330
339
  \`\`\`bash
331
- cngkit knowledges audiences [--json]
340
+ cngkit knowledges audiences [--json|--format json]
332
341
  \`\`\`
333
342
 
334
343
  ## Use When
@@ -346,7 +355,7 @@ Search the hosted Harness index for relevant skills and subskills.
346
355
  ## Usage
347
356
 
348
357
  \`\`\`bash
349
- cngkit knowledges search <query> [--limit <n>] [--json]
358
+ cngkit knowledges search <query> [--limit <n>] [--json|--format json]
350
359
  \`\`\`
351
360
 
352
361
  ## Defaults
@@ -356,7 +365,7 @@ cngkit knowledges search <query> [--limit <n>] [--json]
356
365
  ## Example
357
366
 
358
367
  \`\`\`bash
359
- npx --yes cngkit@latest knowledges search "cloudflare backend" --limit 3
368
+ npx --yes cngkit@latest knowledges search Cloudflare --limit 3
360
369
  \`\`\`
361
370
  `
362
371
  },
@@ -370,7 +379,7 @@ List hosted Harness subskills, optionally filtered by query.
370
379
  ## Usage
371
380
 
372
381
  \`\`\`bash
373
- cngkit knowledges list [query] [--limit <n>] [--json]
382
+ cngkit knowledges list [query] [--limit <n>] [--json|--format json]
374
383
  \`\`\`
375
384
 
376
385
  ## Defaults
@@ -394,7 +403,7 @@ List uploaded Harness catalog files, optionally filtered by query or audience.
394
403
  ## Usage
395
404
 
396
405
  \`\`\`bash
397
- cngkit knowledges files [query] [--audience <id>] [--limit <n>] [--json]
406
+ cngkit knowledges files [query] [--audience <id>] [--limit <n>] [--json|--format json]
398
407
  \`\`\`
399
408
 
400
409
  ## Defaults
@@ -420,7 +429,7 @@ Read a hosted Harness catalog file by path.
420
429
  ## Usage
421
430
 
422
431
  \`\`\`bash
423
- cngkit knowledges read <file-path> [--offset <n>] [--limit <n>] [--json]
432
+ cngkit knowledges read <file-path> [--offset <n>] [--limit <n>] [--json|--format json|--format markdown]
424
433
  \`\`\`
425
434
 
426
435
  ## Inputs
@@ -431,9 +440,10 @@ cngkit knowledges read <file-path> [--offset <n>] [--limit <n>] [--json]
431
440
 
432
441
  ## Output
433
442
 
434
- - Text mode prints only the returned file content first.
443
+ - Text mode renders Markdown files for terminal reading.
444
+ - \`--format markdown\` prints the exact returned file content.
435
445
  - If truncated, a final bracketed truncation note is printed after the content.
436
- - \`--json\` prints \`{ file_path, content, total_lines, offset, limit, truncated }\`.
446
+ - \`--format json\` and \`--json\` print \`{ file_path, content, total_lines, offset, limit, truncated }\`.
437
447
 
438
448
  ## Example
439
449
 
@@ -452,7 +462,7 @@ Search inside hosted Harness catalog files with a JavaScript regular expression.
452
462
  ## Usage
453
463
 
454
464
  \`\`\`bash
455
- cngkit knowledges grep <pattern> [--path <path>] [--include <glob>] [--output-mode <mode>] [--context <n>] [--case-insensitive] [--json]
465
+ cngkit knowledges grep <pattern> [--path <path>] [--include <glob>] [--output-mode <mode>] [--context <n>] [--case-insensitive] [--json|--format json]
456
466
  \`\`\`
457
467
 
458
468
  ## Inputs
@@ -470,13 +480,13 @@ cngkit knowledges grep <pattern> [--path <path>] [--include <glob>] [--output-mo
470
480
  - \`content\`: prints blocks as \`file_path:line_number\`, optional context lines, then \`> matching line\`.
471
481
  - \`files_with_matches\`: prints one matching file path per line.
472
482
  - \`count\`: prints \`file_path: match_count\` lines.
473
- - \`--json\` prints the typed backend response union.
483
+ - \`--format json\` and \`--json\` print the typed backend response union.
474
484
 
475
485
  ## Examples
476
486
 
477
487
  \`\`\`bash
478
488
  npx --yes cngkit@latest knowledges grep Cloudflare --path /libraries/lib-cloudflare --output-mode files_with_matches
479
- npx --yes cngkit@latest knowledges grep "Vectorize|D1" --path /libraries/lib-cloudflare --context 2
489
+ npx --yes cngkit@latest knowledges grep "Postgres|Hyperdrive" --path /libraries/lib-cloudflare --context 2
480
490
  \`\`\`
481
491
  `
482
492
  },
@@ -490,7 +500,7 @@ Find hosted Harness catalog files by glob pattern.
490
500
  ## Usage
491
501
 
492
502
  \`\`\`bash
493
- cngkit knowledges glob [pattern] [--path <path>] [--json]
503
+ cngkit knowledges glob [pattern] [--path <path>] [--json|--format json]
494
504
  \`\`\`
495
505
 
496
506
  ## Inputs
@@ -511,7 +521,7 @@ cngkit knowledges glob [pattern] [--path <path>] [--json]
511
521
 
512
522
  - Text mode prints one file path per line.
513
523
  - If truncated, a final bracketed truncation note is printed.
514
- - \`--json\` prints \`{ files, total_files, truncated }\`.
524
+ - \`--format json\` and \`--json\` print \`{ files, total_files, truncated }\`.
515
525
 
516
526
  ## Example
517
527
 
@@ -568,4 +578,4 @@ export {
568
578
  formatCngkitHelp,
569
579
  formatKnowledgesHelp
570
580
  };
571
- //# sourceMappingURL=chunk-VQTRHKNP.js.map
581
+ //# sourceMappingURL=chunk-GZ2DPIU6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/help-specs.ts"],"sourcesContent":["type HelpTopic = {\n title: string;\n aliases: string[];\n body: string;\n};\n\nconst commandList = [\n \"- `cngkit login` - open Curly.ng login, or print the URL in headless shells.\",\n \"- `cngkit coderoom ...` - share or join a live developer room for a working tree.\",\n \"- `cngkit scrub [path]` - scan for secrets; rewrite only when `--yes` is passed.\",\n \"- `cngkit transcripts ...` - list, read, and grep local Claude/Codex transcripts.\",\n \"- `cngkit knowledges ...` - search and read the hosted Harness knowledge catalog.\",\n].join(\"\\n\");\n\nconst coderoomCommandList = [\n \"- `share [room-code]` - start a live room from the current directory.\",\n \"- `join <room-code>` - join another developer's live room from the current directory.\",\n].join(\"\\n\");\n\nconst knowledgesCommandList = [\n \"- `status` - print remote catalog state.\",\n \"- `audiences` - list valid audience filters.\",\n \"- `search <query>` - search over Postgres-backed knowledges records.\",\n \"- `list [query]` - list known subskills.\",\n \"- `files [query]` - list uploaded catalog files.\",\n \"- `read <file-path>` - Claude-style file read.\",\n \"- `grep <pattern>` - Claude-style content search.\",\n \"- `glob [pattern]` - Claude-style file discovery.\",\n].join(\"\\n\");\n\nconst helpTopics: HelpTopic[] = [\n {\n title: \"cngkit\",\n aliases: [\"\", \"overview\", \"help\"],\n body: `# cngkit\n\nCurly.ng operator CLI for shared code rooms, safe local cleanup, local agent transcripts, and hosted Harness knowledges.\n\n## Run Now\n\n\\`\\`\\`bash\nnpx --yes cngkit@latest --help\nnpx --yes cngkit@latest knowledges search Cloudflare --limit 3\n\\`\\`\\`\n\n## Installed Usage\n\n\\`\\`\\`bash\ncngkit <command> [options]\n\\`\\`\\`\n\n## Global Options\n\n\\`\\`\\`bash\ncngkit --format text|json|markdown ...\ncngkit --no-color ...\ncngkit --api-base-url <url> ...\n\\`\\`\\`\n\n## Commands\n\n${commandList}\n\n## Help Map\n\n\\`\\`\\`bash\ncngkit help <topic>\ncngkit <command> --help\ncngkit coderoom --help\ncngkit coderoom <subcommand> --help\ncngkit transcripts --help\ncngkit knowledges --help\ncngkit knowledges <subcommand> --help\n\\`\\`\\`\n\n## AI And Scripts\n\n- Help renders as structured terminal text by default, even in pipes.\n- Use \\`--format json\\` or \\`--json\\` on read-only data commands for typed payloads.\n- Use \\`--format markdown\\` only when raw Markdown source is intentional.\n- Use \\`--no-color\\` or \\`CNGKIT_COLOR=never\\` for logs, screenshots, and strict plain text.\n- Use \\`npm_config_progress=false npx --yes cngkit@latest ...\\` for clean one-shot npx captures.\n\n## Backend\n\nDefault API: \\`https://curly.ng\\`\n\nOverride with:\n\n\\`\\`\\`bash\ncngkit --api-base-url <url> ...\nCNGKIT_API_BASE_URL=<url> cngkit ...\n\\`\\`\\`\n`,\n },\n {\n title: \"login\",\n aliases: [\"login\"],\n body: `# cngkit login\n\nOpen Curly.ng login in a browser. In headless shells, print the URL so an agent can show it to the operator.\n\n## Usage\n\n\\`\\`\\`bash\nnpx --yes cngkit@latest login\ncngkit login\n\\`\\`\\`\n\n## Output\n\n- First line names the login URL being opened.\n- If no browser opener exists, the CLI prints a direct URL.\n- No credentials are printed or persisted by this command.\n`,\n },\n {\n title: \"transcripts\",\n aliases: [\"transcripts\", \"transcript\"],\n body: `# cngkit transcripts\n\nRead local Claude and Codex transcript JSONL files.\n\nThis is local-only operator tooling. It does not call Curly.ng and it does not upload transcript content.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit transcripts list [--source all|codex|claude] [--limit <n>] [--json|--format json]\ncngkit transcripts read <path-or-session-id> [--source all|codex|claude] [--limit <n>] [--include-internal] [--json|--format json]\ncngkit transcripts grep <query> [--source all|codex|claude] [--limit <n>] [--file-limit <n>] [--include-internal] [--json|--format json]\n\\`\\`\\`\n\n## Sources\n\n- \\`~/.codex/sessions\\`\n- \\`~/.codex/archived_sessions\\`\n- \\`~/.claude/projects\\`\n- \\`~/.claude/history.jsonl\\`\n\n## Defaults\n\n- \\`list\\`: newest 12 transcript files.\n- \\`read\\`: newest 80 user/assistant entries from the selected file.\n- \\`grep\\`: first 80 matching user/assistant entries from the newest 60 files.\n- \\`--source\\`: \\`all\\`.\n\n## Output\n\n- Text mode prints source, role, timestamp when available, and extracted message text.\n- Internal developer/system payloads and hook/tool noise are skipped unless \\`--include-internal\\` is passed.\n- Direct file paths, home-relative paths, and partial session ids are accepted by \\`read\\`.\n`,\n },\n {\n title: \"coderoom\",\n aliases: [\"coderoom\", \"code-room\", \"repo-sync\"],\n body: `# cngkit coderoom\n\nCreate or join a temporary live room for sharing a working tree over the Curly backend.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit coderoom <subcommand> [options]\n\\`\\`\\`\n\n## Subcommands\n\n${coderoomCommandList}\n\n## Common Flow\n\n\\`\\`\\`bash\nnpx --yes cngkit@latest coderoom share\nnpx --yes cngkit@latest coderoom join <room-code>\n\\`\\`\\`\n\n## Behavior\n\n- Connects to \\`/api/cng/sync/:roomCode\\` on the configured Curly backend.\n- Uses WebSocket transport backed by the \\`CngSyncRoom\\` Durable Object.\n- Sends an initial snapshot, then file and delete events.\n- Last received change wins.\n- Current rooms are live relays, not durable cloud storage.\n`,\n },\n {\n title: \"coderoom share\",\n aliases: [\"coderoom-share\"],\n body: `# cngkit coderoom share\n\nStart a live repository sync room from the current directory.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit coderoom share [room-code]\n\\`\\`\\`\n\n## Behavior\n\n- Connects to \\`/api/cng/sync/:roomCode\\` on the configured Curly backend.\n- Uses WebSocket transport backed by the \\`CngSyncRoom\\` Durable Object.\n- Sends an initial snapshot, then file and delete events.\n- Last received change wins.\n\n## Filesystem Contract\n\n- Preserves \\`.git/\\`.\n- Preserves files ignored by the repo's \\`.gitignore\\`.\n- Sends regular files as base64 payloads in the sync protocol.\n\n## Output\n\n- Prints room code, repo root, peer id, backend health, and concise sync events.\n- Keeps running until the socket closes or the process receives a termination signal.\n`,\n },\n {\n title: \"coderoom join\",\n aliases: [\"coderoom-join\"],\n body: `# cngkit coderoom join\n\nJoin an existing live repository sync room from the current directory.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit coderoom join <room-code>\n\\`\\`\\`\n\n## Behavior\n\nSame transport and filesystem contract as \\`cngkit coderoom share\\`. The supplied room code selects the Durable Object room.\n\n## Output\n\n- Prints backend health, room code, repo root, peer id, and concise sync events.\n- Missing room code exits with a usage error.\n`,\n },\n {\n title: \"scrub\",\n aliases: [\"scrub\"],\n body: `# cngkit scrub\n\nScan a file or directory for secrets with TruffleHog. Report-only is the default.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit scrub [path]\ncngkit scrub [path] --yes\n\\`\\`\\`\n\n## Safety\n\n- Default mode does not rewrite files.\n- Inline masking rewrites files and requires \\`--yes\\`.\n- Raw and redacted secret values are never printed.\n\n## Requirements\n\n- \\`trufflehog\\` must be available on \\`PATH\\`.\n\n## Mask Format\n\n\\`\\`\\`text\n[CNGKIT_SECRET:<detector>:<verified|unverified>]\n\\`\\`\\`\n`,\n },\n {\n title: \"knowledges\",\n aliases: [\"knowledges\", \"knowledge\"],\n body: `# cngkit knowledges\n\nSearch and read the hosted Harness knowledges catalog from the Curly backend.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit knowledges <subcommand> [options]\n\\`\\`\\`\n\n## Subcommands\n\n${knowledgesCommandList}\n\n## Progressive Help\n\n\\`\\`\\`bash\ncngkit help knowledges <subcommand>\ncngkit knowledges <subcommand> --help\ncngkit knowledges read --help\ncngkit knowledges grep --help\ncngkit knowledges glob --help\n\\`\\`\\`\n\n## Common Examples\n\n\\`\\`\\`bash\nnpx --yes cngkit@latest knowledges search Cloudflare --limit 3\nnpx --yes cngkit@latest knowledges read /libraries/lib-cloudflare/SUBSKILL.md --limit 80\nnpx --yes cngkit@latest knowledges grep Cloudflare --path /libraries/lib-cloudflare --output-mode files_with_matches\nnpx --yes cngkit@latest knowledges glob \"**/*.md\" --path /libraries/lib-cloudflare\n\\`\\`\\`\n\n## AI-Friendly Output\n\n- Default output is structured text intended to be directly usable by people and agents.\n- \\`read\\` renders Markdown files by default and prints exact source with \\`--format markdown\\`.\n- \\`grep --output-mode content\\` prints \\`path:line\\` blocks.\n- \\`grep --output-mode files_with_matches\\` and \\`glob\\` print one path per line.\n- \\`--format json\\` and \\`--json\\` print typed backend payloads for machine consumption.\n`,\n },\n {\n title: \"knowledges status\",\n aliases: [\"knowledges-status\", \"status\"],\n body: `# cngkit knowledges status\n\nPrint remote Harness catalog state.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit knowledges status [--json|--format json]\n\\`\\`\\`\n\n## Output\n\n- Text mode prints catalog name, file count, blob count, database binding, and latest run when present.\n- \\`--format json\\` and \\`--json\\` print the backend data payload.\n`,\n },\n {\n title: \"knowledges audiences\",\n aliases: [\"knowledges-audiences\", \"audiences\"],\n body: `# cngkit knowledges audiences\n\nList valid audience filters for catalog browsing.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit knowledges audiences [--json|--format json]\n\\`\\`\\`\n\n## Use When\n\nRun this before \\`cngkit knowledges files --audience <id>\\`.\n`,\n },\n {\n title: \"knowledges search\",\n aliases: [\"knowledges-search\", \"search\"],\n body: `# cngkit knowledges search\n\nSearch the hosted Harness index for relevant skills and subskills.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit knowledges search <query> [--limit <n>] [--json|--format json]\n\\`\\`\\`\n\n## Defaults\n\n- \\`--limit\\`: \\`5\\`\n\n## Example\n\n\\`\\`\\`bash\nnpx --yes cngkit@latest knowledges search Cloudflare --limit 3\n\\`\\`\\`\n`,\n },\n {\n title: \"knowledges list\",\n aliases: [\"knowledges-list\", \"list\"],\n body: `# cngkit knowledges list\n\nList hosted Harness subskills, optionally filtered by query.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit knowledges list [query] [--limit <n>] [--json|--format json]\n\\`\\`\\`\n\n## Defaults\n\n- \\`--limit\\`: \\`25\\`\n\n## Example\n\n\\`\\`\\`bash\ncngkit knowledges list cloudflare --limit 10\n\\`\\`\\`\n`,\n },\n {\n title: \"knowledges files\",\n aliases: [\"knowledges-files\", \"files\"],\n body: `# cngkit knowledges files\n\nList uploaded Harness catalog files, optionally filtered by query or audience.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit knowledges files [query] [--audience <id>] [--limit <n>] [--json|--format json]\n\\`\\`\\`\n\n## Defaults\n\n- \\`--limit\\`: \\`25\\`\n- \\`--audience\\`: omitted\n\n## Example\n\n\\`\\`\\`bash\ncngkit knowledges files cloudflare --limit 10\ncngkit knowledges files \"vector search\" --audience builders\n\\`\\`\\`\n`,\n },\n {\n title: \"knowledges read\",\n aliases: [\"knowledges-read\", \"read\"],\n body: `# cngkit knowledges read\n\nRead a hosted Harness catalog file by path.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit knowledges read <file-path> [--offset <n>] [--limit <n>] [--json|--format json|--format markdown]\n\\`\\`\\`\n\n## Inputs\n\n- \\`file-path\\`: normalized catalog path. Shorthand paths such as \\`/libraries/lib-cloudflare/SUBSKILL.md\\` are expanded to \\`skills/knowledges/subskills/libraries/lib-cloudflare/SUBSKILL.md\\`.\n- \\`--offset\\`: zero-based starting line. Default: \\`0\\`.\n- \\`--limit\\`: maximum lines. Default in CLI: \\`200\\`. Backend max: \\`2000\\`.\n\n## Output\n\n- Text mode renders Markdown files for terminal reading.\n- \\`--format markdown\\` prints the exact returned file content.\n- If truncated, a final bracketed truncation note is printed after the content.\n- \\`--format json\\` and \\`--json\\` print \\`{ file_path, content, total_lines, offset, limit, truncated }\\`.\n\n## Example\n\n\\`\\`\\`bash\nnpx --yes cngkit@latest knowledges read /libraries/lib-cloudflare/SUBSKILL.md --limit 80\n\\`\\`\\`\n`,\n },\n {\n title: \"knowledges grep\",\n aliases: [\"knowledges-grep\", \"grep\"],\n body: `# cngkit knowledges grep\n\nSearch inside hosted Harness catalog files with a JavaScript regular expression.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit knowledges grep <pattern> [--path <path>] [--include <glob>] [--output-mode <mode>] [--context <n>] [--case-insensitive] [--json|--format json]\n\\`\\`\\`\n\n## Inputs\n\n- \\`pattern\\`: JavaScript regular expression source.\n- \\`--path\\`: catalog path prefix. Default: \\`skills\\`.\n- \\`--include\\`: filename include filter. Default: \\`*\\`.\n- Modes: content, files_with_matches, or count.\n- \\`--output-mode\\`: \\`content\\`, \\`files_with_matches\\`, or \\`count\\`. Default: \\`content\\`.\n- \\`--context\\`: context lines around content matches. Default: \\`0\\`. Backend max: \\`20\\`.\n- \\`--case-insensitive\\`: maps to backend \\`case_insensitive=true\\`.\n\n## Output\n\n- \\`content\\`: prints blocks as \\`file_path:line_number\\`, optional context lines, then \\`> matching line\\`.\n- \\`files_with_matches\\`: prints one matching file path per line.\n- \\`count\\`: prints \\`file_path: match_count\\` lines.\n- \\`--format json\\` and \\`--json\\` print the typed backend response union.\n\n## Examples\n\n\\`\\`\\`bash\nnpx --yes cngkit@latest knowledges grep Cloudflare --path /libraries/lib-cloudflare --output-mode files_with_matches\nnpx --yes cngkit@latest knowledges grep \"Postgres|Hyperdrive\" --path /libraries/lib-cloudflare --context 2\n\\`\\`\\`\n`,\n },\n {\n title: \"knowledges glob\",\n aliases: [\"knowledges-glob\", \"glob\"],\n body: `# cngkit knowledges glob\n\nFind hosted Harness catalog files by glob pattern.\n\n## Usage\n\n\\`\\`\\`bash\ncngkit knowledges glob [pattern] [--path <path>] [--json|--format json]\n\\`\\`\\`\n\n## Inputs\n\n- \\`pattern\\`: supported glob pattern. CLI default: \\`**/*.md\\`.\n- \\`--path\\`: catalog path prefix. Default: \\`skills\\`.\n\n## Supported Patterns\n\n- \\`**/*.md\\`\n- \\`**/*.SUBSKILL.md\\`\n- \\`**/SKILL.md\\`\n- \\`*.md\\`\n- \\`*.SUBSKILL.md\\`\n- \\`SKILL.md\\`\n\n## Output\n\n- Text mode prints one file path per line.\n- If truncated, a final bracketed truncation note is printed.\n- \\`--format json\\` and \\`--json\\` print \\`{ files, total_files, truncated }\\`.\n\n## Example\n\n\\`\\`\\`bash\nnpx --yes cngkit@latest knowledges glob \"**/*.md\" --path /libraries/lib-cloudflare\n\\`\\`\\`\n`,\n },\n];\n\nconst helpTopicNames = helpTopics\n .filter((topic) => topic.title !== \"cngkit\")\n .map((topic) => topic.title)\n .sort();\n\nconst helpTopicByAlias = new Map<string, HelpTopic>();\n\nfor (const topic of helpTopics) {\n for (const alias of topic.aliases) {\n helpTopicByAlias.set(alias, topic);\n }\n}\n\nexport function formatCngkitHelp(topicName?: string): string {\n const normalizedTopicName = normalizeHelpTopicName(topicName);\n const topic = helpTopicByAlias.get(normalizedTopicName);\n\n if (topic) {\n return topic.body.trim();\n }\n\n if (normalizedTopicName === \"\") {\n return helpTopicByAlias.get(\"\")?.body.trim() ?? \"\";\n }\n\n return formatUnknownHelpTopic(normalizedTopicName);\n}\n\nexport function formatKnowledgesHelp(topicName?: string): string {\n const normalizedTopicName = normalizeHelpTopicName(topicName);\n const topicKey = normalizedTopicName ? `knowledges-${normalizedTopicName}` : \"knowledges\";\n return formatCngkitHelp(topicKey);\n}\n\nfunction normalizeHelpTopicName(value: string | undefined): string {\n return value?.trim().toLowerCase().replace(/\\s+/g, \"-\") ?? \"\";\n}\n\nfunction formatUnknownHelpTopic(topicName: string): string {\n return `# cngkit help\n\nNo help topic named \\`${topicName}\\`.\n\n## Available Topics\n\n${helpTopicNames.map((name) => `- \\`${name}\\``).join(\"\\n\")}\n\n## Usage\n\n\\`\\`\\`bash\ncngkit help <topic>\ncngkit <command> --help\n\\`\\`\\``;\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveApiBaseUrl
3
- } from "./chunk-UZMVTVL2.js";
3
+ } from "./chunk-7KQBSEQV.js";
4
4
  import {
5
5
  __export
6
6
  } from "./chunk-PZ5AY32C.js";
@@ -279,25 +279,25 @@ var HarnessCatalogSummary;
279
279
  };
280
280
  })(HarnessCatalogSummary || (HarnessCatalogSummary = {}));
281
281
 
282
+ // ../../packages/client/src/generated/api/types/HarnessDatabaseBinding.ts
283
+ var HarnessDatabaseBinding;
284
+ ((HarnessDatabaseBinding2) => {
285
+ HarnessDatabaseBinding2.Engine = {
286
+ Postgres: "postgres"
287
+ };
288
+ HarnessDatabaseBinding2.Binding = {
289
+ Hyperdrive: "HYPERDRIVE"
290
+ };
291
+ })(HarnessDatabaseBinding || (HarnessDatabaseBinding = {}));
292
+
282
293
  // ../../packages/client/src/generated/api/types/HarnessSemanticSearchResponse.ts
283
294
  var HarnessSemanticSearchResponse;
284
295
  ((HarnessSemanticSearchResponse2) => {
285
296
  HarnessSemanticSearchResponse2.Model = {
286
- CfBaaiBgeBaseEnV15: "@cf/baai/bge-base-en-v1.5"
297
+ PostgresTextSearch: "postgres-text-search"
287
298
  };
288
299
  })(HarnessSemanticSearchResponse || (HarnessSemanticSearchResponse = {}));
289
300
 
290
- // ../../packages/client/src/generated/api/types/HarnessVectorizeBinding.ts
291
- var HarnessVectorizeBinding;
292
- ((HarnessVectorizeBinding2) => {
293
- HarnessVectorizeBinding2.Index = {
294
- CurlyNgAgents: "curly-ng-agents"
295
- };
296
- HarnessVectorizeBinding2.Binding = {
297
- Vectorize: "VECTORIZE"
298
- };
299
- })(HarnessVectorizeBinding || (HarnessVectorizeBinding = {}));
300
-
301
301
  // ../../packages/client/src/generated/core/headers.ts
302
302
  function mergeHeaders(...headersArray) {
303
303
  const result = {};
@@ -2389,7 +2389,7 @@ var HarnessInternalKnowledgesClient = class {
2389
2389
  );
2390
2390
  }
2391
2391
  /**
2392
- * @param {CngApi.HarnessUploadSubskillAssetsVectorizeRequest} request
2392
+ * @param {CngApi.HarnessUploadSubskillAssetsIndexRequest} request
2393
2393
  * @param {HarnessInternalKnowledgesClient.RequestOptions} requestOptions - Request-specific configuration.
2394
2394
  *
2395
2395
  * @throws {@link CngApi.UnauthorizedError}
@@ -3231,4 +3231,4 @@ export {
3231
3231
  createCngApiClient,
3232
3232
  readBackendHealth
3233
3233
  };
3234
- //# sourceMappingURL=chunk-ERSRJLYP.js.map
3234
+ //# sourceMappingURL=chunk-MJVMVXV5.js.map