@dadado/agent-kit-cli 6.1.1 → 6.3.0

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 (48) hide show
  1. package/dashboard/README.md +3 -1
  2. package/dashboard/dashboard-data.mjs +13 -2
  3. package/dashboard/dashboard.html +95 -2
  4. package/dashboard/lib/gate-exit-tickets.d.mts +45 -0
  5. package/dashboard/lib/gate-exit-tickets.mjs +233 -0
  6. package/dashboard/lib/semantic-model.d.mts +21 -0
  7. package/dashboard/lib/semantic-model.mjs +47 -0
  8. package/dist/{add-YTCDLPUS.js → add-VA2W7I6P.js} +3 -3
  9. package/dist/{chunk-VTOUQAVR.js → chunk-25J2SMJQ.js} +9 -1
  10. package/dist/{chunk-2FQX2O4I.js → chunk-6GYKOHIL.js} +2 -2
  11. package/dist/{chunk-DBPNGZNH.js → chunk-6KUSG7BJ.js} +15 -2
  12. package/dist/{chunk-C26I6HTO.js → chunk-C4Q77GGJ.js} +0 -1
  13. package/dist/{chunk-U5F6RJN4.js → chunk-GO3K752H.js} +4 -1
  14. package/dist/chunk-GUQYNUV4.js +61 -0
  15. package/dist/{chunk-ESNAFDYT.js → chunk-JEI6HACW.js} +44 -1
  16. package/dist/chunk-KVY425NM.js +519 -0
  17. package/dist/{chunk-WUWRGOUV.js → chunk-L5V3W3DY.js} +13 -1
  18. package/dist/chunk-MO63KZBP.js +516 -0
  19. package/dist/chunk-MUTTNRX4.js +53 -0
  20. package/dist/{chunk-PPKX55GI.js → chunk-NNKOWUWM.js} +1 -1
  21. package/dist/{chunk-DRND2KYV.js → chunk-OVOXRH5W.js} +1 -1
  22. package/dist/{chunk-GN4SAZF2.js → chunk-OWWFKGKS.js} +2 -2
  23. package/dist/chunk-QTBTKEXK.js +77 -0
  24. package/dist/{chunk-TMFOLRU2.js → chunk-SV2BR2LZ.js} +44 -9
  25. package/dist/{chunk-3DGTPONS.js → chunk-U26MRIWN.js} +1 -1
  26. package/dist/{chunk-BBVBYQJO.js → chunk-VQBI3JVS.js} +2 -2
  27. package/dist/{chunk-YP4OOK4T.js → chunk-WMVMBPCR.js} +2 -2
  28. package/dist/{chunk-OZYJUNAQ.js → chunk-YRFSTHR5.js} +29 -525
  29. package/dist/{chunk-3XKVQS2K.js → chunk-Z7ABX5QI.js} +13 -9
  30. package/dist/{chunk-DBXDV5O7.js → chunk-Z7RYIHHX.js} +90 -5
  31. package/dist/{contribute-A7NCWTUM.js → contribute-NLM2BN6Z.js} +4 -4
  32. package/dist/countdown-QXJD6TDB.js +479 -0
  33. package/dist/{diff-4MDU5SLE.js → diff-HHG4JEDE.js} +5 -5
  34. package/dist/{doctor-SS6Y2T6H.js → doctor-TWF2M3S3.js} +9 -9
  35. package/dist/ground-control-NMYYIVCV.js +434 -0
  36. package/dist/{handoff-MK5JG3J5.js → handoff-5AGE2D3T.js} +3 -2
  37. package/dist/{hook-D2WHBKRN.js → hook-VP7FHRSZ.js} +7 -6
  38. package/dist/index.js +30 -20
  39. package/dist/{init-GVVBA2BM.js → init-UOTV4ASJ.js} +12 -12
  40. package/dist/{install-R4HPI7VK.js → install-VCHPXQV3.js} +12 -12
  41. package/dist/{plan-index-V7T5MKL6.js → plan-index-BNLUU6T5.js} +3 -2
  42. package/dist/{run-3B26CVIL.js → run-R66G276Q.js} +58 -12
  43. package/dist/{run-plan-APTBO2OT.js → run-plan-24Z5K4P3.js} +12 -7
  44. package/dist/{scan-K6TQGV4S.js → scan-UX4HARMJ.js} +1 -1
  45. package/dist/{setup-global-AT4DD3MG.js → setup-global-M6LKGJHQ.js} +6 -6
  46. package/dist/{status-MPJHI5RP.js → status-5UKVIKOI.js} +8 -8
  47. package/dist/{update-P62637ZI.js → update-VQBGEUWS.js} +33 -43
  48. package/package.json +1 -1
