jevctl 0.1.0 → 0.2.1

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 (133) hide show
  1. package/CHANGELOG.md +50 -1
  2. package/NOTICE +4 -0
  3. package/README.md +54 -388
  4. package/SECURITY.md +5 -3
  5. package/dist/cli.js +105 -16
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/ask.d.ts +5 -1
  8. package/dist/commands/ask.js +27 -10
  9. package/dist/commands/ask.js.map +1 -1
  10. package/dist/commands/auth.d.ts +14 -0
  11. package/dist/commands/auth.js +158 -0
  12. package/dist/commands/auth.js.map +1 -0
  13. package/dist/commands/batch.d.ts +28 -0
  14. package/dist/commands/batch.js +221 -0
  15. package/dist/commands/batch.js.map +1 -0
  16. package/dist/commands/classify.d.ts +34 -0
  17. package/dist/commands/classify.js +187 -0
  18. package/dist/commands/classify.js.map +1 -0
  19. package/dist/commands/compact.d.ts +29 -0
  20. package/dist/commands/compact.js +146 -0
  21. package/dist/commands/compact.js.map +1 -0
  22. package/dist/commands/config.d.ts +2 -1
  23. package/dist/commands/config.js +27 -10
  24. package/dist/commands/config.js.map +1 -1
  25. package/dist/commands/extract.d.ts +18 -0
  26. package/dist/commands/extract.js +108 -0
  27. package/dist/commands/extract.js.map +1 -0
  28. package/dist/commands/find.d.ts +5 -1
  29. package/dist/commands/find.js +30 -15
  30. package/dist/commands/find.js.map +1 -1
  31. package/dist/commands/match.d.ts +18 -0
  32. package/dist/commands/match.js +118 -0
  33. package/dist/commands/match.js.map +1 -0
  34. package/dist/commands/models.js +12 -10
  35. package/dist/commands/models.js.map +1 -1
  36. package/dist/commands/rerank.d.ts +15 -0
  37. package/dist/commands/rerank.js +82 -0
  38. package/dist/commands/rerank.js.map +1 -0
  39. package/dist/commands/route.d.ts +19 -0
  40. package/dist/commands/route.js +120 -0
  41. package/dist/commands/route.js.map +1 -0
  42. package/dist/commands/screen.d.ts +5 -1
  43. package/dist/commands/screen.js +27 -10
  44. package/dist/commands/screen.js.map +1 -1
  45. package/dist/commands/verify.d.ts +5 -1
  46. package/dist/commands/verify.js +23 -12
  47. package/dist/commands/verify.js.map +1 -1
  48. package/dist/config.d.ts +66 -6
  49. package/dist/config.js +53 -2
  50. package/dist/config.js.map +1 -1
  51. package/dist/context.d.ts +4 -0
  52. package/dist/context.js +11 -5
  53. package/dist/context.js.map +1 -1
  54. package/dist/core/ask.js +8 -3
  55. package/dist/core/ask.js.map +1 -1
  56. package/dist/core/batch.d.ts +42 -0
  57. package/dist/core/batch.js +93 -0
  58. package/dist/core/batch.js.map +1 -0
  59. package/dist/core/classify.d.ts +103 -0
  60. package/dist/core/classify.js +216 -0
  61. package/dist/core/classify.js.map +1 -0
  62. package/dist/core/compact.d.ts +32 -0
  63. package/dist/core/compact.js +47 -0
  64. package/dist/core/compact.js.map +1 -0
  65. package/dist/core/extract.d.ts +58 -0
  66. package/dist/core/extract.js +214 -0
  67. package/dist/core/extract.js.map +1 -0
  68. package/dist/core/find.js +3 -0
  69. package/dist/core/find.js.map +1 -1
  70. package/dist/core/match.d.ts +55 -0
  71. package/dist/core/match.js +114 -0
  72. package/dist/core/match.js.map +1 -0
  73. package/dist/core/rerank.d.ts +47 -0
  74. package/dist/core/rerank.js +60 -0
  75. package/dist/core/rerank.js.map +1 -0
  76. package/dist/core/route.d.ts +74 -0
  77. package/dist/core/route.js +153 -0
  78. package/dist/core/route.js.map +1 -0
  79. package/dist/core/transcript.d.ts +15 -0
  80. package/dist/core/transcript.js +118 -0
  81. package/dist/core/transcript.js.map +1 -0
  82. package/dist/credentials.d.ts +30 -0
  83. package/dist/credentials.js +161 -0
  84. package/dist/credentials.js.map +1 -0
  85. package/dist/errors.js.map +1 -1
  86. package/dist/index.d.ts +10 -0
  87. package/dist/index.js +10 -0
  88. package/dist/index.js.map +1 -1
  89. package/dist/input.js +1 -1
  90. package/dist/input.js.map +1 -1
  91. package/dist/lib.d.ts +2 -0
  92. package/dist/lib.js +9 -0
  93. package/dist/lib.js.map +1 -1
  94. package/dist/output.d.ts +41 -3
  95. package/dist/output.js +131 -6
  96. package/dist/output.js.map +1 -1
  97. package/dist/provider.d.ts +8 -0
  98. package/dist/provider.js +44 -4
  99. package/dist/provider.js.map +1 -1
  100. package/dist/vendor/compaction/compact.d.ts +29 -0
  101. package/dist/vendor/compaction/compact.js +236 -0
  102. package/dist/vendor/compaction/compact.js.map +1 -0
  103. package/dist/vendor/compaction/index.d.ts +4 -0
  104. package/dist/vendor/compaction/index.js +8 -0
  105. package/dist/vendor/compaction/index.js.map +1 -0
  106. package/dist/vendor/compaction/request.d.ts +19 -0
  107. package/dist/vendor/compaction/request.js +53 -0
  108. package/dist/vendor/compaction/request.js.map +1 -0
  109. package/dist/vendor/compaction/state.d.ts +28 -0
  110. package/dist/vendor/compaction/state.js +258 -0
  111. package/dist/vendor/compaction/state.js.map +1 -0
  112. package/dist/vendor/compaction/types.d.ts +177 -0
  113. package/dist/vendor/compaction/types.js +4 -0
  114. package/dist/vendor/compaction/types.js.map +1 -0
  115. package/docs/ask.md +52 -0
  116. package/docs/auth.md +53 -0
  117. package/docs/batch.md +48 -0
  118. package/docs/classify.md +55 -0
  119. package/docs/compact.md +58 -0
  120. package/docs/config.md +81 -0
  121. package/docs/extract.md +59 -0
  122. package/docs/find.md +49 -0
  123. package/docs/guidelines.md +19 -0
  124. package/docs/library.md +41 -0
  125. package/docs/match.md +52 -0
  126. package/docs/output.md +65 -0
  127. package/docs/recipes.md +78 -0
  128. package/docs/rerank.md +44 -0
  129. package/docs/route.md +57 -0
  130. package/docs/screen.md +53 -0
  131. package/docs/troubleshooting.md +17 -0
  132. package/docs/verify.md +58 -0
  133. package/package.json +9 -6
