@principles/core 1.122.0 → 1.124.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/dist/runtime-v2/__tests__/architecture-regression.test.js +37 -73
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/adapter/pi-ai-runtime-adapter.d.ts.map +1 -1
- package/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js +4 -0
- package/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js.map +1 -1
- package/dist/runtime-v2/config/__tests__/pd-config-contract.test.js +37 -0
- package/dist/runtime-v2/config/__tests__/pd-config-contract.test.js.map +1 -1
- package/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
- package/dist/runtime-v2/config/pd-config-defaults.js +2 -0
- package/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
- package/dist/runtime-v2/config/pd-config-types.d.ts +2 -0
- package/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
- package/dist/runtime-v2/config/pd-config-types.js.map +1 -1
- package/dist/runtime-v2/diagnostician/__tests__/diag-distiller-output.test.d.ts +2 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-distiller-output.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-distiller-output.test.js +45 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-distiller-output.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.d.ts +2 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js +57 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/distiller-prompt-builder.test.d.ts +2 -0
- package/dist/runtime-v2/diagnostician/__tests__/distiller-prompt-builder.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/distiller-prompt-builder.test.js +39 -0
- package/dist/runtime-v2/diagnostician/__tests__/distiller-prompt-builder.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.d.ts +2 -0
- package/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js +34 -0
- package/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/router-prompt-builder.test.d.ts +2 -0
- package/dist/runtime-v2/diagnostician/__tests__/router-prompt-builder.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/router-prompt-builder.test.js +57 -0
- package/dist/runtime-v2/diagnostician/__tests__/router-prompt-builder.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/diag-distiller-output.d.ts +80 -0
- package/dist/runtime-v2/diagnostician/diag-distiller-output.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/diag-distiller-output.js +103 -0
- package/dist/runtime-v2/diagnostician/diag-distiller-output.js.map +1 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts +115 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.js +166 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.js.map +1 -0
- package/dist/runtime-v2/diagnostician/distiller-prompt-builder.d.ts +134 -0
- package/dist/runtime-v2/diagnostician/distiller-prompt-builder.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/distiller-prompt-builder.js +156 -0
- package/dist/runtime-v2/diagnostician/distiller-prompt-builder.js.map +1 -0
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts +96 -0
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js +216 -0
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js.map +1 -0
- package/dist/runtime-v2/diagnostician/router-prompt-builder.d.ts +127 -0
- package/dist/runtime-v2/diagnostician/router-prompt-builder.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/router-prompt-builder.js +131 -0
- package/dist/runtime-v2/diagnostician/router-prompt-builder.js.map +1 -0
- package/dist/runtime-v2/index.d.ts +6 -3
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +1 -1
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/split-pipeline-mock-outputs.d.ts +25 -0
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/split-pipeline-mock-outputs.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/split-pipeline-mock-outputs.js +123 -0
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/split-pipeline-mock-outputs.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js +731 -0
- package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-distiller-runner.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/diag-distiller-runner.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-distiller-runner.test.js +437 -0
- package/dist/runtime-v2/internalization/__tests__/diag-distiller-runner.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-runner.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-runner.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-runner.test.js +336 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-runner.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-runner.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-runner.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-runner.test.js +437 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-runner.test.js.map +1 -0
- package/dist/runtime-v2/internalization/diag-distiller-runner.d.ts +83 -0
- package/dist/runtime-v2/internalization/diag-distiller-runner.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/diag-distiller-runner.js +274 -0
- package/dist/runtime-v2/internalization/diag-distiller-runner.js.map +1 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts +73 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.js +229 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.js.map +1 -0
- package/dist/runtime-v2/internalization/diag-router-runner.d.ts +85 -0
- package/dist/runtime-v2/internalization/diag-router-runner.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/diag-router-runner.js +353 -0
- package/dist/runtime-v2/internalization/diag-router-runner.js.map +1 -0
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.js +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/dist/runtime-v2/internalization/split-diagnostician-runner.d.ts +66 -0
- package/dist/runtime-v2/internalization/split-diagnostician-runner.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/split-diagnostician-runner.js +172 -0
- package/dist/runtime-v2/internalization/split-diagnostician-runner.js.map +1 -0
- package/dist/runtime-v2/pain-signal-bridge.d.ts +22 -3
- package/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-bridge.js +16 -7
- package/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.d.ts +3 -0
- package/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.js +52 -24
- package/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-trust-boundary.test.js +2 -2
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-trust-boundary.test.js.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.d.ts +3 -3
- package/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.js +6 -6
- package/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
- package/dist/runtime-v2/runner/peer-runner-types.d.ts +3 -3
- package/dist/runtime-v2/runner/peer-runner-types.d.ts.map +1 -1
- package/dist/runtime-v2/store/candidate/sqlite-candidate-store.js +2 -2
- package/dist/runtime-v2/store/candidate/sqlite-candidate-store.js.map +1 -1
- package/dist/runtime-v2/types/principle-enums.d.ts +2 -2
- package/dist/runtime-v2/types/principle-enums.d.ts.map +1 -1
- package/dist/runtime-v2/types/principle-enums.js +1 -0
- package/dist/runtime-v2/types/principle-enums.js.map +1 -1
- package/dist/runtime-v2/types/principle-schema.d.ts +1 -1
- package/dist/runtime-v2/types/principle-tree-store.d.ts +1 -1
- package/dist/telemetry-event.d.ts +2 -2
- package/dist/telemetry-event.d.ts.map +1 -1
- package/dist/telemetry-event.js +1 -0
- package/dist/telemetry-event.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Root Cause stage (Stage A) output schema for the split diagnostician pipeline.
|
|
3
|
+
*
|
|
4
|
+
* This schema defines the output of the Root Cause stage, which identifies
|
|
5
|
+
* the underlying cause of a pain signal using a 5-Whys causal chain and
|
|
6
|
+
* categorises it into one of four root-cause categories.
|
|
7
|
+
*
|
|
8
|
+
* The taskId field is lineage data re-injected by the runner if stripped
|
|
9
|
+
* by the adapter before LLM validation (ERR-008).
|
|
10
|
+
*
|
|
11
|
+
* @see PRI-372
|
|
12
|
+
*/
|
|
13
|
+
import { Type } from '@sinclair/typebox';
|
|
14
|
+
import { Value } from '@sinclair/typebox/value';
|
|
15
|
+
// ── Sub-schemas ──────────────────────────────────────────────────────────────
|
|
16
|
+
/**
|
|
17
|
+
* Root-cause category literal union.
|
|
18
|
+
*
|
|
19
|
+
* Every root cause MUST be classified into exactly one of these four
|
|
20
|
+
* categories. The category prefix in `rootCause` must match this value.
|
|
21
|
+
*
|
|
22
|
+
* @see PRI-372
|
|
23
|
+
*/
|
|
24
|
+
export const RootCauseCategorySchema = Type.Union([
|
|
25
|
+
Type.Literal('People'),
|
|
26
|
+
Type.Literal('Design'),
|
|
27
|
+
Type.Literal('Assumption'),
|
|
28
|
+
Type.Literal('Tooling'),
|
|
29
|
+
]);
|
|
30
|
+
/**
|
|
31
|
+
* A single entry in the 5-Whys causal chain.
|
|
32
|
+
*
|
|
33
|
+
* `why` is 1-indexed (1 = shallowest, 5 = deepest).
|
|
34
|
+
*/
|
|
35
|
+
export const CausalChainEntrySchema = Type.Object({
|
|
36
|
+
why: Type.Number({ minimum: 1, maximum: 5 }),
|
|
37
|
+
statement: Type.String({ minLength: 1 }),
|
|
38
|
+
evidenceRefs: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* Evidence entry linking a source reference to an explanatory note.
|
|
42
|
+
*/
|
|
43
|
+
export const DiagRootCauseEvidenceSchema = Type.Object({
|
|
44
|
+
sourceRef: Type.String({ minLength: 1 }),
|
|
45
|
+
note: Type.String({ minLength: 1 }),
|
|
46
|
+
});
|
|
47
|
+
// ── Main output schema ───────────────────────────────────────────────────────
|
|
48
|
+
/**
|
|
49
|
+
* TypeBox schema for the Root Cause stage (Stage A) output.
|
|
50
|
+
*
|
|
51
|
+
* Consumed by the next pipeline stage and stored as a RunRecord output.
|
|
52
|
+
* The host layer (runner) is responsible for re-injecting `taskId` if
|
|
53
|
+
* the adapter strips lineage fields before LLM invocation (ERR-008).
|
|
54
|
+
*
|
|
55
|
+
* @see PRI-372
|
|
56
|
+
*/
|
|
57
|
+
export const DiagRootCauseOutputV1Schema = Type.Object({
|
|
58
|
+
valid: Type.Boolean(),
|
|
59
|
+
diagnosisId: Type.String({ minLength: 1 }),
|
|
60
|
+
taskId: Type.String({ minLength: 1, description: 'Lineage — re-injected if stripped; ERR-008' }),
|
|
61
|
+
summary: Type.String({ minLength: 1 }),
|
|
62
|
+
causalChain: Type.Array(CausalChainEntrySchema),
|
|
63
|
+
rootCause: Type.String({
|
|
64
|
+
minLength: 1,
|
|
65
|
+
description: 'MUST include category prefix: "People: ..." or "Design: ..." or "Assumption: ..." or "Tooling: ..."',
|
|
66
|
+
}),
|
|
67
|
+
rootCauseCategory: RootCauseCategorySchema,
|
|
68
|
+
evidence: Type.Array(DiagRootCauseEvidenceSchema),
|
|
69
|
+
confidence: Type.Number({ minimum: 0, maximum: 1 }),
|
|
70
|
+
ambiguityNotes: Type.Optional(Type.Array(Type.String())),
|
|
71
|
+
});
|
|
72
|
+
// ── Validator ────────────────────────────────────────────────────────────────
|
|
73
|
+
const VALID_ROOT_CAUSE_CATEGORIES = new Set(['People', 'Design', 'Assumption', 'Tooling']);
|
|
74
|
+
/**
|
|
75
|
+
* Default validator for DiagRootCauseOutputV1 using TypeBox Value.Check / Value.Errors.
|
|
76
|
+
*
|
|
77
|
+
* Validates:
|
|
78
|
+
* 1. Structural correctness via TypeBox schema
|
|
79
|
+
* 2. taskId lineage match (ERR-008)
|
|
80
|
+
* 3. rootCauseCategory consistency with rootCause prefix
|
|
81
|
+
* 4. causalChain entry ordering (why field 1-5)
|
|
82
|
+
*
|
|
83
|
+
* @see PRI-372
|
|
84
|
+
*/
|
|
85
|
+
export class DefaultDiagRootCauseValidator {
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/class-methods-use-this
|
|
87
|
+
async validate(output, taskId) {
|
|
88
|
+
const errors = [];
|
|
89
|
+
// ── Step 1: Object guard ────────────────────────────────────────────────
|
|
90
|
+
if (typeof output !== 'object' || output === null) {
|
|
91
|
+
return { valid: false, errors: ['Output is not an object'], errorCategory: 'output_invalid' };
|
|
92
|
+
}
|
|
93
|
+
// Narrow to Record for property access — all fields still treated as untrusted.
|
|
94
|
+
const record = output;
|
|
95
|
+
// ── Step 2: taskId lineage check (ERR-008) ──────────────────────────────
|
|
96
|
+
if (typeof record.taskId !== 'string' || record.taskId !== taskId) {
|
|
97
|
+
errors.push(`taskId mismatch: expected ${taskId}, got ${String(record.taskId)}`);
|
|
98
|
+
}
|
|
99
|
+
// ── Step 3: valid flag must be true ─────────────────────────────────────
|
|
100
|
+
if (record.valid !== true) {
|
|
101
|
+
errors.push('output.valid must be true');
|
|
102
|
+
}
|
|
103
|
+
// ── Step 4: rootCauseCategory semantic check ────────────────────────────
|
|
104
|
+
if (typeof record.rootCauseCategory !== 'string' || !VALID_ROOT_CAUSE_CATEGORIES.has(record.rootCauseCategory)) {
|
|
105
|
+
errors.push(`rootCauseCategory must be one of People|Design|Assumption|Tooling, got ${String(record.rootCauseCategory)}`);
|
|
106
|
+
}
|
|
107
|
+
// ── Step 4b: rootCause prefix must match rootCauseCategory ──────────────
|
|
108
|
+
if (typeof record.rootCause === 'string'
|
|
109
|
+
&& typeof record.rootCauseCategory === 'string'
|
|
110
|
+
&& VALID_ROOT_CAUSE_CATEGORIES.has(record.rootCauseCategory)) {
|
|
111
|
+
const expectedPrefix = `${record.rootCauseCategory}: `;
|
|
112
|
+
if (!record.rootCause.startsWith(expectedPrefix)) {
|
|
113
|
+
errors.push(`rootCause must start with "${expectedPrefix}" (matching rootCauseCategory "${record.rootCauseCategory}"), got: "${record.rootCause.slice(0, 40)}${record.rootCause.length > 40 ? '...' : ''}"`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// ── Step 5: causalChain entry-level checks ──────────────────────────────
|
|
117
|
+
if (Array.isArray(record.causalChain)) {
|
|
118
|
+
for (let i = 0; i < record.causalChain.length; i++) {
|
|
119
|
+
const entry = record.causalChain[i];
|
|
120
|
+
if (!entry || typeof entry !== 'object') {
|
|
121
|
+
errors.push(`causalChain[${i}] must be an object`);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (typeof entry.why !== 'number' || entry.why < 1 || entry.why > 5) {
|
|
125
|
+
errors.push(`causalChain[${i}].why must be a number in [1, 5]`);
|
|
126
|
+
}
|
|
127
|
+
if (typeof entry.statement !== 'string' || entry.statement.trim() === '') {
|
|
128
|
+
errors.push(`causalChain[${i}].statement must be a non-empty string`);
|
|
129
|
+
}
|
|
130
|
+
if (!Array.isArray(entry.evidenceRefs)) {
|
|
131
|
+
errors.push(`causalChain[${i}].evidenceRefs must be an array`);
|
|
132
|
+
}
|
|
133
|
+
else if (entry.evidenceRefs.length === 0) {
|
|
134
|
+
errors.push(`causalChain[${i}].evidenceRefs must have at least 1 item`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// ── Step 6: evidence entry-level checks ─────────────────────────────────
|
|
139
|
+
if (Array.isArray(record.evidence)) {
|
|
140
|
+
for (let i = 0; i < record.evidence.length; i++) {
|
|
141
|
+
const ev = record.evidence[i];
|
|
142
|
+
if (!ev || typeof ev !== 'object') {
|
|
143
|
+
errors.push(`evidence[${i}] must be an object`);
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (typeof ev.sourceRef !== 'string' || ev.sourceRef.trim() === '') {
|
|
147
|
+
errors.push(`evidence[${i}].sourceRef must be a non-empty string`);
|
|
148
|
+
}
|
|
149
|
+
if (typeof ev.note !== 'string' || ev.note.trim() === '') {
|
|
150
|
+
errors.push(`evidence[${i}].note must be a non-empty string`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// ── Step 7: TypeBox schema validation as fallback ───────────────────────
|
|
155
|
+
if (!Value.Check(DiagRootCauseOutputV1Schema, output)) {
|
|
156
|
+
const schemaErrors = [...Value.Errors(DiagRootCauseOutputV1Schema, output)];
|
|
157
|
+
const messages = schemaErrors.map((e) => `${e.path}: ${e.message}`);
|
|
158
|
+
errors.push(...messages);
|
|
159
|
+
}
|
|
160
|
+
if (errors.length > 0) {
|
|
161
|
+
return { valid: false, errors, errorCategory: 'output_invalid' };
|
|
162
|
+
}
|
|
163
|
+
return { valid: true, errors: [] };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=diag-rootcause-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diag-rootcause-output.js","sourceRoot":"","sources":["../../../src/runtime-v2/diagnostician/diag-rootcause-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DistillerPromptBuilder — Stage B prompt builder for the split diagnostician pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Constructs the prompt for the Distiller stage (Stage B). It receives the
|
|
5
|
+
* Stage A root cause artifact as input and produces an abstracted principle
|
|
6
|
+
* grounded on core axioms (T-01..T-10).
|
|
7
|
+
*
|
|
8
|
+
* ## Prompt Sections
|
|
9
|
+
*
|
|
10
|
+
* 1. Role — principle distiller identity
|
|
11
|
+
* 2. Input — Stage A root cause output (structured data)
|
|
12
|
+
* 3. Core Axioms — T-01..T-10 list (when coreGrounding=true)
|
|
13
|
+
* 4. Output Requirements — DiagDistillerOutputV1Schema
|
|
14
|
+
* 5. Quality Guard — abstract vs rule-like distinction
|
|
15
|
+
*
|
|
16
|
+
* @see PRI-372
|
|
17
|
+
*/
|
|
18
|
+
import type { TSchema } from '@sinclair/typebox';
|
|
19
|
+
import type { SchemaPromptAdapter } from '../adapter/schema-prompt-adapter.js';
|
|
20
|
+
import type { DiagRootCauseOutputV1 } from './diag-rootcause-output.js';
|
|
21
|
+
import type { OutputLanguage } from '../language-directive.js';
|
|
22
|
+
import type { BuildPromptOptions } from '../diagnostician-prompt-builder.js';
|
|
23
|
+
/**
|
|
24
|
+
* Options for DistillerPromptBuilder constructor and buildDistillerInstruction.
|
|
25
|
+
*
|
|
26
|
+
* Uses an opts-object pattern to satisfy @typescript-eslint/max-params.
|
|
27
|
+
*
|
|
28
|
+
* @see PRI-372
|
|
29
|
+
*/
|
|
30
|
+
export interface DistillerPromptBuilderOptions {
|
|
31
|
+
/** Schema prompt adapter (default: DefaultSchemaPromptAdapter) */
|
|
32
|
+
adapter?: SchemaPromptAdapter;
|
|
33
|
+
/** TypeBox schema for output validation (default: DiagDistillerOutputV1Schema) */
|
|
34
|
+
schema?: TSchema;
|
|
35
|
+
/** Output language directive (default: none) */
|
|
36
|
+
outputLanguage?: OutputLanguage;
|
|
37
|
+
/** Inject core axiom grounding section (default: false) */
|
|
38
|
+
coreGrounding?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Input context for the Distiller stage (Stage B).
|
|
42
|
+
*
|
|
43
|
+
* Contains the Stage A root cause artifact ID and output, plus an optional
|
|
44
|
+
* coreGrounding flag that overrides the builder-level default.
|
|
45
|
+
*
|
|
46
|
+
* @see PRI-372
|
|
47
|
+
*/
|
|
48
|
+
export interface DistillerContextInput {
|
|
49
|
+
/** Artifact ID of the Stage A root cause output — used for lineage tracing */
|
|
50
|
+
rootCauseArtifactId: string;
|
|
51
|
+
/** Stage A root cause output — the structured data to abstract from */
|
|
52
|
+
rootCauseOutput: DiagRootCauseOutputV1;
|
|
53
|
+
/** Override builder-level coreGrounding for this specific invocation */
|
|
54
|
+
coreGrounding?: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* PromptInput for the Distiller stage (Stage B).
|
|
58
|
+
*
|
|
59
|
+
* Unlike Stage A (which uses the full DiagnosticianContextPayload),
|
|
60
|
+
* Stage B receives only the Stage A root cause artifact and the
|
|
61
|
+
* distiller instruction.
|
|
62
|
+
*
|
|
63
|
+
* @see PRI-372
|
|
64
|
+
*/
|
|
65
|
+
export interface DistillerPromptInput {
|
|
66
|
+
/** Artifact ID of the Stage A root cause output — for lineage tracing */
|
|
67
|
+
rootCauseArtifactId: string;
|
|
68
|
+
/** Stage A root cause output — the structured data to abstract from */
|
|
69
|
+
rootCauseOutput: DiagRootCauseOutputV1;
|
|
70
|
+
/** Distiller protocol instruction for the LLM */
|
|
71
|
+
distillerInstruction: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Build result for the Distiller stage (Stage B).
|
|
75
|
+
*
|
|
76
|
+
* Follows the same contract as PromptBuildResult but with a
|
|
77
|
+
* DistillerPromptInput shape specific to Stage B.
|
|
78
|
+
*
|
|
79
|
+
* @see PRI-372
|
|
80
|
+
*/
|
|
81
|
+
export interface DistillerPromptBuildResult {
|
|
82
|
+
/** JSON string — the exact value to pass as openclaw agent --message argument */
|
|
83
|
+
readonly message: string;
|
|
84
|
+
/** The DistillerPromptInput object that was serialized to JSON */
|
|
85
|
+
readonly promptInput: DistillerPromptInput;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build the Stage B distiller protocol instruction.
|
|
89
|
+
*
|
|
90
|
+
* When `coreGrounding` is true, the Core Axioms section is included with
|
|
91
|
+
* the full T-01..T-10 list and a strict instruction prohibiting fabricated
|
|
92
|
+
* axiom IDs. When false or undefined, the section is omitted.
|
|
93
|
+
*
|
|
94
|
+
* @see PRI-372
|
|
95
|
+
*/
|
|
96
|
+
export declare function buildDistillerProtocolInstruction(opts?: DistillerPromptBuilderOptions): string;
|
|
97
|
+
/**
|
|
98
|
+
* DistillerPromptBuilder — Stage B prompt builder for the split diagnostician pipeline.
|
|
99
|
+
*
|
|
100
|
+
* Receives the Stage A root cause artifact as input and produces an abstracted
|
|
101
|
+
* principle grounded on core axioms (T-01..T-10).
|
|
102
|
+
*
|
|
103
|
+
* Uses an opts-object pattern for all methods to satisfy @typescript-eslint/max-params.
|
|
104
|
+
*
|
|
105
|
+
* @see PRI-372
|
|
106
|
+
*/
|
|
107
|
+
export declare class DistillerPromptBuilder {
|
|
108
|
+
private readonly adapter;
|
|
109
|
+
private readonly schema;
|
|
110
|
+
constructor(opts?: DistillerPromptBuilderOptions);
|
|
111
|
+
/**
|
|
112
|
+
* Build the Stage B distiller protocol instruction.
|
|
113
|
+
*
|
|
114
|
+
* Contains the role definition, input description, core axioms section
|
|
115
|
+
* (when coreGrounding=true), output requirements, and quality guard.
|
|
116
|
+
*
|
|
117
|
+
* @see PRI-372
|
|
118
|
+
*/
|
|
119
|
+
buildDistillerInstruction(opts?: DistillerPromptBuilderOptions): string;
|
|
120
|
+
/**
|
|
121
|
+
* Build the full prompt for Stage B.
|
|
122
|
+
*
|
|
123
|
+
* Constructs a DistillerPromptBuildResult containing the JSON message to pass
|
|
124
|
+
* as the --message argument to the LLM agent. The message includes the
|
|
125
|
+
* distiller instruction and the Stage A root cause context.
|
|
126
|
+
*
|
|
127
|
+
* Per DPB-02: Output is ONLY JSON — no markdown, no file ops, no tool calls.
|
|
128
|
+
* Per DPB-05: This method only builds the prompt; it does NOT commit to PD database.
|
|
129
|
+
*
|
|
130
|
+
* @see PRI-372
|
|
131
|
+
*/
|
|
132
|
+
buildPrompt(context: DistillerContextInput, opts?: BuildPromptOptions): DistillerPromptBuildResult;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=distiller-prompt-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distiller-prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/diagnostician/distiller-prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAG/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAI7E;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,kEAAkE;IAClE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,kFAAkF;IAClF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAID;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,eAAe,EAAE,qBAAqB,CAAC;IACvC,wEAAwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAID;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,eAAe,EAAE,qBAAqB,CAAC;IACvC,iDAAiD;IACjD,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA0B;IACzC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;CAC5C;AAID;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,GAAE,6BAAkC,GACvC,MAAM,CAgER;AAID;;;;;;;;;GASG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAErB,IAAI,GAAE,6BAAkC;IAKpD;;;;;;;OAOG;IACH,yBAAyB,CAAC,IAAI,GAAE,6BAAkC,GAAG,MAAM;IAS3E;;;;;;;;;;;OAWG;IACH,WAAW,CACT,OAAO,EAAE,qBAAqB,EAC9B,IAAI,GAAE,kBAAuB,GAC5B,0BAA0B;CAmB9B"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DistillerPromptBuilder — Stage B prompt builder for the split diagnostician pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Constructs the prompt for the Distiller stage (Stage B). It receives the
|
|
5
|
+
* Stage A root cause artifact as input and produces an abstracted principle
|
|
6
|
+
* grounded on core axioms (T-01..T-10).
|
|
7
|
+
*
|
|
8
|
+
* ## Prompt Sections
|
|
9
|
+
*
|
|
10
|
+
* 1. Role — principle distiller identity
|
|
11
|
+
* 2. Input — Stage A root cause output (structured data)
|
|
12
|
+
* 3. Core Axioms — T-01..T-10 list (when coreGrounding=true)
|
|
13
|
+
* 4. Output Requirements — DiagDistillerOutputV1Schema
|
|
14
|
+
* 5. Quality Guard — abstract vs rule-like distinction
|
|
15
|
+
*
|
|
16
|
+
* @see PRI-372
|
|
17
|
+
*/
|
|
18
|
+
import { DefaultSchemaPromptAdapter } from '../adapter/schema-prompt-adapter.js';
|
|
19
|
+
import { DiagDistillerOutputV1Schema } from './diag-distiller-output.js';
|
|
20
|
+
import { CORE_PRINCIPLES } from '../core-principles/core-principle-registry.js';
|
|
21
|
+
import { buildLanguageDirective } from '../language-directive.js';
|
|
22
|
+
// ── Instruction builder ──────────────────────────────────────────────────────
|
|
23
|
+
/**
|
|
24
|
+
* Build the Stage B distiller protocol instruction.
|
|
25
|
+
*
|
|
26
|
+
* When `coreGrounding` is true, the Core Axioms section is included with
|
|
27
|
+
* the full T-01..T-10 list and a strict instruction prohibiting fabricated
|
|
28
|
+
* axiom IDs. When false or undefined, the section is omitted.
|
|
29
|
+
*
|
|
30
|
+
* @see PRI-372
|
|
31
|
+
*/
|
|
32
|
+
export function buildDistillerProtocolInstruction(opts = {}) {
|
|
33
|
+
const adapter = opts.adapter ?? new DefaultSchemaPromptAdapter();
|
|
34
|
+
const schema = opts.schema ?? DiagDistillerOutputV1Schema;
|
|
35
|
+
const { outputLanguage, coreGrounding } = opts;
|
|
36
|
+
const example = adapter.generateExample(schema);
|
|
37
|
+
const constraints = adapter.generateConstraints(schema);
|
|
38
|
+
const languageDirective = buildLanguageDirective(outputLanguage);
|
|
39
|
+
// Core Axioms section — only when coreGrounding is true
|
|
40
|
+
const coreAxiomsBlock = coreGrounding
|
|
41
|
+
? `
|
|
42
|
+
CORE AXIOMS:
|
|
43
|
+
The following core axioms are the system's foundational behavioral principles.
|
|
44
|
+
You MUST only reference axiom IDs from this list. Fabricating IDs not in this
|
|
45
|
+
list will cause validation failure.
|
|
46
|
+
|
|
47
|
+
${CORE_PRINCIPLES.map(p => `${p.id}: ${p.statement}`).join('\n')}
|
|
48
|
+
|
|
49
|
+
`
|
|
50
|
+
: '';
|
|
51
|
+
return `You are a principle distiller. Your job is to abstract a specific root cause into a general, cross-scenario principle.
|
|
52
|
+
|
|
53
|
+
INPUT:
|
|
54
|
+
You will receive the Stage A root cause output as structured data. This contains:
|
|
55
|
+
- summary: a concise description of the diagnosis
|
|
56
|
+
- causalChain: the 5-Whys causal chain
|
|
57
|
+
- rootCause: the classified root cause with category prefix
|
|
58
|
+
- rootCauseCategory: People | Design | Assumption | Tooling
|
|
59
|
+
- evidence: supporting evidence entries
|
|
60
|
+
- confidence: the Stage A confidence score
|
|
61
|
+
${coreAxiomsBlock}OUTPUT REQUIREMENTS:
|
|
62
|
+
Your output MUST match the following JSON schema exactly.
|
|
63
|
+
|
|
64
|
+
COMPLETE EXAMPLE OUTPUT (follow this exact structure):
|
|
65
|
+
${example}
|
|
66
|
+
|
|
67
|
+
Key fields:
|
|
68
|
+
- abstractedPrinciple: ≤200 chars, abstract, cross-scenario principle that grows from the root cause
|
|
69
|
+
- groundedOnCorePrincipleIds: subset of the provided axiom IDs above (empty array if none apply)
|
|
70
|
+
- sourceRootCauseArtifactId: MUST match the provided artifact ID exactly
|
|
71
|
+
- scope: 'general' | 'domain' | 'scenario'
|
|
72
|
+
- rationale: why this principle addresses the root cause
|
|
73
|
+
- confidence: 0-1 scale
|
|
74
|
+
|
|
75
|
+
QUALITY GUARD:
|
|
76
|
+
Your principle must be ABSTRACT, not rule-like. Avoid concrete trigger patterns,
|
|
77
|
+
specific tools, or implementation details. A principle is directional wisdom;
|
|
78
|
+
a rule is a boundary condition.
|
|
79
|
+
|
|
80
|
+
Examples:
|
|
81
|
+
- GOOD (abstract principle): "Prefer understanding the existing structure before modifying it"
|
|
82
|
+
- BAD (rule-like): "Always run grep before editing files" or "Never use as casts"
|
|
83
|
+
- GOOD (intent over technique): "Explicitly stated user constraints take precedence over inferred optimal paths"
|
|
84
|
+
- BAD (technique-specific): "Do not create project files in /tmp directory"
|
|
85
|
+
|
|
86
|
+
CONSTRAINTS:
|
|
87
|
+
- Output ONLY valid JSON — no markdown, no explanatory text, no code fences, no prose before or after
|
|
88
|
+
- Do NOT read files, call tools, or write to any database
|
|
89
|
+
- abstractedPrinciple MUST be ≤200 characters
|
|
90
|
+
- groundedOnCorePrincipleIds MUST only contain IDs from the provided axiom list${coreGrounding ? ' above' : ''}; fabricated IDs cause validation failure
|
|
91
|
+
- sourceRootCauseArtifactId MUST match the provided artifact ID
|
|
92
|
+
${constraints}${languageDirective}`;
|
|
93
|
+
}
|
|
94
|
+
// ── Prompt builder class ─────────────────────────────────────────────────────
|
|
95
|
+
/**
|
|
96
|
+
* DistillerPromptBuilder — Stage B prompt builder for the split diagnostician pipeline.
|
|
97
|
+
*
|
|
98
|
+
* Receives the Stage A root cause artifact as input and produces an abstracted
|
|
99
|
+
* principle grounded on core axioms (T-01..T-10).
|
|
100
|
+
*
|
|
101
|
+
* Uses an opts-object pattern for all methods to satisfy @typescript-eslint/max-params.
|
|
102
|
+
*
|
|
103
|
+
* @see PRI-372
|
|
104
|
+
*/
|
|
105
|
+
export class DistillerPromptBuilder {
|
|
106
|
+
adapter;
|
|
107
|
+
schema;
|
|
108
|
+
constructor(opts = {}) {
|
|
109
|
+
this.adapter = opts.adapter ?? new DefaultSchemaPromptAdapter();
|
|
110
|
+
this.schema = opts.schema ?? DiagDistillerOutputV1Schema;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Build the Stage B distiller protocol instruction.
|
|
114
|
+
*
|
|
115
|
+
* Contains the role definition, input description, core axioms section
|
|
116
|
+
* (when coreGrounding=true), output requirements, and quality guard.
|
|
117
|
+
*
|
|
118
|
+
* @see PRI-372
|
|
119
|
+
*/
|
|
120
|
+
buildDistillerInstruction(opts = {}) {
|
|
121
|
+
return buildDistillerProtocolInstruction({
|
|
122
|
+
adapter: opts.adapter ?? this.adapter,
|
|
123
|
+
schema: opts.schema ?? this.schema,
|
|
124
|
+
outputLanguage: opts.outputLanguage,
|
|
125
|
+
coreGrounding: opts.coreGrounding,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Build the full prompt for Stage B.
|
|
130
|
+
*
|
|
131
|
+
* Constructs a DistillerPromptBuildResult containing the JSON message to pass
|
|
132
|
+
* as the --message argument to the LLM agent. The message includes the
|
|
133
|
+
* distiller instruction and the Stage A root cause context.
|
|
134
|
+
*
|
|
135
|
+
* Per DPB-02: Output is ONLY JSON — no markdown, no file ops, no tool calls.
|
|
136
|
+
* Per DPB-05: This method only builds the prompt; it does NOT commit to PD database.
|
|
137
|
+
*
|
|
138
|
+
* @see PRI-372
|
|
139
|
+
*/
|
|
140
|
+
buildPrompt(context, opts = {}) {
|
|
141
|
+
const { outputLanguage } = opts;
|
|
142
|
+
const coreGrounding = context.coreGrounding ?? opts.coreGrounding;
|
|
143
|
+
const distillerInstruction = this.buildDistillerInstruction({
|
|
144
|
+
outputLanguage,
|
|
145
|
+
coreGrounding,
|
|
146
|
+
});
|
|
147
|
+
const promptInput = {
|
|
148
|
+
rootCauseArtifactId: context.rootCauseArtifactId,
|
|
149
|
+
rootCauseOutput: context.rootCauseOutput,
|
|
150
|
+
distillerInstruction,
|
|
151
|
+
};
|
|
152
|
+
const message = JSON.stringify(promptInput);
|
|
153
|
+
return { message, promptInput };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=distiller-prompt-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distiller-prompt-builder.js","sourceRoot":"","sources":["../../../src/runtime-v2/diagnostician/distiller-prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAEhF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AA6ElE,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,UAAU,iCAAiC,CAC/C,OAAsC,EAAE;IAExC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,0BAA0B,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,2BAA2B,CAAC;IAC1D,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAE/C,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;IAEjE,wDAAwD;IACxD,MAAM,eAAe,GAAG,aAAa;QACnC,CAAC,CAAC;;;;;;EAMJ,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;CAE/D;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;;;;;EAUP,eAAe;;;;EAIf,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;iFAyBwE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;EAE5G,WAAW,GAAG,iBAAiB,EAAE,CAAC;AACpC,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;;GASG;AACH,MAAM,OAAO,sBAAsB;IAChB,OAAO,CAAsB;IAC7B,MAAM,CAAU;IAEjC,YAAY,OAAsC,EAAE;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,0BAA0B,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,2BAA2B,CAAC;IAC3D,CAAC;IAED;;;;;;;OAOG;IACH,yBAAyB,CAAC,OAAsC,EAAE;QAChE,OAAO,iCAAiC,CAAC;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YAClC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CACT,OAA8B,EAC9B,OAA2B,EAAE;QAE7B,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;QAElE,MAAM,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CAAC;YAC1D,cAAc;YACd,aAAa;SACd,CAAC,CAAC;QAEH,MAAM,WAAW,GAAyB;YACxC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,oBAAoB;SACrB,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAE5C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RootCausePromptBuilder — Stage A prompt builder for the split diagnostician pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Constructs the prompt for the Root Cause stage (Stage A), which identifies
|
|
5
|
+
* the underlying cause of a pain signal using a 5-Whys causal chain and
|
|
6
|
+
* categorises it into one of four root-cause categories.
|
|
7
|
+
*
|
|
8
|
+
* ## Phases
|
|
9
|
+
*
|
|
10
|
+
* - PHASE 1 — Evidence Review
|
|
11
|
+
* - PHASE 2 — Causal Chain (5 Whys)
|
|
12
|
+
* - PHASE 3 — Root Cause Classification
|
|
13
|
+
* - PHASE 3.5 — Core Axiom Grounding (when coreGrounding=true, PRI-371)
|
|
14
|
+
*
|
|
15
|
+
* ## Output
|
|
16
|
+
*
|
|
17
|
+
* The prompt requires output matching DiagRootCauseOutputV1Schema.
|
|
18
|
+
*
|
|
19
|
+
* @see PRI-372
|
|
20
|
+
*/
|
|
21
|
+
import type { TSchema } from '@sinclair/typebox';
|
|
22
|
+
import type { SchemaPromptAdapter } from '../adapter/schema-prompt-adapter.js';
|
|
23
|
+
import type { DiagnosticianContextPayload } from '../context-payload.js';
|
|
24
|
+
import type { OutputLanguage } from '../language-directive.js';
|
|
25
|
+
import type { BuildPromptOptions, PromptBuildResult } from '../diagnostician-prompt-builder.js';
|
|
26
|
+
/**
|
|
27
|
+
* Options for RootCausePromptBuilder constructor and buildRootCauseInstruction.
|
|
28
|
+
*
|
|
29
|
+
* Uses an opts-object pattern to satisfy @typescript-eslint/max-params.
|
|
30
|
+
*
|
|
31
|
+
* @see PRI-372
|
|
32
|
+
*/
|
|
33
|
+
export interface RootCausePromptBuilderOptions {
|
|
34
|
+
/** Schema prompt adapter (default: DefaultSchemaPromptAdapter) */
|
|
35
|
+
adapter?: SchemaPromptAdapter;
|
|
36
|
+
/** TypeBox schema for output validation (default: DiagRootCauseOutputV1Schema) */
|
|
37
|
+
schema?: TSchema;
|
|
38
|
+
/** Output language directive (default: none) */
|
|
39
|
+
outputLanguage?: OutputLanguage;
|
|
40
|
+
/** T-E (PRI-371): Inject core axiom grounding as PHASE 3.5 (default: false) */
|
|
41
|
+
coreGrounding?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Build the Stage A diagnostic protocol instruction (PHASE 1–3 + optional PHASE 3.5).
|
|
45
|
+
*
|
|
46
|
+
* Per DPB-02 (LOCKED): Output is ONLY JSON — no markdown, no file ops, no tool calls.
|
|
47
|
+
* Per DPB-04: LLM can only analyse the context provided in the prompt; it must NOT
|
|
48
|
+
* read files, call tools, or write to databases.
|
|
49
|
+
*
|
|
50
|
+
* When `coreGrounding` is true, PHASE 3.5 (Core Axiom Grounding) is inserted
|
|
51
|
+
* between PHASE 3 and the final output instruction. When false or undefined,
|
|
52
|
+
* a newline is inserted to preserve byte-identical output (EP-03: no silent fallback).
|
|
53
|
+
*
|
|
54
|
+
* @see PRI-372
|
|
55
|
+
*/
|
|
56
|
+
export declare function buildRootCauseProtocolInstruction(opts?: RootCausePromptBuilderOptions): string;
|
|
57
|
+
/**
|
|
58
|
+
* RootCausePromptBuilder — Stage A prompt builder for the split diagnostician pipeline.
|
|
59
|
+
*
|
|
60
|
+
* Transforms DiagnosticianContextPayload into a PromptBuildResult for the
|
|
61
|
+
* Root Cause stage (Stage A). The output prompt requires the LLM to produce
|
|
62
|
+
* JSON matching DiagRootCauseOutputV1Schema.
|
|
63
|
+
*
|
|
64
|
+
* Uses an opts-object pattern for all methods to satisfy @typescript-eslint/max-params.
|
|
65
|
+
*
|
|
66
|
+
* @see PRI-372
|
|
67
|
+
*/
|
|
68
|
+
export declare class RootCausePromptBuilder {
|
|
69
|
+
private readonly adapter;
|
|
70
|
+
private readonly schema;
|
|
71
|
+
constructor(opts?: RootCausePromptBuilderOptions);
|
|
72
|
+
/**
|
|
73
|
+
* Build the Stage A diagnostic protocol instruction.
|
|
74
|
+
*
|
|
75
|
+
* Contains PHASE 1 (evidence review), PHASE 2 (causal chain / 5-Whys),
|
|
76
|
+
* PHASE 3 (root cause classification), and optional PHASE 3.5 (core axiom
|
|
77
|
+
* grounding when coreGrounding=true).
|
|
78
|
+
*
|
|
79
|
+
* @see PRI-372
|
|
80
|
+
*/
|
|
81
|
+
buildRootCauseInstruction(opts?: RootCausePromptBuilderOptions): string;
|
|
82
|
+
/**
|
|
83
|
+
* Build the full prompt for Stage A.
|
|
84
|
+
*
|
|
85
|
+
* Transforms DiagnosticianContextPayload into a PromptBuildResult containing
|
|
86
|
+
* the JSON message to pass as the --message argument to the LLM agent.
|
|
87
|
+
*
|
|
88
|
+
* Per DPB-02: Output is ONLY JSON — no markdown, no file ops, no tool calls.
|
|
89
|
+
* Per DPB-05: This method only builds the prompt; it does NOT commit to PD database.
|
|
90
|
+
* Per DPB-07: NO extraSystemPrompt is added — agent profile is the source of truth.
|
|
91
|
+
*
|
|
92
|
+
* @see PRI-372
|
|
93
|
+
*/
|
|
94
|
+
buildPrompt(payload: DiagnosticianContextPayload, opts?: BuildPromptOptions): PromptBuildResult;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=rootcause-prompt-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rootcause-prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/diagnostician/rootcause-prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAG/E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,oCAAoC,CAAC;AAS5C;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,kEAAkE;IAClE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,kFAAkF;IAClF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,+EAA+E;IAC/E,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,GAAE,6BAAkC,GACvC,MAAM,CAsER;AAID;;;;;;;;;;GAUG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAErB,IAAI,GAAE,6BAAkC;IAKpD;;;;;;;;OAQG;IACH,yBAAyB,CAAC,IAAI,GAAE,6BAAkC,GAAG,MAAM;IAS3E;;;;;;;;;;;OAWG;IACH,WAAW,CACT,OAAO,EAAE,2BAA2B,EACpC,IAAI,GAAE,kBAAuB,GAC5B,iBAAiB;CAwErB"}
|