@alex.botez/elaborate 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +114 -0
- package/dist/durable/index.d.ts +10 -0
- package/dist/durable/index.d.ts.map +1 -0
- package/dist/durable/index.js +9 -0
- package/dist/durable/index.js.map +1 -0
- package/dist/durable/workflow.d.ts +165 -0
- package/dist/durable/workflow.d.ts.map +1 -0
- package/dist/durable/workflow.js +224 -0
- package/dist/durable/workflow.js.map +1 -0
- package/dist/interview/classification.d.ts +16 -0
- package/dist/interview/classification.d.ts.map +1 -0
- package/dist/interview/classification.js +25 -0
- package/dist/interview/classification.js.map +1 -0
- package/dist/interview/composition.d.ts +12 -0
- package/dist/interview/composition.d.ts.map +1 -0
- package/dist/interview/composition.js +19 -0
- package/dist/interview/composition.js.map +1 -0
- package/dist/interview/describe.d.ts +41 -0
- package/dist/interview/describe.d.ts.map +1 -0
- package/dist/interview/describe.js +80 -0
- package/dist/interview/describe.js.map +1 -0
- package/dist/interview/deviation.d.ts +91 -0
- package/dist/interview/deviation.d.ts.map +1 -0
- package/dist/interview/deviation.js +137 -0
- package/dist/interview/deviation.js.map +1 -0
- package/dist/interview/extraction.d.ts +32 -0
- package/dist/interview/extraction.d.ts.map +1 -0
- package/dist/interview/extraction.js +102 -0
- package/dist/interview/extraction.js.map +1 -0
- package/dist/interview/index.d.ts +25 -0
- package/dist/interview/index.d.ts.map +1 -0
- package/dist/interview/index.js +22 -0
- package/dist/interview/index.js.map +1 -0
- package/dist/interview/macros.d.ts +91 -0
- package/dist/interview/macros.d.ts.map +1 -0
- package/dist/interview/macros.js +138 -0
- package/dist/interview/macros.js.map +1 -0
- package/dist/interview/preambles.d.ts +18 -0
- package/dist/interview/preambles.d.ts.map +1 -0
- package/dist/interview/preambles.js +93 -0
- package/dist/interview/preambles.js.map +1 -0
- package/dist/interview/progress.d.ts +31 -0
- package/dist/interview/progress.d.ts.map +1 -0
- package/dist/interview/progress.js +51 -0
- package/dist/interview/progress.js.map +1 -0
- package/dist/interview/prompt.d.ts +20 -0
- package/dist/interview/prompt.d.ts.map +1 -0
- package/dist/interview/prompt.js +58 -0
- package/dist/interview/prompt.js.map +1 -0
- package/dist/phases/aggregate/assumptions.d.ts +14 -0
- package/dist/phases/aggregate/assumptions.d.ts.map +1 -0
- package/dist/phases/aggregate/assumptions.js +33 -0
- package/dist/phases/aggregate/assumptions.js.map +1 -0
- package/dist/phases/aggregate/findings.d.ts +10 -0
- package/dist/phases/aggregate/findings.d.ts.map +1 -0
- package/dist/phases/aggregate/findings.js +20 -0
- package/dist/phases/aggregate/findings.js.map +1 -0
- package/dist/phases/aggregate/goals.d.ts +28 -0
- package/dist/phases/aggregate/goals.d.ts.map +1 -0
- package/dist/phases/aggregate/goals.js +74 -0
- package/dist/phases/aggregate/goals.js.map +1 -0
- package/dist/phases/aggregate/index.d.ts +128 -0
- package/dist/phases/aggregate/index.d.ts.map +1 -0
- package/dist/phases/aggregate/index.js +165 -0
- package/dist/phases/aggregate/index.js.map +1 -0
- package/dist/phases/aggregate/pam.d.ts +19 -0
- package/dist/phases/aggregate/pam.d.ts.map +1 -0
- package/dist/phases/aggregate/pam.js +37 -0
- package/dist/phases/aggregate/pam.js.map +1 -0
- package/dist/phases/aggregate/scope.d.ts +24 -0
- package/dist/phases/aggregate/scope.d.ts.map +1 -0
- package/dist/phases/aggregate/scope.js +67 -0
- package/dist/phases/aggregate/scope.js.map +1 -0
- package/dist/phases/aggregate/shared.d.ts +16 -0
- package/dist/phases/aggregate/shared.d.ts.map +1 -0
- package/dist/phases/aggregate/shared.js +26 -0
- package/dist/phases/aggregate/shared.js.map +1 -0
- package/dist/phases/aggregate/stakeholders.d.ts +27 -0
- package/dist/phases/aggregate/stakeholders.d.ts.map +1 -0
- package/dist/phases/aggregate/stakeholders.js +90 -0
- package/dist/phases/aggregate/stakeholders.js.map +1 -0
- package/dist/phases/aggregate/waitingRoom.d.ts +16 -0
- package/dist/phases/aggregate/waitingRoom.d.ts.map +1 -0
- package/dist/phases/aggregate/waitingRoom.js +32 -0
- package/dist/phases/aggregate/waitingRoom.js.map +1 -0
- package/dist/phases/assumptions.d.ts +19 -0
- package/dist/phases/assumptions.d.ts.map +1 -0
- package/dist/phases/assumptions.js +224 -0
- package/dist/phases/assumptions.js.map +1 -0
- package/dist/phases/configuration.d.ts +8 -0
- package/dist/phases/configuration.d.ts.map +1 -0
- package/dist/phases/configuration.js +14 -0
- package/dist/phases/configuration.js.map +1 -0
- package/dist/phases/goals.d.ts +15 -0
- package/dist/phases/goals.d.ts.map +1 -0
- package/dist/phases/goals.js +297 -0
- package/dist/phases/goals.js.map +1 -0
- package/dist/phases/index.d.ts +21 -0
- package/dist/phases/index.d.ts.map +1 -0
- package/dist/phases/index.js +56 -0
- package/dist/phases/index.js.map +1 -0
- package/dist/phases/opening.d.ts +12 -0
- package/dist/phases/opening.d.ts.map +1 -0
- package/dist/phases/opening.js +99 -0
- package/dist/phases/opening.js.map +1 -0
- package/dist/phases/purpose.d.ts +17 -0
- package/dist/phases/purpose.d.ts.map +1 -0
- package/dist/phases/purpose.js +207 -0
- package/dist/phases/purpose.js.map +1 -0
- package/dist/phases/schema.d.ts +861 -0
- package/dist/phases/schema.d.ts.map +1 -0
- package/dist/phases/schema.js +157 -0
- package/dist/phases/schema.js.map +1 -0
- package/dist/phases/scope.d.ts +18 -0
- package/dist/phases/scope.d.ts.map +1 -0
- package/dist/phases/scope.js +440 -0
- package/dist/phases/scope.js.map +1 -0
- package/dist/phases/session/archive.d.ts +19 -0
- package/dist/phases/session/archive.d.ts.map +1 -0
- package/dist/phases/session/archive.js +49 -0
- package/dist/phases/session/archive.js.map +1 -0
- package/dist/phases/session/file.d.ts +31 -0
- package/dist/phases/session/file.d.ts.map +1 -0
- package/dist/phases/session/file.js +113 -0
- package/dist/phases/session/file.js.map +1 -0
- package/dist/phases/session/index.d.ts +8 -0
- package/dist/phases/session/index.d.ts.map +1 -0
- package/dist/phases/session/index.js +8 -0
- package/dist/phases/session/index.js.map +1 -0
- package/dist/phases/session/persistence.d.ts +30 -0
- package/dist/phases/session/persistence.d.ts.map +1 -0
- package/dist/phases/session/persistence.js +91 -0
- package/dist/phases/session/persistence.js.map +1 -0
- package/dist/phases/shared.d.ts +64 -0
- package/dist/phases/shared.d.ts.map +1 -0
- package/dist/phases/shared.js +100 -0
- package/dist/phases/shared.js.map +1 -0
- package/dist/phases/stakeholders.d.ts +17 -0
- package/dist/phases/stakeholders.d.ts.map +1 -0
- package/dist/phases/stakeholders.js +370 -0
- package/dist/phases/stakeholders.js.map +1 -0
- package/dist/phases/validation.d.ts +13 -0
- package/dist/phases/validation.d.ts.map +1 -0
- package/dist/phases/validation.js +130 -0
- package/dist/phases/validation.js.map +1 -0
- package/dist/skill/adapter.d.ts +16 -0
- package/dist/skill/adapter.d.ts.map +1 -0
- package/dist/skill/adapter.js +278 -0
- package/dist/skill/adapter.js.map +1 -0
- package/dist/skill/index.d.ts +12 -0
- package/dist/skill/index.d.ts.map +1 -0
- package/dist/skill/index.js +11 -0
- package/dist/skill/index.js.map +1 -0
- package/dist/skill/log.d.ts +18 -0
- package/dist/skill/log.d.ts.map +1 -0
- package/dist/skill/log.js +53 -0
- package/dist/skill/log.js.map +1 -0
- package/package.json +83 -0
- package/skills/elaborate/SKILL.md +97 -0
- package/skills/elaborate/scripts/elaborate.cjs +589 -0
- package/skills/project-brief/SKILL.md +45 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Purpose clarification phase — PAM via laddering + slot-filling.
|
|
3
|
+
*
|
|
4
|
+
* Captures Purpose, Advantage, and Measurement through:
|
|
5
|
+
* 1. Initial extraction from opening response
|
|
6
|
+
* 2. Laddering (WHY-chain) if response is solution-framed
|
|
7
|
+
* 3. Slot-filling for remaining gaps
|
|
8
|
+
* 4. Confirmation with revision loop
|
|
9
|
+
*
|
|
10
|
+
* PAM is the capture schema (GQM-inspired). Laddering is the interview
|
|
11
|
+
* technique — start concrete, abstract upward via "why?" until purpose surfaces.
|
|
12
|
+
* Confidence is derived from artifact state, not tracked separately.
|
|
13
|
+
*/
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
import { buildFullContext, confirmationCloser, confirmPhase } from "./shared.js";
|
|
16
|
+
import { inferCompositionStep, isDeviationError } from "../interview/index.js";
|
|
17
|
+
const SLOT_ORDER = ["purpose", "advantage", "measurement"];
|
|
18
|
+
const MAX_ATTEMPTS = { purpose: 3, advantage: 2, measurement: 2 };
|
|
19
|
+
const MAX_LADDER_DEPTH = 3;
|
|
20
|
+
const SLOT_DIRECTIONS = {
|
|
21
|
+
purpose: {
|
|
22
|
+
fresh: "Ask what problem this project solves or what need it addresses.",
|
|
23
|
+
rephrase: "The previous question about purpose didn't get a clear answer. Try a different angle — use a concrete example or offer choices.",
|
|
24
|
+
},
|
|
25
|
+
advantage: {
|
|
26
|
+
fresh: "Ask what makes this approach better than alternatives or the status quo.",
|
|
27
|
+
rephrase: "The previous question about advantage didn't get a clear answer. Try offering concrete alternatives to react to.",
|
|
28
|
+
},
|
|
29
|
+
measurement: {
|
|
30
|
+
fresh: "Ask how the user would know if this project succeeded — what they would measure.",
|
|
31
|
+
rephrase: "The previous question about measurement didn't get a clear answer. Offer concrete examples of metrics from similar projects.",
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const SLOT_FALLBACKS = {
|
|
35
|
+
purpose: "What **problem** does this project solve?",
|
|
36
|
+
advantage: "What makes this approach better than how people handle it today?",
|
|
37
|
+
measurement: "How would you know if this project succeeded?",
|
|
38
|
+
};
|
|
39
|
+
const LADDER_DIRECTIONS = [
|
|
40
|
+
"The stakeholder described a solution or feature. Ask WHY they need this — what underlying problem it solves.",
|
|
41
|
+
"The stakeholder hasn't yet articulated the core problem. Ask WHY this matters — what underlying need drives it.",
|
|
42
|
+
"Try a different angle. Ask what would be different for users if this problem were solved.",
|
|
43
|
+
];
|
|
44
|
+
const PamExtractionSchema = z.object({
|
|
45
|
+
purpose: z.string().nullable().optional().describe("the core purpose/problem being solved, null if not addressed"),
|
|
46
|
+
advantage: z.string().nullable().optional().describe("why this approach is better than alternatives, null if not addressed"),
|
|
47
|
+
measurement: z.string().nullable().optional().describe("how success will be measured, null if not addressed"),
|
|
48
|
+
responseInterpretation: z.string().describe("what the stakeholder meant, resolving any suggestion references (a, b, c) to their full text"),
|
|
49
|
+
contradictions: z.array(z.string()).optional().describe("genuine logical contradictions with existing artifacts where both statements CANNOT be true simultaneously (e.g. 'app is free' vs 'revenue from subscriptions'). NOT: different priorities, complementary concerns, soft tensions, or different aspects of the same goal. Empty array if none"),
|
|
50
|
+
});
|
|
51
|
+
const FramingSchema = z.object({
|
|
52
|
+
framing: z.enum(["solution", "problem", "mixed"]).describe("whether the response describes a solution/feature (solution), a problem/need (problem), or both (mixed)"),
|
|
53
|
+
solutionDescription: z.string().nullable().describe("the solution or feature described, null if problem-framed"),
|
|
54
|
+
});
|
|
55
|
+
function ladderComposition(depth, solutionDescription, originalResponse, artifacts) {
|
|
56
|
+
return inferCompositionStep({
|
|
57
|
+
id: "",
|
|
58
|
+
fallback: "What **underlying problem** does that solve?",
|
|
59
|
+
message: `
|
|
60
|
+
Compose a WHY question to abstract upward from a solution description toward the underlying purpose.
|
|
61
|
+
${LADDER_DIRECTIONS[Math.min(depth, LADDER_DIRECTIONS.length - 1)]}
|
|
62
|
+
The solution described: "${solutionDescription}"
|
|
63
|
+
The stakeholder's original words: "${originalResponse}"
|
|
64
|
+
Include 2-3 suggested answers that show the expected level of specificity.
|
|
65
|
+
|
|
66
|
+
Context:
|
|
67
|
+
${buildFullContext(artifacts)}
|
|
68
|
+
`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const PurposeSeedSchema = z.object({
|
|
72
|
+
purpose: z.string().nullable().optional().describe("purpose hint extracted from waiting room items, null if none"),
|
|
73
|
+
advantage: z.string().nullable().optional().describe("advantage hint extracted from waiting room items, null if none"),
|
|
74
|
+
measurement: z.string().nullable().optional().describe("measurement hint extracted from waiting room items, null if none"),
|
|
75
|
+
drainedWaitingRoomIds: z.array(z.string()).optional()
|
|
76
|
+
.describe('IDs of waiting room items consumed as purpose/advantage/measurement hints (e.g. ["waiting_001"]), empty if none'),
|
|
77
|
+
});
|
|
78
|
+
const LadderExtractionSchema = PamExtractionSchema.extend({
|
|
79
|
+
waitingRoomItems: z.array(z.object({ content: z.string().describe("the item text") })).optional().describe("goals, stakeholder hints, or assumptions surfaced as byproducts — to be parked for later phases"),
|
|
80
|
+
});
|
|
81
|
+
function slotComposition(slot, attempt, artifacts) {
|
|
82
|
+
const direction = attempt > 0 ? SLOT_DIRECTIONS[slot].rephrase : SLOT_DIRECTIONS[slot].fresh;
|
|
83
|
+
return inferCompositionStep({
|
|
84
|
+
id: "",
|
|
85
|
+
fallback: SLOT_FALLBACKS[slot],
|
|
86
|
+
message: `
|
|
87
|
+
Compose a question for the stakeholder about: ${slot}.
|
|
88
|
+
${direction}
|
|
89
|
+
Include 2-3 suggested answers that show the expected level of specificity.
|
|
90
|
+
|
|
91
|
+
Context:
|
|
92
|
+
${buildFullContext(artifacts)}
|
|
93
|
+
`,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
function confirmation(artifacts) {
|
|
97
|
+
const purposeFindings = artifacts.findings.filter((f) => f.phase === "purpose");
|
|
98
|
+
const gaps = purposeFindings.length > 0
|
|
99
|
+
? `\n\n**Gaps noted**:\n${purposeFindings.map((f) => `- ${f.content}`).join("\n")}`
|
|
100
|
+
: "";
|
|
101
|
+
return {
|
|
102
|
+
id: "purpose-confirmation",
|
|
103
|
+
message: `
|
|
104
|
+
Here's what I've captured so far:
|
|
105
|
+
|
|
106
|
+
**Purpose**: ${artifacts.purpose ? artifacts.purpose.statement : "_(not yet defined)_"}
|
|
107
|
+
**Advantage**: ${artifacts.advantage ? artifacts.advantage.statement : "_(not yet defined)_"}
|
|
108
|
+
**Measurement**: ${artifacts.measurement ? artifacts.measurement.statement : "_(not yet defined)_"}${gaps}
|
|
109
|
+
|
|
110
|
+
${confirmationCloser()}
|
|
111
|
+
`,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export async function runPurpose(ctx, agg, opening) {
|
|
115
|
+
const artifacts = agg.data;
|
|
116
|
+
// Step 0: Drain waiting room for purpose-related items (e.g. brownfield context)
|
|
117
|
+
if (artifacts.waitingRoom.length > 0) {
|
|
118
|
+
const preWaitingRoomIds = new Set(artifacts.waitingRoom.map((w) => w.id));
|
|
119
|
+
const seeds = await ctx.seed({
|
|
120
|
+
id: "purpose-seed-extraction",
|
|
121
|
+
artifactsContext: buildFullContext(artifacts, { includeWaitingRoom: true }),
|
|
122
|
+
schema: PurposeSeedSchema,
|
|
123
|
+
guidance: "Extract purpose, advantage, or measurement hints from the waitingRoom items in the context. These are PAM (Purpose-Advantage-Measurement) slots. Return drainedWaitingRoomIds for the items you consumed.",
|
|
124
|
+
});
|
|
125
|
+
agg.applyPamExtraction(seeds, ctx.currentSource);
|
|
126
|
+
const drainedIds = new Set((seeds.drainedWaitingRoomIds ?? []).filter((id) => preWaitingRoomIds.has(id)));
|
|
127
|
+
agg.drainWaitingRoom(drainedIds);
|
|
128
|
+
}
|
|
129
|
+
// Step 1: Extract PAM slots from the opening response (if provided).
|
|
130
|
+
// The opening may be a non-answer (e.g. the stakeholder asked a question back
|
|
131
|
+
// during confirmation) — tolerate deviations and fall through to slot-filling.
|
|
132
|
+
let openingUsable = false;
|
|
133
|
+
if (opening) {
|
|
134
|
+
try {
|
|
135
|
+
const ext = await ctx.extract({
|
|
136
|
+
id: "purpose-initial-extraction",
|
|
137
|
+
response: opening, artifactsContext: buildFullContext(artifacts), schema: PamExtractionSchema,
|
|
138
|
+
});
|
|
139
|
+
agg.applyPamExtraction(ext, ctx.currentSource);
|
|
140
|
+
openingUsable = true;
|
|
141
|
+
if (ext.contradictions?.length) {
|
|
142
|
+
const reExt = await ctx.promptReextract("purpose-initial-contradiction", ext.contradictions, buildFullContext(artifacts), PamExtractionSchema, { defaults: { purpose: null, advantage: null, measurement: null, responseInterpretation: "", contradictions: [] } });
|
|
143
|
+
agg.applyPamExtraction(reExt, ctx.currentSource);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
if (!isDeviationError(e))
|
|
148
|
+
throw e;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Step 2: Laddering — if opening was solution-framed and purpose still missing,
|
|
152
|
+
// ask WHY repeatedly to abstract upward toward the underlying need
|
|
153
|
+
if (openingUsable && opening && !artifacts.purpose) {
|
|
154
|
+
const { framing, solutionDescription } = await ctx.extract({
|
|
155
|
+
id: "purpose-classify-framing",
|
|
156
|
+
response: opening, artifactsContext: buildFullContext(artifacts), schema: FramingSchema,
|
|
157
|
+
});
|
|
158
|
+
if (framing !== "problem" && solutionDescription) {
|
|
159
|
+
for (let depth = 0; depth < MAX_LADDER_DEPTH && !artifacts.purpose; depth++) {
|
|
160
|
+
const ext = await ctx.composePromptExtract(`purpose-ladder-${depth}`, () => ladderComposition(depth, solutionDescription, opening, artifacts), { artifactsContext: buildFullContext(artifacts), schema: LadderExtractionSchema }, { park: (items) => agg.addWaitingRoomItems(items), defaults: { purpose: null, advantage: null, measurement: null, responseInterpretation: "", contradictions: [], waitingRoomItems: [] } });
|
|
161
|
+
agg.applyPamExtraction(ext, ctx.currentSource);
|
|
162
|
+
if (ext.waitingRoomItems?.length) {
|
|
163
|
+
agg.addWaitingRoomItems(ext.waitingRoomItems);
|
|
164
|
+
}
|
|
165
|
+
if (ext.contradictions?.length) {
|
|
166
|
+
const reExt = await ctx.promptReextract(`purpose-ladder-contradiction-${depth}`, ext.contradictions, buildFullContext(artifacts), LadderExtractionSchema, { defaults: { purpose: null, advantage: null, measurement: null, responseInterpretation: "", contradictions: [], waitingRoomItems: [] } });
|
|
167
|
+
agg.applyPamExtraction(reExt, ctx.currentSource);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Step 3: Slot-filling — directly ask for any PAM slots still missing
|
|
173
|
+
for (const slot of SLOT_ORDER) {
|
|
174
|
+
if (artifacts[slot])
|
|
175
|
+
continue;
|
|
176
|
+
let filled = false;
|
|
177
|
+
const max = MAX_ATTEMPTS[slot];
|
|
178
|
+
for (let attempt = 0; attempt < max && !filled; attempt++) {
|
|
179
|
+
const ext = await ctx.composePromptExtract(`purpose-${slot}-${attempt}`, () => slotComposition(slot, attempt, artifacts), { artifactsContext: buildFullContext(artifacts), schema: PamExtractionSchema }, { defaults: { purpose: null, advantage: null, measurement: null, responseInterpretation: "", contradictions: [] } });
|
|
180
|
+
if (ext.contradictions?.length) {
|
|
181
|
+
agg.applyPamExtraction(ext, ctx.currentSource);
|
|
182
|
+
const reExt = await ctx.promptReextract(`purpose-contradiction-${slot}-${attempt}`, ext.contradictions, buildFullContext(artifacts), PamExtractionSchema, { defaults: { purpose: null, advantage: null, measurement: null, responseInterpretation: "", contradictions: [] } });
|
|
183
|
+
agg.applyPamExtraction(reExt, ctx.currentSource);
|
|
184
|
+
filled = !!artifacts[slot];
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
agg.applyPamExtraction(ext, ctx.currentSource);
|
|
188
|
+
filled = !!artifacts[slot];
|
|
189
|
+
}
|
|
190
|
+
if (!artifacts[slot]) {
|
|
191
|
+
agg.addFinding(`Stakeholder could not articulate ${slot} after ${max} attempts`, "purpose");
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Step 4: Single-pass confirmation
|
|
195
|
+
const { response, approved } = await confirmPhase(ctx, confirmation(artifacts), artifacts, "purpose", 0);
|
|
196
|
+
if (!approved) {
|
|
197
|
+
const ext = await ctx.extract({
|
|
198
|
+
id: "purpose-revision",
|
|
199
|
+
response,
|
|
200
|
+
artifactsContext: buildFullContext(artifacts),
|
|
201
|
+
schema: PamExtractionSchema,
|
|
202
|
+
});
|
|
203
|
+
agg.applyPamExtraction(ext, ctx.currentSource);
|
|
204
|
+
}
|
|
205
|
+
agg.confirmPam(0.9);
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=purpose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purpose.js","sourceRoot":"","sources":["../../src/phases/purpose.ts"],"names":[],"mappings":"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"}
|