@@ -2,25 +2,25 @@ import {
2
2
  nextStepAfterInstall,
3
3
  performInstall,
4
4
  printInstallEpilogue
5
- } from "./chunk-TMFOLRU2.js";
5
+ } from "./chunk-SV2BR2LZ.js";
6
6
  import {
7
7
  NON_INTERACTIVE_ROOT_ARGS
8
- } from "./chunk-DBXDV5O7.js";
8
+ } from "./chunk-Z7RYIHHX.js";
9
9
  import {
10
10
  SkippedSymlinkError,
11
11
  logApplyStats
12
12
  } from "./chunk-HS7LVVLO.js";
13
- import "./chunk-3DGTPONS.js";
14
- import "./chunk-YP4OOK4T.js";
13
+ import "./chunk-U26MRIWN.js";
14
+ import "./chunk-WMVMBPCR.js";
15
15
  import "./chunk-HAFRAXGV.js";
16
- import "./chunk-PPKX55GI.js";
16
+ import "./chunk-NNKOWUWM.js";
17
17
  import "./chunk-WGLPZXNU.js";
18
18
  import "./chunk-MAPOQEA2.js";
19
19
  import {
20
20
  withCliProgress
21
21
  } from "./chunk-QTON2GQX.js";
22
22
  import "./chunk-PNFF6OU3.js";
23
- import "./chunk-U5F6RJN4.js";
23
+ import "./chunk-GO3K752H.js";
24
24
  import "./chunk-F6C3GFKV.js";
25
25
  import {
26
26
  logger
@@ -31,19 +31,19 @@ import {
31
31
  confirmProjectRoot,
32
32
  isNonInteractive,
33
33
  syncPathCliToRuntime
34
- } from "./chunk-GN4SAZF2.js";
34
+ } from "./chunk-OWWFKGKS.js";
35
35
  import {
36
36
  assessEnvironment
37
37
  } from "./chunk-B3VR5YBQ.js";
38
- import "./chunk-2FQX2O4I.js";
38
+ import "./chunk-6GYKOHIL.js";
39
39
  import "./chunk-PFEUZXVT.js";
40
- import "./chunk-BBVBYQJO.js";
41
- import "./chunk-VTOUQAVR.js";
42
- import "./chunk-DBPNGZNH.js";
40
+ import "./chunk-VQBI3JVS.js";
41
+ import "./chunk-25J2SMJQ.js";
42
+ import "./chunk-6KUSG7BJ.js";
43
43
  import {
44
44
  KIT_VERSION
45
45
  } from "./chunk-7HDQEK6T.js";
46
- import "./chunk-C26I6HTO.js";
46
+ import "./chunk-C4Q77GGJ.js";
47
47
  import "./chunk-5B4DVO6C.js";
48
48
 
49
49
  // src/commands/init.ts
@@ -3,29 +3,29 @@ import {
3
3
  nextStepAfterInstall,
4
4
  performInstall,
5
5
  printInstallEpilogue
6
- } from "./chunk-TMFOLRU2.js";
7
- import "./chunk-DBXDV5O7.js";
6
+ } from "./chunk-SV2BR2LZ.js";
7
+ import "./chunk-Z7RYIHHX.js";
8
8
  import "./chunk-HS7LVVLO.js";
