cngkit 1.1.17 → 1.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +100 -7
  2. package/dist/chunk-3A6GRNEV.js +1590 -0
  3. package/dist/chunk-3A6GRNEV.js.map +1 -0
  4. package/dist/{chunk-HRFI2IEP.js → chunk-7SO75QXJ.js} +886 -68
  5. package/dist/chunk-7SO75QXJ.js.map +1 -0
  6. package/dist/chunk-DBA3BZXP.js +231 -0
  7. package/dist/chunk-DBA3BZXP.js.map +1 -0
  8. package/dist/{chunk-5ZNV3FDG.js → chunk-GBONV6XP.js} +16 -4
  9. package/dist/chunk-GBONV6XP.js.map +1 -0
  10. package/dist/chunk-L6ZVQRSY.js +569 -0
  11. package/dist/chunk-L6ZVQRSY.js.map +1 -0
  12. package/dist/{chunk-VCWNKNUE.js → chunk-NGEWD4BW.js} +10 -1
  13. package/dist/chunk-NGEWD4BW.js.map +1 -0
  14. package/dist/chunk-TYDIBWZV.js +35 -0
  15. package/dist/chunk-TYDIBWZV.js.map +1 -0
  16. package/dist/{chunk-GT2MTS6E.js → chunk-X4E7NAN4.js} +2 -2
  17. package/dist/cli.js +82 -16
  18. package/dist/cli.js.map +1 -1
  19. package/dist/commands/coderoom/index.js +6 -6
  20. package/dist/commands/coderoom/index.js.map +1 -1
  21. package/dist/commands/coderoom/join.js +5 -5
  22. package/dist/commands/coderoom/share.js +5 -5
  23. package/dist/commands/hookify/index.js +25 -0
  24. package/dist/commands/hookify/index.js.map +1 -0
  25. package/dist/commands/hookify/ingest.js +127 -0
  26. package/dist/commands/hookify/ingest.js.map +1 -0
  27. package/dist/commands/hooks/index.js +25 -0
  28. package/dist/commands/hooks/index.js.map +1 -0
  29. package/dist/commands/hooks/install.js +40 -0
  30. package/dist/commands/hooks/install.js.map +1 -0
  31. package/dist/commands/hooks/uninstall.js +40 -0
  32. package/dist/commands/hooks/uninstall.js.map +1 -0
  33. package/dist/commands/index.js +5 -5
  34. package/dist/commands/index.js.map +1 -1
  35. package/dist/commands/knowledges/audiences.js +6 -6
  36. package/dist/commands/knowledges/cat.js +31 -0
  37. package/dist/commands/knowledges/cat.js.map +1 -0
  38. package/dist/commands/knowledges/files.js +6 -6
  39. package/dist/commands/knowledges/find.js +66 -0
  40. package/dist/commands/knowledges/find.js.map +1 -0
  41. package/dist/commands/knowledges/glob.js +6 -6
  42. package/dist/commands/knowledges/grep.js +6 -6
  43. package/dist/commands/knowledges/head.js +41 -0
  44. package/dist/commands/knowledges/head.js.map +1 -0
  45. package/dist/commands/knowledges/index.js +6 -6
  46. package/dist/commands/knowledges/index.js.map +1 -1
  47. package/dist/commands/knowledges/list.js +7 -7
  48. package/dist/commands/knowledges/list.js.map +1 -1
  49. package/dist/commands/knowledges/ls.js +40 -0
  50. package/dist/commands/knowledges/ls.js.map +1 -0
  51. package/dist/commands/knowledges/read.js +6 -6
  52. package/dist/commands/knowledges/realpath.js +31 -0
  53. package/dist/commands/knowledges/realpath.js.map +1 -0
  54. package/dist/commands/knowledges/search.js +6 -6
  55. package/dist/commands/knowledges/stat.js +31 -0
  56. package/dist/commands/knowledges/stat.js.map +1 -0
  57. package/dist/commands/knowledges/status.js +6 -6
  58. package/dist/commands/knowledges/tail.js +41 -0
  59. package/dist/commands/knowledges/tail.js.map +1 -0
  60. package/dist/commands/knowledges/tree.js +46 -0
  61. package/dist/commands/knowledges/tree.js.map +1 -0
  62. package/dist/commands/login.js +3 -3
  63. package/dist/commands/scrub.js +3 -3
  64. package/dist/commands/transcripts.js +6 -6
  65. package/dist/commands/transcripts.js.map +1 -1
  66. package/package.json +2 -2
  67. package/dist/chunk-5ZNV3FDG.js.map +0 -1
  68. package/dist/chunk-BL3XMLIH.js +0 -573
  69. package/dist/chunk-BL3XMLIH.js.map +0 -1
  70. package/dist/chunk-HRFI2IEP.js.map +0 -1
  71. package/dist/chunk-K36DKQWH.js +0 -327
  72. package/dist/chunk-K36DKQWH.js.map +0 -1
  73. package/dist/chunk-VCWNKNUE.js.map +0 -1
  74. package/dist/chunk-WYJTGGMN.js +0 -222
  75. package/dist/chunk-WYJTGGMN.js.map +0 -1
  76. /package/dist/{chunk-GT2MTS6E.js.map → chunk-X4E7NAN4.js.map} +0 -0
