@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,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stakeholder identification phase — list-upfront, elaborate, confirm.
|
|
3
|
+
*
|
|
4
|
+
* Captures stakeholders through:
|
|
5
|
+
* 1. Waiting room drain + list review — present seeds, collect corrections/additions
|
|
6
|
+
* 2. Respondent identification — who is answering on behalf of whom
|
|
7
|
+
* 3. Per-stakeholder elaboration (role + concerns + conditional follow-up)
|
|
8
|
+
* 4. Confirmation with revision loop
|
|
9
|
+
*
|
|
10
|
+
* Uses iStar/Pohl actor model. Progressive status:
|
|
11
|
+
* identified(0.5) → elaborated(0.7) → confirmed(0.9).
|
|
12
|
+
* List-upfront (not iterative "more?") — contrast with goals phase.
|
|
13
|
+
*/
|
|
14
|
+
import type { WorkflowContext } from "../durable/index.js";
|
|
15
|
+
import type { ArtifactAggregate } from "./aggregate/index.js";
|
|
16
|
+
export declare function runStakeholders(ctx: WorkflowContext, agg: ArtifactAggregate): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=stakeholders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stakeholders.d.ts","sourceRoot":"","sources":["../../src/phases/stakeholders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAqN9D,wBAAsB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4MjG"}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stakeholder identification phase — list-upfront, elaborate, confirm.
|
|
3
|
+
*
|
|
4
|
+
* Captures stakeholders through:
|
|
5
|
+
* 1. Waiting room drain + list review — present seeds, collect corrections/additions
|
|
6
|
+
* 2. Respondent identification — who is answering on behalf of whom
|
|
7
|
+
* 3. Per-stakeholder elaboration (role + concerns + conditional follow-up)
|
|
8
|
+
* 4. Confirmation with revision loop
|
|
9
|
+
*
|
|
10
|
+
* Uses iStar/Pohl actor model. Progressive status:
|
|
11
|
+
* identified(0.5) → elaborated(0.7) → confirmed(0.9).
|
|
12
|
+
* List-upfront (not iterative "more?") — contrast with goals phase.
|
|
13
|
+
*/
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
import { StakeholderType } from "./schema.js";
|
|
16
|
+
import { buildFullContext, confirmationCloser, confirmPhase } from "./shared.js";
|
|
17
|
+
import { compositionPreamble, inferCompositionStep, inferStep } from "../interview/index.js";
|
|
18
|
+
import { PRIMARY_SH_CAP, SECONDARY_SH_CAP, EXTERNAL_SH_CAP } from "./configuration.js";
|
|
19
|
+
const MAX_ELABORATION_ATTEMPTS = 3;
|
|
20
|
+
const StakeholderSeedSchema = z.object({
|
|
21
|
+
stakeholders: z.array(z.object({
|
|
22
|
+
name: z.string().describe("stakeholder name or role"),
|
|
23
|
+
type: StakeholderType.optional().describe("'primary', 'secondary', or 'external'"),
|
|
24
|
+
})).optional().describe("stakeholder candidates from the waiting room, empty if none"),
|
|
25
|
+
drainedWaitingRoomIds: z.array(z.string()).optional()
|
|
26
|
+
.describe('IDs of waiting room items used as stakeholder sources (e.g. ["waiting_001"]), empty if none'),
|
|
27
|
+
});
|
|
28
|
+
const ReviewExtractionSchema = z.object({
|
|
29
|
+
responseInterpretation: z.string().describe("what the respondent meant, resolving any references"),
|
|
30
|
+
updatedTypes: z.array(z.object({ id: z.string().describe("stakeholder ID"), type: StakeholderType.describe("corrected type") })).optional().describe("type corrections (primary/secondary/external), empty if none"),
|
|
31
|
+
removedIds: z.array(z.string()).optional().describe("stakeholder IDs to remove, empty if none"),
|
|
32
|
+
newStakeholders: z.array(z.object({ name: z.string().describe("stakeholder name or role"), type: StakeholderType.describe("'primary', 'secondary', or 'external'") })).optional().describe("new stakeholders mentioned, empty if none"),
|
|
33
|
+
});
|
|
34
|
+
const RespondentExtractionSchema = z.object({
|
|
35
|
+
responseInterpretation: z.string().describe("what the respondent meant"),
|
|
36
|
+
respondentId: z.string().nullable().optional().describe("ID of the stakeholder that IS the respondent, null if unclear"),
|
|
37
|
+
});
|
|
38
|
+
const ElaborationExtractionSchema = z.object({
|
|
39
|
+
responseInterpretation: z.string().describe("what the respondent meant, resolving any suggestion references (a, b, c) to their full text"),
|
|
40
|
+
role: z.string().nullable().optional().describe("this specific stakeholder's role as described by the respondent — not the respondent's own role or any other stakeholder's role from context. null if not addressed"),
|
|
41
|
+
concerns: z.array(z.string()).optional().describe("stakeholder concerns extracted from the response, empty if none"),
|
|
42
|
+
contradictions: z.array(z.string()).optional().describe("genuine logical contradictions between stated concerns and existing goals or purpose where both statements CANNOT be true simultaneously (e.g. 'stakeholder opposes feature X' vs 'goal requires feature X'). NOT: different priorities between stakeholders, complementary concerns, soft tensions, or different aspects of the same goal. Empty array if none"),
|
|
43
|
+
waitingRoomItems: z.array(z.object({ content: z.string().describe("the item text") })).optional().describe("items that sound like scope or assumptions rather than stakeholder concerns, empty if none"),
|
|
44
|
+
});
|
|
45
|
+
const FollowUpAssessmentSchema = z.object({
|
|
46
|
+
needed: z.boolean().describe("true if the elaboration answer has meaningful gaps worth probing — missing role, thin concerns (0-1), or unexplored domain-specific angles. false if role and 2+ specific concerns were captured"),
|
|
47
|
+
question: z.string().optional().describe("a targeted follow-up question addressing the identified gap, only when needed is true"),
|
|
48
|
+
suggestions: z.array(z.string()).optional().describe("2-3 suggested answers for the follow-up question, only when needed is true"),
|
|
49
|
+
});
|
|
50
|
+
const StakeholderDedupSchema = z.object({
|
|
51
|
+
duplicateGroups: z.array(z.object({
|
|
52
|
+
keepId: z.string().describe("the stakeholder ID to keep"),
|
|
53
|
+
removeIds: z.array(z.string()).describe("stakeholder IDs that are semantically duplicate of keepId — same actor/role, different wording"),
|
|
54
|
+
})).describe("groups of semantically duplicate stakeholders — only flag entries you are CERTAIN represent the same actor/role with different wording"),
|
|
55
|
+
});
|
|
56
|
+
const StakeholderSortSchema = z.object({
|
|
57
|
+
rankedStakeholderIds: z.array(z.string()).describe("stakeholder IDs ordered from highest to lowest priority for probing"),
|
|
58
|
+
});
|
|
59
|
+
function stakeholderSort(type, stakeholders, artifacts, userAddedIds) {
|
|
60
|
+
const shRef = stakeholders.map((s) => `[${s.id}] "${s.name}" (${s.type})`).join("; ");
|
|
61
|
+
const goalRef = artifacts.goals.map((g) => `[${g.id}] "${g.title}" — ${g.description}`).join("; ");
|
|
62
|
+
const pamRef = [
|
|
63
|
+
artifacts.purpose ? `Purpose: ${artifacts.purpose.statement}` : null,
|
|
64
|
+
artifacts.advantage ? `Advantage: ${artifacts.advantage.statement}` : null,
|
|
65
|
+
artifacts.measurement ? `Measurement: ${artifacts.measurement.statement}` : null,
|
|
66
|
+
].filter(Boolean).join("; ");
|
|
67
|
+
const userAddedRef = userAddedIds.length > 0
|
|
68
|
+
? `User-added during review (not agent-inferred): ${userAddedIds.join(", ")}`
|
|
69
|
+
: "All stakeholders are agent-inferred.";
|
|
70
|
+
return inferStep({
|
|
71
|
+
id: `stakeholder-sort-${type}`,
|
|
72
|
+
schema: StakeholderSortSchema,
|
|
73
|
+
message: `
|
|
74
|
+
Rank these stakeholders by priority for detailed probing.
|
|
75
|
+
|
|
76
|
+
Stakeholders: ${shRef}
|
|
77
|
+
Goals: ${goalRef}
|
|
78
|
+
PAM: ${pamRef}
|
|
79
|
+
${userAddedRef}
|
|
80
|
+
|
|
81
|
+
Criteria (in order):
|
|
82
|
+
1. Stakeholder importance: how central is this stakeholder to the product's value delivery? End-users and primary beneficiaries of the product rank highest — their unmet needs represent the highest-risk gaps.
|
|
83
|
+
2. Information gap: how much do we actually know about their specific concerns vs. inferring from goals? Rank higher when concerns are unknown or merely assumed, even if they seem to echo stated goals.
|
|
84
|
+
3. User-added: stakeholders the user named during review rank above agent-inferred ones.
|
|
85
|
+
|
|
86
|
+
Return ALL stakeholder IDs, ordered from highest to lowest priority.
|
|
87
|
+
`,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function stakeholderDedup(artifacts) {
|
|
91
|
+
const shRef = artifacts.stakeholders.map((s) => `[${s.id}] "${s.name}" (${s.type})`).join("; ");
|
|
92
|
+
return inferStep({
|
|
93
|
+
id: "stakeholder-dedup",
|
|
94
|
+
schema: StakeholderDedupSchema,
|
|
95
|
+
message: `
|
|
96
|
+
Identify semantically duplicate stakeholders — entries that represent the same actor or role with different wording.
|
|
97
|
+
|
|
98
|
+
Stakeholders: ${shRef}
|
|
99
|
+
|
|
100
|
+
Rules:
|
|
101
|
+
1. Only group entries you are CERTAIN represent the same actor/role (e.g. "Healthcare Providers" and "Healthcare Provider Representatives" describing the same group). Related but distinct actors are NOT duplicates.
|
|
102
|
+
2. Actors with overlapping concerns but different roles are NOT duplicates (e.g. "Nurses" and "Doctors" both care about patient outcomes but are distinct stakeholders).
|
|
103
|
+
3. For each group, pick the clearest/most specific name as keepId.
|
|
104
|
+
4. Return an empty array if there are no duplicates.
|
|
105
|
+
`,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function reviewPresent(stakeholders) {
|
|
109
|
+
if (stakeholders.length === 0) {
|
|
110
|
+
return {
|
|
111
|
+
id: "stakeholder-review-present",
|
|
112
|
+
message: `
|
|
113
|
+
I haven't identified any specific stakeholders yet from our conversation.
|
|
114
|
+
|
|
115
|
+
Who will be the main people involved in or affected by this project?
|
|
116
|
+
Think about: direct users, administrators, managers, external parties, regulators, etc.
|
|
117
|
+
`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const letters = "abcdefghijklmnopqrstuvwxyz";
|
|
121
|
+
const shList = stakeholders.map((s, i) => `${letters[i]}) **${s.name}** (${s.type})`).join("\n");
|
|
122
|
+
return {
|
|
123
|
+
id: "stakeholder-review-present",
|
|
124
|
+
message: `
|
|
125
|
+
Based on what you've told me, I see these people involved in your project:
|
|
126
|
+
${shList}
|
|
127
|
+
|
|
128
|
+
What would you change, add, or remove?
|
|
129
|
+
`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function respondentPresent(stakeholders) {
|
|
133
|
+
const names = stakeholders.map((s) => s.name).join(", or ");
|
|
134
|
+
return {
|
|
135
|
+
id: "stakeholder-respondent-present",
|
|
136
|
+
message: `Which of these roles best describes you — ${names}?`,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function elaborationComposition(stakeholder, isRephrase, attempt, artifacts) {
|
|
140
|
+
const direction = isRephrase
|
|
141
|
+
? `The previous question about "${stakeholder.name}" didn't get a clear answer about their role or concerns. Try a different angle — offer concrete examples relevant to the project domain.`
|
|
142
|
+
: `Ask about "${stakeholder.name}"'s role in the project and what they would care most about.`;
|
|
143
|
+
return inferCompositionStep({
|
|
144
|
+
id: "",
|
|
145
|
+
fallback: "Could you tell me more about this stakeholder's role and what they'd care most about?",
|
|
146
|
+
message: `
|
|
147
|
+
Compose a question for the respondent about stakeholder: "${stakeholder.name}" (${stakeholder.type}).
|
|
148
|
+
${direction}
|
|
149
|
+
Include 2-3 suggested answers that show the expected level of specificity.
|
|
150
|
+
|
|
151
|
+
Context:
|
|
152
|
+
${buildFullContext(artifacts)}
|
|
153
|
+
`,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function followUpAssessment(stakeholder, elaborationResult, artifacts) {
|
|
157
|
+
const role = elaborationResult.role ?? "(not captured)";
|
|
158
|
+
const concerns = (elaborationResult.concerns ?? []).length > 0
|
|
159
|
+
? (elaborationResult.concerns ?? []).join("; ")
|
|
160
|
+
: "(none captured)";
|
|
161
|
+
return inferStep({
|
|
162
|
+
id: `stakeholder-followup-assessment-${stakeholder.id}`,
|
|
163
|
+
schema: FollowUpAssessmentSchema,
|
|
164
|
+
message: `
|
|
165
|
+
Assess whether a follow-up question about "${stakeholder.name}" (${stakeholder.type}) would surface meaningful new information.
|
|
166
|
+
|
|
167
|
+
Elaboration captured:
|
|
168
|
+
- Role: ${role}
|
|
169
|
+
- Concerns: ${concerns}
|
|
170
|
+
|
|
171
|
+
If the elaboration answer is rich (role present AND 2+ specific concerns), set needed=false.
|
|
172
|
+
If there are meaningful gaps (missing role, thin/generic concerns, unexplored domain-specific angles), set needed=true and compose a targeted follow-up question.
|
|
173
|
+
|
|
174
|
+
The follow-up should address the specific gap — do not default to "if you were in their shoes" unless no better angle exists. Consider:
|
|
175
|
+
- Missing role → ask about their relationship to the project
|
|
176
|
+
- Thin concerns → probe for specific domain-relevant worries
|
|
177
|
+
- Generic concerns → ask for concrete examples
|
|
178
|
+
- Perspective-switching is one option when the respondent struggles to articulate proxy concerns
|
|
179
|
+
|
|
180
|
+
${compositionPreamble()}
|
|
181
|
+
|
|
182
|
+
Context:
|
|
183
|
+
${buildFullContext(artifacts)}
|
|
184
|
+
`,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
function confirmation(stakeholders, findings) {
|
|
188
|
+
const shList = stakeholders.map((s) => {
|
|
189
|
+
const respondent = s.isRespondent ? " _(you)_" : "";
|
|
190
|
+
const role = s.role ? `\n Role: ${s.role}` : "";
|
|
191
|
+
const concerns = s.concerns.length > 0 ? `\n Concerns: ${s.concerns.join("; ")}` : "";
|
|
192
|
+
return `**${s.name}** [${s.type}, ${s.status}]${respondent}${role}${concerns}`;
|
|
193
|
+
}).join("\n\n");
|
|
194
|
+
const shFindings = findings.filter((f) => f.phase === "stakeholders");
|
|
195
|
+
const findingsSection = shFindings.length > 0
|
|
196
|
+
? `\n**Notes**:\n${shFindings.map((f) => `- ${f.content}`).join("\n")}\n`
|
|
197
|
+
: "";
|
|
198
|
+
return {
|
|
199
|
+
id: "stakeholders-confirmation",
|
|
200
|
+
message: `
|
|
201
|
+
Here's what I've captured for your project stakeholders:
|
|
202
|
+
${shList}
|
|
203
|
+
${findingsSection}
|
|
204
|
+
${confirmationCloser()}`,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
export async function runStakeholders(ctx, agg) {
|
|
208
|
+
const artifacts = agg.data;
|
|
209
|
+
// Step 1: Waiting room drain, list review — present seeds, collect corrections/additions
|
|
210
|
+
if (artifacts.waitingRoom.length > 0) {
|
|
211
|
+
const preWaitingRoomIds = new Set(artifacts.waitingRoom.map((w) => w.id));
|
|
212
|
+
const seeds = await ctx.seed({
|
|
213
|
+
id: "stakeholder-seed-extraction",
|
|
214
|
+
artifactsContext: buildFullContext(artifacts, { includeWaitingRoom: true }),
|
|
215
|
+
schema: StakeholderSeedSchema,
|
|
216
|
+
guidance: "Identify stakeholder candidates — people, roles, groups, or organizations involved in or affected by the project. Pull hints from the waitingRoom items in the context; return drainedWaitingRoomIds for the items you consumed.",
|
|
217
|
+
});
|
|
218
|
+
agg.addIdentifiedStakeholders((seeds.stakeholders ?? []).map((s) => ({ name: s.name, type: s.type ?? "secondary" })), ctx.currentSource);
|
|
219
|
+
const drainedIds = new Set((seeds.drainedWaitingRoomIds ?? []).filter((id) => preWaitingRoomIds.has(id)));
|
|
220
|
+
agg.drainWaitingRoom(drainedIds);
|
|
221
|
+
}
|
|
222
|
+
const stakeholderRef = artifacts.stakeholders.map((s) => `${s.id}: "${s.name}" (${s.type})`).join(", ");
|
|
223
|
+
const classification = await ctx.promptReview(reviewPresent(artifacts.stakeholders), "stakeholder-review-classification", stakeholderRef, buildFullContext(artifacts), ReviewExtractionSchema, { defaults: { responseInterpretation: "", updatedTypes: [], removedIds: [], newStakeholders: [] } });
|
|
224
|
+
// Apply type corrections
|
|
225
|
+
if (classification.updatedTypes) {
|
|
226
|
+
for (const update of classification.updatedTypes) {
|
|
227
|
+
agg.updateStakeholder(update.id, { type: update.type });
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Remove rejected stakeholders
|
|
231
|
+
const removedIds = new Set(classification.removedIds ?? []);
|
|
232
|
+
if (removedIds.size > 0) {
|
|
233
|
+
agg.removeStakeholders(removedIds);
|
|
234
|
+
}
|
|
235
|
+
// Track user-added stakeholders for sort tiebreaker
|
|
236
|
+
const preReviewIds = new Set(artifacts.stakeholders.map((s) => s.id));
|
|
237
|
+
agg.addIdentifiedStakeholders(classification.newStakeholders ?? [], ctx.currentSource);
|
|
238
|
+
const userAddedIds = artifacts.stakeholders
|
|
239
|
+
.filter((s) => !preReviewIds.has(s.id))
|
|
240
|
+
.map((s) => s.id);
|
|
241
|
+
// Step 2: Respondent identification
|
|
242
|
+
if (artifacts.stakeholders.length > 0) {
|
|
243
|
+
const updatedRef = artifacts.stakeholders.map((s) => `${s.id}: "${s.name}" (${s.type})`).join(", ");
|
|
244
|
+
const respondentResult = await ctx.promptExtract(respondentPresent(artifacts.stakeholders), { artifactsContext: buildFullContext(artifacts), schema: RespondentExtractionSchema, guidance: `The respondent was asked which stakeholder best describes them.\nStakeholder IDs: ${updatedRef}\nThe respondent may describe their role in their own words rather than picking a listed name. This is a valid answer — match to the closest stakeholder by role overlap. Only classify as confusion if the response genuinely asks for clarification.` }, { defaults: { responseInterpretation: "", respondentId: null } });
|
|
245
|
+
if (respondentResult.respondentId) {
|
|
246
|
+
if (agg.stakeholder(respondentResult.respondentId)) {
|
|
247
|
+
agg.setRespondent(respondentResult.respondentId);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
agg.addFinding(`Respondent identification failed — "${respondentResult.respondentId}" not found among stakeholder IDs`, "stakeholders");
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Step 2b: Sort + cap — build set of stakeholders to probe
|
|
255
|
+
const probeIds = new Set();
|
|
256
|
+
const capByType = { primary: PRIMARY_SH_CAP, secondary: SECONDARY_SH_CAP, external: EXTERNAL_SH_CAP };
|
|
257
|
+
for (const type of ["primary", "secondary", "external"]) {
|
|
258
|
+
const ofType = artifacts.stakeholders.filter((s) => s.type === type);
|
|
259
|
+
const cap = capByType[type];
|
|
260
|
+
if (ofType.length <= cap) {
|
|
261
|
+
for (const s of ofType)
|
|
262
|
+
probeIds.add(s.id);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
const sortResult = await ctx.infer(stakeholderSort(type, ofType, artifacts, userAddedIds.filter((id) => ofType.some((s) => s.id === id))));
|
|
266
|
+
const validIds = new Set(ofType.map((s) => s.id));
|
|
267
|
+
const ranked = sortResult.rankedStakeholderIds.filter((id) => validIds.has(id));
|
|
268
|
+
const keepIds = ranked.length >= cap
|
|
269
|
+
? ranked.slice(0, cap)
|
|
270
|
+
: ofType.slice(0, cap).map((s) => s.id);
|
|
271
|
+
for (const id of keepIds)
|
|
272
|
+
probeIds.add(id);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Step 3: Per-stakeholder elaboration (probed set only, type-based depth)
|
|
276
|
+
for (const stakeholder of artifacts.stakeholders) {
|
|
277
|
+
if (stakeholder.status !== "identified")
|
|
278
|
+
continue;
|
|
279
|
+
if (!probeIds.has(stakeholder.id))
|
|
280
|
+
continue;
|
|
281
|
+
// Elaboration: role + concerns
|
|
282
|
+
let elaborated = false;
|
|
283
|
+
for (let attempt = 0; attempt < MAX_ELABORATION_ATTEMPTS && !elaborated; attempt++) {
|
|
284
|
+
const isRephrase = attempt > 0;
|
|
285
|
+
const extraction = await ctx.composePromptExtract(`stakeholder-elaboration-${stakeholder.id}-${attempt}`, () => elaborationComposition(stakeholder, isRephrase, attempt, artifacts), { artifactsContext: buildFullContext(artifacts), schema: ElaborationExtractionSchema, focus: `[${stakeholder.id}] "${stakeholder.name}" (${stakeholder.type})` }, { defaults: { responseInterpretation: "", role: null, concerns: [], contradictions: [], waitingRoomItems: [] } });
|
|
286
|
+
// Handle contradictions
|
|
287
|
+
if (extraction.contradictions && extraction.contradictions.length > 0) {
|
|
288
|
+
agg.applyStakeholderElaboration(stakeholder.id, extraction);
|
|
289
|
+
const reExtraction = await ctx.promptReextract(`stakeholder-elaboration-contradiction-${stakeholder.id}-${attempt}`, extraction.contradictions, buildFullContext(artifacts), ElaborationExtractionSchema, { defaults: { responseInterpretation: "", role: null, concerns: [], contradictions: [], waitingRoomItems: [] } });
|
|
290
|
+
elaborated = agg.applyStakeholderElaboration(stakeholder.id, reExtraction);
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
elaborated = agg.applyStakeholderElaboration(stakeholder.id, extraction);
|
|
294
|
+
}
|
|
295
|
+
if (!elaborated) {
|
|
296
|
+
agg.addFinding(`Could not elaborate stakeholder "${stakeholder.name}" after ${MAX_ELABORATION_ATTEMPTS} attempts`, "stakeholders");
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
// Conditional follow-up: primary non-respondent only, assessment-driven
|
|
300
|
+
if (stakeholder.type === "primary" && !stakeholder.isRespondent) {
|
|
301
|
+
const assessment = await ctx.infer(followUpAssessment(stakeholder, { role: stakeholder.role, concerns: stakeholder.concerns }, artifacts));
|
|
302
|
+
if (assessment.needed && assessment.question) {
|
|
303
|
+
const response = await ctx.promptQuestion(`stakeholder-followup-${stakeholder.id}-question-r0`, { question: assessment.question, suggestions: assessment.suggestions });
|
|
304
|
+
const followUpExtraction = await ctx.extract({
|
|
305
|
+
id: `stakeholder-followup-${stakeholder.id}-extraction-r0`,
|
|
306
|
+
response,
|
|
307
|
+
artifactsContext: buildFullContext(artifacts),
|
|
308
|
+
schema: ElaborationExtractionSchema,
|
|
309
|
+
focus: `[${stakeholder.id}] "${stakeholder.name}" (${stakeholder.type})`,
|
|
310
|
+
});
|
|
311
|
+
agg.applyStakeholderElaboration(stakeholder.id, followUpExtraction);
|
|
312
|
+
if (followUpExtraction.contradictions && followUpExtraction.contradictions.length > 0) {
|
|
313
|
+
const reExtraction = await ctx.promptReextract(`stakeholder-followup-contradiction-${stakeholder.id}`, followUpExtraction.contradictions, buildFullContext(artifacts), ElaborationExtractionSchema, { defaults: { responseInterpretation: "", role: null, concerns: [], contradictions: [], waitingRoomItems: [] } });
|
|
314
|
+
agg.applyStakeholderElaboration(stakeholder.id, reExtraction);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// Proxy reliability check: if no concerns after elaboration + optional follow-up
|
|
318
|
+
if (stakeholder.concerns.length === 0) {
|
|
319
|
+
agg.addFinding(`Respondent could not articulate concerns for "${stakeholder.name}" — proxy knowledge may be limited, consider direct validation`, "stakeholders");
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Mark elaborated
|
|
323
|
+
agg.setStakeholderStatus(stakeholder.id, "elaborated");
|
|
324
|
+
}
|
|
325
|
+
// Quality check: only among probed stakeholders
|
|
326
|
+
const hasElaboratedPrimary = artifacts.stakeholders.some((s) => s.type === "primary" && probeIds.has(s.id) && (s.status === "elaborated" || s.status === "confirmed"));
|
|
327
|
+
if (!hasElaboratedPrimary) {
|
|
328
|
+
agg.addFinding("No primary stakeholder has been elaborated — downstream requirements may miss critical perspectives", "stakeholders");
|
|
329
|
+
}
|
|
330
|
+
// Step 3b: Semantic deduplication
|
|
331
|
+
if (artifacts.stakeholders.length >= 2) {
|
|
332
|
+
const dedupResult = await ctx.infer(stakeholderDedup(artifacts));
|
|
333
|
+
for (const group of dedupResult.duplicateGroups ?? []) {
|
|
334
|
+
const keep = agg.stakeholder(group.keepId);
|
|
335
|
+
if (!keep)
|
|
336
|
+
continue;
|
|
337
|
+
const validRemoveIds = group.removeIds.filter((id) => agg.stakeholder(id));
|
|
338
|
+
for (const removeId of validRemoveIds) {
|
|
339
|
+
const removed = agg.stakeholder(removeId);
|
|
340
|
+
if (removed.concerns.length > 0)
|
|
341
|
+
agg.addConcerns(keep.id, removed.concerns);
|
|
342
|
+
if (removed.isRespondent)
|
|
343
|
+
agg.setRespondent(keep.id);
|
|
344
|
+
if (removed.status === "elaborated" && keep.status === "identified") {
|
|
345
|
+
agg.setStakeholderStatus(keep.id, "elaborated");
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
if (validRemoveIds.length > 0) {
|
|
349
|
+
agg.removeStakeholders(new Set(validRemoveIds));
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
// Step 4: Single-pass confirmation
|
|
354
|
+
const { response, approved, targetId } = await confirmPhase(ctx, confirmation(artifacts.stakeholders, artifacts.findings), artifacts, "stakeholders", 0);
|
|
355
|
+
if (!approved) {
|
|
356
|
+
const extraction = await ctx.extract({
|
|
357
|
+
id: "stakeholders-revision",
|
|
358
|
+
response,
|
|
359
|
+
artifactsContext: buildFullContext(artifacts),
|
|
360
|
+
schema: ElaborationExtractionSchema,
|
|
361
|
+
});
|
|
362
|
+
const target = (targetId && artifacts.stakeholders.find((s) => s.id === targetId))
|
|
363
|
+
?? artifacts.stakeholders[0];
|
|
364
|
+
if (target) {
|
|
365
|
+
agg.applyStakeholderElaboration(target.id, extraction);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
agg.confirmElaboratedStakeholders();
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=stakeholders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stakeholders.js","sourceRoot":"","sources":["../../src/phases/stakeholders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation + completion phases — present summary, check consistency/completeness, confirm.
|
|
3
|
+
*
|
|
4
|
+
* Phase 7 (runValidation): WR classify-and-route → consistency check → present → classify.
|
|
5
|
+
*
|
|
6
|
+
* Bounded mutations: findings from consistency check, residual items from WR classification.
|
|
7
|
+
* User concern (if any) is set on aggregate and bridged to persistence by the adapter.
|
|
8
|
+
* No revision loop.
|
|
9
|
+
*/
|
|
10
|
+
import type { WorkflowContext } from "../durable/index.js";
|
|
11
|
+
import type { ArtifactAggregate } from "./aggregate/index.js";
|
|
12
|
+
export declare function runValidation(ctx: WorkflowContext, agg: ArtifactAggregate): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/phases/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAkH9D,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,iBAAiB,iBA8B/E"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation + completion phases — present summary, check consistency/completeness, confirm.
|
|
3
|
+
*
|
|
4
|
+
* Phase 7 (runValidation): WR classify-and-route → consistency check → present → classify.
|
|
5
|
+
*
|
|
6
|
+
* Bounded mutations: findings from consistency check, residual items from WR classification.
|
|
7
|
+
* User concern (if any) is set on aggregate and bridged to persistence by the adapter.
|
|
8
|
+
* No revision loop.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { buildFullContext, confirmPhase, section } from "./shared.js";
|
|
12
|
+
import { inferStep } from "../interview/index.js";
|
|
13
|
+
const WrClassifySchema = z.object({
|
|
14
|
+
routed: z.array(z.object({
|
|
15
|
+
id: z.string().describe("waiting room item ID"),
|
|
16
|
+
target: z.enum(["assumption", "finding", "residual"]).describe("where to route this item"),
|
|
17
|
+
content: z.string().describe("the item content (may be rephrased for the target format)"),
|
|
18
|
+
reason: z.string().describe("why this item belongs in the target category, or why it is residual"),
|
|
19
|
+
})).describe("classification for each remaining waiting room item"),
|
|
20
|
+
});
|
|
21
|
+
function wrClassifyAndRoute(artifacts) {
|
|
22
|
+
return inferStep({
|
|
23
|
+
id: "validation-wr-classify",
|
|
24
|
+
message: `
|
|
25
|
+
Classify each remaining waiting room item into the most appropriate artifact category.
|
|
26
|
+
For each item, choose one target:
|
|
27
|
+
- "assumption": an implicit belief that must be true for the project to succeed (testable or invariant)
|
|
28
|
+
- "finding": a gap, risk, or quality observation worth flagging
|
|
29
|
+
- "residual": content already absorbed into existing artifacts, too vague to classify, or genuinely not actionable
|
|
30
|
+
|
|
31
|
+
Waiting room items:
|
|
32
|
+
${artifacts.waitingRoom.map((w) => `- ${w.id}: "${w.content}"`).join("\n")}
|
|
33
|
+
|
|
34
|
+
Current artifacts (for context — avoid duplicating what's already captured):
|
|
35
|
+
${buildFullContext(artifacts)}
|
|
36
|
+
`,
|
|
37
|
+
schema: WrClassifySchema,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const ConsistencyCheckSchema = z.object({
|
|
41
|
+
contradictions: z.array(z.object({
|
|
42
|
+
description: z.string(),
|
|
43
|
+
})).optional().describe("cross-artifact contradictions found, empty if none"),
|
|
44
|
+
});
|
|
45
|
+
function consistencyCheck(artifacts) {
|
|
46
|
+
return inferStep({
|
|
47
|
+
id: "validation-consistency-check",
|
|
48
|
+
message: `
|
|
49
|
+
Review all captured artifacts for cross-artifact contradictions.
|
|
50
|
+
Look for issues that no single phase could detect:
|
|
51
|
+
- Goal references a stakeholder that doesn't exist
|
|
52
|
+
- Scope item contradicts a stated goal
|
|
53
|
+
- Assumption references a goal that was removed
|
|
54
|
+
- Constraint makes a goal infeasible but wasn't flagged
|
|
55
|
+
- In-scope item has no supporting goal
|
|
56
|
+
|
|
57
|
+
Only report genuine cross-artifact contradictions.
|
|
58
|
+
Do NOT repeat issues already captured as findings.
|
|
59
|
+
|
|
60
|
+
Current artifacts:
|
|
61
|
+
${buildFullContext(artifacts)}
|
|
62
|
+
|
|
63
|
+
Existing findings (do not duplicate):
|
|
64
|
+
${artifacts.findings.length > 0 ? artifacts.findings.map((f) => `- [${f.phase}] ${f.content}`).join("\n") : "(none)"}
|
|
65
|
+
`,
|
|
66
|
+
schema: ConsistencyCheckSchema,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function summary(agg) {
|
|
70
|
+
const a = agg.data;
|
|
71
|
+
const message = [
|
|
72
|
+
"Here's a complete summary of everything we've captured:",
|
|
73
|
+
section("**Purpose**", [
|
|
74
|
+
a.purpose ? `- ${a.purpose.statement}` : "",
|
|
75
|
+
a.advantage ? `- Advantage: ${a.advantage.statement}` : "",
|
|
76
|
+
a.measurement ? `- Measurement: ${a.measurement.statement}` : "",
|
|
77
|
+
]),
|
|
78
|
+
section("**Goals**", a.goals.map((g) => `- ${g.title} _(${g.status})_${g.rationale ? ` — ${g.rationale}` : ""}`)),
|
|
79
|
+
section("**Stakeholders**", a.stakeholders.map((s) => `- ${s.name} _(${s.type}, ${s.status})_${s.isRespondent ? " (you)" : ""}${s.role ? ` — ${s.role}` : ""}`)),
|
|
80
|
+
section("**Scope**", [
|
|
81
|
+
...a.inScope.map(s => `- IN: ${s.description}`),
|
|
82
|
+
...a.outOfScope.map(s => `- OUT: ${s.description}${s.reason ? ` — ${s.reason}` : ""}`),
|
|
83
|
+
]),
|
|
84
|
+
section("**Constraints**", a.constraints.map(c => `- ${c.description}`)),
|
|
85
|
+
section("**Assumptions**", a.assumptions.map((a) => `- ${a.statement} _(${a.type}, ${a.status})_`)),
|
|
86
|
+
section("**Findings**", a.findings.map(f => `- [${f.phase}] ${f.content}`)),
|
|
87
|
+
section("**Residual**", a.residual.map(r => `- ${r.content} _(${r.reason})_`)),
|
|
88
|
+
section("**Gaps**", [
|
|
89
|
+
!a.purpose || a.purpose.confidence < 0.5 ? "- No purpose defined" : "",
|
|
90
|
+
!a.goals.some((g) => g.status !== "fuzzy") ? "- No non-fuzzy goal" : "",
|
|
91
|
+
!a.stakeholders.some((s) => s.type === "primary") ? "- No primary stakeholder" : "",
|
|
92
|
+
a.inScope.length === 0 && a.outOfScope.length === 0 ? "- No scope boundary defined" : "",
|
|
93
|
+
]),
|
|
94
|
+
section("**Notes**", [
|
|
95
|
+
!a.advantage ? "- No advantage articulated" : "",
|
|
96
|
+
!a.measurement ? "- No measurement defined" : "",
|
|
97
|
+
a.assumptions.length === 0 ? "- No assumptions captured" : "",
|
|
98
|
+
a.findings.length > 0 ? `- ${a.findings.length} unresolved finding(s)` : "",
|
|
99
|
+
]),
|
|
100
|
+
'What would you change or add? If everything looks right, let me know and we\'ll wrap up.',
|
|
101
|
+
].filter(Boolean).join("\n\n");
|
|
102
|
+
return { id: "validation-summary-present", message };
|
|
103
|
+
}
|
|
104
|
+
export async function runValidation(ctx, agg) {
|
|
105
|
+
// Classify and route remaining waiting room items before consistency check
|
|
106
|
+
if (agg.data.waitingRoom.length > 0) {
|
|
107
|
+
const { routed = [] } = await ctx.infer(wrClassifyAndRoute(agg.data));
|
|
108
|
+
for (const item of routed) {
|
|
109
|
+
if (item.target === "assumption") {
|
|
110
|
+
agg.addAssumptions([{ statement: item.content, type: "hypothesis" }], undefined, undefined);
|
|
111
|
+
}
|
|
112
|
+
else if (item.target === "finding") {
|
|
113
|
+
agg.addFinding(item.content, "validation");
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
agg.addResidualItems([{ content: item.content, reason: item.reason }]);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
agg.drainAllWaitingRoom();
|
|
120
|
+
}
|
|
121
|
+
const { contradictions = [] } = await ctx.infer(consistencyCheck(agg.data));
|
|
122
|
+
for (const { description } of contradictions) {
|
|
123
|
+
agg.addFinding(description, "validation");
|
|
124
|
+
}
|
|
125
|
+
const { approved, revisionRequested } = await confirmPhase(ctx, summary(agg), agg.data, "validation", 0);
|
|
126
|
+
if (!approved && revisionRequested) {
|
|
127
|
+
agg.setUserConcern(revisionRequested);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/phases/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill adapter — shell interface to the durable session workflow.
|
|
3
|
+
*
|
|
4
|
+
* Translates shell arguments into durable execute calls and returns JSON to stdout.
|
|
5
|
+
* Bundled alongside SKILL.md into a single deployable artifact.
|
|
6
|
+
*
|
|
7
|
+
* Commands:
|
|
8
|
+
* start Create session or resume, return current prompt
|
|
9
|
+
* response --message="..." Answer pending prompt with user message (or pipe text to stdin)
|
|
10
|
+
* inference --data='{...}' Answer pending infer with extraction data (or pipe JSON to stdin)
|
|
11
|
+
* status Query session state
|
|
12
|
+
*
|
|
13
|
+
* All output is JSON to stdout. Errors: { error: "..." } + exit code 1.
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/skill/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|