cngkit 1.1.18 → 1.1.20
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/LICENSE +1 -1
- package/README.md +94 -19
- package/dist/chunk-CIZBVLN5.js +35 -0
- package/dist/chunk-CIZBVLN5.js.map +1 -0
- package/dist/{chunk-IB5B3BLY.js → chunk-E2GLGGKO.js} +16 -4
- package/dist/chunk-E2GLGGKO.js.map +1 -0
- package/dist/chunk-MRXGD6TC.js +42 -0
- package/dist/chunk-MRXGD6TC.js.map +1 -0
- package/dist/{chunk-ZA4YOWPB.js → chunk-NGEWD4BW.js} +2 -1
- package/dist/chunk-NODJM6SH.js +658 -0
- package/dist/chunk-NODJM6SH.js.map +1 -0
- package/dist/chunk-SKK2XLRZ.js +1590 -0
- package/dist/chunk-SKK2XLRZ.js.map +1 -0
- package/dist/chunk-SMTQ3W3F.js +271 -0
- package/dist/chunk-SMTQ3W3F.js.map +1 -0
- package/dist/{chunk-FJ34NVQ4.js → chunk-WDI43VPW.js} +578 -88
- package/dist/chunk-WDI43VPW.js.map +1 -0
- package/dist/cli.js +107 -27
- package/dist/cli.js.map +1 -1
- package/dist/commands/coderoom/index.js +6 -6
- package/dist/commands/coderoom/index.js.map +1 -1
- package/dist/commands/coderoom/join.js +5 -5
- package/dist/commands/coderoom/share.js +5 -5
- package/dist/commands/hookify/index.js +6 -6
- package/dist/commands/hookify/index.js.map +1 -1
- package/dist/commands/hookify/ingest.js +52 -13
- package/dist/commands/hookify/ingest.js.map +1 -1
- package/dist/commands/hooks/index.js +25 -0
- package/dist/commands/hooks/index.js.map +1 -0
- package/dist/commands/hooks/install.js +40 -0
- package/dist/commands/hooks/install.js.map +1 -0
- package/dist/commands/hooks/uninstall.js +40 -0
- package/dist/commands/hooks/uninstall.js.map +1 -0
- package/dist/commands/index.js +5 -5
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/knowledges/audiences.js +6 -6
- package/dist/commands/knowledges/cat.js +31 -0
- package/dist/commands/knowledges/cat.js.map +1 -0
- package/dist/commands/knowledges/files.js +6 -6
- package/dist/commands/knowledges/find.js +66 -0
- package/dist/commands/knowledges/find.js.map +1 -0
- package/dist/commands/knowledges/glob.js +6 -6
- package/dist/commands/knowledges/grep.js +6 -6
- package/dist/commands/knowledges/head.js +41 -0
- package/dist/commands/knowledges/head.js.map +1 -0
- package/dist/commands/knowledges/index.js +6 -6
- package/dist/commands/knowledges/index.js.map +1 -1
- package/dist/commands/knowledges/list.js +7 -7
- package/dist/commands/knowledges/list.js.map +1 -1
- package/dist/commands/knowledges/ls.js +16 -7
- package/dist/commands/knowledges/ls.js.map +1 -1
- package/dist/commands/knowledges/read.js +6 -6
- package/dist/commands/knowledges/realpath.js +31 -0
- package/dist/commands/knowledges/realpath.js.map +1 -0
- package/dist/commands/knowledges/search.js +6 -6
- package/dist/commands/knowledges/stat.js +31 -0
- package/dist/commands/knowledges/stat.js.map +1 -0
- package/dist/commands/knowledges/status.js +6 -6
- package/dist/commands/knowledges/tail.js +41 -0
- package/dist/commands/knowledges/tail.js.map +1 -0
- package/dist/commands/knowledges/tree.js +46 -0
- package/dist/commands/knowledges/tree.js.map +1 -0
- package/dist/commands/login.js +4 -4
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/scrub.js +38 -15
- package/dist/commands/scrub.js.map +1 -1
- package/dist/commands/transcripts.js +44 -24
- package/dist/commands/transcripts.js.map +1 -1
- package/package.json +3 -4
- package/dist/chunk-C7HFDK4S.js +0 -393
- package/dist/chunk-C7HFDK4S.js.map +0 -1
- package/dist/chunk-CBIVTEZP.js +0 -222
- package/dist/chunk-CBIVTEZP.js.map +0 -1
- package/dist/chunk-FJ34NVQ4.js.map +0 -1
- package/dist/chunk-IB5B3BLY.js.map +0 -1
- package/dist/chunk-KSW6QT5Q.js +0 -628
- package/dist/chunk-KSW6QT5Q.js.map +0 -1
- package/dist/chunk-TWQDLZ6F.js +0 -26
- package/dist/chunk-TWQDLZ6F.js.map +0 -1
- /package/dist/{chunk-ZA4YOWPB.js.map → chunk-NGEWD4BW.js.map} +0 -0
package/dist/cli.js
CHANGED
|
@@ -1,31 +1,52 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from "./chunk-
|
|
3
|
+
renderCngkitHelp,
|
|
4
|
+
renderKnowledgesHelp
|
|
5
|
+
} from "./chunk-SKK2XLRZ.js";
|
|
6
6
|
import {
|
|
7
|
-
consoleOutput,
|
|
8
7
|
formatError,
|
|
9
8
|
packageVersion,
|
|
10
9
|
parseOutputFormat
|
|
11
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-WDI43VPW.js";
|
|
12
11
|
import "./chunk-PZ5AY32C.js";
|
|
13
12
|
|
|
14
13
|
// src/cli.ts
|
|
15
|
-
import
|
|
14
|
+
import process2 from "process";
|
|
15
|
+
import { createElement as createElement2 } from "react";
|
|
16
|
+
import { Text } from "ink";
|
|
16
17
|
import Pastel from "pastel";
|
|
17
18
|
|
|
19
|
+
// src/cli/render-once.ts
|
|
20
|
+
import process from "process";
|
|
21
|
+
import { createElement, useEffect } from "react";
|
|
22
|
+
import { render, useApp } from "ink";
|
|
23
|
+
async function renderOnce(element, options) {
|
|
24
|
+
const instance = render(createElement(ExitAfterFirstRender, { element }), {
|
|
25
|
+
stdin: process.stdin,
|
|
26
|
+
stdout: options?.stdout ?? process.stdout,
|
|
27
|
+
stderr: process.stderr
|
|
28
|
+
});
|
|
29
|
+
await instance.waitUntilExit();
|
|
30
|
+
}
|
|
31
|
+
function ExitAfterFirstRender({ element }) {
|
|
32
|
+
const { exit } = useApp();
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
queueMicrotask(() => exit());
|
|
35
|
+
}, [exit]);
|
|
36
|
+
return element;
|
|
37
|
+
}
|
|
38
|
+
|
|
18
39
|
// src/cli/help.ts
|
|
19
|
-
function
|
|
40
|
+
async function printHelpIfRequested(argv, output) {
|
|
20
41
|
const commandName = argv[2];
|
|
21
42
|
if (commandName === void 0 || commandName === "--help" || commandName === "-h") {
|
|
22
|
-
|
|
43
|
+
await printHelpComponent(renderCngkitHelp(), output);
|
|
23
44
|
return true;
|
|
24
45
|
}
|
|
25
46
|
if (commandName === "help") {
|
|
26
47
|
const [topicName, subtopicName] = argv.slice(3);
|
|
27
|
-
const topic = (topicName === "knowledges" || topicName === "coderoom" || topicName === "hookify") && subtopicName ? `${topicName}-${subtopicName}` : topicName;
|
|
28
|
-
|
|
48
|
+
const topic = (topicName === "knowledges" || topicName === "coderoom" || topicName === "hookify" || topicName === "hooks") && subtopicName ? `${topicName}-${subtopicName}` : topicName;
|
|
49
|
+
await printHelpComponent(renderCngkitHelp(topic), output);
|
|
29
50
|
return true;
|
|
30
51
|
}
|
|
31
52
|
const commandArgs = argv.slice(3);
|
|
@@ -37,44 +58,69 @@ function printMarkdownHelpIfRequested(argv, output = consoleOutput) {
|
|
|
37
58
|
const topic = commandArgs.find(
|
|
38
59
|
(argument, index) => index !== helpIndex && !argument.startsWith("-")
|
|
39
60
|
);
|
|
40
|
-
|
|
61
|
+
await printHelpComponent(renderKnowledgesHelp(topic), output);
|
|
41
62
|
return true;
|
|
42
63
|
}
|
|
43
64
|
if (commandName === "coderoom") {
|
|
44
65
|
const topic = commandArgs.find(
|
|
45
66
|
(argument, index) => index !== helpIndex && !argument.startsWith("-")
|
|
46
67
|
);
|
|
47
|
-
|
|
68
|
+
await printHelpComponent(renderCngkitHelp(topic ? `coderoom-${topic}` : "coderoom"), output);
|
|
48
69
|
return true;
|
|
49
70
|
}
|
|
50
71
|
if (commandName === "hookify") {
|
|
51
72
|
const topic = commandArgs.find(
|
|
52
73
|
(argument, index) => index !== helpIndex && !argument.startsWith("-")
|
|
53
74
|
);
|
|
54
|
-
|
|
75
|
+
await printHelpComponent(renderCngkitHelp(topic ? `hookify-${topic}` : "hookify"), output);
|
|
55
76
|
return true;
|
|
56
77
|
}
|
|
57
|
-
|
|
78
|
+
if (commandName === "hooks") {
|
|
79
|
+
const topic = commandArgs.find(
|
|
80
|
+
(argument, index) => index !== helpIndex && !argument.startsWith("-")
|
|
81
|
+
);
|
|
82
|
+
await printHelpComponent(renderCngkitHelp(topic ? `hooks-${topic}` : "hooks"), output);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
await printHelpComponent(renderCngkitHelp(commandName), output);
|
|
58
86
|
return true;
|
|
59
87
|
}
|
|
88
|
+
async function printHelpComponent(element, output) {
|
|
89
|
+
if (output) {
|
|
90
|
+
output.component(element);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
await renderOnce(element);
|
|
94
|
+
}
|
|
60
95
|
|
|
61
96
|
// src/cli.ts
|
|
62
97
|
try {
|
|
63
|
-
const normalizedArgv = normalizeGlobalOptions(
|
|
64
|
-
if (
|
|
65
|
-
|
|
98
|
+
const normalizedArgv = normalizeGlobalOptions(process2.argv);
|
|
99
|
+
if (await printHelpIfRequested(normalizedArgv)) {
|
|
100
|
+
process2.exit(0);
|
|
66
101
|
}
|
|
67
102
|
guardKnownCommand(normalizedArgv);
|
|
68
103
|
const app = new Pastel({
|
|
69
104
|
importMeta: import.meta,
|
|
70
105
|
name: "cngkit",
|
|
71
106
|
version: packageVersion,
|
|
72
|
-
description: "Opinionated
|
|
107
|
+
description: "Opinionated CNG CLI kit for Coderoom collaboration and operator workflows."
|
|
73
108
|
});
|
|
74
109
|
await app.run(normalizedArgv);
|
|
75
110
|
} catch (error) {
|
|
76
|
-
|
|
77
|
-
|
|
111
|
+
await renderOnce(
|
|
112
|
+
createElement2(
|
|
113
|
+
Text,
|
|
114
|
+
{
|
|
115
|
+
bold: true,
|
|
116
|
+
color: "red",
|
|
117
|
+
wrap: "wrap"
|
|
118
|
+
},
|
|
119
|
+
formatError(error)
|
|
120
|
+
),
|
|
121
|
+
{ stdout: process2.stderr }
|
|
122
|
+
);
|
|
123
|
+
process2.exitCode = 1;
|
|
78
124
|
}
|
|
79
125
|
function normalizeGlobalOptions(argv) {
|
|
80
126
|
const normalizedArgv = [...argv];
|
|
@@ -85,39 +131,58 @@ function normalizeGlobalOptions(argv) {
|
|
|
85
131
|
if (!value || value.startsWith("-")) {
|
|
86
132
|
throw new Error("Missing value for --format");
|
|
87
133
|
}
|
|
88
|
-
|
|
134
|
+
process2.env.CNGKIT_FORMAT = parseOutputFormat(value);
|
|
89
135
|
normalizedArgv.splice(index, 2);
|
|
90
136
|
index -= 1;
|
|
91
137
|
continue;
|
|
92
138
|
}
|
|
93
139
|
if (argument.startsWith("--format=")) {
|
|
94
|
-
|
|
140
|
+
process2.env.CNGKIT_FORMAT = parseOutputFormat(argument.slice("--format=".length));
|
|
95
141
|
normalizedArgv.splice(index, 1);
|
|
96
142
|
index -= 1;
|
|
97
143
|
continue;
|
|
98
144
|
}
|
|
99
145
|
if (argument === "--no-color" || argument === "--no-colors") {
|
|
100
|
-
|
|
101
|
-
|
|
146
|
+
process2.env.CNGKIT_COLOR = "never";
|
|
147
|
+
process2.env.CNGKIT_NO_COLOR = "1";
|
|
102
148
|
normalizedArgv.splice(index, 1);
|
|
103
149
|
index -= 1;
|
|
104
150
|
continue;
|
|
105
151
|
}
|
|
106
152
|
if (argument === "--color") {
|
|
107
|
-
|
|
153
|
+
process2.env.CNGKIT_COLOR = "always";
|
|
108
154
|
normalizedArgv.splice(index, 1);
|
|
109
155
|
index -= 1;
|
|
110
156
|
continue;
|
|
111
157
|
}
|
|
112
158
|
if (argument.startsWith("--color=")) {
|
|
113
159
|
const colorMode = argument.slice("--color=".length);
|
|
114
|
-
|
|
160
|
+
process2.env.CNGKIT_COLOR = colorMode === "false" || colorMode === "never" ? "never" : "always";
|
|
115
161
|
normalizedArgv.splice(index, 1);
|
|
116
162
|
index -= 1;
|
|
117
163
|
}
|
|
118
164
|
}
|
|
165
|
+
normalizeKnowledgesFindOptions(normalizedArgv);
|
|
119
166
|
return normalizedArgv;
|
|
120
167
|
}
|
|
168
|
+
function normalizeKnowledgesFindOptions(argv) {
|
|
169
|
+
if (argv[2] !== "knowledges" || argv[3] !== "find") {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
for (let index = 4; index < argv.length; index += 1) {
|
|
173
|
+
if (argv[index] === "-name") {
|
|
174
|
+
argv[index] = "--name";
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
if (argv[index] === "-type") {
|
|
178
|
+
argv[index] = "--type";
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (argv[index] === "-maxdepth") {
|
|
182
|
+
argv[index] = "--max-depth";
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
121
186
|
function guardKnownCommand(argv) {
|
|
122
187
|
const commandName = argv[2];
|
|
123
188
|
if (commandName === void 0 || commandName.startsWith("-")) {
|
|
@@ -130,6 +195,7 @@ function guardKnownCommand(argv) {
|
|
|
130
195
|
"scrub",
|
|
131
196
|
"transcripts",
|
|
132
197
|
"knowledges",
|
|
198
|
+
"hooks",
|
|
133
199
|
"hookify"
|
|
134
200
|
]);
|
|
135
201
|
if (!knownCommands.has(commandName)) {
|
|
@@ -156,13 +222,21 @@ function guardKnownSubcommand(commandName, commandArgs) {
|
|
|
156
222
|
"list",
|
|
157
223
|
"files",
|
|
158
224
|
"read",
|
|
225
|
+
"cat",
|
|
226
|
+
"head",
|
|
227
|
+
"tail",
|
|
159
228
|
"grep",
|
|
160
229
|
"glob",
|
|
230
|
+
"ls",
|
|
231
|
+
"tree",
|
|
232
|
+
"find",
|
|
233
|
+
"stat",
|
|
234
|
+
"realpath",
|
|
161
235
|
"help"
|
|
162
236
|
]);
|
|
163
237
|
if (!knownKnowledgesSubcommands.has(subcommand)) {
|
|
164
238
|
throw new Error(
|
|
165
|
-
`Unknown knowledges command "${subcommand}". Use one of: status, audiences, search, list, files, read, grep, glob.`
|
|
239
|
+
`Unknown knowledges command "${subcommand}". Use one of: status, audiences, search, list, files, read, cat, head, tail, grep, glob, ls, tree, find, stat, realpath.`
|
|
166
240
|
);
|
|
167
241
|
}
|
|
168
242
|
}
|
|
@@ -172,5 +246,11 @@ function guardKnownSubcommand(commandName, commandArgs) {
|
|
|
172
246
|
throw new Error(`Unknown hookify command "${subcommand}". Use one of: ingest.`);
|
|
173
247
|
}
|
|
174
248
|
}
|
|
249
|
+
if (commandName === "hooks") {
|
|
250
|
+
const knownHooksSubcommands = /* @__PURE__ */ new Set(["install", "uninstall"]);
|
|
251
|
+
if (!knownHooksSubcommands.has(subcommand)) {
|
|
252
|
+
throw new Error(`Unknown hooks command "${subcommand}". Use one of: install, uninstall.`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
175
255
|
}
|
|
176
256
|
//# 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, 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 =\n 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([\n \"help\",\n \"login\",\n \"coderoom\",\n \"scrub\",\n \"transcripts\",\n \"knowledges\",\n \"hookify\",\n ]);\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 if (commandName === \"hookify\") {\n const knownHookifySubcommands = new Set([\"ingest\"]);\n if (!knownHookifySubcommands.has(subcommand)) {\n throw new Error(`Unknown hookify command \"${subcommand}\". Use one of: ingest.`);\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\" || topicName === \"hookify\") &&\n 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(\n (argument, index) => index !== helpIndex && !argument.startsWith(\"-\")\n );\n output.markdown(formatKnowledgesHelp(topic));\n return true;\n }\n\n if (commandName === \"coderoom\") {\n const topic = commandArgs.find(\n (argument, index) => index !== helpIndex && !argument.startsWith(\"-\")\n );\n output.markdown(formatCngkitHelp(topic ? `coderoom-${topic}` : \"coderoom\"));\n return true;\n }\n\n if (commandName === \"hookify\") {\n const topic = commandArgs.find(\n (argument, index) => index !== helpIndex && !argument.startsWith(\"-\")\n );\n output.markdown(formatCngkitHelp(topic ? `hookify-${topic}` : \"hookify\"));\n return true;\n }\n\n output.markdown(formatCngkitHelp(commandName));\n return true;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/cli/render-once.ts","../src/cli/help.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport process from \"node:process\";\nimport { createElement } from \"react\";\nimport { Text } from \"ink\";\n\nimport Pastel from \"pastel\";\n\nimport { printHelpIfRequested } from \"./cli/help.js\";\nimport { renderOnce } from \"./cli/render-once.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 (await printHelpIfRequested(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 CNG CLI kit for Coderoom collaboration and operator workflows.\",\n });\n\n await app.run(normalizedArgv);\n} catch (error) {\n await renderOnce(\n createElement(\n Text,\n {\n bold: true,\n color: \"red\",\n wrap: \"wrap\",\n },\n formatError(error)\n ),\n { stdout: process.stderr }\n );\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 =\n colorMode === \"false\" || colorMode === \"never\" ? \"never\" : \"always\";\n normalizedArgv.splice(index, 1);\n index -= 1;\n }\n }\n\n normalizeKnowledgesFindOptions(normalizedArgv);\n return normalizedArgv;\n}\n\nfunction normalizeKnowledgesFindOptions(argv: string[]): void {\n if (argv[2] !== \"knowledges\" || argv[3] !== \"find\") {\n return;\n }\n\n for (let index = 4; index < argv.length; index += 1) {\n if (argv[index] === \"-name\") {\n argv[index] = \"--name\";\n continue;\n }\n\n if (argv[index] === \"-type\") {\n argv[index] = \"--type\";\n continue;\n }\n\n if (argv[index] === \"-maxdepth\") {\n argv[index] = \"--max-depth\";\n }\n }\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([\n \"help\",\n \"login\",\n \"coderoom\",\n \"scrub\",\n \"transcripts\",\n \"knowledges\",\n \"hooks\",\n \"hookify\",\n ]);\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 \"cat\",\n \"head\",\n \"tail\",\n \"grep\",\n \"glob\",\n \"ls\",\n \"tree\",\n \"find\",\n \"stat\",\n \"realpath\",\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, cat, head, tail, grep, glob, ls, tree, find, stat, realpath.`\n );\n }\n }\n\n if (commandName === \"hookify\") {\n const knownHookifySubcommands = new Set([\"ingest\"]);\n if (!knownHookifySubcommands.has(subcommand)) {\n throw new Error(`Unknown hookify command \"${subcommand}\". Use one of: ingest.`);\n }\n }\n\n if (commandName === \"hooks\") {\n const knownHooksSubcommands = new Set([\"install\", \"uninstall\"]);\n if (!knownHooksSubcommands.has(subcommand)) {\n throw new Error(`Unknown hooks command \"${subcommand}\". Use one of: install, uninstall.`);\n }\n }\n}\n","import process from \"node:process\";\nimport { createElement, useEffect, type ReactElement } from \"react\";\nimport { render, useApp } from \"ink\";\n\ntype OutputStream = NodeJS.WriteStream;\n\nexport async function renderOnce(\n element: ReactElement,\n options?: {\n readonly stdout?: OutputStream;\n }\n): Promise<void> {\n const instance = render(createElement(ExitAfterFirstRender, { element }), {\n stdin: process.stdin,\n stdout: options?.stdout ?? process.stdout,\n stderr: process.stderr,\n });\n await instance.waitUntilExit();\n}\n\nfunction ExitAfterFirstRender({ element }: { readonly element: ReactElement }) {\n const { exit } = useApp();\n\n useEffect(() => {\n queueMicrotask(() => exit());\n }, [exit]);\n\n return element;\n}\n","import type { ReactElement } from \"react\";\n\nimport { renderCngkitHelp, renderKnowledgesHelp } from \"./help-specs.js\";\nimport { renderOnce } from \"./render-once.js\";\nimport type { CommandOutput } from \"../shared/output.js\";\n\nexport async function printHelpIfRequested(\n argv: string[],\n output?: CommandOutput\n): Promise<boolean> {\n const commandName = argv[2];\n\n if (commandName === undefined || commandName === \"--help\" || commandName === \"-h\") {\n await printHelpComponent(renderCngkitHelp(), output);\n return true;\n }\n\n if (commandName === \"help\") {\n const [topicName, subtopicName] = argv.slice(3);\n const topic =\n (topicName === \"knowledges\" ||\n topicName === \"coderoom\" ||\n topicName === \"hookify\" ||\n topicName === \"hooks\") &&\n subtopicName\n ? `${topicName}-${subtopicName}`\n : topicName;\n await printHelpComponent(renderCngkitHelp(topic), output);\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(\n (argument, index) => index !== helpIndex && !argument.startsWith(\"-\")\n );\n await printHelpComponent(renderKnowledgesHelp(topic), output);\n return true;\n }\n\n if (commandName === \"coderoom\") {\n const topic = commandArgs.find(\n (argument, index) => index !== helpIndex && !argument.startsWith(\"-\")\n );\n await printHelpComponent(renderCngkitHelp(topic ? `coderoom-${topic}` : \"coderoom\"), output);\n return true;\n }\n\n if (commandName === \"hookify\") {\n const topic = commandArgs.find(\n (argument, index) => index !== helpIndex && !argument.startsWith(\"-\")\n );\n await printHelpComponent(renderCngkitHelp(topic ? `hookify-${topic}` : \"hookify\"), output);\n return true;\n }\n\n if (commandName === \"hooks\") {\n const topic = commandArgs.find(\n (argument, index) => index !== helpIndex && !argument.startsWith(\"-\")\n );\n await printHelpComponent(renderCngkitHelp(topic ? `hooks-${topic}` : \"hooks\"), output);\n return true;\n }\n\n await printHelpComponent(renderCngkitHelp(commandName), output);\n return true;\n}\n\nasync function printHelpComponent(element: ReactElement, output: CommandOutput | undefined): Promise<void> {\n if (output) {\n output.component(element);\n return;\n }\n\n await renderOnce(element);\n}\n"],"mappings":";;;;;;;;;;;;;AAEA,OAAOA,cAAa;AACpB,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,YAAY;AAErB,OAAO,YAAY;;;ACNnB,OAAO,aAAa;AACpB,SAAS,eAAe,iBAAoC;AAC5D,SAAS,QAAQ,cAAc;AAI/B,eAAsB,WACpB,SACA,SAGe;AACf,QAAM,WAAW,OAAO,cAAc,sBAAsB,EAAE,QAAQ,CAAC,GAAG;AAAA,IACxE,OAAO,QAAQ;AAAA,IACf,QAAQ,SAAS,UAAU,QAAQ;AAAA,IACnC,QAAQ,QAAQ;AAAA,EAClB,CAAC;AACD,QAAM,SAAS,cAAc;AAC/B;AAEA,SAAS,qBAAqB,EAAE,QAAQ,GAAuC;AAC7E,QAAM,EAAE,KAAK,IAAI,OAAO;AAExB,YAAU,MAAM;AACd,mBAAe,MAAM,KAAK,CAAC;AAAA,EAC7B,GAAG,CAAC,IAAI,CAAC;AAET,SAAO;AACT;;;ACtBA,eAAsB,qBACpB,MACA,QACkB;AAClB,QAAM,cAAc,KAAK,CAAC;AAE1B,MAAI,gBAAgB,UAAa,gBAAgB,YAAY,gBAAgB,MAAM;AACjF,UAAM,mBAAmB,iBAAiB,GAAG,MAAM;AACnD,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,QAAQ;AAC1B,UAAM,CAAC,WAAW,YAAY,IAAI,KAAK,MAAM,CAAC;AAC9C,UAAM,SACH,cAAc,gBACb,cAAc,cACd,cAAc,aACd,cAAc,YAChB,eACI,GAAG,SAAS,IAAI,YAAY,KAC5B;AACN,UAAM,mBAAmB,iBAAiB,KAAK,GAAG,MAAM;AACxD,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,KAAK,MAAM,CAAC;AAChC,QAAM,YAAY,YAAY,UAAU,CAAC,aAAa,aAAa,YAAY,aAAa,IAAI;AAEhG,MAAI,YAAY,GAAG;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,cAAc;AAChC,UAAM,QAAQ,YAAY;AAAA,MACxB,CAAC,UAAU,UAAU,UAAU,aAAa,CAAC,SAAS,WAAW,GAAG;AAAA,IACtE;AACA,UAAM,mBAAmB,qBAAqB,KAAK,GAAG,MAAM;AAC5D,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,YAAY;AAC9B,UAAM,QAAQ,YAAY;AAAA,MACxB,CAAC,UAAU,UAAU,UAAU,aAAa,CAAC,SAAS,WAAW,GAAG;AAAA,IACtE;AACA,UAAM,mBAAmB,iBAAiB,QAAQ,YAAY,KAAK,KAAK,UAAU,GAAG,MAAM;AAC3F,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,WAAW;AAC7B,UAAM,QAAQ,YAAY;AAAA,MACxB,CAAC,UAAU,UAAU,UAAU,aAAa,CAAC,SAAS,WAAW,GAAG;AAAA,IACtE;AACA,UAAM,mBAAmB,iBAAiB,QAAQ,WAAW,KAAK,KAAK,SAAS,GAAG,MAAM;AACzF,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,SAAS;AAC3B,UAAM,QAAQ,YAAY;AAAA,MACxB,CAAC,UAAU,UAAU,UAAU,aAAa,CAAC,SAAS,WAAW,GAAG;AAAA,IACtE;AACA,UAAM,mBAAmB,iBAAiB,QAAQ,SAAS,KAAK,KAAK,OAAO,GAAG,MAAM;AACrF,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,iBAAiB,WAAW,GAAG,MAAM;AAC9D,SAAO;AACT;AAEA,eAAe,mBAAmB,SAAuB,QAAkD;AACzG,MAAI,QAAQ;AACV,WAAO,UAAU,OAAO;AACxB;AAAA,EACF;AAEA,QAAM,WAAW,OAAO;AAC1B;;;AFpEA,IAAI;AACF,QAAM,iBAAiB,uBAAuBC,SAAQ,IAAI;AAE1D,MAAI,MAAM,qBAAqB,cAAc,GAAG;AAC9C,IAAAA,SAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,oBAAkB,cAAc;AAEhC,QAAM,MAAM,IAAI,OAAO;AAAA,IACrB,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf,CAAC;AAED,QAAM,IAAI,IAAI,cAAc;AAC9B,SAAS,OAAO;AACd,QAAM;AAAA,IACJC;AAAA,MACE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AAAA,MACA,YAAY,KAAK;AAAA,IACnB;AAAA,IACA,EAAE,QAAQD,SAAQ,OAAO;AAAA,EAC3B;AACA,EAAAA,SAAQ,WAAW;AACrB;AAEA,SAAS,uBAAuB,MAA0B;AACxD,QAAM,iBAAiB,CAAC,GAAG,IAAI;AAE/B,WAAS,QAAQ,GAAG,QAAQ,eAAe,QAAQ,SAAS,GAAG;AAC7D,UAAM,WAAW,eAAe,KAAK;AAErC,QAAI,aAAa,YAAY;AAC3B,YAAM,QAAQ,eAAe,QAAQ,CAAC;AACtC,UAAI,CAAC,SAAS,MAAM,WAAW,GAAG,GAAG;AACnC,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAC9C;AAEA,MAAAA,SAAQ,IAAI,gBAAgB,kBAAkB,KAAK;AACnD,qBAAe,OAAO,OAAO,CAAC;AAC9B,eAAS;AACT;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,WAAW,GAAG;AACpC,MAAAA,SAAQ,IAAI,gBAAgB,kBAAkB,SAAS,MAAM,YAAY,MAAM,CAAC;AAChF,qBAAe,OAAO,OAAO,CAAC;AAC9B,eAAS;AACT;AAAA,IACF;AAEA,QAAI,aAAa,gBAAgB,aAAa,eAAe;AAC3D,MAAAA,SAAQ,IAAI,eAAe;AAC3B,MAAAA,SAAQ,IAAI,kBAAkB;AAC9B,qBAAe,OAAO,OAAO,CAAC;AAC9B,eAAS;AACT;AAAA,IACF;AAEA,QAAI,aAAa,WAAW;AAC1B,MAAAA,SAAQ,IAAI,eAAe;AAC3B,qBAAe,OAAO,OAAO,CAAC;AAC9B,eAAS;AACT;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,UAAU,GAAG;AACnC,YAAM,YAAY,SAAS,MAAM,WAAW,MAAM;AAClD,MAAAA,SAAQ,IAAI,eACV,cAAc,WAAW,cAAc,UAAU,UAAU;AAC7D,qBAAe,OAAO,OAAO,CAAC;AAC9B,eAAS;AAAA,IACX;AAAA,EACF;AAEA,iCAA+B,cAAc;AAC7C,SAAO;AACT;AAEA,SAAS,+BAA+B,MAAsB;AAC5D,MAAI,KAAK,CAAC,MAAM,gBAAgB,KAAK,CAAC,MAAM,QAAQ;AAClD;AAAA,EACF;AAEA,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,QAAI,KAAK,KAAK,MAAM,SAAS;AAC3B,WAAK,KAAK,IAAI;AACd;AAAA,IACF;AAEA,QAAI,KAAK,KAAK,MAAM,SAAS;AAC3B,WAAK,KAAK,IAAI;AACd;AAAA,IACF;AAEA,QAAI,KAAK,KAAK,MAAM,aAAa;AAC/B,WAAK,KAAK,IAAI;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,MAAsB;AAC/C,QAAM,cAAc,KAAK,CAAC;AAC1B,MAAI,gBAAgB,UAAa,YAAY,WAAW,GAAG,GAAG;AAC5D;AAAA,EACF;AAEA,QAAM,gBAAgB,oBAAI,IAAI;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,CAAC,cAAc,IAAI,WAAW,GAAG;AACnC,UAAM,IAAI,MAAM,oBAAoB,WAAW,8CAA8C;AAAA,EAC/F;AAEA,uBAAqB,aAAa,KAAK,MAAM,CAAC,CAAC;AACjD;AAEA,SAAS,qBAAqB,aAAqB,aAA6B;AAC9E,QAAM,aAAa,YAAY,KAAK,CAAC,aAAa,CAAC,SAAS,WAAW,GAAG,CAAC;AAC3E,MAAI,CAAC,YAAY;AACf;AAAA,EACF;AAEA,MAAI,gBAAgB,YAAY;AAC9B,UAAM,2BAA2B,oBAAI,IAAI,CAAC,SAAS,MAAM,CAAC;AAC1D,QAAI,CAAC,yBAAyB,IAAI,UAAU,GAAG;AAC7C,YAAM,IAAI,MAAM,6BAA6B,UAAU,6BAA6B;AAAA,IACtF;AAAA,EACF;AAEA,MAAI,gBAAgB,cAAc;AAChC,UAAM,6BAA6B,oBAAI,IAAI;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,QAAI,CAAC,2BAA2B,IAAI,UAAU,GAAG;AAC/C,YAAM,IAAI;AAAA,QACR,+BAA+B,UAAU;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAEA,MAAI,gBAAgB,WAAW;AAC7B,UAAM,0BAA0B,oBAAI,IAAI,CAAC,QAAQ,CAAC;AAClD,QAAI,CAAC,wBAAwB,IAAI,UAAU,GAAG;AAC5C,YAAM,IAAI,MAAM,4BAA4B,UAAU,wBAAwB;AAAA,IAChF;AAAA,EACF;AAEA,MAAI,gBAAgB,SAAS;AAC3B,UAAM,wBAAwB,oBAAI,IAAI,CAAC,WAAW,WAAW,CAAC;AAC9D,QAAI,CAAC,sBAAsB,IAAI,UAAU,GAAG;AAC1C,YAAM,IAAI,MAAM,0BAA0B,UAAU,oCAAoC;AAAA,IAC1F;AAAA,EACF;AACF;","names":["process","createElement","process","createElement"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "../../chunk-
|
|
2
|
+
renderCngkitHelp
|
|
3
|
+
} from "../../chunk-SKK2XLRZ.js";
|
|
4
4
|
import {
|
|
5
5
|
GlobalOptionsSchema
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-NGEWD4BW.js";
|
|
7
7
|
import {
|
|
8
8
|
CommandRunner
|
|
9
|
-
} from "../../chunk-
|
|
10
|
-
import "../../chunk-
|
|
9
|
+
} from "../../chunk-MRXGD6TC.js";
|
|
10
|
+
import "../../chunk-WDI43VPW.js";
|
|
11
11
|
import "../../chunk-PZ5AY32C.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/coderoom/index.tsx
|
|
@@ -15,7 +15,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
15
15
|
var description = "Start or join a real-time repo sync room";
|
|
16
16
|
var options = GlobalOptionsSchema;
|
|
17
17
|
function CoderoomCommand() {
|
|
18
|
-
return /* @__PURE__ */ jsx(CommandRunner, { run: async (output) => output.
|
|
18
|
+
return /* @__PURE__ */ jsx(CommandRunner, { run: async (output) => output.component(renderCngkitHelp("coderoom")) });
|
|
19
19
|
}
|
|
20
20
|
export {
|
|
21
21
|
CoderoomCommand as default,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/coderoom/index.tsx"],"sourcesContent":["import { GlobalOptionsSchema } from \"../../cli/options.js\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/coderoom/index.tsx"],"sourcesContent":["import { GlobalOptionsSchema } from \"../../cli/options.js\";\nimport { renderCngkitHelp } from \"../../cli/help-specs.js\";\nimport { CommandRunner } from \"../../cli/command-runner.js\";\n\nexport const description = \"Start or join a real-time repo sync room\";\nexport const options = GlobalOptionsSchema;\n\nexport default function CoderoomCommand() {\n return <CommandRunner run={async (output) => output.component(renderCngkitHelp(\"coderoom\"))} />;\n}\n"],"mappings":";;;;;;;;;;;;;AAQS;AAJF,IAAM,cAAc;AACpB,IAAM,UAAU;AAER,SAAR,kBAAmC;AACxC,SAAO,oBAAC,iBAAc,KAAK,OAAO,WAAW,OAAO,UAAU,iBAAiB,UAAU,CAAC,GAAG;AAC/F;","names":[]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runJoinCommand
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-E2GLGGKO.js";
|
|
4
|
+
import "../../chunk-CIZBVLN5.js";
|
|
5
5
|
import {
|
|
6
6
|
GlobalOptionsSchema,
|
|
7
7
|
RequiredRoomCodeArgsSchema
|
|
8
|
-
} from "../../chunk-
|
|
8
|
+
} from "../../chunk-NGEWD4BW.js";
|
|
9
9
|
import {
|
|
10
10
|
CommandRunner
|
|
11
|
-
} from "../../chunk-
|
|
12
|
-
import "../../chunk-
|
|
11
|
+
} from "../../chunk-MRXGD6TC.js";
|
|
12
|
+
import "../../chunk-WDI43VPW.js";
|
|
13
13
|
import "../../chunk-PZ5AY32C.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/coderoom/join.tsx
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runShareCommand
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-E2GLGGKO.js";
|
|
4
|
+
import "../../chunk-CIZBVLN5.js";
|
|
5
5
|
import {
|
|
6
6
|
GlobalOptionsSchema,
|
|
7
7
|
OptionalRoomCodeArgsSchema
|
|
8
|
-
} from "../../chunk-
|
|
8
|
+
} from "../../chunk-NGEWD4BW.js";
|
|
9
9
|
import {
|
|
10
10
|
CommandRunner
|
|
11
|
-
} from "../../chunk-
|
|
12
|
-
import "../../chunk-
|
|
11
|
+
} from "../../chunk-MRXGD6TC.js";
|
|
12
|
+
import "../../chunk-WDI43VPW.js";
|
|
13
13
|
import "../../chunk-PZ5AY32C.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/coderoom/share.tsx
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "../../chunk-
|
|
2
|
+
renderCngkitHelp
|
|
3
|
+
} from "../../chunk-SKK2XLRZ.js";
|
|
4
4
|
import {
|
|
5
5
|
GlobalOptionsSchema
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-NGEWD4BW.js";
|
|
7
7
|
import {
|
|
8
8
|
CommandRunner
|
|
9
|
-
} from "../../chunk-
|
|
10
|
-
import "../../chunk-
|
|
9
|
+
} from "../../chunk-MRXGD6TC.js";
|
|
10
|
+
import "../../chunk-WDI43VPW.js";
|
|
11
11
|
import "../../chunk-PZ5AY32C.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/hookify/index.tsx
|
|
@@ -15,7 +15,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
15
15
|
var description = "Forward hook events to Hookify";
|
|
16
16
|
var options = GlobalOptionsSchema;
|
|
17
17
|
function HookifyCommand() {
|
|
18
|
-
return /* @__PURE__ */ jsx(CommandRunner, { run: async (output) => output.
|
|
18
|
+
return /* @__PURE__ */ jsx(CommandRunner, { run: async (output) => output.component(renderCngkitHelp("hookify")) });
|
|
19
19
|
}
|
|
20
20
|
export {
|
|
21
21
|
HookifyCommand as default,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/hookify/index.tsx"],"sourcesContent":["import { GlobalOptionsSchema } from \"../../cli/options.js\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/hookify/index.tsx"],"sourcesContent":["import { GlobalOptionsSchema } from \"../../cli/options.js\";\nimport { renderCngkitHelp } from \"../../cli/help-specs.js\";\nimport { CommandRunner } from \"../../cli/command-runner.js\";\n\nexport const description = \"Forward hook events to Hookify\";\nexport const options = GlobalOptionsSchema;\n\nexport default function HookifyCommand() {\n return <CommandRunner run={async (output) => output.component(renderCngkitHelp(\"hookify\"))} />;\n}\n"],"mappings":";;;;;;;;;;;;;AAQS;AAJF,IAAM,cAAc;AACpB,IAAM,UAAU;AAER,SAAR,iBAAkC;AACvC,SAAO,oBAAC,iBAAc,KAAK,OAAO,WAAW,OAAO,UAAU,iBAAiB,SAAS,CAAC,GAAG;AAC9F;","names":[]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createCngApiClient
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-CIZBVLN5.js";
|
|
4
4
|
import {
|
|
5
5
|
GlobalOptionsSchema
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-NGEWD4BW.js";
|
|
7
7
|
import {
|
|
8
8
|
CommandRunner
|
|
9
|
-
} from "../../chunk-
|
|
10
|
-
import "../../chunk-
|
|
9
|
+
} from "../../chunk-MRXGD6TC.js";
|
|
10
|
+
import "../../chunk-WDI43VPW.js";
|
|
11
11
|
import "../../chunk-PZ5AY32C.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/hookify/ingest.tsx
|
|
@@ -16,23 +16,28 @@ import { z } from "zod";
|
|
|
16
16
|
|
|
17
17
|
// src/features/hookify/run-hookify-command.ts
|
|
18
18
|
import process from "process";
|
|
19
|
+
var defaultPollAfterMs = 1e3;
|
|
20
|
+
var minimumPollAfterMs = 25;
|
|
21
|
+
var maximumPollAfterMs = 5e3;
|
|
22
|
+
var pollTimeoutMs = 12e4;
|
|
19
23
|
async function runHookifyIngestCommand(options2) {
|
|
20
24
|
const payload = await readStdinBuffer();
|
|
21
25
|
try {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
const client = createCngApiClient(options2);
|
|
27
|
+
const response = await forwardHookifyPayload(client, payload, options2);
|
|
28
|
+
const result = await resolveHookifyResult(client, response);
|
|
29
|
+
if (result.stdout.length > 0) {
|
|
30
|
+
process.stdout.write(result.stdout);
|
|
25
31
|
}
|
|
26
|
-
if (
|
|
27
|
-
process.stderr.write(
|
|
32
|
+
if (result.stderr.length > 0) {
|
|
33
|
+
process.stderr.write(result.stderr);
|
|
28
34
|
}
|
|
29
|
-
process.exitCode =
|
|
35
|
+
process.exitCode = result.exitCode;
|
|
30
36
|
} catch {
|
|
31
37
|
process.exitCode = 0;
|
|
32
38
|
}
|
|
33
39
|
}
|
|
34
|
-
async function forwardHookifyPayload(payload, options2) {
|
|
35
|
-
const client = createCngApiClient(options2);
|
|
40
|
+
async function forwardHookifyPayload(client, payload, options2) {
|
|
36
41
|
return client.hookify.ingestHookifyHook(
|
|
37
42
|
{
|
|
38
43
|
data: payload,
|
|
@@ -45,6 +50,40 @@ async function forwardHookifyPayload(payload, options2) {
|
|
|
45
50
|
}
|
|
46
51
|
);
|
|
47
52
|
}
|
|
53
|
+
async function resolveHookifyResult(client, response) {
|
|
54
|
+
if (response.status === "completed") {
|
|
55
|
+
return completedHookifyResult(response);
|
|
56
|
+
}
|
|
57
|
+
return pollHookifyRequest(client, response.requestId, response.pollAfterMs);
|
|
58
|
+
}
|
|
59
|
+
async function pollHookifyRequest(client, requestId, initialPollAfterMs) {
|
|
60
|
+
let pollAfterMs = initialPollAfterMs ?? defaultPollAfterMs;
|
|
61
|
+
const deadlineAt = Date.now() + pollTimeoutMs;
|
|
62
|
+
while (Date.now() < deadlineAt) {
|
|
63
|
+
await sleep(clampPollAfterMs(pollAfterMs));
|
|
64
|
+
const response = await client.hookify.getHookifyRequest({ requestId });
|
|
65
|
+
if (response.status === "completed") {
|
|
66
|
+
return completedHookifyResult(response);
|
|
67
|
+
}
|
|
68
|
+
pollAfterMs = response.pollAfterMs ?? defaultPollAfterMs;
|
|
69
|
+
}
|
|
70
|
+
throw new Error("Timed out while polling Hookify request");
|
|
71
|
+
}
|
|
72
|
+
function completedHookifyResult(response) {
|
|
73
|
+
return {
|
|
74
|
+
stdout: response.stdout ?? "",
|
|
75
|
+
stderr: response.stderr ?? "",
|
|
76
|
+
exitCode: response.exitCode ?? 0
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function clampPollAfterMs(pollAfterMs) {
|
|
80
|
+
return Math.min(Math.max(pollAfterMs, minimumPollAfterMs), maximumPollAfterMs);
|
|
81
|
+
}
|
|
82
|
+
function sleep(milliseconds) {
|
|
83
|
+
return new Promise((resolve) => {
|
|
84
|
+
setTimeout(resolve, milliseconds);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
48
87
|
async function readStdinBuffer() {
|
|
49
88
|
const chunks = [];
|
|
50
89
|
for await (const chunk of process.stdin) {
|
|
@@ -67,7 +106,7 @@ var description = "Read a hook payload from stdin and forward it to Hookify";
|
|
|
67
106
|
var options = GlobalOptionsSchema.extend({
|
|
68
107
|
async: z.boolean().optional().describe(
|
|
69
108
|
option({
|
|
70
|
-
description: "
|
|
109
|
+
description: "Allow server workflow processing; poll until the hook result is ready"
|
|
71
110
|
})
|
|
72
111
|
),
|
|
73
112
|
event: z.string().optional().describe(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/hookify/ingest.tsx","../../../src/features/hookify/run-hookify-command.ts"],"sourcesContent":["import { option } from \"pastel\";\nimport { z } from \"zod\";\n\nimport { GlobalOptionsSchema } from \"../../cli/options.js\";\nimport { CommandRunner } from \"../../cli/command-runner.js\";\nimport {\n runHookifyIngestCommand,\n type HookifyIngestCommandOptions,\n} from \"../../features/hookify/run-hookify-command.js\";\n\nexport const description = \"Read a hook payload from stdin and forward it to Hookify\";\nexport const options = GlobalOptionsSchema.extend({\n async: z\n .boolean()\n .optional()\n .describe(\n option({\n description: \"
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/hookify/ingest.tsx","../../../src/features/hookify/run-hookify-command.ts"],"sourcesContent":["import { option } from \"pastel\";\nimport { z } from \"zod\";\n\nimport { GlobalOptionsSchema } from \"../../cli/options.js\";\nimport { CommandRunner } from \"../../cli/command-runner.js\";\nimport {\n runHookifyIngestCommand,\n type HookifyIngestCommandOptions,\n} from \"../../features/hookify/run-hookify-command.js\";\n\nexport const description = \"Read a hook payload from stdin and forward it to Hookify\";\nexport const options = GlobalOptionsSchema.extend({\n async: z\n .boolean()\n .optional()\n .describe(\n option({\n description: \"Allow server workflow processing; poll until the hook result is ready\",\n })\n ),\n event: z\n .string()\n .optional()\n .describe(\n option({\n description: \"Optional hook event label\",\n valueDescription: \"name\",\n })\n ),\n});\n\ntype HookifyIngestCommandProps = {\n readonly options: HookifyIngestCommandOptions;\n};\n\nexport default function HookifyIngestCommand({ options }: HookifyIngestCommandProps) {\n return <CommandRunner run={() => runHookifyIngestCommand(options)} />;\n}\n","import process from \"node:process\";\nimport type { CngApi } from \"@cng/client\";\n\nimport { createCngApiClient } from \"../../shared/api-client.js\";\nimport type { GlobalCommandOptions } from \"../../shared/config.js\";\n\nexport type HookifyIngestCommandOptions = GlobalCommandOptions & {\n readonly async?: boolean;\n readonly event?: string;\n};\n\ntype HookifyCompletedResult = {\n readonly stdout: string;\n readonly stderr: string;\n readonly exitCode: number;\n};\n\ntype HookifyClient = ReturnType<typeof createCngApiClient>;\ntype HookifyResponse = CngApi.HookifyIngestResponse | CngApi.HookifyRequestResponse;\n\nconst defaultPollAfterMs = 1000;\nconst minimumPollAfterMs = 25;\nconst maximumPollAfterMs = 5000;\nconst pollTimeoutMs = 120_000;\n\nexport async function runHookifyIngestCommand(options: HookifyIngestCommandOptions): Promise<void> {\n const payload = await readStdinBuffer();\n\n try {\n const client = createCngApiClient(options);\n const response = await forwardHookifyPayload(client, payload, options);\n const result = await resolveHookifyResult(client, response);\n if (result.stdout.length > 0) {\n process.stdout.write(result.stdout);\n }\n if (result.stderr.length > 0) {\n process.stderr.write(result.stderr);\n }\n process.exitCode = result.exitCode;\n } catch {\n process.exitCode = 0;\n }\n}\n\nasync function forwardHookifyPayload(\n client: HookifyClient,\n payload: Buffer,\n options: HookifyIngestCommandOptions\n): Promise<CngApi.HookifyIngestResponse> {\n return client.hookify.ingestHookifyHook(\n {\n data: payload,\n contentType: \"application/octet-stream\",\n contentLength: payload.byteLength,\n },\n {\n mode: options.async === true ? \"async\" : \"sync\",\n event: options.event,\n }\n );\n}\n\nasync function resolveHookifyResult(\n client: HookifyClient,\n response: CngApi.HookifyIngestResponse\n): Promise<HookifyCompletedResult> {\n if (response.status === \"completed\") {\n return completedHookifyResult(response);\n }\n\n return pollHookifyRequest(client, response.requestId, response.pollAfterMs);\n}\n\nasync function pollHookifyRequest(\n client: HookifyClient,\n requestId: string,\n initialPollAfterMs: number | undefined\n): Promise<HookifyCompletedResult> {\n let pollAfterMs = initialPollAfterMs ?? defaultPollAfterMs;\n const deadlineAt = Date.now() + pollTimeoutMs;\n\n while (Date.now() < deadlineAt) {\n await sleep(clampPollAfterMs(pollAfterMs));\n const response = await client.hookify.getHookifyRequest({ requestId });\n\n if (response.status === \"completed\") {\n return completedHookifyResult(response);\n }\n\n pollAfterMs = response.pollAfterMs ?? defaultPollAfterMs;\n }\n\n throw new Error(\"Timed out while polling Hookify request\");\n}\n\nfunction completedHookifyResult(response: HookifyResponse): HookifyCompletedResult {\n return {\n stdout: response.stdout ?? \"\",\n stderr: response.stderr ?? \"\",\n exitCode: response.exitCode ?? 0,\n };\n}\n\nfunction clampPollAfterMs(pollAfterMs: number): number {\n return Math.min(Math.max(pollAfterMs, minimumPollAfterMs), maximumPollAfterMs);\n}\n\nfunction sleep(milliseconds: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, milliseconds);\n });\n}\n\nasync function readStdinBuffer(): Promise<Buffer> {\n const chunks: Uint8Array[] = [];\n\n for await (const chunk of process.stdin) {\n if (typeof chunk === \"string\") {\n chunks.push(Buffer.from(chunk));\n continue;\n }\n\n if (chunk instanceof Uint8Array) {\n chunks.push(chunk);\n continue;\n }\n\n chunks.push(Buffer.from(String(chunk)));\n }\n\n return Buffer.concat(chunks);\n}\n"],"mappings":"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","names":["options","options"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
renderCngkitHelp
|
|
3
|
+
} from "../../chunk-SKK2XLRZ.js";
|
|
4
|
+
import {
|
|
5
|
+
GlobalOptionsSchema
|
|
6
|
+
} from "../../chunk-NGEWD4BW.js";
|
|
7
|
+
import {
|
|
8
|
+
CommandRunner
|
|
9
|
+
} from "../../chunk-MRXGD6TC.js";
|
|
10
|
+
import "../../chunk-WDI43VPW.js";
|
|
11
|
+
import "../../chunk-PZ5AY32C.js";
|
|
12
|
+
|
|
13
|
+
// src/commands/hooks/index.tsx
|
|
14
|
+
import { jsx } from "react/jsx-runtime";
|
|
15
|
+
var description = "Install cngkit hooks into supported AI coding tools";
|
|
16
|
+
var options = GlobalOptionsSchema;
|
|
17
|
+
function HooksCommand() {
|
|
18
|
+
return /* @__PURE__ */ jsx(CommandRunner, { run: async (output) => output.component(renderCngkitHelp("hooks")) });
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
HooksCommand as default,
|
|
22
|
+
description,
|
|
23
|
+
options
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/hooks/index.tsx"],"sourcesContent":["import { GlobalOptionsSchema } from \"../../cli/options.js\";\nimport { renderCngkitHelp } from \"../../cli/help-specs.js\";\nimport { CommandRunner } from \"../../cli/command-runner.js\";\n\nexport const description = \"Install cngkit hooks into supported AI coding tools\";\nexport const options = GlobalOptionsSchema;\n\nexport default function HooksCommand() {\n return <CommandRunner run={async (output) => output.component(renderCngkitHelp(\"hooks\"))} />;\n}\n"],"mappings":";;;;;;;;;;;;;AAQS;AAJF,IAAM,cAAc;AACpB,IAAM,UAAU;AAER,SAAR,eAAgC;AACrC,SAAO,oBAAC,iBAAc,KAAK,OAAO,WAAW,OAAO,UAAU,iBAAiB,OAAO,CAAC,GAAG;AAC5F;","names":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {
|
|
2
|
+
hookToolIds,
|
|
3
|
+
runHooksInstallCommand
|
|
4
|
+
} from "../../chunk-SMTQ3W3F.js";
|
|
5
|
+
import {
|
|
6
|
+
GlobalOptionsSchema
|
|
7
|
+
} from "../../chunk-NGEWD4BW.js";
|
|
8
|
+
import {
|
|
9
|
+
CommandRunner
|
|
10
|
+
} from "../../chunk-MRXGD6TC.js";
|
|
11
|
+
import "../../chunk-WDI43VPW.js";
|
|
12
|
+
import "../../chunk-PZ5AY32C.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/hooks/install.tsx
|
|
15
|
+
import { option } from "pastel";
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
import { jsx } from "react/jsx-runtime";
|
|
18
|
+
var description = "Install Hookify forwarding hooks for supported AI coding tools";
|
|
19
|
+
var options = GlobalOptionsSchema.extend({
|
|
20
|
+
dryRun: z.boolean().optional().describe(
|
|
21
|
+
option({
|
|
22
|
+
description: "Print what would be installed without writing files"
|
|
23
|
+
})
|
|
24
|
+
),
|
|
25
|
+
tool: z.enum(hookToolIds).optional().describe(
|
|
26
|
+
option({
|
|
27
|
+
description: "Tool to configure",
|
|
28
|
+
valueDescription: "all|claude|codex"
|
|
29
|
+
})
|
|
30
|
+
)
|
|
31
|
+
});
|
|
32
|
+
function HooksInstallCommand({ options: options2 }) {
|
|
33
|
+
return /* @__PURE__ */ jsx(CommandRunner, { run: (output) => runHooksInstallCommand(options2, output) });
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
HooksInstallCommand as default,
|
|
37
|
+
description,
|
|
38
|
+
options
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/hooks/install.tsx"],"sourcesContent":["import { option } from \"pastel\";\nimport { z } from \"zod\";\n\nimport { GlobalOptionsSchema } from \"../../cli/options.js\";\nimport { CommandRunner } from \"../../cli/command-runner.js\";\nimport {\n hookToolIds,\n runHooksInstallCommand,\n type HookToolId,\n type HooksInstallCommandOptions,\n} from \"../../features/hooks/run-hooks-install-command.js\";\n\nexport const description = \"Install Hookify forwarding hooks for supported AI coding tools\";\nexport const options = GlobalOptionsSchema.extend({\n dryRun: z\n .boolean()\n .optional()\n .describe(\n option({\n description: \"Print what would be installed without writing files\",\n })\n ),\n tool: z\n .enum(hookToolIds)\n .optional()\n .describe(\n option({\n description: \"Tool to configure\",\n valueDescription: \"all|claude|codex\",\n })\n ),\n});\n\ntype HooksInstallCommandProps = {\n readonly options: HooksInstallCommandOptions & {\n readonly tool?: HookToolId;\n };\n};\n\nexport default function HooksInstallCommand({ options }: HooksInstallCommandProps) {\n return <CommandRunner run={(output) => runHooksInstallCommand(options, output)} />;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,cAAc;AACvB,SAAS,SAAS;AAuCT;AA5BF,IAAM,cAAc;AACpB,IAAM,UAAU,oBAAoB,OAAO;AAAA,EAChD,QAAQ,EACL,QAAQ,EACR,SAAS,EACT;AAAA,IACC,OAAO;AAAA,MACL,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EACF,MAAM,EACH,KAAK,WAAW,EAChB,SAAS,EACT;AAAA,IACC,OAAO;AAAA,MACL,aAAa;AAAA,MACb,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH;AACJ,CAAC;AAQc,SAAR,oBAAqC,EAAE,SAAAA,SAAQ,GAA6B;AACjF,SAAO,oBAAC,iBAAc,KAAK,CAAC,WAAW,uBAAuBA,UAAS,MAAM,GAAG;AAClF;","names":["options"]}
|