@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 +23 -13
- package/dist/index.d.ts +80 -40
- package/dist/index.js +3 -1
- package/dist/mcp.js +22 -12
- package/package.json +1 -1
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
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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": [
|