@anthropologies/claudestory 0.1.48 → 0.1.50
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 +3 -3
- package/dist/index.d.ts +42 -42
- package/dist/mcp.js +2 -2
- package/package.json +1 -1
- package/src/skill/setup-flow.md +24 -19
package/dist/cli.js
CHANGED
|
@@ -8358,7 +8358,7 @@ function getInstalledVersion() {
|
|
|
8358
8358
|
}
|
|
8359
8359
|
}
|
|
8360
8360
|
function getRunningVersion() {
|
|
8361
|
-
return "0.1.
|
|
8361
|
+
return "0.1.50";
|
|
8362
8362
|
}
|
|
8363
8363
|
var init_version_check = __esm({
|
|
8364
8364
|
"src/autonomous/version-check.ts"() {
|
|
@@ -10923,7 +10923,7 @@ var init_mcp = __esm({
|
|
|
10923
10923
|
init_init();
|
|
10924
10924
|
ENV_VAR2 = "CLAUDESTORY_PROJECT_ROOT";
|
|
10925
10925
|
CONFIG_PATH2 = ".story/config.json";
|
|
10926
|
-
version = "0.1.
|
|
10926
|
+
version = "0.1.50";
|
|
10927
10927
|
main().catch((err) => {
|
|
10928
10928
|
process.stderr.write(`Fatal: ${err instanceof Error ? err.message : String(err)}
|
|
10929
10929
|
`);
|
|
@@ -14354,7 +14354,7 @@ async function runCli() {
|
|
|
14354
14354
|
registerSessionCommand: registerSessionCommand2,
|
|
14355
14355
|
registerRepairCommand: registerRepairCommand2
|
|
14356
14356
|
} = await Promise.resolve().then(() => (init_register(), register_exports));
|
|
14357
|
-
const version2 = "0.1.
|
|
14357
|
+
const version2 = "0.1.50";
|
|
14358
14358
|
class HandledError extends Error {
|
|
14359
14359
|
constructor() {
|
|
14360
14360
|
super("HANDLED_ERROR");
|
package/dist/index.d.ts
CHANGED
|
@@ -1377,42 +1377,15 @@ declare const SnapshotV1Schema: z.ZodObject<{
|
|
|
1377
1377
|
file: z.ZodString;
|
|
1378
1378
|
message: z.ZodString;
|
|
1379
1379
|
}, "strip", z.ZodTypeAny, {
|
|
1380
|
-
type: string;
|
|
1381
1380
|
message: string;
|
|
1381
|
+
type: string;
|
|
1382
1382
|
file: string;
|
|
1383
1383
|
}, {
|
|
1384
|
-
type: string;
|
|
1385
1384
|
message: string;
|
|
1385
|
+
type: string;
|
|
1386
1386
|
file: string;
|
|
1387
1387
|
}>, "many">>;
|
|
1388
1388
|
}, "strip", z.ZodTypeAny, {
|
|
1389
|
-
version: 1;
|
|
1390
|
-
config: {
|
|
1391
|
-
version: number;
|
|
1392
|
-
type: string;
|
|
1393
|
-
language: string;
|
|
1394
|
-
project: string;
|
|
1395
|
-
features: {
|
|
1396
|
-
issues: boolean;
|
|
1397
|
-
tickets: boolean;
|
|
1398
|
-
handovers: boolean;
|
|
1399
|
-
roadmap: boolean;
|
|
1400
|
-
reviews: boolean;
|
|
1401
|
-
} & {
|
|
1402
|
-
[k: string]: unknown;
|
|
1403
|
-
};
|
|
1404
|
-
schemaVersion?: number | undefined;
|
|
1405
|
-
recipe?: string | undefined;
|
|
1406
|
-
recipeOverrides?: {
|
|
1407
|
-
maxTicketsPerSession?: number | undefined;
|
|
1408
|
-
compactThreshold?: string | undefined;
|
|
1409
|
-
reviewBackends?: string[] | undefined;
|
|
1410
|
-
handoverInterval?: number | undefined;
|
|
1411
|
-
stages?: Record<string, Record<string, unknown>> | undefined;
|
|
1412
|
-
} | undefined;
|
|
1413
|
-
} & {
|
|
1414
|
-
[k: string]: unknown;
|
|
1415
|
-
};
|
|
1416
1389
|
issues: z.objectOutputType<{
|
|
1417
1390
|
id: z.ZodString;
|
|
1418
1391
|
title: z.ZodString;
|
|
@@ -1449,8 +1422,8 @@ declare const SnapshotV1Schema: z.ZodObject<{
|
|
|
1449
1422
|
claimedBySession: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1450
1423
|
}, z.ZodTypeAny, "passthrough">[];
|
|
1451
1424
|
roadmap: {
|
|
1452
|
-
date: string;
|
|
1453
1425
|
title: string;
|
|
1426
|
+
date: string;
|
|
1454
1427
|
phases: z.objectOutputType<{
|
|
1455
1428
|
id: z.ZodString;
|
|
1456
1429
|
label: z.ZodString;
|
|
@@ -1468,6 +1441,7 @@ declare const SnapshotV1Schema: z.ZodObject<{
|
|
|
1468
1441
|
} & {
|
|
1469
1442
|
[k: string]: unknown;
|
|
1470
1443
|
};
|
|
1444
|
+
version: 1;
|
|
1471
1445
|
project: string;
|
|
1472
1446
|
notes: z.objectOutputType<{
|
|
1473
1447
|
id: z.ZodString;
|
|
@@ -1493,19 +1467,11 @@ declare const SnapshotV1Schema: z.ZodObject<{
|
|
|
1493
1467
|
status: z.ZodEnum<["active", "deprecated", "superseded"]>;
|
|
1494
1468
|
}, z.ZodTypeAny, "passthrough">[];
|
|
1495
1469
|
createdAt: string;
|
|
1496
|
-
handoverFilenames: string[];
|
|
1497
|
-
warnings?: {
|
|
1498
|
-
type: string;
|
|
1499
|
-
message: string;
|
|
1500
|
-
file: string;
|
|
1501
|
-
}[] | undefined;
|
|
1502
|
-
}, {
|
|
1503
|
-
version: 1;
|
|
1504
1470
|
config: {
|
|
1505
|
-
version: number;
|
|
1506
1471
|
type: string;
|
|
1507
|
-
|
|
1472
|
+
version: number;
|
|
1508
1473
|
project: string;
|
|
1474
|
+
language: string;
|
|
1509
1475
|
features: {
|
|
1510
1476
|
issues: boolean;
|
|
1511
1477
|
tickets: boolean;
|
|
@@ -1527,6 +1493,13 @@ declare const SnapshotV1Schema: z.ZodObject<{
|
|
|
1527
1493
|
} & {
|
|
1528
1494
|
[k: string]: unknown;
|
|
1529
1495
|
};
|
|
1496
|
+
handoverFilenames: string[];
|
|
1497
|
+
warnings?: {
|
|
1498
|
+
message: string;
|
|
1499
|
+
type: string;
|
|
1500
|
+
file: string;
|
|
1501
|
+
}[] | undefined;
|
|
1502
|
+
}, {
|
|
1530
1503
|
issues: z.objectInputType<{
|
|
1531
1504
|
id: z.ZodString;
|
|
1532
1505
|
title: z.ZodString;
|
|
@@ -1563,8 +1536,8 @@ declare const SnapshotV1Schema: z.ZodObject<{
|
|
|
1563
1536
|
claimedBySession: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1564
1537
|
}, z.ZodTypeAny, "passthrough">[];
|
|
1565
1538
|
roadmap: {
|
|
1566
|
-
date: string;
|
|
1567
1539
|
title: string;
|
|
1540
|
+
date: string;
|
|
1568
1541
|
phases: z.objectInputType<{
|
|
1569
1542
|
id: z.ZodString;
|
|
1570
1543
|
label: z.ZodString;
|
|
@@ -1582,8 +1555,35 @@ declare const SnapshotV1Schema: z.ZodObject<{
|
|
|
1582
1555
|
} & {
|
|
1583
1556
|
[k: string]: unknown;
|
|
1584
1557
|
};
|
|
1558
|
+
version: 1;
|
|
1585
1559
|
project: string;
|
|
1586
1560
|
createdAt: string;
|
|
1561
|
+
config: {
|
|
1562
|
+
type: string;
|
|
1563
|
+
version: number;
|
|
1564
|
+
project: string;
|
|
1565
|
+
language: string;
|
|
1566
|
+
features: {
|
|
1567
|
+
issues: boolean;
|
|
1568
|
+
tickets: boolean;
|
|
1569
|
+
handovers: boolean;
|
|
1570
|
+
roadmap: boolean;
|
|
1571
|
+
reviews: boolean;
|
|
1572
|
+
} & {
|
|
1573
|
+
[k: string]: unknown;
|
|
1574
|
+
};
|
|
1575
|
+
schemaVersion?: number | undefined;
|
|
1576
|
+
recipe?: string | undefined;
|
|
1577
|
+
recipeOverrides?: {
|
|
1578
|
+
maxTicketsPerSession?: number | undefined;
|
|
1579
|
+
compactThreshold?: string | undefined;
|
|
1580
|
+
reviewBackends?: string[] | undefined;
|
|
1581
|
+
handoverInterval?: number | undefined;
|
|
1582
|
+
stages?: Record<string, Record<string, unknown>> | undefined;
|
|
1583
|
+
} | undefined;
|
|
1584
|
+
} & {
|
|
1585
|
+
[k: string]: unknown;
|
|
1586
|
+
};
|
|
1587
1587
|
notes?: z.objectInputType<{
|
|
1588
1588
|
id: z.ZodString;
|
|
1589
1589
|
title: z.ZodNullable<z.ZodString>;
|
|
@@ -1608,8 +1608,8 @@ declare const SnapshotV1Schema: z.ZodObject<{
|
|
|
1608
1608
|
status: z.ZodEnum<["active", "deprecated", "superseded"]>;
|
|
1609
1609
|
}, z.ZodTypeAny, "passthrough">[] | undefined;
|
|
1610
1610
|
warnings?: {
|
|
1611
|
-
type: string;
|
|
1612
1611
|
message: string;
|
|
1612
|
+
type: string;
|
|
1613
1613
|
file: string;
|
|
1614
1614
|
}[] | undefined;
|
|
1615
1615
|
handoverFilenames?: string[] | undefined;
|
package/dist/mcp.js
CHANGED
|
@@ -7816,7 +7816,7 @@ function getInstalledVersion() {
|
|
|
7816
7816
|
}
|
|
7817
7817
|
}
|
|
7818
7818
|
function getRunningVersion() {
|
|
7819
|
-
return "0.1.
|
|
7819
|
+
return "0.1.50";
|
|
7820
7820
|
}
|
|
7821
7821
|
|
|
7822
7822
|
// src/autonomous/guide.ts
|
|
@@ -10055,7 +10055,7 @@ async function ensureGitignoreEntries(gitignorePath, entries) {
|
|
|
10055
10055
|
// src/mcp/index.ts
|
|
10056
10056
|
var ENV_VAR2 = "CLAUDESTORY_PROJECT_ROOT";
|
|
10057
10057
|
var CONFIG_PATH2 = ".story/config.json";
|
|
10058
|
-
var version = "0.1.
|
|
10058
|
+
var version = "0.1.50";
|
|
10059
10059
|
function tryDiscoverRoot() {
|
|
10060
10060
|
const envRoot = process.env[ENV_VAR2];
|
|
10061
10061
|
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.50",
|
|
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": [
|
package/src/skill/setup-flow.md
CHANGED
|
@@ -167,9 +167,7 @@ Show: "So far: [name] is a [surface] + [traits] built with [stack]."
|
|
|
167
167
|
- "No, start from scratch" -- generate design foundation tickets (color palette, typography, layout, component selection)
|
|
168
168
|
- "Not sure yet"
|
|
169
169
|
|
|
170
|
-
|
|
171
|
-
- `AskUserQuestion`: "Component library?"
|
|
172
|
-
- options: shadcn/ui (Recommended for Next.js), Material UI, Chakra UI, None/custom
|
|
170
|
+
Component library is inferred from the stack, not asked as a separate gate. Next.js defaults to shadcn/ui, Flutter to Material, React Native to NativeBase/Paper. Only ask if the stack doesn't have a clear default or the user picked "No, start from scratch" (where the component system is part of the design foundation tickets).
|
|
173
171
|
|
|
174
172
|
**--- Cluster 3: System structure ---**
|
|
175
173
|
|
|
@@ -182,7 +180,7 @@ If NOT "Yes, mockups / Figma" and project has a UI surface, follow up with compo
|
|
|
182
180
|
- "Frontend + managed backend (Supabase/Firebase)" -- BaaS handles DB, auth, storage. You build the frontend. Fastest path to MVP.
|
|
183
181
|
- "Not sure -- recommend one"
|
|
184
182
|
|
|
185
|
-
BaaS as a first-class path. If selected: skip ORM choice (BaaS handles it),
|
|
183
|
+
BaaS as a first-class path. If selected: skip ORM choice (BaaS handles it), adjust deployment to match (Vercel + Supabase, or Firebase Hosting + Firebase). Auth gate still fires -- the user still decides what kind of auth (no auth, individual, team/org), but tickets generated are BaaS-specific (Supabase RLS policies, Firebase Security Rules) instead of custom middleware. Generates different tickets: BaaS setup, client SDK integration, security rules, instead of custom API + auth tickets.
|
|
186
184
|
|
|
187
185
|
**BaaS + AI edge case:** If the user also selected "AI / LLM powered" as a characteristic, AI gates still fire normally. For document ownership tickets (RAG + auth), reference "Supabase RLS policies" or "Firebase Security Rules" instead of "custom row-level access." The AI cluster's data model tickets adapt to the BaaS context.
|
|
188
186
|
|
|
@@ -246,7 +244,7 @@ Multi-select because these are orthogonal: a system can have both workflows AND
|
|
|
246
244
|
|
|
247
245
|
When recommending auth setup for individual accounts, suggest Firebase Auth or Clerk as the easiest options. These handle email/password, social login, session management, and JWT with minimal code. Only recommend custom auth when the user has specific requirements.
|
|
248
246
|
|
|
249
|
-
**Step 4f:** Sensitive domain
|
|
247
|
+
**Step 4f:** Sensitive domain. This is the canonical sensitive domain gate for ALL projects. The AI safety cluster (Cluster 5) references this answer instead of re-asking. Bias toward asking -- skip only for projects that are clearly non-sensitive (portfolio, blog, dev tool, game). Ask for anything with user data, business transactions, or professional use cases. Use `AskUserQuestion`:
|
|
250
248
|
- question: "Is this in a sensitive/regulated domain?"
|
|
251
249
|
- header: "Domain"
|
|
252
250
|
- options:
|
|
@@ -372,26 +370,28 @@ If "Adjust first": ask what they want to change, iterate, then re-show this same
|
|
|
372
370
|
|
|
373
371
|
If "Create as-is" and no brief exists: warn "Note: tickets will have titles only -- you can add descriptions later." Then proceed to **1e. Execute on Approval**.
|
|
374
372
|
|
|
375
|
-
#### 1d2. Refinement and Review
|
|
373
|
+
#### 1d2. Refinement and Review
|
|
376
374
|
|
|
377
|
-
**
|
|
375
|
+
**IMPORTANT: Do NOT skip this section. Do NOT go straight to creating tickets.** The user chose refinement and/or review. You must complete all steps below before moving to 1e (Execute).
|
|
378
376
|
|
|
379
|
-
|
|
377
|
+
**Step A: Refine the proposal internally.** Do not show intermediate work to the user. Use brief/PRD notes from 1b, or infer from interview answers if no brief.
|
|
380
378
|
|
|
381
|
-
|
|
382
|
-
-
|
|
383
|
-
- Infer `blockedBy` from phase ordering and domain logic
|
|
384
|
-
- Flag and split oversized tickets (3+ entities, API+UI in one
|
|
379
|
+
What to do:
|
|
380
|
+
- Add 3-4 sentence descriptions to each ticket
|
|
381
|
+
- Infer `blockedBy` from phase ordering and domain logic
|
|
382
|
+
- Flag and split oversized tickets (3+ entities, API+UI in one, 3+ models)
|
|
385
383
|
- Cross-reference brief entities against tickets, add missing ones
|
|
386
384
|
- Detect core differentiator -- decompose if single ticket
|
|
387
385
|
- Surface undecided tech choices
|
|
388
386
|
|
|
389
|
-
**
|
|
390
|
-
- If `review_plan` MCP tool is available,
|
|
387
|
+
**Step B: Run independent review (if user chose "Refine + review").** This step is REQUIRED when the user selected the review option. Do NOT skip it.
|
|
388
|
+
- If `review_plan` MCP tool is available, call it with the full refined proposal.
|
|
389
|
+
- Otherwise spawn an independent Claude agent to audit for gaps.
|
|
390
|
+
- If neither is available, note "Review skipped -- no review backends available."
|
|
391
391
|
- Maximum 2 review rounds.
|
|
392
|
-
- Incorporate
|
|
392
|
+
- Incorporate findings into the proposal.
|
|
393
393
|
|
|
394
|
-
**
|
|
394
|
+
**Step C: Show the compact summary to the user.** This is REQUIRED. Do NOT go to 1e without showing this. Do NOT show every ticket with its description -- show a summary of what changed:
|
|
395
395
|
|
|
396
396
|
```
|
|
397
397
|
Refinement complete. Here's what changed:
|
|
@@ -399,8 +399,9 @@ Refinement complete. Here's what changed:
|
|
|
399
399
|
- Added descriptions to 14 tickets
|
|
400
400
|
- Added 8 dependency links (blockedBy chains)
|
|
401
401
|
- No tickets flagged for splitting (all well-scoped)
|
|
402
|
-
- [If review ran] Independent review:
|
|
403
|
-
-
|
|
402
|
+
- [If review ran] Independent review: 2 suggestions incorporated
|
|
403
|
+
- T-005 split into T-005a/T-005b (was too broad)
|
|
404
|
+
- T-012 added blockedBy T-006 (missing dependency)
|
|
404
405
|
|
|
405
406
|
Updated proposal:
|
|
406
407
|
|
|
@@ -414,7 +415,9 @@ Updated proposal:
|
|
|
414
415
|
| ... | ... | ... | ... |
|
|
415
416
|
```
|
|
416
417
|
|
|
417
|
-
|
|
418
|
+
**Step D: Ask user to approve before creating.** This is REQUIRED. Do NOT proceed to 1e without this approval.
|
|
419
|
+
|
|
420
|
+
Use `AskUserQuestion`:
|
|
418
421
|
- question: "Ready to create?"
|
|
419
422
|
- header: "Create"
|
|
420
423
|
- options:
|
|
@@ -422,6 +425,8 @@ Then use `AskUserQuestion`:
|
|
|
422
425
|
- "Let me adjust first" -- iterate, then re-ask
|
|
423
426
|
- "Show me the full details" -- expand all ticket descriptions (for users who want to inspect)
|
|
424
427
|
|
|
428
|
+
Only proceed to **1e. Execute on Approval** after the user selects "Create everything."
|
|
429
|
+
|
|
425
430
|
#### 1e. Execute on Approval
|
|
426
431
|
|
|
427
432
|
**Two-pass ticket creation:**
|