jinzd-ai-cli 0.4.279 → 0.4.281

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 (34) hide show
  1. package/dist/{batch-6QZSWCBL.js → batch-237ZXBQD.js} +2 -2
  2. package/dist/{chunk-2BKRWTEQ.js → chunk-2FCKZ3OS.js} +1 -1
  3. package/dist/{chunk-UD3BVNC5.js → chunk-4XJVSMZ6.js} +1 -1
  4. package/dist/{chunk-5XHEXRMN.js → chunk-5GYOQ7EF.js} +1 -1
  5. package/dist/{chunk-CGDYO52A.js → chunk-6NO5FZW6.js} +1 -0
  6. package/dist/{chunk-JLOQBYU4.js → chunk-BVGSR3BA.js} +3 -3
  7. package/dist/{chunk-FQJFGGKN.js → chunk-FHRIDE2T.js} +4 -4
  8. package/dist/{chunk-6WMT7OQG.js → chunk-H2VE4TTN.js} +1 -1
  9. package/dist/{chunk-CMNXAJLH.js → chunk-IXEKDAIX.js} +1 -1
  10. package/dist/{chunk-NZPHEUJM.js → chunk-J3RWNQOF.js} +1 -1
  11. package/dist/{chunk-7L4TEK7Q.js → chunk-J5TXHFDO.js} +122 -3
  12. package/dist/{chunk-RJY3HJS4.js → chunk-JT2A2M4F.js} +1 -1
  13. package/dist/{chunk-IIXZ7IPN.js → chunk-L7C34TFI.js} +1 -1
  14. package/dist/{chunk-JS6VAPWM.js → chunk-UTJQXG4P.js} +3 -3
  15. package/dist/{chunk-MX75TNE5.js → chunk-VB54ILH7.js} +1 -1
  16. package/dist/{chunk-SIVM2YQQ.js → chunk-WUIOUJA2.js} +1 -1
  17. package/dist/{ci-F4ESOYI5.js → ci-LXRTYJ6F.js} +4 -4
  18. package/dist/{ci-format-AIRW3TVQ.js → ci-format-II3OT2VU.js} +2 -2
  19. package/dist/{constants-3VMMZJDS.js → constants-X53QCUTP.js} +1 -1
  20. package/dist/{doctor-cli-WVMEWMYE.js → doctor-cli-6JCJEQR4.js} +4 -4
  21. package/dist/electron-server.js +144 -91
  22. package/dist/{hub-JJCCCU3O.js → hub-RXAFF7QI.js} +2 -2
  23. package/dist/index.js +68 -130
  24. package/dist/{persist-PQM4BRI4.js → persist-TBQILDSE.js} +2 -2
  25. package/dist/{persistent-memory-KSZKM4JG.js → persistent-memory-7CKJLS25.js} +2 -2
  26. package/dist/{persistent-memory-QZN4Q3W4.js → persistent-memory-WAKFKH2I.js} +2 -2
  27. package/dist/{pr-GFB5JC26.js → pr-DZTRHAMG.js} +4 -4
  28. package/dist/{run-tests-HMHHIG7Y.js → run-tests-4ESYEROQ.js} +2 -2
  29. package/dist/{run-tests-EL54INOI.js → run-tests-XGCNUT5S.js} +2 -2
  30. package/dist/{server-WUSJWC3A.js → server-6RYXFG3H.js} +60 -98
  31. package/dist/{server-6C7GITHY.js → server-EFA7UP4I.js} +5 -5
  32. package/dist/{task-orchestrator-C7RUUA2Q.js → task-orchestrator-H3AEIHR3.js} +5 -5
  33. package/dist/{usage-CW6BT2UV.js → usage-W7TZWHY7.js} +2 -2
  34. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -11,7 +11,13 @@ import {
11
11
  autoTrimSessionIfNeeded,
12
12
  buildInitPrompt,
13
13
  buildSessionCostReport,
14
+ buildSessionExport,
15
+ checkpointDeletedMessage,
16
+ checkpointNotFoundMessage,
17
+ checkpointRestoredMessage,
18
+ checkpointSavedMessage,
14
19
  clearDevState,
20
+ clearedSessionMessage,
15
21
  costSourceNote,
16
22
  decideDeferredSave,
17
23
  decideModel,
@@ -19,10 +25,13 @@ import {
19
25
  estimateConversationTokens,
20
26
  evaluateContextPressure,
21
27
  filterMemoryEntries,
28
+ formatCheckpointList,
22
29
  formatSessionSummaryLine,
23
30
  loadDevState,
24
31
  parseBatchDeleteArgs,
32
+ parseCheckpointCommand,
25
33
  parseCleanArgs,
34
+ parseExportArgs,
26
35
  parseMemoryShowFilters,
27
36
  parseModelCommand,
28
37
  parseRouteCommand,
@@ -45,7 +54,7 @@ import {
45
54
  setupProxy,
46
55
  snapshotFile,
47
56
  stripRoutingTags
48
- } from "./chunk-7L4TEK7Q.js";
57
+ } from "./chunk-J5TXHFDO.js";
49
58
  import {
50
59
  CostTracker,
51
60
  computeCost,
@@ -75,7 +84,7 @@ import {
75
84
  setMaxOutputCap,
76
85
  spawnAgentContext,
77
86
  undoStack
78
- } from "./chunk-FQJFGGKN.js";
87
+ } from "./chunk-FHRIDE2T.js";
79
88
  import {
80
89
  buildReviewPrompt,
81
90
  buildSecurityReviewPrompt
@@ -116,7 +125,7 @@ import {
116
125
  touchMemoryReferences,
117
126
  updateMemoryApproval,
118
127
  updateMemoryEntry
119
- } from "./chunk-6WMT7OQG.js";
128
+ } from "./chunk-H2VE4TTN.js";
120
129
  import "./chunk-4DEMGCK4.js";
121
130
  import "./chunk-UUSRWSSX.js";
122
131
  import "./chunk-CKH4KQ4E.js";
@@ -129,7 +138,7 @@ import {
129
138
  import {
130
139
  SessionManager,
131
140
  getContentText
132
- } from "./chunk-CGDYO52A.js";
141
+ } from "./chunk-6NO5FZW6.js";
133
142
  import "./chunk-NYNSYLFY.js";
134
143
  import {
135
144
  DEFAULT_PATTERNS,
@@ -140,7 +149,7 @@ import {
140
149
  formatDoctorReport,
141
150
  loadContextFiles,
142
151
  writeCrashLog
143
- } from "./chunk-JLOQBYU4.js";
152
+ } from "./chunk-BVGSR3BA.js";
144
153
  import {
145
154
  describePlugin,
146
155
  getActivePluginAssets,
@@ -157,14 +166,14 @@ import {
157
166
  trustHook,
158
167
  trustPlugin,
159
168
  untrustHook
160
- } from "./chunk-IIXZ7IPN.js";
169
+ } from "./chunk-L7C34TFI.js";
161
170
  import {
162
171
  ProviderRegistry,
163
172
  listBuiltInProviderMetadata
164
173
  } from "./chunk-UGY5SVNX.js";
165
174
  import {
166
175
  ConfigManager
167
- } from "./chunk-UD3BVNC5.js";
176
+ } from "./chunk-4XJVSMZ6.js";
168
177
  import {
169
178
  CONTENT_ONLY_STREAM_REMINDER,
170
179
  TEE_FINAL_USER_NUDGE,
@@ -202,7 +211,7 @@ import {
202
211
  import {
203
212
  fileCheckpoints
204
213
  } from "./chunk-4BKXL7SM.js";
205
- import "./chunk-NZPHEUJM.js";
214
+ import "./chunk-J3RWNQOF.js";
206
215
  import {
207
216
  AGENTIC_BEHAVIOR_GUIDELINE,
208
217
  AUTHOR,
@@ -220,7 +229,7 @@ import {
220
229
  SKILLS_DIR_NAME,
221
230
  VERSION,
222
231
  buildUserIdentityPrompt
223
- } from "./chunk-2BKRWTEQ.js";
232
+ } from "./chunk-2FCKZ3OS.js";
224
233
 
225
234
  // src/index.ts
226
235
  import { program } from "commander";
@@ -1338,7 +1347,7 @@ No tools match "${filter}".
1338
1347
  const { join: join6 } = await import("path");
1339
1348
  const { existsSync: existsSync6 } = await import("fs");
1340
1349
  const { getGitRoot: getGitRoot2 } = await import("./git-context-EXOEHQSF.js");
1341
- const { MCP_PROJECT_CONFIG_NAME: MCP_PROJECT_CONFIG_NAME2 } = await import("./constants-3VMMZJDS.js");
1350
+ const { MCP_PROJECT_CONFIG_NAME: MCP_PROJECT_CONFIG_NAME2 } = await import("./constants-X53QCUTP.js");
1342
1351
  const { approveProject, hashMcpFile } = await import("./project-trust-NKYHL3VZ.js");
1343
1352
  const cwd = process.cwd();
1344
1353
  const projectRoot = getGitRoot2(cwd) ?? cwd;
@@ -2258,7 +2267,7 @@ function createReviewCommands() {
2258
2267
  usage: "/test [command|filter]",
2259
2268
  async execute(args, ctx) {
2260
2269
  try {
2261
- const { executeTests } = await import("./run-tests-EL54INOI.js");
2270
+ const { executeTests } = await import("./run-tests-XGCNUT5S.js");
2262
2271
  const argStr = args.join(" ").trim();
2263
2272
  let testArgs = {};
2264
2273
  if (argStr) {
@@ -3010,13 +3019,17 @@ function createSessionCommands() {
3010
3019
  return [
3011
3020
  {
3012
3021
  name: "clear",
3013
- description: "Clear conversation history",
3022
+ description: "Start a new session (previous conversation is kept)",
3014
3023
  usage: "/clear",
3015
- execute(_args, ctx) {
3016
- ctx.sessions.current?.clear();
3024
+ async execute(_args, ctx) {
3025
+ const prior = ctx.sessions.current;
3026
+ const priorId = prior?.id ?? null;
3027
+ const priorCount = prior?.messages.length ?? 0;
3028
+ if (priorCount > 0) await ctx.sessions.save();
3029
+ ctx.sessions.createSession(ctx.getCurrentProvider(), ctx.getCurrentModel());
3017
3030
  ctx.resetSessionTokenUsage();
3018
3031
  ctx.clearDevState();
3019
- ctx.renderer.printInfo("Conversation cleared.");
3032
+ ctx.renderer.printInfo(clearedSessionMessage(priorId, priorCount));
3020
3033
  }
3021
3034
  },
3022
3035
  {
@@ -3281,76 +3294,20 @@ function createSessionCommands() {
3281
3294
  description: "Export current session to file or stdout",
3282
3295
  usage: "/export [md|json] [filename]",
3283
3296
  execute(args, ctx) {
3284
- let format = "md";
3285
- let outFile = null;
3286
- for (const arg of args) {
3287
- if (arg === "md" || arg === "json") {
3288
- format = arg;
3289
- } else if (arg) {
3290
- outFile = arg;
3291
- }
3292
- }
3297
+ const { format, outFile } = parseExportArgs(args);
3293
3298
  const session = ctx.sessions.current;
3294
3299
  if (!session || session.messages.length === 0) {
3295
3300
  ctx.renderer.printInfo("No messages to export.");
3296
3301
  return;
3297
3302
  }
3298
- let output;
3299
- if (format === "json") {
3300
- output = JSON.stringify(session.toJSON(), null, 2);
3301
- } else {
3302
- const dateStr = session.created.toISOString().replace("T", " ").slice(0, 19);
3303
- let md = `# Conversation Export
3304
-
3305
- `;
3306
- md += `| Field | Value |
3307
- |----------|-------|
3308
- `;
3309
- md += `| Provider | ${session.provider} |
3310
- `;
3311
- md += `| Model | ${session.model} |
3312
- `;
3313
- md += `| Date | ${dateStr} |
3314
- `;
3315
- md += `| Session | ${session.id.slice(0, 8)} |
3316
-
3317
- ---
3318
-
3319
- `;
3320
- for (const msg of session.messages) {
3321
- const role = msg.role === "user" ? "## \u{1F464} You" : "## \u{1F916} Assistant";
3322
- const text = getContentText(msg.content);
3323
- md += `${role}
3324
-
3325
- ${text}
3326
-
3327
- ---
3328
-
3329
- `;
3330
- }
3331
- output = md;
3332
- }
3333
- if (outFile) {
3334
- const absPath = resolve(process.cwd(), outFile);
3335
- try {
3336
- mkdirSync2(dirname2(absPath), { recursive: true });
3337
- writeFileSync2(absPath, output, "utf-8");
3338
- ctx.renderer.printSuccess(`Exported ${session.messages.length} messages \u2192 ${absPath}`);
3339
- } catch (err) {
3340
- ctx.renderer.renderError(`Failed to write file: ${err instanceof Error ? err.message : String(err)}`);
3341
- }
3342
- } else {
3343
- const shortId = session.id.slice(0, 8);
3344
- const dateTag = session.created.toISOString().slice(0, 10);
3345
- const ext = format === "json" ? "json" : "md";
3346
- const autoName = `session-${dateTag}-${shortId}.${ext}`;
3347
- const absPath = resolve(process.cwd(), autoName);
3348
- try {
3349
- writeFileSync2(absPath, output, "utf-8");
3350
- ctx.renderer.printSuccess(`Exported ${session.messages.length} messages \u2192 ${absPath}`);
3351
- } catch (err) {
3352
- ctx.renderer.renderError(`Failed to write file: ${err instanceof Error ? err.message : String(err)}`);
3353
- }
3303
+ const exported = buildSessionExport(session, format, outFile);
3304
+ const absPath = resolve(process.cwd(), exported.filename);
3305
+ try {
3306
+ mkdirSync2(dirname2(absPath), { recursive: true });
3307
+ writeFileSync2(absPath, exported.content, "utf-8");
3308
+ ctx.renderer.printSuccess(`Exported ${exported.messageCount} messages \u2192 ${absPath}`);
3309
+ } catch (err) {
3310
+ ctx.renderer.renderError(`Failed to write file: ${err instanceof Error ? err.message : String(err)}`);
3354
3311
  }
3355
3312
  }
3356
3313
  },
@@ -3364,59 +3321,40 @@ ${text}
3364
3321
  ctx.renderer.renderError("No active session.");
3365
3322
  return;
3366
3323
  }
3367
- const sub = args[0]?.toLowerCase();
3368
- if (!sub || sub === "list") {
3369
- const cps = ctx.listCheckpoints();
3370
- if (cps.length === 0) {
3371
- console.log(theme.dim(" No checkpoints. Use /checkpoint save <name> to create one."));
3372
- return;
3373
- }
3374
- console.log(theme.dim(` Checkpoints (${cps.length}):`));
3375
- for (const cp of cps) {
3376
- const ts = cp.timestamp.toLocaleString();
3377
- console.log(theme.accent(` ${cp.name.padEnd(20)} `) + theme.dim(`msg #${cp.messageIndex} ${ts}`));
3324
+ const intent = parseCheckpointCommand(args);
3325
+ if (intent.kind === "list") {
3326
+ const lines = formatCheckpointList(ctx.listCheckpoints());
3327
+ console.log(theme.dim(` ${lines[0]}`));
3328
+ for (const line of lines.slice(1)) {
3329
+ const [name, rest] = [line.slice(0, 24), line.slice(24)];
3330
+ console.log(theme.accent(` ${name}`) + theme.dim(rest));
3378
3331
  }
3379
3332
  console.log();
3380
3333
  return;
3381
3334
  }
3382
- const name = args.slice(1).join(" ").trim();
3383
- if (sub === "save") {
3384
- if (!name) {
3385
- ctx.renderer.renderError("Usage: /checkpoint save <name>");
3386
- return;
3387
- }
3388
- ctx.createCheckpoint(name);
3389
- console.log(theme.success(` \u2713 Checkpoint "${name}" saved at message #${session.messages.length}`));
3335
+ if (intent.kind === "usage" || intent.kind === "unknown") {
3336
+ ctx.renderer.renderError(intent.message);
3390
3337
  return;
3391
3338
  }
3392
- if (sub === "restore") {
3393
- if (!name) {
3394
- ctx.renderer.renderError("Usage: /checkpoint restore <name>");
3395
- return;
3396
- }
3397
- const ok = ctx.restoreCheckpoint(name);
3398
- if (ok) {
3399
- ctx.resetSessionTokenUsage();
3400
- console.log(theme.success(` \u2713 Restored to checkpoint "${name}" (${session.messages.length} messages, token usage reset)`));
3401
- } else {
3402
- ctx.renderer.renderError(`Checkpoint "${name}" not found.`);
3403
- }
3339
+ if (intent.kind === "save") {
3340
+ ctx.createCheckpoint(intent.name);
3341
+ console.log(theme.success(` ${checkpointSavedMessage(intent.name, session.messages.length)}`));
3404
3342
  return;
3405
3343
  }
3406
- if (sub === "delete") {
3407
- if (!name) {
3408
- ctx.renderer.renderError("Usage: /checkpoint delete <name>");
3344
+ if (intent.kind === "restore") {
3345
+ if (!ctx.restoreCheckpoint(intent.name)) {
3346
+ ctx.renderer.renderError(checkpointNotFoundMessage(intent.name));
3409
3347
  return;
3410
3348
  }
3411
- const ok = ctx.deleteCheckpoint(name);
3412
- if (ok) {
3413
- console.log(theme.success(` \u2713 Deleted checkpoint "${name}"`));
3414
- } else {
3415
- ctx.renderer.renderError(`Checkpoint "${name}" not found.`);
3416
- }
3349
+ ctx.resetSessionTokenUsage();
3350
+ console.log(theme.success(` ${checkpointRestoredMessage(intent.name, session.messages.length)}`));
3351
+ return;
3352
+ }
3353
+ if (!ctx.deleteCheckpoint(intent.name)) {
3354
+ ctx.renderer.renderError(checkpointNotFoundMessage(intent.name));
3417
3355
  return;
3418
3356
  }
3419
- ctx.renderer.renderError(`Unknown subcommand: ${sub}. Use save/restore/list/delete.`);
3357
+ console.log(theme.success(` ${checkpointDeletedMessage(intent.name)}`));
3420
3358
  }
3421
3359
  },
3422
3360
  // ── /review ──────────────────────────────────────────────────
@@ -7336,7 +7274,7 @@ program.command("web").description("Start Web UI server with browser-based chat
7336
7274
  console.error("Error: Invalid port number. Must be between 1 and 65535.");
7337
7275
  process.exit(1);
7338
7276
  }
7339
- const { startWebServer } = await import("./server-WUSJWC3A.js");
7277
+ const { startWebServer } = await import("./server-6RYXFG3H.js");
7340
7278
  await startWebServer({ port, host: options.host });
7341
7279
  });
7342
7280
  program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | logout-all <name> | migrate <name>)").action(async (action, username) => {
@@ -7503,11 +7441,11 @@ program.command("sessions").description("List recent conversation sessions").opt
7503
7441
  console.log(footer + "\n");
7504
7442
  });
7505
7443
  program.command("usage").description("Show token + cost usage grouped by provider/model (cross-session)").option("--days <n>", "Only the last N days (inclusive of today)").option("--month <ym>", "Only a specific month, format YYYY-MM (e.g. 2026-06)").option("--json", "Output as JSON (for scripting)").action(async (options) => {
7506
- const { runUsageCli } = await import("./usage-CW6BT2UV.js");
7444
+ const { runUsageCli } = await import("./usage-W7TZWHY7.js");
7507
7445
  await runUsageCli(options);
7508
7446
  });
7509
7447
  program.command("doctor").description("Health check: API keys, config, MCP, recent crashes, tool usage, disk usage").option("--json", "Output as JSON (for scripting)").option("--reset-stats", "Reset accumulated tool usage statistics").action(async (options) => {
7510
- const { runDoctorCli } = await import("./doctor-cli-WVMEWMYE.js");
7448
+ const { runDoctorCli } = await import("./doctor-cli-6JCJEQR4.js");
7511
7449
  const argv = process.argv.slice(2);
7512
7450
  await runDoctorCli({
7513
7451
  json: !!options.json || argv.includes("--json"),
@@ -7516,7 +7454,7 @@ program.command("doctor").description("Health check: API keys, config, MCP, rece
7516
7454
  });
7517
7455
  program.command("batch <action> [arg] [arg2]").description("Anthropic Message Batches: submit | list | status <id> | results <id> [out] | cancel <id>").option("--dry-run", "Parse and validate input without submitting (submit only)").action(async (action, arg, arg2, options) => {
7518
7456
  try {
7519
- const batch = await import("./batch-6QZSWCBL.js");
7457
+ const batch = await import("./batch-237ZXBQD.js");
7520
7458
  switch (action) {
7521
7459
  case "submit":
7522
7460
  if (!arg) {
@@ -7559,7 +7497,7 @@ program.command("batch <action> [arg] [arg2]").description("Anthropic Message Ba
7559
7497
  }
7560
7498
  });
7561
7499
  program.command("mcp-serve").description("Start an MCP server over STDIO, exposing aicli's built-in tools to Claude Desktop / Cursor / other MCP clients").option("--allow-destructive", "Allow bash / run_interactive / task_create (always destructive in MCP mode)").option("--allow-outside-cwd", "Allow tool path arguments to escape the sandbox root \u2014 disabled by default").option("--tools <list>", "Comma-separated whitelist of tools to expose (default: all eligible tools)").option("--cwd <path>", "Working directory AND sandbox root (default: current directory)").action(async (options) => {
7562
- const { startMcpServer } = await import("./server-6C7GITHY.js");
7500
+ const { startMcpServer } = await import("./server-EFA7UP4I.js");
7563
7501
  await startMcpServer({
7564
7502
  allowDestructive: !!options.allowDestructive,
7565
7503
  allowOutsideCwd: !!options.allowOutsideCwd,
@@ -7572,7 +7510,7 @@ program.command("pr <action> [target]").description("PR review helpers: review |
7572
7510
  console.error(`Unknown pr action: ${action}. Use review | security-review | summarize.`);
7573
7511
  process.exit(1);
7574
7512
  }
7575
- const { runPrCli } = await import("./pr-GFB5JC26.js");
7513
+ const { runPrCli } = await import("./pr-DZTRHAMG.js");
7576
7514
  const result = await runPrCli({
7577
7515
  action,
7578
7516
  target,
@@ -7592,8 +7530,8 @@ program.command("pr <action> [target]").description("PR review helpers: review |
7592
7530
  process.exit(result.exitCode);
7593
7531
  });
7594
7532
  program.command("ci").description("Headless PR review (code + security) \u2014 reads git/gh diff, optionally posts to PR. Designed for GitHub Actions.").option("--pr <num>", "PR number or URL; diff fetched via gh pr diff <value>", (v) => /^#?\d+$/.test(v) ? parseInt(v.replace(/^#/, ""), 10) : v).option("--base <ref>", "Base ref for git diff <ref>...HEAD (ignored when --pr set)").option("--post", "Post review as a PR comment (requires gh CLI + GH_TOKEN, needs --pr)").option("--no-update", "Always create a new comment instead of updating the previous aicli review").option("--skip-code", "Skip the code review section").option("--skip-security", "Skip the security review section").option("--detailed", "Use the detailed code-review prompt").option("--max-diff <n>", "Max diff chars sent to the model (default 30000)", (v) => parseInt(v, 10)).option("--provider <id>", "Override provider (default: config.defaultProvider)").option("--model <id>", "Override model").option("--dry-run", "Print result to stdout instead of posting (overrides --post)").option("--json", "Output a structured JSON report").option("--markdown", "Output Markdown report (default)").option("--sarif", "Output SARIF 2.1.0 for code scanning artifacts").option("--fail-on-security-high", "Fail when the security review contains HIGH/CRITICAL findings (default)").option("--no-fail-on-security-high", "Do not fail on security HIGH/CRITICAL findings").option("--fail-on-test-failure", "Fail when the report mentions test failures (default)").option("--no-fail-on-test-failure", "Do not fail on test failure findings").option("--fail-on-lint-failure", "Fail when the report mentions lint/typecheck failures (default)").option("--no-fail-on-lint-failure", "Do not fail on lint/typecheck failure findings").action(async (options) => {
7595
- const { runCi } = await import("./ci-F4ESOYI5.js");
7596
- const { formatCiResult } = await import("./ci-format-AIRW3TVQ.js");
7533
+ const { runCi } = await import("./ci-LXRTYJ6F.js");
7534
+ const { formatCiResult } = await import("./ci-format-II3OT2VU.js");
7597
7535
  const formats = [options.json, options.markdown, options.sarif].filter(Boolean).length;
7598
7536
  if (formats > 1) {
7599
7537
  console.error("Choose only one output format: --json, --markdown, or --sarif.");
@@ -7751,7 +7689,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
7751
7689
  config.get("customProviders"),
7752
7690
  config.getConfigDir()
7753
7691
  );
7754
- const { startHub } = await import("./hub-JJCCCU3O.js");
7692
+ const { startHub } = await import("./hub-RXAFF7QI.js");
7755
7693
  await startHub(
7756
7694
  {
7757
7695
  topic: topic ?? "",
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  discussionToMessages,
4
4
  persistDiscussion
5
- } from "./chunk-MX75TNE5.js";
6
- import "./chunk-CGDYO52A.js";
5
+ } from "./chunk-VB54ILH7.js";
6
+ import "./chunk-6NO5FZW6.js";
7
7
  import "./chunk-NYNSYLFY.js";
8
8
  import "./chunk-3FEZSLGI.js";
9
9
  import "./chunk-IW3Q7AE5.js";
@@ -28,11 +28,11 @@ import {
28
28
  touchMemoryReferences,
29
29
  updateMemoryApproval,
30
30
  updateMemoryEntry
31
- } from "./chunk-6WMT7OQG.js";
31
+ } from "./chunk-H2VE4TTN.js";
32
32
  import "./chunk-3FEZSLGI.js";
33
33
  import "./chunk-HOSJZMQS.js";
34
34
  import "./chunk-IW3Q7AE5.js";
35
- import "./chunk-2BKRWTEQ.js";
35
+ import "./chunk-2FCKZ3OS.js";
36
36
  export {
37
37
  addMemoryEntry,
38
38
  backupMemoryStore,
@@ -27,9 +27,9 @@ import {
27
27
  touchMemoryReferences,
28
28
  updateMemoryApproval,
29
29
  updateMemoryEntry
30
- } from "./chunk-CMNXAJLH.js";
30
+ } from "./chunk-IXEKDAIX.js";
31
31
  import "./chunk-FSC6KEWU.js";
32
- import "./chunk-5XHEXRMN.js";
32
+ import "./chunk-5GYOQ7EF.js";
33
33
  import "./chunk-6BUTA5VW.js";
34
34
  export {
35
35
  addMemoryEntry,
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  countSeverity,
4
4
  runCi
5
- } from "./chunk-JS6VAPWM.js";
6
- import "./chunk-RJY3HJS4.js";
5
+ } from "./chunk-UTJQXG4P.js";
6
+ import "./chunk-JT2A2M4F.js";
7
7
  import {
8
8
  buildReviewPrompt,
9
9
  buildSecurityReviewPrompt,
@@ -17,13 +17,13 @@ import {
17
17
  } from "./chunk-UGY5SVNX.js";
18
18
  import {
19
19
  ConfigManager
20
- } from "./chunk-UD3BVNC5.js";
20
+ } from "./chunk-4XJVSMZ6.js";
21
21
  import "./chunk-TEXT4DAT.js";
22
22
  import "./chunk-TU3L3PW7.js";
23
23
  import "./chunk-IW3Q7AE5.js";
24
24
  import {
25
25
  VERSION
26
- } from "./chunk-2BKRWTEQ.js";
26
+ } from "./chunk-2FCKZ3OS.js";
27
27
 
28
28
  // src/cli/pr.ts
29
29
  import { execFileSync } from "child_process";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  executeTests,
3
3
  runTestsTool
4
- } from "./chunk-SIVM2YQQ.js";
5
- import "./chunk-5XHEXRMN.js";
4
+ } from "./chunk-WUIOUJA2.js";
5
+ import "./chunk-5GYOQ7EF.js";
6
6
  export {
7
7
  executeTests,
8
8
  runTestsTool
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  executeTests,
4
4
  runTestsTool
5
- } from "./chunk-NZPHEUJM.js";
6
- import "./chunk-2BKRWTEQ.js";
5
+ } from "./chunk-J3RWNQOF.js";
6
+ import "./chunk-2FCKZ3OS.js";
7
7
  export {
8
8
  executeTests,
9
9
  runTestsTool