@@ -57,6 +57,14 @@ var RequiredFilePathArgsSchema = z.tuple([
57
57
  })
58
58
  )
59
59
  ]);
60
+ var RequiredCatalogPathArgsSchema = z.tuple([
61
+ z.string().describe(
62
+ argument({
63
+ name: "path",
64
+ description: "Catalog path"
65
+ })
66
+ )
67
+ ]);
60
68
  var RequiredPatternArgsSchema = z.array(
61
69
  z.string().describe(
62
70
  argument({
@@ -99,9 +107,10 @@ export {
99
107
  OptionalQueryArgsSchema,
100
108
  RequiredQueryArgsSchema,
101
109
  RequiredFilePathArgsSchema,
110
+ RequiredCatalogPathArgsSchema,
102
111
  RequiredPatternArgsSchema,
103
112
  OptionalGlobPatternArgsSchema,
104
113
  LimitOptionsSchema,
105
114
  TranscriptArgsSchema
106
115
  };
107
- //# sourceMappingURL=chunk-VCWNKNUE.js.map
116
+ //# sourceMappingURL=chunk-NGEWD4BW.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 RequiredCatalogPathArgsSchema = z.tuple([\n z.string().describe(\n argument({\n name: \"path\",\n description: \"Catalog 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,gCAAgC,EAAE,MAAM;AAAA,EACnD,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":[]}
@@ -0,0 +1,35 @@
1
+ import {
2
+ CngApiClient,
3
+ formatError,
4
+ resolveApiBaseUrl
5
+ } from "./chunk-7SO75QXJ.js";
6
+
7
+ // src/shared/api-client.ts
8
+ function createCngApiClient(options) {
9
+ return new CngApiClient({
10
+ baseUrl: resolveApiBaseUrl(options),
11
+ timeoutInSeconds: 15,
12
+ maxRetries: 1
13
+ });
14
+ }
15
+ async function readBackendHealth(options) {
16
+ try {
17
+ const client = createCngApiClient(options);
18
+ const health = await client.system.getHealth();
19
+ return {
20
+ ok: true,
21
+ service: health.service
22
+ };
23
+ } catch (error) {
24
+ return {
25
+ ok: false,
26
+ message: formatError(error)
27
+ };
28
+ }
29
+ }
30
+
31
+ export {
32
+ createCngApiClient,
33
+ readBackendHealth
34
+ };
35
+ //# sourceMappingURL=chunk-TYDIBWZV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/api-client.ts"],"sourcesContent":["import { CngApiClient } from \"@cng/client\";\n\nimport { resolveApiBaseUrl, type GlobalCommandOptions } from \"./config.js\";\nimport { formatError } from \"./output.js\";\n\nexport type BackendHealthStatus =\n | {\n ok: true;\n service: string;\n }\n | {\n ok: false;\n message: string;\n };\n\nexport function createCngApiClient(options: GlobalCommandOptions): CngApiClient {\n return new CngApiClient({\n baseUrl: resolveApiBaseUrl(options),\n timeoutInSeconds: 15,\n maxRetries: 1,\n });\n}\n\nexport async function readBackendHealth(\n options: GlobalCommandOptions\n): Promise<BackendHealthStatus> {\n try {\n const client = createCngApiClient(options);\n const health = await client.system.getHealth();\n return {\n ok: true,\n service: health.service,\n };\n } catch (error) {\n return {\n ok: false,\n message: formatError(error),\n };\n }\n}\n"],"mappings":";;;;;;;AAeO,SAAS,mBAAmB,SAA6C;AAC9E,SAAO,IAAI,aAAa;AAAA,IACtB,SAAS,kBAAkB,OAAO;AAAA,IAClC,kBAAkB;AAAA,IAClB,YAAY;AAAA,EACd,CAAC;AACH;AAEA,eAAsB,kBACpB,SAC8B;AAC9B,MAAI;AACF,UAAM,SAAS,mBAAmB,OAAO;AACzC,UAAM,SAAS,MAAM,OAAO,OAAO,UAAU;AAC7C,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,SAAS,YAAY,KAAK;AAAA,IAC5B;AAAA,EACF;AACF;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createCommandOutput,
3
3
  formatError
4
- } from "./chunk-WYJTGGMN.js";
4
+ } from "./chunk-7SO75QXJ.js";
5
5
 
6
6
  // src/cli/command-runner.tsx
7
7
  import { useEffect } from "react";
@@ -23,4 +23,4 @@ function CommandRunner({ run }) {
23
23
  export {
24
24
  CommandRunner
25
25
  };
26
- //# sourceMappingURL=chunk-GT2MTS6E.js.map
26
+ //# sourceMappingURL=chunk-X4E7NAN4.js.map
package/dist/cli.js CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- formatCngkitHelp,
4
- formatKnowledgesHelp
5
- } from "./chunk-BL3XMLIH.js";
3
+ renderCngkitHelp,
4
+ renderKnowledgesHelp
5
+ } from "./chunk-3A6GRNEV.js";
6
6
  import {
7
7
  consoleOutput,
8
8
  formatError,
9
9
  packageVersion,
10
10
  parseOutputFormat
11
- } from "./chunk-WYJTGGMN.js";
11
+ } from "./chunk-7SO75QXJ.js";
12
12
  import "./chunk-PZ5AY32C.js";