package/dist/cli.js CHANGED
@@ -1,17 +1,77 @@
1
1
  #!/usr/bin/env node
2
2
  // jev: TypeSafe's Jev model at the command line.
3
3
  import { createRequire } from "node:module";
4
+ import { styleText } from "node:util";
4
5
  import { Command } from "commander";
5
6
  import { registerAsk } from "./commands/ask.js";
7
+ import { registerAuth } from "./commands/auth.js";
8
+ import { registerBatch } from "./commands/batch.js";
9
+ import { registerClassify } from "./commands/classify.js";
10
+ import { registerCompact } from "./commands/compact.js";
6
11
  import { registerConfig } from "./commands/config.js";
12
+ import { registerExtract } from "./commands/extract.js";
7
13
  import { registerFind } from "./commands/find.js";
14
+ import { registerMatch } from "./commands/match.js";
8
15
  import { registerModels } from "./commands/models.js";
16
+ import { registerRerank } from "./commands/rerank.js";
17
+ import { registerRoute } from "./commands/route.js";
9
18
  import { registerScreen } from "./commands/screen.js";
10
19
  import { registerVerify } from "./commands/verify.js";
11
20
  import { buildContext } from "./context.js";
12
21
  import { CliError, describeError, EXIT } from "./errors.js";
13
22
  const require = createRequire(import.meta.url);