9
- import "./chunk-3DGTPONS.js";
10
- import "./chunk-YP4OOK4T.js";
9
+ import "./chunk-U26MRIWN.js";
10
+ import "./chunk-WMVMBPCR.js";
11
11
  import "./chunk-HAFRAXGV.js";
12
- import "./chunk-PPKX55GI.js";
12
+ import "./chunk-NNKOWUWM.js";
13
13
  import "./chunk-WGLPZXNU.js";
14
14
  import "./chunk-MAPOQEA2.js";
15
15
  import "./chunk-QTON2GQX.js";
16
16
  import "./chunk-PNFF6OU3.js";
17
- import "./chunk-U5F6RJN4.js";
17
+ import "./chunk-GO3K752H.js";
18
18
  import "./chunk-F6C3GFKV.js";
19
19
  import "./chunk-ZB43YMHW.js";
20
- import "./chunk-GN4SAZF2.js";
20
+ import "./chunk-OWWFKGKS.js";
21
21
  import "./chunk-B3VR5YBQ.js";
22
- import "./chunk-2FQX2O4I.js";
22
+ import "./chunk-6GYKOHIL.js";
23
23
  import "./chunk-PFEUZXVT.js";
24
- import "./chunk-BBVBYQJO.js";
25
- import "./chunk-VTOUQAVR.js";
26
- import "./chunk-DBPNGZNH.js";
24
+ import "./chunk-VQBI3JVS.js";
25
+ import "./chunk-25J2SMJQ.js";
26
+ import "./chunk-6KUSG7BJ.js";
27
27
  import "./chunk-7HDQEK6T.js";
28
- import "./chunk-C26I6HTO.js";
28
+ import "./chunk-C4Q77GGJ.js";
29
29
  import "./chunk-5B4DVO6C.js";
30
30
  export {
31
31
  installCommand,
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  formatPlanIndexLines,
3
3
  writePlanIndex
4
- } from "./chunk-WUWRGOUV.js";
5
- import "./chunk-C26I6HTO.js";
4
+ } from "./chunk-L5V3W3DY.js";
5
+ import "./chunk-MUTTNRX4.js";
6
+ import "./chunk-C4Q77GGJ.js";
6
7
  import "./chunk-5B4DVO6C.js";
7
8
 
8
9
  // src/commands/plan-index.ts
@@ -1,18 +1,28 @@
1
1
  import {
2
- LAND_ON_GATE_DESCRIPTION,
3
- classifyGateExit,
4
- detectAgentBackend,
5
- landGateExit,
6
- listDetectBackendIds,
7
2
  runPlanLoop,
8
3
  shouldUseLiveTui,
9
4
  withLiveTui
10
- } from "./chunk-OZYJUNAQ.js";
5
+ } from "./chunk-YRFSTHR5.js";
6
+ import {
7
+ REVIEW_PACK_SLASH,
8
+ runReviewJob
9
+ } from "./chunk-MO63KZBP.js";
10
+ import {
11
+ detectAgentBackend,
12
+ listDetectBackendIds
13
+ } from "./chunk-GUQYNUV4.js";
14
+ import "./chunk-QTBTKEXK.js";
15
+ import {
16
+ LAND_ON_GATE_DESCRIPTION,
17
+ classifyGateExit,
18
+ landGateExit
19
+ } from "./chunk-KVY425NM.js";
11
20
  import "./chunk-3LLXDHIU.js";
12
21
  import {
13
22
  negatedFlag
14
23
  } from "./chunk-XDCCYBCJ.js";