13
13
 
14
14
  // src/cli.ts
@@ -16,16 +16,16 @@ import process from "process";
16
16
  import Pastel from "pastel";
17
17
 
18
18
  // src/cli/help.ts
19
- function printMarkdownHelpIfRequested(argv, output = consoleOutput) {
19
+ function printHelpIfRequested(argv, output = consoleOutput) {
20
20
  const commandName = argv[2];
21
21
  if (commandName === void 0 || commandName === "--help" || commandName === "-h") {
22
- output.markdown(formatCngkitHelp());
22
+ output.component(renderCngkitHelp());
23
23
  return true;
24
24
  }
25
25
  if (commandName === "help") {
26
26
  const [topicName, subtopicName] = argv.slice(3);
27
- const topic = (topicName === "knowledges" || topicName === "coderoom") && subtopicName ? `${topicName}-${subtopicName}` : topicName;
28
- output.markdown(formatCngkitHelp(topic));
27
+ const topic = (topicName === "knowledges" || topicName === "coderoom" || topicName === "hookify" || topicName === "hooks") && subtopicName ? `${topicName}-${subtopicName}` : topicName;
28
+ output.component(renderCngkitHelp(topic));
29
29
  return true;
30
30
  }
31
31
  const commandArgs = argv.slice(3);
@@ -34,23 +34,41 @@ function printMarkdownHelpIfRequested(argv, output = consoleOutput) {
34
34
  return false;
35
35
  }
36
36
  if (commandName === "knowledges") {
37
- const topic = commandArgs.find((argument, index) => index !== helpIndex && !argument.startsWith("-"));
38
- output.markdown(formatKnowledgesHelp(topic));
37
+ const topic = commandArgs.find(
38
+ (argument, index) => index !== helpIndex && !argument.startsWith("-")
39
+ );
40
+ output.component(renderKnowledgesHelp(topic));
39
41
  return true;
40
42
  }
41
43
  if (commandName === "coderoom") {
42
- const topic = commandArgs.find((argument, index) => index !== helpIndex && !argument.startsWith("-"));
43
- output.markdown(formatCngkitHelp(topic ? `coderoom-${topic}` : "coderoom"));
44
+ const topic = commandArgs.find(
45
+ (argument, index) => index !== helpIndex && !argument.startsWith("-")
46
+ );
47
+ output.component(renderCngkitHelp(topic ? `coderoom-${topic}` : "coderoom"));
44
48
  return true;
45
49
  }
46
- output.markdown(formatCngkitHelp(commandName));
50
+ if (commandName === "hookify") {
51
+ const topic = commandArgs.find(
52
+ (argument, index) => index !== helpIndex && !argument.startsWith("-")
53
+ );
54
+ output.component(renderCngkitHelp(topic ? `hookify-${topic}` : "hookify"));
55
+ return true;
56
+ }
57
+ if (commandName === "hooks") {
58
+ const topic = commandArgs.find(
59
+ (argument, index) => index !== helpIndex && !argument.startsWith("-")
60
+ );
61
+ output.component(renderCngkitHelp(topic ? `hooks-${topic}` : "hooks"));
62
+ return true;
63
+ }
64
+ output.component(renderCngkitHelp(commandName));
47
65
  return true;
48
66
  }
49
67
 
50
68
  // src/cli.ts
51
69
  try {
52
70
  const normalizedArgv = normalizeGlobalOptions(process.argv);
53
- if (printMarkdownHelpIfRequested(normalizedArgv)) {
71
+ if (printHelpIfRequested(normalizedArgv)) {
54
72
  process.exit(0);
55
73
  }
56
74
  guardKnownCommand(normalizedArgv);
@@ -105,14 +123,42 @@ function normalizeGlobalOptions(argv) {
105
123
  index -= 1;
106
124
  }
107
125
  }
126
+ normalizeKnowledgesFindOptions(normalizedArgv);
108
127
  return normalizedArgv;
109
128
  }
129
+ function normalizeKnowledgesFindOptions(argv) {
130
+ if (argv[2] !== "knowledges" || argv[3] !== "find") {
131
+ return;
132
+ }
133
+ for (let index = 4; index < argv.length; index += 1) {
134
+ if (argv[index] === "-name") {
135
+ argv[index] = "--name";
136
+ continue;
137
+ }
138
+ if (argv[index] === "-type") {
139
+ argv[index] = "--type";
140
+ continue;
141
+ }
142
+ if (argv[index] === "-maxdepth") {
143
+ argv[index] = "--max-depth";
144
+ }
145
+ }
146
+ }
110
147
  function guardKnownCommand(argv) {
111
148
  const commandName = argv[2];
112
149
  if (commandName === void 0 || commandName.startsWith("-")) {
113
150
  return;
114
151
  }
115
- const knownCommands = /* @__PURE__ */ new Set(["help", "login", "coderoom", "scrub", "transcripts", "knowledges"]);
152
+ const knownCommands = /* @__PURE__ */ new Set([
153
+ "help",
154
+ "login",
155
+ "coderoom",
156
+ "scrub",
157
+ "transcripts",
158
+ "knowledges",
159
+ "hooks",
160
+ "hookify"
161
+ ]);
116
162
  if (!knownCommands.has(commandName)) {
117
163
  throw new Error(`Unknown command "${commandName}". Run cngkit --help for available commands.`);
118
164
  }
@@ -137,15 +183,35 @@ function guardKnownSubcommand(commandName, commandArgs) {
137
183
  "list",
138
184
  "files",
139
185
  "read",
186
+ "cat",
187
+ "head",
188
+ "tail",
140
189
  "grep",
141
190
  "glob",
191
+ "ls",
192
+ "tree",
193
+ "find",
194
+ "stat",
195
+ "realpath",
142
196
  "help"
143
197
  ]);
144
198
  if (!knownKnowledgesSubcommands.has(subcommand)) {
145
199
  throw new Error(
146
- `Unknown knowledges command "${subcommand}". Use one of: status, audiences, search, list, files, read, grep, glob.`
200
+ `Unknown knowledges command "${subcommand}". Use one of: status, audiences, search, list, files, read, cat, head, tail, grep, glob, ls, tree, find, stat, realpath.`
147
201
  );
148
202
  }
149
203
  }
