cngkit 1.1.17 → 1.1.19

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 (76) hide show
  1. package/README.md +100 -7
  2. package/dist/chunk-3A6GRNEV.js +1590 -0
  3. package/dist/chunk-3A6GRNEV.js.map +1 -0
  4. package/dist/{chunk-HRFI2IEP.js → chunk-7SO75QXJ.js} +886 -68
  5. package/dist/chunk-7SO75QXJ.js.map +1 -0
  6. package/dist/chunk-DBA3BZXP.js +231 -0
  7. package/dist/chunk-DBA3BZXP.js.map +1 -0
  8. package/dist/{chunk-5ZNV3FDG.js → chunk-GBONV6XP.js} +16 -4
  9. package/dist/chunk-GBONV6XP.js.map +1 -0
  10. package/dist/chunk-L6ZVQRSY.js +569 -0
  11. package/dist/chunk-L6ZVQRSY.js.map +1 -0
  12. package/dist/{chunk-VCWNKNUE.js → chunk-NGEWD4BW.js} +10 -1
  13. package/dist/chunk-NGEWD4BW.js.map +1 -0
  14. package/dist/chunk-TYDIBWZV.js +35 -0
  15. package/dist/chunk-TYDIBWZV.js.map +1 -0
  16. package/dist/{chunk-GT2MTS6E.js → chunk-X4E7NAN4.js} +2 -2
  17. package/dist/cli.js +82 -16
  18. package/dist/cli.js.map +1 -1
  19. package/dist/commands/coderoom/index.js +6 -6
  20. package/dist/commands/coderoom/index.js.map +1 -1
  21. package/dist/commands/coderoom/join.js +5 -5
  22. package/dist/commands/coderoom/share.js +5 -5
  23. package/dist/commands/hookify/index.js +25 -0
  24. package/dist/commands/hookify/index.js.map +1 -0
  25. package/dist/commands/hookify/ingest.js +127 -0
  26. package/dist/commands/hookify/ingest.js.map +1 -0
  27. package/dist/commands/hooks/index.js +25 -0
  28. package/dist/commands/hooks/index.js.map +1 -0
  29. package/dist/commands/hooks/install.js +40 -0
  30. package/dist/commands/hooks/install.js.map +1 -0
  31. package/dist/commands/hooks/uninstall.js +40 -0
  32. package/dist/commands/hooks/uninstall.js.map +1 -0
  33. package/dist/commands/index.js +5 -5
  34. package/dist/commands/index.js.map +1 -1
  35. package/dist/commands/knowledges/audiences.js +6 -6
  36. package/dist/commands/knowledges/cat.js +31 -0
  37. package/dist/commands/knowledges/cat.js.map +1 -0
  38. package/dist/commands/knowledges/files.js +6 -6
  39. package/dist/commands/knowledges/find.js +66 -0
  40. package/dist/commands/knowledges/find.js.map +1 -0
  41. package/dist/commands/knowledges/glob.js +6 -6
  42. package/dist/commands/knowledges/grep.js +6 -6
  43. package/dist/commands/knowledges/head.js +41 -0
  44. package/dist/commands/knowledges/head.js.map +1 -0
  45. package/dist/commands/knowledges/index.js +6 -6
  46. package/dist/commands/knowledges/index.js.map +1 -1
  47. package/dist/commands/knowledges/list.js +7 -7
  48. package/dist/commands/knowledges/list.js.map +1 -1
  49. package/dist/commands/knowledges/ls.js +40 -0
  50. package/dist/commands/knowledges/ls.js.map +1 -0
  51. package/dist/commands/knowledges/read.js +6 -6
  52. package/dist/commands/knowledges/realpath.js +31 -0
  53. package/dist/commands/knowledges/realpath.js.map +1 -0
  54. package/dist/commands/knowledges/search.js +6 -6
  55. package/dist/commands/knowledges/stat.js +31 -0
  56. package/dist/commands/knowledges/stat.js.map +1 -0
  57. package/dist/commands/knowledges/status.js +6 -6
  58. package/dist/commands/knowledges/tail.js +41 -0
  59. package/dist/commands/knowledges/tail.js.map +1 -0
  60. package/dist/commands/knowledges/tree.js +46 -0
  61. package/dist/commands/knowledges/tree.js.map +1 -0
  62. package/dist/commands/login.js +3 -3
  63. package/dist/commands/scrub.js +3 -3
  64. package/dist/commands/transcripts.js +6 -6
  65. package/dist/commands/transcripts.js.map +1 -1
  66. package/package.json +2 -2
  67. package/dist/chunk-5ZNV3FDG.js.map +0 -1
  68. package/dist/chunk-BL3XMLIH.js +0 -573
  69. package/dist/chunk-BL3XMLIH.js.map +0 -1
  70. package/dist/chunk-HRFI2IEP.js.map +0 -1
  71. package/dist/chunk-K36DKQWH.js +0 -327
  72. package/dist/chunk-K36DKQWH.js.map +0 -1
  73. package/dist/chunk-VCWNKNUE.js.map +0 -1
  74. package/dist/chunk-WYJTGGMN.js +0 -222
  75. package/dist/chunk-WYJTGGMN.js.map +0 -1
  76. /package/dist/{chunk-GT2MTS6E.js.map → chunk-X4E7NAN4.js.map} +0 -0