15
- import "./chunk-WUWRGOUV.js";
24
+ import "./chunk-L5V3W3DY.js";
25
+ import "./chunk-MUTTNRX4.js";
16
26
  import {
17
27
  buildDispatchPrompt,
18
28
  classifySlash,
@@ -22,20 +32,20 @@ import {
22
32
  readCommandFile,
23
33
  runHeadlessDispatch,
24
34
  unknownSlashMessage
25
- } from "./chunk-3XKVQS2K.js";
35
+ } from "./chunk-Z7ABX5QI.js";
26
36
  import {
27
37
  HITL_UNANSWERED_EXIT_CODE,
28
38
  formatHitlSummary,
29
39
  getBackend,
30
40
  hitlExitCode
31
- } from "./chunk-ESNAFDYT.js";
41
+ } from "./chunk-JEI6HACW.js";
32
42
  import "./chunk-WGLPZXNU.js";
33
43
  import "./chunk-MAPOQEA2.js";
34
44
  import "./chunk-QTON2GQX.js";
35
45
  import {
36
46
  logger
37
47
  } from "./chunk-ZB43YMHW.js";
38
- import "./chunk-C26I6HTO.js";
48
+ import "./chunk-C4Q77GGJ.js";
39
49
  import "./chunk-5B4DVO6C.js";
40
50
 
41
51
  // src/commands/run.ts
@@ -61,6 +71,12 @@ async function executeRun(input) {
61
71
  if (kind === "unknown") {
62
72
  return { exitCode: 1, error: unknownSlashMessage(slash) };
63
73
  }
74
+ if (input.maxPackBytes?.trim() && slash !== REVIEW_PACK_SLASH) {
75
+ return { exitCode: 1, error: `--max-pack-bytes only applies to ${REVIEW_PACK_SLASH}` };
76
+ }
77
+ if (input.includeReviewed && slash !== REVIEW_PACK_SLASH) {
78
+ return { exitCode: 1, error: `--include-reviewed only applies to ${REVIEW_PACK_SLASH}` };
79
+ }
64
80
  const detected = await detectAgentBackend(input.backend, input.whichFn);
65
81
  if (!detected.ok) {
66
82
  return { exitCode: 1, error: detected.message };
@@ -92,6 +108,22 @@ async function executeRun(input) {
92
108
  });
93
109
  return { exitCode: code };
94
110
  }
111
+ if (slash === REVIEW_PACK_SLASH) {
112
+ try {
113
+ return await runReviewJob({
114
+ root,
115
+ backendId: detected.id,
116
+ bin: detected.bin,
117
+ model: input.model,
118
+ maxPackBytes: input.maxPackBytes,
119
+ includeReviewed: input.includeReviewed === true,
120
+ noHitl: input.noHitl === true,
121
+ dryRun: input.dryRun
122
+ });
123
+ } catch (err) {
124
+ return { exitCode: 1, error: String(err) };
125
+ }
126
+ }
95
127
  const file = await readCommandFile(root, slash);
96
128
  if (!file.ok) {
97
129
  return { exitCode: 1, error: file.message };
@@ -217,6 +249,16 @@ var runDispatchArgs = {
217
249
  default: false
218
250
  }
219
251
  };
252
+ var maxPackBytesArg = {
253
+ type: "string",
254
+ description: "For review-pack only: diff pack ceiling in bytes (default: 98304; a branch whose section does not fit is listed as not reviewed, never cut)",
255
+ default: ""
256
+ };
257
+ var includeReviewedArg = {
258
+ type: "boolean",
259
+ description: "For review-pack only: also review branches whose tip is unchanged since the last completed review (.cursor/context/review-ledger.json)",
260
+ default: false
261
+ };
220
262
  async function runSlashCli(slash, args) {
221
263
  const maxTicks = Number.parseInt(String(args["max-ticks"]), 10);
222
264
  const sleepSeconds = Number.parseFloat(String(args.sleep));
@@ -240,7 +282,9 @@ async function runSlashCli(slash, args) {
240
282
  sleepSeconds,
241
283
  noHitl: negatedFlag(args, "hitl"),
242
284
  plain: Boolean(args.plain),
243
- landOnGate: Boolean(args["land-on-gate"])
285
+ landOnGate: Boolean(args["land-on-gate"]),
286
+ ...args["max-pack-bytes"] ? { maxPackBytes: String(args["max-pack-bytes"]) } : {},
287
+ ...args["include-reviewed"] ? { includeReviewed: true } : {}
244
288
  });