204
+ if (commandName === "hookify") {
205
+ const knownHookifySubcommands = /* @__PURE__ */ new Set(["ingest"]);
206
+ if (!knownHookifySubcommands.has(subcommand)) {
207
+ throw new Error(`Unknown hookify command "${subcommand}". Use one of: ingest.`);
208
+ }
209
+ }
210
+ if (commandName === "hooks") {
211
+ const knownHooksSubcommands = /* @__PURE__ */ new Set(["install", "uninstall"]);
212
+ if (!knownHooksSubcommands.has(subcommand)) {
213
+ throw new Error(`Unknown hooks command "${subcommand}". Use one of: install, uninstall.`);
214
+ }
215
+ }
150
216
  }
151
217
  //# 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 = 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
+ {"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 { printHelpIfRequested } 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 (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 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 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 { renderCngkitHelp, renderKnowledgesHelp } from \"./help-specs.js\";\nimport { consoleOutput, type CommandOutput } from \"../shared/output.js\";\n\nexport function printHelpIfRequested(\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.component(renderCngkitHelp());\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 output.component(renderCngkitHelp(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.component(renderKnowledgesHelp(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.component(renderCngkitHelp(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.component(renderCngkitHelp(topic ? `hookify-${topic}` : \"hookify\"));\n return true;\n }\n\n if (commandName === \"hooks\") {\n const topic = commandArgs.find(\n (argument, index) => index !== helpIndex && !argument.startsWith(\"-\")\n );\n output.component(renderCngkitHelp(topic ? `hooks-${topic}` : \"hooks\"));\n return true;\n }\n\n output.component(renderCngkitHelp(commandName));\n return true;\n}\n"],"mappings":"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","names":[]}
@@ -1,13 +1,13 @@
1
1
  import {
2
- formatCngkitHelp
3
- } from "../../chunk-BL3XMLIH.js";
2
+ renderCngkitHelp
3
+ } from "../../chunk-3A6GRNEV.js";
4
4
  import {
5
5
  GlobalOptionsSchema
6
- } from "../../chunk-VCWNKNUE.js";
6
+ } from "../../chunk-NGEWD4BW.js";
7
7
  import {
8
8
  CommandRunner
9
- } from "../../chunk-GT2MTS6E.js";
10
- import "../../chunk-WYJTGGMN.js";
9
+ } from "../../chunk-X4E7NAN4.js";
10
+ import "../../chunk-7SO75QXJ.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.markdown(formatCngkitHelp("coderoom")) });
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 { formatCngkitHelp } 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.markdown(formatCngkitHelp(\"coderoom\"))} />;\n}\n"],"mappings":";;;;;;;;;;;;;AAQS;AAJF,IAAM,cAAc;AACpB,IAAM,UAAU;AAER,SAAR,kBAAmC;AACxC,SAAO,oBAAC,iBAAc,KAAK,OAAO,WAAW,OAAO,SAAS,iBAAiB,UAAU,CAAC,GAAG;AAC9F;","names":[]}
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-5ZNV3FDG.js";
4
- import "../../chunk-HRFI2IEP.js";
3
+ } from "../../chunk-GBONV6XP.js";
4
+ import "../../chunk-TYDIBWZV.js";
5
5
  import {
6
6
  GlobalOptionsSchema,
7
7
  RequiredRoomCodeArgsSchema
8
- } from "../../chunk-VCWNKNUE.js";
8
+ } from "../../chunk-NGEWD4BW.js";
9
9
  import {
10
10
  CommandRunner
11
- } from "../../chunk-GT2MTS6E.js";
12
- import "../../chunk-WYJTGGMN.js";
11
+ } from "../../chunk-X4E7NAN4.js";
12
+ import "../../chunk-7SO75QXJ.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-5ZNV3FDG.js";
4
- import "../../chunk-HRFI2IEP.js";
3
+ } from "../../chunk-GBONV6XP.js";
4
+ import "../../chunk-TYDIBWZV.js";
5
5
  import {
6
6
  GlobalOptionsSchema,
7
7
  OptionalRoomCodeArgsSchema
8
- } from "../../chunk-VCWNKNUE.js";
8
+ } from "../../chunk-NGEWD4BW.js";
9
9
  import {
10
10
  CommandRunner
11
- } from "../../chunk-GT2MTS6E.js";
12
- import "../../chunk-WYJTGGMN.js";
11
+ } from "../../chunk-X4E7NAN4.js";
12
+ import "../../chunk-7SO75QXJ.js";
13
13
  import "../../chunk-PZ5AY32C.js";
