@principles/pd-cli 1.158.7 → 1.159.1
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/commands/codex-worker.d.ts.map +1 -1
- package/dist/commands/codex-worker.js +6 -11
- package/dist/commands/codex-worker.js.map +1 -1
- package/dist/commands/pain-recall.d.ts +30 -0
- package/dist/commands/pain-recall.d.ts.map +1 -0
- package/dist/commands/pain-recall.js +155 -0
- package/dist/commands/pain-recall.js.map +1 -0
- package/dist/commands/workbuddy-worker.d.ts.map +1 -1
- package/dist/commands/workbuddy-worker.js +6 -11
- package/dist/commands/workbuddy-worker.js.map +1 -1
- package/dist/commands/worker-drain.d.ts +7 -0
- package/dist/commands/worker-drain.d.ts.map +1 -0
- package/dist/commands/worker-drain.js +51 -0
- package/dist/commands/worker-drain.js.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/services/pain-recall.d.ts +113 -0
- package/dist/services/pain-recall.d.ts.map +1 -0
- package/dist/services/pain-recall.js +444 -0
- package/dist/services/pain-recall.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pain Recall read model — SPEC-PD-PAIN-RECALL-CLI-001.
|
|
3
|
+
*
|
|
4
|
+
* Resolves a canonical ledger principle to its verifiably-associated
|
|
5
|
+
* historical pains through the two authoritative edges only:
|
|
6
|
+
*
|
|
7
|
+
* 1. `Principle.reuseEvidence[]` — carries a REAL `painId` (validated at
|
|
8
|
+
* the ledger write boundary, appendReuseEvidence);
|
|
9
|
+
* 2. `Principle.derivedFromPainIds[]` — stores CANDIDATE ids despite its
|
|
10
|
+
* legacy pain-oriented name (see PainChainReadModel's linkage note);
|
|
11
|
+
* the pain resolves through candidate → task → `tasks.input_ref`
|
|
12
|
+
* (fallback: the `diagnosis_<painId>` task-id spelling).
|
|
13
|
+
*
|
|
14
|
+
* Anything not reachable through those edges is excluded and REPORTED
|
|
15
|
+
* (unresolvedAssociations) — never guessed from text similarity, never
|
|
16
|
+
* resolved through candidateId/taskId/artifactId masquerading as pain ids.
|
|
17
|
+
*
|
|
18
|
+
* Strictly read-only: the ledger through readLedgerFileState, trajectory.db
|
|
19
|
+
* through openTrajectoryDbReadonly, state.db through RuntimeStateManager with
|
|
20
|
+
* readonly:true + bootstrapIfMissing:false. Missing stays missing; unreadable
|
|
21
|
+
* stays unreadable; neither is ever reported as an empty result.
|
|
22
|
+
*/
|
|
23
|
+
import * as fs from 'fs';
|
|
24
|
+
import * as path from 'path';
|
|
25
|
+
import { readLedgerFileState } from '@principles/core/principle-tree-ledger';
|
|
26
|
+
import { openTrajectoryDbReadonly } from '@principles/core/trajectory-store';
|
|
27
|
+
import { RuntimeStateManager } from '@principles/core/runtime-v2';
|
|
28
|
+
export const PAIN_RECALL_SCHEMA_VERSION = 'pd.pain-recall.v1';
|
|
29
|
+
export const PAIN_RECALL_DEFAULT_LIMIT = 3;
|
|
30
|
+
export const PAIN_RECALL_MIN_LIMIT = 1;
|
|
31
|
+
export const PAIN_RECALL_MAX_LIMIT = 10;
|
|
32
|
+
function emptyResult(input) {
|
|
33
|
+
const { query, status } = input;
|
|
34
|
+
return {
|
|
35
|
+
schemaVersion: PAIN_RECALL_SCHEMA_VERSION,
|
|
36
|
+
status,
|
|
37
|
+
principle: { requestedId: query.requestedPrincipleId, canonicalId: null, identityStatus: 'not_found' },
|
|
38
|
+
query: {
|
|
39
|
+
limit: query.limit,
|
|
40
|
+
...(query.painId !== undefined ? { painId: query.painId } : {}),
|
|
41
|
+
contextUsedForRanking: false,
|
|
42
|
+
truncated: false,
|
|
43
|
+
},
|
|
44
|
+
results: [],
|
|
45
|
+
summary: { returned: 0, availableCandidates: 0, truncated: false },
|
|
46
|
+
sources: input.sources,
|
|
47
|
+
unresolvedAssociations: [],
|
|
48
|
+
...input.overwrites,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// ── Deterministic local ranking (no model, no network) ───────────────────────
|
|
52
|
+
/** Latin/digit runs plus individual Han characters — deterministic, locale-free. */
|
|
53
|
+
function tokenize(text) {
|
|
54
|
+
const tokens = text.toLowerCase().match(/[a-z0-9]+/g) ?? [];
|
|
55
|
+
const han = text.match(/\p{Script=Han}/gu) ?? [];
|
|
56
|
+
return [...tokens, ...han];
|
|
57
|
+
}
|
|
58
|
+
function contextOverlapScore(contextTokens, doc) {
|
|
59
|
+
if (contextTokens.size === 0)
|
|
60
|
+
return 0;
|
|
61
|
+
const docTokens = new Set(tokenize(doc));
|
|
62
|
+
let score = 0;
|
|
63
|
+
for (const token of contextTokens) {
|
|
64
|
+
if (docTokens.has(token))
|
|
65
|
+
score += 1;
|
|
66
|
+
}
|
|
67
|
+
return score;
|
|
68
|
+
}
|
|
69
|
+
// ── Row guards (rc-1/rc-4: every DB/ledger value is guarded before use) ──────
|
|
70
|
+
function isRecord(value) {
|
|
71
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
72
|
+
}
|
|
73
|
+
function ownString(row, key) {
|
|
74
|
+
const value = row[key];
|
|
75
|
+
return typeof value === 'string' && value.length > 0 ? value : null;
|
|
76
|
+
}
|
|
77
|
+
function safeParseRecord(json) {
|
|
78
|
+
try {
|
|
79
|
+
const parsed = JSON.parse(json);
|
|
80
|
+
return isRecord(parsed) ? parsed : null;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// ── Main entry ───────────────────────────────────────────────────────────────
|
|
87
|
+
export async function recallPains(workspaceDir, query) {
|
|
88
|
+
// 1. Ledger — the identity authority. Missing/unreadable is a source-level
|
|
89
|
+
// failure, never a silent empty ledger.
|
|
90
|
+
const ledgerState = readLedgerFileState(path.join(workspaceDir, '.state'));
|
|
91
|
+
const ledgerAvailability = ledgerState.availability.status === 'ok'
|
|
92
|
+
? 'ok'
|
|
93
|
+
: ledgerState.availability.status === 'empty'
|
|
94
|
+
? 'missing'
|
|
95
|
+
: 'unreadable';
|
|
96
|
+
if (ledgerAvailability !== 'ok') {
|
|
97
|
+
return emptyResult({
|
|
98
|
+
query,
|
|
99
|
+
status: ledgerAvailability === 'missing' ? 'source_missing' : 'source_unreadable',
|
|
100
|
+
sources: { ledger: ledgerAvailability, trajectoryDb: 'not_checked', stateDb: 'not_checked' },
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// 2. Canonical identity: exact ledger-key match only. Display titles and
|
|
104
|
+
// draft ids never resolve (there is no title lookup at all).
|
|
105
|
+
const principleEntry = ledgerState.ledger.tree.principles[query.requestedPrincipleId];
|
|
106
|
+
if (!isRecord(principleEntry) || ownString(principleEntry, 'id') === null) {
|
|
107
|
+
return emptyResult({
|
|
108
|
+
query,
|
|
109
|
+
status: 'principle_not_found',
|
|
110
|
+
sources: { ledger: 'ok', trajectoryDb: 'not_checked', stateDb: 'not_checked' },
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
const canonicalId = query.requestedPrincipleId;
|
|
114
|
+
const principleText = ownString(principleEntry, 'text');
|
|
115
|
+
// 3. state.db — strict readonly, no bootstrap. Missing/unreadable keeps the
|
|
116
|
+
// reuse-evidence edges alive and only degrades lineage + diagnoses.
|
|
117
|
+
const stateDbPath = path.join(workspaceDir, '.pd', 'state.db');
|
|
118
|
+
let stateDb = 'ok';
|
|
119
|
+
let manager = null;
|
|
120
|
+
if (!fs.existsSync(stateDbPath)) {
|
|
121
|
+
stateDb = 'missing';
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
try {
|
|
125
|
+
manager = new RuntimeStateManager({ workspaceDir, readonly: true, bootstrapIfMissing: false });
|
|
126
|
+
await manager.initialize();
|
|
127
|
+
// getDb() is lazy — force the readonly open NOW so a present-but-corrupt
|
|
128
|
+
// file is classified unreadable instead of surfacing per-query later.
|
|
129
|
+
// SQLite defers the header check to the first statement, hence the
|
|
130
|
+
// read-only liveness probe (SELECT 1 writes nothing).
|
|
131
|
+
manager.connection.getDb().prepare('SELECT 1 AS probe').get();
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
manager = null;
|
|
135
|
+
stateDb = 'unreadable';
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
// 4. trajectory.db — the pain-event authority. Missing/unreadable is a
|
|
140
|
+
// source-level failure (recall's subject is the pain history itself).
|
|
141
|
+
let trajectoryDb;
|
|
142
|
+
try {
|
|
143
|
+
trajectoryDb = openTrajectoryDbReadonly(workspaceDir);
|
|
144
|
+
// SQLite defers the file-header check to the first statement (same as
|
|
145
|
+
// state.db above): probe pain_events NOW so a corrupt file or a
|
|
146
|
+
// schema-less database falls into the source_unreadable classification
|
|
147
|
+
// instead of escaping as a raw query error. Close before rethrowing so
|
|
148
|
+
// no handle leaks into the failure path.
|
|
149
|
+
try {
|
|
150
|
+
trajectoryDb.prepare('SELECT 1 FROM pain_events LIMIT 1').get();
|
|
151
|
+
}
|
|
152
|
+
catch (probeErr) {
|
|
153
|
+
trajectoryDb.close();
|
|
154
|
+
throw probeErr;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
const missing = !fs.existsSync(path.join(workspaceDir, '.state', 'trajectory.db'));
|
|
159
|
+
return emptyResult({
|
|
160
|
+
query,
|
|
161
|
+
status: missing ? 'source_missing' : 'source_unreadable',
|
|
162
|
+
sources: { ledger: 'ok', trajectoryDb: missing ? 'missing' : 'unreadable', stateDb },
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
try {
|
|
166
|
+
// 5. Association edges from the two authoritative sources.
|
|
167
|
+
const unresolved = [];
|
|
168
|
+
const edges = [];
|
|
169
|
+
const { reuseEvidence } = principleEntry;
|
|
170
|
+
if (Array.isArray(reuseEvidence)) {
|
|
171
|
+
for (const entry of reuseEvidence) {
|
|
172
|
+
if (!isRecord(entry))
|
|
173
|
+
continue;
|
|
174
|
+
const painId = ownString(entry, 'painId');
|
|
175
|
+
const candidateId = ownString(entry, 'candidateId');
|
|
176
|
+
if (painId === null || candidateId === null)
|
|
177
|
+
continue; // malformed row: not a verifiable edge
|
|
178
|
+
edges.push({
|
|
179
|
+
painId,
|
|
180
|
+
explicit: true,
|
|
181
|
+
ref: {
|
|
182
|
+
kind: 'reuse_evidence',
|
|
183
|
+
candidateId,
|
|
184
|
+
...(ownString(entry, 'decidedAt') !== null ? { decidedAt: ownString(entry, 'decidedAt') ?? undefined } : {}),
|
|
185
|
+
...(ownString(entry, 'decisionId') !== null ? { decisionId: ownString(entry, 'decisionId') ?? undefined } : {}),
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const derivedIds = principleEntry.derivedFromPainIds;
|
|
191
|
+
if (Array.isArray(derivedIds)) {
|
|
192
|
+
for (const value of derivedIds) {
|
|
193
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
194
|
+
continue;
|
|
195
|
+
const candidateId = value; // candidate id by production contract, despite the field name
|
|
196
|
+
if (manager === null) {
|
|
197
|
+
unresolved.push({ candidateId, reason: 'state_db_unavailable' });
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
let candidateTaskId = null;
|
|
201
|
+
try {
|
|
202
|
+
const candidate = await manager.getCandidate(candidateId);
|
|
203
|
+
candidateTaskId = candidate !== null && typeof candidate.taskId === 'string' && candidate.taskId.length > 0
|
|
204
|
+
? candidate.taskId
|
|
205
|
+
: null;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
unresolved.push({ candidateId, reason: 'candidate_query_failed' });
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
if (candidateTaskId === null) {
|
|
212
|
+
unresolved.push({ candidateId, reason: 'candidate_not_found' });
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
let painId = null;
|
|
216
|
+
try {
|
|
217
|
+
const task = await manager.getTask(candidateTaskId);
|
|
218
|
+
const inputRef = task !== null && typeof task.inputRef === 'string' && task.inputRef.length > 0
|
|
219
|
+
? task.inputRef
|
|
220
|
+
: null;
|
|
221
|
+
painId = inputRef;
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
painId = null;
|
|
225
|
+
}
|
|
226
|
+
if (painId === null && candidateTaskId.startsWith('diagnosis_') && candidateTaskId.length > 'diagnosis_'.length) {
|
|
227
|
+
painId = candidateTaskId.slice('diagnosis_'.length); // authoritative task-id spelling fallback
|
|
228
|
+
}
|
|
229
|
+
if (painId === null) {
|
|
230
|
+
unresolved.push({ candidateId, reason: 'pain_unresolvable_from_candidate' });
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
edges.push({
|
|
234
|
+
painId,
|
|
235
|
+
explicit: false,
|
|
236
|
+
ref: { kind: 'candidate_lineage', candidateId, taskId: candidateTaskId },
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// 6. Merge by real pain id — all evidence refs survive the merge.
|
|
241
|
+
const merged = new Map();
|
|
242
|
+
for (const edge of edges) {
|
|
243
|
+
const existing = merged.get(edge.painId);
|
|
244
|
+
if (existing) {
|
|
245
|
+
existing.refs.push(edge.ref);
|
|
246
|
+
existing.explicit = existing.explicit || edge.explicit;
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
merged.set(edge.painId, { painId: edge.painId, refs: [edge.ref], explicit: edge.explicit });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// 7. Pain events: an edge whose pain has no persisted event is reported,
|
|
253
|
+
// not returned, and not silently dropped.
|
|
254
|
+
const painRows = new Map();
|
|
255
|
+
const selectPain = trajectoryDb.prepare('SELECT id, source, score, severity, text, reason, canonical_pain_id, runtime_task_id, host_kind, created_at FROM pain_events WHERE canonical_pain_id = ? ORDER BY created_at DESC, id DESC LIMIT 1');
|
|
256
|
+
for (const painId of [...merged.keys()]) {
|
|
257
|
+
const row = selectPain.get(painId);
|
|
258
|
+
if (!isRecord(row)) {
|
|
259
|
+
unresolved.push({ painId, reason: 'pain_event_not_found' });
|
|
260
|
+
merged.delete(painId);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
painRows.set(painId, row);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// 8. --pain-id: filters WITHIN the verified association set only.
|
|
267
|
+
if (query.painId !== undefined) {
|
|
268
|
+
if (!merged.has(query.painId)) {
|
|
269
|
+
const exists = isRecord(selectPain.get(query.painId) ?? null);
|
|
270
|
+
return emptyResult({
|
|
271
|
+
query,
|
|
272
|
+
status: 'pain_not_found',
|
|
273
|
+
sources: { ledger: 'ok', trajectoryDb: 'ok', stateDb },
|
|
274
|
+
overwrites: { statusDetail: exists ? 'not_associated' : 'pain_event_not_found' },
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
for (const painId of [...merged.keys()]) {
|
|
278
|
+
if (painId !== query.painId)
|
|
279
|
+
merged.delete(painId);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// 9. Per-pain enrichment (diagnoses + persisted correction evidence).
|
|
283
|
+
const entries = [];
|
|
284
|
+
for (const [painId, edge] of merged) {
|
|
285
|
+
const row = painRows.get(painId);
|
|
286
|
+
if (!isRecord(row))
|
|
287
|
+
continue; // step 7 guaranteed presence; guard anyway (rc-1)
|
|
288
|
+
const pain = {
|
|
289
|
+
occurredAt: ownString(row, 'created_at'),
|
|
290
|
+
source: ownString(row, 'source'),
|
|
291
|
+
host: ownString(row, 'host_kind') ?? 'unknown',
|
|
292
|
+
score: typeof row.score === 'number' ? row.score : null,
|
|
293
|
+
severity: ownString(row, 'severity'),
|
|
294
|
+
reason: ownString(row, 'reason'),
|
|
295
|
+
text: ownString(row, 'text'),
|
|
296
|
+
rawStatement: null,
|
|
297
|
+
};
|
|
298
|
+
let diagnoses = [];
|
|
299
|
+
// Every branch below assigns this before use (CodeQL useless-init).
|
|
300
|
+
let diagnosesAvailability;
|
|
301
|
+
let correction = null;
|
|
302
|
+
// Initializer is meaningful: a successful read with no persisted
|
|
303
|
+
// correction evidence keeps this 'not_recorded'.
|
|
304
|
+
let correctionAvailability = 'not_recorded';
|
|
305
|
+
if (manager === null) {
|
|
306
|
+
diagnosesAvailability = 'unreadable';
|
|
307
|
+
correctionAvailability = 'unreadable';
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
try {
|
|
311
|
+
const records = await manager.getDiagnosesByPainId(painId);
|
|
312
|
+
diagnoses = records.map((record) => ({
|
|
313
|
+
diagnosisId: record.diagnosisId,
|
|
314
|
+
taskId: record.taskId,
|
|
315
|
+
category: record.category,
|
|
316
|
+
rootCause: record.rootCause,
|
|
317
|
+
supportingEvidence: record.evidence.map((e) => ({ sourceRef: e.sourceRef, note: e.note })),
|
|
318
|
+
confidence: record.confidence,
|
|
319
|
+
isOriginalOwnerStatement: false,
|
|
320
|
+
}));
|
|
321
|
+
diagnosesAvailability = diagnoses.length > 0 ? 'available' : 'not_recorded';
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
diagnosesAvailability = 'unreadable';
|
|
325
|
+
}
|
|
326
|
+
try {
|
|
327
|
+
const diagnosisTask = await manager.getTask(`diagnosis_${painId}`);
|
|
328
|
+
const payload = diagnosisTask !== null && typeof diagnosisTask.diagnosticJson === 'string'
|
|
329
|
+
? safeParseRecord(diagnosisTask.diagnosticJson)
|
|
330
|
+
: null;
|
|
331
|
+
const persisted = payload !== null ? payload.correctionEvidence : undefined;
|
|
332
|
+
if (isRecord(persisted) && typeof persisted.text === 'string' && persisted.text.length > 0) {
|
|
333
|
+
correction = {
|
|
334
|
+
text: persisted.text,
|
|
335
|
+
...(ownString(persisted, 'classification') !== null ? { classification: ownString(persisted, 'classification') ?? undefined } : {}),
|
|
336
|
+
...(ownString(persisted, 'channel') !== null ? { channel: ownString(persisted, 'channel') ?? undefined } : {}),
|
|
337
|
+
...(ownString(persisted, 'sessionId') !== null ? { sessionId: ownString(persisted, 'sessionId') ?? undefined } : {}),
|
|
338
|
+
...(ownString(persisted, 'occurredAt') !== null ? { occurredAt: ownString(persisted, 'occurredAt') ?? undefined } : {}),
|
|
339
|
+
};
|
|
340
|
+
correctionAvailability = 'available';
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
correctionAvailability = 'unreadable';
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
const type = edge.refs.length > 1
|
|
348
|
+
? 'multiple_paths'
|
|
349
|
+
: edge.explicit
|
|
350
|
+
? 'explicit_reuse'
|
|
351
|
+
: 'derived_from';
|
|
352
|
+
const lineage = [];
|
|
353
|
+
for (const ref of edge.refs) {
|
|
354
|
+
if (ref.kind === 'candidate_lineage') {
|
|
355
|
+
lineage.push({ from: `principle:${canonicalId}`, to: ref.candidateId, relation: 'derived_from_pain_ids' });
|
|
356
|
+
lineage.push({ from: ref.candidateId, to: painId, relation: 'task_input_ref' });
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
lineage.push({ from: `principle:${canonicalId}`, to: painId, relation: 'reuse_evidence_pain_id' });
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
entries.push({
|
|
363
|
+
painId,
|
|
364
|
+
association: {
|
|
365
|
+
type,
|
|
366
|
+
confidence: edge.explicit ? 'explicit' : 'lineage_verified',
|
|
367
|
+
evidenceRefs: edge.refs,
|
|
368
|
+
},
|
|
369
|
+
pain,
|
|
370
|
+
diagnoses,
|
|
371
|
+
correctionEvidence: correction,
|
|
372
|
+
availability: { painEvent: 'available', diagnoses: diagnosesAvailability, correctionEvidence: correctionAvailability },
|
|
373
|
+
lineage,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
// 10. Deterministic ranking. Default: explicit evidence first, then
|
|
377
|
+
// newest pain first, then pain id. --context only re-orders this
|
|
378
|
+
// list by local token overlap — it never adds associations.
|
|
379
|
+
const contextTokens = new Set(typeof query.context === 'string' ? tokenize(query.context) : []);
|
|
380
|
+
const contextUsed = contextTokens.size > 0;
|
|
381
|
+
const rankOf = (entry) => (entry.association.confidence === 'explicit' ? 0 : 1);
|
|
382
|
+
const scored = entries.map((entry) => ({
|
|
383
|
+
entry,
|
|
384
|
+
score: contextUsed
|
|
385
|
+
? contextOverlapScore(contextTokens, [entry.pain.reason ?? '', entry.pain.text ?? '', ...entry.diagnoses.map((d) => d.rootCause)].join(' '))
|
|
386
|
+
: 0,
|
|
387
|
+
}));
|
|
388
|
+
scored.sort((a, b) => {
|
|
389
|
+
if (b.score !== a.score)
|
|
390
|
+
return b.score - a.score;
|
|
391
|
+
const rankDelta = rankOf(a.entry) - rankOf(b.entry);
|
|
392
|
+
if (rankDelta !== 0)
|
|
393
|
+
return rankDelta;
|
|
394
|
+
const aTime = a.entry.pain.occurredAt ?? '';
|
|
395
|
+
const bTime = b.entry.pain.occurredAt ?? '';
|
|
396
|
+
if (aTime !== bTime)
|
|
397
|
+
return aTime < bTime ? 1 : -1; // newest first
|
|
398
|
+
return a.entry.painId < b.entry.painId ? -1 : 1;
|
|
399
|
+
});
|
|
400
|
+
const ranked = scored.map((s) => s.entry);
|
|
401
|
+
// 11. Limit + truncation.
|
|
402
|
+
const truncated = ranked.length > query.limit;
|
|
403
|
+
const results = ranked.slice(0, query.limit);
|
|
404
|
+
// 12. Top-level status: distinguish "nothing recorded" from "cannot read".
|
|
405
|
+
let status;
|
|
406
|
+
if (results.length === 0) {
|
|
407
|
+
status = unresolved.length > 0 ? 'partial' : 'no_matches';
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
const degraded = results.some((r) => r.availability.diagnoses === 'unreadable' || r.availability.correctionEvidence === 'unreadable');
|
|
411
|
+
status = degraded ? 'partial' : 'ok';
|
|
412
|
+
}
|
|
413
|
+
return {
|
|
414
|
+
schemaVersion: PAIN_RECALL_SCHEMA_VERSION,
|
|
415
|
+
status,
|
|
416
|
+
principle: {
|
|
417
|
+
requestedId: query.requestedPrincipleId,
|
|
418
|
+
canonicalId,
|
|
419
|
+
identityStatus: 'resolved',
|
|
420
|
+
...(principleText !== null ? { text: principleText } : {}),
|
|
421
|
+
},
|
|
422
|
+
query: {
|
|
423
|
+
limit: query.limit,
|
|
424
|
+
...(query.painId !== undefined ? { painId: query.painId } : {}),
|
|
425
|
+
contextUsedForRanking: contextUsed,
|
|
426
|
+
truncated,
|
|
427
|
+
},
|
|
428
|
+
results,
|
|
429
|
+
summary: { returned: results.length, availableCandidates: ranked.length, truncated },
|
|
430
|
+
sources: { ledger: 'ok', trajectoryDb: 'ok', stateDb },
|
|
431
|
+
unresolvedAssociations: unresolved,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
finally {
|
|
435
|
+
trajectoryDb.close();
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
finally {
|
|
439
|
+
if (manager !== null) {
|
|
440
|
+
await manager.close().catch(() => undefined);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
//# sourceMappingURL=pain-recall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pain-recall.js","sourceRoot":"","sources":["../../src/services/pain-recall.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@principles/pd-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.159.1",
|
|
4
4
|
"description": "PD CLI — Pain recording, sample management, and governance tasks for Principles Disciple",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"test": "vitest run"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@principles/core": "^1.296.
|
|
25
|
-
"@principles/codex-adapter": "^0.5.
|
|
26
|
-
"@principles/workbuddy-adapter": "^0.2.
|
|
24
|
+
"@principles/core": "^1.296.1",
|
|
25
|
+
"@principles/codex-adapter": "^0.5.13",
|
|
26
|
+
"@principles/workbuddy-adapter": "^0.2.11",
|
|
27
27
|
"@principles/host-runtime": "^0.13.0",
|
|
28
28
|
"@principles/install-layout": "^0.4.0",
|
|
29
|
-
"principles-disciple": "^2.2.
|
|
29
|
+
"principles-disciple": "^2.2.1",
|
|
30
30
|
"better-sqlite3": "^13.0.3",
|
|
31
31
|
"commander": "^12.0.0",
|
|
32
32
|
"js-yaml": "^5.4.3"
|