245
289
  if (result.stdout) {
246
290
  console.log(result.stdout);
@@ -261,7 +305,9 @@ var runCommand = defineCommand({
261
305
  description: "Slash name (e.g. run-plan-all, backlog-add, continue-plan)",
262
306
  required: true
263
307
  },
264
- ...runDispatchArgs
308
+ ...runDispatchArgs,
309
+ "max-pack-bytes": maxPackBytesArg,
310
+ "include-reviewed": includeReviewedArg
265
311
  },
266
312
  async run({ args }) {
267
313
  await runSlashCli(String(args.slash ?? ""), args);
@@ -1,26 +1,31 @@
1
1
  import {
2
2
  DRIVER_EVENTS_FORMATS,
3
- LAND_ON_GATE_DESCRIPTION,
4
- detectAgentBackend,
5
- listDetectBackendIds,
6
3
  runPlanLoop
7
- } from "./chunk-OZYJUNAQ.js";
4
+ } from "./chunk-YRFSTHR5.js";
5
+ import {
6
+ detectAgentBackend,
7
+ listDetectBackendIds
8
+ } from "./chunk-GUQYNUV4.js";
9
+ import {
10
+ LAND_ON_GATE_DESCRIPTION
11
+ } from "./chunk-KVY425NM.js";
8
12
  import "./chunk-3LLXDHIU.js";
9
13
  import {
10
14
  negatedFlag
11
15
  } from "./chunk-XDCCYBCJ.js";
12
- import "./chunk-WUWRGOUV.js";
16
+ import "./chunk-L5V3W3DY.js";
17
+ import "./chunk-MUTTNRX4.js";
13
18
  import {
14
19
  HITL_UNANSWERED_EXIT_CODE,
15
20
  getBackend
16
- } from "./chunk-ESNAFDYT.js";
21
+ } from "./chunk-JEI6HACW.js";
17
22
  import "./chunk-WGLPZXNU.js";
18
23
  import "./chunk-MAPOQEA2.js";
19
24
  import "./chunk-QTON2GQX.js";
20
25
  import {
21
26
  logger
22
27
  } from "./chunk-ZB43YMHW.js";
23
- import "./chunk-C26I6HTO.js";
28
+ import "./chunk-C4Q77GGJ.js";
24
29
  import "./chunk-5B4DVO6C.js";
25
30
 
26
31
  // src/commands/run-plan.ts
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runScanner
3
- } from "./chunk-U5F6RJN4.js";
3
+ } from "./chunk-GO3K752H.js";
4
4
  import "./chunk-F6C3GFKV.js";
5
5
  import {
6
6
  logger
@@ -2,20 +2,20 @@ import {
2
2
  classifyInstallError,
3
3
  isNonInteractive,
4
4
  pathCliStatus
5
- } from "./chunk-GN4SAZF2.js";
5
+ } from "./chunk-OWWFKGKS.js";
6
6
  import {
7
7
  assessEnvironment
8
8
  } from "./chunk-B3VR5YBQ.js";
9
- import "./chunk-2FQX2O4I.js";
9
+ import "./chunk-6GYKOHIL.js";
10
10
  import "./chunk-PFEUZXVT.js";
11
- import "./chunk-BBVBYQJO.js";
12
- import "./chunk-VTOUQAVR.js";
13
- import "./chunk-DBPNGZNH.js";
11
+ import "./chunk-VQBI3JVS.js";
12
+ import "./chunk-25J2SMJQ.js";
13
+ import "./chunk-6KUSG7BJ.js";
14
14
  import {
15
15
  KIT_VERSION,
16
16
  pinnedCliSpec
17
17
  } from "./chunk-7HDQEK6T.js";
18
- import "./chunk-C26I6HTO.js";
18
+ import "./chunk-C4Q77GGJ.js";
19
19
  import "./chunk-5B4DVO6C.js";
