@isaacriehm/cairn-core 0.3.3 → 0.3.5
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/.tsbuildinfo +1 -1
- package/dist/init/brand-derive.d.ts +32 -0
- package/dist/init/brand-derive.js +158 -0
- package/dist/init/brand-derive.js.map +1 -0
- package/dist/init/index.d.ts +2 -2
- package/dist/init/index.js +1 -1
- package/dist/init/index.js.map +1 -1
- package/dist/init/overlay.d.ts +3 -1
- package/dist/init/overlay.js.map +1 -1
- package/dist/init/phases/3-mapper.d.ts +10 -4
- package/dist/init/phases/3-mapper.js +16 -5
- package/dist/init/phases/3-mapper.js.map +1 -1
- package/dist/init/phases/3b-seed.js +5 -1
- package/dist/init/phases/3b-seed.js.map +1 -1
- package/dist/init/phases/4-pilot.js.map +1 -1
- package/dist/init/phases/5-brand.js +19 -6
- package/dist/init/phases/5-brand.js.map +1 -1
- package/dist/init/phases/8-baseline.js.map +1 -1
- package/dist/init/phases/index.d.ts +1 -0
- package/dist/init/phases/index.js +1 -0
- package/dist/init/phases/index.js.map +1 -1
- package/dist/init/phases/mapper-output-io.d.ts +48 -0
- package/dist/init/phases/mapper-output-io.js +66 -0
- package/dist/init/phases/mapper-output-io.js.map +1 -0
- package/dist/mcp/tools/init-phases.d.ts +22 -8
- package/dist/mcp/tools/init-phases.js +79 -37
- package/dist/mcp/tools/init-phases.js.map +1 -1
- package/package.json +1 -1
- package/dist/hooks/user-prompt-submit.d.ts +0 -7
- package/dist/hooks/user-prompt-submit.js +0 -12
- package/dist/hooks/user-prompt-submit.js.map +0 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brand inference — Haiku-derived overview / voice / personas / avoid
|
|
3
|
+
* from project signals (README + CLAUDE.md / AGENTS.md tone +
|
|
4
|
+
* mapper's domain_summary). Called by Phase 5-brand auto-fill so the
|
|
5
|
+
* adopted project gets meaningful brand drafts instead of mechanical
|
|
6
|
+
* defaults. Falls back to the mechanical defaults when the call fails
|
|
7
|
+
* — the result shape always matches `BrandAnswers`.
|
|
8
|
+
*/
|
|
9
|
+
import type { BrandAnswers } from "./brand-setup.js";
|
|
10
|
+
interface DerivedBrand {
|
|
11
|
+
overview: string;
|
|
12
|
+
voice: string;
|
|
13
|
+
avoid: string;
|
|
14
|
+
personas: {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
}[];
|
|
18
|
+
}
|
|
19
|
+
interface DeriveArgs {
|
|
20
|
+
repoRoot: string;
|
|
21
|
+
projectSlug: string;
|
|
22
|
+
domainSummary: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function deriveBrandFromProject(args: DeriveArgs): Promise<DerivedBrand | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Convert derived brand to the `BrandAnswers` shape consumed by
|
|
27
|
+
* `applyBrandAnswers`. Combines voice + avoid since the brand voice
|
|
28
|
+
* file already takes both. Personas collapse to the first entry's
|
|
29
|
+
* description (multi-persona support → v0.4 schema extension).
|
|
30
|
+
*/
|
|
31
|
+
export declare function derivedToBrandAnswers(d: DerivedBrand): BrandAnswers;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brand inference — Haiku-derived overview / voice / personas / avoid
|
|
3
|
+
* from project signals (README + CLAUDE.md / AGENTS.md tone +
|
|
4
|
+
* mapper's domain_summary). Called by Phase 5-brand auto-fill so the
|
|
5
|
+
* adopted project gets meaningful brand drafts instead of mechanical
|
|
6
|
+
* defaults. Falls back to the mechanical defaults when the call fails
|
|
7
|
+
* — the result shape always matches `BrandAnswers`.
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { runClaude } from "../claude/index.js";
|
|
12
|
+
import { logger } from "../logger.js";
|
|
13
|
+
const log = logger("init.brand-derive");
|
|
14
|
+
const TIMEOUT_MS = 30_000;
|
|
15
|
+
const README_CHARS = 800;
|
|
16
|
+
const RULES_CHARS = 1_000;
|
|
17
|
+
const SYSTEM_PROMPT = `You write SHORT brand-identity drafts for a software project, given:
|
|
18
|
+
- the project slug
|
|
19
|
+
- a one-sentence domain summary (what the project does)
|
|
20
|
+
- the README first 800 chars (if any)
|
|
21
|
+
- the CLAUDE.md / AGENTS.md tone signals (if any)
|
|
22
|
+
|
|
23
|
+
Return STRICT JSON matching the schema below. No markdown, no
|
|
24
|
+
preamble. Each field is a tight, scannable paragraph the operator
|
|
25
|
+
will refine — not marketing copy.
|
|
26
|
+
|
|
27
|
+
Field guidance:
|
|
28
|
+
- overview: 1 paragraph, ≤120 words. What the product is + its
|
|
29
|
+
personality + tone + what it avoids. Ground every claim in
|
|
30
|
+
the input signals; don't speculate beyond them.
|
|
31
|
+
- voice: 1 paragraph, ≤80 words. How the brand TALKS (register,
|
|
32
|
+
sentence shape, vocabulary). Match the existing CLAUDE.md /
|
|
33
|
+
AGENTS.md tone if those files set a register; otherwise default
|
|
34
|
+
to short, direct, project-aware.
|
|
35
|
+
- avoid: 1 paragraph, ≤60 words. What's off-limits — generic
|
|
36
|
+
marketing language, speculative claims about behavior the code
|
|
37
|
+
doesn't implement, anything contradicting cited DECs / §INVs.
|
|
38
|
+
- personas: 1-3 entries, each with {name (kebab-case),
|
|
39
|
+
description (≤120 chars)}. Default \`name=primary\` when only
|
|
40
|
+
one user type is evident.
|
|
41
|
+
|
|
42
|
+
Never invent product features that aren't in the input signals.
|
|
43
|
+
Never reference real companies, real customers, or real people.`;
|
|
44
|
+
const OUTPUT_SCHEMA = {
|
|
45
|
+
type: "object",
|
|
46
|
+
required: ["overview", "voice", "avoid", "personas"],
|
|
47
|
+
properties: {
|
|
48
|
+
overview: { type: "string", minLength: 1 },
|
|
49
|
+
voice: { type: "string", minLength: 1 },
|
|
50
|
+
avoid: { type: "string", minLength: 1 },
|
|
51
|
+
personas: {
|
|
52
|
+
type: "array",
|
|
53
|
+
minItems: 1,
|
|
54
|
+
maxItems: 3,
|
|
55
|
+
items: {
|
|
56
|
+
type: "object",
|
|
57
|
+
required: ["name", "description"],
|
|
58
|
+
properties: {
|
|
59
|
+
name: { type: "string", minLength: 1 },
|
|
60
|
+
description: { type: "string", minLength: 1 },
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
function readSignalFile(repoRoot, name, cap) {
|
|
67
|
+
const path = join(repoRoot, name);
|
|
68
|
+
if (!existsSync(path))
|
|
69
|
+
return null;
|
|
70
|
+
try {
|
|
71
|
+
const raw = readFileSync(path, "utf8");
|
|
72
|
+
return raw.length > cap ? raw.slice(0, cap) : raw;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function buildUserPrompt(args) {
|
|
79
|
+
const readme = readSignalFile(args.repoRoot, "README.md", README_CHARS);
|
|
80
|
+
const agents = readSignalFile(args.repoRoot, "AGENTS.md", RULES_CHARS);
|
|
81
|
+
const claudeMd = readSignalFile(args.repoRoot, "CLAUDE.md", RULES_CHARS);
|
|
82
|
+
const lines = [];
|
|
83
|
+
lines.push(`Project slug: ${args.projectSlug}`);
|
|
84
|
+
lines.push("");
|
|
85
|
+
lines.push("Domain summary (mapper output):");
|
|
86
|
+
lines.push(args.domainSummary);
|
|
87
|
+
lines.push("");
|
|
88
|
+
if (readme !== null) {
|
|
89
|
+
lines.push("README.md (first 800 chars):");
|
|
90
|
+
lines.push(readme);
|
|
91
|
+
lines.push("");
|
|
92
|
+
}
|
|
93
|
+
if (agents !== null) {
|
|
94
|
+
lines.push("AGENTS.md (first 1000 chars — tone signal):");
|
|
95
|
+
lines.push(agents);
|
|
96
|
+
lines.push("");
|
|
97
|
+
}
|
|
98
|
+
if (claudeMd !== null) {
|
|
99
|
+
lines.push("CLAUDE.md (first 1000 chars — tone signal):");
|
|
100
|
+
lines.push(claudeMd);
|
|
101
|
+
lines.push("");
|
|
102
|
+
}
|
|
103
|
+
return lines.join("\n");
|
|
104
|
+
}
|
|
105
|
+
export async function deriveBrandFromProject(args) {
|
|
106
|
+
try {
|
|
107
|
+
const result = await runClaude({
|
|
108
|
+
tier: "haiku",
|
|
109
|
+
prompt: buildUserPrompt(args),
|
|
110
|
+
system: SYSTEM_PROMPT,
|
|
111
|
+
jsonSchema: OUTPUT_SCHEMA,
|
|
112
|
+
timeoutMs: TIMEOUT_MS,
|
|
113
|
+
});
|
|
114
|
+
const parsed = result.parsed;
|
|
115
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
116
|
+
return null;
|
|
117
|
+
const v = parsed;
|
|
118
|
+
const overview = typeof v["overview"] === "string" ? v["overview"] : null;
|
|
119
|
+
const voice = typeof v["voice"] === "string" ? v["voice"] : null;
|
|
120
|
+
const avoid = typeof v["avoid"] === "string" ? v["avoid"] : null;
|
|
121
|
+
const rawPersonas = Array.isArray(v["personas"]) ? v["personas"] : null;
|
|
122
|
+
if (overview === null || voice === null || avoid === null || rawPersonas === null) {
|
|
123
|
+
log.warn({ hasOverview: overview !== null, hasVoice: voice !== null, hasAvoid: avoid !== null, hasPersonas: rawPersonas !== null }, "brand-derive: missing fields in Haiku response");
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
const personas = [];
|
|
127
|
+
for (const entry of rawPersonas) {
|
|
128
|
+
if (typeof entry !== "object" || entry === null)
|
|
129
|
+
continue;
|
|
130
|
+
const e = entry;
|
|
131
|
+
if (typeof e["name"] === "string" && typeof e["description"] === "string") {
|
|
132
|
+
personas.push({ name: e["name"], description: e["description"] });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (personas.length === 0)
|
|
136
|
+
return null;
|
|
137
|
+
return { overview, voice, avoid, personas };
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
log.warn({ err: String(err) }, "brand-derive: Haiku call failed");
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Convert derived brand to the `BrandAnswers` shape consumed by
|
|
146
|
+
* `applyBrandAnswers`. Combines voice + avoid since the brand voice
|
|
147
|
+
* file already takes both. Personas collapse to the first entry's
|
|
148
|
+
* description (multi-persona support → v0.4 schema extension).
|
|
149
|
+
*/
|
|
150
|
+
export function derivedToBrandAnswers(d) {
|
|
151
|
+
return {
|
|
152
|
+
whatItDoes: d.overview,
|
|
153
|
+
mainUsers: d.personas.map((p) => `${p.name}: ${p.description}`).join(" · "),
|
|
154
|
+
voice: d.voice,
|
|
155
|
+
avoid: d.avoid,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=brand-derive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-derive.js","sourceRoot":"","sources":["../../src/init/brand-derive.ts"],"names":[],"mappings":"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"}
|
package/dist/init/index.d.ts
CHANGED
|
@@ -32,5 +32,5 @@ export { buildRepoSummary } from "./walker.js";
|
|
|
32
32
|
export type { BuildRepoSummaryOptions, ManifestPreview, RepoSummary, } from "./walker.js";
|
|
33
33
|
export { updateWorkflowSlugBlock } from "./workflow-block.js";
|
|
34
34
|
export type { UpdateResult as WorkflowSlugUpdateResult, WorkflowSlugBlockUpdate, } from "./workflow-block.js";
|
|
35
|
-
export { PHASE_IDS, INIT_STATE_PATH, phaseStateAbsPath, readPhaseState, writePhaseState, clearPhaseState, freshPhaseState, resumePhases, nextPhaseAfter, advancePhase, runPhase1Detect, runPhase2Walker, runPhase3Mapper, runPhase3bSeed, runPhase4Pilot, runPhase5Brand, runPhase6DocsIngest, runPhase7bSourceComments, runPhase7cRulesMerge, runPhase8Baseline, runPhase10Strip, runPhase12Multidev, } from "./phases/index.js";
|
|
36
|
-
export type { PhaseId, PhaseState, PhaseOutputs, PhaseResult, PhaseQuestion, PhaseOption, PhaseError, ResumeReport, } from "./phases/index.js";
|
|
35
|
+
export { PHASE_IDS, INIT_STATE_PATH, phaseStateAbsPath, readPhaseState, writePhaseState, clearPhaseState, freshPhaseState, resumePhases, nextPhaseAfter, advancePhase, MAPPER_OUTPUT_PATH, mapperOutputAbsPath, readMapperOutputFile, writeMapperOutputFile, toMapperResultPersisted, runPhase1Detect, runPhase2Walker, runPhase3Mapper, runPhase3bSeed, runPhase4Pilot, runPhase5Brand, runPhase6DocsIngest, runPhase7bSourceComments, runPhase7cRulesMerge, runPhase8Baseline, runPhase10Strip, runPhase12Multidev, } from "./phases/index.js";
|
|
36
|
+
export type { PhaseId, PhaseState, PhaseOutputs, PhaseResult, PhaseQuestion, PhaseOption, PhaseError, ResumeReport, MapperResultPersisted, } from "./phases/index.js";
|
package/dist/init/index.js
CHANGED
|
@@ -16,5 +16,5 @@ export { seedCairnLayout, templatesRoot } from "./seed.js";
|
|
|
16
16
|
export { editYaml, freeTextWithDefault, squareIntoSquareHole, yesNo, } from "./prompts.js";
|
|
17
17
|
export { buildRepoSummary } from "./walker.js";
|
|
18
18
|
export { updateWorkflowSlugBlock } from "./workflow-block.js";
|
|
19
|
-
export { PHASE_IDS, INIT_STATE_PATH, phaseStateAbsPath, readPhaseState, writePhaseState, clearPhaseState, freshPhaseState, resumePhases, nextPhaseAfter, advancePhase, runPhase1Detect, runPhase2Walker, runPhase3Mapper, runPhase3bSeed, runPhase4Pilot, runPhase5Brand, runPhase6DocsIngest, runPhase7bSourceComments, runPhase7cRulesMerge, runPhase8Baseline, runPhase10Strip, runPhase12Multidev, } from "./phases/index.js";
|
|
19
|
+
export { PHASE_IDS, INIT_STATE_PATH, phaseStateAbsPath, readPhaseState, writePhaseState, clearPhaseState, freshPhaseState, resumePhases, nextPhaseAfter, advancePhase, MAPPER_OUTPUT_PATH, mapperOutputAbsPath, readMapperOutputFile, writeMapperOutputFile, toMapperResultPersisted, runPhase1Detect, runPhase2Walker, runPhase3Mapper, runPhase3bSeed, runPhase4Pilot, runPhase5Brand, runPhase6DocsIngest, runPhase7bSourceComments, runPhase7cRulesMerge, runPhase8Baseline, runPhase10Strip, runPhase12Multidev, } from "./phases/index.js";
|
|
20
20
|
//# sourceMappingURL=index.js.map
|
package/dist/init/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKpE,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACL,YAAY,EACZ,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,IAAI,wBAAwB,EACrC,iBAAiB,EACjB,cAAc,EACd,UAAU,IAAI,uBAAuB,EACrC,mBAAmB,EACnB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,eAAe,EACf,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AA6C9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAUrB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,GAKN,MAAM,cAAc,CAAC;AAStB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAM/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAK9D,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKpE,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACL,YAAY,EACZ,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,IAAI,wBAAwB,EACrC,iBAAiB,EACjB,cAAc,EACd,UAAU,IAAI,uBAAuB,EACrC,mBAAmB,EACnB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,eAAe,EACf,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AA6C9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAUrB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,GAKN,MAAM,cAAc,CAAC;AAStB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAM/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAK9D,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
|
package/dist/init/overlay.d.ts
CHANGED
|
@@ -8,7 +8,9 @@ import type { DetectionResult } from "./types.js";
|
|
|
8
8
|
interface BuildProjectOverlayArgs {
|
|
9
9
|
detection: DetectionResult;
|
|
10
10
|
decidedSlug: string;
|
|
11
|
-
mapperOutput?: MapperOutput
|
|
11
|
+
mapperOutput?: Omit<MapperOutput, "scope_index"> & {
|
|
12
|
+
scope_index?: MapperOutput["scope_index"];
|
|
13
|
+
};
|
|
12
14
|
}
|
|
13
15
|
export declare function buildProjectOverlay(args: BuildProjectOverlayArgs): Record<string, unknown>;
|
|
14
16
|
export {};
|
package/dist/init/overlay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../src/init/overlay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAItC,MAAM,kBAAkB,GAAG;IACzB,MAAM;IACN,QAAQ;IACR,eAAe;IACf,OAAO;IACP,QAAQ;IACR,SAAS;IACT,cAAc;IACd,SAAS;IACT,QAAQ;IACR,UAAU;IACV,SAAS;IACT,WAAW;CACZ,CAAC;
|
|
1
|
+
{"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../src/init/overlay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAItC,MAAM,kBAAkB,GAAG;IACzB,MAAM;IACN,QAAQ;IACR,eAAe;IACf,OAAO;IACP,QAAQ;IACR,SAAS;IACT,cAAc;IACd,SAAS;IACT,QAAQ;IACR,UAAU;IACV,SAAS;IACT,WAAW;CACZ,CAAC;AAcF,MAAM,UAAU,mBAAmB,CACjC,IAA6B;IAE7B,MAAM,wBAAwB,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;IAC5B,MAAM,SAAS,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAA4B;QACvC,OAAO,EAAE,CAAC;QACV,aAAa,EAAE,OAAO;QACtB,IAAI,EAAE,IAAI,CAAC,WAAW;QACtB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU;QACrC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe;QAC/C,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa;QAC3C,wBAAwB;QACxB,UAAU,EAAE,SAAS;QACrB,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,IAAI,EAAE;QAC7C,aAAa,EAAE;YACb,mBAAmB,EAAE,CAAC,EAAE,mBAAmB,IAAI,EAAE;YACjD,SAAS,EAAE,CAAC,EAAE,SAAS,IAAI,EAAE;YAC7B,sBAAsB,EAAE,CAAC,EAAE,sBAAsB,IAAI,EAAE;YACvD,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,IAAI,EAAE;SAC9C;KACF,CAAC;IACF,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC;QACzC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC;QAC7C,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;QACvC,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC;QACxD,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACnE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -2,10 +2,16 @@
|
|
|
2
2
|
* Phase 3-mapper — Sonnet-driven domain map.
|
|
3
3
|
*
|
|
4
4
|
* Reads detection (from phase 1) + repo summary (from phase 2),
|
|
5
|
-
* dispatches the chunked mapper pipeline, and stamps
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* dispatches the chunked mapper pipeline, and stamps a
|
|
6
|
+
* `MapperResultPersisted` (light projection without scope_index.files
|
|
7
|
+
* and module_proposals) under outputs["3-mapper"]. The full
|
|
8
|
+
* `MapperResult` is written to `.cairn/init/mapper-output.json` —
|
|
9
|
+
* phase 3b-seed loads it from disk to seed scope-index.yaml.
|
|
10
|
+
*
|
|
11
|
+
* The split keeps `.cairn/init-state.json` under 30KB even on a
|
|
12
|
+
* 400-file monorepo, which is what the cairn-adopt skill can carry
|
|
13
|
+
* through MCP responses without triggering the spillover-to-file
|
|
14
|
+
* tool-result path.
|
|
9
15
|
*
|
|
10
16
|
* No operator input — the mapper runs unattended (Sonnet via the
|
|
11
17
|
* cairn runner).
|
|
@@ -2,15 +2,22 @@
|
|
|
2
2
|
* Phase 3-mapper — Sonnet-driven domain map.
|
|
3
3
|
*
|
|
4
4
|
* Reads detection (from phase 1) + repo summary (from phase 2),
|
|
5
|
-
* dispatches the chunked mapper pipeline, and stamps
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* dispatches the chunked mapper pipeline, and stamps a
|
|
6
|
+
* `MapperResultPersisted` (light projection without scope_index.files
|
|
7
|
+
* and module_proposals) under outputs["3-mapper"]. The full
|
|
8
|
+
* `MapperResult` is written to `.cairn/init/mapper-output.json` —
|
|
9
|
+
* phase 3b-seed loads it from disk to seed scope-index.yaml.
|
|
10
|
+
*
|
|
11
|
+
* The split keeps `.cairn/init-state.json` under 30KB even on a
|
|
12
|
+
* 400-file monorepo, which is what the cairn-adopt skill can carry
|
|
13
|
+
* through MCP responses without triggering the spillover-to-file
|
|
14
|
+
* tool-result path.
|
|
9
15
|
*
|
|
10
16
|
* No operator input — the mapper runs unattended (Sonnet via the
|
|
11
17
|
* cairn runner).
|
|
12
18
|
*/
|
|
13
19
|
import { runMapper } from "../mapper.js";
|
|
20
|
+
import { toMapperResultPersisted, writeMapperOutputFile, } from "./mapper-output-io.js";
|
|
14
21
|
import { advancePhase } from "./orchestrator.js";
|
|
15
22
|
export async function runPhase3Mapper(state) {
|
|
16
23
|
const detection = state.outputs["1-detect"];
|
|
@@ -31,9 +38,13 @@ export async function runPhase3Mapper(state) {
|
|
|
31
38
|
summary,
|
|
32
39
|
repoRoot: state.repoRoot,
|
|
33
40
|
});
|
|
41
|
+
// Write the full result (with scope_index.files + module_proposals)
|
|
42
|
+
// to disk; downstream phases that need those reload it on demand.
|
|
43
|
+
writeMapperOutputFile(state.repoRoot, result);
|
|
44
|
+
const persisted = toMapperResultPersisted(result);
|
|
34
45
|
const next = {
|
|
35
46
|
...state,
|
|
36
|
-
outputs: { ...state.outputs, "3-mapper":
|
|
47
|
+
outputs: { ...state.outputs, "3-mapper": persisted },
|
|
37
48
|
};
|
|
38
49
|
return {
|
|
39
50
|
status: "complete",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"3-mapper.js","sourceRoot":"","sources":["../../../src/init/phases/3-mapper.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"3-mapper.js","sourceRoot":"","sources":["../../../src/init/phases/3-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAqB,MAAM,cAAc,CAAC;AAG5D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAiB;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAgC,CAAC;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAA4B,CAAC;IACrE,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACrD,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,kDAAkD;aAC5D;YACD,KAAK;SACN,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAiB,MAAM,SAAS,CAAC;YAC3C,SAAS;YACT,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;QACH,oEAAoE;QACpE,kEAAkE;QAClE,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE;SACrD,CAAC;QACF,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;SAC1B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,wBAAwB;gBACjC,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACtE;YACD,KAAK;SACN,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -22,6 +22,7 @@ import { seedAttestedCommits } from "../../hooks/seed-attested.js";
|
|
|
22
22
|
import { buildProjectOverlay } from "../overlay.js";
|
|
23
23
|
import { seedCairnLayout } from "../seed.js";
|
|
24
24
|
import { updateWorkflowSlugBlock } from "../workflow-block.js";
|
|
25
|
+
import { readMapperOutputFile, } from "./mapper-output-io.js";
|
|
25
26
|
import { advancePhase } from "./orchestrator.js";
|
|
26
27
|
export async function runPhase3bSeed(state) {
|
|
27
28
|
const detection = state.outputs["1-detect"];
|
|
@@ -38,6 +39,9 @@ export async function runPhase3bSeed(state) {
|
|
|
38
39
|
}
|
|
39
40
|
const projectSlug = detection.project_slug;
|
|
40
41
|
const mapperOutput = mapperResult?.output;
|
|
42
|
+
// scope_index lives in the side file (it's the heaviest field in the
|
|
43
|
+
// mapper payload); reload it lazily for the seed step.
|
|
44
|
+
const mapperFull = readMapperOutputFile(state.repoRoot);
|
|
41
45
|
try {
|
|
42
46
|
// Step 1 — seed templates into .cairn/.
|
|
43
47
|
const seed = seedCairnLayout({ repoRoot: state.repoRoot, projectSlug });
|
|
@@ -86,7 +90,7 @@ export async function runPhase3bSeed(state) {
|
|
|
86
90
|
const scopeFile = scopeIndexPath(state.repoRoot);
|
|
87
91
|
if (!existsSync(scopeFile)) {
|
|
88
92
|
const seedFiles = {};
|
|
89
|
-
const mapperFiles =
|
|
93
|
+
const mapperFiles = mapperFull?.output.scope_index?.files ?? {};
|
|
90
94
|
for (const [path, e] of Object.entries(mapperFiles)) {
|
|
91
95
|
const entry = {
|
|
92
96
|
decisions: e.decisions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"3b-seed.js","sourceRoot":"","sources":["../../../src/init/phases/3b-seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EACL,cAAc,EACd,eAAe,GAGhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"3b-seed.js","sourceRoot":"","sources":["../../../src/init/phases/3b-seed.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"4-pilot.js","sourceRoot":"","sources":["../../../src/init/phases/4-pilot.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AASjD,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAiB;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"4-pilot.js","sourceRoot":"","sources":["../../../src/init/phases/4-pilot.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* so CI passes during the operator-paced review.
|
|
14
14
|
*/
|
|
15
15
|
import { applyBrandAnswers } from "../brand-setup.js";
|
|
16
|
+
import { deriveBrandFromProject, derivedToBrandAnswers } from "../brand-derive.js";
|
|
16
17
|
import { advancePhase } from "./orchestrator.js";
|
|
17
18
|
const DEFAULT_VOICE = "Direct, technical, project-aware. Match the existing tone in CLAUDE.md / AGENTS.md if those files set a register; otherwise default to short sentences, full English, no marketing language.";
|
|
18
19
|
const DEFAULT_AVOID = "Marketing fluff (\"world-class\", \"revolutionary\", \"game-changing\"). Speculative claims about behavior the code does not implement. Anything that contradicts an in-scope DEC or §INV.";
|
|
@@ -29,12 +30,24 @@ export async function runPhase5Brand(state) {
|
|
|
29
30
|
if (choice === "auto-fill") {
|
|
30
31
|
const mapper = state.outputs["3-mapper"];
|
|
31
32
|
if (mapper !== undefined) {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
const detect = state.outputs["1-detect"];
|
|
34
|
+
const projectSlug = detect?.project_slug ?? "this-project";
|
|
35
|
+
// Try Haiku-derived brand from README + AGENTS.md / CLAUDE.md
|
|
36
|
+
// tone signals + mapper domain summary. Falls back to the
|
|
37
|
+
// mechanical defaults if the call fails.
|
|
38
|
+
const derived = await deriveBrandFromProject({
|
|
39
|
+
repoRoot: state.repoRoot,
|
|
40
|
+
projectSlug,
|
|
41
|
+
domainSummary: mapper.output.domain_summary,
|
|
42
|
+
});
|
|
43
|
+
const answers = derived !== null
|
|
44
|
+
? derivedToBrandAnswers(derived)
|
|
45
|
+
: {
|
|
46
|
+
whatItDoes: mapper.output.domain_summary,
|
|
47
|
+
mainUsers: deriveDefaultUsers(state),
|
|
48
|
+
voice: DEFAULT_VOICE,
|
|
49
|
+
avoid: DEFAULT_AVOID,
|
|
50
|
+
};
|
|
38
51
|
result = applyBrandAnswers(state.repoRoot, answers);
|
|
39
52
|
}
|
|
40
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"5-brand.js","sourceRoot":"","sources":["../../../src/init/phases/5-brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAqB,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQjD,MAAM,aAAa,GACjB,8LAA8L,CAAC;AAEjM,MAAM,aAAa,GACjB,4LAA4L,CAAC;AAE/L,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAA0C,CAAC;IAClF,MAAM,IAAI,GAAG,MAAM,EAAE,YAAY,IAAI,cAAc,CAAC;IACpD,OAAO,uCAAuC,IAAI,4DAA4D,CAAC;AACjH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAiB;IACpD,qDAAqD;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,GAAqD,IAAI,CAAC;QACpE,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"5-brand.js","sourceRoot":"","sources":["../../../src/init/phases/5-brand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"8-baseline.js","sourceRoot":"","sources":["../../../src/init/phases/8-baseline.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,wBAAwB,EACxB,gBAAgB,GAEjB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAiB;IACvD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAgC,CAAC;IAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"8-baseline.js","sourceRoot":"","sources":["../../../src/init/phases/8-baseline.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,wBAAwB,EACxB,gBAAgB,GAEjB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAiB;IACvD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAgC,CAAC;IAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAE1B,CAAC;IACd,MAAM,KAAK,GAAiB,MAAM;QAChC,CAAC,CAAC;YACE,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB;YACtD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;YAClC,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,sBAAsB;YAC5D,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB;YAClD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB;SAC3C;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,wBAAwB,CACxC,CAAC,SAAS,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAc,CAAC,CACjE,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,MAAM,GAAwB,MAAM,gBAAgB,CAAC;YACzD,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,YAAY,EAAE,KAAK;YACnB,SAAS;SACV,CAAC,CAAC;QACH,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE;SACpD,CAAC;QACF,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,UAAU;YACrB,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;SAC1B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,8BAA8B;gBACvC,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACtE;YACD,KAAK;SACN,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { PHASE_IDS, type PhaseId, type PhaseState, type PhaseOutputs, type PhaseResult, type PhaseQuestion, type PhaseOption, type PhaseError, type ResumeReport, } from "./types.js";
|
|
2
2
|
export { INIT_STATE_PATH, phaseStateAbsPath, readPhaseState, writePhaseState, clearPhaseState, } from "./state-io.js";
|
|
3
|
+
export { MAPPER_OUTPUT_PATH, mapperOutputAbsPath, readMapperOutputFile, writeMapperOutputFile, toMapperResultPersisted, type MapperResultPersisted, } from "./mapper-output-io.js";
|
|
3
4
|
export { freshPhaseState, resumePhases, nextPhaseAfter, advancePhase, } from "./orchestrator.js";
|
|
4
5
|
export { runPhase1Detect } from "./1-detect.js";
|
|
5
6
|
export { runPhase2Walker } from "./2-walker.js";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { PHASE_IDS, } from "./types.js";
|
|
2
2
|
export { INIT_STATE_PATH, phaseStateAbsPath, readPhaseState, writePhaseState, clearPhaseState, } from "./state-io.js";
|
|
3
|
+
export { MAPPER_OUTPUT_PATH, mapperOutputAbsPath, readMapperOutputFile, writeMapperOutputFile, toMapperResultPersisted, } from "./mapper-output-io.js";
|
|
3
4
|
export { freshPhaseState, resumePhases, nextPhaseAfter, advancePhase, } from "./orchestrator.js";
|
|
4
5
|
export { runPhase1Detect } from "./1-detect.js";
|
|
5
6
|
export { runPhase2Walker } from "./2-walker.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/init/phases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GASV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/init/phases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GASV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Side-file persistence for the heavy mapper output.
|
|
3
|
+
*
|
|
4
|
+
* Phase 3-mapper produces a `MapperResult` whose `output.scope_index.files`
|
|
5
|
+
* map and `module_proposals` array dominate the payload size — on a real
|
|
6
|
+
* monorepo the combined JSON crosses 90KB, far above what the MCP transport
|
|
7
|
+
* can echo back in a tool result without spilling. To keep
|
|
8
|
+
* `.cairn/init-state.json` skinny enough that the cairn-adopt skill can
|
|
9
|
+
* thread it through the LLM without spilling, the heavy fields live in
|
|
10
|
+
* `.cairn/init/mapper-output.json` instead. State carries only the
|
|
11
|
+
* persisted-light projection (small globs, pilot pick, key modules,
|
|
12
|
+
* domain summary, mechanical sensor list, run metadata).
|
|
13
|
+
*
|
|
14
|
+
* Phase 3b-seed reloads the full mapper output via `readMapperOutputFile`
|
|
15
|
+
* to write `.cairn/ground/scope-index.yaml`. Other downstream phases
|
|
16
|
+
* (4-pilot / 5-brand / 8-baseline) only need the light fields, so they
|
|
17
|
+
* read from `state.outputs["3-mapper"]` directly.
|
|
18
|
+
*/
|
|
19
|
+
import type { MapperResult, MapperOutput } from "../mapper.js";
|
|
20
|
+
/** Filename relative to repoRoot. */
|
|
21
|
+
export declare const MAPPER_OUTPUT_PATH: string;
|
|
22
|
+
export declare function mapperOutputAbsPath(repoRoot: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Atomically write the full mapper result. Creates `.cairn/init/` if needed.
|
|
25
|
+
*/
|
|
26
|
+
export declare function writeMapperOutputFile(repoRoot: string, full: MapperResult): string;
|
|
27
|
+
/**
|
|
28
|
+
* Read the full mapper result from `.cairn/init/mapper-output.json`.
|
|
29
|
+
* Returns null if missing or unreadable. Phase 3b-seed calls this to
|
|
30
|
+
* obtain the scope_index used to seed `.cairn/ground/scope-index.yaml`.
|
|
31
|
+
*/
|
|
32
|
+
export declare function readMapperOutputFile(repoRoot: string): MapperResult | null;
|
|
33
|
+
/**
|
|
34
|
+
* Persisted-light projection of MapperResult that lives inside
|
|
35
|
+
* `state.outputs["3-mapper"]`. The heavy fields (scope_index.files,
|
|
36
|
+
* module_proposals) are stripped — readers that need them call
|
|
37
|
+
* `readMapperOutputFile` against the repo root.
|
|
38
|
+
*/
|
|
39
|
+
export interface MapperResultPersisted {
|
|
40
|
+
output: Omit<MapperOutput, "scope_index">;
|
|
41
|
+
duration_ms: number;
|
|
42
|
+
tier: "sonnet";
|
|
43
|
+
model: string;
|
|
44
|
+
slices_detected: number;
|
|
45
|
+
truncated_at_slice_cap: boolean;
|
|
46
|
+
}
|
|
47
|
+
/** Strip the heavy fields from a fresh MapperResult for state persistence. */
|
|
48
|
+
export declare function toMapperResultPersisted(full: MapperResult): MapperResultPersisted;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Side-file persistence for the heavy mapper output.
|
|
3
|
+
*
|
|
4
|
+
* Phase 3-mapper produces a `MapperResult` whose `output.scope_index.files`
|
|
5
|
+
* map and `module_proposals` array dominate the payload size — on a real
|
|
6
|
+
* monorepo the combined JSON crosses 90KB, far above what the MCP transport
|
|
7
|
+
* can echo back in a tool result without spilling. To keep
|
|
8
|
+
* `.cairn/init-state.json` skinny enough that the cairn-adopt skill can
|
|
9
|
+
* thread it through the LLM without spilling, the heavy fields live in
|
|
10
|
+
* `.cairn/init/mapper-output.json` instead. State carries only the
|
|
11
|
+
* persisted-light projection (small globs, pilot pick, key modules,
|
|
12
|
+
* domain summary, mechanical sensor list, run metadata).
|
|
13
|
+
*
|
|
14
|
+
* Phase 3b-seed reloads the full mapper output via `readMapperOutputFile`
|
|
15
|
+
* to write `.cairn/ground/scope-index.yaml`. Other downstream phases
|
|
16
|
+
* (4-pilot / 5-brand / 8-baseline) only need the light fields, so they
|
|
17
|
+
* read from `state.outputs["3-mapper"]` directly.
|
|
18
|
+
*/
|
|
19
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync, } from "node:fs";
|
|
20
|
+
import { dirname, join } from "node:path";
|
|
21
|
+
/** Filename relative to repoRoot. */
|
|
22
|
+
export const MAPPER_OUTPUT_PATH = join(".cairn", "init", "mapper-output.json");
|
|
23
|
+
export function mapperOutputAbsPath(repoRoot) {
|
|
24
|
+
return join(repoRoot, MAPPER_OUTPUT_PATH);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Atomically write the full mapper result. Creates `.cairn/init/` if needed.
|
|
28
|
+
*/
|
|
29
|
+
export function writeMapperOutputFile(repoRoot, full) {
|
|
30
|
+
const abs = mapperOutputAbsPath(repoRoot);
|
|
31
|
+
mkdirSync(dirname(abs), { recursive: true });
|
|
32
|
+
const tmp = `${abs}.tmp`;
|
|
33
|
+
writeFileSync(tmp, JSON.stringify(full, null, 2), "utf8");
|
|
34
|
+
renameSync(tmp, abs);
|
|
35
|
+
return abs;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Read the full mapper result from `.cairn/init/mapper-output.json`.
|
|
39
|
+
* Returns null if missing or unreadable. Phase 3b-seed calls this to
|
|
40
|
+
* obtain the scope_index used to seed `.cairn/ground/scope-index.yaml`.
|
|
41
|
+
*/
|
|
42
|
+
export function readMapperOutputFile(repoRoot) {
|
|
43
|
+
const abs = mapperOutputAbsPath(repoRoot);
|
|
44
|
+
if (!existsSync(abs))
|
|
45
|
+
return null;
|
|
46
|
+
try {
|
|
47
|
+
const parsed = JSON.parse(readFileSync(abs, "utf8"));
|
|
48
|
+
return parsed;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** Strip the heavy fields from a fresh MapperResult for state persistence. */
|
|
55
|
+
export function toMapperResultPersisted(full) {
|
|
56
|
+
const { scope_index: _omitScope, ...outputLight } = full.output;
|
|
57
|
+
return {
|
|
58
|
+
output: outputLight,
|
|
59
|
+
duration_ms: full.duration_ms,
|
|
60
|
+
tier: full.tier,
|
|
61
|
+
model: full.model,
|
|
62
|
+
slices_detected: full.slices_detected,
|
|
63
|
+
truncated_at_slice_cap: full.truncated_at_slice_cap,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=mapper-output-io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper-output-io.js","sourceRoot":"","sources":["../../../src/init/phases/mapper-output-io.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,qCAAqC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAE/E,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,OAAO,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,IAAkB;IAElB,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC;IACzB,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1D,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAiB,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAiBD,8EAA8E;AAC9E,MAAM,UAAU,uBAAuB,CACrC,IAAkB;IAElB,MAAM,EACJ,WAAW,EAAE,UAAU,EACvB,GAAG,WAAW,EACf,GAAG,IAAI,CAAC,MAAM,CAAC;IAChB,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;KACpD,CAAC;AACJ,CAAC"}
|