@@ -1,327 +0,0 @@
1
- import {
2
- coerceLimit,
3
- coerceOptionalNumber,
4
- formatJson,
5
- shouldPrintJson,
6
- singleLine
7
- } from "./chunk-XQGLUQFM.js";
8
- import {
9
- createCngApiClient
10
- } from "./chunk-HRFI2IEP.js";
11
- import {
12
- resolveOutputFormat
13
- } from "./chunk-WYJTGGMN.js";
14
-
15
- // src/features/knowledges/knowledges-api.ts
16
- function createKnowledgesApi(options) {
17
- const client = createCngApiClient(options);
18
- return {
19
- getCatalog: () => client.harnessKnowledges.getHarnessKnowledgesCatalog(),
20
- listAudiences: () => client.harnessKnowledges.listHarnessKnowledgesAudiences(),
21
- search: (query, limit) => client.harnessKnowledges.searchHarnessKnowledges({
22
- q: query,
23
- limit
24
- }),
25
- listSubskills: () => client.harnessKnowledges.listHarnessKnowledgesSubskills(),
26
- listFiles: ({ query, audience, limit }) => client.harnessKnowledges.listHarnessSubskillAssets({
27
- ...query ? { q: query } : {},
28
- ...audience ? { audience } : {},
29
- limit
30
- }),
31
- read: ({ filePath, offset, limit }) => client.harnessFilesystem.getHarnessFilesystemRead({
32
- file_path: filePath,
33
- offset,
34
- limit
35
- }),
36
- grep: ({ pattern, path, include, mode, context, ignoreCase }) => client.harnessFilesystem.getHarnessFilesystemGrep({
37
- pattern,
38
- path,
39
- include,
40
- output_mode: mode,
41
- context,
42
- case_insensitive: ignoreCase ? "true" : void 0
43
- }),
44
- glob: ({ pattern, path }) => client.harnessFilesystem.getHarnessFilesystemGlob({
45
- pattern,
46
- path
47
- })
48
- };
49
- }
50
-
51
- // src/features/knowledges/knowledges-input.ts
52
- function normalizeAudienceId(value) {
53
- if (value === void 0) {
54
- return void 0;
55
- }
56
- switch (value) {
57
- case "all":
58
- case "operators":
59
- case "builders":
60
- case "researchers":
61
- case "agent-makers":
62
- return value;
63
- default:
64
- throw new Error(
65
- `Unknown audience "${value}". Run cngkit knowledges audiences to see supported values.`
66
- );
67
- }
68
- }
69
- function normalizeCatalogPath(value) {
70
- const trimmed = value.trim();
71
- if (trimmed === "/" || trimmed === "") {
72
- return "skills";
73
- }
74
- const relativePath = trimmed.replace(/^\/+/, "");
75
- if (relativePath.startsWith("skills/knowledges/")) {
76
- return relativePath;
77
- }
78
- const [firstSegment, ...restSegments] = relativePath.split("/");
79
- if (!firstSegment) {
80
- return relativePath;
81
- }
82
- switch (firstSegment) {
83
- case "concepts":
84
- case "domains":
85
- case "formats":
86
- case "languages":
87
- case "libraries":
88
- case "patterns":
89
- case "platforms":
90
- case "procedures":
91
- case "protocols":
92
- case "tools":
93
- return `skills/knowledges/subskills/${firstSegment}${restSegments.length > 0 ? `/${restSegments.join("/")}` : ""}`;
94
- default:
95
- return relativePath;
96
- }
97
- }
98
- function normalizeGrepMode(value) {
99
- if (value === void 0) {
100
- return "content";
101
- }
102
- switch (value) {
103
- case "content":
104
- case "files_with_matches":
105
- case "count":
106
- return value;
107
- default:
108
- throw new Error("Unknown grep mode. Use one of: content, files_with_matches, count.");
109
- }
110
- }
111
-
112
- // src/features/knowledges/run-knowledges-command.ts
113
- async function runKnowStatusCommand(options, output, dependencies) {
114
- const api = dependencies?.api ?? createKnowledgesApi(options);
115
- const response = await api.getCatalog();
116
- if (shouldPrintJson(options)) {
117
- output.raw(formatJson(response.data));
118
- return;
119
- }
120
- const latestRun = response.data.latestRun;
121
- const lines = [
122
- `Catalog: ${response.data.name}`,
123
- `Files: ${response.data.files}`,
124
- `Blobs: ${response.data.blobs}`,
125
- `Database: ${response.data.database.engine} (${response.data.database.binding})`
126
- ];
127
- if (latestRun) {
128
- lines.push(`Latest run: ${latestRun.status} (${latestRun.id})`);
129
- if (latestRun.updated_at) {
130
- lines.push(`Updated: ${latestRun.updated_at}`);
131
- }
132
- } else {
133
- lines.push("Latest run: none");
134
- }
135
- output.info(lines.join("\n"));
136
- }
137
- async function runKnowAudiencesCommand(options, output, dependencies) {
138
- const api = dependencies?.api ?? createKnowledgesApi(options);
139
- const response = await api.listAudiences();
140
- if (shouldPrintJson(options)) {
141
- output.raw(formatJson(response.data));
142
- return;
143
- }
144
- const lines = response.data.audiences.flatMap((audience) => [
145
- `${audience.id} - ${audience.label}`,
146
- ` ${singleLine(audience.help)}`
147
- ]);
148
- output.info(lines.length > 0 ? lines.join("\n") : "No audiences available.");
149
- }
150
- async function runKnowSearchCommand(query, options, output, dependencies) {
151
- if (!query) {
152
- throw new Error("Missing search query. Usage: cngkit knowledges search <query>");
153
- }
154
- const api = dependencies?.api ?? createKnowledgesApi(options);
155
- const response = await api.search(query, coerceLimit(options.limit, 5));
156
- if (shouldPrintJson(options)) {
157
- output.raw(formatJson(response.data));
158
- return;
159
- }
160
- const lines = response.data.results.flatMap((result, index) => [
161
- `${index + 1}. ${result.title} (${result.subskillName})`,
162
- ` score ${result.score.toFixed(3)} | ${result.path}`,
163
- ` ${singleLine(result.description || result.contentPreview)}`
164
- ]);
165
- if (lines.length > 0) {
166
- output.info(lines.join("\n"));
167
- return;
168
- }
169
- output.warning(`No results for "${query}".`);
170
- }
171
- async function runKnowListCommand(query, options, output, dependencies) {
172
- const api = dependencies?.api ?? createKnowledgesApi(options);
173
- const response = await api.listSubskills();
174
- const limit = coerceLimit(options.limit, 25);
175
- const normalizedQuery = query?.toLowerCase();
176
- const subskills = response.data.subskills.filter((subskill) => {
177
- if (!normalizedQuery) {
178
- return true;
179
- }
180
- return [subskill.name, subskill.title, subskill.description, subskill.type].join(" ").toLowerCase().includes(normalizedQuery);
181
- }).slice(0, limit);
182
- if (shouldPrintJson(options)) {
183
- output.raw(formatJson({ subskills, total: subskills.length }));
184
- return;
185
- }
186
- const lines = subskills.flatMap((subskill) => [
187
- `${subskill.name} [${subskill.type}]`,
188
- ` ${subskill.title} | files ${subskill.fileCount} | rating ${subskill.rating}`,
189
- ` ${singleLine(subskill.description)}`
190
- ]);
191
- if (lines.length > 0) {
192
- output.info(lines.join("\n"));
193
- return;
194
- }
195
- output.warning("No matching subskills.");
196
- }
197
- async function runKnowFilesCommand(query, options, output, dependencies) {
198
- const api = dependencies?.api ?? createKnowledgesApi(options);
199
- const response = await api.listFiles({
200
- query,
201
- audience: normalizeAudienceId(options.audience),
202
- limit: coerceLimit(options.limit, 25)
203
- });
204
- if (shouldPrintJson(options)) {
205
- output.raw(formatJson(response.data));
206
- return;
207
- }
208
- const lines = response.data.files.map((file) => {
209
- const title = file.display_title ?? file.title ?? file.subskill_name ?? "Untitled";
210
- return `${file.path}
211
- ${title}`;
212
- });
213
- if (lines.length > 0) {
214
- output.info(lines.join("\n"));
215
- return;
216
- }
217
- output.warning("No matching files.");
218
- }
219
- async function runKnowReadCommand(filePath, options, output, dependencies) {
220
- if (!filePath) {
221
- throw new Error("Missing file_path. Usage: cngkit knowledges read <file_path>");
222
- }
223
- const api = dependencies?.api ?? createKnowledgesApi(options);
224
- const response = await api.read({
225
- filePath: normalizeCatalogPath(filePath),
226
- offset: coerceOptionalNumber(options.offset),
227
- limit: coerceLimit(options.limit, 200, 2e3)
228
- });
229
- if (shouldPrintJson(options)) {
230
- output.raw(formatJson(response.data));
231
- return;
232
- }
233
- if (resolveOutputFormat() === "markdown" || !response.data.file_path.endsWith(".md")) {
234
- output.raw(response.data.content);
235
- } else {
236
- output.markdown(response.data.content);
237
- }
238
- if (response.data.truncated) {
239
- output.warning(
240
- `[truncated: showing ${response.data.limit} lines from offset ${response.data.offset} of ${response.data.total_lines}]`
241
- );
242
- }
243
- }
244
- async function runKnowGrepCommand(pattern, options, output, dependencies) {
245
- if (!pattern) {
246
- throw new Error("Missing pattern. Usage: cngkit knowledges grep <pattern>");
247
- }
248
- const api = dependencies?.api ?? createKnowledgesApi(options);
249
- const limit = options.limit !== void 0 ? coerceOptionalNumber(options.limit) : void 0;
250
- const response = await api.grep({
251
- pattern,
252
- path: normalizeCatalogPath(options.path ?? "/"),
253
- include: options.include ?? "*",
254
- mode: normalizeGrepMode(options.outputMode),
255
- context: coerceLimit(options.context, 0, 20),
256
- ignoreCase: options.caseInsensitive === true
257
- });
258
- if (shouldPrintJson(options)) {
259
- output.raw(formatJson(response.data));
260
- return;
261
- }
262
- if (response.data.mode === "files_with_matches") {
263
- const files = limit ? response.data.files.slice(0, limit) : response.data.files;
264
- if (files.length > 0) {
265
- output.raw(files.join("\n"));
266
- return;
267
- }
268
- output.warning(`No files matched "${pattern}".`);
269
- return;
270
- }
271
- if (response.data.mode === "count") {
272
- const counts = limit ? response.data.counts.slice(0, limit) : response.data.counts;
273
- const lines2 = counts.map((count) => `${count.file_path}: ${count.match_count}`);
274
- if (lines2.length > 0) {
275
- output.raw(lines2.join("\n"));
276
- return;
277
- }
278
- output.warning(`No matches for "${pattern}".`);
279
- return;
280
- }
281
- const matches = limit ? response.data.matches.slice(0, limit) : response.data.matches;
282
- const lines = matches.flatMap((match) => [
283
- `${match.file_path}:${match.line_number}`,
284
- ...match.context_before.map((line) => ` ${line}`),
285
- `> ${match.line}`,
286
- ...match.context_after.map((line) => ` ${line}`)
287
- ]);
288
- if (lines.length > 0) {
289
- output.raw(lines.join("\n"));
290
- return;
291
- }
292
- output.warning(`No matches for "${pattern}".`);
293
- }
294
- async function runKnowGlobCommand(pattern, options, output, dependencies) {
295
- const api = dependencies?.api ?? createKnowledgesApi(options);
296
- const limit = options.limit !== void 0 ? coerceOptionalNumber(options.limit) : void 0;
297
- const response = await api.glob({
298
- pattern: pattern ?? "**/*.md",
299
- path: normalizeCatalogPath(options.path ?? "/")
300
- });
301
- if (shouldPrintJson(options)) {
302
- output.raw(formatJson(response.data));
303
- return;
304
- }
305
- const files = limit ? response.data.files.slice(0, limit) : response.data.files;
306
- const wasClientTruncated = limit ? response.data.files.length > limit : false;
307
- if (files.length > 0) {
308
- output.raw(files.join("\n"));
309
- } else {
310
- output.warning("No matching files.");
311
- }
312
- if (response.data.truncated || wasClientTruncated) {
313
- output.warning(`[truncated: ${response.data.total_files} total files]`);
314
- }
315
- }
316
-
317
- export {
318
- runKnowStatusCommand,
319
- runKnowAudiencesCommand,
320
- runKnowSearchCommand,
321
- runKnowListCommand,
322
- runKnowFilesCommand,
323
- runKnowReadCommand,
324
- runKnowGrepCommand,
325
- runKnowGlobCommand
326
- };
327
- //# sourceMappingURL=chunk-K36DKQWH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/features/knowledges/knowledges-api.ts","../src/features/knowledges/knowledges-input.ts","../src/features/knowledges/run-knowledges-command.ts"],"sourcesContent":["import type { CngApi } from \"@cng/client\";\n\nimport { createCngApiClient } from \"../../shared/api-client.js\";\nimport type { GlobalCommandOptions } from \"../../shared/config.js\";\n\nexport type KnowCommandDependencies = {\n api?: KnowledgesApi;\n};\n\nexport type KnowledgesApi = {\n getCatalog(): Promise<CngApi.HarnessCatalogSummaryApiResponse>;\n listAudiences(): Promise<CngApi.HarnessAudiencesApiResponse>;\n search(query: string, limit: number): Promise<CngApi.HarnessSemanticSearchApiResponse>;\n listSubskills(): Promise<CngApi.HarnessSubskillsApiResponse>;\n listFiles(options: {\n query?: string;\n audience?: CngApi.HarnessAudienceId;\n limit: number;\n }): Promise<CngApi.HarnessSubskillAssetsApiResponse>;\n read(options: {\n filePath: string;\n offset?: number;\n limit: number;\n }): Promise<CngApi.HarnessReadApiResponse>;\n grep(options: {\n pattern: string;\n path: string;\n include: string;\n mode: CngApi.HarnessGrepOutputMode;\n context: number;\n ignoreCase: boolean;\n }): Promise<CngApi.HarnessGrepApiResponse>;\n glob(options: { pattern: string; path: string }): Promise<CngApi.HarnessGlobApiResponse>;\n};\n\nexport function createKnowledgesApi(options: GlobalCommandOptions): KnowledgesApi {\n const client = createCngApiClient(options);\n\n return {\n getCatalog: () => client.harnessKnowledges.getHarnessKnowledgesCatalog(),\n listAudiences: () => client.harnessKnowledges.listHarnessKnowledgesAudiences(),\n search: (query, limit) =>\n client.harnessKnowledges.searchHarnessKnowledges({\n q: query,\n limit,\n }),\n listSubskills: () => client.harnessKnowledges.listHarnessKnowledgesSubskills(),\n listFiles: ({ query, audience, limit }) =>\n client.harnessKnowledges.listHarnessSubskillAssets({\n ...(query ? { q: query } : {}),\n ...(audience ? { audience } : {}),\n limit,\n }),\n read: ({ filePath, offset, limit }) =>\n client.harnessFilesystem.getHarnessFilesystemRead({\n file_path: filePath,\n offset,\n limit,\n }),\n grep: ({ pattern, path, include, mode, context, ignoreCase }) =>\n client.harnessFilesystem.getHarnessFilesystemGrep({\n pattern,\n path,\n include,\n output_mode: mode,\n context,\n case_insensitive: ignoreCase ? \"true\" : undefined,\n }),\n glob: ({ pattern, path }) =>\n client.harnessFilesystem.getHarnessFilesystemGlob({\n pattern,\n path,\n }),\n };\n}\n","import type { CngApi } from \"@cng/client\";\n\nexport function normalizeAudienceId(value: string | undefined): CngApi.HarnessAudienceId | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n switch (value) {\n case \"all\":\n case \"operators\":\n case \"builders\":\n case \"researchers\":\n case \"agent-makers\":\n return value;\n default:\n throw new Error(\n `Unknown audience \"${value}\". Run cngkit knowledges audiences to see supported values.`\n );\n }\n}\n\nexport function normalizeCatalogPath(value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"/\" || trimmed === \"\") {\n return \"skills\";\n }\n\n const relativePath = trimmed.replace(/^\\/+/, \"\");\n if (relativePath.startsWith(\"skills/knowledges/\")) {\n return relativePath;\n }\n\n const [firstSegment, ...restSegments] = relativePath.split(\"/\");\n if (!firstSegment) {\n return relativePath;\n }\n\n switch (firstSegment) {\n case \"concepts\":\n case \"domains\":\n case \"formats\":\n case \"languages\":\n case \"libraries\":\n case \"patterns\":\n case \"platforms\":\n case \"procedures\":\n case \"protocols\":\n case \"tools\":\n return `skills/knowledges/subskills/${firstSegment}${restSegments.length > 0 ? `/${restSegments.join(\"/\")}` : \"\"}`;\n default:\n return relativePath;\n }\n}\n\nexport function normalizeGrepMode(value: string | undefined): CngApi.HarnessGrepOutputMode {\n if (value === undefined) {\n return \"content\";\n }\n\n switch (value) {\n case \"content\":\n case \"files_with_matches\":\n case \"count\":\n return value;\n default:\n throw new Error(\"Unknown grep mode. Use one of: content, files_with_matches, count.\");\n }\n}\n","import { formatKnowledgesHelp } from \"../../cli/help-specs.js\";\nimport {\n coerceLimit,\n coerceOptionalNumber,\n formatJson,\n optionalJoinedArgument,\n shouldPrintJson,\n singleLine,\n type JsonOutputOptions,\n type NumberOption,\n} from \"../../shared/command-utils.js\";\nimport { resolveOutputFormat } from \"../../shared/config.js\";\nimport type { GlobalCommandOptions } from \"../../shared/config.js\";\nimport type { CommandOutput } from \"../../shared/output.js\";\nimport { createKnowledgesApi, type KnowCommandDependencies } from \"./knowledges-api.js\";\nimport { normalizeAudienceId, normalizeCatalogPath, normalizeGrepMode } from \"./knowledges-input.js\";\n\nexport type KnowStatusCommandOptions = GlobalCommandOptions & JsonOutputOptions;\n\nexport type KnowAudiencesCommandOptions = GlobalCommandOptions & JsonOutputOptions;\n\nexport type KnowSearchCommandOptions = GlobalCommandOptions &\n JsonOutputOptions & {\n limit?: NumberOption;\n };\n\nexport type KnowListCommandOptions = GlobalCommandOptions &\n JsonOutputOptions & {\n limit?: NumberOption;\n };\n\nexport type KnowFilesCommandOptions = GlobalCommandOptions &\n JsonOutputOptions & {\n audience?: string;\n limit?: NumberOption;\n };\n\nexport type KnowReadCommandOptions = GlobalCommandOptions &\n JsonOutputOptions & {\n offset?: NumberOption;\n limit?: NumberOption;\n };\n\nexport type KnowGrepCommandOptions = GlobalCommandOptions &\n JsonOutputOptions & {\n path?: string;\n include?: string;\n outputMode?: string;\n context?: NumberOption;\n caseInsensitive?: boolean;\n limit?: NumberOption;\n };\n\nexport type KnowGlobCommandOptions = GlobalCommandOptions &\n JsonOutputOptions & {\n path?: string;\n limit?: NumberOption;\n };\n\nexport type KnowledgesCliOptions = KnowFilesCommandOptions &\n KnowGlobCommandOptions &\n KnowGrepCommandOptions &\n KnowReadCommandOptions &\n KnowSearchCommandOptions;\n\nexport async function runKnowledgesCommand(\n args: string[] | undefined,\n options: KnowledgesCliOptions,\n output: CommandOutput,\n dependencies?: KnowCommandDependencies\n): Promise<void> {\n const [subcommand, ...subcommandArgs] = args ?? [];\n\n if (subcommand === undefined || subcommand === \"help\") {\n output.markdown(formatKnowledgesHelp(subcommandArgs[0]));\n return;\n }\n\n switch (subcommand) {\n case \"status\":\n return runKnowStatusCommand(options, output, dependencies);\n case \"audiences\":\n return runKnowAudiencesCommand(options, output, dependencies);\n case \"search\":\n return runKnowSearchCommand(optionalJoinedArgument(subcommandArgs), options, output, dependencies);\n case \"list\":\n return runKnowListCommand(optionalJoinedArgument(subcommandArgs), options, output, dependencies);\n case \"files\":\n return runKnowFilesCommand(optionalJoinedArgument(subcommandArgs), options, output, dependencies);\n case \"read\":\n return runKnowReadCommand(subcommandArgs[0], options, output, dependencies);\n case \"grep\":\n return runKnowGrepCommand(optionalJoinedArgument(subcommandArgs), options, output, dependencies);\n case \"glob\":\n return runKnowGlobCommand(optionalJoinedArgument(subcommandArgs), options, output, dependencies);\n default:\n throw new Error(\n \"Missing knowledges command. Usage: cngkit knowledges <status|audiences|search|list|files|read|grep|glob>\"\n );\n }\n}\n\nexport async function runKnowStatusCommand(\n options: KnowStatusCommandOptions,\n output: CommandOutput,\n dependencies?: KnowCommandDependencies\n): Promise<void> {\n const api = dependencies?.api ?? createKnowledgesApi(options);\n const response = await api.getCatalog();\n\n if (shouldPrintJson(options)) {\n output.raw(formatJson(response.data));\n return;\n }\n\n const latestRun = response.data.latestRun;\n const lines = [\n `Catalog: ${response.data.name}`,\n `Files: ${response.data.files}`,\n `Blobs: ${response.data.blobs}`,\n `Database: ${response.data.database.engine} (${response.data.database.binding})`,\n ];\n\n if (latestRun) {\n lines.push(`Latest run: ${latestRun.status} (${latestRun.id})`);\n if (latestRun.updated_at) {\n lines.push(`Updated: ${latestRun.updated_at}`);\n }\n } else {\n lines.push(\"Latest run: none\");\n }\n\n output.info(lines.join(\"\\n\"));\n}\n\nexport async function runKnowAudiencesCommand(\n options: KnowAudiencesCommandOptions,\n output: CommandOutput,\n dependencies?: KnowCommandDependencies\n): Promise<void> {\n const api = dependencies?.api ?? createKnowledgesApi(options);\n const response = await api.listAudiences();\n\n if (shouldPrintJson(options)) {\n output.raw(formatJson(response.data));\n return;\n }\n\n const lines = response.data.audiences.flatMap((audience) => [\n `${audience.id} - ${audience.label}`,\n ` ${singleLine(audience.help)}`,\n ]);\n\n output.info(lines.length > 0 ? lines.join(\"\\n\") : \"No audiences available.\");\n}\n\nexport async function runKnowSearchCommand(\n query: string | undefined,\n options: KnowSearchCommandOptions,\n output: CommandOutput,\n dependencies?: KnowCommandDependencies\n): Promise<void> {\n if (!query) {\n throw new Error(\"Missing search query. Usage: cngkit knowledges search <query>\");\n }\n\n const api = dependencies?.api ?? createKnowledgesApi(options);\n const response = await api.search(query, coerceLimit(options.limit, 5));\n\n if (shouldPrintJson(options)) {\n output.raw(formatJson(response.data));\n return;\n }\n\n const lines = response.data.results.flatMap((result, index) => [\n `${index + 1}. ${result.title} (${result.subskillName})`,\n ` score ${result.score.toFixed(3)} | ${result.path}`,\n ` ${singleLine(result.description || result.contentPreview)}`,\n ]);\n\n if (lines.length > 0) {\n output.info(lines.join(\"\\n\"));\n return;\n }\n\n output.warning(`No results for \"${query}\".`);\n}\n\nexport async function runKnowListCommand(\n query: string | undefined,\n options: KnowListCommandOptions,\n output: CommandOutput,\n dependencies?: KnowCommandDependencies\n): Promise<void> {\n const api = dependencies?.api ?? createKnowledgesApi(options);\n const response = await api.listSubskills();\n const limit = coerceLimit(options.limit, 25);\n const normalizedQuery = query?.toLowerCase();\n const subskills = response.data.subskills\n .filter((subskill) => {\n if (!normalizedQuery) {\n return true;\n }\n return [subskill.name, subskill.title, subskill.description, subskill.type]\n .join(\" \")\n .toLowerCase()\n .includes(normalizedQuery);\n })\n .slice(0, limit);\n\n if (shouldPrintJson(options)) {\n output.raw(formatJson({ subskills, total: subskills.length }));\n return;\n }\n\n const lines = subskills.flatMap((subskill) => [\n `${subskill.name} [${subskill.type}]`,\n ` ${subskill.title} | files ${subskill.fileCount} | rating ${subskill.rating}`,\n ` ${singleLine(subskill.description)}`,\n ]);\n\n if (lines.length > 0) {\n output.info(lines.join(\"\\n\"));\n return;\n }\n\n output.warning(\"No matching subskills.\");\n}\n\nexport async function runKnowFilesCommand(\n query: string | undefined,\n options: KnowFilesCommandOptions,\n output: CommandOutput,\n dependencies?: KnowCommandDependencies\n): Promise<void> {\n const api = dependencies?.api ?? createKnowledgesApi(options);\n const response = await api.listFiles({\n query,\n audience: normalizeAudienceId(options.audience),\n limit: coerceLimit(options.limit, 25),\n });\n\n if (shouldPrintJson(options)) {\n output.raw(formatJson(response.data));\n return;\n }\n\n const lines = response.data.files.map((file) => {\n const title = file.display_title ?? file.title ?? file.subskill_name ?? \"Untitled\";\n return `${file.path}\\n ${title}`;\n });\n\n if (lines.length > 0) {\n output.info(lines.join(\"\\n\"));\n return;\n }\n\n output.warning(\"No matching files.\");\n}\n\nexport async function runKnowReadCommand(\n filePath: string | undefined,\n options: KnowReadCommandOptions,\n output: CommandOutput,\n dependencies?: KnowCommandDependencies\n): Promise<void> {\n if (!filePath) {\n throw new Error(\"Missing file_path. Usage: cngkit knowledges read <file_path>\");\n }\n\n const api = dependencies?.api ?? createKnowledgesApi(options);\n const response = await api.read({\n filePath: normalizeCatalogPath(filePath),\n offset: coerceOptionalNumber(options.offset),\n limit: coerceLimit(options.limit, 200, 2000),\n });\n\n if (shouldPrintJson(options)) {\n output.raw(formatJson(response.data));\n return;\n }\n\n if (resolveOutputFormat() === \"markdown\" || !response.data.file_path.endsWith(\".md\")) {\n output.raw(response.data.content);\n } else {\n output.markdown(response.data.content);\n }\n\n if (response.data.truncated) {\n output.warning(\n `[truncated: showing ${response.data.limit} lines from offset ${response.data.offset} of ${response.data.total_lines}]`\n );\n }\n}\n\nexport async function runKnowGrepCommand(\n pattern: string | undefined,\n options: KnowGrepCommandOptions,\n output: CommandOutput,\n dependencies?: KnowCommandDependencies\n): Promise<void> {\n if (!pattern) {\n throw new Error(\"Missing pattern. Usage: cngkit knowledges grep <pattern>\");\n }\n\n const api = dependencies?.api ?? createKnowledgesApi(options);\n const limit = options.limit !== undefined ? coerceOptionalNumber(options.limit) : undefined;\n const response = await api.grep({\n pattern,\n path: normalizeCatalogPath(options.path ?? \"/\"),\n include: options.include ?? \"*\",\n mode: normalizeGrepMode(options.outputMode),\n context: coerceLimit(options.context, 0, 20),\n ignoreCase: options.caseInsensitive === true,\n });\n\n if (shouldPrintJson(options)) {\n output.raw(formatJson(response.data));\n return;\n }\n\n if (response.data.mode === \"files_with_matches\") {\n const files = limit ? response.data.files.slice(0, limit) : response.data.files;\n if (files.length > 0) {\n output.raw(files.join(\"\\n\"));\n return;\n }\n\n output.warning(`No files matched \"${pattern}\".`);\n return;\n }\n\n if (response.data.mode === \"count\") {\n const counts = limit ? response.data.counts.slice(0, limit) : response.data.counts;\n const lines = counts.map((count) => `${count.file_path}: ${count.match_count}`);\n if (lines.length > 0) {\n output.raw(lines.join(\"\\n\"));\n return;\n }\n\n output.warning(`No matches for \"${pattern}\".`);\n return;\n }\n\n const matches = limit ? response.data.matches.slice(0, limit) : response.data.matches;\n const lines = matches.flatMap((match) => [\n `${match.file_path}:${match.line_number}`,\n ...match.context_before.map((line) => ` ${line}`),\n `> ${match.line}`,\n ...match.context_after.map((line) => ` ${line}`),\n ]);\n\n if (lines.length > 0) {\n output.raw(lines.join(\"\\n\"));\n return;\n }\n\n output.warning(`No matches for \"${pattern}\".`);\n}\n\nexport async function runKnowGlobCommand(\n pattern: string | undefined,\n options: KnowGlobCommandOptions,\n output: CommandOutput,\n dependencies?: KnowCommandDependencies\n): Promise<void> {\n const api = dependencies?.api ?? createKnowledgesApi(options);\n const limit = options.limit !== undefined ? coerceOptionalNumber(options.limit) : undefined;\n const response = await api.glob({\n pattern: pattern ?? \"**/*.md\",\n path: normalizeCatalogPath(options.path ?? \"/\"),\n });\n\n if (shouldPrintJson(options)) {\n output.raw(formatJson(response.data));\n return;\n }\n\n const files = limit ? response.data.files.slice(0, limit) : response.data.files;\n const wasClientTruncated = limit ? response.data.files.length > limit : false;\n\n if (files.length > 0) {\n output.raw(files.join(\"\\n\"));\n } else {\n output.warning(\"No matching files.\");\n }\n if (response.data.truncated || wasClientTruncated) {\n output.warning(`[truncated: ${response.data.total_files} total files]`);\n }\n}\n"],"mappings":"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","names":["lines"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/options.ts"],"sourcesContent":["import { argument, option } from \"pastel\";\nimport { z } from \"zod\";\n\nexport const GlobalOptionsSchema = z.object({});\n\nexport const JsonOutputOptionsSchema = GlobalOptionsSchema.extend({\n json: z\n .boolean()\n .optional()\n .describe(\n option({\n description: \"Print raw JSON\",\n })\n ),\n});\n\nexport const OptionalPathArgsSchema = z.tuple([\n z\n .string()\n .optional()\n .describe(\n argument({\n name: \"path\",\n description: \"Path to scan\",\n })\n ),\n]);\n\nexport const OptionalRoomCodeArgsSchema = z.tuple([\n z\n .string()\n .optional()\n .describe(\n argument({\n name: \"room-code\",\n description: \"Room code\",\n })\n ),\n]);\n\nexport const RequiredRoomCodeArgsSchema = z.tuple([\n z.string().describe(\n argument({\n name: \"room-code\",\n description: \"Room code\",\n })\n ),\n]);\n\nexport const OptionalQueryArgsSchema = z.tuple([\n z\n .string()\n .optional()\n .describe(\n argument({\n name: \"query\",\n description: \"Optional query\",\n })\n ),\n]);\n\nexport const RequiredQueryArgsSchema = z.array(\n z.string().describe(\n argument({\n name: \"query\",\n description: \"Search query\",\n })\n )\n);\n\nexport const RequiredFilePathArgsSchema = z.tuple([\n z.string().describe(\n argument({\n name: \"file-path\",\n description: \"Catalog file path\",\n })\n ),\n]);\n\nexport const RequiredPatternArgsSchema = z.array(\n z.string().describe(\n argument({\n name: \"pattern\",\n description: \"Search pattern\",\n })\n )\n);\n\nexport const OptionalGlobPatternArgsSchema = z.array(\n z.string().describe(\n argument({\n name: \"pattern\",\n description: \"Glob pattern\",\n })\n )\n);\n\nexport const LimitOptionsSchema = JsonOutputOptionsSchema.extend({\n limit: z\n .number()\n .optional()\n .describe(\n option({\n description: \"Maximum results\",\n valueDescription: \"n\",\n })\n ),\n});\n\nexport const TranscriptArgsSchema = z.array(\n z.string().describe(\n argument({\n name: \"transcript-args\",\n description: \"Transcript action and arguments\",\n })\n )\n);\n"],"mappings":";AAAA,SAAS,UAAU,cAAc;AACjC,SAAS,SAAS;AAEX,IAAM,sBAAsB,EAAE,OAAO,CAAC,CAAC;AAEvC,IAAM,0BAA0B,oBAAoB,OAAO;AAAA,EAChE,MAAM,EACH,QAAQ,EACR,SAAS,EACT;AAAA,IACC,OAAO;AAAA,MACL,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACJ,CAAC;AAEM,IAAM,yBAAyB,EAAE,MAAM;AAAA,EAC5C,EACG,OAAO,EACP,SAAS,EACT;AAAA,IACC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACJ,CAAC;AAEM,IAAM,6BAA6B,EAAE,MAAM;AAAA,EAChD,EACG,OAAO,EACP,SAAS,EACT;AAAA,IACC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACJ,CAAC;AAEM,IAAM,6BAA6B,EAAE,MAAM;AAAA,EAChD,EAAE,OAAO,EAAE;AAAA,IACT,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF,CAAC;AAEM,IAAM,0BAA0B,EAAE,MAAM;AAAA,EAC7C,EACG,OAAO,EACP,SAAS,EACT;AAAA,IACC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACJ,CAAC;AAEM,IAAM,0BAA0B,EAAE;AAAA,EACvC,EAAE,OAAO,EAAE;AAAA,IACT,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;AAEO,IAAM,6BAA6B,EAAE,MAAM;AAAA,EAChD,EAAE,OAAO,EAAE;AAAA,IACT,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF,CAAC;AAEM,IAAM,4BAA4B,EAAE;AAAA,EACzC,EAAE,OAAO,EAAE;AAAA,IACT,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;AAEO,IAAM,gCAAgC,EAAE;AAAA,EAC7C,EAAE,OAAO,EAAE;AAAA,IACT,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;AAEO,IAAM,qBAAqB,wBAAwB,OAAO;AAAA,EAC/D,OAAO,EACJ,OAAO,EACP,SAAS,EACT;AAAA,IACC,OAAO;AAAA,MACL,aAAa;AAAA,MACb,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH;AACJ,CAAC;AAEM,IAAM,uBAAuB,EAAE;AAAA,EACpC,EAAE,OAAO,EAAE;AAAA,IACT,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1,222 +0,0 @@
1
- // src/shared/config.ts
2
- import { randomBytes, randomUUID } from "crypto";
3
- import process from "process";
4
- var packageVersion = "1.1.17";
5
- var defaultApiBaseUrl = "https://curly.ng";
6
- function resolveApiBaseUrl(options) {
7
- void options;
8
- return defaultApiBaseUrl;
9
- }
10
- function resolveOutputFormat() {
11
- const value = process.env.CNGKIT_FORMAT?.toLowerCase();
12
- if (value === "json" || value === "markdown") {
13
- return value;
14
- }
15
- return "text";
16
- }
17
- function parseOutputFormat(value) {
18
- const normalizedValue = value.toLowerCase();
19
- if (normalizedValue === "text" || normalizedValue === "json" || normalizedValue === "markdown") {
20
- return normalizedValue;
21
- }
22
- throw new Error("Unknown --format value. Use one of: text, json, markdown.");
23
- }
24
- function createRoomCode() {
25
- return randomBytes(4).toString("hex").toUpperCase();
26
- }
27
- function createPeerId() {
28
- return randomUUID();
29
- }
30
-
31
- // src/shared/output.ts
32
- import process2 from "process";
33
- import { createElement } from "react";
34
- import { renderToString, Text } from "ink";
35
- import Markdown from "@inkkit/ink-markdown";
36
- import stripAnsi from "strip-ansi";
37
-
38
- // src/shared/theme.ts
39
- import { Chalk } from "chalk";
40
- var statusStylePropsByOutputStyle = {
41
- info: {
42
- color: "cyan"
43
- },
44
- success: {
45
- color: "green",
46
- bold: true
47
- },
48
- warning: {
49
- color: "yellow",
50
- bold: true
51
- },
52
- muted: {
53
- dimColor: true
54
- },
55
- error: {
56
- color: "red",
57
- bold: true
58
- }
59
- };
60
- function createMarkdownTheme(useColor) {
61
- const chalk = new Chalk({ level: useColor ? 1 : 0 });
62
- const identity = (value) => value;
63
- return {
64
- code: chalk.green,
65
- blockquote: chalk.dim.italic,
66
- html: chalk.gray,
67
- heading: chalk.blueBright.bold,
68
- firstHeading: chalk.magentaBright.bold,
69
- hr: chalk.gray,
70
- listitem: identity,
71
- table: identity,
72
- paragraph: identity,
73
- strong: chalk.bold,
74
- em: chalk.italic,
75
- codespan: chalk.cyanBright,
76
- del: chalk.dim.strikethrough,
77
- link: chalk.blueBright,
78
- href: chalk.blue.underline,
79
- text: identity,
80
- showSectionPrefix: false,
81
- reflowText: true,
82
- unescape: true,
83
- emoji: false,
84
- tab: 2
85
- };
86
- }
87
-
88
- // src/shared/output.ts
89
- var consoleOutput = createCommandOutput(process2.stdout, process2.stderr);
90
- function createCommandOutput(stdout, stderr) {
91
- return {
92
- info(message) {
93
- writeStyledMessage(stdout, "info", message);
94
- },
95
- success(message) {
96
- writeStyledMessage(stdout, "success", message);
97
- },
98
- warning(message) {
99
- writeStyledMessage(stdout, "warning", message);
100
- },
101
- muted(message) {
102
- writeStyledMessage(stdout, "muted", message);
103
- },
104
- markdown(message) {
105
- stdout.write(`${formatMarkdownMessage(stdout, message)}
106
- `);
107
- },
108
- raw(message) {
109
- stdout.write(`${message}
110
- `);
111
- },
112
- error(message) {
113
- writeStyledMessage(stderr, "error", message);
114
- }
115
- };
116
- }
117
- function formatError(error) {
118
- return error instanceof Error ? error.message : String(error);
119
- }
120
- function writeStyledMessage(stream, style, message) {
121
- stream.write(`${formatStyledMessage(stream, style, message)}
122
- `);
123
- }
124
- function formatStyledMessage(stream, style, message) {
125
- if (!shouldRenderColor(stream)) {
126
- return message;
127
- }
128
- return renderToString(
129
- createElement(
130
- Text,
131
- {
132
- ...statusStylePropsByOutputStyle[style],
133
- wrap: "wrap"
134
- },
135
- message
136
- ),
137
- {
138
- columns: 1e4
139
- }
140
- );
141
- }
142
- function formatMarkdownMessage(stream, markdown) {
143
- if (resolveOutputFormat() === "markdown") {
144
- return markdown;
145
- }
146
- const useColor = shouldRenderColor(stream);
147
- const markdownWidth = clampMarkdownWidth(stream.columns);
148
- const preparedMarkdown = prepareMarkdownForTerminal(markdown);
149
- const renderedMarkdown = renderToString(
150
- createElement(
151
- Markdown,
152
- {
153
- ...createMarkdownTheme(useColor),
154
- children: preparedMarkdown,
155
- width: markdownWidth
156
- }
157
- ),
158
- {
159
- columns: markdownWidth
160
- }
161
- );
162
- return useColor ? renderedMarkdown.trimEnd() : stripAnsi(renderedMarkdown).trimEnd();
163
- }
164
- function prepareMarkdownForTerminal(markdown) {
165
- if (!markdown.startsWith("---\n")) {
166
- return markdown;
167
- }
168
- const frontmatterEndIndex = markdown.indexOf("\n---", 4);
169
- if (frontmatterEndIndex < 0) {
170
- return formatFrontmatterForTerminal(markdown.slice(4).trimEnd());
171
- }
172
- const frontmatter = markdown.slice(4, frontmatterEndIndex).trimEnd();
173
- const body = markdown.slice(frontmatterEndIndex + "\n---".length).replace(/^\n+/, "");
174
- return `${formatFrontmatterForTerminal(frontmatter)}
175
-
176
- ${body}`;
177
- }
178
- function formatFrontmatterForTerminal(frontmatter) {
179
- return `## Metadata
180
-
181
- \`\`\`yaml
182
- ${frontmatter}
183
- \`\`\``;
184
- }
185
- function shouldRenderColor(stream) {
186
- if (process2.env.CNGKIT_NO_COLOR === "1") {
187
- return false;
188
- }
189
- const colorMode = process2.env.CNGKIT_COLOR?.toLowerCase();
190
- if (colorMode === "never" || colorMode === "0" || colorMode === "false") {
191
- return false;
192
- }
193
- if (colorMode === "always" || colorMode === "1" || colorMode === "true") {
194
- return true;
195
- }
196
- if (process2.env.FORCE_COLOR !== void 0 && process2.env.FORCE_COLOR !== "0") {
197
- return true;
198
- }
199
- if (process2.env.NO_COLOR !== void 0) {
200
- return false;
201
- }
202
- return stream.isTTY === true;
203
- }
204
- function clampMarkdownWidth(columns) {
205
- if (columns === void 0) {
206
- return 100;
207
- }
208
- return Math.max(72, Math.min(columns, 120));
209
- }
210
-
211
- export {
212
- packageVersion,
213
- resolveApiBaseUrl,
214
- resolveOutputFormat,
215
- parseOutputFormat,
216
- createRoomCode,
217
- createPeerId,
218
- consoleOutput,
219
- createCommandOutput,
220
- formatError
221
- };
222
- //# sourceMappingURL=chunk-WYJTGGMN.js.map
@@ -1 +0,0 @@
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.17\";\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 readonly apiBaseUrl?: never;\n};\n\nexport function resolveApiBaseUrl(options: GlobalCommandOptions): string {\n void options;\n return 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 { createElement } from \"react\";\nimport { renderToString, Text } from \"ink\";\nimport Markdown from \"@inkkit/ink-markdown\";\nimport stripAnsi from \"strip-ansi\";\nimport {\n createMarkdownTheme,\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 preparedMarkdown = prepareMarkdownForTerminal(markdown);\n const renderedMarkdown = renderToString(\n createElement(\n Markdown,\n {\n ...createMarkdownTheme(useColor),\n children: preparedMarkdown,\n width: markdownWidth,\n }\n ),\n {\n columns: markdownWidth,\n }\n );\n\n return useColor ? renderedMarkdown.trimEnd() : stripAnsi(renderedMarkdown).trimEnd();\n}\n\nfunction prepareMarkdownForTerminal(markdown: string): string {\n if (!markdown.startsWith(\"---\\n\")) {\n return markdown;\n }\n\n const frontmatterEndIndex = markdown.indexOf(\"\\n---\", 4);\n if (frontmatterEndIndex < 0) {\n return formatFrontmatterForTerminal(markdown.slice(4).trimEnd());\n }\n\n const frontmatter = markdown.slice(4, frontmatterEndIndex).trimEnd();\n const body = markdown.slice(frontmatterEndIndex + \"\\n---\".length).replace(/^\\n+/, \"\");\n\n return `${formatFrontmatterForTerminal(frontmatter)}\\n\\n${body}`;\n}\n\nfunction formatFrontmatterForTerminal(frontmatter: string): string {\n return `## Metadata\\n\\n\\`\\`\\`yaml\\n${frontmatter}\\n\\`\\`\\``;\n}\n\nfunction shouldRenderColor(stream: OutputStream): boolean {\n if (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 if (process.env.NO_COLOR !== undefined) {\n return false;\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\";\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: false,\n reflowText: true,\n unescape: true,\n emoji: false,\n tab: 2,\n };\n}\n"],"mappings":"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","names":["process","process"]}