20
20
 
21
21
  // src/commands/setup-global.ts
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  detectWorkspaceParent,
3
3
  workspaceParentAdvisoryLines
4
- } from "./chunk-DRND2KYV.js";
4
+ } from "./chunk-OVOXRH5W.js";
5
5
  import {
6
6
  createReadinessReport
7
7
  } from "./chunk-PNFF6OU3.js";
8
8
  import {
9
9
  runScanner
10
- } from "./chunk-U5F6RJN4.js";
10
+ } from "./chunk-GO3K752H.js";
11
11
  import "./chunk-F6C3GFKV.js";
12
12
  import {
13
13
  logger
@@ -15,23 +15,23 @@ import {
15
15
  import {
16
16
  npxPinned,
17
17
  pathCliStatus
18
- } from "./chunk-GN4SAZF2.js";
18
+ } from "./chunk-OWWFKGKS.js";
19
19
  import {
20
20
  assessEnvironment
21
21
  } from "./chunk-B3VR5YBQ.js";
22
- import "./chunk-2FQX2O4I.js";
22
+ import "./chunk-6GYKOHIL.js";
23
23
  import "./chunk-PFEUZXVT.js";
24
- import "./chunk-BBVBYQJO.js";
25
- import "./chunk-VTOUQAVR.js";
24
+ import "./chunk-VQBI3JVS.js";
25
+ import "./chunk-25J2SMJQ.js";
26
26
  import {
27
27
  MANIFEST_RELATIVE_PATH,
28
28
  loadAgentKitManifest,
29
29
  resolveProtectedGlobs
30
- } from "./chunk-DBPNGZNH.js";
30
+ } from "./chunk-6KUSG7BJ.js";
31
31
  import {
32
32
  KIT_VERSION
33
33
  } from "./chunk-7HDQEK6T.js";
34
- import "./chunk-C26I6HTO.js";
34
+ import "./chunk-C4Q77GGJ.js";
35
35
  import {
36
36
  readJson
37
37
  } from "./chunk-5B4DVO6C.js";
@@ -1,7 +1,10 @@
1
1
  import {
2
2
  NON_INTERACTIVE_ROOT_ARGS,
3
+ detectStaleCli,
4
+ formatRerunFlags,
5
+ formatStaleCliRefusal,
3
6
  syncFromManifest
4
- } from "./chunk-DBXDV5O7.js";
7
+ } from "./chunk-Z7RYIHHX.js";
5
8
  import {
6
9
  formatSkippedSymlinks,
7
10
  logApplyStats
@@ -9,14 +12,14 @@ import {
9
12
  import {
10
13
  REGISTRY_CLI_ARGS,
11
14
  resolveRegistryFromCli
12
- } from "./chunk-3DGTPONS.js";
15
+ } from "./chunk-U26MRIWN.js";
13
16
  import {
14
17
  CLAUDE_SETTINGS_REL,
15
18
  formatClaudeSettingsDrift,
16
19
  generateClaudeCommandAdapters,
17
20
  planClaudeSettingsDrift,
18
21
  writeClaudeSessionStartHook
19
- } from "./chunk-PPKX55GI.js";
22
+ } from "./chunk-NNKOWUWM.js";
20
23
  import "./chunk-MAPOQEA2.js";
21
24
  import {
22
25
  withCliProgress
@@ -29,17 +32,14 @@ import {
29
32
  confirmProjectRoot,
30
33
  isNonInteractive,
31
34
  syncPathCliToRuntime
32
- } from "./chunk-GN4SAZF2.js";
35
+ } from "./chunk-OWWFKGKS.js";
33
36
  import "./chunk-B3VR5YBQ.js";
34
37
  import {
35
- checkForUpdates,
36
- compareSemver,
37
- normalizeSemver,
38
- readLocalKitVersion
39
- } from "./chunk-2FQX2O4I.js";
38
+ checkForUpdates
39
+ } from "./chunk-6GYKOHIL.js";
40
40
  import "./chunk-PFEUZXVT.js";