14
14
 
15
15
  // src/commands/coderoom/share.tsx
@@ -0,0 +1,25 @@
1
+ import {
2
+ renderCngkitHelp
3
+ } from "../../chunk-3A6GRNEV.js";
4
+ import {
5
+ GlobalOptionsSchema
6
+ } from "../../chunk-NGEWD4BW.js";
7
+ import {
8
+ CommandRunner
9
+ } from "../../chunk-X4E7NAN4.js";
10
+ import "../../chunk-7SO75QXJ.js";
11
+ import "../../chunk-PZ5AY32C.js";
12
+
13
+ // src/commands/hookify/index.tsx
14
+ import { jsx } from "react/jsx-runtime";
15
+ var description = "Forward hook events to Hookify";
16
+ var options = GlobalOptionsSchema;
17
+ function HookifyCommand() {
18
+ return /* @__PURE__ */ jsx(CommandRunner, { run: async (output) => output.component(renderCngkitHelp("hookify")) });
19
+ }
20
+ export {
21
+ HookifyCommand as default,
22
+ description,
23
+ options
24
+ };
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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":[]}
@@ -0,0 +1,127 @@
1
+ import {
2
+ createCngApiClient
3
+ } from "../../chunk-TYDIBWZV.js";
4
+ import {
5
+ GlobalOptionsSchema
6
+ } from "../../chunk-NGEWD4BW.js";
7
+ import {
8
+ CommandRunner
9
+ } from "../../chunk-X4E7NAN4.js";
10
+ import "../../chunk-7SO75QXJ.js";
11
+ import "../../chunk-PZ5AY32C.js";
12
+
13
+ // src/commands/hookify/ingest.tsx
14
+ import { option } from "pastel";
15
+ import { z } from "zod";
16
+
17
+ // src/features/hookify/run-hookify-command.ts
18
+ import process from "process";
19
+ var defaultPollAfterMs = 1e3;
20
+ var minimumPollAfterMs = 25;
21
+ var maximumPollAfterMs = 5e3;
22
+ var pollTimeoutMs = 12e4;
23
+ async function runHookifyIngestCommand(options2) {
24
+ const payload = await readStdinBuffer();
25
+ try {
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);
31
+ }
32
+ if (result.stderr.length > 0) {
33
+ process.stderr.write(result.stderr);
34
+ }
35
+ process.exitCode = result.exitCode;
36
+ } catch {
37
+ process.exitCode = 0;
38
+ }
39
+ }
40
+ async function forwardHookifyPayload(client, payload, options2) {
41
+ return client.hookify.ingestHookifyHook(
42
+ {
43
+ data: payload,
44
+ contentType: "application/octet-stream",
45
+ contentLength: payload.byteLength
46
+ },
47
+ {
48
+ mode: options2.async === true ? "async" : "sync",
49
+ event: options2.event
50
+ }
51
+ );
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
+ }
87
+ async function readStdinBuffer() {
88
+ const chunks = [];
89
+ for await (const chunk of process.stdin) {
90
+ if (typeof chunk === "string") {
91
+ chunks.push(Buffer.from(chunk));
92
+ continue;
93
+ }
94
+ if (chunk instanceof Uint8Array) {
95
+ chunks.push(chunk);
96
+ continue;
97
+ }
98
+ chunks.push(Buffer.from(String(chunk)));
99
+ }
100
+ return Buffer.concat(chunks);
101
+ }
102
+
103
+ // src/commands/hookify/ingest.tsx
104
+ import { jsx } from "react/jsx-runtime";
105
+ var description = "Read a hook payload from stdin and forward it to Hookify";
106
+ var options = GlobalOptionsSchema.extend({
107
+ async: z.boolean().optional().describe(
108
+ option({
109
+ description: "Allow server workflow processing; poll until the hook result is ready"
110
+ })
111
+ ),
112
+ event: z.string().optional().describe(
113
+ option({
114
+ description: "Optional hook event label",
115
+ valueDescription: "name"
116
+ })
117
+ )
118
+ });
119
+ function HookifyIngestCommand({ options: options2 }) {
120
+ return /* @__PURE__ */ jsx(CommandRunner, { run: () => runHookifyIngestCommand(options2) });
121
+ }
122
+ export {
123
+ HookifyIngestCommand as default,
124
+ description,
125
+ options
126
+ };
127
+ //# sourceMappingURL=ingest.js.map
@@ -0,0 +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: \"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-3A6GRNEV.js";
4
+ import {
5
+ GlobalOptionsSchema
6
+ } from "../../chunk-NGEWD4BW.js";
7
+ import {
8
+ CommandRunner
9
+ } from "../../chunk-X4E7NAN4.js";
10
+ import "../../chunk-7SO75QXJ.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-DBA3BZXP.js";
5
+ import {
6
+ GlobalOptionsSchema
7
+ } from "../../chunk-NGEWD4BW.js";
8
+ import {
9
+ CommandRunner
10
+ } from "../../chunk-X4E7NAN4.js";
11
+ import "../../chunk-7SO75QXJ.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"]}