@anthropologies/claudestory 0.1.33 → 0.1.34

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.
package/dist/cli.js CHANGED
@@ -298,7 +298,9 @@ var init_config = __esm({
298
298
  recipeOverrides: z7.object({
299
299
  maxTicketsPerSession: z7.number().min(0).optional(),
300
300
  compactThreshold: z7.string().optional(),
301
- reviewBackends: z7.array(z7.string()).optional()
301
+ reviewBackends: z7.array(z7.string()).optional(),
302
+ handoverInterval: z7.number().min(0).optional(),
303
+ stages: z7.record(z7.record(z7.unknown())).optional()
302
304
  }).optional()
303
305
  }).passthrough();
304
306
  }
@@ -5904,7 +5906,19 @@ function resolveRecipe(recipeName, projectOverrides) {
5904
5906
  }
5905
5907
  }
5906
5908
  let pipeline = raw.pipeline ? [...raw.pipeline] : [...DEFAULT_PIPELINE];
5907
- const stages2 = raw.stages ?? {};
5909
+ const recipeStages = raw.stages ?? {};
5910
+ const stageOverrides = projectOverrides?.stages ?? {};
5911
+ const stages2 = {};
5912
+ for (const [key, value] of Object.entries(recipeStages)) {
5913
+ const override = stageOverrides[key];
5914
+ const safeOverride = override && typeof override === "object" && !Array.isArray(override) ? override : {};
5915
+ stages2[key] = { ...value, ...safeOverride };
5916
+ }
5917
+ for (const [key, value] of Object.entries(stageOverrides)) {
5918
+ if (!stages2[key] && value && typeof value === "object" && !Array.isArray(value)) {
5919
+ stages2[key] = { ...value };
5920
+ }
5921
+ }
5908
5922
  if (stages2.WRITE_TESTS?.enabled) {
5909
5923
  const implementIdx = pipeline.indexOf("IMPLEMENT");
5910
5924
  if (implementIdx !== -1 && !pipeline.includes("WRITE_TESTS")) {
@@ -8059,6 +8073,9 @@ async function handleStart(root, args) {
8059
8073
  if (typeof overrides.compactThreshold === "string") sessionConfig.compactThreshold = overrides.compactThreshold;
8060
8074
  if (Array.isArray(overrides.reviewBackends)) sessionConfig.reviewBackends = overrides.reviewBackends;
8061
8075
  if (typeof overrides.handoverInterval === "number") sessionConfig.handoverInterval = overrides.handoverInterval;
8076
+ if (overrides.stages && typeof overrides.stages === "object") {
8077
+ sessionConfig.stageOverrides = overrides.stages;
8078
+ }
8062
8079
  }
8063
8080
  } catch {
8064
8081
  }
@@ -8068,7 +8085,8 @@ async function handleStart(root, args) {
8068
8085
  const resolvedRecipe = resolveRecipe(recipe, {
8069
8086
  maxTicketsPerSession: sessionConfig.maxTicketsPerSession,
8070
8087
  compactThreshold: sessionConfig.compactThreshold,
8071
- reviewBackends: sessionConfig.reviewBackends
8088
+ reviewBackends: sessionConfig.reviewBackends,
8089
+ stages: sessionConfig.stageOverrides
8072
8090
  });
8073
8091
  const session = createSession(root, recipe, wsId, sessionConfig);
8074
8092
  const dir = sessionDir(root, session.sessionId);
@@ -8868,14 +8886,6 @@ async function handleCancel(root, args) {
8868
8886
  if (info.state.state === "SESSION_END" || info.state.status === "completed") {
8869
8887
  return guideError(new Error("Session already ended."));
8870
8888
  }
8871
- const CANCELLABLE_STATES = /* @__PURE__ */ new Set(["PICK_TICKET", "COMPLETE", "HANDOVER"]);
8872
- if (info.state.recipe === "coding" && !CANCELLABLE_STATES.has(info.state.state)) {
8873
- const sessionMode = info.state.mode ?? "auto";
8874
- const modeGuidance = sessionMode === "plan" ? "Plan mode sessions end after plan review approval \u2014 continue to that step." : sessionMode === "review" ? "Review mode sessions end after code review approval \u2014 continue to that step." : sessionMode === "guided" ? "Guided mode sessions end after ticket completion \u2014 continue to FINALIZE." : "Complete the current ticket and write a handover to end the session.";
8875
- return guideError(new Error(
8876
- `Cannot cancel a coding session from ${info.state.state}. ${modeGuidance}`
8877
- ));
8878
- }
8879
8889
  await recoverPendingMutation(info.dir, info.state, root);
8880
8890
  const cancelInfo = findSessionById(root, args.sessionId) ?? info;
8881
8891
  let ticketReleased = false;
@@ -10363,7 +10373,7 @@ var init_mcp = __esm({
10363
10373
  init_init();
10364
10374
  ENV_VAR2 = "CLAUDESTORY_PROJECT_ROOT";
10365
10375
  CONFIG_PATH2 = ".story/config.json";
10366
- version = "0.1.33";
10376
+ version = "0.1.34";
10367
10377
  main().catch((err) => {
10368
10378
  process.stderr.write(`Fatal: ${err instanceof Error ? err.message : String(err)}
10369
10379
  `);
@@ -13647,7 +13657,7 @@ async function runCli() {
13647
13657
  registerConfigCommand: registerConfigCommand2,
13648
13658
  registerSessionCommand: registerSessionCommand2
13649
13659
  } = await Promise.resolve().then(() => (init_register(), register_exports));
13650
- const version2 = "0.1.33";
13660
+ const version2 = "0.1.34";
13651
13661
  class HandledError extends Error {
13652
13662
  constructor() {
13653
13663
  super("HANDLED_ERROR");
package/dist/index.d.ts CHANGED
@@ -348,14 +348,20 @@ declare const ConfigSchema: z.ZodObject<{
348
348
  maxTicketsPerSession: z.ZodOptional<z.ZodNumber>;
349
349
  compactThreshold: z.ZodOptional<z.ZodString>;
350
350
  reviewBackends: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
351
+ handoverInterval: z.ZodOptional<z.ZodNumber>;
352
+ stages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
351
353
  }, "strip", z.ZodTypeAny, {
352
354
  maxTicketsPerSession?: number | undefined;
353
355
  compactThreshold?: string | undefined;
354
356
  reviewBackends?: string[] | undefined;
357
+ handoverInterval?: number | undefined;
358
+ stages?: Record<string, Record<string, unknown>> | undefined;
355
359
  }, {
356
360
  maxTicketsPerSession?: number | undefined;
357
361
  compactThreshold?: string | undefined;
358
362
  reviewBackends?: string[] | undefined;
363
+ handoverInterval?: number | undefined;
364
+ stages?: Record<string, Record<string, unknown>> | undefined;
359
365
  }>>;
360
366
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
361
367
  version: z.ZodNumber;
@@ -387,14 +393,20 @@ declare const ConfigSchema: z.ZodObject<{
387
393
  maxTicketsPerSession: z.ZodOptional<z.ZodNumber>;
388
394
  compactThreshold: z.ZodOptional<z.ZodString>;
389
395
  reviewBackends: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
396
+ handoverInterval: z.ZodOptional<z.ZodNumber>;
397
+ stages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
390
398
  }, "strip", z.ZodTypeAny, {
391
399
  maxTicketsPerSession?: number | undefined;
392
400
  compactThreshold?: string | undefined;
393
401
  reviewBackends?: string[] | undefined;
402
+ handoverInterval?: number | undefined;
403
+ stages?: Record<string, Record<string, unknown>> | undefined;
394
404
  }, {
395
405
  maxTicketsPerSession?: number | undefined;
396
406
  compactThreshold?: string | undefined;
397
407
  reviewBackends?: string[] | undefined;
408
+ handoverInterval?: number | undefined;
409
+ stages?: Record<string, Record<string, unknown>> | undefined;
398
410
  }>>;
399
411
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
400
412
  version: z.ZodNumber;
@@ -426,14 +438,20 @@ declare const ConfigSchema: z.ZodObject<{
426
438
  maxTicketsPerSession: z.ZodOptional<z.ZodNumber>;
427
439
  compactThreshold: z.ZodOptional<z.ZodString>;
428
440
  reviewBackends: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
441
+ handoverInterval: z.ZodOptional<z.ZodNumber>;
442
+ stages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
429
443
  }, "strip", z.ZodTypeAny, {
430
444
  maxTicketsPerSession?: number | undefined;
431
445
  compactThreshold?: string | undefined;
432
446
  reviewBackends?: string[] | undefined;
447
+ handoverInterval?: number | undefined;
448
+ stages?: Record<string, Record<string, unknown>> | undefined;
433
449
  }, {
434
450
  maxTicketsPerSession?: number | undefined;
435
451
  compactThreshold?: string | undefined;
436
452
  reviewBackends?: string[] | undefined;
453
+ handoverInterval?: number | undefined;
454
+ stages?: Record<string, Record<string, unknown>> | undefined;
437
455
  }>>;
438
456
  }, z.ZodTypeAny, "passthrough">>;
439
457
  type Config = z.infer<typeof ConfigSchema>;
@@ -950,14 +968,20 @@ declare const SnapshotV1Schema: z.ZodObject<{
950
968
  maxTicketsPerSession: z.ZodOptional<z.ZodNumber>;
951
969
  compactThreshold: z.ZodOptional<z.ZodString>;
952
970
  reviewBackends: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
971
+ handoverInterval: z.ZodOptional<z.ZodNumber>;
972
+ stages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
953
973
  }, "strip", z.ZodTypeAny, {
954
974
  maxTicketsPerSession?: number | undefined;
955
975
  compactThreshold?: string | undefined;
956
976
  reviewBackends?: string[] | undefined;
977
+ handoverInterval?: number | undefined;
978
+ stages?: Record<string, Record<string, unknown>> | undefined;
957
979
  }, {
958
980
  maxTicketsPerSession?: number | undefined;
959
981
  compactThreshold?: string | undefined;
960
982
  reviewBackends?: string[] | undefined;
983
+ handoverInterval?: number | undefined;
984
+ stages?: Record<string, Record<string, unknown>> | undefined;
961
985
  }>>;
962
986
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
963
987
  version: z.ZodNumber;
@@ -989,14 +1013,20 @@ declare const SnapshotV1Schema: z.ZodObject<{
989
1013
  maxTicketsPerSession: z.ZodOptional<z.ZodNumber>;
990
1014
  compactThreshold: z.ZodOptional<z.ZodString>;
991
1015
  reviewBackends: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1016
+ handoverInterval: z.ZodOptional<z.ZodNumber>;
1017
+ stages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
992
1018
  }, "strip", z.ZodTypeAny, {
993
1019
  maxTicketsPerSession?: number | undefined;
994
1020
  compactThreshold?: string | undefined;
995
1021
  reviewBackends?: string[] | undefined;
1022
+ handoverInterval?: number | undefined;
1023
+ stages?: Record<string, Record<string, unknown>> | undefined;
996
1024
  }, {
997
1025
  maxTicketsPerSession?: number | undefined;
998
1026
  compactThreshold?: string | undefined;
999
1027
  reviewBackends?: string[] | undefined;
1028
+ handoverInterval?: number | undefined;
1029
+ stages?: Record<string, Record<string, unknown>> | undefined;
1000
1030
  }>>;
1001
1031
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
1002
1032
  version: z.ZodNumber;
@@ -1028,14 +1058,20 @@ declare const SnapshotV1Schema: z.ZodObject<{
1028
1058
  maxTicketsPerSession: z.ZodOptional<z.ZodNumber>;
1029
1059
  compactThreshold: z.ZodOptional<z.ZodString>;
1030
1060
  reviewBackends: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1061
+ handoverInterval: z.ZodOptional<z.ZodNumber>;
1062
+ stages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
1031
1063
  }, "strip", z.ZodTypeAny, {
1032
1064
  maxTicketsPerSession?: number | undefined;
1033
1065
  compactThreshold?: string | undefined;
1034
1066
  reviewBackends?: string[] | undefined;
1067
+ handoverInterval?: number | undefined;
1068
+ stages?: Record<string, Record<string, unknown>> | undefined;
1035
1069
  }, {
1036
1070
  maxTicketsPerSession?: number | undefined;
1037
1071
  compactThreshold?: string | undefined;
1038
1072
  reviewBackends?: string[] | undefined;
1073
+ handoverInterval?: number | undefined;
1074
+ stages?: Record<string, Record<string, unknown>> | undefined;
1039
1075
  }>>;
1040
1076
  }, z.ZodTypeAny, "passthrough">>;
1041
1077
  roadmap: z.ZodObject<{
@@ -1334,40 +1370,15 @@ declare const SnapshotV1Schema: z.ZodObject<{
1334
1370
  file: z.ZodString;
1335
1371
  message: z.ZodString;
1336
1372
  }, "strip", z.ZodTypeAny, {
1337
- type: string;
1338
1373
  message: string;
1374
+ type: string;
1339
1375
  file: string;
1340
1376
  }, {
1341
- type: string;
1342
1377
  message: string;
1378
+ type: string;
1343
1379
  file: string;
1344
1380
  }>, "many">>;
1345
1381
  }, "strip", z.ZodTypeAny, {
1346
- version: 1;
1347
- config: {
1348
- version: number;
1349
- type: string;
1350
- language: string;
1351
- project: string;
1352
- features: {
1353
- issues: boolean;
1354
- tickets: boolean;
1355
- handovers: boolean;
1356
- roadmap: boolean;
1357
- reviews: boolean;
1358
- } & {
1359
- [k: string]: unknown;
1360
- };
1361
- schemaVersion?: number | undefined;
1362
- recipe?: string | undefined;
1363
- recipeOverrides?: {
1364
- maxTicketsPerSession?: number | undefined;
1365
- compactThreshold?: string | undefined;
1366
- reviewBackends?: string[] | undefined;
1367
- } | undefined;
1368
- } & {
1369
- [k: string]: unknown;
1370
- };
1371
1382
  issues: z.objectOutputType<{
1372
1383
  id: z.ZodString;
1373
1384
  title: z.ZodString;
@@ -1404,8 +1415,8 @@ declare const SnapshotV1Schema: z.ZodObject<{
1404
1415
  claimedBySession: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1405
1416
  }, z.ZodTypeAny, "passthrough">[];
1406
1417
  roadmap: {
1407
- date: string;
1408
1418
  title: string;
1419
+ date: string;
1409
1420
  phases: z.objectOutputType<{
1410
1421
  id: z.ZodString;
1411
1422
  label: z.ZodString;
@@ -1423,6 +1434,7 @@ declare const SnapshotV1Schema: z.ZodObject<{
1423
1434
  } & {
1424
1435
  [k: string]: unknown;
1425
1436
  };
1437
+ version: 1;
1426
1438
  project: string;
1427
1439
  notes: z.objectOutputType<{
1428
1440
  id: z.ZodString;
@@ -1448,19 +1460,11 @@ declare const SnapshotV1Schema: z.ZodObject<{
1448
1460
  status: z.ZodEnum<["active", "deprecated", "superseded"]>;
1449
1461
  }, z.ZodTypeAny, "passthrough">[];
1450
1462
  createdAt: string;
1451
- handoverFilenames: string[];
1452
- warnings?: {
1453
- type: string;
1454
- message: string;
1455
- file: string;
1456
- }[] | undefined;
1457
- }, {
1458
- version: 1;
1459
1463
  config: {
1460
- version: number;
1461
1464
  type: string;
1462
- language: string;
1465
+ version: number;
1463
1466
  project: string;
1467
+ language: string;
1464
1468
  features: {
1465
1469
  issues: boolean;
1466
1470
  tickets: boolean;
@@ -1476,10 +1480,19 @@ declare const SnapshotV1Schema: z.ZodObject<{
1476
1480
  maxTicketsPerSession?: number | undefined;
1477
1481
  compactThreshold?: string | undefined;
1478
1482
  reviewBackends?: string[] | undefined;
1483
+ handoverInterval?: number | undefined;
1484
+ stages?: Record<string, Record<string, unknown>> | undefined;
1479
1485
  } | undefined;
1480
1486
  } & {
1481
1487
  [k: string]: unknown;
1482
1488
  };
1489
+ handoverFilenames: string[];
1490
+ warnings?: {
1491
+ message: string;
1492
+ type: string;
1493
+ file: string;
1494
+ }[] | undefined;
1495
+ }, {
1483
1496
  issues: z.objectInputType<{
1484
1497
  id: z.ZodString;
1485
1498
  title: z.ZodString;
@@ -1516,8 +1529,8 @@ declare const SnapshotV1Schema: z.ZodObject<{
1516
1529
  claimedBySession: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1517
1530
  }, z.ZodTypeAny, "passthrough">[];
1518
1531
  roadmap: {
1519
- date: string;
1520
1532
  title: string;
1533
+ date: string;
1521
1534
  phases: z.objectInputType<{
1522
1535
  id: z.ZodString;
1523
1536
  label: z.ZodString;
@@ -1535,8 +1548,35 @@ declare const SnapshotV1Schema: z.ZodObject<{
1535
1548
  } & {
1536
1549
  [k: string]: unknown;
1537
1550
  };
1551
+ version: 1;
1538
1552
  project: string;
1539
1553
  createdAt: string;
1554
+ config: {
1555
+ type: string;
1556
+ version: number;
1557
+ project: string;
1558
+ language: string;
1559
+ features: {
1560
+ issues: boolean;
1561
+ tickets: boolean;
1562
+ handovers: boolean;
1563
+ roadmap: boolean;
1564
+ reviews: boolean;
1565
+ } & {
1566
+ [k: string]: unknown;
1567
+ };
1568
+ schemaVersion?: number | undefined;
1569
+ recipe?: string | undefined;
1570
+ recipeOverrides?: {
1571
+ maxTicketsPerSession?: number | undefined;
1572
+ compactThreshold?: string | undefined;
1573
+ reviewBackends?: string[] | undefined;
1574
+ handoverInterval?: number | undefined;
1575
+ stages?: Record<string, Record<string, unknown>> | undefined;
1576
+ } | undefined;
1577
+ } & {
1578
+ [k: string]: unknown;
1579
+ };
1540
1580
  notes?: z.objectInputType<{
1541
1581
  id: z.ZodString;
1542
1582
  title: z.ZodNullable<z.ZodString>;
@@ -1561,8 +1601,8 @@ declare const SnapshotV1Schema: z.ZodObject<{
1561
1601
  status: z.ZodEnum<["active", "deprecated", "superseded"]>;
1562
1602
  }, z.ZodTypeAny, "passthrough">[] | undefined;
1563
1603
  warnings?: {
1564
- type: string;
1565
1604
  message: string;
1605
+ type: string;
1566
1606
  file: string;
1567
1607
  }[] | undefined;
1568
1608
  handoverFilenames?: string[] | undefined;
package/dist/index.js CHANGED
@@ -140,7 +140,9 @@ var ConfigSchema = z6.object({
140
140
  recipeOverrides: z6.object({
141
141
  maxTicketsPerSession: z6.number().min(0).optional(),
142
142
  compactThreshold: z6.string().optional(),
143
- reviewBackends: z6.array(z6.string()).optional()
143
+ reviewBackends: z6.array(z6.string()).optional(),
144
+ handoverInterval: z6.number().min(0).optional(),
145
+ stages: z6.record(z6.record(z6.unknown())).optional()
144
146
  }).optional()
145
147
  }).passthrough();
146
148
 
package/dist/mcp.js CHANGED
@@ -240,7 +240,9 @@ var init_config = __esm({
240
240
  recipeOverrides: z7.object({
241
241
  maxTicketsPerSession: z7.number().min(0).optional(),
242
242
  compactThreshold: z7.string().optional(),
243
- reviewBackends: z7.array(z7.string()).optional()
243
+ reviewBackends: z7.array(z7.string()).optional(),
244
+ handoverInterval: z7.number().min(0).optional(),
245
+ stages: z7.record(z7.record(z7.unknown())).optional()
244
246
  }).optional()
245
247
  }).passthrough();
246
248
  }
@@ -5512,7 +5514,19 @@ function resolveRecipe(recipeName, projectOverrides) {
5512
5514
  }
5513
5515
  }
5514
5516
  let pipeline = raw.pipeline ? [...raw.pipeline] : [...DEFAULT_PIPELINE];
5515
- const stages2 = raw.stages ?? {};
5517
+ const recipeStages = raw.stages ?? {};
5518
+ const stageOverrides = projectOverrides?.stages ?? {};
5519
+ const stages2 = {};
5520
+ for (const [key, value] of Object.entries(recipeStages)) {
5521
+ const override = stageOverrides[key];
5522
+ const safeOverride = override && typeof override === "object" && !Array.isArray(override) ? override : {};
5523
+ stages2[key] = { ...value, ...safeOverride };
5524
+ }
5525
+ for (const [key, value] of Object.entries(stageOverrides)) {
5526
+ if (!stages2[key] && value && typeof value === "object" && !Array.isArray(value)) {
5527
+ stages2[key] = { ...value };
5528
+ }
5529
+ }
5516
5530
  if (stages2.WRITE_TESTS?.enabled) {
5517
5531
  const implementIdx = pipeline.indexOf("IMPLEMENT");
5518
5532
  if (implementIdx !== -1 && !pipeline.includes("WRITE_TESTS")) {
@@ -7531,6 +7545,9 @@ async function handleStart(root, args) {
7531
7545
  if (typeof overrides.compactThreshold === "string") sessionConfig.compactThreshold = overrides.compactThreshold;
7532
7546
  if (Array.isArray(overrides.reviewBackends)) sessionConfig.reviewBackends = overrides.reviewBackends;
7533
7547
  if (typeof overrides.handoverInterval === "number") sessionConfig.handoverInterval = overrides.handoverInterval;
7548
+ if (overrides.stages && typeof overrides.stages === "object") {
7549
+ sessionConfig.stageOverrides = overrides.stages;
7550
+ }
7534
7551
  }
7535
7552
  } catch {
7536
7553
  }
@@ -7540,7 +7557,8 @@ async function handleStart(root, args) {
7540
7557
  const resolvedRecipe = resolveRecipe(recipe, {
7541
7558
  maxTicketsPerSession: sessionConfig.maxTicketsPerSession,
7542
7559
  compactThreshold: sessionConfig.compactThreshold,
7543
- reviewBackends: sessionConfig.reviewBackends
7560
+ reviewBackends: sessionConfig.reviewBackends,
7561
+ stages: sessionConfig.stageOverrides
7544
7562
  });
7545
7563
  const session = createSession(root, recipe, wsId, sessionConfig);
7546
7564
  const dir = sessionDir(root, session.sessionId);
@@ -8341,14 +8359,6 @@ async function handleCancel(root, args) {
8341
8359
  if (info.state.state === "SESSION_END" || info.state.status === "completed") {
8342
8360
  return guideError(new Error("Session already ended."));
8343
8361
  }
8344
- const CANCELLABLE_STATES = /* @__PURE__ */ new Set(["PICK_TICKET", "COMPLETE", "HANDOVER"]);
8345
- if (info.state.recipe === "coding" && !CANCELLABLE_STATES.has(info.state.state)) {
8346
- const sessionMode = info.state.mode ?? "auto";
8347
- const modeGuidance = sessionMode === "plan" ? "Plan mode sessions end after plan review approval \u2014 continue to that step." : sessionMode === "review" ? "Review mode sessions end after code review approval \u2014 continue to that step." : sessionMode === "guided" ? "Guided mode sessions end after ticket completion \u2014 continue to FINALIZE." : "Complete the current ticket and write a handover to end the session.";
8348
- return guideError(new Error(
8349
- `Cannot cancel a coding session from ${info.state.state}. ${modeGuidance}`
8350
- ));
8351
- }
8352
8362
  await recoverPendingMutation(info.dir, info.state, root);
8353
8363
  const cancelInfo = findSessionById(root, args.sessionId) ?? info;
8354
8364
  let ticketReleased = false;
@@ -9511,7 +9521,7 @@ async function ensureGitignoreEntries(gitignorePath, entries) {
9511
9521
  // src/mcp/index.ts
9512
9522
  var ENV_VAR2 = "CLAUDESTORY_PROJECT_ROOT";
9513
9523
  var CONFIG_PATH2 = ".story/config.json";
9514
- var version = "0.1.33";
9524
+ var version = "0.1.34";
9515
9525
  function tryDiscoverRoot() {
9516
9526
  const envRoot = process.env[ENV_VAR2];
9517
9527
  if (envRoot) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anthropologies/claudestory",
3
- "version": "0.1.33",
3
+ "version": "0.1.34",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Cross-session context persistence for AI coding projects. Tracks tickets, issues, roadmap, and handovers so every session builds on the last.",
6
6
  "keywords": [