41
- import "./chunk-BBVBYQJO.js";
42
- import "./chunk-VTOUQAVR.js";
41
+ import "./chunk-VQBI3JVS.js";
42
+ import "./chunk-25J2SMJQ.js";
43
43
  import {
44
44
  buildManifest,
45
45
  isProtectedPath,
@@ -47,16 +47,26 @@ import {
47
47
  resolveProtectedGlobs,
48
48
  saveManifest,
49
49
  seedManagedHashLedger
50
- } from "./chunk-DBPNGZNH.js";
50
+ } from "./chunk-6KUSG7BJ.js";
51
51
  import {
52
- KIT_PACKAGE_SPEC,
53
52
  KIT_VERSION
54
53
  } from "./chunk-7HDQEK6T.js";
55
- import "./chunk-C26I6HTO.js";
54
+ import "./chunk-C4Q77GGJ.js";
56
55
  import "./chunk-5B4DVO6C.js";
57
56
 
58
57
  // src/commands/update.ts
59
58
  import { defineCommand } from "citty";
59
+ var UPDATE_RERUN_FLAGS = [
60
+ "claude",
61
+ "yes",
62
+ "force-root",
63
+ "seed-overlay",
64
+ "cwd",
65
+ "registry",
66
+ "url",
67
+ "ref",
68
+ "refresh"
69
+ ];
60
70
  var updateCommand = defineCommand({
61
71
  meta: {
62
72
  name: "update",
@@ -159,35 +169,15 @@ ${err.recovery}
159
169
  });
160
170
  try {
161
171
  logger.info(`Registry: ${registry.root} (${registry.source})`);
162
- const registryVersionRaw = await readLocalKitVersion(registry.root);
163
- const registryVersion = registryVersionRaw ? normalizeSemver(registryVersionRaw) : null;
164
- const cliVersion = normalizeSemver(KIT_VERSION);
165
- if (!registryVersion) {
166
- logger.warn(
167
- "Could not read a version from the registry checkout - skipping the CLI freshness check."
168
- );
169
- } else if (cliVersion && compareSemver(cliVersion, registryVersion) < 0 && !args["allow-stale-cli"]) {
170
- logger.error(
171
- `This CLI is v${cliVersion}, older than the registry it would apply (v${registryVersion}).`
172
- );
173
- console.error(
174
- [
175
- "",
176
- "`agent-kit update` syncs registry content but stamps .cursor/agent-kit.json with the",
177
- `version of the CLI running it, so applying now would write v${cliVersion} again, not v${registryVersion}.`,
178
- "",
179
- "Upgrade the binary first, then re-run:",
180
- ` npm i -g ${KIT_PACKAGE_SPEC}@${registryVersion}`,
181
- " agent-kit update",
182
- "",
183
- `If npm has no ${registryVersion} yet, the release is still mid-publish`,
184
- "(content sync and npm publish run in parallel) - retry shortly.",
185
- "",
186
- "Factory/dev checkouts that intend to apply newer content with an older",
187
- "binary can pass --allow-stale-cli.",
188
- ""
189
- ].join("\n")
190
- );
172
+ const stale = await detectStaleCli(registry.root, { warn: logger.warn });
173
+ if (stale && !args["allow-stale-cli"]) {
174
+ const refusal = formatStaleCliRefusal({
175
+ command: "update",
176
+ stale,
177
+ rerun: formatRerunFlags(args, UPDATE_RERUN_FLAGS)
178
+ });
179
+ logger.error(refusal.error);
180
+ console.error(refusal.recovery);
191
181
  process.exitCode = 1;
192
182
  return;
193
183
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dadado/agent-kit-cli",
3
- "version": "6.1.1",
3
+ "version": "6.3.0",
4
4
  "description": "Agent Kit CLI: HITL framework install and tooling for AI-assisted IDEs (rules, skills, plan/handoff, context).",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",