14
23
  const { version, description } = require("../package.json");
24
+ /** One-line summaries and groups for the top-level command list. Full descriptions live on each command. */
25
+ const COMMANDS = {
26
+ verify: { group: "Judgments", summary: "Check claims against evidence; verdict + probabilities per claim" },
27
+ screen: {
28
+ group: "Judgments",
29
+ summary: "Flag prompt injection, filler, and irrelevance before an agent reads text",
30
+ },
31
+ classify: { group: "Judgments", summary: "Assign one, several, or hierarchical labels with confidence" },
32
+ extract: {
33
+ group: "Judgments",
34
+ summary: "Pull typed values out of text (regex candidates, Jev picks, code normalizes)",
35
+ },
36
+ match: {
37
+ group: "Judgments",
38
+ summary: "Decide if record pairs are the same thing: same, different, or unclear",
39
+ },
40
+ route: {
41
+ group: "Judgments",
42
+ summary: "Pick a handler for a request and fill its arguments from closed sets",
43
+ },
44
+ ask: { group: "Judgments", summary: "Ask raw yes/no, choice, or score questions about any state" },
45
+ find: { group: "Ranking", summary: "Rank up to 250 candidates against a plain-language query" },
46
+ rerank: { group: "Ranking", summary: "Score each candidate's relevance independently and sort" },
47
+ compact: {
48
+ group: "Pipelines",
49
+ summary: "Shrink an agent transcript by dropping stale tool calls, verbatim otherwise",
50
+ },
51
+ batch: { group: "Pipelines", summary: "Run a command over many rows with a concurrency pool; emits JSONL" },
52
+ models: { group: "Account", summary: "List the models available to your account" },
53
+ auth: { group: "Account", summary: "Store, inspect, or remove API keys (keychain or 0600 file)" },
54
+ config: { group: "Account", summary: "Show or edit the jev configuration file" },
55
+ };
56
+ const HELP_FOOTER = `
57
+ Examples:
58
+ jev verify "Helmets are optional for adults" --evidence @ordinance.txt
59
+ curl -s https://example.com | jev screen --purpose "extract pricing" --fail-on block,review
60
+ jev classify "The invoice total is wrong" --labels billing,bug,feature --json
61
+ jev find "how do I rotate API keys" --files docs/*.md -k 3
62
+ jev batch classify -i @tickets.txt -- --labels billing,technical,sales
63
+
64
+ Exit codes:
65
+ 0 success
66
+ 1 usage, configuration, input, or transport error
67
+ 2 a --fail-on judgment condition matched (e.g. a contradicted claim)
68
+
69
+ Credentials (first found wins unless --provider is set; environment first, then the jev auth login store):
70
+ TYPESAFE_API_KEY https://console.typesafe.ai/settings/keys
71
+ OPENROUTER_API_KEY (sk-or-...) OpenRouter Decisions API
72
+ CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID Cloudflare Workers AI
73
+
74
+ Website: https://jevcli.vectorz.app Docs: https://docs.typesafe.ai Per-command help: jev <command> --help`;
15
75
  export function createProgram() {
16
76
  const program = new Command();
17
77
  program
@@ -20,26 +80,28 @@ export function createProgram() {
20
80
  .version(version, "-V, --version", "print the version")
21
81
  .showHelpAfterError("(run with --help for usage)")
22
82
  .showSuggestionAfterError()
83
+ .configureHelp({
84
+ helpWidth: Math.min(process.stdout.columns || 100, 110),
85
+ styleTitle: (s) => styleText("bold", s),
86
+ styleCommandText: (s) => styleText("cyan", s),
87
+ styleSubcommandText: (s) => styleText("cyan", s),
88
+ styleOptionText: (s) => styleText("green", s),
89
+ styleArgumentText: (s) => styleText("yellow", s),
90
+ })
91
+ .optionsGroup("Output:")
23
92
  .option("--json", "print results as JSON (same as --format json)")
24
- .option("--format <fmt>", "output format: text or json")
93
+ .option("--md", "Markdown output (same as --format md)")
94
+ .option("--format <fmt>", "text, json, jsonl, csv, tsv, or md")
95
+ .option("--pluck <path>", "print one value from the JSON result, e.g. label or results[].verdict")
96
+ .option("-q, --quiet", "omit the usage/model footer in text output")
97
+ .option("--no-color", "disable colored output")
98
+ .optionsGroup("Model and transport:")
25
99
  .option("-m, --model <name>", "Jev model, e.g. jev-latest or jev-1.13.0")
26
100
  .option("-P, --provider <name>", "auto, typesafe, openrouter, or cloudflare")
27
101
  .option("--timeout <ms>", "per-request timeout in milliseconds")
28
- .option("--no-color", "disable colored output")
29
- .option("-q, --quiet", "omit the usage/model footer in text output")
30
102
  .option("--dry-run", "print the request that would be sent and exit without calling the API")
31
- .addHelpText("after", `
32
- Exit codes:
33
- 0 success
34
- 1 usage, configuration, input, or transport error
35
- 2 a --fail-on judgment condition matched (e.g. a contradicted claim)
36
-
37
- Credentials (first found wins unless --provider is set):
38
- TYPESAFE_API_KEY https://console.typesafe.ai/settings/keys
39
- OPENROUTER_API_KEY (sk-or-...) OpenRouter Decisions API
40
- CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID Cloudflare Workers AI
41
-
42
- Docs: https://docs.typesafe.ai`);
103
+ .optionsGroup("Options:")
104
+ .addHelpText("after", HELP_FOOTER);
43
105
  const run = async (fn, cmd) => {
44
106
  const flags = cmd.optsWithGlobals();
45
107
  const ctx = buildContext(flags);
@@ -47,12 +109,39 @@ Docs: https://docs.typesafe.ai`);
47
109
  if (code !== EXIT.OK)
48
110
  process.exitCode = code;
49
111
  };
112
+ // Registration order is the order shown in --help.
50
113
  registerVerify(program, run);
51
114
  registerScreen(program, run);
52
- registerFind(program, run);
115
+ registerClassify(program, run);
116
+ registerExtract(program, run);
117
+ registerMatch(program, run);
118
+ registerRoute(program, run);
53
119
  registerAsk(program, run);
120
+ registerFind(program, run);
121
+ registerRerank(program, run);
122
+ registerCompact(program, run);
123
+ registerBatch(program, run);
54
124
  registerModels(program, run);
125
+ registerAuth(program, run);
55
126
  registerConfig(program, run);
127
+ for (const cmd of program.commands) {
128
+ const meta = COMMANDS[cmd.name()];
129
+ if (!meta)
130
+ throw new Error(`jev: no help metadata for command "${cmd.name()}"`);
131
+ cmd.summary(meta.summary).helpGroup(`${meta.group}:`);
132
+ }
133
+ program
134
+ .helpCommand(false)
135
+ .command("help [command]")
136
+ .summary("Show help for a command")
137
+ .description("Show help for a command, e.g. jev help verify. Same as jev <command> --help.")
138
+ .helpGroup("Account:")
139
+ .action((name) => {
140
+ const target = name ? program.commands.find((c) => c.name() === name) : program;
141
+ if (!target)
142
+ throw new CliError(`unknown command '${name}' (run jev --help for the list)`, EXIT.ERROR);
143
+ target.outputHelp();
144
+ });
56
145
  return program;
57
146
  }
58
147
  export async function main(argv = process.argv) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import type { Command } from "commander";
2
2
  import type { CommandContext } from "../context.js";
3
3
  import { type AskOutput, type RawQuestions } from "../core/ask.js";
4
+ import type { BatchItemRunner } from "../core/batch.js";
5
+ import { type View } from "../output.js";
4
6
  export interface AskFlags {
5
7
  questions?: string;
6
8
  noul?: string[];
@@ -11,5 +13,7 @@ export interface AskFlags {
11
13
  export declare function resolveState(positional: string | undefined, flags: AskFlags): unknown;
12
14
  export declare function resolveQuestions(flags: AskFlags): RawQuestions;
13
15
  export declare function askAction(positional: string | undefined, flags: AskFlags, ctx: CommandContext): Promise<number>;
14
- export declare function renderAsk(out: AskOutput, ctx: CommandContext): string;
16
+ export declare function renderAsk(out: AskOutput, ctx: CommandContext): View;
15
17
  export declare function registerAsk(program: Command, run: (fn: (ctx: CommandContext) => Promise<number>, cmd: Command) => Promise<void>): void;
18
+ /** Batch: each row is the state; questions are shared. Rows with a "state" field send it as-is. */
19
+ export declare function prepareAskBatch(flags: AskFlags, ctx: CommandContext): BatchItemRunner;
@@ -1,7 +1,7 @@
1
1
  import { parseQuestions, questionsFromFlags, runAsk, } from "../core/ask.js";
2
2
  import { CliError, EXIT } from "../errors.js";
3
3
  import { parseJson, readInput, readStdin } from "../input.js";
4
- import { emit, formatProbability, paint, usageLine } from "../output.js";
4
+ import { emit, formatProbability, paint } from "../output.js";
5
5
  export function resolveState(positional, flags) {
6
6
  let raw;
7
7
  if (positional !== undefined)
@@ -34,7 +34,7 @@ export async function askAction(positional, flags, ctx) {
34
34
  const state = resolveState(positional, flags);
35
35
  const questions = resolveQuestions(flags);
36
36
  if (ctx.dryRun) {
37
- emit({ ...ctx.output, format: "json" }, { model: ctx.config.model, state, questions }, () => "");
37
+ emit({ ...ctx.output, format: "json" }, { model: ctx.config.model, state, questions }, () => ({}));
38
38
  return EXIT.OK;
39
39
  }
40
40
  const output = await runAsk(ctx.ask(), { state, questions });
@@ -43,32 +43,36 @@ export async function askAction(positional, flags, ctx) {
43
43
  }
44
44
  export function renderAsk(out, ctx) {
45
45
  const c = ctx.output.color;
46
- const lines = [];
46
+ const head = [];
47
+ const kv = [];
47
48
  for (const [id, answer] of Object.entries(out.answers)) {
49
+ // biome-ignore lint/suspicious/noExplicitAny: answer payloads are the SDK's loosely typed union
48
50
  const a = answer;
49
51
  if (a?.type === "noul") {
50
- lines.push(`${paint(c, "bold", id)}: ${formatProbability(a.noul)}`);
52
+ head.push(`${paint(c, "bold", id)}: ${formatProbability(a.noul)}`);
53
+ kv.push([id, formatProbability(a.noul)]);
51
54
  }
52
55
  else if (a?.type === "choice") {
53
56
  const dist = Object.entries(a.probabilities ?? {})
54
57
  .sort(([, x], [, y]) => y - x)
55
58
  .map(([k, v]) => `${k} ${formatProbability(v)}`)
56
59
  .join(", ");
57
- lines.push(`${paint(c, "bold", id)}: ${paint(c, "green", String(a.choice))} conf ${formatProbability(a.confidence)} [${dist}]`);
60
+ head.push(`${paint(c, "bold", id)}: ${paint(c, "green", String(a.choice))} conf ${formatProbability(a.confidence)} [${dist}]`);
61
+ kv.push([id, `${a.choice} (conf ${formatProbability(a.confidence)})`]);
58
62
  }
59
63
  else if (a?.type === "score") {
60
64
  const levels = Object.entries(a.probabilities ?? {})
61
65
  .map(([k, v]) => `${k} ${formatProbability(v)}`)
62
66
  .join(", ");
63
- lines.push(`${paint(c, "bold", id)}: ${paint(c, "green", Number(a.score).toFixed(2))} conf ${formatProbability(a.confidence)} [${levels}]`);
67
+ head.push(`${paint(c, "bold", id)}: ${paint(c, "green", Number(a.score).toFixed(2))} conf ${formatProbability(a.confidence)} [${levels}]`);
68
+ kv.push([id, `${Number(a.score).toFixed(2)} (conf ${formatProbability(a.confidence)})`]);
64
69
  }
65
70
  else {
66
- lines.push(`${paint(c, "bold", id)}: ${JSON.stringify(answer)}`);
71
+ head.push(`${paint(c, "bold", id)}: ${JSON.stringify(answer)}`);
72
+ kv.push([id, JSON.stringify(answer)]);
67
73
  }
68
74
  }
69
- if (!ctx.output.quiet)
70
- lines.push(paint(c, "dim", usageLine(out.usage, out.model, out.provider)));
71
- return lines.join("\n");
75
+ return { head, kv, usage: { usage: out.usage, model: out.model, provider: out.provider } };
72
76
  }
73
77
  export function registerAsk(program, run) {
74
78
  program
@@ -93,4 +97,17 @@ Examples:
93
97
  function collect(value, previous) {
94
98
  return [...previous, value];
95
99
  }
100
+ /** Batch: each row is the state; questions are shared. Rows with a "state" field send it as-is. */
101
+ export function prepareAskBatch(flags, ctx) {
102
+ const questions = resolveQuestions(flags);
103
+ return async (row) => {
104
+ const state = row.state !== undefined && typeof row.state !== "string"
105
+ ? row.state
106
+ : flags.stateJson
107
+ ? parseJson(row.text, `row ${row.id} state`)
108
+ : row.text;
109
+ const output = await runAsk(ctx.ask(), { state, questions });
110
+ return { output, failed: false };
111
+ };
112
+ }
96
113
  //# sourceMappingURL=ask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Command } from "commander";
2
+ import type { CommandContext } from "../context.js";
3
+ import { type CredentialProvider } from "../credentials.js";
4
+ /** Prompt for a secret, echoing `*` per keystroke. Falls back to reading one line from a pipe. */
5
+ export declare function promptSecret(prompt: string): Promise<string>;
6
+ export declare function validateKey(provider: CredentialProvider, key: string): void;
7
+ export declare function authLogin(providerName: string | undefined, flags: {
8
+ keyStdin?: boolean;
9
+ }, ctx: CommandContext, env?: NodeJS.ProcessEnv): Promise<number>;
10
+ export declare function authStatus(ctx: CommandContext, env?: NodeJS.ProcessEnv): number;
11
+ export declare function authLogout(providerName: string | undefined, flags: {
12
+ all?: boolean;
13
+ }, ctx: CommandContext, env?: NodeJS.ProcessEnv): number;
14
+ export declare function registerAuth(program: Command, run: (fn: (ctx: CommandContext) => Promise<number>, cmd: Command) => Promise<void>): void;
@@ -0,0 +1,158 @@
1
+ import { CREDENTIAL_PROVIDERS, ENV_VAR, resolveCredentials, resolveStore, } from "../credentials.js";
2
+ import { CliError, EXIT } from "../errors.js";
3
+ import { readStdin } from "../input.js";
4
+ import { emit, paint } from "../output.js";
5
+ import { mask } from "./config.js";
6
+ function providerArg(raw) {
7
+ const p = (raw ?? "typesafe").toLowerCase();
8
+ if (!CREDENTIAL_PROVIDERS.includes(p)) {
9
+ throw new CliError(`Unknown provider "${raw}". Allowed: ${CREDENTIAL_PROVIDERS.join(", ")}.`);
10
+ }
11
+ return p;
12
+ }
13
+ /** Prompt for a secret, echoing `*` per keystroke. Falls back to reading one line from a pipe. */
14
+ export async function promptSecret(prompt) {
15
+ if (!process.stdin.isTTY)
16
+ return readStdin("API key").split(/\r?\n/)[0]?.trim() ?? "";
17
+ process.stderr.write(prompt);
18
+ return new Promise((resolve, reject) => {
19
+ const stdin = process.stdin;
20
+ const wasRaw = stdin.isRaw;
21
+ stdin.setRawMode(true);
22
+ stdin.resume();
23
+ stdin.setEncoding("utf8");
24
+ let input = "";
25
+ const cleanup = () => {
26
+ stdin.removeListener("data", onData);
27
+ stdin.setRawMode(wasRaw ?? false);
28
+ stdin.pause();
29
+ };
30
+ const onData = (chunk) => {
31
+ for (const char of chunk) {
32
+ if (char === "\r" || char === "\n") {
33
+ cleanup();
34
+ process.stderr.write("\n");
35
+ resolve(input.trim());
36
+ return;
37
+ }
38
+ if (char === "\u0003") {
39
+ cleanup();
40
+ process.stderr.write("\n");
41
+ reject(new CliError("Aborted."));
42
+ return;
43
+ }
44
+ if (char === "\u007f" || char === "\b") {
45
+ if (input.length > 0) {
46
+ input = input.slice(0, -1);
47
+ process.stderr.write("\b \b");
48
+ }
49
+ continue;
50
+ }
51
+ input += char;
52
+ process.stderr.write("*");
53
+ }
54
+ };
55
+ stdin.on("data", onData);
56
+ });
57
+ }
58
+ export function validateKey(provider, key) {
59
+ if (!key)
60
+ throw new CliError("No key entered.");
61
+ if (/\s/.test(key))
62
+ throw new CliError("The key contains whitespace; paste it without spaces or line breaks.");
63
+ if (provider === "openrouter" && !key.startsWith("sk-or-"))
64
+ throw new CliError("OpenRouter keys start with sk-or-.");
65
+ }
66
+ export async function authLogin(providerName, flags, ctx, env = process.env) {
67
+ const provider = providerArg(providerName);
68
+ const store = resolveStore(env);
69
+ const key = flags.keyStdin
70
+ ? (readStdin("API key").split(/\r?\n/)[0]?.trim() ?? "")
71
+ : await promptSecret(`Paste your ${provider} API key: `);
72
+ validateKey(provider, key);
73
+ store.set(provider, key);
74
+ const note = env[ENV_VAR[provider]]
75
+ ? ` Note: ${ENV_VAR[provider]} is set in this shell and will take precedence until you unset it.`
76
+ : "";
77
+ emit(ctx.output, { command: "auth", action: "login", provider, store: store.kind, location: store.location }, () => ({ head: [`Stored the ${provider} key in ${store.location}.${note}`] }));
78
+ return EXIT.OK;
79
+ }
80
+ export function authStatus(ctx, env = process.env) {
81
+ const store = resolveStore(env);
82
+ const rows = resolveCredentials(env, store).map((c) => {
83
+ const value = c.source === "env" ? env[ENV_VAR[c.provider]] : c.value;
84
+ return { provider: c.provider, env_var: ENV_VAR[c.provider], source: c.source, key: mask(value) };
85
+ });
86
+ const payload = {
87
+ command: "auth",
88
+ action: "status",
89
+ store: store.kind,
90
+ location: store.location,
91
+ credentials: rows,
92
+ };
93
+ emit(ctx.output, payload, () => {
94
+ const c = ctx.output.color;
95
+ return {
96
+ table: {
97
+ columns: ["Provider", "Source", "Key"],
98
+ rows: rows.map(({ provider, source, key: masked }) => [
99
+ provider,
100
+ source === "none" ? paint(c, "dim", "none") : source,
101
+ masked ?? paint(c, "dim", "-"),
102
+ ]),
103
+ },
104
+ tail: [paint(c, "dim", `store: ${store.location}`)],
105
+ };
106
+ });
107
+ return rows.some((r) => r.source !== "none") ? EXIT.OK : EXIT.ERROR;
108
+ }
109
+ export function authLogout(providerName, flags, ctx, env = process.env) {
110
+ const store = resolveStore(env);
111
+ const providers = flags.all ? [...CREDENTIAL_PROVIDERS] : [providerArg(providerName)];
112
+ const removed = providers.filter((p) => store.delete(p));
113
+ emit(ctx.output, { command: "auth", action: "logout", removed, store: store.kind }, () => ({
114
+ head: [
115
+ removed.length
116
+ ? `Removed ${removed.join(", ")} from ${store.location}.`
117
+ : `Nothing stored for ${providers.join(", ")} in ${store.location}.`,
118
+ ],
119
+ }));
120
+ return EXIT.OK;
121
+ }
122
+ export function registerAuth(program, run) {
123
+ const auth = program
124
+ .command("auth")
125
+ .description("Store the API key in the OS keychain (or a 0600 file) instead of exporting it.");
126
+ auth
127
+ .command("login")
128
+ .description("Prompt for a key (masked input) and store it. Reads one line from stdin when piped or with --key-stdin.")
129
+ .argument("[provider]", "typesafe (default) or openrouter")
130
+ .option("--key-stdin", "read the key from stdin (for scripts and password managers)")
131
+ .addHelpText("after", `
132
+ Examples:
133
+ jev auth login
134
+ op read "op://Private/TypeSafe/credential" | jev auth login --key-stdin
135
+ jev auth login openrouter
136
+
137
+ Where it goes: macOS Keychain (service "jevctl"), Linux Secret Service via secret-tool, otherwise
138
+ ~/.config/jev/credentials.json with mode 0600. Force one with JEV_CREDENTIAL_STORE=file|keychain.
139
+ Resolution order at run time: environment variable, then the store. JEV_NO_STORED_CREDENTIALS=1 disables the store.`)
140
+ .action(async (provider, flags, cmd) => {
141
+ await run((ctx) => authLogin(provider, flags, ctx), cmd);
142
+ });
143
+ auth
144
+ .command("status", { isDefault: true })
145
+ .description("Show where each provider's key comes from (env, keychain, file, none), masked.")
146
+ .action(async (_flags, cmd) => {
147
+ await run(async (ctx) => authStatus(ctx, process.env), cmd);
148
+ });
149
+ auth
150
+ .command("logout")
151
+ .description("Remove a stored key.")
152
+ .argument("[provider]", "typesafe (default) or openrouter")
153
+ .option("--all", "remove every stored key")
154
+ .action(async (provider, flags, cmd) => {
155
+ await run(async (ctx) => authLogout(provider, flags, ctx), cmd);
156
+ });
157
+ }
158
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { Command } from "commander";
2
+ import type { CommandContext } from "../context.js";
3
+ import { type BatchItemRunner } from "../core/batch.js";
4
+ type Register = (program: Command, run: (fn: (ctx: CommandContext) => Promise<number>, cmd: Command) => Promise<void>) => void;
5
+ type Prepare = (flags: any, ctx: CommandContext) => BatchItemRunner;
6
+ /** Commands that accept one text input per row. */
7
+ export declare const BATCHABLE: Record<string, {
8
+ register: Register;
9
+ prepare: Prepare;
10
+ rowIs: string;
11
+ }>;
12
+ export interface BatchFlags {
13
+ input?: string;
14
+ output?: string;
15
+ concurrency?: string;
16
+ failFast?: boolean;
17
+ }
18
+ /**
19
+ * Parse the sub-command's own flags by running its commander definition in capture mode.
20
+ * Commands with a required positional (find, rerank) get a placeholder so parsing succeeds;
21
+ * any other positional means the user passed a text argument that each row should supply.
22
+ */
23
+ export declare function captureSubFlags(command: string, argv: string[]): Promise<Record<string, unknown>>;
24
+ export declare function batchAction(command: string, subArgs: string[], flags: BatchFlags, ctx: CommandContext): Promise<number>;
25
+ /** One-cell summary of a sub-command result, for csv/tsv/md batch tables. */
26
+ export declare function summarizeResult(result: unknown): string;
27
+ export declare function registerBatch(program: Command, run: (fn: (ctx: CommandContext) => Promise<number>, cmd: Command) => Promise<void>): void;
28
+ export {};