cngkit 1.1.15 → 1.1.17
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.
- package/README.md +28 -22
- package/dist/{chunk-55BKHXBM.js → chunk-5ZNV3FDG.js} +3 -3
- package/dist/{chunk-IG7DJU7W.js → chunk-BL3XMLIH.js} +39 -38
- package/dist/chunk-BL3XMLIH.js.map +1 -0
- package/dist/{chunk-JX33GP2L.js → chunk-GT2MTS6E.js} +2 -2
- package/dist/{chunk-CSP6OWQH.js → chunk-HRFI2IEP.js} +15 -15
- package/dist/chunk-HRFI2IEP.js.map +1 -0
- package/dist/{chunk-TNYB67MX.js → chunk-K36DKQWH.js} +21 -13
- package/dist/chunk-K36DKQWH.js.map +1 -0
- package/dist/{chunk-MLKBG5YJ.js → chunk-VCWNKNUE.js} +2 -9
- package/dist/chunk-VCWNKNUE.js.map +1 -0
- package/dist/{chunk-Q3F7DVFP.js → chunk-WYJTGGMN.js} +86 -37
- package/dist/chunk-WYJTGGMN.js.map +1 -0
- package/dist/{chunk-QZEB4VMX.js → chunk-XQGLUQFM.js} +5 -1
- package/dist/chunk-XQGLUQFM.js.map +1 -0
- package/dist/cli.js +89 -28
- package/dist/cli.js.map +1 -1
- package/dist/commands/coderoom/index.js +4 -4
- package/dist/commands/coderoom/join.js +5 -6
- package/dist/commands/coderoom/join.js.map +1 -1
- package/dist/commands/coderoom/share.js +5 -6
- package/dist/commands/coderoom/share.js.map +1 -1
- package/dist/commands/index.js +3 -3
- package/dist/commands/knowledges/audiences.js +7 -8
- package/dist/commands/knowledges/audiences.js.map +1 -1
- package/dist/commands/knowledges/files.js +7 -8
- package/dist/commands/knowledges/files.js.map +1 -1
- package/dist/commands/knowledges/glob.js +7 -8
- package/dist/commands/knowledges/glob.js.map +1 -1
- package/dist/commands/knowledges/grep.js +7 -8
- package/dist/commands/knowledges/grep.js.map +1 -1
- package/dist/commands/knowledges/index.js +4 -4
- package/dist/commands/knowledges/list.js +7 -8
- package/dist/commands/knowledges/list.js.map +1 -1
- package/dist/commands/knowledges/read.js +7 -8
- package/dist/commands/knowledges/read.js.map +1 -1
- package/dist/commands/knowledges/search.js +8 -9
- package/dist/commands/knowledges/search.js.map +1 -1
- package/dist/commands/knowledges/status.js +7 -8
- package/dist/commands/knowledges/status.js.map +1 -1
- package/dist/commands/login.js +5 -6
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/scrub.js +3 -3
- package/dist/commands/transcripts.js +9 -8
- package/dist/commands/transcripts.js.map +1 -1
- package/package.json +2 -4
- package/dist/chunk-CSP6OWQH.js.map +0 -1
- package/dist/chunk-IG7DJU7W.js.map +0 -1
- package/dist/chunk-MLKBG5YJ.js.map +0 -1
- package/dist/chunk-Q3F7DVFP.js.map +0 -1
- package/dist/chunk-QZEB4VMX.js.map +0 -1
- package/dist/chunk-TNYB67MX.js.map +0 -1
- package/dist/chunk-U6XERHCZ.js +0 -22
- package/dist/chunk-U6XERHCZ.js.map +0 -1
- /package/dist/{chunk-55BKHXBM.js.map → chunk-5ZNV3FDG.js.map} +0 -0
- /package/dist/{chunk-JX33GP2L.js.map → chunk-GT2MTS6E.js.map} +0 -0
|
@@ -2,11 +2,15 @@ import {
|
|
|
2
2
|
coerceLimit,
|
|
3
3
|
coerceOptionalNumber,
|
|
4
4
|
formatJson,
|
|
5
|
+
shouldPrintJson,
|
|
5
6
|
singleLine
|
|
6
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-XQGLUQFM.js";
|
|
7
8
|
import {
|
|
8
9
|
createCngApiClient
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HRFI2IEP.js";
|
|
11
|
+
import {
|
|
12
|
+
resolveOutputFormat
|
|
13
|
+
} from "./chunk-WYJTGGMN.js";
|
|
10
14
|
|
|
11
15
|
// src/features/knowledges/knowledges-api.ts
|
|
12
16
|
function createKnowledgesApi(options) {
|
|
@@ -109,7 +113,7 @@ function normalizeGrepMode(value) {
|
|
|
109
113
|
async function runKnowStatusCommand(options, output, dependencies) {
|
|
110
114
|
const api = dependencies?.api ?? createKnowledgesApi(options);
|
|
111
115
|
const response = await api.getCatalog();
|
|
112
|
-
if (options
|
|
116
|
+
if (shouldPrintJson(options)) {
|
|
113
117
|
output.raw(formatJson(response.data));
|
|
114
118
|
return;
|
|
115
119
|
}
|
|
@@ -118,7 +122,7 @@ async function runKnowStatusCommand(options, output, dependencies) {
|
|
|
118
122
|
`Catalog: ${response.data.name}`,
|
|
119
123
|
`Files: ${response.data.files}`,
|
|
120
124
|
`Blobs: ${response.data.blobs}`,
|
|
121
|
-
`
|
|
125
|
+
`Database: ${response.data.database.engine} (${response.data.database.binding})`
|
|
122
126
|
];
|
|
123
127
|
if (latestRun) {
|
|
124
128
|
lines.push(`Latest run: ${latestRun.status} (${latestRun.id})`);
|
|
@@ -133,7 +137,7 @@ async function runKnowStatusCommand(options, output, dependencies) {
|
|
|
133
137
|
async function runKnowAudiencesCommand(options, output, dependencies) {
|
|
134
138
|
const api = dependencies?.api ?? createKnowledgesApi(options);
|
|
135
139
|
const response = await api.listAudiences();
|
|
136
|
-
if (options
|
|
140
|
+
if (shouldPrintJson(options)) {
|
|
137
141
|
output.raw(formatJson(response.data));
|
|
138
142
|
return;
|
|
139
143
|
}
|
|
@@ -149,7 +153,7 @@ async function runKnowSearchCommand(query, options, output, dependencies) {
|
|
|
149
153
|
}
|
|
150
154
|
const api = dependencies?.api ?? createKnowledgesApi(options);
|
|
151
155
|
const response = await api.search(query, coerceLimit(options.limit, 5));
|
|
152
|
-
if (options
|
|
156
|
+
if (shouldPrintJson(options)) {
|
|
153
157
|
output.raw(formatJson(response.data));
|
|
154
158
|
return;
|
|
155
159
|
}
|
|
@@ -175,7 +179,7 @@ async function runKnowListCommand(query, options, output, dependencies) {
|
|
|
175
179
|
}
|
|
176
180
|
return [subskill.name, subskill.title, subskill.description, subskill.type].join(" ").toLowerCase().includes(normalizedQuery);
|
|
177
181
|
}).slice(0, limit);
|
|
178
|
-
if (options
|
|
182
|
+
if (shouldPrintJson(options)) {
|
|
179
183
|
output.raw(formatJson({ subskills, total: subskills.length }));
|
|
180
184
|
return;
|
|
181
185
|
}
|
|
@@ -197,7 +201,7 @@ async function runKnowFilesCommand(query, options, output, dependencies) {
|
|
|
197
201
|
audience: normalizeAudienceId(options.audience),
|
|
198
202
|
limit: coerceLimit(options.limit, 25)
|
|
199
203
|
});
|
|
200
|
-
if (options
|
|
204
|
+
if (shouldPrintJson(options)) {
|
|
201
205
|
output.raw(formatJson(response.data));
|
|
202
206
|
return;
|
|
203
207
|
}
|
|
@@ -222,11 +226,15 @@ async function runKnowReadCommand(filePath, options, output, dependencies) {
|
|
|
222
226
|
offset: coerceOptionalNumber(options.offset),
|
|
223
227
|
limit: coerceLimit(options.limit, 200, 2e3)
|
|
224
228
|
});
|
|
225
|
-
if (options
|
|
229
|
+
if (shouldPrintJson(options)) {
|
|
226
230
|
output.raw(formatJson(response.data));
|
|
227
231
|
return;
|
|
228
232
|
}
|
|
229
|
-
|
|
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
|
+
}
|
|
230
238
|
if (response.data.truncated) {
|
|
231
239
|
output.warning(
|
|
232
240
|
`[truncated: showing ${response.data.limit} lines from offset ${response.data.offset} of ${response.data.total_lines}]`
|
|
@@ -247,7 +255,7 @@ async function runKnowGrepCommand(pattern, options, output, dependencies) {
|
|
|
247
255
|
context: coerceLimit(options.context, 0, 20),
|
|
248
256
|
ignoreCase: options.caseInsensitive === true
|
|
249
257
|
});
|
|
250
|
-
if (options
|
|
258
|
+
if (shouldPrintJson(options)) {
|
|
251
259
|
output.raw(formatJson(response.data));
|
|
252
260
|
return;
|
|
253
261
|
}
|
|
@@ -290,7 +298,7 @@ async function runKnowGlobCommand(pattern, options, output, dependencies) {
|
|
|
290
298
|
pattern: pattern ?? "**/*.md",
|
|
291
299
|
path: normalizeCatalogPath(options.path ?? "/")
|
|
292
300
|
});
|
|
293
|
-
if (options
|
|
301
|
+
if (shouldPrintJson(options)) {
|
|
294
302
|
output.raw(formatJson(response.data));
|
|
295
303
|
return;
|
|
296
304
|
}
|
|
@@ -316,4 +324,4 @@ export {
|
|
|
316
324
|
runKnowGrepCommand,
|
|
317
325
|
runKnowGlobCommand
|
|
318
326
|
};
|
|
319
|
-
//# sourceMappingURL=chunk-
|
|
327
|
+
//# sourceMappingURL=chunk-K36DKQWH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,14 +1,7 @@
|
|
|
1
1
|
// src/cli/options.ts
|
|
2
2
|
import { argument, option } from "pastel";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
var GlobalOptionsSchema = z.object({
|
|
5
|
-
apiBaseUrl: z.string().optional().describe(
|
|
6
|
-
option({
|
|
7
|
-
description: "Curly API base URL. Default: CNGKIT_API_BASE_URL or https://curly.ng",
|
|
8
|
-
valueDescription: "url"
|
|
9
|
-
})
|
|
10
|
-
)
|
|
11
|
-
});
|
|
4
|
+
var GlobalOptionsSchema = z.object({});
|
|
12
5
|
var JsonOutputOptionsSchema = GlobalOptionsSchema.extend({
|
|
13
6
|
json: z.boolean().optional().describe(
|
|
14
7
|
option({
|
|
@@ -111,4 +104,4 @@ export {
|
|
|
111
104
|
LimitOptionsSchema,
|
|
112
105
|
TranscriptArgsSchema
|
|
113
106
|
};
|
|
114
|
-
//# sourceMappingURL=chunk-
|
|
107
|
+
//# sourceMappingURL=chunk-VCWNKNUE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,14 +1,42 @@
|
|
|
1
|
-
// src/shared/
|
|
1
|
+
// src/shared/config.ts
|
|
2
|
+
import { randomBytes, randomUUID } from "crypto";
|
|
2
3
|
import process from "process";
|
|
3
|
-
|
|
4
|
-
|
|
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";
|
|
5
33
|
import { createElement } from "react";
|
|
6
34
|
import { renderToString, Text } from "ink";
|
|
7
|
-
import
|
|
35
|
+
import Markdown from "@inkkit/ink-markdown";
|
|
36
|
+
import stripAnsi from "strip-ansi";
|
|
8
37
|
|
|
9
38
|
// src/shared/theme.ts
|
|
10
39
|
import { Chalk } from "chalk";
|
|
11
|
-
import stripAnsi from "strip-ansi";
|
|
12
40
|
var statusStylePropsByOutputStyle = {
|
|
13
41
|
info: {
|
|
14
42
|
color: "cyan"
|
|
@@ -49,34 +77,16 @@ function createMarkdownTheme(useColor) {
|
|
|
49
77
|
link: chalk.blueBright,
|
|
50
78
|
href: chalk.blue.underline,
|
|
51
79
|
text: identity,
|
|
52
|
-
showSectionPrefix:
|
|
80
|
+
showSectionPrefix: false,
|
|
53
81
|
reflowText: true,
|
|
54
82
|
unescape: true,
|
|
55
83
|
emoji: false,
|
|
56
84
|
tab: 2
|
|
57
85
|
};
|
|
58
86
|
}
|
|
59
|
-
function decorateMarkdownOutput(output) {
|
|
60
|
-
const chalk = new Chalk({ level: 1 });
|
|
61
|
-
const decoratedLines = output.split("\n").map((line) => {
|
|
62
|
-
const plainLine = stripAnsi(line);
|
|
63
|
-
if (plainLine.startsWith("# ")) {
|
|
64
|
-
return chalk.magentaBright.bold(plainLine);
|
|
65
|
-
}
|
|
66
|
-
if (plainLine.startsWith("## ")) {
|
|
67
|
-
return chalk.blueBright.bold(plainLine);
|
|
68
|
-
}
|
|
69
|
-
return line;
|
|
70
|
-
}).join("\n");
|
|
71
|
-
return decoratedLines.replace(/`([^`\n]+)`/g, (_match, value) => chalk.cyanBright(value)).replace(/(^|\s)(--[a-z][a-z0-9-]*)/g, (_match, prefix, flag) => {
|
|
72
|
-
return `${prefix}${chalk.yellow(flag)}`;
|
|
73
|
-
}).replace(/(https?:\/\/[^\s)]+)/g, (url) => chalk.blueBright.underline(url)).replace(/^(\s*)\*\s+/gm, (_match, prefix) => {
|
|
74
|
-
return `${prefix}${chalk.magentaBright("-")} `;
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
87
|
|
|
78
88
|
// src/shared/output.ts
|
|
79
|
-
var consoleOutput = createCommandOutput(
|
|
89
|
+
var consoleOutput = createCommandOutput(process2.stdout, process2.stderr);
|
|
80
90
|
function createCommandOutput(stdout, stderr) {
|
|
81
91
|
return {
|
|
82
92
|
info(message) {
|
|
@@ -130,32 +140,65 @@ function formatStyledMessage(stream, style, message) {
|
|
|
130
140
|
);
|
|
131
141
|
}
|
|
132
142
|
function formatMarkdownMessage(stream, markdown) {
|
|
133
|
-
if (
|
|
143
|
+
if (resolveOutputFormat() === "markdown") {
|
|
134
144
|
return markdown;
|
|
135
145
|
}
|
|
136
146
|
const useColor = shouldRenderColor(stream);
|
|
137
147
|
const markdownWidth = clampMarkdownWidth(stream.columns);
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
+
}
|
|
144
161
|
);
|
|
145
|
-
|
|
146
|
-
|
|
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
|
+
\`\`\``;
|
|
147
184
|
}
|
|
148
185
|
function shouldRenderColor(stream) {
|
|
149
|
-
|
|
186
|
+
if (process2.env.CNGKIT_NO_COLOR === "1") {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
const colorMode = process2.env.CNGKIT_COLOR?.toLowerCase();
|
|
150
190
|
if (colorMode === "never" || colorMode === "0" || colorMode === "false") {
|
|
151
191
|
return false;
|
|
152
192
|
}
|
|
153
193
|
if (colorMode === "always" || colorMode === "1" || colorMode === "true") {
|
|
154
194
|
return true;
|
|
155
195
|
}
|
|
156
|
-
if (
|
|
196
|
+
if (process2.env.FORCE_COLOR !== void 0 && process2.env.FORCE_COLOR !== "0") {
|
|
157
197
|
return true;
|
|
158
198
|
}
|
|
199
|
+
if (process2.env.NO_COLOR !== void 0) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
159
202
|
return stream.isTTY === true;
|
|
160
203
|
}
|
|
161
204
|
function clampMarkdownWidth(columns) {
|
|
@@ -166,8 +209,14 @@ function clampMarkdownWidth(columns) {
|
|
|
166
209
|
}
|
|
167
210
|
|
|
168
211
|
export {
|
|
212
|
+
packageVersion,
|
|
213
|
+
resolveApiBaseUrl,
|
|
214
|
+
resolveOutputFormat,
|
|
215
|
+
parseOutputFormat,
|
|
216
|
+
createRoomCode,
|
|
217
|
+
createPeerId,
|
|
169
218
|
consoleOutput,
|
|
170
219
|
createCommandOutput,
|
|
171
220
|
formatError
|
|
172
221
|
};
|
|
173
|
-
//# sourceMappingURL=chunk-
|
|
222
|
+
//# sourceMappingURL=chunk-WYJTGGMN.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.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"]}
|
|
@@ -15,6 +15,9 @@ function coerceOptionalNumber(value) {
|
|
|
15
15
|
function formatJson(value) {
|
|
16
16
|
return JSON.stringify(value, null, 2);
|
|
17
17
|
}
|
|
18
|
+
function shouldPrintJson(options) {
|
|
19
|
+
return options.json === true || process.env.CNGKIT_FORMAT?.toLowerCase() === "json";
|
|
20
|
+
}
|
|
18
21
|
function optionalJoinedArgument(values) {
|
|
19
22
|
return values.length > 0 ? values.join(" ") : void 0;
|
|
20
23
|
}
|
|
@@ -26,7 +29,8 @@ export {
|
|
|
26
29
|
coerceLimit,
|
|
27
30
|
coerceOptionalNumber,
|
|
28
31
|
formatJson,
|
|
32
|
+
shouldPrintJson,
|
|
29
33
|
optionalJoinedArgument,
|
|
30
34
|
singleLine
|
|
31
35
|
};
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
36
|
+
//# sourceMappingURL=chunk-XQGLUQFM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shared/command-utils.ts"],"sourcesContent":["export type JsonOutputOptions = {\n json?: boolean;\n};\n\nexport type NumberOption = number | string;\n\nexport function coerceLimit(\n value: NumberOption | undefined,\n defaultValue: number,\n maxValue = 100\n): number {\n const normalizedValue = coerceOptionalNumber(value);\n if (normalizedValue === undefined || Number.isNaN(normalizedValue)) {\n return defaultValue;\n }\n return Math.max(defaultValue === 0 ? 0 : 1, Math.min(maxValue, Math.trunc(normalizedValue)));\n}\n\nexport function coerceOptionalNumber(value: NumberOption | undefined): number | undefined {\n if (value === undefined || value === \"\") {\n return undefined;\n }\n return Number(value);\n}\n\nexport function formatJson(value: unknown): string {\n return JSON.stringify(value, null, 2);\n}\n\nexport function shouldPrintJson(options: JsonOutputOptions): boolean {\n return options.json === true || process.env.CNGKIT_FORMAT?.toLowerCase() === \"json\";\n}\n\nexport function optionalJoinedArgument(values: string[]): string | undefined {\n return values.length > 0 ? values.join(\" \") : undefined;\n}\n\nexport function singleLine(value: string): string {\n return value.replace(/\\s+/g, \" \").trim();\n}\n"],"mappings":";AAMO,SAAS,YACd,OACA,cACA,WAAW,KACH;AACR,QAAM,kBAAkB,qBAAqB,KAAK;AAClD,MAAI,oBAAoB,UAAa,OAAO,MAAM,eAAe,GAAG;AAClE,WAAO;AAAA,EACT;AACA,SAAO,KAAK,IAAI,iBAAiB,IAAI,IAAI,GAAG,KAAK,IAAI,UAAU,KAAK,MAAM,eAAe,CAAC,CAAC;AAC7F;AAEO,SAAS,qBAAqB,OAAqD;AACxF,MAAI,UAAU,UAAa,UAAU,IAAI;AACvC,WAAO;AAAA,EACT;AACA,SAAO,OAAO,KAAK;AACrB;AAEO,SAAS,WAAW,OAAwB;AACjD,SAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AACtC;AAEO,SAAS,gBAAgB,SAAqC;AACnE,SAAO,QAAQ,SAAS,QAAQ,QAAQ,IAAI,eAAe,YAAY,MAAM;AAC/E;AAEO,SAAS,uBAAuB,QAAsC;AAC3E,SAAO,OAAO,SAAS,IAAI,OAAO,KAAK,GAAG,IAAI;AAChD;AAEO,SAAS,WAAW,OAAuB;AAChD,SAAO,MAAM,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACzC;","names":[]}
|
package/dist/cli.js
CHANGED
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
import {
|
|
3
3
|
formatCngkitHelp,
|
|
4
4
|
formatKnowledgesHelp
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import {
|
|
7
|
-
packageVersion
|
|
8
|
-
} from "./chunk-U6XERHCZ.js";
|
|
5
|
+
} from "./chunk-BL3XMLIH.js";
|
|
9
6
|
import {
|
|
10
7
|
consoleOutput,
|
|
11
|
-
formatError
|
|
12
|
-
|
|
8
|
+
formatError,
|
|
9
|
+
packageVersion,
|
|
10
|
+
parseOutputFormat
|
|
11
|
+
} from "./chunk-WYJTGGMN.js";
|
|
13
12
|
import "./chunk-PZ5AY32C.js";
|
|
14
13
|
|
|
15
14
|
// src/cli.ts
|
|
@@ -49,42 +48,104 @@ function printMarkdownHelpIfRequested(argv, output = consoleOutput) {
|
|
|
49
48
|
}
|
|
50
49
|
|
|
51
50
|
// src/cli.ts
|
|
52
|
-
var normalizedArgv = normalizeGlobalOptions(process.argv);
|
|
53
|
-
if (printMarkdownHelpIfRequested(normalizedArgv)) {
|
|
54
|
-
process.exit(0);
|
|
55
|
-
}
|
|
56
|
-
var app = new Pastel({
|
|
57
|
-
importMeta: import.meta,
|
|
58
|
-
name: "cngkit",
|
|
59
|
-
version: packageVersion,
|
|
60
|
-
description: "Opinionated Curly.ng CLI kit for Coderoom collaboration and website tooling."
|
|
61
|
-
});
|
|
62
51
|
try {
|
|
52
|
+
const normalizedArgv = normalizeGlobalOptions(process.argv);
|
|
53
|
+
if (printMarkdownHelpIfRequested(normalizedArgv)) {
|
|
54
|
+
process.exit(0);
|
|
55
|
+
}
|
|
56
|
+
guardKnownCommand(normalizedArgv);
|
|
57
|
+
const app = new Pastel({
|
|
58
|
+
importMeta: import.meta,
|
|
59
|
+
name: "cngkit",
|
|
60
|
+
version: packageVersion,
|
|
61
|
+
description: "Opinionated Curly.ng CLI kit for Coderoom collaboration and website tooling."
|
|
62
|
+
});
|
|
63
63
|
await app.run(normalizedArgv);
|
|
64
64
|
} catch (error) {
|
|
65
65
|
console.error(formatError(error));
|
|
66
66
|
process.exitCode = 1;
|
|
67
67
|
}
|
|
68
68
|
function normalizeGlobalOptions(argv) {
|
|
69
|
-
const
|
|
70
|
-
for (let index = 2; index <
|
|
71
|
-
const argument =
|
|
72
|
-
if (argument === "--
|
|
73
|
-
const value =
|
|
69
|
+
const normalizedArgv = [...argv];
|
|
70
|
+
for (let index = 2; index < normalizedArgv.length; index += 1) {
|
|
71
|
+
const argument = normalizedArgv[index];
|
|
72
|
+
if (argument === "--format") {
|
|
73
|
+
const value = normalizedArgv[index + 1];
|
|
74
74
|
if (!value || value.startsWith("-")) {
|
|
75
|
-
throw new Error("Missing value for --
|
|
75
|
+
throw new Error("Missing value for --format");
|
|
76
76
|
}
|
|
77
|
-
process.env.
|
|
78
|
-
|
|
77
|
+
process.env.CNGKIT_FORMAT = parseOutputFormat(value);
|
|
78
|
+
normalizedArgv.splice(index, 2);
|
|
79
|
+
index -= 1;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (argument.startsWith("--format=")) {
|
|
83
|
+
process.env.CNGKIT_FORMAT = parseOutputFormat(argument.slice("--format=".length));
|
|
84
|
+
normalizedArgv.splice(index, 1);
|
|
85
|
+
index -= 1;
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (argument === "--no-color" || argument === "--no-colors") {
|
|
89
|
+
process.env.CNGKIT_COLOR = "never";
|
|
90
|
+
process.env.CNGKIT_NO_COLOR = "1";
|
|
91
|
+
normalizedArgv.splice(index, 1);
|
|
92
|
+
index -= 1;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (argument === "--color") {
|
|
96
|
+
process.env.CNGKIT_COLOR = "always";
|
|
97
|
+
normalizedArgv.splice(index, 1);
|
|
79
98
|
index -= 1;
|
|
80
99
|
continue;
|
|
81
100
|
}
|
|
82
|
-
if (argument.startsWith("--
|
|
83
|
-
|
|
84
|
-
|
|
101
|
+
if (argument.startsWith("--color=")) {
|
|
102
|
+
const colorMode = argument.slice("--color=".length);
|
|
103
|
+
process.env.CNGKIT_COLOR = colorMode === "false" || colorMode === "never" ? "never" : "always";
|
|
104
|
+
normalizedArgv.splice(index, 1);
|
|
85
105
|
index -= 1;
|
|
86
106
|
}
|
|
87
107
|
}
|
|
88
|
-
return
|
|
108
|
+
return normalizedArgv;
|
|
109
|
+
}
|
|
110
|
+
function guardKnownCommand(argv) {
|
|
111
|
+
const commandName = argv[2];
|
|
112
|
+
if (commandName === void 0 || commandName.startsWith("-")) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const knownCommands = /* @__PURE__ */ new Set(["help", "login", "coderoom", "scrub", "transcripts", "knowledges"]);
|
|
116
|
+
if (!knownCommands.has(commandName)) {
|
|
117
|
+
throw new Error(`Unknown command "${commandName}". Run cngkit --help for available commands.`);
|
|
118
|
+
}
|
|
119
|
+
guardKnownSubcommand(commandName, argv.slice(3));
|
|
120
|
+
}
|
|
121
|
+
function guardKnownSubcommand(commandName, commandArgs) {
|
|
122
|
+
const subcommand = commandArgs.find((argument) => !argument.startsWith("-"));
|
|
123
|
+
if (!subcommand) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (commandName === "coderoom") {
|
|
127
|
+
const knownCoderoomSubcommands = /* @__PURE__ */ new Set(["share", "join"]);
|
|
128
|
+
if (!knownCoderoomSubcommands.has(subcommand)) {
|
|
129
|
+
throw new Error(`Unknown coderoom command "${subcommand}". Use one of: share, join.`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (commandName === "knowledges") {
|
|
133
|
+
const knownKnowledgesSubcommands = /* @__PURE__ */ new Set([
|
|
134
|
+
"status",
|
|
135
|
+
"audiences",
|
|
136
|
+
"search",
|
|
137
|
+
"list",
|
|
138
|
+
"files",
|
|
139
|
+
"read",
|
|
140
|
+
"grep",
|
|
141
|
+
"glob",
|
|
142
|
+
"help"
|
|
143
|
+
]);
|
|
144
|
+
if (!knownKnowledgesSubcommands.has(subcommand)) {
|
|
145
|
+
throw new Error(
|
|
146
|
+
`Unknown knowledges command "${subcommand}". Use one of: status, audiences, search, list, files, read, grep, glob.`
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
89
150
|
}
|
|
90
151
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/cli/help.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport process from \"node:process\";\n\nimport Pastel from \"pastel\";\n\nimport { printMarkdownHelpIfRequested } from \"./cli/help.js\";\nimport { packageVersion } from \"./shared/config.js\";\nimport { formatError } from \"./shared/output.js\";\n\
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/cli/help.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport process from \"node:process\";\n\nimport Pastel from \"pastel\";\n\nimport { printMarkdownHelpIfRequested } from \"./cli/help.js\";\nimport { packageVersion, parseOutputFormat } from \"./shared/config.js\";\nimport { formatError } from \"./shared/output.js\";\n\ntry {\n const normalizedArgv = normalizeGlobalOptions(process.argv);\n\n if (printMarkdownHelpIfRequested(normalizedArgv)) {\n process.exit(0);\n }\n\n guardKnownCommand(normalizedArgv);\n\n const app = new Pastel({\n importMeta: import.meta,\n name: \"cngkit\",\n version: packageVersion,\n description: \"Opinionated Curly.ng CLI kit for Coderoom collaboration and website tooling.\",\n });\n\n await app.run(normalizedArgv);\n} catch (error) {\n console.error(formatError(error));\n process.exitCode = 1;\n}\n\nfunction normalizeGlobalOptions(argv: string[]): string[] {\n const normalizedArgv = [...argv];\n\n for (let index = 2; index < normalizedArgv.length; index += 1) {\n const argument = normalizedArgv[index];\n\n if (argument === \"--format\") {\n const value = normalizedArgv[index + 1];\n if (!value || value.startsWith(\"-\")) {\n throw new Error(\"Missing value for --format\");\n }\n\n process.env.CNGKIT_FORMAT = parseOutputFormat(value);\n normalizedArgv.splice(index, 2);\n index -= 1;\n continue;\n }\n\n if (argument.startsWith(\"--format=\")) {\n process.env.CNGKIT_FORMAT = parseOutputFormat(argument.slice(\"--format=\".length));\n normalizedArgv.splice(index, 1);\n index -= 1;\n continue;\n }\n\n if (argument === \"--no-color\" || argument === \"--no-colors\") {\n process.env.CNGKIT_COLOR = \"never\";\n process.env.CNGKIT_NO_COLOR = \"1\";\n normalizedArgv.splice(index, 1);\n index -= 1;\n continue;\n }\n\n if (argument === \"--color\") {\n process.env.CNGKIT_COLOR = \"always\";\n normalizedArgv.splice(index, 1);\n index -= 1;\n continue;\n }\n\n if (argument.startsWith(\"--color=\")) {\n const colorMode = argument.slice(\"--color=\".length);\n process.env.CNGKIT_COLOR = colorMode === \"false\" || colorMode === \"never\" ? \"never\" : \"always\";\n normalizedArgv.splice(index, 1);\n index -= 1;\n }\n }\n\n return normalizedArgv;\n}\n\nfunction guardKnownCommand(argv: string[]): void {\n const commandName = argv[2];\n if (commandName === undefined || commandName.startsWith(\"-\")) {\n return;\n }\n\n const knownCommands = new Set([\"help\", \"login\", \"coderoom\", \"scrub\", \"transcripts\", \"knowledges\"]);\n if (!knownCommands.has(commandName)) {\n throw new Error(`Unknown command \"${commandName}\". Run cngkit --help for available commands.`);\n }\n\n guardKnownSubcommand(commandName, argv.slice(3));\n}\n\nfunction guardKnownSubcommand(commandName: string, commandArgs: string[]): void {\n const subcommand = commandArgs.find((argument) => !argument.startsWith(\"-\"));\n if (!subcommand) {\n return;\n }\n\n if (commandName === \"coderoom\") {\n const knownCoderoomSubcommands = new Set([\"share\", \"join\"]);\n if (!knownCoderoomSubcommands.has(subcommand)) {\n throw new Error(`Unknown coderoom command \"${subcommand}\". Use one of: share, join.`);\n }\n }\n\n if (commandName === \"knowledges\") {\n const knownKnowledgesSubcommands = new Set([\n \"status\",\n \"audiences\",\n \"search\",\n \"list\",\n \"files\",\n \"read\",\n \"grep\",\n \"glob\",\n \"help\",\n ]);\n if (!knownKnowledgesSubcommands.has(subcommand)) {\n throw new Error(\n `Unknown knowledges command \"${subcommand}\". Use one of: status, audiences, search, list, files, read, grep, glob.`\n );\n }\n }\n}\n","import { formatCngkitHelp, formatKnowledgesHelp } from \"./help-specs.js\";\nimport { consoleOutput, type CommandOutput } from \"../shared/output.js\";\n\nexport function printMarkdownHelpIfRequested(\n argv: string[],\n output: CommandOutput = consoleOutput\n): boolean {\n const commandName = argv[2];\n\n if (commandName === undefined || commandName === \"--help\" || commandName === \"-h\") {\n output.markdown(formatCngkitHelp());\n return true;\n }\n\n if (commandName === \"help\") {\n const [topicName, subtopicName] = argv.slice(3);\n const topic =\n (topicName === \"knowledges\" || topicName === \"coderoom\") && subtopicName\n ? `${topicName}-${subtopicName}`\n : topicName;\n output.markdown(formatCngkitHelp(topic));\n return true;\n }\n\n const commandArgs = argv.slice(3);\n const helpIndex = commandArgs.findIndex((argument) => argument === \"--help\" || argument === \"-h\");\n\n if (helpIndex < 0) {\n return false;\n }\n\n if (commandName === \"knowledges\") {\n const topic = commandArgs.find((argument, index) => index !== helpIndex && !argument.startsWith(\"-\"));\n output.markdown(formatKnowledgesHelp(topic));\n return true;\n }\n\n if (commandName === \"coderoom\") {\n const topic = commandArgs.find((argument, index) => index !== helpIndex && !argument.startsWith(\"-\"));\n output.markdown(formatCngkitHelp(topic ? `coderoom-${topic}` : \"coderoom\"));\n return true;\n }\n\n output.markdown(formatCngkitHelp(commandName));\n return true;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
formatCngkitHelp
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-BL3XMLIH.js";
|
|
4
4
|
import {
|
|
5
5
|
GlobalOptionsSchema
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-VCWNKNUE.js";
|
|
7
7
|
import {
|
|
8
8
|
CommandRunner
|
|
9
|
-
} from "../../chunk-
|
|
10
|
-
import "../../chunk-
|
|
9
|
+
} from "../../chunk-GT2MTS6E.js";
|
|
10
|
+
import "../../chunk-WYJTGGMN.js";
|
|
11
11
|
import "../../chunk-PZ5AY32C.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/coderoom/index.tsx
|