kantban-cli 0.1.47 → 0.1.51

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.
@@ -2828,17 +2828,17 @@ import { z as z50 } from "zod";
2828
2828
  var AdvisorConfigSchema = z50.object({
2829
2829
  enabled: z50.boolean(),
2830
2830
  max_invocations: z50.number().int().positive().optional(),
2831
- model: z50.string().optional()
2831
+ model: z50.string().min(1).optional()
2832
2832
  });
2833
2833
  var ModelRoutingSchema = z50.object({
2834
- initial: z50.string(),
2835
- escalation: z50.array(z50.string()).min(1),
2836
- escalate_after: z50.number().int().positive().optional()
2834
+ initial: z50.string().min(1),
2835
+ escalation: z50.array(z50.string().min(1)).min(1),
2836
+ escalate_after: z50.number().int().positive().default(2)
2837
2837
  });
2838
2838
  var StuckDetectionConfigSchema = z50.object({
2839
2839
  enabled: z50.boolean(),
2840
2840
  first_check: z50.number().int().positive().optional(),
2841
- interval: z50.number().int().positive().optional()
2841
+ interval: z50.number().int().min(2).optional()
2842
2842
  });
2843
2843
  var AgentConfigSchema = z50.object({
2844
2844
  execution_mode: z50.enum(["kant_loop", "cron_poll", "manual"]).optional(),
@@ -2869,14 +2869,17 @@ var AgentConfigSchema = z50.object({
2869
2869
  allowed_tools: z50.array(z50.string()).optional(),
2870
2870
  disallowed_tools: z50.array(z50.string()).optional(),
2871
2871
  stuck_detection: StuckDetectionConfigSchema.optional(),
2872
+ max_gutter_resets_per_transit: z50.number().int().nonnegative().optional(),
2873
+ reprompt_on_branch_merged: z50.boolean().optional(),
2874
+ max_reprompt_attempts: z50.number().int().nonnegative().optional(),
2872
2875
  extensions: z50.record(z50.string(), z50.unknown()).optional()
2873
- }).strict();
2876
+ }).strict().refine((v) => !(v.model_preference && v.model_routing), { message: "model_preference and model_routing are mutually exclusive" });
2874
2877
  var TicketFingerprintSchema = z50.object({
2875
2878
  column_id: z50.string().uuid().nullable(),
2876
2879
  updated_at: z50.string().datetime({ offset: true }),
2877
- comment_count: z50.number(),
2878
- signal_count: z50.number(),
2879
- field_value_count: z50.number()
2880
+ comment_count: z50.number().int().nonnegative(),
2881
+ signal_count: z50.number().int().nonnegative(),
2882
+ field_value_count: z50.number().int().nonnegative()
2880
2883
  });
2881
2884
  var DebtItemSchema = z50.object({
2882
2885
  type: z50.enum(["dropped_criterion", "missing_test", "missing_functionality", "unmet_requirement", "waived_gate"]),
@@ -2890,7 +2893,7 @@ var LoopCheckpointSchema = z50.object({
2890
2893
  iteration: z50.number().int().nonnegative(),
2891
2894
  gutter_count: z50.number().int().nonnegative(),
2892
2895
  advisor_invocations: z50.number().int().nonnegative(),
2893
- model_tier: z50.string(),
2896
+ model_tier: z50.string().min(1),
2894
2897
  last_fingerprint: TicketFingerprintSchema.optional(),
2895
2898
  worktree_name: z50.string().optional(),
2896
2899
  updated_at: z50.string().datetime({ offset: true })
@@ -3041,7 +3044,11 @@ var GateResultSchema = z51.object({
3041
3044
  output: z51.string().max(1048576),
3042
3045
  stderr: z51.string(),
3043
3046
  exit_code: z51.number().int().min(0).max(255),
3044
- timed_out: z51.boolean()
3047
+ timed_out: z51.boolean(),
3048
+ // Optional diagnostics surfaced from Node execFile error on spawn failure
3049
+ errno: z51.union([z51.string(), z51.number()]).optional(),
3050
+ syscall: z51.string().optional(),
3051
+ stderrTail: z51.string().optional()
3045
3052
  });
3046
3053
  var GateDeltaSchema = z51.enum(["improved", "same", "regressed", "first_check"]);
3047
3054
  var GateSnapshotSchema = z51.object({
@@ -3117,17 +3124,17 @@ function resolveGatesForColumn(config, columnName) {
3117
3124
  const overrideKey = config.columns ? Object.keys(config.columns).find((k) => canonicalize(k) === lookupKey) : void 0;
3118
3125
  const override = overrideKey ? config.columns[overrideKey] : void 0;
3119
3126
  if (!override) {
3120
- return [...config.default];
3127
+ return { gates: [...config.default], source: "default" };
3121
3128
  }
3122
3129
  if (!override.extend) {
3123
3130
  if (override.gates.length === 0) {
3124
3131
  console.error(` [warn] Column "${columnName}" has extend:false with no gates \u2014 all gate enforcement disabled for this column`);
3125
3132
  }
3126
- return [...override.gates];
3133
+ return { gates: [...override.gates], source: "override" };
3127
3134
  }
3128
3135
  const overrideNames = new Set(override.gates.map((g) => g.name));
3129
3136
  const merged = config.default.filter((g) => !overrideNames.has(g.name));
3130
- return [...merged, ...override.gates];
3137
+ return { gates: [...merged, ...override.gates], source: "override" };
3131
3138
  }
3132
3139
  function findUnmatchedColumnKeys(config, boardColumnNames) {
3133
3140
  if (!config.columns) return [];
@@ -3153,4 +3160,4 @@ export {
3153
3160
  findUnmatchedColumnKeys,
3154
3161
  parseTimeout
3155
3162
  };
3156
- //# sourceMappingURL=chunk-VDCHOIQI.js.map
3163
+ //# sourceMappingURL=chunk-4R27WTCJ.js.map